@growsober/sdk 1.0.2 → 1.0.4
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/mutations/auth.js +7 -7
- package/dist/api/mutations/event-chat.d.ts +10 -27
- package/dist/api/mutations/index.d.ts +1 -0
- package/dist/api/mutations/index.js +2 -1
- package/dist/api/mutations/user-pins.d.ts +132 -0
- package/dist/api/mutations/user-pins.js +158 -0
- package/dist/api/queries/index.d.ts +1 -0
- package/dist/api/queries/index.js +2 -1
- package/dist/api/queries/user-pins.d.ts +134 -0
- package/dist/api/queries/user-pins.js +141 -0
- package/package.json +1 -1
- package/src/api/mutations/auth.ts +6 -6
- package/src/api/mutations/index.ts +1 -0
- package/src/api/mutations/user-pins.ts +186 -0
- package/src/api/queries/index.ts +1 -0
- package/src/api/queries/user-pins.ts +193 -0
|
@@ -66,7 +66,7 @@ function useRegister(options) {
|
|
|
66
66
|
return (0, react_query_1.useMutation)({
|
|
67
67
|
mutationFn: async (data) => {
|
|
68
68
|
const client = (0, client_1.getApiClient)();
|
|
69
|
-
const response = await client.post('/auth/register', data);
|
|
69
|
+
const response = await client.post('/api/v1/auth/register', data);
|
|
70
70
|
return response.data;
|
|
71
71
|
},
|
|
72
72
|
onSuccess: (data, variables, context) => {
|
|
@@ -137,7 +137,7 @@ function useLogin(options) {
|
|
|
137
137
|
return (0, react_query_1.useMutation)({
|
|
138
138
|
mutationFn: async (data) => {
|
|
139
139
|
const client = (0, client_1.getApiClient)();
|
|
140
|
-
const response = await client.post('/auth/login', data);
|
|
140
|
+
const response = await client.post('/api/v1/auth/login', data);
|
|
141
141
|
return response.data;
|
|
142
142
|
},
|
|
143
143
|
onSuccess: (data, variables, context) => {
|
|
@@ -225,7 +225,7 @@ function useRefreshAuthToken(options) {
|
|
|
225
225
|
return (0, react_query_1.useMutation)({
|
|
226
226
|
mutationFn: async (data) => {
|
|
227
227
|
const client = (0, client_1.getApiClient)();
|
|
228
|
-
const response = await client.post('/auth/refresh', data);
|
|
228
|
+
const response = await client.post('/api/v1/auth/refresh', data);
|
|
229
229
|
return response.data;
|
|
230
230
|
},
|
|
231
231
|
...options,
|
|
@@ -320,7 +320,7 @@ function useFirebaseAuth(options) {
|
|
|
320
320
|
return (0, react_query_1.useMutation)({
|
|
321
321
|
mutationFn: async (data) => {
|
|
322
322
|
const client = (0, client_1.getApiClient)();
|
|
323
|
-
const response = await client.post('/auth/firebase', data);
|
|
323
|
+
const response = await client.post('/api/v1/auth/firebase', data);
|
|
324
324
|
return response.data;
|
|
325
325
|
},
|
|
326
326
|
onSuccess: (data, variables, context) => {
|
|
@@ -370,7 +370,7 @@ function useSendOtp(options) {
|
|
|
370
370
|
return (0, react_query_1.useMutation)({
|
|
371
371
|
mutationFn: async (data) => {
|
|
372
372
|
const client = (0, client_1.getApiClient)();
|
|
373
|
-
const response = await client.post('/auth/phone/send-otp', data);
|
|
373
|
+
const response = await client.post('/api/v1/auth/phone/send-otp', data);
|
|
374
374
|
return response.data;
|
|
375
375
|
},
|
|
376
376
|
...options,
|
|
@@ -420,7 +420,7 @@ function useVerifyOtp(options) {
|
|
|
420
420
|
return (0, react_query_1.useMutation)({
|
|
421
421
|
mutationFn: async (data) => {
|
|
422
422
|
const client = (0, client_1.getApiClient)();
|
|
423
|
-
const response = await client.post('/auth/phone/verify-otp', data);
|
|
423
|
+
const response = await client.post('/api/v1/auth/phone/verify-otp', data);
|
|
424
424
|
return response.data;
|
|
425
425
|
},
|
|
426
426
|
onSuccess: (data, variables, context) => {
|
|
@@ -430,4 +430,4 @@ function useVerifyOtp(options) {
|
|
|
430
430
|
...options,
|
|
431
431
|
});
|
|
432
432
|
}
|
|
433
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvbXV0YXRpb25zL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7O0FBOERILGtDQWtCQztBQXlERCw0QkFrQkM7QUEyRUQsa0RBV0M7QUFzRkQsMENBa0JDO0FBMENELGdDQVdDO0FBeUNELG9DQWlCQztBQXRjRCx1REFBMkc7QUFDM0csc0NBQXlDO0FBQ3pDLDRDQUE0QztBQWE1QywrRUFBK0U7QUFDL0UsaUJBQWlCO0FBQ2pCLCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQUNILFNBQWdCLFdBQVcsQ0FDekIsT0FBc0Y7SUFFdEYsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFxQixFQUF5QixFQUFFO1lBQ2pFLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBZSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDdEMsa0VBQWtFO1lBQ2xFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxnQkFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzRCxtREFBbUQ7UUFDckQsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Q0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsT0FBNEY7SUFFNUYsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFzQixFQUE4QixFQUFFO1lBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBb0Isd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEYsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3RDLGtFQUFrRTtZQUNsRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dGggTXV0YXRpb24gSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBob29rcyBmb3IgYXV0aGVudGljYXRpb24tcmVsYXRlZCB3cml0ZSBvcGVyYXRpb25zLlxuICogVGhlc2UgaG9va3MgaGFuZGxlIHVzZXIgcmVnaXN0cmF0aW9uLCBsb2dpbiwgdG9rZW4gcmVmcmVzaCwgYW5kIEZpcmViYXNlIGF1dGhlbnRpY2F0aW9uLlxuICpcbiAqIEBtb2R1bGUgYXBpL211dGF0aW9ucy9hdXRoXG4gKi9cblxuaW1wb3J0IHsgdXNlTXV0YXRpb24sIFVzZU11dGF0aW9uT3B0aW9ucywgVXNlTXV0YXRpb25SZXN1bHQsIHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgeyB1c2VyS2V5cyB9IGZyb20gJy4uL3F1ZXJpZXMvdXNlcnMnO1xuaW1wb3J0IHR5cGUge1xuICBSZWdpc3RlclJlcXVlc3QsXG4gIExvZ2luUmVxdWVzdCxcbiAgUmVmcmVzaFRva2VuUmVxdWVzdCxcbiAgRmlyZWJhc2VBdXRoUmVxdWVzdCxcbiAgQXV0aFJlc3BvbnNlLFxuICBUb2tlblJlc3BvbnNlLFxuICBTZW5kT3RwUmVxdWVzdCxcbiAgT3RwU2VudFJlc3BvbnNlLFxuICBWZXJpZnlPdHBSZXF1ZXN0LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1VVEFUSU9OIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBuZXcgdXNlciBhY2NvdW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGVzIGEgbmV3IHVzZXIgYWNjb3VudCB3aXRoIGVtYWlsL3Bob25lIGFuZCBwYXNzd29yZC5cbiAqIFJldHVybnMgYXV0aGVudGljYXRpb24gdG9rZW5zIGFuZCB1c2VyIGluZm9ybWF0aW9uIHVwb24gc3VjY2Vzc2Z1bCByZWdpc3RyYXRpb24uXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2F1dGgvcmVnaXN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyB1c2VSZWdpc3RlciB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBSZWdpc3RlckZvcm0oKSB7XG4gKiAgIGNvbnN0IHsgbXV0YXRlOiByZWdpc3RlciwgaXNQZW5kaW5nLCBlcnJvciB9ID0gdXNlUmVnaXN0ZXIoe1xuICogICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAqICAgICAgIC8vIFN0b3JlIHRva2VucyBzZWN1cmVseVxuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicsIGRhdGEuYWNjZXNzVG9rZW4pO1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdyZWZyZXNoVG9rZW4nLCBkYXRhLnJlZnJlc2hUb2tlbik7XG4gKiAgICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdPbmJvYXJkaW5nJyk7XG4gKiAgICAgfSxcbiAqICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAqICAgICAgIEFsZXJ0LmFsZXJ0KCdSZWdpc3RyYXRpb24gZmFpbGVkJywgZXJyb3IubWVzc2FnZSk7XG4gKiAgICAgfSxcbiAqICAgfSk7XG4gKlxuICogICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoKSA9PiB7XG4gKiAgICAgcmVnaXN0ZXIoe1xuICogICAgICAgZW1haWw6ICd1c2VyQGV4YW1wbGUuY29tJyxcbiAqICAgICAgIHBhc3N3b3JkOiAnU2VjdXJlUGFzc3dvcmQxMjMhJyxcbiAqICAgICAgIG5hbWU6ICdKb2huIERvZScsXG4gKiAgICAgfSk7XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4gPEJ1dHRvbiBvblByZXNzPXtoYW5kbGVTdWJtaXR9IGRpc2FibGVkPXtpc1BlbmRpbmd9IC8+O1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZ2lzdGVyKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8QXV0aFJlc3BvbnNlLCBFcnJvciwgUmVnaXN0ZXJSZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8QXV0aFJlc3BvbnNlLCBFcnJvciwgUmVnaXN0ZXJSZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBSZWdpc3RlclJlcXVlc3QpOiBQcm9taXNlPEF1dGhSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PEF1dGhSZXNwb25zZT4oJy9hdXRoL3JlZ2lzdGVyJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBjdXJyZW50IHVzZXIgcXVlcnkgdG8gdHJpZ2dlciByZWZldGNoIHdpdGggbmV3IHRva2VuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiB1c2VyS2V5cy5tZSgpIH0pO1xuICAgICAgLy8gVXNlcidzIG9uU3VjY2VzcyBpcyBoYW5kbGVkIGJ5IHNwcmVhZGluZyBvcHRpb25zXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBMb2dpbiB3aXRoIGVtYWlsL3Bob25lIGFuZCBwYXNzd29yZFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXV0aGVudGljYXRlcyBhbiBleGlzdGluZyB1c2VyIHdpdGggdGhlaXIgY3JlZGVudGlhbHMuXG4gKiBSZXR1cm5zIGF1dGhlbnRpY2F0aW9uIHRva2VucyBhbmQgdXNlciBpbmZvcm1hdGlvbiB1cG9uIHN1Y2Nlc3NmdWwgbG9naW4uXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2F1dGgvbG9naW5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyB1c2VMb2dpbiB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBMb2dpbkZvcm0oKSB7XG4gKiAgIGNvbnN0IHsgbXV0YXRlOiBsb2dpbiwgaXNQZW5kaW5nLCBlcnJvciB9ID0gdXNlTG9naW4oe1xuICogICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAqICAgICAgIC8vIFN0b3JlIHRva2VucyBzZWN1cmVseVxuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicsIGRhdGEuYWNjZXNzVG9rZW4pO1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdyZWZyZXNoVG9rZW4nLCBkYXRhLnJlZnJlc2hUb2tlbik7XG4gKiAgICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdIb21lJyk7XG4gKiAgICAgfSxcbiAqICAgfSk7XG4gKlxuICogICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoKSA9PiB7XG4gKiAgICAgbG9naW4oe1xuICogICAgICAgZW1haWw6ICd1c2VyQGV4YW1wbGUuY29tJyxcbiAqICAgICAgIHBhc3N3b3JkOiAnU2VjdXJlUGFzc3dvcmQxMjMhJyxcbiAqICAgICB9KTtcbiAqICAgfTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG4gKiAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgbmFtZT1cImVtYWlsXCIgLz5cbiAqICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBuYW1lPVwicGFzc3dvcmRcIiAvPlxuICogICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgZGlzYWJsZWQ9e2lzUGVuZGluZ30+XG4gKiAgICAgICAgIHtpc1BlbmRpbmcgPyAnTG9nZ2luZyBpbi4uLicgOiAnTG9naW4nfVxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgICB7ZXJyb3IgJiYgPHAgY2xhc3NOYW1lPVwiZXJyb3JcIj57ZXJyb3IubWVzc2FnZX08L3A+fVxuICogICAgIDwvZm9ybT5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBMb2dpbiB3aXRoIHBob25lIG51bWJlcjpcbiAqIGBgYHRzeFxuICogbG9naW4oe1xuICogICBwaG9uZTogJysxMjM0NTY3ODkwJyxcbiAqICAgcGFzc3dvcmQ6ICdTZWN1cmVQYXNzd29yZDEyMyEnLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTG9naW4oXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxBdXRoUmVzcG9uc2UsIEVycm9yLCBMb2dpblJlcXVlc3Q+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxBdXRoUmVzcG9uc2UsIEVycm9yLCBMb2dpblJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IExvZ2luUmVxdWVzdCk6IFByb21pc2U8QXV0aFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8QXV0aFJlc3BvbnNlPignL2F1dGgvbG9naW4nLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGN1cnJlbnQgdXNlciBxdWVyeSB0byB0cmlnZ2VyIHJlZmV0Y2ggd2l0aCBuZXcgdG9rZW5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHVzZXJLZXlzLm1lKCkgfSk7XG4gICAgICAvLyBVc2VyJ3Mgb25TdWNjZXNzIGlzIGhhbmRsZWQgYnkgc3ByZWFkaW5nIG9wdGlvbnNcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlZnJlc2ggYWNjZXNzIHRva2VuIHVzaW5nIHJlZnJlc2ggdG9rZW5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE9idGFpbnMgYSBuZXcgYWNjZXNzIHRva2VuIHVzaW5nIGEgdmFsaWQgcmVmcmVzaCB0b2tlbi5cbiAqIFNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgYWNjZXNzIHRva2VuIGV4cGlyZXMuXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2F1dGgvcmVmcmVzaFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZVJlZnJlc2hBdXRoVG9rZW4gfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gdXNlVG9rZW5SZWZyZXNoKCkge1xuICogICBjb25zdCB7IG11dGF0ZUFzeW5jOiByZWZyZXNoVG9rZW4gfSA9IHVzZVJlZnJlc2hBdXRoVG9rZW4oKTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZVRva2VuRXhwaXJlZCA9IGFzeW5jICgpID0+IHtcbiAqICAgICBjb25zdCBzdG9yZWRSZWZyZXNoVG9rZW4gPSBhd2FpdCBTZWN1cmVTdG9yZS5nZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicpO1xuICpcbiAqICAgICBpZiAoIXN0b3JlZFJlZnJlc2hUb2tlbikge1xuICogICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnTG9naW4nKTtcbiAqICAgICAgIHJldHVybjtcbiAqICAgICB9XG4gKlxuICogICAgIHRyeSB7XG4gKiAgICAgICBjb25zdCB7IGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW46IG5ld1JlZnJlc2hUb2tlbiB9ID0gYXdhaXQgcmVmcmVzaFRva2VuKHtcbiAqICAgICAgICAgcmVmcmVzaFRva2VuOiBzdG9yZWRSZWZyZXNoVG9rZW4sXG4gKiAgICAgICB9KTtcbiAqXG4gKiAgICAgICAvLyBTdG9yZSBuZXcgdG9rZW5zXG4gKiAgICAgICBhd2FpdCBTZWN1cmVTdG9yZS5zZXRJdGVtQXN5bmMoJ2FjY2Vzc1Rva2VuJywgYWNjZXNzVG9rZW4pO1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdyZWZyZXNoVG9rZW4nLCBuZXdSZWZyZXNoVG9rZW4pO1xuICogICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgICAgICAvLyBSZWZyZXNoIHRva2VuIGlzIGludmFsaWQgb3IgZXhwaXJlZFxuICogICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnTG9naW4nKTtcbiAqICAgICB9XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4geyBoYW5kbGVUb2tlbkV4cGlyZWQgfTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBJbnRlZ3JhdGUgd2l0aCBTREsgY29uZmlndXJhdGlvbjpcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgY29uZmlndXJlU0RLIH0gZnJvbSAnQGdyb3dzb2Jlci9zZGsnO1xuICpcbiAqIGNvbmZpZ3VyZVNESyh7XG4gKiAgIGJhc2VVUkw6ICdodHRwczovL2FwaS5ncm93c29iZXIuYXBwJyxcbiAqICAgZ2V0QWNjZXNzVG9rZW46IGFzeW5jICgpID0+IHtcbiAqICAgICByZXR1cm4gYXdhaXQgU2VjdXJlU3RvcmUuZ2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicpO1xuICogICB9LFxuICogICByZWZyZXNoQWNjZXNzVG9rZW46IGFzeW5jICgpID0+IHtcbiAqICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSBhd2FpdCBTZWN1cmVTdG9yZS5nZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicpO1xuICogICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbjogbmV3UmVmcmVzaFRva2VuIH0gPSBhd2FpdCBmZXRjaCgnL2F1dGgvcmVmcmVzaCcsIHtcbiAqICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICogICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyByZWZyZXNoVG9rZW4gfSksXG4gKiAgICAgfSkudGhlbihyID0+IHIuanNvbigpKTtcbiAqXG4gKiAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicsIGFjY2Vzc1Rva2VuKTtcbiAqICAgICBhd2FpdCBTZWN1cmVTdG9yZS5zZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicsIG5ld1JlZnJlc2hUb2tlbik7XG4gKlxuICogICAgIHJldHVybiBhY2Nlc3NUb2tlbjtcbiAqICAgfSxcbiAqICAgb25VbmF1dGhvcml6ZWQ6ICgpID0+IHtcbiAqICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdMb2dpbicpO1xuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmcmVzaEF1dGhUb2tlbihcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPFRva2VuUmVzcG9uc2UsIEVycm9yLCBSZWZyZXNoVG9rZW5SZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8VG9rZW5SZXNwb25zZSwgRXJyb3IsIFJlZnJlc2hUb2tlblJlcXVlc3Q+IHtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogUmVmcmVzaFRva2VuUmVxdWVzdCk6IFByb21pc2U8VG9rZW5SZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PFRva2VuUmVzcG9uc2U+KCcvYXV0aC9yZWZyZXNoJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEF1dGhlbnRpY2F0ZSB3aXRoIEZpcmViYXNlIElEIHRva2VuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBdXRoZW50aWNhdGVzIGEgdXNlciB1c2luZyBhIEZpcmViYXNlIElEIHRva2VuLlxuICogQ3JlYXRlcyBhIG5ldyB1c2VyIGFjY291bnQgaWYgb25lIGRvZXNuJ3QgZXhpc3QsIG9yIGxvZ3MgaW4gYW4gZXhpc3RpbmcgdXNlci5cbiAqIFJldHVybnMgR3Jvd1NvYmVyIGF1dGhlbnRpY2F0aW9uIHRva2VucyBhbmQgdXNlciBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAZW5kcG9pbnQgUE9TVCAvYXV0aC9maXJlYmFzZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZUZpcmViYXNlQXV0aCB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqIGltcG9ydCB7IHNpZ25JbldpdGhQaG9uZU51bWJlciB9IGZyb20gJ2ZpcmViYXNlL2F1dGgnO1xuICpcbiAqIGZ1bmN0aW9uIFBob25lQXV0aFNjcmVlbigpIHtcbiAqICAgY29uc3QgeyBtdXRhdGU6IGZpcmViYXNlQXV0aCwgaXNQZW5kaW5nIH0gPSB1c2VGaXJlYmFzZUF1dGgoe1xuICogICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAqICAgICAgIC8vIFN0b3JlIEdyb3dTb2JlciB0b2tlbnNcbiAqICAgICAgIGF3YWl0IFNlY3VyZVN0b3JlLnNldEl0ZW1Bc3luYygnYWNjZXNzVG9rZW4nLCBkYXRhLmFjY2Vzc1Rva2VuKTtcbiAqICAgICAgIGF3YWl0IFNlY3VyZVN0b3JlLnNldEl0ZW1Bc3luYygncmVmcmVzaFRva2VuJywgZGF0YS5yZWZyZXNoVG9rZW4pO1xuICpcbiAqICAgICAgIGlmIChkYXRhLnVzZXIub25ib2FyZGluZ0NvbXBsZXRlZCkge1xuICogICAgICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdIb21lJyk7XG4gKiAgICAgICB9IGVsc2Uge1xuICogICAgICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdPbmJvYXJkaW5nJyk7XG4gKiAgICAgICB9XG4gKiAgICAgfSxcbiAqICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAqICAgICAgIEFsZXJ0LmFsZXJ0KCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLCBlcnJvci5tZXNzYWdlKTtcbiAqICAgICB9LFxuICogICB9KTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZVBob25lQXV0aCA9IGFzeW5jIChwaG9uZU51bWJlcjogc3RyaW5nKSA9PiB7XG4gKiAgICAgdHJ5IHtcbiAqICAgICAgIC8vIEZpcmViYXNlIGF1dGhlbnRpY2F0aW9uIGZsb3dcbiAqICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IGF3YWl0IHNpZ25JbldpdGhQaG9uZU51bWJlcihhdXRoLCBwaG9uZU51bWJlcik7XG4gKiAgICAgICBjb25zdCBjb2RlID0gYXdhaXQgcHJvbXB0VXNlckZvckNvZGUoKTsgLy8gWW91ciBVSSB0byBnZXQgdmVyaWZpY2F0aW9uIGNvZGVcbiAqICAgICAgIGNvbnN0IGNyZWRlbnRpYWwgPSBhd2FpdCBjb25maXJtYXRpb24uY29uZmlybShjb2RlKTtcbiAqXG4gKiAgICAgICAvLyBHZXQgRmlyZWJhc2UgSUQgdG9rZW5cbiAqICAgICAgIGNvbnN0IGlkVG9rZW4gPSBhd2FpdCBjcmVkZW50aWFsLnVzZXIuZ2V0SWRUb2tlbigpO1xuICpcbiAqICAgICAgIC8vIEF1dGhlbnRpY2F0ZSB3aXRoIEdyb3dTb2JlciBiYWNrZW5kXG4gKiAgICAgICBmaXJlYmFzZUF1dGgoeyBpZFRva2VuIH0pO1xuICogICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgICAgICBjb25zb2xlLmVycm9yKCdQaG9uZSBhdXRoIGVycm9yOicsIGVycm9yKTtcbiAqICAgICB9XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4gPFBob25lSW5wdXQgb25TdWJtaXQ9e2hhbmRsZVBob25lQXV0aH0gZGlzYWJsZWQ9e2lzUGVuZGluZ30gLz47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBHb29nbGUgU2lnbi1JbjpcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgR29vZ2xlU2lnbmluIH0gZnJvbSAnQHJlYWN0LW5hdGl2ZS1nb29nbGUtc2lnbmluL2dvb2dsZS1zaWduaW4nO1xuICpcbiAqIGNvbnN0IGhhbmRsZUdvb2dsZVNpZ25JbiA9IGFzeW5jICgpID0+IHtcbiAqICAgY29uc3QgeyBpZFRva2VuIH0gPSBhd2FpdCBHb29nbGVTaWduaW4uc2lnbkluKCk7XG4gKiAgIGZpcmViYXNlQXV0aCh7IGlkVG9rZW4gfSk7XG4gKiB9O1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggQXBwbGUgU2lnbi1JbjpcbiAqIGBgYHRzeFxuICogaW1wb3J0ICogYXMgQXBwbGVBdXRoZW50aWNhdGlvbiBmcm9tICdleHBvLWFwcGxlLWF1dGhlbnRpY2F0aW9uJztcbiAqXG4gKiBjb25zdCBoYW5kbGVBcHBsZVNpZ25JbiA9IGFzeW5jICgpID0+IHtcbiAqICAgY29uc3QgY3JlZGVudGlhbCA9IGF3YWl0IEFwcGxlQXV0aGVudGljYXRpb24uc2lnbkluQXN5bmMoe1xuICogICAgIHJlcXVlc3RlZFNjb3BlczogW1xuICogICAgICAgQXBwbGVBdXRoZW50aWNhdGlvbi5BcHBsZUF1dGhlbnRpY2F0aW9uU2NvcGUuRlVMTF9OQU1FLFxuICogICAgICAgQXBwbGVBdXRoZW50aWNhdGlvbi5BcHBsZUF1dGhlbnRpY2F0aW9uU2NvcGUuRU1BSUwsXG4gKiAgICAgXSxcbiAqICAgfSk7XG4gKiAgIGZpcmViYXNlQXV0aCh7IGlkVG9rZW46IGNyZWRlbnRpYWwuaWRlbnRpdHlUb2tlbiB9KTtcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRmlyZWJhc2VBdXRoKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8QXV0aFJlc3BvbnNlLCBFcnJvciwgRmlyZWJhc2VBdXRoUmVxdWVzdD4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PEF1dGhSZXNwb25zZSwgRXJyb3IsIEZpcmViYXNlQXV0aFJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IEZpcmViYXNlQXV0aFJlcXVlc3QpOiBQcm9taXNlPEF1dGhSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PEF1dGhSZXNwb25zZT4oJy9hdXRoL2ZpcmViYXNlJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBjdXJyZW50IHVzZXIgcXVlcnkgdG8gdHJpZ2dlciByZWZldGNoIHdpdGggbmV3IHRva2VuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiB1c2VyS2V5cy5tZSgpIH0pO1xuICAgICAgLy8gVXNlcidzIG9uU3VjY2VzcyBpcyBoYW5kbGVkIGJ5IHNwcmVhZGluZyBvcHRpb25zXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSB0eXBlIGZvciB2ZXJpZnkgT1RQIGluY2x1ZGluZyBpc05ld1VzZXIgZmxhZ1xuICovXG5leHBvcnQgdHlwZSBWZXJpZnlPdHBSZXNwb25zZSA9IEF1dGhSZXNwb25zZSAmIHsgaXNOZXdVc2VyOiBib29sZWFuIH07XG5cbi8qKlxuICogU2VuZCBPVFAgdG8gcGhvbmUgbnVtYmVyXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZW5kcyBhIHZlcmlmaWNhdGlvbiBjb2RlIHRvIHRoZSBzcGVjaWZpZWQgcGhvbmUgbnVtYmVyIHZpYSBTTVMgb3Igdm9pY2UgY2FsbC5cbiAqIFVzZWQgZm9yIHBhc3N3b3JkbGVzcyBhdXRoZW50aWNhdGlvbi5cbiAqXG4gKiBAZW5kcG9pbnQgUE9TVCAvYXV0aC9waG9uZS9zZW5kLW90cFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZVNlbmRPdHAgfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gUGhvbmVJbnB1dFNjcmVlbigpIHtcbiAqICAgY29uc3QgeyBtdXRhdGU6IHNlbmRPdHAsIGlzUGVuZGluZywgZXJyb3IgfSA9IHVzZVNlbmRPdHAoe1xuICogICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAqICAgICAgIGNvbnNvbGUubG9nKCdPVFAgc2VudCB0bzonLCBkYXRhLnBob25lKTtcbiAqICAgICAgIG5hdmlnYXRpb24ubmF2aWdhdGUoJ1ZlcmlmeU90cCcsIHsgcGhvbmUgfSk7XG4gKiAgICAgfSxcbiAqICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAqICAgICAgIEFsZXJ0LmFsZXJ0KCdFcnJvcicsIGVycm9yLm1lc3NhZ2UpO1xuICogICAgIH0sXG4gKiAgIH0pO1xuICpcbiAqICAgY29uc3QgaGFuZGxlU2VuZCA9ICgpID0+IHtcbiAqICAgICBzZW5kT3RwKHsgcGhvbmU6ICcrMTIzNDU2Nzg5MCcsIGNoYW5uZWw6ICdzbXMnIH0pO1xuICogICB9O1xuICpcbiAqICAgcmV0dXJuIDxCdXR0b24gb25QcmVzcz17aGFuZGxlU2VuZH0gZGlzYWJsZWQ9e2lzUGVuZGluZ30gLz47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VuZE90cChcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPE90cFNlbnRSZXNwb25zZSwgRXJyb3IsIFNlbmRPdHBSZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8T3RwU2VudFJlc3BvbnNlLCBFcnJvciwgU2VuZE90cFJlcXVlc3Q+IHtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogU2VuZE90cFJlcXVlc3QpOiBQcm9taXNlPE90cFNlbnRSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PE90cFNlbnRSZXNwb25zZT4oJy9hdXRoL3Bob25lL3NlbmQtb3RwJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFZlcmlmeSBPVFAgYW5kIGF1dGhlbnRpY2F0ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVmVyaWZpZXMgdGhlIE9UUCBjb2RlIHNlbnQgdG8gdGhlIHBob25lIG51bWJlciBhbmQgYXV0aGVudGljYXRlcyB0aGUgdXNlci5cbiAqIElmIHRoZSB1c2VyIGRvZXNuJ3QgZXhpc3QsIGEgbmV3IGFjY291bnQgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LlxuICogUmV0dXJucyBhdXRoZW50aWNhdGlvbiB0b2tlbnMgYW5kIHVzZXIgaW5mb3JtYXRpb24uXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2F1dGgvcGhvbmUvdmVyaWZ5LW90cFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZVZlcmlmeU90cCB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBWZXJpZnlPdHBTY3JlZW4oeyBwaG9uZSB9KSB7XG4gKiAgIGNvbnN0IHsgbXV0YXRlOiB2ZXJpZnlPdHAsIGlzUGVuZGluZywgZXJyb3IgfSA9IHVzZVZlcmlmeU90cCh7XG4gKiAgICAgb25TdWNjZXNzOiBhc3luYyAoZGF0YSkgPT4ge1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicsIGRhdGEuYWNjZXNzVG9rZW4pO1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdyZWZyZXNoVG9rZW4nLCBkYXRhLnJlZnJlc2hUb2tlbik7XG4gKlxuICogICAgICAgaWYgKGRhdGEuaXNOZXdVc2VyKSB7XG4gKiAgICAgICAgIG5hdmlnYXRpb24ubmF2aWdhdGUoJ09uYm9hcmRpbmcnKTtcbiAqICAgICAgIH0gZWxzZSB7XG4gKiAgICAgICAgIG5hdmlnYXRpb24ubmF2aWdhdGUoJ0hvbWUnKTtcbiAqICAgICAgIH1cbiAqICAgICB9LFxuICogICB9KTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZVZlcmlmeSA9IChjb2RlOiBzdHJpbmcpID0+IHtcbiAqICAgICB2ZXJpZnlPdHAoeyBwaG9uZSwgY29kZSB9KTtcbiAqICAgfTtcbiAqXG4gKiAgIHJldHVybiA8T3RwSW5wdXQgb25Db21wbGV0ZT17aGFuZGxlVmVyaWZ5fSBkaXNhYmxlZD17aXNQZW5kaW5nfSAvPjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VWZXJpZnlPdHAoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxWZXJpZnlPdHBSZXNwb25zZSwgRXJyb3IsIFZlcmlmeU90cFJlcXVlc3Q+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxWZXJpZnlPdHBSZXNwb25zZSwgRXJyb3IsIFZlcmlmeU90cFJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IFZlcmlmeU90cFJlcXVlc3QpOiBQcm9taXNlPFZlcmlmeU90cFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8VmVyaWZ5T3RwUmVzcG9uc2U+KCcvYXV0aC9waG9uZS92ZXJpZnktb3RwJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBjdXJyZW50IHVzZXIgcXVlcnkgdG8gdHJpZ2dlciByZWZldGNoIHdpdGggbmV3IHRva2VuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiB1c2VyS2V5cy5tZSgpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=
|
|
433
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvbXV0YXRpb25zL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7O0FBOERILGtDQWtCQztBQXlERCw0QkFrQkM7QUEyRUQsa0RBV0M7QUFzRkQsMENBa0JDO0FBMENELGdDQVdDO0FBeUNELG9DQWlCQztBQXRjRCx1REFBMkc7QUFDM0csc0NBQXlDO0FBQ3pDLDRDQUE0QztBQWE1QywrRUFBK0U7QUFDL0UsaUJBQWlCO0FBQ2pCLCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQUNILFNBQWdCLFdBQVcsQ0FDekIsT0FBc0Y7SUFFdEYsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFxQixFQUF5QixFQUFFO1lBQ2pFLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBZSx1QkFBdUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDdEMsa0VBQWtFO1lBQ2xFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxnQkFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzRCxtREFBbUQ7UUFDckQsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFDSCxTQUFnQixZQUFZLENBQzFCLE9BQTRGO0lBRTVGLE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBc0IsRUFBOEIsRUFBRTtZQUN2RSxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQW9CLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUN0QyxrRUFBa0U7WUFDbEUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBdXRoIE11dGF0aW9uIEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gaG9va3MgZm9yIGF1dGhlbnRpY2F0aW9uLXJlbGF0ZWQgd3JpdGUgb3BlcmF0aW9ucy5cbiAqIFRoZXNlIGhvb2tzIGhhbmRsZSB1c2VyIHJlZ2lzdHJhdGlvbiwgbG9naW4sIHRva2VuIHJlZnJlc2gsIGFuZCBGaXJlYmFzZSBhdXRoZW50aWNhdGlvbi5cbiAqXG4gKiBAbW9kdWxlIGFwaS9tdXRhdGlvbnMvYXV0aFxuICovXG5cbmltcG9ydCB7IHVzZU11dGF0aW9uLCBVc2VNdXRhdGlvbk9wdGlvbnMsIFVzZU11dGF0aW9uUmVzdWx0LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgdXNlcktleXMgfSBmcm9tICcuLi9xdWVyaWVzL3VzZXJzJztcbmltcG9ydCB0eXBlIHtcbiAgUmVnaXN0ZXJSZXF1ZXN0LFxuICBMb2dpblJlcXVlc3QsXG4gIFJlZnJlc2hUb2tlblJlcXVlc3QsXG4gIEZpcmViYXNlQXV0aFJlcXVlc3QsXG4gIEF1dGhSZXNwb25zZSxcbiAgVG9rZW5SZXNwb25zZSxcbiAgU2VuZE90cFJlcXVlc3QsXG4gIE90cFNlbnRSZXNwb25zZSxcbiAgVmVyaWZ5T3RwUmVxdWVzdCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNVVRBVElPTiBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbmV3IHVzZXIgYWNjb3VudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ3JlYXRlcyBhIG5ldyB1c2VyIGFjY291bnQgd2l0aCBlbWFpbC9waG9uZSBhbmQgcGFzc3dvcmQuXG4gKiBSZXR1cm5zIGF1dGhlbnRpY2F0aW9uIHRva2VucyBhbmQgdXNlciBpbmZvcm1hdGlvbiB1cG9uIHN1Y2Nlc3NmdWwgcmVnaXN0cmF0aW9uLlxuICpcbiAqIEBlbmRwb2ludCBQT1NUIC9hdXRoL3JlZ2lzdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlUmVnaXN0ZXIgfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gUmVnaXN0ZXJGb3JtKCkge1xuICogICBjb25zdCB7IG11dGF0ZTogcmVnaXN0ZXIsIGlzUGVuZGluZywgZXJyb3IgfSA9IHVzZVJlZ2lzdGVyKHtcbiAqICAgICBvblN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gKiAgICAgICAvLyBTdG9yZSB0b2tlbnMgc2VjdXJlbHlcbiAqICAgICAgIGF3YWl0IFNlY3VyZVN0b3JlLnNldEl0ZW1Bc3luYygnYWNjZXNzVG9rZW4nLCBkYXRhLmFjY2Vzc1Rva2VuKTtcbiAqICAgICAgIGF3YWl0IFNlY3VyZVN0b3JlLnNldEl0ZW1Bc3luYygncmVmcmVzaFRva2VuJywgZGF0YS5yZWZyZXNoVG9rZW4pO1xuICogICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnT25ib2FyZGluZycpO1xuICogICAgIH0sXG4gKiAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgICBBbGVydC5hbGVydCgnUmVnaXN0cmF0aW9uIGZhaWxlZCcsIGVycm9yLm1lc3NhZ2UpO1xuICogICAgIH0sXG4gKiAgIH0pO1xuICpcbiAqICAgY29uc3QgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuICogICAgIHJlZ2lzdGVyKHtcbiAqICAgICAgIGVtYWlsOiAndXNlckBleGFtcGxlLmNvbScsXG4gKiAgICAgICBwYXNzd29yZDogJ1NlY3VyZVBhc3N3b3JkMTIzIScsXG4gKiAgICAgICBuYW1lOiAnSm9obiBEb2UnLFxuICogICAgIH0pO1xuICogICB9O1xuICpcbiAqICAgcmV0dXJuIDxCdXR0b24gb25QcmVzcz17aGFuZGxlU3VibWl0fSBkaXNhYmxlZD17aXNQZW5kaW5nfSAvPjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWdpc3RlcihcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPEF1dGhSZXNwb25zZSwgRXJyb3IsIFJlZ2lzdGVyUmVxdWVzdD4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PEF1dGhSZXNwb25zZSwgRXJyb3IsIFJlZ2lzdGVyUmVxdWVzdD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogUmVnaXN0ZXJSZXF1ZXN0KTogUHJvbWlzZTxBdXRoUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxBdXRoUmVzcG9uc2U+KCcvYXBpL3YxL2F1dGgvcmVnaXN0ZXInLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGN1cnJlbnQgdXNlciBxdWVyeSB0byB0cmlnZ2VyIHJlZmV0Y2ggd2l0aCBuZXcgdG9rZW5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHVzZXJLZXlzLm1lKCkgfSk7XG4gICAgICAvLyBVc2VyJ3Mgb25TdWNjZXNzIGlzIGhhbmRsZWQgYnkgc3ByZWFkaW5nIG9wdGlvbnNcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIExvZ2luIHdpdGggZW1haWwvcGhvbmUgYW5kIHBhc3N3b3JkXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBdXRoZW50aWNhdGVzIGFuIGV4aXN0aW5nIHVzZXIgd2l0aCB0aGVpciBjcmVkZW50aWFscy5cbiAqIFJldHVybnMgYXV0aGVudGljYXRpb24gdG9rZW5zIGFuZCB1c2VyIGluZm9ybWF0aW9uIHVwb24gc3VjY2Vzc2Z1bCBsb2dpbi5cbiAqXG4gKiBAZW5kcG9pbnQgUE9TVCAvYXV0aC9sb2dpblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZUxvZ2luIH0gZnJvbSAnQGdyb3dzb2Jlci9zZGsnO1xuICpcbiAqIGZ1bmN0aW9uIExvZ2luRm9ybSgpIHtcbiAqICAgY29uc3QgeyBtdXRhdGU6IGxvZ2luLCBpc1BlbmRpbmcsIGVycm9yIH0gPSB1c2VMb2dpbih7XG4gKiAgICAgb25TdWNjZXNzOiAoZGF0YSkgPT4ge1xuICogICAgICAgLy8gU3RvcmUgdG9rZW5zIHNlY3VyZWx5XG4gKiAgICAgICBhd2FpdCBTZWN1cmVTdG9yZS5zZXRJdGVtQXN5bmMoJ2FjY2Vzc1Rva2VuJywgZGF0YS5hY2Nlc3NUb2tlbik7XG4gKiAgICAgICBhd2FpdCBTZWN1cmVTdG9yZS5zZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicsIGRhdGEucmVmcmVzaFRva2VuKTtcbiAqICAgICAgIG5hdmlnYXRpb24ubmF2aWdhdGUoJ0hvbWUnKTtcbiAqICAgICB9LFxuICogICB9KTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICgpID0+IHtcbiAqICAgICBsb2dpbih7XG4gKiAgICAgICBlbWFpbDogJ3VzZXJAZXhhbXBsZS5jb20nLFxuICogICAgICAgcGFzc3dvcmQ6ICdTZWN1cmVQYXNzd29yZDEyMyEnLFxuICogICAgIH0pO1xuICogICB9O1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAqICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBuYW1lPVwiZW1haWxcIiAvPlxuICogICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJwYXNzd29yZFwiIC8+XG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBkaXNhYmxlZD17aXNQZW5kaW5nfT5cbiAqICAgICAgICAge2lzUGVuZGluZyA/ICdMb2dnaW5nIGluLi4uJyA6ICdMb2dpbid9XG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICAgIHtlcnJvciAmJiA8cCBjbGFzc05hbWU9XCJlcnJvclwiPntlcnJvci5tZXNzYWdlfTwvcD59XG4gKiAgICAgPC9mb3JtPlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIExvZ2luIHdpdGggcGhvbmUgbnVtYmVyOlxuICogYGBgdHN4XG4gKiBsb2dpbih7XG4gKiAgIHBob25lOiAnKzEyMzQ1Njc4OTAnLFxuICogICBwYXNzd29yZDogJ1NlY3VyZVBhc3N3b3JkMTIzIScsXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMb2dpbihcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPEF1dGhSZXNwb25zZSwgRXJyb3IsIExvZ2luUmVxdWVzdD4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PEF1dGhSZXNwb25zZSwgRXJyb3IsIExvZ2luUmVxdWVzdD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxBdXRoUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxBdXRoUmVzcG9uc2U+KCcvYXBpL3YxL2F1dGgvbG9naW4nLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGN1cnJlbnQgdXNlciBxdWVyeSB0byB0cmlnZ2VyIHJlZmV0Y2ggd2l0aCBuZXcgdG9rZW5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHVzZXJLZXlzLm1lKCkgfSk7XG4gICAgICAvLyBVc2VyJ3Mgb25TdWNjZXNzIGlzIGhhbmRsZWQgYnkgc3ByZWFkaW5nIG9wdGlvbnNcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlZnJlc2ggYWNjZXNzIHRva2VuIHVzaW5nIHJlZnJlc2ggdG9rZW5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE9idGFpbnMgYSBuZXcgYWNjZXNzIHRva2VuIHVzaW5nIGEgdmFsaWQgcmVmcmVzaCB0b2tlbi5cbiAqIFNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgYWNjZXNzIHRva2VuIGV4cGlyZXMuXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2F1dGgvcmVmcmVzaFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZVJlZnJlc2hBdXRoVG9rZW4gfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gdXNlVG9rZW5SZWZyZXNoKCkge1xuICogICBjb25zdCB7IG11dGF0ZUFzeW5jOiByZWZyZXNoVG9rZW4gfSA9IHVzZVJlZnJlc2hBdXRoVG9rZW4oKTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZVRva2VuRXhwaXJlZCA9IGFzeW5jICgpID0+IHtcbiAqICAgICBjb25zdCBzdG9yZWRSZWZyZXNoVG9rZW4gPSBhd2FpdCBTZWN1cmVTdG9yZS5nZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicpO1xuICpcbiAqICAgICBpZiAoIXN0b3JlZFJlZnJlc2hUb2tlbikge1xuICogICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnTG9naW4nKTtcbiAqICAgICAgIHJldHVybjtcbiAqICAgICB9XG4gKlxuICogICAgIHRyeSB7XG4gKiAgICAgICBjb25zdCB7IGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW46IG5ld1JlZnJlc2hUb2tlbiB9ID0gYXdhaXQgcmVmcmVzaFRva2VuKHtcbiAqICAgICAgICAgcmVmcmVzaFRva2VuOiBzdG9yZWRSZWZyZXNoVG9rZW4sXG4gKiAgICAgICB9KTtcbiAqXG4gKiAgICAgICAvLyBTdG9yZSBuZXcgdG9rZW5zXG4gKiAgICAgICBhd2FpdCBTZWN1cmVTdG9yZS5zZXRJdGVtQXN5bmMoJ2FjY2Vzc1Rva2VuJywgYWNjZXNzVG9rZW4pO1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdyZWZyZXNoVG9rZW4nLCBuZXdSZWZyZXNoVG9rZW4pO1xuICogICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgICAgICAvLyBSZWZyZXNoIHRva2VuIGlzIGludmFsaWQgb3IgZXhwaXJlZFxuICogICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnTG9naW4nKTtcbiAqICAgICB9XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4geyBoYW5kbGVUb2tlbkV4cGlyZWQgfTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBJbnRlZ3JhdGUgd2l0aCBTREsgY29uZmlndXJhdGlvbjpcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgY29uZmlndXJlU0RLIH0gZnJvbSAnQGdyb3dzb2Jlci9zZGsnO1xuICpcbiAqIGNvbmZpZ3VyZVNESyh7XG4gKiAgIGJhc2VVUkw6ICdodHRwczovL2FwaS5ncm93c29iZXIuYXBwJyxcbiAqICAgZ2V0QWNjZXNzVG9rZW46IGFzeW5jICgpID0+IHtcbiAqICAgICByZXR1cm4gYXdhaXQgU2VjdXJlU3RvcmUuZ2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicpO1xuICogICB9LFxuICogICByZWZyZXNoQWNjZXNzVG9rZW46IGFzeW5jICgpID0+IHtcbiAqICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSBhd2FpdCBTZWN1cmVTdG9yZS5nZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicpO1xuICogICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbjogbmV3UmVmcmVzaFRva2VuIH0gPSBhd2FpdCBmZXRjaCgnL2F1dGgvcmVmcmVzaCcsIHtcbiAqICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICogICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyByZWZyZXNoVG9rZW4gfSksXG4gKiAgICAgfSkudGhlbihyID0+IHIuanNvbigpKTtcbiAqXG4gKiAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicsIGFjY2Vzc1Rva2VuKTtcbiAqICAgICBhd2FpdCBTZWN1cmVTdG9yZS5zZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicsIG5ld1JlZnJlc2hUb2tlbik7XG4gKlxuICogICAgIHJldHVybiBhY2Nlc3NUb2tlbjtcbiAqICAgfSxcbiAqICAgb25VbmF1dGhvcml6ZWQ6ICgpID0+IHtcbiAqICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdMb2dpbicpO1xuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmcmVzaEF1dGhUb2tlbihcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPFRva2VuUmVzcG9uc2UsIEVycm9yLCBSZWZyZXNoVG9rZW5SZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8VG9rZW5SZXNwb25zZSwgRXJyb3IsIFJlZnJlc2hUb2tlblJlcXVlc3Q+IHtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogUmVmcmVzaFRva2VuUmVxdWVzdCk6IFByb21pc2U8VG9rZW5SZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PFRva2VuUmVzcG9uc2U+KCcvYXBpL3YxL2F1dGgvcmVmcmVzaCcsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBBdXRoZW50aWNhdGUgd2l0aCBGaXJlYmFzZSBJRCB0b2tlblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXV0aGVudGljYXRlcyBhIHVzZXIgdXNpbmcgYSBGaXJlYmFzZSBJRCB0b2tlbi5cbiAqIENyZWF0ZXMgYSBuZXcgdXNlciBhY2NvdW50IGlmIG9uZSBkb2Vzbid0IGV4aXN0LCBvciBsb2dzIGluIGFuIGV4aXN0aW5nIHVzZXIuXG4gKiBSZXR1cm5zIEdyb3dTb2JlciBhdXRoZW50aWNhdGlvbiB0b2tlbnMgYW5kIHVzZXIgaW5mb3JtYXRpb24uXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2F1dGgvZmlyZWJhc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyB1c2VGaXJlYmFzZUF1dGggfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKiBpbXBvcnQgeyBzaWduSW5XaXRoUGhvbmVOdW1iZXIgfSBmcm9tICdmaXJlYmFzZS9hdXRoJztcbiAqXG4gKiBmdW5jdGlvbiBQaG9uZUF1dGhTY3JlZW4oKSB7XG4gKiAgIGNvbnN0IHsgbXV0YXRlOiBmaXJlYmFzZUF1dGgsIGlzUGVuZGluZyB9ID0gdXNlRmlyZWJhc2VBdXRoKHtcbiAqICAgICBvblN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gKiAgICAgICAvLyBTdG9yZSBHcm93U29iZXIgdG9rZW5zXG4gKiAgICAgICBhd2FpdCBTZWN1cmVTdG9yZS5zZXRJdGVtQXN5bmMoJ2FjY2Vzc1Rva2VuJywgZGF0YS5hY2Nlc3NUb2tlbik7XG4gKiAgICAgICBhd2FpdCBTZWN1cmVTdG9yZS5zZXRJdGVtQXN5bmMoJ3JlZnJlc2hUb2tlbicsIGRhdGEucmVmcmVzaFRva2VuKTtcbiAqXG4gKiAgICAgICBpZiAoZGF0YS51c2VyLm9uYm9hcmRpbmdDb21wbGV0ZWQpIHtcbiAqICAgICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnSG9tZScpO1xuICogICAgICAgfSBlbHNlIHtcbiAqICAgICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnT25ib2FyZGluZycpO1xuICogICAgICAgfVxuICogICAgIH0sXG4gKiAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgICBBbGVydC5hbGVydCgnQXV0aGVudGljYXRpb24gZmFpbGVkJywgZXJyb3IubWVzc2FnZSk7XG4gKiAgICAgfSxcbiAqICAgfSk7XG4gKlxuICogICBjb25zdCBoYW5kbGVQaG9uZUF1dGggPSBhc3luYyAocGhvbmVOdW1iZXI6IHN0cmluZykgPT4ge1xuICogICAgIHRyeSB7XG4gKiAgICAgICAvLyBGaXJlYmFzZSBhdXRoZW50aWNhdGlvbiBmbG93XG4gKiAgICAgICBjb25zdCBjb25maXJtYXRpb24gPSBhd2FpdCBzaWduSW5XaXRoUGhvbmVOdW1iZXIoYXV0aCwgcGhvbmVOdW1iZXIpO1xuICogICAgICAgY29uc3QgY29kZSA9IGF3YWl0IHByb21wdFVzZXJGb3JDb2RlKCk7IC8vIFlvdXIgVUkgdG8gZ2V0IHZlcmlmaWNhdGlvbiBjb2RlXG4gKiAgICAgICBjb25zdCBjcmVkZW50aWFsID0gYXdhaXQgY29uZmlybWF0aW9uLmNvbmZpcm0oY29kZSk7XG4gKlxuICogICAgICAgLy8gR2V0IEZpcmViYXNlIElEIHRva2VuXG4gKiAgICAgICBjb25zdCBpZFRva2VuID0gYXdhaXQgY3JlZGVudGlhbC51c2VyLmdldElkVG9rZW4oKTtcbiAqXG4gKiAgICAgICAvLyBBdXRoZW50aWNhdGUgd2l0aCBHcm93U29iZXIgYmFja2VuZFxuICogICAgICAgZmlyZWJhc2VBdXRoKHsgaWRUb2tlbiB9KTtcbiAqICAgICB9IGNhdGNoIChlcnJvcikge1xuICogICAgICAgY29uc29sZS5lcnJvcignUGhvbmUgYXV0aCBlcnJvcjonLCBlcnJvcik7XG4gKiAgICAgfVxuICogICB9O1xuICpcbiAqICAgcmV0dXJuIDxQaG9uZUlucHV0IG9uU3VibWl0PXtoYW5kbGVQaG9uZUF1dGh9IGRpc2FibGVkPXtpc1BlbmRpbmd9IC8+O1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggR29vZ2xlIFNpZ24tSW46XG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IEdvb2dsZVNpZ25pbiB9IGZyb20gJ0ByZWFjdC1uYXRpdmUtZ29vZ2xlLXNpZ25pbi9nb29nbGUtc2lnbmluJztcbiAqXG4gKiBjb25zdCBoYW5kbGVHb29nbGVTaWduSW4gPSBhc3luYyAoKSA9PiB7XG4gKiAgIGNvbnN0IHsgaWRUb2tlbiB9ID0gYXdhaXQgR29vZ2xlU2lnbmluLnNpZ25JbigpO1xuICogICBmaXJlYmFzZUF1dGgoeyBpZFRva2VuIH0pO1xuICogfTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIEFwcGxlIFNpZ24tSW46XG4gKiBgYGB0c3hcbiAqIGltcG9ydCAqIGFzIEFwcGxlQXV0aGVudGljYXRpb24gZnJvbSAnZXhwby1hcHBsZS1hdXRoZW50aWNhdGlvbic7XG4gKlxuICogY29uc3QgaGFuZGxlQXBwbGVTaWduSW4gPSBhc3luYyAoKSA9PiB7XG4gKiAgIGNvbnN0IGNyZWRlbnRpYWwgPSBhd2FpdCBBcHBsZUF1dGhlbnRpY2F0aW9uLnNpZ25JbkFzeW5jKHtcbiAqICAgICByZXF1ZXN0ZWRTY29wZXM6IFtcbiAqICAgICAgIEFwcGxlQXV0aGVudGljYXRpb24uQXBwbGVBdXRoZW50aWNhdGlvblNjb3BlLkZVTExfTkFNRSxcbiAqICAgICAgIEFwcGxlQXV0aGVudGljYXRpb24uQXBwbGVBdXRoZW50aWNhdGlvblNjb3BlLkVNQUlMLFxuICogICAgIF0sXG4gKiAgIH0pO1xuICogICBmaXJlYmFzZUF1dGgoeyBpZFRva2VuOiBjcmVkZW50aWFsLmlkZW50aXR5VG9rZW4gfSk7XG4gKiB9O1xuICogYGBgXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZpcmViYXNlQXV0aChcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPEF1dGhSZXNwb25zZSwgRXJyb3IsIEZpcmViYXNlQXV0aFJlcXVlc3Q+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxBdXRoUmVzcG9uc2UsIEVycm9yLCBGaXJlYmFzZUF1dGhSZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBGaXJlYmFzZUF1dGhSZXF1ZXN0KTogUHJvbWlzZTxBdXRoUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxBdXRoUmVzcG9uc2U+KCcvYXBpL3YxL2F1dGgvZmlyZWJhc2UnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGN1cnJlbnQgdXNlciBxdWVyeSB0byB0cmlnZ2VyIHJlZmV0Y2ggd2l0aCBuZXcgdG9rZW5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHVzZXJLZXlzLm1lKCkgfSk7XG4gICAgICAvLyBVc2VyJ3Mgb25TdWNjZXNzIGlzIGhhbmRsZWQgYnkgc3ByZWFkaW5nIG9wdGlvbnNcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIHR5cGUgZm9yIHZlcmlmeSBPVFAgaW5jbHVkaW5nIGlzTmV3VXNlciBmbGFnXG4gKi9cbmV4cG9ydCB0eXBlIFZlcmlmeU90cFJlc3BvbnNlID0gQXV0aFJlc3BvbnNlICYgeyBpc05ld1VzZXI6IGJvb2xlYW4gfTtcblxuLyoqXG4gKiBTZW5kIE9UUCB0byBwaG9uZSBudW1iZXJcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNlbmRzIGEgdmVyaWZpY2F0aW9uIGNvZGUgdG8gdGhlIHNwZWNpZmllZCBwaG9uZSBudW1iZXIgdmlhIFNNUyBvciB2b2ljZSBjYWxsLlxuICogVXNlZCBmb3IgcGFzc3dvcmRsZXNzIGF1dGhlbnRpY2F0aW9uLlxuICpcbiAqIEBlbmRwb2ludCBQT1NUIC9hdXRoL3Bob25lL3NlbmQtb3RwXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlU2VuZE90cCB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBQaG9uZUlucHV0U2NyZWVuKCkge1xuICogICBjb25zdCB7IG11dGF0ZTogc2VuZE90cCwgaXNQZW5kaW5nLCBlcnJvciB9ID0gdXNlU2VuZE90cCh7XG4gKiAgICAgb25TdWNjZXNzOiAoZGF0YSkgPT4ge1xuICogICAgICAgY29uc29sZS5sb2coJ09UUCBzZW50IHRvOicsIGRhdGEucGhvbmUpO1xuICogICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnVmVyaWZ5T3RwJywgeyBwaG9uZSB9KTtcbiAqICAgICB9LFxuICogICAgIG9uRXJyb3I6IChlcnJvcikgPT4ge1xuICogICAgICAgQWxlcnQuYWxlcnQoJ0Vycm9yJywgZXJyb3IubWVzc2FnZSk7XG4gKiAgICAgfSxcbiAqICAgfSk7XG4gKlxuICogICBjb25zdCBoYW5kbGVTZW5kID0gKCkgPT4ge1xuICogICAgIHNlbmRPdHAoeyBwaG9uZTogJysxMjM0NTY3ODkwJywgY2hhbm5lbDogJ3NtcycgfSk7XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4gPEJ1dHRvbiBvblByZXNzPXtoYW5kbGVTZW5kfSBkaXNhYmxlZD17aXNQZW5kaW5nfSAvPjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTZW5kT3RwKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8T3RwU2VudFJlc3BvbnNlLCBFcnJvciwgU2VuZE90cFJlcXVlc3Q+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxPdHBTZW50UmVzcG9uc2UsIEVycm9yLCBTZW5kT3RwUmVxdWVzdD4ge1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBTZW5kT3RwUmVxdWVzdCk6IFByb21pc2U8T3RwU2VudFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8T3RwU2VudFJlc3BvbnNlPignL2FwaS92MS9hdXRoL3Bob25lL3NlbmQtb3RwJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFZlcmlmeSBPVFAgYW5kIGF1dGhlbnRpY2F0ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVmVyaWZpZXMgdGhlIE9UUCBjb2RlIHNlbnQgdG8gdGhlIHBob25lIG51bWJlciBhbmQgYXV0aGVudGljYXRlcyB0aGUgdXNlci5cbiAqIElmIHRoZSB1c2VyIGRvZXNuJ3QgZXhpc3QsIGEgbmV3IGFjY291bnQgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LlxuICogUmV0dXJucyBhdXRoZW50aWNhdGlvbiB0b2tlbnMgYW5kIHVzZXIgaW5mb3JtYXRpb24uXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2F1dGgvcGhvbmUvdmVyaWZ5LW90cFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZVZlcmlmeU90cCB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBWZXJpZnlPdHBTY3JlZW4oeyBwaG9uZSB9KSB7XG4gKiAgIGNvbnN0IHsgbXV0YXRlOiB2ZXJpZnlPdHAsIGlzUGVuZGluZywgZXJyb3IgfSA9IHVzZVZlcmlmeU90cCh7XG4gKiAgICAgb25TdWNjZXNzOiBhc3luYyAoZGF0YSkgPT4ge1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdhY2Nlc3NUb2tlbicsIGRhdGEuYWNjZXNzVG9rZW4pO1xuICogICAgICAgYXdhaXQgU2VjdXJlU3RvcmUuc2V0SXRlbUFzeW5jKCdyZWZyZXNoVG9rZW4nLCBkYXRhLnJlZnJlc2hUb2tlbik7XG4gKlxuICogICAgICAgaWYgKGRhdGEuaXNOZXdVc2VyKSB7XG4gKiAgICAgICAgIG5hdmlnYXRpb24ubmF2aWdhdGUoJ09uYm9hcmRpbmcnKTtcbiAqICAgICAgIH0gZWxzZSB7XG4gKiAgICAgICAgIG5hdmlnYXRpb24ubmF2aWdhdGUoJ0hvbWUnKTtcbiAqICAgICAgIH1cbiAqICAgICB9LFxuICogICB9KTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZVZlcmlmeSA9IChjb2RlOiBzdHJpbmcpID0+IHtcbiAqICAgICB2ZXJpZnlPdHAoeyBwaG9uZSwgY29kZSB9KTtcbiAqICAgfTtcbiAqXG4gKiAgIHJldHVybiA8T3RwSW5wdXQgb25Db21wbGV0ZT17aGFuZGxlVmVyaWZ5fSBkaXNhYmxlZD17aXNQZW5kaW5nfSAvPjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VWZXJpZnlPdHAoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxWZXJpZnlPdHBSZXNwb25zZSwgRXJyb3IsIFZlcmlmeU90cFJlcXVlc3Q+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxWZXJpZnlPdHBSZXNwb25zZSwgRXJyb3IsIFZlcmlmeU90cFJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IFZlcmlmeU90cFJlcXVlc3QpOiBQcm9taXNlPFZlcmlmeU90cFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8VmVyaWZ5T3RwUmVzcG9uc2U+KCcvYXBpL3YxL2F1dGgvcGhvbmUvdmVyaWZ5LW90cCcsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgY3VycmVudCB1c2VyIHF1ZXJ5IHRvIHRyaWdnZXIgcmVmZXRjaCB3aXRoIG5ldyB0b2tlblxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogdXNlcktleXMubWUoKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
|
@@ -62,45 +62,28 @@ export declare function useMarkMessagesAsRead(eventId: string): import("@tanstac
|
|
|
62
62
|
*/
|
|
63
63
|
export declare function useSendEventChatMessage(eventId: string): import("@tanstack/react-query").UseMutationResult<{
|
|
64
64
|
id: string;
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
conversationId: string;
|
|
66
|
+
role: "USER" | "ASSISTANT" | "SYSTEM";
|
|
67
67
|
content: string;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
isEdited: boolean;
|
|
72
|
-
isDeleted: boolean;
|
|
68
|
+
model?: Record<string, never>;
|
|
69
|
+
promptTokens?: Record<string, never>;
|
|
70
|
+
completionTokens?: Record<string, never>;
|
|
73
71
|
createdAt: string;
|
|
74
|
-
updatedAt?: string;
|
|
75
|
-
userName?: string;
|
|
76
|
-
userImage?: string;
|
|
77
|
-
replyToContent?: string;
|
|
78
|
-
replyToUserName?: string;
|
|
79
72
|
}, Error, {
|
|
80
73
|
content: string;
|
|
81
|
-
messageType: "TEXT" | "IMAGE" | "SYSTEM" | "ANNOUNCEMENT";
|
|
82
|
-
imageUrl?: string;
|
|
83
|
-
replyToId?: string;
|
|
84
74
|
}, unknown>;
|
|
85
75
|
/**
|
|
86
76
|
* Update a message
|
|
87
77
|
*/
|
|
88
78
|
export declare function useUpdateEventChatMessage(eventId: string): import("@tanstack/react-query").UseMutationResult<{
|
|
89
79
|
id: string;
|
|
90
|
-
|
|
91
|
-
|
|
80
|
+
conversationId: string;
|
|
81
|
+
role: "USER" | "ASSISTANT" | "SYSTEM";
|
|
92
82
|
content: string;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
isEdited: boolean;
|
|
97
|
-
isDeleted: boolean;
|
|
83
|
+
model?: Record<string, never>;
|
|
84
|
+
promptTokens?: Record<string, never>;
|
|
85
|
+
completionTokens?: Record<string, never>;
|
|
98
86
|
createdAt: string;
|
|
99
|
-
updatedAt?: string;
|
|
100
|
-
userName?: string;
|
|
101
|
-
userImage?: string;
|
|
102
|
-
replyToContent?: string;
|
|
103
|
-
replyToUserName?: string;
|
|
104
87
|
}, Error, {
|
|
105
88
|
messageId: string;
|
|
106
89
|
} & {
|
|
@@ -36,4 +36,5 @@ __exportStar(require("./ambassadors"), exports);
|
|
|
36
36
|
__exportStar(require("./grow90"), exports);
|
|
37
37
|
__exportStar(require("./matching"), exports);
|
|
38
38
|
__exportStar(require("./event-chat"), exports);
|
|
39
|
-
|
|
39
|
+
__exportStar(require("./user-pins"), exports);
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL211dGF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDBDQUF3QjtBQUN4Qix5Q0FBdUI7QUFDdkIsNkNBQTJCO0FBQzNCLDJDQUF5QjtBQUN6Qix5Q0FBdUI7QUFDdkIsNENBQTBCO0FBQzFCLHdDQUFzQjtBQUN0QixrREFBZ0M7QUFDaEMsMkNBQXlCO0FBQ3pCLGtEQUFnQztBQUNoQyw0Q0FBMEI7QUFDMUIsMENBQXdCO0FBQ3hCLHlDQUF1QjtBQUN2QixnREFBOEI7QUFDOUIsMkNBQXlCO0FBQ3pCLDZDQUEyQjtBQUMzQiwrQ0FBNkI7QUFDN0IsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNdXRhdGlvbiBIb29rc1xuICpcbiAqIFJlLWV4cG9ydHMgYWxsIG11dGF0aW9uIGhvb2tzIGZvciBBUEkgZW5kcG9pbnRzLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vYWRtaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9hdXRoJztcbmV4cG9ydCAqIGZyb20gJy4vYm9va2luZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9odWJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGlicmFyeSc7XG5leHBvcnQgKiBmcm9tICcuL21hcCc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9vZmZlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vc3VwcG9ydCc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vamFjayc7XG5leHBvcnQgKiBmcm9tICcuL2FtYmFzc2Fkb3JzJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JvdzkwJztcbmV4cG9ydCAqIGZyb20gJy4vbWF0Y2hpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudC1jaGF0JztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1waW5zJztcbiJdfQ==
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Pins Mutation Hooks
|
|
3
|
+
*
|
|
4
|
+
* TanStack Query mutation hooks for user pin operations.
|
|
5
|
+
* These hooks handle creating and deleting user pins
|
|
6
|
+
* ("I'm here now" / "I'll be there").
|
|
7
|
+
*
|
|
8
|
+
* @module api/mutations/user-pins
|
|
9
|
+
*/
|
|
10
|
+
import { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
11
|
+
import { UserPinResponse, PinType } from '../queries/user-pins';
|
|
12
|
+
export interface CreatePinRequest {
|
|
13
|
+
type: PinType;
|
|
14
|
+
latitude: number;
|
|
15
|
+
longitude: number;
|
|
16
|
+
locationName?: string;
|
|
17
|
+
activity: string;
|
|
18
|
+
venueId?: string;
|
|
19
|
+
scheduledTime?: string;
|
|
20
|
+
duration?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create a new user pin
|
|
24
|
+
*
|
|
25
|
+
* @description
|
|
26
|
+
* Creates a new pin showing where the user is or will be.
|
|
27
|
+
* Any existing active pin is automatically deactivated.
|
|
28
|
+
*
|
|
29
|
+
* Two types of pins:
|
|
30
|
+
* - HERE_NOW: User is currently at this location (default 1 hour duration)
|
|
31
|
+
* - SCHEDULED: User will be at this location at a specific time (default 2 hour duration)
|
|
32
|
+
*
|
|
33
|
+
* @endpoint POST /api/v1/user-pins
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* Drop a "I'm here now" pin:
|
|
37
|
+
* ```tsx
|
|
38
|
+
* import { useCreateUserPin } from '@growsober/sdk';
|
|
39
|
+
*
|
|
40
|
+
* function DropPinButton({ location }) {
|
|
41
|
+
* const createPin = useCreateUserPin();
|
|
42
|
+
*
|
|
43
|
+
* const handleDropPin = () => {
|
|
44
|
+
* createPin.mutate({
|
|
45
|
+
* type: 'HERE_NOW',
|
|
46
|
+
* latitude: location.lat,
|
|
47
|
+
* longitude: location.lng,
|
|
48
|
+
* locationName: 'Fabrica Coffee',
|
|
49
|
+
* activity: 'Working remotely',
|
|
50
|
+
* duration: 120, // 2 hours
|
|
51
|
+
* });
|
|
52
|
+
* };
|
|
53
|
+
*
|
|
54
|
+
* return (
|
|
55
|
+
* <Button onPress={handleDropPin} loading={createPin.isPending}>
|
|
56
|
+
* Drop Pin
|
|
57
|
+
* </Button>
|
|
58
|
+
* );
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* Schedule a pin for later:
|
|
64
|
+
* ```tsx
|
|
65
|
+
* import { useCreateUserPin } from '@growsober/sdk';
|
|
66
|
+
*
|
|
67
|
+
* function SchedulePinForm() {
|
|
68
|
+
* const createPin = useCreateUserPin({
|
|
69
|
+
* onSuccess: () => {
|
|
70
|
+
* toast.show('Pin scheduled!');
|
|
71
|
+
* },
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* const handleSchedule = (data) => {
|
|
75
|
+
* createPin.mutate({
|
|
76
|
+
* type: 'SCHEDULED',
|
|
77
|
+
* latitude: data.venue.lat,
|
|
78
|
+
* longitude: data.venue.lng,
|
|
79
|
+
* locationName: data.venue.name,
|
|
80
|
+
* venueId: data.venue.id,
|
|
81
|
+
* activity: 'Coffee meetup',
|
|
82
|
+
* scheduledTime: data.time.toISOString(),
|
|
83
|
+
* duration: 90,
|
|
84
|
+
* });
|
|
85
|
+
* };
|
|
86
|
+
*
|
|
87
|
+
* return <ScheduleForm onSubmit={handleSchedule} />;
|
|
88
|
+
* }
|
|
89
|
+
* ```
|
|
90
|
+
*
|
|
91
|
+
* @param options - TanStack Query mutation options
|
|
92
|
+
* @returns TanStack Query mutation result
|
|
93
|
+
*/
|
|
94
|
+
export declare function useCreateUserPin(options?: Omit<UseMutationOptions<UserPinResponse, Error, CreatePinRequest>, 'mutationFn'>): UseMutationResult<UserPinResponse, Error, CreatePinRequest>;
|
|
95
|
+
/**
|
|
96
|
+
* Delete a user pin
|
|
97
|
+
*
|
|
98
|
+
* @description
|
|
99
|
+
* Deactivates a user pin. Users can only delete their own pins.
|
|
100
|
+
*
|
|
101
|
+
* @endpoint DELETE /api/v1/user-pins/:id
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```tsx
|
|
105
|
+
* import { useDeleteUserPin } from '@growsober/sdk';
|
|
106
|
+
*
|
|
107
|
+
* function MyPinCard({ pin }) {
|
|
108
|
+
* const deletePin = useDeleteUserPin({
|
|
109
|
+
* onSuccess: () => {
|
|
110
|
+
* toast.show('Pin removed');
|
|
111
|
+
* },
|
|
112
|
+
* });
|
|
113
|
+
*
|
|
114
|
+
* return (
|
|
115
|
+
* <Card>
|
|
116
|
+
* <Text>{pin.activity}</Text>
|
|
117
|
+
* <Text>At {pin.locationName}</Text>
|
|
118
|
+
* <Button
|
|
119
|
+
* onPress={() => deletePin.mutate(pin.id)}
|
|
120
|
+
* loading={deletePin.isPending}
|
|
121
|
+
* >
|
|
122
|
+
* Remove Pin
|
|
123
|
+
* </Button>
|
|
124
|
+
* </Card>
|
|
125
|
+
* );
|
|
126
|
+
* }
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* @param options - TanStack Query mutation options
|
|
130
|
+
* @returns TanStack Query mutation result
|
|
131
|
+
*/
|
|
132
|
+
export declare function useDeleteUserPin(options?: Omit<UseMutationOptions<void, Error, string>, 'mutationFn'>): UseMutationResult<void, Error, string>;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* User Pins Mutation Hooks
|
|
4
|
+
*
|
|
5
|
+
* TanStack Query mutation hooks for user pin operations.
|
|
6
|
+
* These hooks handle creating and deleting user pins
|
|
7
|
+
* ("I'm here now" / "I'll be there").
|
|
8
|
+
*
|
|
9
|
+
* @module api/mutations/user-pins
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.useCreateUserPin = useCreateUserPin;
|
|
13
|
+
exports.useDeleteUserPin = useDeleteUserPin;
|
|
14
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
15
|
+
const client_1 = require("../client");
|
|
16
|
+
const user_pins_1 = require("../queries/user-pins");
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// MUTATION HOOKS
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Create a new user pin
|
|
22
|
+
*
|
|
23
|
+
* @description
|
|
24
|
+
* Creates a new pin showing where the user is or will be.
|
|
25
|
+
* Any existing active pin is automatically deactivated.
|
|
26
|
+
*
|
|
27
|
+
* Two types of pins:
|
|
28
|
+
* - HERE_NOW: User is currently at this location (default 1 hour duration)
|
|
29
|
+
* - SCHEDULED: User will be at this location at a specific time (default 2 hour duration)
|
|
30
|
+
*
|
|
31
|
+
* @endpoint POST /api/v1/user-pins
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* Drop a "I'm here now" pin:
|
|
35
|
+
* ```tsx
|
|
36
|
+
* import { useCreateUserPin } from '@growsober/sdk';
|
|
37
|
+
*
|
|
38
|
+
* function DropPinButton({ location }) {
|
|
39
|
+
* const createPin = useCreateUserPin();
|
|
40
|
+
*
|
|
41
|
+
* const handleDropPin = () => {
|
|
42
|
+
* createPin.mutate({
|
|
43
|
+
* type: 'HERE_NOW',
|
|
44
|
+
* latitude: location.lat,
|
|
45
|
+
* longitude: location.lng,
|
|
46
|
+
* locationName: 'Fabrica Coffee',
|
|
47
|
+
* activity: 'Working remotely',
|
|
48
|
+
* duration: 120, // 2 hours
|
|
49
|
+
* });
|
|
50
|
+
* };
|
|
51
|
+
*
|
|
52
|
+
* return (
|
|
53
|
+
* <Button onPress={handleDropPin} loading={createPin.isPending}>
|
|
54
|
+
* Drop Pin
|
|
55
|
+
* </Button>
|
|
56
|
+
* );
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* Schedule a pin for later:
|
|
62
|
+
* ```tsx
|
|
63
|
+
* import { useCreateUserPin } from '@growsober/sdk';
|
|
64
|
+
*
|
|
65
|
+
* function SchedulePinForm() {
|
|
66
|
+
* const createPin = useCreateUserPin({
|
|
67
|
+
* onSuccess: () => {
|
|
68
|
+
* toast.show('Pin scheduled!');
|
|
69
|
+
* },
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* const handleSchedule = (data) => {
|
|
73
|
+
* createPin.mutate({
|
|
74
|
+
* type: 'SCHEDULED',
|
|
75
|
+
* latitude: data.venue.lat,
|
|
76
|
+
* longitude: data.venue.lng,
|
|
77
|
+
* locationName: data.venue.name,
|
|
78
|
+
* venueId: data.venue.id,
|
|
79
|
+
* activity: 'Coffee meetup',
|
|
80
|
+
* scheduledTime: data.time.toISOString(),
|
|
81
|
+
* duration: 90,
|
|
82
|
+
* });
|
|
83
|
+
* };
|
|
84
|
+
*
|
|
85
|
+
* return <ScheduleForm onSubmit={handleSchedule} />;
|
|
86
|
+
* }
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* @param options - TanStack Query mutation options
|
|
90
|
+
* @returns TanStack Query mutation result
|
|
91
|
+
*/
|
|
92
|
+
function useCreateUserPin(options) {
|
|
93
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
94
|
+
return (0, react_query_1.useMutation)({
|
|
95
|
+
mutationFn: async (data) => {
|
|
96
|
+
const client = (0, client_1.getApiClient)();
|
|
97
|
+
const response = await client.post('/api/v1/user-pins', data);
|
|
98
|
+
return response.data;
|
|
99
|
+
},
|
|
100
|
+
onSuccess: () => {
|
|
101
|
+
// Invalidate pin queries to reflect new pin
|
|
102
|
+
queryClient.invalidateQueries({ queryKey: user_pins_1.userPinKeys.all });
|
|
103
|
+
},
|
|
104
|
+
...options,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Delete a user pin
|
|
109
|
+
*
|
|
110
|
+
* @description
|
|
111
|
+
* Deactivates a user pin. Users can only delete their own pins.
|
|
112
|
+
*
|
|
113
|
+
* @endpoint DELETE /api/v1/user-pins/:id
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```tsx
|
|
117
|
+
* import { useDeleteUserPin } from '@growsober/sdk';
|
|
118
|
+
*
|
|
119
|
+
* function MyPinCard({ pin }) {
|
|
120
|
+
* const deletePin = useDeleteUserPin({
|
|
121
|
+
* onSuccess: () => {
|
|
122
|
+
* toast.show('Pin removed');
|
|
123
|
+
* },
|
|
124
|
+
* });
|
|
125
|
+
*
|
|
126
|
+
* return (
|
|
127
|
+
* <Card>
|
|
128
|
+
* <Text>{pin.activity}</Text>
|
|
129
|
+
* <Text>At {pin.locationName}</Text>
|
|
130
|
+
* <Button
|
|
131
|
+
* onPress={() => deletePin.mutate(pin.id)}
|
|
132
|
+
* loading={deletePin.isPending}
|
|
133
|
+
* >
|
|
134
|
+
* Remove Pin
|
|
135
|
+
* </Button>
|
|
136
|
+
* </Card>
|
|
137
|
+
* );
|
|
138
|
+
* }
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* @param options - TanStack Query mutation options
|
|
142
|
+
* @returns TanStack Query mutation result
|
|
143
|
+
*/
|
|
144
|
+
function useDeleteUserPin(options) {
|
|
145
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
146
|
+
return (0, react_query_1.useMutation)({
|
|
147
|
+
mutationFn: async (pinId) => {
|
|
148
|
+
const client = (0, client_1.getApiClient)();
|
|
149
|
+
await client.delete(`/api/v1/user-pins/${pinId}`);
|
|
150
|
+
},
|
|
151
|
+
onSuccess: () => {
|
|
152
|
+
// Invalidate pin queries to reflect deletion
|
|
153
|
+
queryClient.invalidateQueries({ queryKey: user_pins_1.userPinKeys.all });
|
|
154
|
+
},
|
|
155
|
+
...options,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1waW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9tdXRhdGlvbnMvdXNlci1waW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRzs7QUFzR0gsNENBb0JDO0FBdUNELDRDQWdCQztBQS9LRCx1REFLK0I7QUFDL0Isc0NBQXlDO0FBQ3pDLG9EQUE2RTtBQWlCN0UsK0VBQStFO0FBQy9FLGlCQUFpQjtBQUNqQiwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLE9BR0M7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLElBQXNCLEVBQTRCLEVBQUU7WUFDckUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFrQixtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDZCw0Q0FBNEM7WUFDNUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHVCQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsT0FBcUU7SUFFckUsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFhLEVBQWlCLEVBQUU7WUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ2QsNkNBQTZDO1lBQzdDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSx1QkFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZXIgUGlucyBNdXRhdGlvbiBIb29rc1xuICpcbiAqIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIGhvb2tzIGZvciB1c2VyIHBpbiBvcGVyYXRpb25zLlxuICogVGhlc2UgaG9va3MgaGFuZGxlIGNyZWF0aW5nIGFuZCBkZWxldGluZyB1c2VyIHBpbnNcbiAqIChcIkknbSBoZXJlIG5vd1wiIC8gXCJJJ2xsIGJlIHRoZXJlXCIpLlxuICpcbiAqIEBtb2R1bGUgYXBpL211dGF0aW9ucy91c2VyLXBpbnNcbiAqL1xuXG5pbXBvcnQge1xuICB1c2VNdXRhdGlvbixcbiAgVXNlTXV0YXRpb25PcHRpb25zLFxuICBVc2VNdXRhdGlvblJlc3VsdCxcbiAgdXNlUXVlcnlDbGllbnQsXG59IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgdXNlclBpbktleXMsIFVzZXJQaW5SZXNwb25zZSwgUGluVHlwZSB9IGZyb20gJy4uL3F1ZXJpZXMvdXNlci1waW5zJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUkVRVUVTVCBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVBpblJlcXVlc3Qge1xuICB0eXBlOiBQaW5UeXBlO1xuICBsYXRpdHVkZTogbnVtYmVyO1xuICBsb25naXR1ZGU6IG51bWJlcjtcbiAgbG9jYXRpb25OYW1lPzogc3RyaW5nO1xuICBhY3Rpdml0eTogc3RyaW5nO1xuICB2ZW51ZUlkPzogc3RyaW5nO1xuICBzY2hlZHVsZWRUaW1lPzogc3RyaW5nOyAvLyBJU08gZGF0ZSBzdHJpbmcsIHJlcXVpcmVkIGZvciBTQ0hFRFVMRUQgdHlwZVxuICBkdXJhdGlvbj86IG51bWJlcjsgLy8gbWludXRlcywgZGVmYXVsdCA2MCBmb3IgSEVSRV9OT1csIDEyMCBmb3IgU0NIRURVTEVEXG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1VVEFUSU9OIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IHVzZXIgcGluXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGVzIGEgbmV3IHBpbiBzaG93aW5nIHdoZXJlIHRoZSB1c2VyIGlzIG9yIHdpbGwgYmUuXG4gKiBBbnkgZXhpc3RpbmcgYWN0aXZlIHBpbiBpcyBhdXRvbWF0aWNhbGx5IGRlYWN0aXZhdGVkLlxuICpcbiAqIFR3byB0eXBlcyBvZiBwaW5zOlxuICogLSBIRVJFX05PVzogVXNlciBpcyBjdXJyZW50bHkgYXQgdGhpcyBsb2NhdGlvbiAoZGVmYXVsdCAxIGhvdXIgZHVyYXRpb24pXG4gKiAtIFNDSEVEVUxFRDogVXNlciB3aWxsIGJlIGF0IHRoaXMgbG9jYXRpb24gYXQgYSBzcGVjaWZpYyB0aW1lIChkZWZhdWx0IDIgaG91ciBkdXJhdGlvbilcbiAqXG4gKiBAZW5kcG9pbnQgUE9TVCAvYXBpL3YxL3VzZXItcGluc1xuICpcbiAqIEBleGFtcGxlXG4gKiBEcm9wIGEgXCJJJ20gaGVyZSBub3dcIiBwaW46XG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZUNyZWF0ZVVzZXJQaW4gfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gRHJvcFBpbkJ1dHRvbih7IGxvY2F0aW9uIH0pIHtcbiAqICAgY29uc3QgY3JlYXRlUGluID0gdXNlQ3JlYXRlVXNlclBpbigpO1xuICpcbiAqICAgY29uc3QgaGFuZGxlRHJvcFBpbiA9ICgpID0+IHtcbiAqICAgICBjcmVhdGVQaW4ubXV0YXRlKHtcbiAqICAgICAgIHR5cGU6ICdIRVJFX05PVycsXG4gKiAgICAgICBsYXRpdHVkZTogbG9jYXRpb24ubGF0LFxuICogICAgICAgbG9uZ2l0dWRlOiBsb2NhdGlvbi5sbmcsXG4gKiAgICAgICBsb2NhdGlvbk5hbWU6ICdGYWJyaWNhIENvZmZlZScsXG4gKiAgICAgICBhY3Rpdml0eTogJ1dvcmtpbmcgcmVtb3RlbHknLFxuICogICAgICAgZHVyYXRpb246IDEyMCwgLy8gMiBob3Vyc1xuICogICAgIH0pO1xuICogICB9O1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8QnV0dG9uIG9uUHJlc3M9e2hhbmRsZURyb3BQaW59IGxvYWRpbmc9e2NyZWF0ZVBpbi5pc1BlbmRpbmd9PlxuICogICAgICAgRHJvcCBQaW5cbiAqICAgICA8L0J1dHRvbj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBTY2hlZHVsZSBhIHBpbiBmb3IgbGF0ZXI6XG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZUNyZWF0ZVVzZXJQaW4gfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gU2NoZWR1bGVQaW5Gb3JtKCkge1xuICogICBjb25zdCBjcmVhdGVQaW4gPSB1c2VDcmVhdGVVc2VyUGluKHtcbiAqICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAqICAgICAgIHRvYXN0LnNob3coJ1BpbiBzY2hlZHVsZWQhJyk7XG4gKiAgICAgfSxcbiAqICAgfSk7XG4gKlxuICogICBjb25zdCBoYW5kbGVTY2hlZHVsZSA9IChkYXRhKSA9PiB7XG4gKiAgICAgY3JlYXRlUGluLm11dGF0ZSh7XG4gKiAgICAgICB0eXBlOiAnU0NIRURVTEVEJyxcbiAqICAgICAgIGxhdGl0dWRlOiBkYXRhLnZlbnVlLmxhdCxcbiAqICAgICAgIGxvbmdpdHVkZTogZGF0YS52ZW51ZS5sbmcsXG4gKiAgICAgICBsb2NhdGlvbk5hbWU6IGRhdGEudmVudWUubmFtZSxcbiAqICAgICAgIHZlbnVlSWQ6IGRhdGEudmVudWUuaWQsXG4gKiAgICAgICBhY3Rpdml0eTogJ0NvZmZlZSBtZWV0dXAnLFxuICogICAgICAgc2NoZWR1bGVkVGltZTogZGF0YS50aW1lLnRvSVNPU3RyaW5nKCksXG4gKiAgICAgICBkdXJhdGlvbjogOTAsXG4gKiAgICAgfSk7XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4gPFNjaGVkdWxlRm9ybSBvblN1Ym1pdD17aGFuZGxlU2NoZWR1bGV9IC8+O1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZVVzZXJQaW4oXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxVc2VyUGluUmVzcG9uc2UsIEVycm9yLCBDcmVhdGVQaW5SZXF1ZXN0PixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8VXNlclBpblJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlUGluUmVxdWVzdD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogQ3JlYXRlUGluUmVxdWVzdCk6IFByb21pc2U8VXNlclBpblJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8VXNlclBpblJlc3BvbnNlPignL2FwaS92MS91c2VyLXBpbnMnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIHBpbiBxdWVyaWVzIHRvIHJlZmxlY3QgbmV3IHBpblxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogdXNlclBpbktleXMuYWxsIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsZXRlIGEgdXNlciBwaW5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIERlYWN0aXZhdGVzIGEgdXNlciBwaW4uIFVzZXJzIGNhbiBvbmx5IGRlbGV0ZSB0aGVpciBvd24gcGlucy5cbiAqXG4gKiBAZW5kcG9pbnQgREVMRVRFIC9hcGkvdjEvdXNlci1waW5zLzppZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZURlbGV0ZVVzZXJQaW4gfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gTXlQaW5DYXJkKHsgcGluIH0pIHtcbiAqICAgY29uc3QgZGVsZXRlUGluID0gdXNlRGVsZXRlVXNlclBpbih7XG4gKiAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gKiAgICAgICB0b2FzdC5zaG93KCdQaW4gcmVtb3ZlZCcpO1xuICogICAgIH0sXG4gKiAgIH0pO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Q2FyZD5cbiAqICAgICAgIDxUZXh0PntwaW4uYWN0aXZpdHl9PC9UZXh0PlxuICogICAgICAgPFRleHQ+QXQge3Bpbi5sb2NhdGlvbk5hbWV9PC9UZXh0PlxuICogICAgICAgPEJ1dHRvblxuICogICAgICAgICBvblByZXNzPXsoKSA9PiBkZWxldGVQaW4ubXV0YXRlKHBpbi5pZCl9XG4gKiAgICAgICAgIGxvYWRpbmc9e2RlbGV0ZVBpbi5pc1BlbmRpbmd9XG4gKiAgICAgICA+XG4gKiAgICAgICAgIFJlbW92ZSBQaW5cbiAqICAgICAgIDwvQnV0dG9uPlxuICogICAgIDwvQ2FyZD5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWxldGVVc2VyUGluKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8dm9pZCwgRXJyb3IsIHN0cmluZz4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PHZvaWQsIEVycm9yLCBzdHJpbmc+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHBpbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgYXdhaXQgY2xpZW50LmRlbGV0ZShgL2FwaS92MS91c2VyLXBpbnMvJHtwaW5JZH1gKTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBwaW4gcXVlcmllcyB0byByZWZsZWN0IGRlbGV0aW9uXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiB1c2VyUGluS2V5cy5hbGwgfSk7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -38,4 +38,5 @@ __exportStar(require("./ambassadors"), exports);
|
|
|
38
38
|
__exportStar(require("./grow90"), exports);
|
|
39
39
|
__exportStar(require("./matching"), exports);
|
|
40
40
|
__exportStar(require("./event-chat"), exports);
|
|
41
|
-
|
|
41
|
+
__exportStar(require("./user-pins"), exports);
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCwwQ0FBd0I7QUFDeEIseUNBQXVCO0FBQ3ZCLDZDQUEyQjtBQUMzQiwrQ0FBNkI7QUFDN0IsMkNBQXlCO0FBQ3pCLDJDQUF5QjtBQUN6Qix5Q0FBdUI7QUFDdkIsNENBQTBCO0FBQzFCLHdDQUFzQjtBQUN0QixrREFBZ0M7QUFDaEMsMkNBQXlCO0FBQ3pCLGtEQUFnQztBQUNoQyw0Q0FBMEI7QUFDMUIsMENBQXdCO0FBQ3hCLHlDQUF1QjtBQUN2QixnREFBOEI7QUFDOUIsMkNBQXlCO0FBQ3pCLDZDQUEyQjtBQUMzQiwrQ0FBNkI7QUFDN0IsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBRdWVyeSBIb29rc1xuICpcbiAqIFJlLWV4cG9ydHMgYWxsIHF1ZXJ5IGhvb2tzIGZvciBBUEkgZW5kcG9pbnRzLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vYWRtaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9hdXRoJztcbmV4cG9ydCAqIGZyb20gJy4vYm9va2luZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9idXNpbmVzc2VzJztcbmV4cG9ydCAqIGZyb20gJy4vY2l0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vaHVicyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYnJhcnknO1xuZXhwb3J0ICogZnJvbSAnLi9tYXAnO1xuZXhwb3J0ICogZnJvbSAnLi9ub3RpZmljYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vb2ZmZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Vic2NyaXB0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3N1cHBvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi91c2Vycyc7XG5leHBvcnQgKiBmcm9tICcuL2phY2snO1xuZXhwb3J0ICogZnJvbSAnLi9hbWJhc3NhZG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3c5MCc7XG5leHBvcnQgKiBmcm9tICcuL21hdGNoaW5nJztcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnQtY2hhdCc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItcGlucyc7XG4iXX0=
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Pins Query Hooks
|
|
3
|
+
*
|
|
4
|
+
* TanStack Query hooks for user pin read operations.
|
|
5
|
+
* These hooks handle fetching user pins for the map feature
|
|
6
|
+
* ("I'm here now" / "I'll be there").
|
|
7
|
+
*
|
|
8
|
+
* @module api/queries/user-pins
|
|
9
|
+
*/
|
|
10
|
+
import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
|
|
11
|
+
export type PinType = 'HERE_NOW' | 'SCHEDULED';
|
|
12
|
+
export interface UserPinResponse {
|
|
13
|
+
id: string;
|
|
14
|
+
userId: string;
|
|
15
|
+
type: PinType;
|
|
16
|
+
latitude: number;
|
|
17
|
+
longitude: number;
|
|
18
|
+
locationName: string | null;
|
|
19
|
+
activity: string;
|
|
20
|
+
venueId: string | null;
|
|
21
|
+
scheduledTime: string | null;
|
|
22
|
+
expiresAt: string;
|
|
23
|
+
duration: number | null;
|
|
24
|
+
isActive: boolean;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
user?: {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string | null;
|
|
29
|
+
profileImage: string | null;
|
|
30
|
+
};
|
|
31
|
+
venue?: {
|
|
32
|
+
id: string;
|
|
33
|
+
name: string;
|
|
34
|
+
slug: string | null;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export interface NearbyPinsResponse {
|
|
38
|
+
pins: UserPinResponse[];
|
|
39
|
+
total: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Query key factory for user pin queries
|
|
43
|
+
*/
|
|
44
|
+
export declare const userPinKeys: {
|
|
45
|
+
all: readonly ["user-pins"];
|
|
46
|
+
nearby: (params: NearbyPinsParams) => readonly ["user-pins", "nearby", NearbyPinsParams];
|
|
47
|
+
me: () => readonly ["user-pins", "me"];
|
|
48
|
+
};
|
|
49
|
+
export interface NearbyPinsParams {
|
|
50
|
+
lat: number;
|
|
51
|
+
lng: number;
|
|
52
|
+
radius?: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get nearby user pins
|
|
56
|
+
*
|
|
57
|
+
* @description
|
|
58
|
+
* Retrieves active user pins within a radius of a location.
|
|
59
|
+
* Shows where other GrowSober members are or will be.
|
|
60
|
+
*
|
|
61
|
+
* @endpoint GET /api/v1/user-pins/nearby
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```tsx
|
|
65
|
+
* import { useNearbyPins } from '@growsober/sdk';
|
|
66
|
+
*
|
|
67
|
+
* function MapWithPins() {
|
|
68
|
+
* const { data, isLoading } = useNearbyPins({
|
|
69
|
+
* lat: 38.7097,
|
|
70
|
+
* lng: -9.1367,
|
|
71
|
+
* radius: 5, // 5km radius
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* return (
|
|
75
|
+
* <Map>
|
|
76
|
+
* {data?.pins.map(pin => (
|
|
77
|
+
* <Marker
|
|
78
|
+
* key={pin.id}
|
|
79
|
+
* position={[pin.latitude, pin.longitude]}
|
|
80
|
+
* icon={pin.type === 'HERE_NOW' ? 'here' : 'scheduled'}
|
|
81
|
+
* >
|
|
82
|
+
* <Popup>
|
|
83
|
+
* <p>{pin.user?.name}</p>
|
|
84
|
+
* <p>{pin.activity}</p>
|
|
85
|
+
* </Popup>
|
|
86
|
+
* </Marker>
|
|
87
|
+
* ))}
|
|
88
|
+
* </Map>
|
|
89
|
+
* );
|
|
90
|
+
* }
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* @param params - Location and radius parameters
|
|
94
|
+
* @param options - TanStack Query options
|
|
95
|
+
* @returns TanStack Query result with nearby pins
|
|
96
|
+
*/
|
|
97
|
+
export declare function useNearbyPins(params: NearbyPinsParams, options?: Omit<UseQueryOptions<NearbyPinsResponse>, 'queryKey' | 'queryFn'>): UseQueryResult<NearbyPinsResponse>;
|
|
98
|
+
/**
|
|
99
|
+
* Get current user's active pins
|
|
100
|
+
*
|
|
101
|
+
* @description
|
|
102
|
+
* Retrieves the authenticated user's active pins.
|
|
103
|
+
* Users can have at most one active pin at a time.
|
|
104
|
+
*
|
|
105
|
+
* @endpoint GET /api/v1/user-pins/me
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```tsx
|
|
109
|
+
* import { useMyPins } from '@growsober/sdk';
|
|
110
|
+
*
|
|
111
|
+
* function MyPinStatus() {
|
|
112
|
+
* const { data: pins, isLoading } = useMyPins();
|
|
113
|
+
*
|
|
114
|
+
* if (isLoading) return <Spinner />;
|
|
115
|
+
*
|
|
116
|
+
* if (!pins?.length) {
|
|
117
|
+
* return <Text>You haven't dropped a pin yet</Text>;
|
|
118
|
+
* }
|
|
119
|
+
*
|
|
120
|
+
* const pin = pins[0];
|
|
121
|
+
* return (
|
|
122
|
+
* <View>
|
|
123
|
+
* <Text>You're at {pin.locationName}</Text>
|
|
124
|
+
* <Text>Activity: {pin.activity}</Text>
|
|
125
|
+
* <Text>Expires: {formatTime(pin.expiresAt)}</Text>
|
|
126
|
+
* </View>
|
|
127
|
+
* );
|
|
128
|
+
* }
|
|
129
|
+
* ```
|
|
130
|
+
*
|
|
131
|
+
* @param options - TanStack Query options
|
|
132
|
+
* @returns TanStack Query result with user's active pins
|
|
133
|
+
*/
|
|
134
|
+
export declare function useMyPins(options?: Omit<UseQueryOptions<UserPinResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<UserPinResponse[]>;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* User Pins Query Hooks
|
|
4
|
+
*
|
|
5
|
+
* TanStack Query hooks for user pin read operations.
|
|
6
|
+
* These hooks handle fetching user pins for the map feature
|
|
7
|
+
* ("I'm here now" / "I'll be there").
|
|
8
|
+
*
|
|
9
|
+
* @module api/queries/user-pins
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.userPinKeys = void 0;
|
|
13
|
+
exports.useNearbyPins = useNearbyPins;
|
|
14
|
+
exports.useMyPins = useMyPins;
|
|
15
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
16
|
+
const client_1 = require("../client");
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// QUERY KEYS
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Query key factory for user pin queries
|
|
22
|
+
*/
|
|
23
|
+
exports.userPinKeys = {
|
|
24
|
+
all: ['user-pins'],
|
|
25
|
+
nearby: (params) => [...exports.userPinKeys.all, 'nearby', params],
|
|
26
|
+
me: () => [...exports.userPinKeys.all, 'me'],
|
|
27
|
+
};
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// QUERY HOOKS
|
|
30
|
+
// ============================================================================
|
|
31
|
+
/**
|
|
32
|
+
* Get nearby user pins
|
|
33
|
+
*
|
|
34
|
+
* @description
|
|
35
|
+
* Retrieves active user pins within a radius of a location.
|
|
36
|
+
* Shows where other GrowSober members are or will be.
|
|
37
|
+
*
|
|
38
|
+
* @endpoint GET /api/v1/user-pins/nearby
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```tsx
|
|
42
|
+
* import { useNearbyPins } from '@growsober/sdk';
|
|
43
|
+
*
|
|
44
|
+
* function MapWithPins() {
|
|
45
|
+
* const { data, isLoading } = useNearbyPins({
|
|
46
|
+
* lat: 38.7097,
|
|
47
|
+
* lng: -9.1367,
|
|
48
|
+
* radius: 5, // 5km radius
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* return (
|
|
52
|
+
* <Map>
|
|
53
|
+
* {data?.pins.map(pin => (
|
|
54
|
+
* <Marker
|
|
55
|
+
* key={pin.id}
|
|
56
|
+
* position={[pin.latitude, pin.longitude]}
|
|
57
|
+
* icon={pin.type === 'HERE_NOW' ? 'here' : 'scheduled'}
|
|
58
|
+
* >
|
|
59
|
+
* <Popup>
|
|
60
|
+
* <p>{pin.user?.name}</p>
|
|
61
|
+
* <p>{pin.activity}</p>
|
|
62
|
+
* </Popup>
|
|
63
|
+
* </Marker>
|
|
64
|
+
* ))}
|
|
65
|
+
* </Map>
|
|
66
|
+
* );
|
|
67
|
+
* }
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @param params - Location and radius parameters
|
|
71
|
+
* @param options - TanStack Query options
|
|
72
|
+
* @returns TanStack Query result with nearby pins
|
|
73
|
+
*/
|
|
74
|
+
function useNearbyPins(params, options) {
|
|
75
|
+
return (0, react_query_1.useQuery)({
|
|
76
|
+
queryKey: exports.userPinKeys.nearby(params),
|
|
77
|
+
queryFn: async () => {
|
|
78
|
+
const client = (0, client_1.getApiClient)();
|
|
79
|
+
const response = await client.get('/api/v1/user-pins/nearby', {
|
|
80
|
+
params: {
|
|
81
|
+
lat: params.lat,
|
|
82
|
+
lng: params.lng,
|
|
83
|
+
radius: params.radius,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
return response.data;
|
|
87
|
+
},
|
|
88
|
+
enabled: params.lat !== undefined && params.lng !== undefined,
|
|
89
|
+
staleTime: 30 * 1000, // 30 seconds - pins change frequently
|
|
90
|
+
...options,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get current user's active pins
|
|
95
|
+
*
|
|
96
|
+
* @description
|
|
97
|
+
* Retrieves the authenticated user's active pins.
|
|
98
|
+
* Users can have at most one active pin at a time.
|
|
99
|
+
*
|
|
100
|
+
* @endpoint GET /api/v1/user-pins/me
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```tsx
|
|
104
|
+
* import { useMyPins } from '@growsober/sdk';
|
|
105
|
+
*
|
|
106
|
+
* function MyPinStatus() {
|
|
107
|
+
* const { data: pins, isLoading } = useMyPins();
|
|
108
|
+
*
|
|
109
|
+
* if (isLoading) return <Spinner />;
|
|
110
|
+
*
|
|
111
|
+
* if (!pins?.length) {
|
|
112
|
+
* return <Text>You haven't dropped a pin yet</Text>;
|
|
113
|
+
* }
|
|
114
|
+
*
|
|
115
|
+
* const pin = pins[0];
|
|
116
|
+
* return (
|
|
117
|
+
* <View>
|
|
118
|
+
* <Text>You're at {pin.locationName}</Text>
|
|
119
|
+
* <Text>Activity: {pin.activity}</Text>
|
|
120
|
+
* <Text>Expires: {formatTime(pin.expiresAt)}</Text>
|
|
121
|
+
* </View>
|
|
122
|
+
* );
|
|
123
|
+
* }
|
|
124
|
+
* ```
|
|
125
|
+
*
|
|
126
|
+
* @param options - TanStack Query options
|
|
127
|
+
* @returns TanStack Query result with user's active pins
|
|
128
|
+
*/
|
|
129
|
+
function useMyPins(options) {
|
|
130
|
+
return (0, react_query_1.useQuery)({
|
|
131
|
+
queryKey: exports.userPinKeys.me(),
|
|
132
|
+
queryFn: async () => {
|
|
133
|
+
const client = (0, client_1.getApiClient)();
|
|
134
|
+
const response = await client.get('/api/v1/user-pins/me');
|
|
135
|
+
return response.data;
|
|
136
|
+
},
|
|
137
|
+
staleTime: 60 * 1000, // 1 minute
|
|
138
|
+
...options,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1waW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9xdWVyaWVzL3VzZXItcGlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7OztBQWdISCxzQ0FxQkM7QUFzQ0QsOEJBYUM7QUF0TEQsdURBQWtGO0FBQ2xGLHNDQUF5QztBQXVDekMsK0VBQStFO0FBQy9FLGFBQWE7QUFDYiwrRUFBK0U7QUFFL0U7O0dBRUc7QUFDVSxRQUFBLFdBQVcsR0FBRztJQUN6QixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQVU7SUFDM0IsTUFBTSxFQUFFLENBQUMsTUFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQVU7SUFDckYsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQVU7Q0FDOUMsQ0FBQztBQVlGLCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxTQUFnQixhQUFhLENBQzNCLE1BQXdCLEVBQ3hCLE9BQTJFO0lBRTNFLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLG1CQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxPQUFPLEVBQUUsS0FBSyxJQUFpQyxFQUFFO1lBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBcUIsMEJBQTBCLEVBQUU7Z0JBQ2hGLE1BQU0sRUFBRTtvQkFDTixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7b0JBQ2YsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO29CQUNmLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtpQkFDdEI7YUFDRixDQUFDLENBQUM7WUFDSCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVM7UUFDN0QsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsc0NBQXNDO1FBQzVELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLE9BQTBFO0lBRTFFLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLG1CQUFXLENBQUMsRUFBRSxFQUFFO1FBQzFCLE9BQU8sRUFBRSxLQUFLLElBQWdDLEVBQUU7WUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFvQixzQkFBc0IsQ0FBQyxDQUFDO1lBQzdFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVztRQUNqQyxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2VyIFBpbnMgUXVlcnkgSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBob29rcyBmb3IgdXNlciBwaW4gcmVhZCBvcGVyYXRpb25zLlxuICogVGhlc2UgaG9va3MgaGFuZGxlIGZldGNoaW5nIHVzZXIgcGlucyBmb3IgdGhlIG1hcCBmZWF0dXJlXG4gKiAoXCJJJ20gaGVyZSBub3dcIiAvIFwiSSdsbCBiZSB0aGVyZVwiKS5cbiAqXG4gKiBAbW9kdWxlIGFwaS9xdWVyaWVzL3VzZXItcGluc1xuICovXG5cbmltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMsIFVzZVF1ZXJ5UmVzdWx0IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIFBpblR5cGUgPSAnSEVSRV9OT1cnIHwgJ1NDSEVEVUxFRCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBpblJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHR5cGU6IFBpblR5cGU7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xuICBsb2NhdGlvbk5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGFjdGl2aXR5OiBzdHJpbmc7XG4gIHZlbnVlSWQ6IHN0cmluZyB8IG51bGw7XG4gIHNjaGVkdWxlZFRpbWU6IHN0cmluZyB8IG51bGw7XG4gIGV4cGlyZXNBdDogc3RyaW5nO1xuICBkdXJhdGlvbjogbnVtYmVyIHwgbnVsbDtcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1c2VyPzoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBwcm9maWxlSW1hZ2U6IHN0cmluZyB8IG51bGw7XG4gIH07XG4gIHZlbnVlPzoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNsdWc6IHN0cmluZyB8IG51bGw7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmVhcmJ5UGluc1Jlc3BvbnNlIHtcbiAgcGluczogVXNlclBpblJlc3BvbnNlW107XG4gIHRvdGFsOiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBRdWVyeSBrZXkgZmFjdG9yeSBmb3IgdXNlciBwaW4gcXVlcmllc1xuICovXG5leHBvcnQgY29uc3QgdXNlclBpbktleXMgPSB7XG4gIGFsbDogWyd1c2VyLXBpbnMnXSBhcyBjb25zdCxcbiAgbmVhcmJ5OiAocGFyYW1zOiBOZWFyYnlQaW5zUGFyYW1zKSA9PiBbLi4udXNlclBpbktleXMuYWxsLCAnbmVhcmJ5JywgcGFyYW1zXSBhcyBjb25zdCxcbiAgbWU6ICgpID0+IFsuLi51c2VyUGluS2V5cy5hbGwsICdtZSddIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUEFSQU0gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBOZWFyYnlQaW5zUGFyYW1zIHtcbiAgbGF0OiBudW1iZXI7XG4gIGxuZzogbnVtYmVyO1xuICByYWRpdXM/OiBudW1iZXI7IC8vIGttLCBkZWZhdWx0IDVcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgbmVhcmJ5IHVzZXIgcGluc1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0cmlldmVzIGFjdGl2ZSB1c2VyIHBpbnMgd2l0aGluIGEgcmFkaXVzIG9mIGEgbG9jYXRpb24uXG4gKiBTaG93cyB3aGVyZSBvdGhlciBHcm93U29iZXIgbWVtYmVycyBhcmUgb3Igd2lsbCBiZS5cbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvdXNlci1waW5zL25lYXJieVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZU5lYXJieVBpbnMgfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gTWFwV2l0aFBpbnMoKSB7XG4gKiAgIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VOZWFyYnlQaW5zKHtcbiAqICAgICBsYXQ6IDM4LjcwOTcsXG4gKiAgICAgbG5nOiAtOS4xMzY3LFxuICogICAgIHJhZGl1czogNSwgLy8gNWttIHJhZGl1c1xuICogICB9KTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPE1hcD5cbiAqICAgICAgIHtkYXRhPy5waW5zLm1hcChwaW4gPT4gKFxuICogICAgICAgICA8TWFya2VyXG4gKiAgICAgICAgICAga2V5PXtwaW4uaWR9XG4gKiAgICAgICAgICAgcG9zaXRpb249e1twaW4ubGF0aXR1ZGUsIHBpbi5sb25naXR1ZGVdfVxuICogICAgICAgICAgIGljb249e3Bpbi50eXBlID09PSAnSEVSRV9OT1cnID8gJ2hlcmUnIDogJ3NjaGVkdWxlZCd9XG4gKiAgICAgICAgID5cbiAqICAgICAgICAgICA8UG9wdXA+XG4gKiAgICAgICAgICAgICA8cD57cGluLnVzZXI/Lm5hbWV9PC9wPlxuICogICAgICAgICAgICAgPHA+e3Bpbi5hY3Rpdml0eX08L3A+XG4gKiAgICAgICAgICAgPC9Qb3B1cD5cbiAqICAgICAgICAgPC9NYXJrZXI+XG4gKiAgICAgICApKX1cbiAqICAgICA8L01hcD5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBMb2NhdGlvbiBhbmQgcmFkaXVzIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgcmVzdWx0IHdpdGggbmVhcmJ5IHBpbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU5lYXJieVBpbnMoXG4gIHBhcmFtczogTmVhcmJ5UGluc1BhcmFtcyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPE5lYXJieVBpbnNSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxOZWFyYnlQaW5zUmVzcG9uc2U+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogdXNlclBpbktleXMubmVhcmJ5KHBhcmFtcyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8TmVhcmJ5UGluc1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxOZWFyYnlQaW5zUmVzcG9uc2U+KCcvYXBpL3YxL3VzZXItcGlucy9uZWFyYnknLCB7XG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGxhdDogcGFyYW1zLmxhdCxcbiAgICAgICAgICBsbmc6IHBhcmFtcy5sbmcsXG4gICAgICAgICAgcmFkaXVzOiBwYXJhbXMucmFkaXVzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IHBhcmFtcy5sYXQgIT09IHVuZGVmaW5lZCAmJiBwYXJhbXMubG5nICE9PSB1bmRlZmluZWQsXG4gICAgc3RhbGVUaW1lOiAzMCAqIDEwMDAsIC8vIDMwIHNlY29uZHMgLSBwaW5zIGNoYW5nZSBmcmVxdWVudGx5XG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGN1cnJlbnQgdXNlcidzIGFjdGl2ZSBwaW5zXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXRyaWV2ZXMgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlcidzIGFjdGl2ZSBwaW5zLlxuICogVXNlcnMgY2FuIGhhdmUgYXQgbW9zdCBvbmUgYWN0aXZlIHBpbiBhdCBhIHRpbWUuXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL3VzZXItcGlucy9tZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZU15UGlucyB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBNeVBpblN0YXR1cygpIHtcbiAqICAgY29uc3QgeyBkYXRhOiBwaW5zLCBpc0xvYWRpbmcgfSA9IHVzZU15UGlucygpO1xuICpcbiAqICAgaWYgKGlzTG9hZGluZykgcmV0dXJuIDxTcGlubmVyIC8+O1xuICpcbiAqICAgaWYgKCFwaW5zPy5sZW5ndGgpIHtcbiAqICAgICByZXR1cm4gPFRleHQ+WW91IGhhdmVuJ3QgZHJvcHBlZCBhIHBpbiB5ZXQ8L1RleHQ+O1xuICogICB9XG4gKlxuICogICBjb25zdCBwaW4gPSBwaW5zWzBdO1xuICogICByZXR1cm4gKFxuICogICAgIDxWaWV3PlxuICogICAgICAgPFRleHQ+WW91J3JlIGF0IHtwaW4ubG9jYXRpb25OYW1lfTwvVGV4dD5cbiAqICAgICAgIDxUZXh0PkFjdGl2aXR5OiB7cGluLmFjdGl2aXR5fTwvVGV4dD5cbiAqICAgICAgIDxUZXh0PkV4cGlyZXM6IHtmb3JtYXRUaW1lKHBpbi5leHBpcmVzQXQpfTwvVGV4dD5cbiAqICAgICA8L1ZpZXc+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IHJlc3VsdCB3aXRoIHVzZXIncyBhY3RpdmUgcGluc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTXlQaW5zKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8VXNlclBpblJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8VXNlclBpblJlc3BvbnNlW10+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogdXNlclBpbktleXMubWUoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxVc2VyUGluUmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8VXNlclBpblJlc3BvbnNlW10+KCcvYXBpL3YxL3VzZXItcGlucy9tZScpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBzdGFsZVRpbWU6IDYwICogMTAwMCwgLy8gMSBtaW51dGVcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -75,7 +75,7 @@ export function useRegister(
|
|
|
75
75
|
return useMutation({
|
|
76
76
|
mutationFn: async (data: RegisterRequest): Promise<AuthResponse> => {
|
|
77
77
|
const client = getApiClient();
|
|
78
|
-
const response = await client.post<AuthResponse>('/auth/register', data);
|
|
78
|
+
const response = await client.post<AuthResponse>('/api/v1/auth/register', data);
|
|
79
79
|
return response.data;
|
|
80
80
|
},
|
|
81
81
|
onSuccess: (data, variables, context) => {
|
|
@@ -150,7 +150,7 @@ export function useLogin(
|
|
|
150
150
|
return useMutation({
|
|
151
151
|
mutationFn: async (data: LoginRequest): Promise<AuthResponse> => {
|
|
152
152
|
const client = getApiClient();
|
|
153
|
-
const response = await client.post<AuthResponse>('/auth/login', data);
|
|
153
|
+
const response = await client.post<AuthResponse>('/api/v1/auth/login', data);
|
|
154
154
|
return response.data;
|
|
155
155
|
},
|
|
156
156
|
onSuccess: (data, variables, context) => {
|
|
@@ -241,7 +241,7 @@ export function useRefreshAuthToken(
|
|
|
241
241
|
return useMutation({
|
|
242
242
|
mutationFn: async (data: RefreshTokenRequest): Promise<TokenResponse> => {
|
|
243
243
|
const client = getApiClient();
|
|
244
|
-
const response = await client.post<TokenResponse>('/auth/refresh', data);
|
|
244
|
+
const response = await client.post<TokenResponse>('/api/v1/auth/refresh', data);
|
|
245
245
|
return response.data;
|
|
246
246
|
},
|
|
247
247
|
...options,
|
|
@@ -340,7 +340,7 @@ export function useFirebaseAuth(
|
|
|
340
340
|
return useMutation({
|
|
341
341
|
mutationFn: async (data: FirebaseAuthRequest): Promise<AuthResponse> => {
|
|
342
342
|
const client = getApiClient();
|
|
343
|
-
const response = await client.post<AuthResponse>('/auth/firebase', data);
|
|
343
|
+
const response = await client.post<AuthResponse>('/api/v1/auth/firebase', data);
|
|
344
344
|
return response.data;
|
|
345
345
|
},
|
|
346
346
|
onSuccess: (data, variables, context) => {
|
|
@@ -398,7 +398,7 @@ export function useSendOtp(
|
|
|
398
398
|
return useMutation({
|
|
399
399
|
mutationFn: async (data: SendOtpRequest): Promise<OtpSentResponse> => {
|
|
400
400
|
const client = getApiClient();
|
|
401
|
-
const response = await client.post<OtpSentResponse>('/auth/phone/send-otp', data);
|
|
401
|
+
const response = await client.post<OtpSentResponse>('/api/v1/auth/phone/send-otp', data);
|
|
402
402
|
return response.data;
|
|
403
403
|
},
|
|
404
404
|
...options,
|
|
@@ -452,7 +452,7 @@ export function useVerifyOtp(
|
|
|
452
452
|
return useMutation({
|
|
453
453
|
mutationFn: async (data: VerifyOtpRequest): Promise<VerifyOtpResponse> => {
|
|
454
454
|
const client = getApiClient();
|
|
455
|
-
const response = await client.post<VerifyOtpResponse>('/auth/phone/verify-otp', data);
|
|
455
|
+
const response = await client.post<VerifyOtpResponse>('/api/v1/auth/phone/verify-otp', data);
|
|
456
456
|
return response.data;
|
|
457
457
|
},
|
|
458
458
|
onSuccess: (data, variables, context) => {
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Pins Mutation Hooks
|
|
3
|
+
*
|
|
4
|
+
* TanStack Query mutation hooks for user pin operations.
|
|
5
|
+
* These hooks handle creating and deleting user pins
|
|
6
|
+
* ("I'm here now" / "I'll be there").
|
|
7
|
+
*
|
|
8
|
+
* @module api/mutations/user-pins
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
useMutation,
|
|
13
|
+
UseMutationOptions,
|
|
14
|
+
UseMutationResult,
|
|
15
|
+
useQueryClient,
|
|
16
|
+
} from '@tanstack/react-query';
|
|
17
|
+
import { getApiClient } from '../client';
|
|
18
|
+
import { userPinKeys, UserPinResponse, PinType } from '../queries/user-pins';
|
|
19
|
+
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// REQUEST TYPES
|
|
22
|
+
// ============================================================================
|
|
23
|
+
|
|
24
|
+
export interface CreatePinRequest {
|
|
25
|
+
type: PinType;
|
|
26
|
+
latitude: number;
|
|
27
|
+
longitude: number;
|
|
28
|
+
locationName?: string;
|
|
29
|
+
activity: string;
|
|
30
|
+
venueId?: string;
|
|
31
|
+
scheduledTime?: string; // ISO date string, required for SCHEDULED type
|
|
32
|
+
duration?: number; // minutes, default 60 for HERE_NOW, 120 for SCHEDULED
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// MUTATION HOOKS
|
|
37
|
+
// ============================================================================
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Create a new user pin
|
|
41
|
+
*
|
|
42
|
+
* @description
|
|
43
|
+
* Creates a new pin showing where the user is or will be.
|
|
44
|
+
* Any existing active pin is automatically deactivated.
|
|
45
|
+
*
|
|
46
|
+
* Two types of pins:
|
|
47
|
+
* - HERE_NOW: User is currently at this location (default 1 hour duration)
|
|
48
|
+
* - SCHEDULED: User will be at this location at a specific time (default 2 hour duration)
|
|
49
|
+
*
|
|
50
|
+
* @endpoint POST /api/v1/user-pins
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* Drop a "I'm here now" pin:
|
|
54
|
+
* ```tsx
|
|
55
|
+
* import { useCreateUserPin } from '@growsober/sdk';
|
|
56
|
+
*
|
|
57
|
+
* function DropPinButton({ location }) {
|
|
58
|
+
* const createPin = useCreateUserPin();
|
|
59
|
+
*
|
|
60
|
+
* const handleDropPin = () => {
|
|
61
|
+
* createPin.mutate({
|
|
62
|
+
* type: 'HERE_NOW',
|
|
63
|
+
* latitude: location.lat,
|
|
64
|
+
* longitude: location.lng,
|
|
65
|
+
* locationName: 'Fabrica Coffee',
|
|
66
|
+
* activity: 'Working remotely',
|
|
67
|
+
* duration: 120, // 2 hours
|
|
68
|
+
* });
|
|
69
|
+
* };
|
|
70
|
+
*
|
|
71
|
+
* return (
|
|
72
|
+
* <Button onPress={handleDropPin} loading={createPin.isPending}>
|
|
73
|
+
* Drop Pin
|
|
74
|
+
* </Button>
|
|
75
|
+
* );
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* Schedule a pin for later:
|
|
81
|
+
* ```tsx
|
|
82
|
+
* import { useCreateUserPin } from '@growsober/sdk';
|
|
83
|
+
*
|
|
84
|
+
* function SchedulePinForm() {
|
|
85
|
+
* const createPin = useCreateUserPin({
|
|
86
|
+
* onSuccess: () => {
|
|
87
|
+
* toast.show('Pin scheduled!');
|
|
88
|
+
* },
|
|
89
|
+
* });
|
|
90
|
+
*
|
|
91
|
+
* const handleSchedule = (data) => {
|
|
92
|
+
* createPin.mutate({
|
|
93
|
+
* type: 'SCHEDULED',
|
|
94
|
+
* latitude: data.venue.lat,
|
|
95
|
+
* longitude: data.venue.lng,
|
|
96
|
+
* locationName: data.venue.name,
|
|
97
|
+
* venueId: data.venue.id,
|
|
98
|
+
* activity: 'Coffee meetup',
|
|
99
|
+
* scheduledTime: data.time.toISOString(),
|
|
100
|
+
* duration: 90,
|
|
101
|
+
* });
|
|
102
|
+
* };
|
|
103
|
+
*
|
|
104
|
+
* return <ScheduleForm onSubmit={handleSchedule} />;
|
|
105
|
+
* }
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* @param options - TanStack Query mutation options
|
|
109
|
+
* @returns TanStack Query mutation result
|
|
110
|
+
*/
|
|
111
|
+
export function useCreateUserPin(
|
|
112
|
+
options?: Omit<
|
|
113
|
+
UseMutationOptions<UserPinResponse, Error, CreatePinRequest>,
|
|
114
|
+
'mutationFn'
|
|
115
|
+
>
|
|
116
|
+
): UseMutationResult<UserPinResponse, Error, CreatePinRequest> {
|
|
117
|
+
const queryClient = useQueryClient();
|
|
118
|
+
|
|
119
|
+
return useMutation({
|
|
120
|
+
mutationFn: async (data: CreatePinRequest): Promise<UserPinResponse> => {
|
|
121
|
+
const client = getApiClient();
|
|
122
|
+
const response = await client.post<UserPinResponse>('/api/v1/user-pins', data);
|
|
123
|
+
return response.data;
|
|
124
|
+
},
|
|
125
|
+
onSuccess: () => {
|
|
126
|
+
// Invalidate pin queries to reflect new pin
|
|
127
|
+
queryClient.invalidateQueries({ queryKey: userPinKeys.all });
|
|
128
|
+
},
|
|
129
|
+
...options,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Delete a user pin
|
|
135
|
+
*
|
|
136
|
+
* @description
|
|
137
|
+
* Deactivates a user pin. Users can only delete their own pins.
|
|
138
|
+
*
|
|
139
|
+
* @endpoint DELETE /api/v1/user-pins/:id
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```tsx
|
|
143
|
+
* import { useDeleteUserPin } from '@growsober/sdk';
|
|
144
|
+
*
|
|
145
|
+
* function MyPinCard({ pin }) {
|
|
146
|
+
* const deletePin = useDeleteUserPin({
|
|
147
|
+
* onSuccess: () => {
|
|
148
|
+
* toast.show('Pin removed');
|
|
149
|
+
* },
|
|
150
|
+
* });
|
|
151
|
+
*
|
|
152
|
+
* return (
|
|
153
|
+
* <Card>
|
|
154
|
+
* <Text>{pin.activity}</Text>
|
|
155
|
+
* <Text>At {pin.locationName}</Text>
|
|
156
|
+
* <Button
|
|
157
|
+
* onPress={() => deletePin.mutate(pin.id)}
|
|
158
|
+
* loading={deletePin.isPending}
|
|
159
|
+
* >
|
|
160
|
+
* Remove Pin
|
|
161
|
+
* </Button>
|
|
162
|
+
* </Card>
|
|
163
|
+
* );
|
|
164
|
+
* }
|
|
165
|
+
* ```
|
|
166
|
+
*
|
|
167
|
+
* @param options - TanStack Query mutation options
|
|
168
|
+
* @returns TanStack Query mutation result
|
|
169
|
+
*/
|
|
170
|
+
export function useDeleteUserPin(
|
|
171
|
+
options?: Omit<UseMutationOptions<void, Error, string>, 'mutationFn'>
|
|
172
|
+
): UseMutationResult<void, Error, string> {
|
|
173
|
+
const queryClient = useQueryClient();
|
|
174
|
+
|
|
175
|
+
return useMutation({
|
|
176
|
+
mutationFn: async (pinId: string): Promise<void> => {
|
|
177
|
+
const client = getApiClient();
|
|
178
|
+
await client.delete(`/api/v1/user-pins/${pinId}`);
|
|
179
|
+
},
|
|
180
|
+
onSuccess: () => {
|
|
181
|
+
// Invalidate pin queries to reflect deletion
|
|
182
|
+
queryClient.invalidateQueries({ queryKey: userPinKeys.all });
|
|
183
|
+
},
|
|
184
|
+
...options,
|
|
185
|
+
});
|
|
186
|
+
}
|
package/src/api/queries/index.ts
CHANGED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Pins Query Hooks
|
|
3
|
+
*
|
|
4
|
+
* TanStack Query hooks for user pin read operations.
|
|
5
|
+
* These hooks handle fetching user pins for the map feature
|
|
6
|
+
* ("I'm here now" / "I'll be there").
|
|
7
|
+
*
|
|
8
|
+
* @module api/queries/user-pins
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { useQuery, UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
|
|
12
|
+
import { getApiClient } from '../client';
|
|
13
|
+
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// TYPES
|
|
16
|
+
// ============================================================================
|
|
17
|
+
|
|
18
|
+
export type PinType = 'HERE_NOW' | 'SCHEDULED';
|
|
19
|
+
|
|
20
|
+
export interface UserPinResponse {
|
|
21
|
+
id: string;
|
|
22
|
+
userId: string;
|
|
23
|
+
type: PinType;
|
|
24
|
+
latitude: number;
|
|
25
|
+
longitude: number;
|
|
26
|
+
locationName: string | null;
|
|
27
|
+
activity: string;
|
|
28
|
+
venueId: string | null;
|
|
29
|
+
scheduledTime: string | null;
|
|
30
|
+
expiresAt: string;
|
|
31
|
+
duration: number | null;
|
|
32
|
+
isActive: boolean;
|
|
33
|
+
createdAt: string;
|
|
34
|
+
user?: {
|
|
35
|
+
id: string;
|
|
36
|
+
name: string | null;
|
|
37
|
+
profileImage: string | null;
|
|
38
|
+
};
|
|
39
|
+
venue?: {
|
|
40
|
+
id: string;
|
|
41
|
+
name: string;
|
|
42
|
+
slug: string | null;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface NearbyPinsResponse {
|
|
47
|
+
pins: UserPinResponse[];
|
|
48
|
+
total: number;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// QUERY KEYS
|
|
53
|
+
// ============================================================================
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Query key factory for user pin queries
|
|
57
|
+
*/
|
|
58
|
+
export const userPinKeys = {
|
|
59
|
+
all: ['user-pins'] as const,
|
|
60
|
+
nearby: (params: NearbyPinsParams) => [...userPinKeys.all, 'nearby', params] as const,
|
|
61
|
+
me: () => [...userPinKeys.all, 'me'] as const,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// PARAM TYPES
|
|
66
|
+
// ============================================================================
|
|
67
|
+
|
|
68
|
+
export interface NearbyPinsParams {
|
|
69
|
+
lat: number;
|
|
70
|
+
lng: number;
|
|
71
|
+
radius?: number; // km, default 5
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// QUERY HOOKS
|
|
76
|
+
// ============================================================================
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Get nearby user pins
|
|
80
|
+
*
|
|
81
|
+
* @description
|
|
82
|
+
* Retrieves active user pins within a radius of a location.
|
|
83
|
+
* Shows where other GrowSober members are or will be.
|
|
84
|
+
*
|
|
85
|
+
* @endpoint GET /api/v1/user-pins/nearby
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```tsx
|
|
89
|
+
* import { useNearbyPins } from '@growsober/sdk';
|
|
90
|
+
*
|
|
91
|
+
* function MapWithPins() {
|
|
92
|
+
* const { data, isLoading } = useNearbyPins({
|
|
93
|
+
* lat: 38.7097,
|
|
94
|
+
* lng: -9.1367,
|
|
95
|
+
* radius: 5, // 5km radius
|
|
96
|
+
* });
|
|
97
|
+
*
|
|
98
|
+
* return (
|
|
99
|
+
* <Map>
|
|
100
|
+
* {data?.pins.map(pin => (
|
|
101
|
+
* <Marker
|
|
102
|
+
* key={pin.id}
|
|
103
|
+
* position={[pin.latitude, pin.longitude]}
|
|
104
|
+
* icon={pin.type === 'HERE_NOW' ? 'here' : 'scheduled'}
|
|
105
|
+
* >
|
|
106
|
+
* <Popup>
|
|
107
|
+
* <p>{pin.user?.name}</p>
|
|
108
|
+
* <p>{pin.activity}</p>
|
|
109
|
+
* </Popup>
|
|
110
|
+
* </Marker>
|
|
111
|
+
* ))}
|
|
112
|
+
* </Map>
|
|
113
|
+
* );
|
|
114
|
+
* }
|
|
115
|
+
* ```
|
|
116
|
+
*
|
|
117
|
+
* @param params - Location and radius parameters
|
|
118
|
+
* @param options - TanStack Query options
|
|
119
|
+
* @returns TanStack Query result with nearby pins
|
|
120
|
+
*/
|
|
121
|
+
export function useNearbyPins(
|
|
122
|
+
params: NearbyPinsParams,
|
|
123
|
+
options?: Omit<UseQueryOptions<NearbyPinsResponse>, 'queryKey' | 'queryFn'>
|
|
124
|
+
): UseQueryResult<NearbyPinsResponse> {
|
|
125
|
+
return useQuery({
|
|
126
|
+
queryKey: userPinKeys.nearby(params),
|
|
127
|
+
queryFn: async (): Promise<NearbyPinsResponse> => {
|
|
128
|
+
const client = getApiClient();
|
|
129
|
+
const response = await client.get<NearbyPinsResponse>('/api/v1/user-pins/nearby', {
|
|
130
|
+
params: {
|
|
131
|
+
lat: params.lat,
|
|
132
|
+
lng: params.lng,
|
|
133
|
+
radius: params.radius,
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
return response.data;
|
|
137
|
+
},
|
|
138
|
+
enabled: params.lat !== undefined && params.lng !== undefined,
|
|
139
|
+
staleTime: 30 * 1000, // 30 seconds - pins change frequently
|
|
140
|
+
...options,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Get current user's active pins
|
|
146
|
+
*
|
|
147
|
+
* @description
|
|
148
|
+
* Retrieves the authenticated user's active pins.
|
|
149
|
+
* Users can have at most one active pin at a time.
|
|
150
|
+
*
|
|
151
|
+
* @endpoint GET /api/v1/user-pins/me
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```tsx
|
|
155
|
+
* import { useMyPins } from '@growsober/sdk';
|
|
156
|
+
*
|
|
157
|
+
* function MyPinStatus() {
|
|
158
|
+
* const { data: pins, isLoading } = useMyPins();
|
|
159
|
+
*
|
|
160
|
+
* if (isLoading) return <Spinner />;
|
|
161
|
+
*
|
|
162
|
+
* if (!pins?.length) {
|
|
163
|
+
* return <Text>You haven't dropped a pin yet</Text>;
|
|
164
|
+
* }
|
|
165
|
+
*
|
|
166
|
+
* const pin = pins[0];
|
|
167
|
+
* return (
|
|
168
|
+
* <View>
|
|
169
|
+
* <Text>You're at {pin.locationName}</Text>
|
|
170
|
+
* <Text>Activity: {pin.activity}</Text>
|
|
171
|
+
* <Text>Expires: {formatTime(pin.expiresAt)}</Text>
|
|
172
|
+
* </View>
|
|
173
|
+
* );
|
|
174
|
+
* }
|
|
175
|
+
* ```
|
|
176
|
+
*
|
|
177
|
+
* @param options - TanStack Query options
|
|
178
|
+
* @returns TanStack Query result with user's active pins
|
|
179
|
+
*/
|
|
180
|
+
export function useMyPins(
|
|
181
|
+
options?: Omit<UseQueryOptions<UserPinResponse[]>, 'queryKey' | 'queryFn'>
|
|
182
|
+
): UseQueryResult<UserPinResponse[]> {
|
|
183
|
+
return useQuery({
|
|
184
|
+
queryKey: userPinKeys.me(),
|
|
185
|
+
queryFn: async (): Promise<UserPinResponse[]> => {
|
|
186
|
+
const client = getApiClient();
|
|
187
|
+
const response = await client.get<UserPinResponse[]>('/api/v1/user-pins/me');
|
|
188
|
+
return response.data;
|
|
189
|
+
},
|
|
190
|
+
staleTime: 60 * 1000, // 1 minute
|
|
191
|
+
...options,
|
|
192
|
+
});
|
|
193
|
+
}
|