@growsober/sdk 1.0.30 → 1.0.32
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/CLAUDE.md +11 -0
- package/dist/api/client.js +17 -6
- package/dist/api/mutations/users.js +4 -3
- package/package.json +1 -1
- package/src/api/CLAUDE.md +9 -0
- package/src/api/client.ts +20 -5
- package/src/api/mutations/users.ts +4 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<claude-mem-context>
|
|
2
|
+
# Recent Activity
|
|
3
|
+
|
|
4
|
+
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
|
|
5
|
+
|
|
6
|
+
### Jan 25, 2026
|
|
7
|
+
|
|
8
|
+
| ID | Time | T | Title | Read |
|
|
9
|
+
|----|------|---|-------|------|
|
|
10
|
+
| #1208 | 3:28 AM | 🔵 | UserResponse data structure includes comprehensive profile and notification settings | ~580 |
|
|
11
|
+
</claude-mem-context>
|
package/dist/api/client.js
CHANGED
|
@@ -27,6 +27,8 @@ function createApiClient(sdkConfig) {
|
|
|
27
27
|
'Content-Type': 'application/json',
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
|
+
// Track ongoing refresh to avoid duplicate calls
|
|
31
|
+
let refreshPromise = null;
|
|
30
32
|
// Request interceptor - add auth token
|
|
31
33
|
client.interceptors.request.use(async (requestConfig) => {
|
|
32
34
|
const token = await sdkConfig.getAccessToken();
|
|
@@ -44,17 +46,26 @@ function createApiClient(sdkConfig) {
|
|
|
44
46
|
}
|
|
45
47
|
return response;
|
|
46
48
|
}, async (error) => {
|
|
47
|
-
|
|
49
|
+
const originalRequest = error.config;
|
|
50
|
+
if (error.response?.status === 401 && originalRequest && !originalRequest._retry) {
|
|
51
|
+
originalRequest._retry = true;
|
|
48
52
|
if (sdkConfig.refreshAccessToken) {
|
|
49
53
|
try {
|
|
50
|
-
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
// Deduplicate concurrent refresh calls
|
|
55
|
+
if (!refreshPromise) {
|
|
56
|
+
refreshPromise = sdkConfig.refreshAccessToken().finally(() => {
|
|
57
|
+
refreshPromise = null;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
const newToken = await refreshPromise;
|
|
61
|
+
if (newToken) {
|
|
62
|
+
originalRequest.headers.Authorization = `Bearer ${newToken}`;
|
|
63
|
+
return client.request(originalRequest);
|
|
54
64
|
}
|
|
55
65
|
}
|
|
56
66
|
catch {
|
|
57
67
|
sdkConfig.onUnauthorized?.();
|
|
68
|
+
return Promise.reject(error);
|
|
58
69
|
}
|
|
59
70
|
}
|
|
60
71
|
else {
|
|
@@ -65,4 +76,4 @@ function createApiClient(sdkConfig) {
|
|
|
65
76
|
});
|
|
66
77
|
return client;
|
|
67
78
|
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBWUEsb0NBR0M7QUFFRCxvQ0FLQztBQXRCRCxrREFBcUY7QUFTckYsSUFBSSxNQUFNLEdBQXFCLElBQUksQ0FBQztBQUNwQyxJQUFJLFNBQVMsR0FBeUIsSUFBSSxDQUFDO0FBa0ZsQyw4QkFBUztBQWhGbEIsU0FBZ0IsWUFBWSxDQUFDLFNBQW9CO0lBQy9DLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbkIsb0JBQUEsU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsU0FBZ0IsWUFBWTtJQUMxQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxTQUFvQjtJQUMzQyxNQUFNLE1BQU0sR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztRQUMxQixPQUFPLEVBQUU7WUFDUCxjQUFjLEVBQUUsa0JBQWtCO1NBQ25DO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsaURBQWlEO0lBQ2pELElBQUksY0FBYyxHQUEyQixJQUFJLENBQUM7SUFFbEQsdUNBQXVDO0lBQ3ZDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDN0IsS0FBSyxFQUFFLGFBQXlDLEVBQUUsRUFBRTtRQUNsRCxNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMvQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsVUFBVSxLQUFLLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUNqQyxDQUFDO0lBRUYsNERBQTREO0lBQzVELE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDOUIsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNYLHNEQUFzRDtRQUN0RCx5Q0FBeUM7UUFDekMsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsRixRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLEVBQ0QsS0FBSyxFQUFFLEtBQWlCLEVBQUUsRUFBRTtRQUMxQixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsTUFBMkQsQ0FBQztRQUUxRixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakYsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFFOUIsSUFBSSxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDO29CQUNILHVDQUF1QztvQkFDdkMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUNwQixjQUFjLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTs0QkFDM0QsY0FBYyxHQUFHLElBQUksQ0FBQzt3QkFDeEIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FBQztvQkFFdEMsSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDYixlQUFlLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxVQUFVLFFBQVEsRUFBRSxDQUFDO3dCQUM3RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3pDLENBQUM7Z0JBQ0gsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AsU0FBUyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7b0JBQzdCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDLENBQ0YsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciwgSW50ZXJuYWxBeGlvc1JlcXVlc3RDb25maWcgfSBmcm9tICdheGlvcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU0RLQ29uZmlnIHtcbiAgYmFzZVVSTDogc3RyaW5nO1xuICBnZXRBY2Nlc3NUb2tlbjogKCkgPT4gc3RyaW5nIHwgbnVsbCB8IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG4gIHJlZnJlc2hBY2Nlc3NUb2tlbj86ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgb25VbmF1dGhvcml6ZWQ/OiAoKSA9PiB2b2lkO1xufVxuXG5sZXQgY29uZmlnOiBTREtDb25maWcgfCBudWxsID0gbnVsbDtcbmxldCBhcGlDbGllbnQ6IEF4aW9zSW5zdGFuY2UgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVNESyhzZGtDb25maWc6IFNES0NvbmZpZyk6IHZvaWQge1xuICBjb25maWcgPSBzZGtDb25maWc7XG4gIGFwaUNsaWVudCA9IGNyZWF0ZUFwaUNsaWVudChzZGtDb25maWcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBpQ2xpZW50KCk6IEF4aW9zSW5zdGFuY2Uge1xuICBpZiAoIWFwaUNsaWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIG5vdCBjb25maWd1cmVkLiBDYWxsIGNvbmZpZ3VyZVNESygpIGZpcnN0LicpO1xuICB9XG4gIHJldHVybiBhcGlDbGllbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFwaUNsaWVudChzZGtDb25maWc6IFNES0NvbmZpZyk6IEF4aW9zSW5zdGFuY2Uge1xuICBjb25zdCBjbGllbnQgPSBheGlvcy5jcmVhdGUoe1xuICAgIGJhc2VVUkw6IHNka0NvbmZpZy5iYXNlVVJMLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gVHJhY2sgb25nb2luZyByZWZyZXNoIHRvIGF2b2lkIGR1cGxpY2F0ZSBjYWxsc1xuICBsZXQgcmVmcmVzaFByb21pc2U6IFByb21pc2U8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFJlcXVlc3QgaW50ZXJjZXB0b3IgLSBhZGQgYXV0aCB0b2tlblxuICBjbGllbnQuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxuICAgIGFzeW5jIChyZXF1ZXN0Q29uZmlnOiBJbnRlcm5hbEF4aW9zUmVxdWVzdENvbmZpZykgPT4ge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBzZGtDb25maWcuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RDb25maWc7XG4gICAgfSxcbiAgICAoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKVxuICApO1xuXG4gIC8vIFJlc3BvbnNlIGludGVyY2VwdG9yIC0gdW53cmFwIEFQSSByZXNwb25zZSBhbmQgaGFuZGxlIDQwMVxuICBjbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShcbiAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIEFQSSB3cmFwcyBhbGwgcmVzcG9uc2VzIGluIHtkYXRhOiAuLi4sIG1ldGE6IHsuLi59fVxuICAgICAgLy8gVW53cmFwIHRvIHJldHVybiBqdXN0IHRoZSBkYXRhIHBvcnRpb25cbiAgICAgIGlmIChyZXNwb25zZS5kYXRhICYmIHR5cGVvZiByZXNwb25zZS5kYXRhID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG4gICAgYXN5bmMgKGVycm9yOiBBeGlvc0Vycm9yKSA9PiB7XG4gICAgICBjb25zdCBvcmlnaW5hbFJlcXVlc3QgPSBlcnJvci5jb25maWcgYXMgSW50ZXJuYWxBeGlvc1JlcXVlc3RDb25maWcgJiB7IF9yZXRyeT86IGJvb2xlYW4gfTtcblxuICAgICAgaWYgKGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMSAmJiBvcmlnaW5hbFJlcXVlc3QgJiYgIW9yaWdpbmFsUmVxdWVzdC5fcmV0cnkpIHtcbiAgICAgICAgb3JpZ2luYWxSZXF1ZXN0Ll9yZXRyeSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHNka0NvbmZpZy5yZWZyZXNoQWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRGVkdXBsaWNhdGUgY29uY3VycmVudCByZWZyZXNoIGNhbGxzXG4gICAgICAgICAgICBpZiAoIXJlZnJlc2hQcm9taXNlKSB7XG4gICAgICAgICAgICAgIHJlZnJlc2hQcm9taXNlID0gc2RrQ29uZmlnLnJlZnJlc2hBY2Nlc3NUb2tlbigpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlZnJlc2hQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdUb2tlbiA9IGF3YWl0IHJlZnJlc2hQcm9taXNlO1xuXG4gICAgICAgICAgICBpZiAobmV3VG9rZW4pIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxSZXF1ZXN0LmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gO1xuICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnJlcXVlc3Qob3JpZ2luYWxSZXF1ZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHNka0NvbmZpZy5vblVuYXV0aG9yaXplZD8uKCk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZGtDb25maWcub25VbmF1dGhvcml6ZWQ/LigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gY2xpZW50O1xufVxuXG5leHBvcnQgeyBhcGlDbGllbnQgfTtcbiJdfQ==
|
|
@@ -294,13 +294,14 @@ function useVerifyUserPhoneOtp(options) {
|
|
|
294
294
|
const response = await client.post('/api/v1/users/me/phone/verify-otp', data);
|
|
295
295
|
return response.data;
|
|
296
296
|
},
|
|
297
|
-
|
|
297
|
+
...options,
|
|
298
|
+
onSuccess: (data, variables, onMutateResult, context) => {
|
|
298
299
|
queryClient.invalidateQueries({ queryKey: users_1.userKeys.me() });
|
|
299
300
|
if (data.id) {
|
|
300
301
|
queryClient.invalidateQueries({ queryKey: users_1.userKeys.detail(data.id) });
|
|
301
302
|
}
|
|
303
|
+
options?.onSuccess?.(data, variables, onMutateResult, context);
|
|
302
304
|
},
|
|
303
|
-
...options,
|
|
304
305
|
});
|
|
305
306
|
}
|
|
306
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL211dGF0aW9ucy91c2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7QUF5R0gsb0RBMEJDO0FBZ0hELHNEQXlCQztBQVVELGtEQVdDO0FBVUQsc0RBb0JDO0FBN1RELHVEQUEyRztBQUMzRyxzQ0FBeUM7QUFDekMsNENBQTRDO0FBUTVDLCtFQUErRTtBQUMvRSxpQkFBaUI7QUFDakIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0ZHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLE9BQXdGO0lBRXhGLE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBdUIsRUFBeUIsRUFBRTtZQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQWUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3RDLHFFQUFxRTtZQUNyRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFM0QscUZBQXFGO1lBQ3JGLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNaLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFB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QUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDWixXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0gsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZXJzIE11dGF0aW9uIEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gaG9va3MgZm9yIHVzZXItcmVsYXRlZCB3cml0ZSBvcGVyYXRpb25zLlxuICogVGhlc2UgaG9va3MgaGFuZGxlIHVzZXIgcHJvZmlsZSB1cGRhdGVzIGFuZCBvbmJvYXJkaW5nIGNvbXBsZXRpb24uXG4gKlxuICogQG1vZHVsZSBhcGkvbXV0YXRpb25zL3VzZXJzXG4gKi9cblxuaW1wb3J0IHsgdXNlTXV0YXRpb24sIFVzZU11dGF0aW9uT3B0aW9ucywgVXNlTXV0YXRpb25SZXN1bHQsIHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgeyB1c2VyS2V5cyB9IGZyb20gJy4uL3F1ZXJpZXMvdXNlcnMnO1xuaW1wb3J0IHR5cGUgeyBVcGRhdGVVc2VyUmVxdWVzdCwgVXNlclJlc3BvbnNlLCBTZW5kT3RwUmVxdWVzdCwgT3RwU2VudFJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIFJlcXVlc3QgdHlwZSBmb3IgdmVyaWZ5aW5nIGEgdXNlcidzIHBob25lIE9UUCAobm8gbmFtZSBmaWVsZCBuZWVkZWQpXG4gKi9cbmV4cG9ydCB0eXBlIFVzZXJWZXJpZnlQaG9uZU90cFJlcXVlc3QgPSB7IHBob25lOiBzdHJpbmc7IGNvZGU6IHN0cmluZyB9O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNVVRBVElPTiBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFVwZGF0ZSBjdXJyZW50IHVzZXIncyBwcm9maWxlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBVcGRhdGVzIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIncyBwcm9maWxlIGluZm9ybWF0aW9uLlxuICogVGhpcyBjYW4gaW5jbHVkZSBuYW1lLCBiaW8sIGF2YXRhciwgbG9jYXRpb24sIHNvYmVyIGRhdGUsIGFuZCBvdGhlciBwcm9maWxlIGZpZWxkcy5cbiAqIEF1dG9tYXRpY2FsbHkgaW52YWxpZGF0ZXMgcmVsZXZhbnQgdXNlciBxdWVyaWVzIHRvIHJlZnJlc2ggdGhlIFVJLlxuICpcbiAqIEBlbmRwb2ludCBQVVQgL2FwaS92MS91c2Vycy9tZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZVVwZGF0ZUN1cnJlbnRVc2VyIH0gZnJvbSAnQGdyb3dzb2Jlci9zZGsnO1xuICpcbiAqIGZ1bmN0aW9uIEVkaXRQcm9maWxlRm9ybSgpIHtcbiAqICAgY29uc3QgeyBtdXRhdGU6IHVwZGF0ZVByb2ZpbGUsIGlzUGVuZGluZywgZXJyb3IgfSA9IHVzZVVwZGF0ZUN1cnJlbnRVc2VyKHtcbiAqICAgICBvblN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gKiAgICAgICB0b2FzdC5zdWNjZXNzKCdQcm9maWxlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gKiAgICAgICBuYXZpZ2F0aW9uLmdvQmFjaygpO1xuICogICAgIH0sXG4gKiAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgICB0b2FzdC5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSBwcm9maWxlOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gKiAgICAgfSxcbiAqICAgfSk7XG4gKlxuICogICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoZm9ybURhdGE6IEZvcm1EYXRhKSA9PiB7XG4gKiAgICAgdXBkYXRlUHJvZmlsZSh7XG4gKiAgICAgICBuYW1lOiBmb3JtRGF0YS5uYW1lLFxuICogICAgICAgYmlvOiBmb3JtRGF0YS5iaW8sXG4gKiAgICAgICBhdmF0YXI6IGZvcm1EYXRhLmF2YXRhcixcbiAqICAgICAgIGNpdHk6IGZvcm1EYXRhLmNpdHksXG4gKiAgICAgICBzb2JlckRhdGU6IGZvcm1EYXRhLnNvYmVyRGF0ZSxcbiAqICAgICB9KTtcbiAqICAgfTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG4gKiAgICAgICA8aW5wdXQgbmFtZT1cIm5hbWVcIiAvPlxuICogICAgICAgPHRleHRhcmVhIG5hbWU9XCJiaW9cIiAvPlxuICogICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgZGlzYWJsZWQ9e2lzUGVuZGluZ30+XG4gKiAgICAgICAgIHtpc1BlbmRpbmcgPyAnU2F2aW5nLi4uJyA6ICdTYXZlIFByb2ZpbGUnfVxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgICB7ZXJyb3IgJiYgPHAgY2xhc3NOYW1lPVwiZXJyb3JcIj57ZXJyb3IubWVzc2FnZX08L3A+fVxuICogICAgIDwvZm9ybT5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBVcGRhdGUgc3BlY2lmaWMgZmllbGRzOlxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBBdmF0YXJVcGxvYWRlcigpIHtcbiAqICAgY29uc3QgeyBtdXRhdGVBc3luYzogdXBkYXRlUHJvZmlsZSB9ID0gdXNlVXBkYXRlQ3VycmVudFVzZXIoKTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZUF2YXRhckNoYW5nZSA9IGFzeW5jIChmaWxlOiBGaWxlKSA9PiB7XG4gKiAgICAgY29uc3QgdXBsb2FkZWRVcmwgPSBhd2FpdCB1cGxvYWRJbWFnZShmaWxlKTtcbiAqICAgICBhd2FpdCB1cGRhdGVQcm9maWxlKHsgYXZhdGFyOiB1cGxvYWRlZFVybCB9KTtcbiAqICAgICB0b2FzdC5zdWNjZXNzKCdBdmF0YXIgdXBkYXRlZCEnKTtcbiAqICAgfTtcbiAqXG4gKiAgIHJldHVybiA8SW1hZ2VQaWNrZXIgb25TZWxlY3Q9e2hhbmRsZUF2YXRhckNoYW5nZX0gLz47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogVXBkYXRlIHNvYmVyIGRhdGU6XG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIFNvYmVyRGF0ZVBpY2tlcigpIHtcbiAqICAgY29uc3QgeyBtdXRhdGU6IHVwZGF0ZVByb2ZpbGUgfSA9IHVzZVVwZGF0ZUN1cnJlbnRVc2VyKCk7XG4gKiAgIGNvbnN0IHsgZGF0YTogdXNlciB9ID0gdXNlQ3VycmVudFVzZXIoKTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZURhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSkgPT4ge1xuICogICAgIHVwZGF0ZVByb2ZpbGUoe1xuICogICAgICAgc29iZXJEYXRlOiBkYXRlLnRvSVNPU3RyaW5nKCksXG4gKiAgICAgfSk7XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxEYXRlUGlja2VyXG4gKiAgICAgICB2YWx1ZT17dXNlcj8uc29iZXJEYXRlfVxuICogICAgICAgb25DaGFuZ2U9e2hhbmRsZURhdGVDaGFuZ2V9XG4gKiAgICAgLz5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VVcGRhdGVDdXJyZW50VXNlcihcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPFVzZXJSZXNwb25zZSwgRXJyb3IsIFVwZGF0ZVVzZXJSZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8VXNlclJlc3BvbnNlLCBFcnJvciwgVXBkYXRlVXNlclJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IFVwZGF0ZVVzZXJSZXF1ZXN0KTogUHJvbWlzZTxVc2VyUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucHV0PFVzZXJSZXNwb25zZT4oJy9hcGkvdjEvdXNlcnMvbWUnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGN1cnJlbnQgdXNlciBxdWVyeSB0byB0cmlnZ2VyIHJlZmV0Y2ggd2l0aCB1cGRhdGVkIGRhdGFcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHVzZXJLZXlzLm1lKCkgfSk7XG5cbiAgICAgIC8vIEFsc28gaW52YWxpZGF0ZSB0aGUgZGV0YWlsIHF1ZXJ5IGZvciB0aGlzIHVzZXIgaWYgdGhleSd2ZSB2aWV3ZWQgdGhlaXIgb3duIHByb2ZpbGVcbiAgICAgIGlmIChkYXRhLmlkKSB7XG4gICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHVzZXJLZXlzLmRldGFpbChkYXRhLmlkKSB9KTtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogdXNlcktleXMucHVibGljKGRhdGEuaWQpIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICAgIC8vIFVzZXIncyBvblN1Y2Nlc3MgaXMgaGFuZGxlZCBieSBzcHJlYWRpbmcgb3B0aW9uc1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogQ29tcGxldGUgdXNlciBvbmJvYXJkaW5nXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBNYXJrcyB0aGUgdXNlcidzIG9uYm9hcmRpbmcgcHJvY2VzcyBhcyBjb21wbGV0ZS5cbiAqIFRoaXMgaXMgdHlwaWNhbGx5IGNhbGxlZCBhZnRlciBhIHVzZXIgY29tcGxldGVzIGFsbCByZXF1aXJlZCBvbmJvYXJkaW5nIHN0ZXBzXG4gKiAoZS5nLiwgc2V0dGluZyB1cCBwcm9maWxlLCBzZWxlY3RpbmcgaW50ZXJlc3RzLCBzZXR0aW5nIHNvYmVyIGRhdGUpLlxuICogVXBkYXRlcyB0aGUgdXNlcidzIG9uYm9hcmRpbmdDb21wbGV0ZWQgZmxhZyBhbmQgdW5sb2NrcyBmdWxsIGFwcCBhY2Nlc3MuXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2FwaS92MS91c2Vycy9tZS9jb21wbGV0ZS1vbmJvYXJkaW5nXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlQ29tcGxldGVPbmJvYXJkaW5nIH0gZnJvbSAnQGdyb3dzb2Jlci9zZGsnO1xuICpcbiAqIGZ1bmN0aW9uIE9uYm9hcmRpbmdGaW5hbFN0ZXAoKSB7XG4gKiAgIGNvbnN0IHsgbXV0YXRlOiBjb21wbGV0ZU9uYm9hcmRpbmcsIGlzUGVuZGluZyB9ID0gdXNlQ29tcGxldGVPbmJvYXJkaW5nKHtcbiAqICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAqICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ1dlbGNvbWUgdG8gR3Jvd1NvYmVyIScpO1xuICogICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnSG9tZScpO1xuICogICAgIH0sXG4gKiAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgICB0b2FzdC5lcnJvcignRmFpbGVkIHRvIGNvbXBsZXRlIG9uYm9hcmRpbmc6ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAqICAgICB9LFxuICogICB9KTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZUZpbmlzaCA9ICgpID0+IHtcbiAqICAgICBjb21wbGV0ZU9uYm9hcmRpbmcoKTtcbiAqICAgfTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxoMT5Zb3UncmUgQWxsIFNldCE8L2gxPlxuICogICAgICAgPHA+UmVhZHkgdG8gc3RhcnQgeW91ciBzb2JlciBqb3VybmV5PzwvcD5cbiAqICAgICAgIDxidXR0b24gb25DbGljaz17aGFuZGxlRmluaXNofSBkaXNhYmxlZD17aXNQZW5kaW5nfT5cbiAqICAgICAgICAge2lzUGVuZGluZyA/ICdTZXR0aW5nIHVwLi4uJyA6ICdHZXQgU3RhcnRlZCd9XG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBNdWx0aS1zdGVwIG9uYm9hcmRpbmcgd2l0aCB2YWxpZGF0aW9uOlxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBPbmJvYXJkaW5nRmxvdygpIHtcbiAqICAgY29uc3QgW2N1cnJlbnRTdGVwLCBzZXRDdXJyZW50U3RlcF0gPSB1c2VTdGF0ZSgxKTtcbiAqICAgY29uc3QgeyBtdXRhdGVBc3luYzogY29tcGxldGVPbmJvYXJkaW5nIH0gPSB1c2VDb21wbGV0ZU9uYm9hcmRpbmcoKTtcbiAqICAgY29uc3QgeyBkYXRhOiB1c2VyIH0gPSB1c2VDdXJyZW50VXNlcigpO1xuICpcbiAqICAgY29uc3QgaGFuZGxlQ29tcGxldGUgPSBhc3luYyAoKSA9PiB7XG4gKiAgICAgLy8gVmFsaWRhdGUgYWxsIHJlcXVpcmVkIGZpZWxkcyBhcmUgZmlsbGVkXG4gKiAgICAgaWYgKCF1c2VyPy5uYW1lIHx8ICF1c2VyPy5zb2JlckRhdGUgfHwgIXVzZXI/LmNpdHkpIHtcbiAqICAgICAgIHRvYXN0LmVycm9yKCdQbGVhc2UgY29tcGxldGUgYWxsIHJlcXVpcmVkIGZpZWxkcycpO1xuICogICAgICAgcmV0dXJuO1xuICogICAgIH1cbiAqXG4gKiAgICAgdHJ5IHtcbiAqICAgICAgIGF3YWl0IGNvbXBsZXRlT25ib2FyZGluZygpO1xuICogICAgICAgLy8gVXNlciB3aWxsIGJlIHJlZGlyZWN0ZWQgdmlhIG9uU3VjY2VzcyBjYWxsYmFja1xuICogICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgICAgICBjb25zb2xlLmVycm9yKCdPbmJvYXJkaW5nIGVycm9yOicsIGVycm9yKTtcbiAqICAgICB9XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICB7Y3VycmVudFN0ZXAgPT09IDEgJiYgPFByb2ZpbGVTZXR1cCBvbk5leHQ9eygpID0+IHNldEN1cnJlbnRTdGVwKDIpfSAvPn1cbiAqICAgICAgIHtjdXJyZW50U3RlcCA9PT0gMiAmJiA8SW50ZXJlc3RTZWxlY3Rpb24gb25OZXh0PXsoKSA9PiBzZXRDdXJyZW50U3RlcCgzKX0gLz59XG4gKiAgICAgICB7Y3VycmVudFN0ZXAgPT09IDMgJiYgPFNvYmVyRGF0ZVNldHVwIG9uTmV4dD17aGFuZGxlQ29tcGxldGV9IC8+fVxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIENoZWNrIG9uYm9hcmRpbmcgc3RhdHVzOlxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBBcHBOYXZpZ2F0b3IoKSB7XG4gKiAgIGNvbnN0IHsgZGF0YTogdXNlciwgaXNMb2FkaW5nIH0gPSB1c2VDdXJyZW50VXNlcigpO1xuICpcbiAqICAgaWYgKGlzTG9hZGluZykgcmV0dXJuIDxTcGxhc2hTY3JlZW4gLz47XG4gKlxuICogICAvLyBSZWRpcmVjdCB0byBvbmJvYXJkaW5nIGlmIG5vdCBjb21wbGV0ZWRcbiAqICAgaWYgKHVzZXIgJiYgIXVzZXIub25ib2FyZGluZ0NvbXBsZXRlZCkge1xuICogICAgIHJldHVybiA8T25ib2FyZGluZ0Zsb3cgLz47XG4gKiAgIH1cbiAqXG4gKiAgIHJldHVybiA8TWFpbkFwcCAvPjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGFuYWx5dGljcyB0cmFja2luZzpcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGU6IGNvbXBsZXRlT25ib2FyZGluZyB9ID0gdXNlQ29tcGxldGVPbmJvYXJkaW5nKHtcbiAqICAgb25TdWNjZXNzOiAoZGF0YSkgPT4ge1xuICogICAgIGFuYWx5dGljcy50cmFjaygnT25ib2FyZGluZyBDb21wbGV0ZWQnLCB7XG4gKiAgICAgICB1c2VySWQ6IGRhdGEuaWQsXG4gKiAgICAgICBjb21wbGV0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICogICAgICAgcHJvZmlsZUNvbXBsZXRlOiAhIWRhdGEuYmlvICYmICEhZGF0YS5hdmF0YXIsXG4gKiAgICAgfSk7XG4gKiAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZSgnSG9tZScpO1xuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29tcGxldGVPbmJvYXJkaW5nKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8VXNlclJlc3BvbnNlLCBFcnJvciwgdm9pZD4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PFVzZXJSZXNwb25zZSwgRXJyb3IsIHZvaWQ+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKCk6IFByb21pc2U8VXNlclJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8VXNlclJlc3BvbnNlPignL2FwaS92MS91c2Vycy9tZS9jb21wbGV0ZS1vbmJvYXJkaW5nJyk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBjdXJyZW50IHVzZXIgcXVlcnkgdG8gdHJpZ2dlciByZWZldGNoIHdpdGggdXBkYXRlZCBvbmJvYXJkaW5nIHN0YXR1c1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogdXNlcktleXMubWUoKSB9KTtcblxuICAgICAgLy8gQWxzbyBpbnZhbGlkYXRlIHRoZSBkZXRhaWwgcXVlcnkgZm9yIHRoaXMgdXNlclxuICAgICAgaWYgKGRhdGEuaWQpIHtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogdXNlcktleXMuZGV0YWlsKGRhdGEuaWQpIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICAgIC8vIFVzZXIncyBvblN1Y2Nlc3MgaXMgaGFuZGxlZCBieSBzcHJlYWRpbmcgb3B0aW9uc1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogU2VuZCBPVFAgdG8gdmVyaWZ5IHBob25lIG51bWJlciBmb3IgYXV0aGVudGljYXRlZCB1c2VyXG4gKlxuICogQGVuZHBvaW50IFBPU1QgL2FwaS92MS91c2Vycy9tZS9waG9uZS9zZW5kLW90cFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTZW5kVXNlclBob25lT3RwKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8T3RwU2VudFJlc3BvbnNlLCBFcnJvciwgU2VuZE90cFJlcXVlc3Q+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxPdHBTZW50UmVzcG9uc2UsIEVycm9yLCBTZW5kT3RwUmVxdWVzdD4ge1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBTZW5kT3RwUmVxdWVzdCk6IFByb21pc2U8T3RwU2VudFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8T3RwU2VudFJlc3BvbnNlPignL2FwaS92MS91c2Vycy9tZS9waG9uZS9zZW5kLW90cCcsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgT1RQIGFuZCB1cGRhdGUgcGhvbmUgbnVtYmVyIGZvciBhdXRoZW50aWNhdGVkIHVzZXJcbiAqXG4gKiBAZW5kcG9pbnQgUE9TVCAvYXBpL3YxL3VzZXJzL21lL3Bob25lL3ZlcmlmeS1vdHBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVmVyaWZ5VXNlclBob25lT3RwKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8VXNlclJlc3BvbnNlLCBFcnJvciwgVXNlclZlcmlmeVBob25lT3RwUmVxdWVzdD4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PFVzZXJSZXNwb25zZSwgRXJyb3IsIFVzZXJWZXJpZnlQaG9uZU90cFJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IFVzZXJWZXJpZnlQaG9uZU90cFJlcXVlc3QpOiBQcm9taXNlPFVzZXJSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PFVzZXJSZXNwb25zZT4oJy9hcGkvdjEvdXNlcnMvbWUvcGhvbmUvdmVyaWZ5LW90cCcsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHVzZXJLZXlzLm1lKCkgfSk7XG5cbiAgICAgIGlmIChkYXRhLmlkKSB7XG4gICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHVzZXJLZXlzLmRldGFpbChkYXRhLmlkKSB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL211dGF0aW9ucy91c2Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7QUF5R0gsb0RBMEJDO0FBZ0hELHNEQXlCQztBQVVELGtEQVdDO0FBVUQsc0RBc0JDO0FBL1RELHVEQUEyRztBQUMzRyxzQ0FBeUM7QUFDekMsNENBQTRDO0FBUTVDLCtFQUErRTtBQUMvRSxpQkFBaUI7QUFDakIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0ZHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLE9BQXdGO0lBRXhGLE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBdUIsRUFBeUIsRUFBRTtZQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQWUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3RDLHFFQUFxRTtZQUNyRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFM0QscUZBQXFGO1lBQ3JGLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNaLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFB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RSxDQUFDLENBQUM7WUFFM0QsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ1osV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlcnMgTXV0YXRpb24gSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBob29rcyBmb3IgdXNlci1yZWxhdGVkIHdyaXRlIG9wZXJhdGlvbnMuXG4gKiBUaGVzZSBob29rcyBoYW5kbGUgdXNlciBwcm9maWxlIHVwZGF0ZXMgYW5kIG9uYm9hcmRpbmcgY29tcGxldGlvbi5cbiAqXG4gKiBAbW9kdWxlIGFwaS9tdXRhdGlvbnMvdXNlcnNcbiAqL1xuXG5pbXBvcnQgeyB1c2VNdXRhdGlvbiwgVXNlTXV0YXRpb25PcHRpb25zLCBVc2VNdXRhdGlvblJlc3VsdCwgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB7IHVzZXJLZXlzIH0gZnJvbSAnLi4vcXVlcmllcy91c2Vycyc7XG5pbXBvcnQgdHlwZSB7IFVwZGF0ZVVzZXJSZXF1ZXN0LCBVc2VyUmVzcG9uc2UsIFNlbmRPdHBSZXF1ZXN0LCBPdHBTZW50UmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogUmVxdWVzdCB0eXBlIGZvciB2ZXJpZnlpbmcgYSB1c2VyJ3MgcGhvbmUgT1RQIChubyBuYW1lIGZpZWxkIG5lZWRlZClcbiAqL1xuZXhwb3J0IHR5cGUgVXNlclZlcmlmeVBob25lT3RwUmVxdWVzdCA9IHsgcGhvbmU6IHN0cmluZzsgY29kZTogc3RyaW5nIH07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1VVEFUSU9OIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVXBkYXRlIGN1cnJlbnQgdXNlcidzIHByb2ZpbGVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFVwZGF0ZXMgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlcidzIHByb2ZpbGUgaW5mb3JtYXRpb24uXG4gKiBUaGlzIGNhbiBpbmNsdWRlIG5hbWUsIGJpbywgYXZhdGFyLCBsb2NhdGlvbiwgc29iZXIgZGF0ZSwgYW5kIG90aGVyIHByb2ZpbGUgZmllbGRzLlxuICogQXV0b21hdGljYWxseSBpbnZhbGlkYXRlcyByZWxldmFudCB1c2VyIHF1ZXJpZXMgdG8gcmVmcmVzaCB0aGUgVUkuXG4gKlxuICogQGVuZHBvaW50IFBVVCAvYXBpL3YxL3VzZXJzL21lXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlVXBkYXRlQ3VycmVudFVzZXIgfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gRWRpdFByb2ZpbGVGb3JtKCkge1xuICogICBjb25zdCB7IG11dGF0ZTogdXBkYXRlUHJvZmlsZSwgaXNQZW5kaW5nLCBlcnJvciB9ID0gdXNlVXBkYXRlQ3VycmVudFVzZXIoe1xuICogICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAqICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ1Byb2ZpbGUgdXBkYXRlZCBzdWNjZXNzZnVsbHknKTtcbiAqICAgICAgIG5hdmlnYXRpb24uZ29CYWNrKCk7XG4gKiAgICAgfSxcbiAqICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAqICAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHByb2ZpbGU6ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAqICAgICB9LFxuICogICB9KTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChmb3JtRGF0YTogRm9ybURhdGEpID0+IHtcbiAqICAgICB1cGRhdGVQcm9maWxlKHtcbiAqICAgICAgIG5hbWU6IGZvcm1EYXRhLm5hbWUsXG4gKiAgICAgICBiaW86IGZvcm1EYXRhLmJpbyxcbiAqICAgICAgIGF2YXRhcjogZm9ybURhdGEuYXZhdGFyLFxuICogICAgICAgY2l0eTogZm9ybURhdGEuY2l0eSxcbiAqICAgICAgIHNvYmVyRGF0ZTogZm9ybURhdGEuc29iZXJEYXRlLFxuICogICAgIH0pO1xuICogICB9O1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAqICAgICAgIDxpbnB1dCBuYW1lPVwibmFtZVwiIC8+XG4gKiAgICAgICA8dGV4dGFyZWEgbmFtZT1cImJpb1wiIC8+XG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBkaXNhYmxlZD17aXNQZW5kaW5nfT5cbiAqICAgICAgICAge2lzUGVuZGluZyA/ICdTYXZpbmcuLi4nIDogJ1NhdmUgUHJvZmlsZSd9XG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICAgIHtlcnJvciAmJiA8cCBjbGFzc05hbWU9XCJlcnJvclwiPntlcnJvci5tZXNzYWdlfTwvcD59XG4gKiAgICAgPC9mb3JtPlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFVwZGF0ZSBzcGVjaWZpYyBmaWVsZHM6XG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEF2YXRhclVwbG9hZGVyKCkge1xuICogICBjb25zdCB7IG11dGF0ZUFzeW5jOiB1cGRhdGVQcm9maWxlIH0gPSB1c2VVcGRhdGVDdXJyZW50VXNlcigpO1xuICpcbiAqICAgY29uc3QgaGFuZGxlQXZhdGFyQ2hhbmdlID0gYXN5bmMgKGZpbGU6IEZpbGUpID0+IHtcbiAqICAgICBjb25zdCB1cGxvYWRlZFVybCA9IGF3YWl0IHVwbG9hZEltYWdlKGZpbGUpO1xuICogICAgIGF3YWl0IHVwZGF0ZVByb2ZpbGUoeyBhdmF0YXI6IHVwbG9hZGVkVXJsIH0pO1xuICogICAgIHRvYXN0LnN1Y2Nlc3MoJ0F2YXRhciB1cGRhdGVkIScpO1xuICogICB9O1xuICpcbiAqICAgcmV0dXJuIDxJbWFnZVBpY2tlciBvblNlbGVjdD17aGFuZGxlQXZhdGFyQ2hhbmdlfSAvPjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBVcGRhdGUgc29iZXIgZGF0ZTpcbiAqIGBgYHRzeFxuICogZnVuY3Rpb24gU29iZXJEYXRlUGlja2VyKCkge1xuICogICBjb25zdCB7IG11dGF0ZTogdXBkYXRlUHJvZmlsZSB9ID0gdXNlVXBkYXRlQ3VycmVudFVzZXIoKTtcbiAqICAgY29uc3QgeyBkYXRhOiB1c2VyIH0gPSB1c2VDdXJyZW50VXNlcigpO1xuICpcbiAqICAgY29uc3QgaGFuZGxlRGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlKSA9PiB7XG4gKiAgICAgdXBkYXRlUHJvZmlsZSh7XG4gKiAgICAgICBzb2JlckRhdGU6IGRhdGUudG9JU09TdHJpbmcoKSxcbiAqICAgICB9KTtcbiAqICAgfTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPERhdGVQaWNrZXJcbiAqICAgICAgIHZhbHVlPXt1c2VyPy5zb2JlckRhdGV9XG4gKiAgICAgICBvbkNoYW5nZT17aGFuZGxlRGF0ZUNoYW5nZX1cbiAqICAgICAvPlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZUN1cnJlbnRVc2VyKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8VXNlclJlc3BvbnNlLCBFcnJvciwgVXBkYXRlVXNlclJlcXVlc3Q+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxVc2VyUmVzcG9uc2UsIEVycm9yLCBVcGRhdGVVc2VyUmVxdWVzdD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogVXBkYXRlVXNlclJlcXVlc3QpOiBQcm9taXNlPFVzZXJSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wdXQ8VXNlclJlc3BvbnNlPignL2FwaS92MS91c2Vycy9tZScsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgY3VycmVudCB1c2VyIHF1ZXJ5IHRvIHRyaWdnZXIgcmVmZXRjaCB3aXRoIHVwZGF0ZWQgZGF0YVxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogdXNlcktleXMubWUoKSB9KTtcblxuICAgICAgLy8gQWxzbyBpbnZhbGlkYXRlIHRoZSBkZXRhaWwgcXVlcnkgZm9yIHRoaXMgdXNlciBpZiB0aGV5J3ZlIHZpZXdlZCB0aGVpciBvd24gcHJvZmlsZVxuICAgICAgaWYgKGRhdGEuaWQpIHtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogdXNlcktleXMuZGV0YWlsKGRhdGEuaWQpIH0pO1xuICAgICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiB1c2VyS2V5cy5wdWJsaWMoZGF0YS5pZCkgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgdXNlcidzIG9uU3VjY2VzcyBpZiBwcm92aWRlZFxuICAgICAgLy8gVXNlcidzIG9uU3VjY2VzcyBpcyBoYW5kbGVkIGJ5IHNwcmVhZGluZyBvcHRpb25zXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb21wbGV0ZSB1c2VyIG9uYm9hcmRpbmdcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE1hcmtzIHRoZSB1c2VyJ3Mgb25ib2FyZGluZyBwcm9jZXNzIGFzIGNvbXBsZXRlLlxuICogVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGFmdGVyIGEgdXNlciBjb21wbGV0ZXMgYWxsIHJlcXVpcmVkIG9uYm9hcmRpbmcgc3RlcHNcbiAqIChlLmcuLCBzZXR0aW5nIHVwIHByb2ZpbGUsIHNlbGVjdGluZyBpbnRlcmVzdHMsIHNldHRpbmcgc29iZXIgZGF0ZSkuXG4gKiBVcGRhdGVzIHRoZSB1c2VyJ3Mgb25ib2FyZGluZ0NvbXBsZXRlZCBmbGFnIGFuZCB1bmxvY2tzIGZ1bGwgYXBwIGFjY2Vzcy5cbiAqXG4gKiBAZW5kcG9pbnQgUE9TVCAvYXBpL3YxL3VzZXJzL21lL2NvbXBsZXRlLW9uYm9hcmRpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyB1c2VDb21wbGV0ZU9uYm9hcmRpbmcgfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gT25ib2FyZGluZ0ZpbmFsU3RlcCgpIHtcbiAqICAgY29uc3QgeyBtdXRhdGU6IGNvbXBsZXRlT25ib2FyZGluZywgaXNQZW5kaW5nIH0gPSB1c2VDb21wbGV0ZU9uYm9hcmRpbmcoe1xuICogICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICogICAgICAgdG9hc3Quc3VjY2VzcygnV2VsY29tZSB0byBHcm93U29iZXIhJyk7XG4gKiAgICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdIb21lJyk7XG4gKiAgICAgfSxcbiAqICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAqICAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gY29tcGxldGUgb25ib2FyZGluZzogJyArIGVycm9yLm1lc3NhZ2UpO1xuICogICAgIH0sXG4gKiAgIH0pO1xuICpcbiAqICAgY29uc3QgaGFuZGxlRmluaXNoID0gKCkgPT4ge1xuICogICAgIGNvbXBsZXRlT25ib2FyZGluZygpO1xuICogICB9O1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPGgxPllvdSdyZSBBbGwgU2V0ITwvaDE+XG4gKiAgICAgICA8cD5SZWFkeSB0byBzdGFydCB5b3VyIHNvYmVyIGpvdXJuZXk/PC9wPlxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVGaW5pc2h9IGRpc2FibGVkPXtpc1BlbmRpbmd9PlxuICogICAgICAgICB7aXNQZW5kaW5nID8gJ1NldHRpbmcgdXAuLi4nIDogJ0dldCBTdGFydGVkJ31cbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIE11bHRpLXN0ZXAgb25ib2FyZGluZyB3aXRoIHZhbGlkYXRpb246XG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIE9uYm9hcmRpbmdGbG93KCkge1xuICogICBjb25zdCBbY3VycmVudFN0ZXAsIHNldEN1cnJlbnRTdGVwXSA9IHVzZVN0YXRlKDEpO1xuICogICBjb25zdCB7IG11dGF0ZUFzeW5jOiBjb21wbGV0ZU9uYm9hcmRpbmcgfSA9IHVzZUNvbXBsZXRlT25ib2FyZGluZygpO1xuICogICBjb25zdCB7IGRhdGE6IHVzZXIgfSA9IHVzZUN1cnJlbnRVc2VyKCk7XG4gKlxuICogICBjb25zdCBoYW5kbGVDb21wbGV0ZSA9IGFzeW5jICgpID0+IHtcbiAqICAgICAvLyBWYWxpZGF0ZSBhbGwgcmVxdWlyZWQgZmllbGRzIGFyZSBmaWxsZWRcbiAqICAgICBpZiAoIXVzZXI/Lm5hbWUgfHwgIXVzZXI/LnNvYmVyRGF0ZSB8fCAhdXNlcj8uY2l0eSkge1xuICogICAgICAgdG9hc3QuZXJyb3IoJ1BsZWFzZSBjb21wbGV0ZSBhbGwgcmVxdWlyZWQgZmllbGRzJyk7XG4gKiAgICAgICByZXR1cm47XG4gKiAgICAgfVxuICpcbiAqICAgICB0cnkge1xuICogICAgICAgYXdhaXQgY29tcGxldGVPbmJvYXJkaW5nKCk7XG4gKiAgICAgICAvLyBVc2VyIHdpbGwgYmUgcmVkaXJlY3RlZCB2aWEgb25TdWNjZXNzIGNhbGxiYWNrXG4gKiAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgICAgIGNvbnNvbGUuZXJyb3IoJ09uYm9hcmRpbmcgZXJyb3I6JywgZXJyb3IpO1xuICogICAgIH1cbiAqICAgfTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIHtjdXJyZW50U3RlcCA9PT0gMSAmJiA8UHJvZmlsZVNldHVwIG9uTmV4dD17KCkgPT4gc2V0Q3VycmVudFN0ZXAoMil9IC8+fVxuICogICAgICAge2N1cnJlbnRTdGVwID09PSAyICYmIDxJbnRlcmVzdFNlbGVjdGlvbiBvbk5leHQ9eygpID0+IHNldEN1cnJlbnRTdGVwKDMpfSAvPn1cbiAqICAgICAgIHtjdXJyZW50U3RlcCA9PT0gMyAmJiA8U29iZXJEYXRlU2V0dXAgb25OZXh0PXtoYW5kbGVDb21wbGV0ZX0gLz59XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ2hlY2sgb25ib2FyZGluZyBzdGF0dXM6XG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEFwcE5hdmlnYXRvcigpIHtcbiAqICAgY29uc3QgeyBkYXRhOiB1c2VyLCBpc0xvYWRpbmcgfSA9IHVzZUN1cnJlbnRVc2VyKCk7XG4gKlxuICogICBpZiAoaXNMb2FkaW5nKSByZXR1cm4gPFNwbGFzaFNjcmVlbiAvPjtcbiAqXG4gKiAgIC8vIFJlZGlyZWN0IHRvIG9uYm9hcmRpbmcgaWYgbm90IGNvbXBsZXRlZFxuICogICBpZiAodXNlciAmJiAhdXNlci5vbmJvYXJkaW5nQ29tcGxldGVkKSB7XG4gKiAgICAgcmV0dXJuIDxPbmJvYXJkaW5nRmxvdyAvPjtcbiAqICAgfVxuICpcbiAqICAgcmV0dXJuIDxNYWluQXBwIC8+O1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggYW5hbHl0aWNzIHRyYWNraW5nOlxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZTogY29tcGxldGVPbmJvYXJkaW5nIH0gPSB1c2VDb21wbGV0ZU9uYm9hcmRpbmcoe1xuICogICBvblN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gKiAgICAgYW5hbHl0aWNzLnRyYWNrKCdPbmJvYXJkaW5nIENvbXBsZXRlZCcsIHtcbiAqICAgICAgIHVzZXJJZDogZGF0YS5pZCxcbiAqICAgICAgIGNvbXBsZXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gKiAgICAgICBwcm9maWxlQ29tcGxldGU6ICEhZGF0YS5iaW8gJiYgISFkYXRhLmF2YXRhcixcbiAqICAgICB9KTtcbiAqICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKCdIb21lJyk7XG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb21wbGV0ZU9uYm9hcmRpbmcoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxVc2VyUmVzcG9uc2UsIEVycm9yLCB2b2lkPiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8VXNlclJlc3BvbnNlLCBFcnJvciwgdm9pZD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoKTogUHJvbWlzZTxVc2VyUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxVc2VyUmVzcG9uc2U+KCcvYXBpL3YxL3VzZXJzL21lL2NvbXBsZXRlLW9uYm9hcmRpbmcnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGN1cnJlbnQgdXNlciBxdWVyeSB0byB0cmlnZ2VyIHJlZmV0Y2ggd2l0aCB1cGRhdGVkIG9uYm9hcmRpbmcgc3RhdHVzXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiB1c2VyS2V5cy5tZSgpIH0pO1xuXG4gICAgICAvLyBBbHNvIGludmFsaWRhdGUgdGhlIGRldGFpbCBxdWVyeSBmb3IgdGhpcyB1c2VyXG4gICAgICBpZiAoZGF0YS5pZCkge1xuICAgICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiB1c2VyS2V5cy5kZXRhaWwoZGF0YS5pZCkgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgdXNlcidzIG9uU3VjY2VzcyBpZiBwcm92aWRlZFxuICAgICAgLy8gVXNlcidzIG9uU3VjY2VzcyBpcyBoYW5kbGVkIGJ5IHNwcmVhZGluZyBvcHRpb25zXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBTZW5kIE9UUCB0byB2ZXJpZnkgcGhvbmUgbnVtYmVyIGZvciBhdXRoZW50aWNhdGVkIHVzZXJcbiAqXG4gKiBAZW5kcG9pbnQgUE9TVCAvYXBpL3YxL3VzZXJzL21lL3Bob25lL3NlbmQtb3RwXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNlbmRVc2VyUGhvbmVPdHAoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxPdHBTZW50UmVzcG9uc2UsIEVycm9yLCBTZW5kT3RwUmVxdWVzdD4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PE90cFNlbnRSZXNwb25zZSwgRXJyb3IsIFNlbmRPdHBSZXF1ZXN0PiB7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IFNlbmRPdHBSZXF1ZXN0KTogUHJvbWlzZTxPdHBTZW50UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxPdHBTZW50UmVzcG9uc2U+KCcvYXBpL3YxL3VzZXJzL21lL3Bob25lL3NlbmQtb3RwJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFZlcmlmeSBPVFAgYW5kIHVwZGF0ZSBwaG9uZSBudW1iZXIgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlclxuICpcbiAqIEBlbmRwb2ludCBQT1NUIC9hcGkvdjEvdXNlcnMvbWUvcGhvbmUvdmVyaWZ5LW90cFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VWZXJpZnlVc2VyUGhvbmVPdHAoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxVc2VyUmVzcG9uc2UsIEVycm9yLCBVc2VyVmVyaWZ5UGhvbmVPdHBSZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8VXNlclJlc3BvbnNlLCBFcnJvciwgVXNlclZlcmlmeVBob25lT3RwUmVxdWVzdD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogVXNlclZlcmlmeVBob25lT3RwUmVxdWVzdCk6IFByb21pc2U8VXNlclJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8VXNlclJlc3BvbnNlPignL2FwaS92MS91c2Vycy9tZS9waG9uZS92ZXJpZnktb3RwJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gICAgb25TdWNjZXNzOiAoZGF0YSwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogdXNlcktleXMubWUoKSB9KTtcblxuICAgICAgaWYgKGRhdGEuaWQpIHtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogdXNlcktleXMuZGV0YWlsKGRhdGEuaWQpIH0pO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIG9uTXV0YXRlUmVzdWx0LCBjb250ZXh0KTtcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
package/src/api/CLAUDE.md
CHANGED
|
@@ -3,10 +3,19 @@
|
|
|
3
3
|
|
|
4
4
|
<!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
|
|
5
5
|
|
|
6
|
+
### Jan 24, 2026
|
|
7
|
+
|
|
8
|
+
| ID | Time | T | Title | Read |
|
|
9
|
+
|----|------|---|-------|------|
|
|
10
|
+
| #921 | 11:42 AM | 🟣 | Added Creator Community Management to SDK | ~466 |
|
|
11
|
+
| #920 | " | 🟣 | Creator Community SDK Hooks Added | ~445 |
|
|
12
|
+
| #583 | 8:25 AM | ✅ | DTO Renaming for Message Type Clarity | ~318 |
|
|
13
|
+
|
|
6
14
|
### Jan 25, 2026
|
|
7
15
|
|
|
8
16
|
| ID | Time | T | Title | Read |
|
|
9
17
|
|----|------|---|-------|------|
|
|
18
|
+
| #1778 | 12:19 PM | 🔵 | SDK Client Architecture with Token Management and Response Unwrapping | ~561 |
|
|
10
19
|
| #1712 | 11:42 AM | 🟣 | Product Checkout Flow with Stripe Payment Integration Completed | ~536 |
|
|
11
20
|
| #1208 | 3:28 AM | 🔵 | UserResponse data structure includes comprehensive profile and notification settings | ~580 |
|
|
12
21
|
</claude-mem-context>
|
package/src/api/client.ts
CHANGED
|
@@ -30,6 +30,9 @@ function createApiClient(sdkConfig: SDKConfig): AxiosInstance {
|
|
|
30
30
|
},
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
+
// Track ongoing refresh to avoid duplicate calls
|
|
34
|
+
let refreshPromise: Promise<string> | null = null;
|
|
35
|
+
|
|
33
36
|
// Request interceptor - add auth token
|
|
34
37
|
client.interceptors.request.use(
|
|
35
38
|
async (requestConfig: InternalAxiosRequestConfig) => {
|
|
@@ -53,16 +56,28 @@ function createApiClient(sdkConfig: SDKConfig): AxiosInstance {
|
|
|
53
56
|
return response;
|
|
54
57
|
},
|
|
55
58
|
async (error: AxiosError) => {
|
|
56
|
-
|
|
59
|
+
const originalRequest = error.config as InternalAxiosRequestConfig & { _retry?: boolean };
|
|
60
|
+
|
|
61
|
+
if (error.response?.status === 401 && originalRequest && !originalRequest._retry) {
|
|
62
|
+
originalRequest._retry = true;
|
|
63
|
+
|
|
57
64
|
if (sdkConfig.refreshAccessToken) {
|
|
58
65
|
try {
|
|
59
|
-
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
// Deduplicate concurrent refresh calls
|
|
67
|
+
if (!refreshPromise) {
|
|
68
|
+
refreshPromise = sdkConfig.refreshAccessToken().finally(() => {
|
|
69
|
+
refreshPromise = null;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const newToken = await refreshPromise;
|
|
73
|
+
|
|
74
|
+
if (newToken) {
|
|
75
|
+
originalRequest.headers.Authorization = `Bearer ${newToken}`;
|
|
76
|
+
return client.request(originalRequest);
|
|
63
77
|
}
|
|
64
78
|
} catch {
|
|
65
79
|
sdkConfig.onUnauthorized?.();
|
|
80
|
+
return Promise.reject(error);
|
|
66
81
|
}
|
|
67
82
|
} else {
|
|
68
83
|
sdkConfig.onUnauthorized?.();
|
|
@@ -315,13 +315,15 @@ export function useVerifyUserPhoneOtp(
|
|
|
315
315
|
const response = await client.post<UserResponse>('/api/v1/users/me/phone/verify-otp', data);
|
|
316
316
|
return response.data;
|
|
317
317
|
},
|
|
318
|
-
|
|
318
|
+
...options,
|
|
319
|
+
onSuccess: (data, variables, onMutateResult, context) => {
|
|
319
320
|
queryClient.invalidateQueries({ queryKey: userKeys.me() });
|
|
320
321
|
|
|
321
322
|
if (data.id) {
|
|
322
323
|
queryClient.invalidateQueries({ queryKey: userKeys.detail(data.id) });
|
|
323
324
|
}
|
|
325
|
+
|
|
326
|
+
options?.onSuccess?.(data, variables, onMutateResult, context);
|
|
324
327
|
},
|
|
325
|
-
...options,
|
|
326
328
|
});
|
|
327
329
|
}
|