@replyke/core 7.0.0-beta.84 → 7.0.0-beta.85
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/cjs/config/axios.js +0 -1
- package/dist/cjs/config/axios.js.map +1 -1
- package/dist/cjs/config/useAxiosPrivate.js +16 -10
- package/dist/cjs/config/useAxiosPrivate.js.map +1 -1
- package/dist/cjs/context/replyke-integration-context.js +16 -1
- package/dist/cjs/context/replyke-integration-context.js.map +1 -1
- package/dist/cjs/context/replyke-store-context.js +17 -6
- package/dist/cjs/context/replyke-store-context.js.map +1 -1
- package/dist/cjs/hooks/auth/index.d.ts +6 -0
- package/dist/cjs/hooks/auth/index.js +13 -1
- package/dist/cjs/hooks/auth/index.js.map +1 -1
- package/dist/cjs/hooks/auth/useAccountSync.d.ts +2 -0
- package/dist/cjs/hooks/auth/useAccountSync.js +165 -0
- package/dist/cjs/hooks/auth/useAccountSync.js.map +1 -0
- package/dist/cjs/hooks/auth/useAccounts.d.ts +7 -0
- package/dist/cjs/hooks/auth/useAccounts.js +23 -0
- package/dist/cjs/hooks/auth/useAccounts.js.map +1 -0
- package/dist/cjs/hooks/auth/useAddAccount.d.ts +5 -0
- package/dist/cjs/hooks/auth/useAddAccount.js +27 -0
- package/dist/cjs/hooks/auth/useAddAccount.js.map +1 -0
- package/dist/cjs/hooks/auth/useAuth.d.ts +1 -1
- package/dist/cjs/hooks/auth/useRemoveAccount.d.ts +6 -0
- package/dist/cjs/hooks/auth/useRemoveAccount.js +128 -0
- package/dist/cjs/hooks/auth/useRemoveAccount.js.map +1 -0
- package/dist/cjs/hooks/auth/useSignOutAll.d.ts +4 -0
- package/dist/cjs/hooks/auth/useSignOutAll.js +71 -0
- package/dist/cjs/hooks/auth/useSignOutAll.js.map +1 -0
- package/dist/cjs/hooks/auth/useSwitchAccount.d.ts +6 -0
- package/dist/cjs/hooks/auth/useSwitchAccount.js +103 -0
- package/dist/cjs/hooks/auth/useSwitchAccount.js.map +1 -0
- package/dist/cjs/hooks/collections/useCollections.js +0 -1
- package/dist/cjs/hooks/collections/useCollections.js.map +1 -1
- package/dist/cjs/hooks/collections/useIsEntitySaved.js +0 -1
- package/dist/cjs/hooks/collections/useIsEntitySaved.js.map +1 -1
- package/dist/cjs/hooks/entities/useCreateEntity.js +1 -2
- package/dist/cjs/hooks/entities/useCreateEntity.js.map +1 -1
- package/dist/cjs/hooks/entities/useDeleteEntity.js +1 -3
- package/dist/cjs/hooks/entities/useDeleteEntity.js.map +1 -1
- package/dist/cjs/hooks/entities/usePublishDraft.js +1 -1
- package/dist/cjs/hooks/entities/usePublishDraft.js.map +1 -1
- package/dist/cjs/hooks/entities/useUpdateEntity.js +1 -1
- package/dist/cjs/hooks/entities/useUpdateEntity.js.map +1 -1
- package/dist/cjs/hooks/relationships/connections/useAcceptConnection.js +1 -1
- package/dist/cjs/hooks/relationships/connections/useAcceptConnection.js.map +1 -1
- package/dist/cjs/hooks/relationships/connections/useDeclineConnection.js +1 -1
- package/dist/cjs/hooks/relationships/connections/useDeclineConnection.js.map +1 -1
- package/dist/cjs/hooks/relationships/connections/useFetchConnectionStatus.js +1 -1
- package/dist/cjs/hooks/relationships/connections/useFetchConnectionStatus.js.map +1 -1
- package/dist/cjs/hooks/relationships/connections/useFetchConnections.js +0 -1
- package/dist/cjs/hooks/relationships/connections/useFetchConnections.js.map +1 -1
- package/dist/cjs/hooks/relationships/connections/useFetchConnectionsCount.js +1 -1
- package/dist/cjs/hooks/relationships/connections/useFetchConnectionsCount.js.map +1 -1
- package/dist/cjs/hooks/relationships/connections/useFetchReceivedPendingConnections.js +0 -1
- package/dist/cjs/hooks/relationships/connections/useFetchReceivedPendingConnections.js.map +1 -1
- package/dist/cjs/hooks/relationships/connections/useFetchSentPendingConnections.js +0 -1
- package/dist/cjs/hooks/relationships/connections/useFetchSentPendingConnections.js.map +1 -1
- package/dist/cjs/hooks/relationships/connections/useRemoveConnection.js +1 -1
- package/dist/cjs/hooks/relationships/connections/useRemoveConnection.js.map +1 -1
- package/dist/cjs/hooks/relationships/connections/useRemoveConnectionByUserId.js +1 -1
- package/dist/cjs/hooks/relationships/connections/useRemoveConnectionByUserId.js.map +1 -1
- package/dist/cjs/hooks/relationships/connections/useRequestConnection.js +1 -1
- package/dist/cjs/hooks/relationships/connections/useRequestConnection.js.map +1 -1
- package/dist/cjs/hooks/relationships/follows/useFetchFollowStatus.js +1 -3
- package/dist/cjs/hooks/relationships/follows/useFetchFollowStatus.js.map +1 -1
- package/dist/cjs/hooks/relationships/follows/useFetchFollowers.js +0 -1
- package/dist/cjs/hooks/relationships/follows/useFetchFollowers.js.map +1 -1
- package/dist/cjs/hooks/relationships/follows/useFetchFollowersCount.js +1 -1
- package/dist/cjs/hooks/relationships/follows/useFetchFollowersCount.js.map +1 -1
- package/dist/cjs/hooks/relationships/follows/useFetchFollowing.js +0 -1
- package/dist/cjs/hooks/relationships/follows/useFetchFollowing.js.map +1 -1
- package/dist/cjs/hooks/relationships/follows/useFetchFollowingCount.js +1 -1
- package/dist/cjs/hooks/relationships/follows/useFetchFollowingCount.js.map +1 -1
- package/dist/cjs/hooks/relationships/follows/useFollowUser.js +1 -1
- package/dist/cjs/hooks/relationships/follows/useFollowUser.js.map +1 -1
- package/dist/cjs/hooks/relationships/follows/useUnfollowByFollowId.js +1 -3
- package/dist/cjs/hooks/relationships/follows/useUnfollowByFollowId.js.map +1 -1
- package/dist/cjs/hooks/relationships/follows/useUnfollowUserByUserId.js +1 -3
- package/dist/cjs/hooks/relationships/follows/useUnfollowUserByUserId.js.map +1 -1
- package/dist/cjs/hooks/reports/useCreateReport.js +1 -1
- package/dist/cjs/hooks/reports/useCreateReport.js.map +1 -1
- package/dist/cjs/hooks/storage/useUploadFile.js +0 -1
- package/dist/cjs/hooks/storage/useUploadFile.js.map +1 -1
- package/dist/cjs/hooks/storage/useUploadImage.js +0 -1
- package/dist/cjs/hooks/storage/useUploadImage.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +13 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interfaces/IAccountStorage.d.ts +6 -0
- package/dist/cjs/interfaces/IAccountStorage.js +3 -0
- package/dist/cjs/interfaces/IAccountStorage.js.map +1 -0
- package/dist/cjs/store/api/baseApi.js +0 -1
- package/dist/cjs/store/api/baseApi.js.map +1 -1
- package/dist/cjs/store/hooks.d.ts +1 -0
- package/dist/cjs/store/index.d.ts +2 -0
- package/dist/cjs/store/replykeReducers.d.ts +2 -0
- package/dist/cjs/store/replykeReducers.js +2 -0
- package/dist/cjs/store/replykeReducers.js.map +1 -1
- package/dist/cjs/store/rootReducer.d.ts +3 -0
- package/dist/cjs/store/slices/accountsSlice.d.ts +41 -0
- package/dist/cjs/store/slices/accountsSlice.js +71 -0
- package/dist/cjs/store/slices/accountsSlice.js.map +1 -0
- package/dist/cjs/store/slices/authThunks.d.ts +3 -0
- package/dist/cjs/store/slices/authThunks.js +102 -28
- package/dist/cjs/store/slices/authThunks.js.map +1 -1
- package/dist/esm/config/axios.js +0 -1
- package/dist/esm/config/axios.js.map +1 -1
- package/dist/esm/config/useAxiosPrivate.js +16 -10
- package/dist/esm/config/useAxiosPrivate.js.map +1 -1
- package/dist/esm/context/replyke-integration-context.js +18 -3
- package/dist/esm/context/replyke-integration-context.js.map +1 -1
- package/dist/esm/context/replyke-store-context.js +19 -8
- package/dist/esm/context/replyke-store-context.js.map +1 -1
- package/dist/esm/hooks/auth/index.d.ts +6 -0
- package/dist/esm/hooks/auth/index.js +6 -0
- package/dist/esm/hooks/auth/index.js.map +1 -1
- package/dist/esm/hooks/auth/useAccountSync.d.ts +2 -0
- package/dist/esm/hooks/auth/useAccountSync.js +162 -0
- package/dist/esm/hooks/auth/useAccountSync.js.map +1 -0
- package/dist/esm/hooks/auth/useAccounts.d.ts +7 -0
- package/dist/esm/hooks/auth/useAccounts.js +20 -0
- package/dist/esm/hooks/auth/useAccounts.js.map +1 -0
- package/dist/esm/hooks/auth/useAddAccount.d.ts +5 -0
- package/dist/esm/hooks/auth/useAddAccount.js +24 -0
- package/dist/esm/hooks/auth/useAddAccount.js.map +1 -0
- package/dist/esm/hooks/auth/useAuth.d.ts +1 -1
- package/dist/esm/hooks/auth/useRemoveAccount.d.ts +6 -0
- package/dist/esm/hooks/auth/useRemoveAccount.js +122 -0
- package/dist/esm/hooks/auth/useRemoveAccount.js.map +1 -0
- package/dist/esm/hooks/auth/useSignOutAll.d.ts +4 -0
- package/dist/esm/hooks/auth/useSignOutAll.js +65 -0
- package/dist/esm/hooks/auth/useSignOutAll.js.map +1 -0
- package/dist/esm/hooks/auth/useSwitchAccount.d.ts +6 -0
- package/dist/esm/hooks/auth/useSwitchAccount.js +97 -0
- package/dist/esm/hooks/auth/useSwitchAccount.js.map +1 -0
- package/dist/esm/hooks/collections/useCollections.js +0 -1
- package/dist/esm/hooks/collections/useCollections.js.map +1 -1
- package/dist/esm/hooks/collections/useIsEntitySaved.js +0 -1
- package/dist/esm/hooks/collections/useIsEntitySaved.js.map +1 -1
- package/dist/esm/hooks/entities/useCreateEntity.js +1 -2
- package/dist/esm/hooks/entities/useCreateEntity.js.map +1 -1
- package/dist/esm/hooks/entities/useDeleteEntity.js +1 -3
- package/dist/esm/hooks/entities/useDeleteEntity.js.map +1 -1
- package/dist/esm/hooks/entities/usePublishDraft.js +1 -1
- package/dist/esm/hooks/entities/usePublishDraft.js.map +1 -1
- package/dist/esm/hooks/entities/useUpdateEntity.js +1 -1
- package/dist/esm/hooks/entities/useUpdateEntity.js.map +1 -1
- package/dist/esm/hooks/relationships/connections/useAcceptConnection.js +1 -1
- package/dist/esm/hooks/relationships/connections/useAcceptConnection.js.map +1 -1
- package/dist/esm/hooks/relationships/connections/useDeclineConnection.js +1 -1
- package/dist/esm/hooks/relationships/connections/useDeclineConnection.js.map +1 -1
- package/dist/esm/hooks/relationships/connections/useFetchConnectionStatus.js +1 -1
- package/dist/esm/hooks/relationships/connections/useFetchConnectionStatus.js.map +1 -1
- package/dist/esm/hooks/relationships/connections/useFetchConnections.js +0 -1
- package/dist/esm/hooks/relationships/connections/useFetchConnections.js.map +1 -1
- package/dist/esm/hooks/relationships/connections/useFetchConnectionsCount.js +1 -1
- package/dist/esm/hooks/relationships/connections/useFetchConnectionsCount.js.map +1 -1
- package/dist/esm/hooks/relationships/connections/useFetchReceivedPendingConnections.js +0 -1
- package/dist/esm/hooks/relationships/connections/useFetchReceivedPendingConnections.js.map +1 -1
- package/dist/esm/hooks/relationships/connections/useFetchSentPendingConnections.js +0 -1
- package/dist/esm/hooks/relationships/connections/useFetchSentPendingConnections.js.map +1 -1
- package/dist/esm/hooks/relationships/connections/useRemoveConnection.js +1 -1
- package/dist/esm/hooks/relationships/connections/useRemoveConnection.js.map +1 -1
- package/dist/esm/hooks/relationships/connections/useRemoveConnectionByUserId.js +1 -1
- package/dist/esm/hooks/relationships/connections/useRemoveConnectionByUserId.js.map +1 -1
- package/dist/esm/hooks/relationships/connections/useRequestConnection.js +1 -1
- package/dist/esm/hooks/relationships/connections/useRequestConnection.js.map +1 -1
- package/dist/esm/hooks/relationships/follows/useFetchFollowStatus.js +1 -3
- package/dist/esm/hooks/relationships/follows/useFetchFollowStatus.js.map +1 -1
- package/dist/esm/hooks/relationships/follows/useFetchFollowers.js +0 -1
- package/dist/esm/hooks/relationships/follows/useFetchFollowers.js.map +1 -1
- package/dist/esm/hooks/relationships/follows/useFetchFollowersCount.js +1 -1
- package/dist/esm/hooks/relationships/follows/useFetchFollowersCount.js.map +1 -1
- package/dist/esm/hooks/relationships/follows/useFetchFollowing.js +0 -1
- package/dist/esm/hooks/relationships/follows/useFetchFollowing.js.map +1 -1
- package/dist/esm/hooks/relationships/follows/useFetchFollowingCount.js +1 -1
- package/dist/esm/hooks/relationships/follows/useFetchFollowingCount.js.map +1 -1
- package/dist/esm/hooks/relationships/follows/useFollowUser.js +1 -1
- package/dist/esm/hooks/relationships/follows/useFollowUser.js.map +1 -1
- package/dist/esm/hooks/relationships/follows/useUnfollowByFollowId.js +1 -3
- package/dist/esm/hooks/relationships/follows/useUnfollowByFollowId.js.map +1 -1
- package/dist/esm/hooks/relationships/follows/useUnfollowUserByUserId.js +1 -3
- package/dist/esm/hooks/relationships/follows/useUnfollowUserByUserId.js.map +1 -1
- package/dist/esm/hooks/reports/useCreateReport.js +1 -1
- package/dist/esm/hooks/reports/useCreateReport.js.map +1 -1
- package/dist/esm/hooks/storage/useUploadFile.js +0 -1
- package/dist/esm/hooks/storage/useUploadFile.js.map +1 -1
- package/dist/esm/hooks/storage/useUploadImage.js +0 -1
- package/dist/esm/hooks/storage/useUploadImage.js.map +1 -1
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interfaces/IAccountStorage.d.ts +6 -0
- package/dist/esm/interfaces/IAccountStorage.js +2 -0
- package/dist/esm/interfaces/IAccountStorage.js.map +1 -0
- package/dist/esm/store/api/baseApi.js +0 -1
- package/dist/esm/store/api/baseApi.js.map +1 -1
- package/dist/esm/store/hooks.d.ts +1 -0
- package/dist/esm/store/index.d.ts +2 -0
- package/dist/esm/store/replykeReducers.d.ts +2 -0
- package/dist/esm/store/replykeReducers.js +2 -0
- package/dist/esm/store/replykeReducers.js.map +1 -1
- package/dist/esm/store/rootReducer.d.ts +3 -0
- package/dist/esm/store/slices/accountsSlice.d.ts +41 -0
- package/dist/esm/store/slices/accountsSlice.js +64 -0
- package/dist/esm/store/slices/accountsSlice.js.map +1 -0
- package/dist/esm/store/slices/authThunks.d.ts +3 -0
- package/dist/esm/store/slices/authThunks.js +101 -27
- package/dist/esm/store/slices/authThunks.js.map +1 -1
- package/package.json +1 -1
package/dist/cjs/config/axios.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axios.js","sourceRoot":"","sources":["../../../src/config/axios.ts"],"names":[],"mappings":";;;;;;AAAA,gDAA0B;AAE1B,IAAM,QAAQ,GAAG,4BAA4B,CAAC;AAE9C,kBAAe,eAAK,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,QAAQ;CAClB,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG,eAAK,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;
|
|
1
|
+
{"version":3,"file":"axios.js","sourceRoot":"","sources":["../../../src/config/axios.ts"],"names":[],"mappings":";;;;;;AAAA,gDAA0B;AAE1B,IAAM,QAAQ,GAAG,4BAA4B,CAAC;AAE9C,kBAAe,eAAK,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,QAAQ;CAClB,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG,eAAK,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;CAChD,CAAC,CAAC"}
|
|
@@ -39,32 +39,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
var react_1 = require("react");
|
|
40
40
|
var axios_1 = require("./axios");
|
|
41
41
|
var auth_1 = require("../hooks/auth");
|
|
42
|
+
// Module-level mutex: prevents concurrent token rotations from racing
|
|
43
|
+
var refreshPromise = null;
|
|
42
44
|
var useAxiosPrivate = function () {
|
|
43
45
|
var _a = (0, auth_1.useAuth)(), accessToken = _a.accessToken, requestNewAccessToken = _a.requestNewAccessToken;
|
|
44
46
|
(0, react_1.useEffect)(function () {
|
|
45
47
|
var requestIntercept = axios_1.axiosPrivate.interceptors.request.use(function (config) {
|
|
46
|
-
// If we have no value for access token return the config as is
|
|
47
|
-
// This is a new addition so maybe let's avoid it for not until everything works fine.
|
|
48
|
-
// if (!accessToken) return config;
|
|
49
|
-
// If we already have Auth headers set then just return the config
|
|
50
48
|
if (config.headers["Authorization"])
|
|
51
49
|
return config;
|
|
52
|
-
// Otherwise we set the authorization headers
|
|
53
50
|
config.headers["Authorization"] = "Bearer ".concat(accessToken);
|
|
54
51
|
return config;
|
|
55
52
|
}, function (error) { return Promise.reject(error); });
|
|
56
53
|
var responseIntercept = axios_1.axiosPrivate.interceptors.response.use(function (response) { return response; }, function (error) { return __awaiter(void 0, void 0, void 0, function () {
|
|
57
54
|
var prevRequest, newAccessToken;
|
|
58
|
-
var _a;
|
|
59
|
-
return __generator(this, function (
|
|
60
|
-
switch (
|
|
55
|
+
var _a, _b, _c;
|
|
56
|
+
return __generator(this, function (_d) {
|
|
57
|
+
switch (_d.label) {
|
|
61
58
|
case 0:
|
|
62
59
|
prevRequest = error === null || error === void 0 ? void 0 : error.config;
|
|
63
60
|
if (!(((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) === 403 && !(prevRequest === null || prevRequest === void 0 ? void 0 : prevRequest.sent))) return [3 /*break*/, 2];
|
|
64
61
|
prevRequest.sent = true;
|
|
65
|
-
|
|
62
|
+
// Use mutex to prevent concurrent rotation races
|
|
63
|
+
if (!refreshPromise) {
|
|
64
|
+
refreshPromise = (_c = (_b = requestNewAccessToken === null || requestNewAccessToken === void 0 ? void 0 : requestNewAccessToken()) === null || _b === void 0 ? void 0 : _b.finally(function () {
|
|
65
|
+
refreshPromise = null;
|
|
66
|
+
})) !== null && _c !== void 0 ? _c : Promise.resolve(undefined);
|
|
67
|
+
}
|
|
68
|
+
return [4 /*yield*/, refreshPromise];
|
|
66
69
|
case 1:
|
|
67
|
-
newAccessToken =
|
|
70
|
+
newAccessToken = _d.sent();
|
|
71
|
+
if (!newAccessToken) {
|
|
72
|
+
return [2 /*return*/, Promise.reject(error)];
|
|
73
|
+
}
|
|
68
74
|
prevRequest.headers["Authorization"] = "Bearer ".concat(newAccessToken);
|
|
69
75
|
return [2 /*return*/, (0, axios_1.axiosPrivate)(prevRequest)];
|
|
70
76
|
case 2: return [2 /*return*/, Promise.reject(error)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAxiosPrivate.js","sourceRoot":"","sources":["../../../src/config/useAxiosPrivate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAkC;AAClC,iCAAuC;AACvC,sCAAwC;AAExC,IAAM,eAAe,GAAG;IAChB,IAAA,KAAyC,IAAA,cAAO,GAAE,EAAhD,WAAW,iBAAA,EAAE,qBAAqB,2BAAc,CAAC;IAEzD,IAAA,iBAAS,EAAC;QACR,IAAM,gBAAgB,GAAG,oBAAY,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAC5D,UAAC,MAAM;YACL
|
|
1
|
+
{"version":3,"file":"useAxiosPrivate.js","sourceRoot":"","sources":["../../../src/config/useAxiosPrivate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAkC;AAClC,iCAAuC;AACvC,sCAAwC;AAExC,sEAAsE;AACtE,IAAI,cAAc,GAAuC,IAAI,CAAC;AAE9D,IAAM,eAAe,GAAG;IAChB,IAAA,KAAyC,IAAA,cAAO,GAAE,EAAhD,WAAW,iBAAA,EAAE,qBAAqB,2BAAc,CAAC;IAEzD,IAAA,iBAAS,EAAC;QACR,IAAM,gBAAgB,GAAG,oBAAY,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAC5D,UAAC,MAAM;YACL,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;gBAAE,OAAO,MAAM,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,iBAAU,WAAW,CAAE,CAAC;YAC1D,OAAO,MAAM,CAAC;QAChB,CAAC,EACD,UAAC,KAAK,IAAK,OAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAArB,CAAqB,CACjC,CAAC;QAEF,IAAM,iBAAiB,GAAG,oBAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC9D,UAAC,QAAQ,IAAK,OAAA,QAAQ,EAAR,CAAQ,EACtB,UAAO,KAAK;;;;;;wBACJ,WAAW,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC;6BAC9B,CAAA,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,MAAM,MAAK,GAAG,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,CAAA,CAAA,EAArD,wBAAqD;wBACvD,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;wBAExB,iDAAiD;wBACjD,IAAI,CAAC,cAAc,EAAE,CAAC;4BACpB,cAAc,GAAG,MAAA,MAAA,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,EAAI,0CAAE,OAAO,CAAC;gCAClD,cAAc,GAAG,IAAI,CAAC;4BACxB,CAAC,CAAC,mCAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wBACnC,CAAC;wBAEsB,qBAAM,cAAc,EAAA;;wBAArC,cAAc,GAAG,SAAoB;wBAE3C,IAAI,CAAC,cAAc,EAAE,CAAC;4BACpB,sBAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC;wBAC/B,CAAC;wBAED,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,iBAAU,cAAc,CAAE,CAAC;wBAClE,sBAAO,IAAA,oBAAY,EAAC,WAAW,CAAC,EAAC;4BAEnC,sBAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC;;;aAC9B,CACF,CAAC;QAEF,OAAO;YACL,oBAAY,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC1D,oBAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC9D,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEzC,OAAO,oBAAY,CAAC;AACtB,CAAC,CAAC;AAEF,kBAAe,eAAe,CAAC"}
|
|
@@ -8,6 +8,7 @@ var jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
8
8
|
var react_1 = require("react");
|
|
9
9
|
var hooks_1 = require("../store/hooks");
|
|
10
10
|
var authThunks_1 = require("../store/slices/authThunks");
|
|
11
|
+
var accountsSlice_1 = require("../store/slices/accountsSlice");
|
|
11
12
|
var replyke_context_1 = require("./replyke-context");
|
|
12
13
|
var useProjectData_1 = __importDefault(require("../hooks/projects/useProjectData"));
|
|
13
14
|
/**
|
|
@@ -17,9 +18,23 @@ var useProjectData_1 = __importDefault(require("../hooks/projects/useProjectData
|
|
|
17
18
|
var AuthInitializer = function (_a) {
|
|
18
19
|
var children = _a.children, projectId = _a.projectId, signedToken = _a.signedToken;
|
|
19
20
|
var dispatch = (0, hooks_1.useReplykeDispatch)();
|
|
21
|
+
var accountsReady = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectAccountsReady);
|
|
22
|
+
var accountManagerRegistered = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectAccountManagerRegistered);
|
|
23
|
+
var _b = (0, react_1.useState)(false), hasWaitedForManager = _b[0], setHasWaitedForManager = _b[1];
|
|
24
|
+
// Give AccountManager one microtask to register itself
|
|
20
25
|
(0, react_1.useEffect)(function () {
|
|
26
|
+
Promise.resolve().then(function () { return setHasWaitedForManager(true); });
|
|
27
|
+
}, []);
|
|
28
|
+
(0, react_1.useEffect)(function () {
|
|
29
|
+
// Still waiting for the microtask check
|
|
30
|
+
if (!hasWaitedForManager)
|
|
31
|
+
return;
|
|
32
|
+
// If an AccountManager registered, wait until it signals ready
|
|
33
|
+
if (accountManagerRegistered && !accountsReady)
|
|
34
|
+
return;
|
|
35
|
+
// Either: no AccountManager (core-only user) OR AccountManager is ready
|
|
21
36
|
dispatch((0, authThunks_1.initializeAuthThunk)({ projectId: projectId, signedToken: signedToken }));
|
|
22
|
-
}, [dispatch, projectId, signedToken]);
|
|
37
|
+
}, [dispatch, projectId, signedToken, hasWaitedForManager, accountManagerRegistered, accountsReady]);
|
|
23
38
|
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
|
|
24
39
|
};
|
|
25
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replyke-integration-context.js","sourceRoot":"","sources":["../../../src/context/replyke-integration-context.tsx"],"names":[],"mappings":";;;;;;;AAAA,+
|
|
1
|
+
{"version":3,"file":"replyke-integration-context.js","sourceRoot":"","sources":["../../../src/context/replyke-integration-context.tsx"],"names":[],"mappings":";;;;;;;AAAA,+BAAmD;AAEnD,wCAAwE;AACxE,yDAAiE;AACjE,+DAGuC;AACvC,qDAAmD;AACnD,oFAA8D;AAQ9D;;;GAGG;AACH,IAAM,eAAe,GAIhB,UAAC,EAAoC;QAAlC,QAAQ,cAAA,EAAE,SAAS,eAAA,EAAE,WAAW,iBAAA;IACtC,IAAM,QAAQ,GAAG,IAAA,0BAAkB,GAAE,CAAC;IACtC,IAAM,aAAa,GAAG,IAAA,0BAAkB,EAAC,mCAAmB,CAAC,CAAC;IAC9D,IAAM,wBAAwB,GAAG,IAAA,0BAAkB,EAAC,8CAA8B,CAAC,CAAC;IAC9E,IAAA,KAAgD,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAA9D,mBAAmB,QAAA,EAAE,sBAAsB,QAAmB,CAAC;IAEtE,uDAAuD;IACvD,IAAA,iBAAS,EAAC;QACR,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,cAAM,OAAA,sBAAsB,CAAC,IAAI,CAAC,EAA5B,CAA4B,CAAC,CAAC;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAA,iBAAS,EAAC;QACR,wCAAwC;QACxC,IAAI,CAAC,mBAAmB;YAAE,OAAO;QAEjC,+DAA+D;QAC/D,IAAI,wBAAwB,IAAI,CAAC,aAAa;YAAE,OAAO;QAEvD,wEAAwE;QACxE,QAAQ,CAAC,IAAA,gCAAmB,EAAC,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,aAAa,CAAC,CAAC,CAAC;IAErG,OAAO,2DAAG,QAAQ,GAAI,CAAC;AACzB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACI,IAAM,0BAA0B,GAA8C,UAAC,EAIrF;QAHC,QAAQ,cAAA,EACR,SAAS,eAAA,EACT,WAAW,iBAAA;IAEX,uDAAuD;IACvD,IAAM,IAAI,GAAG,IAAA,wBAAc,EAAC,EAAE,SAAS,WAAA,EAAE,CAAC,CAAC;IAE3C,mDAAmD;IACnD,OAAO,CACL,uBAAC,gCAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,YAClC,uBAAC,eAAe,IAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,YAC5D,QAAQ,GACO,GACM,CAC3B,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,0BAA0B,8BAgBrC;AAEF,kBAAe,kCAA0B,CAAC"}
|
|
@@ -7,6 +7,7 @@ var react_redux_1 = require("react-redux");
|
|
|
7
7
|
var store_1 = require("../store");
|
|
8
8
|
var hooks_1 = require("../store/hooks");
|
|
9
9
|
var authThunks_1 = require("../store/slices/authThunks");
|
|
10
|
+
var accountsSlice_1 = require("../store/slices/accountsSlice");
|
|
10
11
|
/**
|
|
11
12
|
* Component that initializes auth state in Redux
|
|
12
13
|
* Must be inside the Redux Provider to dispatch actions
|
|
@@ -14,13 +15,23 @@ var authThunks_1 = require("../store/slices/authThunks");
|
|
|
14
15
|
var AuthInitializer = function (_a) {
|
|
15
16
|
var children = _a.children, projectId = _a.projectId, signedToken = _a.signedToken;
|
|
16
17
|
var dispatch = (0, hooks_1.useReplykeDispatch)();
|
|
18
|
+
var accountsReady = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectAccountsReady);
|
|
19
|
+
var accountManagerRegistered = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectAccountManagerRegistered);
|
|
20
|
+
var _b = (0, react_1.useState)(false), hasWaitedForManager = _b[0], setHasWaitedForManager = _b[1];
|
|
21
|
+
// Give AccountManager one microtask to register itself
|
|
17
22
|
(0, react_1.useEffect)(function () {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
Promise.resolve().then(function () { return setHasWaitedForManager(true); });
|
|
24
|
+
}, []);
|
|
25
|
+
(0, react_1.useEffect)(function () {
|
|
26
|
+
// Still waiting for the microtask check
|
|
27
|
+
if (!hasWaitedForManager)
|
|
28
|
+
return;
|
|
29
|
+
// If an AccountManager registered, wait until it signals ready
|
|
30
|
+
if (accountManagerRegistered && !accountsReady)
|
|
31
|
+
return;
|
|
32
|
+
// Either: no AccountManager (core-only user) OR AccountManager is ready
|
|
33
|
+
dispatch((0, authThunks_1.initializeAuthThunk)({ projectId: projectId, signedToken: signedToken }));
|
|
34
|
+
}, [dispatch, projectId, signedToken, hasWaitedForManager, accountManagerRegistered, accountsReady]);
|
|
24
35
|
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
|
|
25
36
|
};
|
|
26
37
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replyke-store-context.js","sourceRoot":"","sources":["../../../src/context/replyke-store-context.tsx"],"names":[],"mappings":";;;;AAAA,+
|
|
1
|
+
{"version":3,"file":"replyke-store-context.js","sourceRoot":"","sources":["../../../src/context/replyke-store-context.tsx"],"names":[],"mappings":";;;;AAAA,+BAAmD;AACnD,2CAAuC;AACvC,kCAAwC;AAExC,wCAAwE;AACxE,yDAAiE;AACjE,+DAGuC;AAQvC;;;GAGG;AACH,IAAM,eAAe,GAIhB,UAAC,EAAoC;QAAlC,QAAQ,cAAA,EAAE,SAAS,eAAA,EAAE,WAAW,iBAAA;IACtC,IAAM,QAAQ,GAAG,IAAA,0BAAkB,GAAE,CAAC;IACtC,IAAM,aAAa,GAAG,IAAA,0BAAkB,EAAC,mCAAmB,CAAC,CAAC;IAC9D,IAAM,wBAAwB,GAAG,IAAA,0BAAkB,EAAC,8CAA8B,CAAC,CAAC;IAC9E,IAAA,KAAgD,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAA9D,mBAAmB,QAAA,EAAE,sBAAsB,QAAmB,CAAC;IAEtE,uDAAuD;IACvD,IAAA,iBAAS,EAAC;QACR,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,cAAM,OAAA,sBAAsB,CAAC,IAAI,CAAC,EAA5B,CAA4B,CAAC,CAAC;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAA,iBAAS,EAAC;QACR,wCAAwC;QACxC,IAAI,CAAC,mBAAmB;YAAE,OAAO;QAEjC,+DAA+D;QAC/D,IAAI,wBAAwB,IAAI,CAAC,aAAa;YAAE,OAAO;QAEvD,wEAAwE;QACxE,QAAQ,CAAC,IAAA,gCAAmB,EAAC,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,aAAa,CAAC,CAAC,CAAC;IAErG,OAAO,2DAAG,QAAQ,GAAI,CAAC;AACzB,CAAC,CAAC;AAEF;;;GAGG;AACI,IAAM,oBAAoB,GAAwC,UAAC,EAIzE;QAHC,QAAQ,cAAA,EACR,SAAS,eAAA,EACT,WAAW,iBAAA;IAEX,OAAO,CACL,uBAAC,sBAAQ,IAAC,KAAK,EAAE,oBAAY,YAC3B,uBAAC,eAAe,IAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,YAC5D,QAAQ,GACO,GACT,CACZ,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,oBAAoB,wBAY/B;AAEF,gCAAgC;AAChC,yCAAyC;AAEzC,kBAAe,4BAAoB,CAAC"}
|
|
@@ -1 +1,7 @@
|
|
|
1
1
|
export { default as useAuth, type UseAuthValues, type SignUpWithEmailAndPasswordProps, type SignInWithEmailAndPasswordProps, type ChangePasswordProps } from './useAuth';
|
|
2
|
+
export { default as useAccountSync } from './useAccountSync';
|
|
3
|
+
export { default as useAccounts, type UseAccountsReturn } from './useAccounts';
|
|
4
|
+
export { default as useSwitchAccount, type UseSwitchAccountReturn } from './useSwitchAccount';
|
|
5
|
+
export { default as useAddAccount, type UseAddAccountReturn } from './useAddAccount';
|
|
6
|
+
export { default as useRemoveAccount, type UseRemoveAccountReturn } from './useRemoveAccount';
|
|
7
|
+
export { default as useSignOutAll, type UseSignOutAllReturn } from './useSignOutAll';
|
|
@@ -3,7 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.useAuth = void 0;
|
|
6
|
+
exports.useSignOutAll = exports.useRemoveAccount = exports.useAddAccount = exports.useSwitchAccount = exports.useAccounts = exports.useAccountSync = exports.useAuth = void 0;
|
|
7
7
|
var useAuth_1 = require("./useAuth");
|
|
8
8
|
Object.defineProperty(exports, "useAuth", { enumerable: true, get: function () { return __importDefault(useAuth_1).default; } });
|
|
9
|
+
var useAccountSync_1 = require("./useAccountSync");
|
|
10
|
+
Object.defineProperty(exports, "useAccountSync", { enumerable: true, get: function () { return __importDefault(useAccountSync_1).default; } });
|
|
11
|
+
var useAccounts_1 = require("./useAccounts");
|
|
12
|
+
Object.defineProperty(exports, "useAccounts", { enumerable: true, get: function () { return __importDefault(useAccounts_1).default; } });
|
|
13
|
+
var useSwitchAccount_1 = require("./useSwitchAccount");
|
|
14
|
+
Object.defineProperty(exports, "useSwitchAccount", { enumerable: true, get: function () { return __importDefault(useSwitchAccount_1).default; } });
|
|
15
|
+
var useAddAccount_1 = require("./useAddAccount");
|
|
16
|
+
Object.defineProperty(exports, "useAddAccount", { enumerable: true, get: function () { return __importDefault(useAddAccount_1).default; } });
|
|
17
|
+
var useRemoveAccount_1 = require("./useRemoveAccount");
|
|
18
|
+
Object.defineProperty(exports, "useRemoveAccount", { enumerable: true, get: function () { return __importDefault(useRemoveAccount_1).default; } });
|
|
19
|
+
var useSignOutAll_1 = require("./useSignOutAll");
|
|
20
|
+
Object.defineProperty(exports, "useSignOutAll", { enumerable: true, get: function () { return __importDefault(useSignOutAll_1).default; } });
|
|
9
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/auth/index.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAyK;AAAhK,mHAAA,OAAO,OAAW"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/auth/index.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAyK;AAAhK,mHAAA,OAAO,OAAW;AAC3B,mDAA6D;AAApD,iIAAA,OAAO,OAAkB;AAClC,6CAA+E;AAAtE,2HAAA,OAAO,OAAe;AAC/B,uDAA8F;AAArF,qIAAA,OAAO,OAAoB;AACpC,iDAAqF;AAA5E,+HAAA,OAAO,OAAiB;AACjC,uDAA8F;AAArF,qIAAA,OAAO,OAAoB;AACpC,iDAAqF;AAA5E,+HAAA,OAAO,OAAiB"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.default = useAccountSync;
|
|
40
|
+
var react_1 = require("react");
|
|
41
|
+
var hooks_1 = require("../../store/hooks");
|
|
42
|
+
var accountsSlice_1 = require("../../store/slices/accountsSlice");
|
|
43
|
+
var authSlice_1 = require("../../store/slices/authSlice");
|
|
44
|
+
var userSlice_1 = require("../../store/slices/userSlice");
|
|
45
|
+
var handleError_1 = require("../../utils/handleError");
|
|
46
|
+
function base64UrlDecode(str) {
|
|
47
|
+
// Convert base64url to standard base64
|
|
48
|
+
var base64 = str.replace(/-/g, "+").replace(/_/g, "/");
|
|
49
|
+
if (typeof atob === "function")
|
|
50
|
+
return atob(base64);
|
|
51
|
+
// Fallback for React Native (Buffer available via Node.js polyfill or hermes)
|
|
52
|
+
if (typeof Buffer === "function")
|
|
53
|
+
return Buffer.from(base64, "base64").toString("utf-8");
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
function extractExpFromJwt(jwt) {
|
|
57
|
+
var _a;
|
|
58
|
+
try {
|
|
59
|
+
var payload = JSON.parse(base64UrlDecode(jwt.split(".")[1]));
|
|
60
|
+
return ((_a = payload.exp) !== null && _a !== void 0 ? _a : 0) * 1000;
|
|
61
|
+
}
|
|
62
|
+
catch (_b) {
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function useAccountSync(storage, projectId) {
|
|
67
|
+
var _this = this;
|
|
68
|
+
var dispatch = (0, hooks_1.useReplykeDispatch)();
|
|
69
|
+
var refreshToken = (0, hooks_1.useReplykeSelector)(authSlice_1.selectRefreshToken);
|
|
70
|
+
var user = (0, hooks_1.useReplykeSelector)(userSlice_1.selectUser); // from userSlice (canonical)
|
|
71
|
+
var accounts = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectAccounts);
|
|
72
|
+
var activeAccountId = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectActiveAccountId);
|
|
73
|
+
var isReady = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectAccountsReady);
|
|
74
|
+
var isInitialLoadRef = (0, react_1.useRef)(true);
|
|
75
|
+
// Phase A: Mount — register + load from storage
|
|
76
|
+
(0, react_1.useEffect)(function () {
|
|
77
|
+
dispatch((0, accountsSlice_1.registerAccountManager)());
|
|
78
|
+
var loadAccounts = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
79
|
+
var map, error_1;
|
|
80
|
+
return __generator(this, function (_a) {
|
|
81
|
+
switch (_a.label) {
|
|
82
|
+
case 0:
|
|
83
|
+
_a.trys.push([0, 2, 3, 4]);
|
|
84
|
+
return [4 /*yield*/, storage.getAccountMap(projectId)];
|
|
85
|
+
case 1:
|
|
86
|
+
map = _a.sent();
|
|
87
|
+
if (map) {
|
|
88
|
+
dispatch((0, accountsSlice_1.setAccountMap)(map));
|
|
89
|
+
if (map.activeAccountId && map.accounts[map.activeAccountId]) {
|
|
90
|
+
dispatch((0, authSlice_1.setRefreshToken)(map.accounts[map.activeAccountId].refreshToken));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return [3 /*break*/, 4];
|
|
94
|
+
case 2:
|
|
95
|
+
error_1 = _a.sent();
|
|
96
|
+
(0, handleError_1.handleError)(error_1, "Failed to load account map from storage");
|
|
97
|
+
return [3 /*break*/, 4];
|
|
98
|
+
case 3:
|
|
99
|
+
dispatch((0, accountsSlice_1.setAccountsReady)(true));
|
|
100
|
+
return [7 /*endfinally*/];
|
|
101
|
+
case 4: return [2 /*return*/];
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}); };
|
|
105
|
+
loadAccounts();
|
|
106
|
+
}, []); // projectId is stable for lifetime of ReplykeProvider
|
|
107
|
+
// Phase B: Watch refreshToken + user — upsert account entries
|
|
108
|
+
(0, react_1.useEffect)(function () {
|
|
109
|
+
var _a, _b, _c;
|
|
110
|
+
if (!isReady || !refreshToken || !(user === null || user === void 0 ? void 0 : user.id))
|
|
111
|
+
return;
|
|
112
|
+
var summary = {
|
|
113
|
+
id: user.id,
|
|
114
|
+
name: (_a = user.name) !== null && _a !== void 0 ? _a : null,
|
|
115
|
+
email: (_b = user.email) !== null && _b !== void 0 ? _b : null,
|
|
116
|
+
avatar: (_c = user.avatar) !== null && _c !== void 0 ? _c : null,
|
|
117
|
+
};
|
|
118
|
+
var entry = {
|
|
119
|
+
refreshToken: refreshToken,
|
|
120
|
+
tokenExpiresAt: extractExpFromJwt(refreshToken),
|
|
121
|
+
user: summary,
|
|
122
|
+
};
|
|
123
|
+
dispatch((0, accountsSlice_1.upsertAccount)({ userId: user.id, entry: entry }));
|
|
124
|
+
if (user.id !== activeAccountId) {
|
|
125
|
+
dispatch((0, accountsSlice_1.setActiveAccount)(user.id));
|
|
126
|
+
}
|
|
127
|
+
}, [refreshToken, user, isReady]);
|
|
128
|
+
// Phase C: Persist map on changes
|
|
129
|
+
(0, react_1.useEffect)(function () {
|
|
130
|
+
if (!isReady)
|
|
131
|
+
return;
|
|
132
|
+
// Skip persisting the initial load (that data came FROM storage)
|
|
133
|
+
if (isInitialLoadRef.current) {
|
|
134
|
+
isInitialLoadRef.current = false;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
var map = { activeAccountId: activeAccountId, accounts: accounts };
|
|
138
|
+
storage.setAccountMap(projectId, map).catch(function (error) {
|
|
139
|
+
(0, handleError_1.handleError)(error, "Failed to persist account map");
|
|
140
|
+
});
|
|
141
|
+
}, [accounts, activeAccountId, isReady]);
|
|
142
|
+
// Phase D: Cross-tab sync (web only)
|
|
143
|
+
(0, react_1.useEffect)(function () {
|
|
144
|
+
if (typeof window === "undefined")
|
|
145
|
+
return;
|
|
146
|
+
var storageKey = "replyke-accounts:".concat(projectId);
|
|
147
|
+
var handleStorageEvent = function (event) {
|
|
148
|
+
if (event.key !== storageKey || !event.newValue)
|
|
149
|
+
return;
|
|
150
|
+
try {
|
|
151
|
+
var map = JSON.parse(event.newValue);
|
|
152
|
+
dispatch((0, accountsSlice_1.setAccountMap)(map));
|
|
153
|
+
if (map.activeAccountId && map.accounts[map.activeAccountId]) {
|
|
154
|
+
dispatch((0, authSlice_1.setRefreshToken)(map.accounts[map.activeAccountId].refreshToken));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
(0, handleError_1.handleError)(error, "Failed to sync account map from storage event");
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
window.addEventListener("storage", handleStorageEvent);
|
|
162
|
+
return function () { return window.removeEventListener("storage", handleStorageEvent); };
|
|
163
|
+
}, [projectId, dispatch]);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=useAccountSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAccountSync.js","sourceRoot":"","sources":["../../../../src/hooks/auth/useAccountSync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type AccountSummary } from "../../store/slices/accountsSlice";
|
|
2
|
+
export interface UseAccountsReturn {
|
|
3
|
+
accounts: AccountSummary[];
|
|
4
|
+
activeAccount: AccountSummary | null;
|
|
5
|
+
accountCount: number;
|
|
6
|
+
}
|
|
7
|
+
export default function useAccounts(): UseAccountsReturn;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = useAccounts;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var hooks_1 = require("../../store/hooks");
|
|
6
|
+
var accountsSlice_1 = require("../../store/slices/accountsSlice");
|
|
7
|
+
function useAccounts() {
|
|
8
|
+
var accountsMap = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectAccounts);
|
|
9
|
+
var activeAccountId = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectActiveAccountId);
|
|
10
|
+
return (0, react_1.useMemo)(function () {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
var accountSummaries = Object.values(accountsMap).map(function (entry) { return entry.user; });
|
|
13
|
+
var activeAccount = activeAccountId
|
|
14
|
+
? (_b = (_a = accountsMap[activeAccountId]) === null || _a === void 0 ? void 0 : _a.user) !== null && _b !== void 0 ? _b : null
|
|
15
|
+
: null;
|
|
16
|
+
return {
|
|
17
|
+
accounts: accountSummaries,
|
|
18
|
+
activeAccount: activeAccount,
|
|
19
|
+
accountCount: accountSummaries.length,
|
|
20
|
+
};
|
|
21
|
+
}, [accountsMap, activeAccountId]);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=useAccounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAccounts.js","sourceRoot":"","sources":["../../../../src/hooks/auth/useAccounts.ts"],"names":[],"mappings":";;AAcA,8BAkBC;AAhCD,+BAAgC;AAChC,2CAAuD;AACvD,kEAI0C;AAQ1C,SAAwB,WAAW;IACjC,IAAM,WAAW,GAAG,IAAA,0BAAkB,EAAC,8BAAc,CAAC,CAAC;IACvD,IAAM,eAAe,GAAG,IAAA,0BAAkB,EAAC,qCAAqB,CAAC,CAAC;IAElE,OAAO,IAAA,eAAO,EAAC;;QACb,IAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CACrD,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,IAAI,EAAV,CAAU,CACtB,CAAC;QACF,IAAM,aAAa,GAAG,eAAe;YACnC,CAAC,CAAC,MAAA,MAAA,WAAW,CAAC,eAAe,CAAC,0CAAE,IAAI,mCAAI,IAAI;YAC5C,CAAC,CAAC,IAAI,CAAC;QAET,OAAO;YACL,QAAQ,EAAE,gBAAgB;YAC1B,aAAa,eAAA;YACb,YAAY,EAAE,gBAAgB,CAAC,MAAM;SACtC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = useAddAccount;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var hooks_1 = require("../../store/hooks");
|
|
6
|
+
var authSlice_1 = require("../../store/slices/authSlice");
|
|
7
|
+
var userSlice_1 = require("../../store/slices/userSlice");
|
|
8
|
+
var accountsSlice_1 = require("../../store/slices/accountsSlice");
|
|
9
|
+
var baseApi_1 = require("../../store/api/baseApi");
|
|
10
|
+
function useAddAccount() {
|
|
11
|
+
var dispatch = (0, hooks_1.useReplykeDispatch)();
|
|
12
|
+
var accounts = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectAccounts);
|
|
13
|
+
var canAddAccount = Object.keys(accounts).length < accountsSlice_1.MAX_ACCOUNTS;
|
|
14
|
+
var addAccount = (0, react_1.useCallback)(function () {
|
|
15
|
+
if (!canAddAccount)
|
|
16
|
+
return;
|
|
17
|
+
// Clear active auth state so the sign-in UI appears.
|
|
18
|
+
// Existing accounts remain safely in the accounts map.
|
|
19
|
+
// After the user signs in, useAccountSync auto-upserts the new account.
|
|
20
|
+
dispatch((0, authSlice_1.resetAuth)());
|
|
21
|
+
dispatch((0, userSlice_1.clearUser)());
|
|
22
|
+
dispatch((0, accountsSlice_1.setActiveAccount)(null));
|
|
23
|
+
dispatch(baseApi_1.baseApi.util.resetApiState());
|
|
24
|
+
}, [dispatch, canAddAccount]);
|
|
25
|
+
return { addAccount: addAccount, canAddAccount: canAddAccount };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=useAddAccount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAddAccount.js","sourceRoot":"","sources":["../../../../src/hooks/auth/useAddAccount.ts"],"names":[],"mappings":";;AAgBA,gCAkBC;AAlCD,+BAAoC;AACpC,2CAA2E;AAC3E,0DAAyD;AACzD,0DAAyD;AACzD,kEAI0C;AAC1C,mDAAkD;AAOlD,SAAwB,aAAa;IACnC,IAAM,QAAQ,GAAG,IAAA,0BAAkB,GAAE,CAAC;IACtC,IAAM,QAAQ,GAAG,IAAA,0BAAkB,EAAC,8BAAc,CAAC,CAAC;IACpD,IAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,4BAAY,CAAC;IAElE,IAAM,UAAU,GAAG,IAAA,mBAAW,EAAC;QAC7B,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3B,qDAAqD;QACrD,uDAAuD;QACvD,wEAAwE;QACxE,QAAQ,CAAC,IAAA,qBAAS,GAAE,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAA,qBAAS,GAAE,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAA,gCAAgB,EAAC,IAAI,CAAC,CAAC,CAAC;QACjC,QAAQ,CAAC,iBAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9B,OAAO,EAAE,UAAU,YAAA,EAAE,aAAa,eAAA,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -34,6 +34,6 @@ export interface UseAuthValues {
|
|
|
34
34
|
signInWithEmailAndPassword: (props: SignInWithEmailAndPasswordProps) => Promise<void>;
|
|
35
35
|
signOut: () => Promise<void>;
|
|
36
36
|
changePassword: (props: ChangePasswordProps) => Promise<void>;
|
|
37
|
-
requestNewAccessToken: () => Promise<
|
|
37
|
+
requestNewAccessToken: () => Promise<string | undefined>;
|
|
38
38
|
}
|
|
39
39
|
export default function useAuth(): UseAuthValues;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.default = useRemoveAccount;
|
|
43
|
+
var react_1 = require("react");
|
|
44
|
+
var hooks_1 = require("../../store/hooks");
|
|
45
|
+
var accountsSlice_1 = require("../../store/slices/accountsSlice");
|
|
46
|
+
var authSlice_1 = require("../../store/slices/authSlice");
|
|
47
|
+
var userSlice_1 = require("../../store/slices/userSlice");
|
|
48
|
+
var authThunks_1 = require("../../store/slices/authThunks");
|
|
49
|
+
var baseApi_1 = require("../../store/api/baseApi");
|
|
50
|
+
var useProject_1 = __importDefault(require("../projects/useProject"));
|
|
51
|
+
var axios_1 = __importDefault(require("../../config/axios"));
|
|
52
|
+
var handleError_1 = require("../../utils/handleError");
|
|
53
|
+
function useRemoveAccount() {
|
|
54
|
+
var _this = this;
|
|
55
|
+
var dispatch = (0, hooks_1.useReplykeDispatch)();
|
|
56
|
+
var projectId = (0, useProject_1.default)().projectId;
|
|
57
|
+
var accounts = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectAccounts);
|
|
58
|
+
var activeAccountId = (0, hooks_1.useReplykeSelector)(accountsSlice_1.selectActiveAccountId);
|
|
59
|
+
var _a = (0, react_1.useState)(false), isRemoving = _a[0], setIsRemoving = _a[1];
|
|
60
|
+
var _b = (0, react_1.useState)(null), error = _b[0], setError = _b[1];
|
|
61
|
+
var removeAccount = (0, react_1.useCallback)(function (userId) { return __awaiter(_this, void 0, void 0, function () {
|
|
62
|
+
var targetAccount, isActiveAccount, signOutError_1, remainingIds, nextId, nextAccount, err_1;
|
|
63
|
+
return __generator(this, function (_a) {
|
|
64
|
+
switch (_a.label) {
|
|
65
|
+
case 0:
|
|
66
|
+
if (!projectId)
|
|
67
|
+
throw new Error("No projectId available");
|
|
68
|
+
targetAccount = accounts[userId];
|
|
69
|
+
if (!targetAccount)
|
|
70
|
+
throw new Error("Account ".concat(userId, " not found"));
|
|
71
|
+
setIsRemoving(true);
|
|
72
|
+
setError(null);
|
|
73
|
+
isActiveAccount = userId === activeAccountId;
|
|
74
|
+
_a.label = 1;
|
|
75
|
+
case 1:
|
|
76
|
+
_a.trys.push([1, 9, 10, 11]);
|
|
77
|
+
_a.label = 2;
|
|
78
|
+
case 2:
|
|
79
|
+
_a.trys.push([2, 4, , 5]);
|
|
80
|
+
return [4 /*yield*/, axios_1.default.post("/".concat(projectId, "/auth/sign-out"), { refreshToken: targetAccount.refreshToken })];
|
|
81
|
+
case 3:
|
|
82
|
+
_a.sent();
|
|
83
|
+
return [3 /*break*/, 5];
|
|
84
|
+
case 4:
|
|
85
|
+
signOutError_1 = _a.sent();
|
|
86
|
+
(0, handleError_1.handleError)(signOutError_1, "Server sign-out failed during account removal");
|
|
87
|
+
return [3 /*break*/, 5];
|
|
88
|
+
case 5:
|
|
89
|
+
// Remove from accounts map
|
|
90
|
+
dispatch((0, accountsSlice_1.removeAccount)(userId));
|
|
91
|
+
if (!isActiveAccount) return [3 /*break*/, 8];
|
|
92
|
+
remainingIds = Object.keys(accounts).filter(function (id) { return id !== userId; });
|
|
93
|
+
if (!(remainingIds.length > 0)) return [3 /*break*/, 7];
|
|
94
|
+
nextId = remainingIds[0];
|
|
95
|
+
nextAccount = accounts[nextId];
|
|
96
|
+
dispatch((0, authSlice_1.resetAuth)());
|
|
97
|
+
dispatch((0, userSlice_1.clearUser)());
|
|
98
|
+
dispatch(baseApi_1.baseApi.util.resetApiState());
|
|
99
|
+
dispatch((0, authSlice_1.setTokens)({
|
|
100
|
+
accessToken: null,
|
|
101
|
+
refreshToken: nextAccount.refreshToken,
|
|
102
|
+
}));
|
|
103
|
+
dispatch((0, authSlice_1.setInitialized)(false));
|
|
104
|
+
return [4 /*yield*/, dispatch((0, authThunks_1.requestNewAccessTokenThunk)({ projectId: projectId }))];
|
|
105
|
+
case 6:
|
|
106
|
+
_a.sent();
|
|
107
|
+
dispatch((0, authSlice_1.setInitialized)(true));
|
|
108
|
+
return [3 /*break*/, 8];
|
|
109
|
+
case 7:
|
|
110
|
+
dispatch((0, authSlice_1.resetAuth)());
|
|
111
|
+
dispatch((0, userSlice_1.clearUser)());
|
|
112
|
+
dispatch(baseApi_1.baseApi.util.resetApiState());
|
|
113
|
+
_a.label = 8;
|
|
114
|
+
case 8: return [3 /*break*/, 11];
|
|
115
|
+
case 9:
|
|
116
|
+
err_1 = _a.sent();
|
|
117
|
+
setError(err_1 instanceof Error ? err_1.message : "Failed to remove account");
|
|
118
|
+
return [3 /*break*/, 11];
|
|
119
|
+
case 10:
|
|
120
|
+
setIsRemoving(false);
|
|
121
|
+
return [7 /*endfinally*/];
|
|
122
|
+
case 11: return [2 /*return*/];
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}); }, [dispatch, projectId, accounts, activeAccountId]);
|
|
126
|
+
return { removeAccount: removeAccount, isRemoving: isRemoving, error: error };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=useRemoveAccount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRemoveAccount.js","sourceRoot":"","sources":["../../../../src/hooks/auth/useRemoveAccount.ts"],"names":[],"mappings":"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"}
|