@replyke/core 5.1.5-beta.2 → 5.1.5-beta.3
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/context/replyke-store-context.js +23 -1
- package/dist/cjs/context/replyke-store-context.js.map +1 -1
- package/dist/cjs/store/api/baseApi.js +12 -4
- package/dist/cjs/store/api/baseApi.js.map +1 -1
- package/dist/cjs/store/index.d.ts +2 -0
- package/dist/cjs/store/middleware.js +6 -8
- package/dist/cjs/store/middleware.js.map +1 -1
- package/dist/cjs/store/rootReducer.d.ts +2 -0
- package/dist/cjs/store/rootReducer.js +5 -0
- package/dist/cjs/store/rootReducer.js.map +1 -1
- package/dist/cjs/store/slices/authSlice.d.ts +13 -0
- package/dist/cjs/store/slices/authSlice.js +33 -0
- package/dist/cjs/store/slices/authSlice.js.map +1 -0
- package/dist/esm/context/replyke-store-context.js +21 -2
- package/dist/esm/context/replyke-store-context.js.map +1 -1
- package/dist/esm/store/api/baseApi.js +12 -4
- package/dist/esm/store/api/baseApi.js.map +1 -1
- package/dist/esm/store/index.d.ts +2 -0
- package/dist/esm/store/middleware.js +6 -8
- package/dist/esm/store/middleware.js.map +1 -1
- package/dist/esm/store/rootReducer.d.ts +2 -0
- package/dist/esm/store/rootReducer.js +2 -0
- package/dist/esm/store/rootReducer.js.map +1 -1
- package/dist/esm/store/slices/authSlice.d.ts +13 -0
- package/dist/esm/store/slices/authSlice.js +28 -0
- package/dist/esm/store/slices/authSlice.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,9 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.ReplykeStoreProvider = void 0;
|
|
4
7
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
var react_1 = require("react");
|
|
5
9
|
var react_redux_1 = require("react-redux");
|
|
6
10
|
var store_1 = require("../store");
|
|
11
|
+
var useAuth_1 = __importDefault(require("../hooks/auth/useAuth"));
|
|
12
|
+
var authSlice_1 = require("../store/slices/authSlice");
|
|
13
|
+
/**
|
|
14
|
+
* Component that syncs auth state from React context to Redux store
|
|
15
|
+
* Must be inside the Redux Provider to dispatch actions
|
|
16
|
+
*/
|
|
17
|
+
var AuthStateSyncer = function (_a) {
|
|
18
|
+
var children = _a.children;
|
|
19
|
+
var _b = (0, useAuth_1.default)(), accessToken = _b.accessToken, refreshToken = _b.refreshToken;
|
|
20
|
+
(0, react_1.useEffect)(function () {
|
|
21
|
+
// Sync auth tokens from React context to Redux state
|
|
22
|
+
store_1.replykeStore.dispatch((0, authSlice_1.setTokens)({
|
|
23
|
+
accessToken: accessToken || null,
|
|
24
|
+
refreshToken: refreshToken || null
|
|
25
|
+
}));
|
|
26
|
+
}, [accessToken, refreshToken]);
|
|
27
|
+
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
|
|
28
|
+
};
|
|
7
29
|
/**
|
|
8
30
|
* Redux store provider for Replyke
|
|
9
31
|
* This component provides the Redux store to all child components
|
|
@@ -11,7 +33,7 @@ var store_1 = require("../store");
|
|
|
11
33
|
*/
|
|
12
34
|
var ReplykeStoreProvider = function (_a) {
|
|
13
35
|
var children = _a.children;
|
|
14
|
-
return ((0, jsx_runtime_1.jsx)(react_redux_1.Provider, { store: store_1.replykeStore, children: children }));
|
|
36
|
+
return ((0, jsx_runtime_1.jsx)(react_redux_1.Provider, { store: store_1.replykeStore, children: (0, jsx_runtime_1.jsx)(AuthStateSyncer, { children: children }) }));
|
|
15
37
|
};
|
|
16
38
|
exports.ReplykeStoreProvider = ReplykeStoreProvider;
|
|
17
39
|
// ReplykeProviderWithRedux has been deprecated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replyke-store-context.js","sourceRoot":"","sources":["../../../src/context/replyke-store-context.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replyke-store-context.js","sourceRoot":"","sources":["../../../src/context/replyke-store-context.tsx"],"names":[],"mappings":";;;;;;;AAAA,+BAAyC;AACzC,2CAAuC;AACvC,kCAAwC;AAExC,kEAA4C;AAC5C,uDAAsD;AAMtD;;;GAGG;AACH,IAAM,eAAe,GAAsC,UAAC,EAAY;QAAV,QAAQ,cAAA;IAC9D,IAAA,KAAgC,IAAA,iBAAO,GAAE,EAAvC,WAAW,iBAAA,EAAE,YAAY,kBAAc,CAAC;IAEhD,IAAA,iBAAS,EAAC;QACR,qDAAqD;QACrD,oBAAY,CAAC,QAAQ,CAAC,IAAA,qBAAS,EAAC;YAC9B,WAAW,EAAE,WAAW,IAAI,IAAI;YAChC,YAAY,EAAE,YAAY,IAAI,IAAI;SACnC,CAAC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEhC,OAAO,2DAAG,QAAQ,GAAI,CAAC;AACzB,CAAC,CAAC;AAEF;;;;GAIG;AACI,IAAM,oBAAoB,GAAwC,UAAC,EAEzE;QADC,QAAQ,cAAA;IAER,OAAO,CACL,uBAAC,sBAAQ,IAAC,KAAK,EAAE,oBAAY,YAC3B,uBAAC,eAAe,cACb,QAAQ,GACO,GACT,CACZ,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,oBAAoB,wBAU/B;AAEF,+CAA+C;AAC/C,sDAAsD;AAEtD,kBAAe,4BAAoB,CAAC"}
|
|
@@ -6,11 +6,19 @@ var react_1 = require("@reduxjs/toolkit/query/react");
|
|
|
6
6
|
// Base query that uses the current project context and auth
|
|
7
7
|
var createBaseQuery = function () {
|
|
8
8
|
return (0, react_1.fetchBaseQuery)({
|
|
9
|
-
baseUrl: process.env.REACT_APP_API_BASE_URL || 'https://api.replyke.com',
|
|
9
|
+
baseUrl: process.env.REACT_APP_API_BASE_URL || 'https://api.replyke.com/api/v5',
|
|
10
10
|
credentials: 'include', // Equivalent to withCredentials: true
|
|
11
|
-
prepareHeaders: function (headers) {
|
|
12
|
-
|
|
13
|
-
//
|
|
11
|
+
prepareHeaders: function (headers, _a) {
|
|
12
|
+
var getState = _a.getState;
|
|
13
|
+
// Add Content-Type header
|
|
14
|
+
headers.set('Content-Type', 'application/json');
|
|
15
|
+
// Get access token from Redux state
|
|
16
|
+
var state = getState();
|
|
17
|
+
var accessToken = state.auth.accessToken;
|
|
18
|
+
// Add Authorization header if we have a token
|
|
19
|
+
if (accessToken) {
|
|
20
|
+
headers.set('Authorization', "Bearer ".concat(accessToken));
|
|
21
|
+
}
|
|
14
22
|
return headers;
|
|
15
23
|
},
|
|
16
24
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseApi.js","sourceRoot":"","sources":["../../../../src/store/api/baseApi.ts"],"names":[],"mappings":";;;;AAAA,sDAAyE;
|
|
1
|
+
{"version":3,"file":"baseApi.js","sourceRoot":"","sources":["../../../../src/store/api/baseApi.ts"],"names":[],"mappings":";;;;AAAA,sDAAyE;AAGzE,4DAA4D;AAC5D,IAAM,eAAe,GAAG;IACtB,OAAO,IAAA,sBAAc,EAAC;QACpB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,gCAAgC;QAC/E,WAAW,EAAE,SAAS,EAAE,sCAAsC;QAC9D,cAAc,EAAE,UAAC,OAAO,EAAE,EAAY;gBAAV,QAAQ,cAAA;YAClC,0BAA0B;YAC1B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAEhD,oCAAoC;YACpC,IAAM,KAAK,GAAG,QAAQ,EAAe,CAAC;YACtC,IAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;YAE3C,8CAA8C;YAC9C,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAU,WAAW,CAAE,CAAC,CAAC;YACxD,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,4BAA4B;AACf,QAAA,OAAO,GAAG,IAAA,iBAAS,EAAC;IAC/B,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,eAAe,EAAE;IAC5B,QAAQ,EAAE;QACR,iBAAiB;QACjB,oBAAoB;QACpB,YAAY;QACZ,cAAc;QACd,UAAU;QACV,UAAU;KACX;IACD,SAAS,EAAE,cAAM,OAAA,CAAC,EAAE,CAAC,EAAJ,CAAI,EAAE,6CAA6C;CACrE,CAAC,CAAC;AAEH,+EAA+E;AAC/E,aAAa,KAAK,eAAO,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export declare const store: import("@reduxjs/toolkit").EnhancedStore<{
|
|
2
2
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "AppNotification", "api">;
|
|
3
|
+
auth: import("./slices/authSlice").AuthState;
|
|
3
4
|
appNotifications: import("./slices").AppNotificationsState;
|
|
4
5
|
}, import("@reduxjs/toolkit").UnknownAction, import("@reduxjs/toolkit").Tuple<[import("@reduxjs/toolkit").StoreEnhancer<{
|
|
5
6
|
dispatch: import("@reduxjs/toolkit").ThunkDispatch<{
|
|
6
7
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "AppNotification", "api">;
|
|
8
|
+
auth: import("./slices/authSlice").AuthState;
|
|
7
9
|
appNotifications: import("./slices").AppNotificationsState;
|
|
8
10
|
}, undefined, import("@reduxjs/toolkit").UnknownAction>;
|
|
9
11
|
}>, import("@reduxjs/toolkit").StoreEnhancer]>>;
|
|
@@ -22,16 +22,14 @@ var errorMiddleware = function (store) { return function (next) { return functio
|
|
|
22
22
|
}
|
|
23
23
|
}; }; };
|
|
24
24
|
exports.errorMiddleware = errorMiddleware;
|
|
25
|
-
//
|
|
25
|
+
// Selective logger middleware for development - only logs important actions
|
|
26
26
|
var loggerMiddleware = function (store) { return function (next) { return function (action) {
|
|
27
|
-
if (process.env.NODE_ENV === 'development') {
|
|
28
|
-
console.group("\uD83D\uDD04 Redux Action: ".concat(action.type));
|
|
29
|
-
console.log('Previous State:', store.getState());
|
|
30
|
-
console.log('Action:', action);
|
|
31
|
-
}
|
|
32
27
|
var result = next(action);
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
// Only log failed API calls and errors in development
|
|
29
|
+
if (process.env.NODE_ENV === 'development' && action.type.includes('/rejected')) {
|
|
30
|
+
console.group("\u274C Redux Action Failed: ".concat(action.type));
|
|
31
|
+
console.log('Error:', action.payload);
|
|
32
|
+
console.log('Action:', action);
|
|
35
33
|
console.groupEnd();
|
|
36
34
|
}
|
|
37
35
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/store/middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oDAAmD;AAEnD,8CAA8C;AACvC,IAAM,eAAe,GAAe,UAAC,KAAK,IAAK,OAAA,UAAC,IAAI,IAAK,OAAA,UAAC,MAAW;IAC1E,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,yBAAW,EAAC,KAAK,EAAE,+BAAwB,MAAM,CAAC,IAAI,CAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,EAP+D,CAO/D,EAPqD,CAOrD,CAAC;AAPW,QAAA,eAAe,mBAO1B;AAEF,
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/store/middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oDAAmD;AAEnD,8CAA8C;AACvC,IAAM,eAAe,GAAe,UAAC,KAAK,IAAK,OAAA,UAAC,IAAI,IAAK,OAAA,UAAC,MAAW;IAC1E,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,yBAAW,EAAC,KAAK,EAAE,+BAAwB,MAAM,CAAC,IAAI,CAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,EAP+D,CAO/D,EAPqD,CAOrD,CAAC;AAPW,QAAA,eAAe,mBAO1B;AAEF,4EAA4E;AACrE,IAAM,gBAAgB,GAAe,UAAC,KAAK,IAAK,OAAA,UAAC,IAAI,IAAK,OAAA,UAAC,MAAW;IAC3E,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAE5B,sDAAsD;IACtD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAChF,OAAO,CAAC,KAAK,CAAC,sCAA0B,MAAM,CAAC,IAAI,CAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,EAZgE,CAYhE,EAZsD,CAYtD,CAAC;AAZW,QAAA,gBAAgB,oBAY3B;AAEF,gCAAgC;AACnB,QAAA,gBAAgB;IAC3B,uBAAe;GACZ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,wBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QACrE"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export declare const rootReducer: import("@reduxjs/toolkit").Reducer<{
|
|
2
2
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "AppNotification", "api">;
|
|
3
|
+
auth: import("./slices/authSlice").AuthState;
|
|
3
4
|
appNotifications: import("./slices/appNotificationsSlice").AppNotificationsState;
|
|
4
5
|
}, import("@reduxjs/toolkit").UnknownAction, Partial<{
|
|
5
6
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "AppNotification", "api"> | undefined;
|
|
7
|
+
auth: import("./slices/authSlice").AuthState | undefined;
|
|
6
8
|
appNotifications: import("./slices/appNotificationsSlice").AppNotificationsState | undefined;
|
|
7
9
|
}>>;
|
|
8
10
|
export type RootState = ReturnType<typeof rootReducer>;
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
var _a;
|
|
3
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
7
|
exports.rootReducer = void 0;
|
|
5
8
|
var toolkit_1 = require("@reduxjs/toolkit");
|
|
6
9
|
var baseApi_1 = require("./api/baseApi");
|
|
7
10
|
var appNotificationsSlice_1 = require("./slices/appNotificationsSlice");
|
|
11
|
+
var authSlice_1 = __importDefault(require("./slices/authSlice"));
|
|
8
12
|
// Combine all reducers
|
|
9
13
|
exports.rootReducer = (0, toolkit_1.combineReducers)((_a = {},
|
|
10
14
|
// API slice reducer (manages RTK Query cache)
|
|
11
15
|
_a[baseApi_1.baseApi.reducerPath] = baseApi_1.baseApi.reducer,
|
|
12
16
|
// Feature slices
|
|
17
|
+
_a.auth = authSlice_1.default,
|
|
13
18
|
_a.appNotifications = appNotificationsSlice_1.appNotificationsSlice.reducer,
|
|
14
19
|
_a));
|
|
15
20
|
//# sourceMappingURL=rootReducer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rootReducer.js","sourceRoot":"","sources":["../../../src/store/rootReducer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rootReducer.js","sourceRoot":"","sources":["../../../src/store/rootReducer.ts"],"names":[],"mappings":";;;;;;;AAAA,4CAAmD;AACnD,yCAAwC;AACxC,wEAAuE;AACvE,iEAA6C;AAE7C,uBAAuB;AACV,QAAA,WAAW,GAAG,IAAA,yBAAe;IACxC,8CAA8C;IAC9C,GAAC,iBAAO,CAAC,WAAW,IAAG,iBAAO,CAAC,OAAO;IAEtC,iBAAiB;IACjB,OAAI,GAAE,mBAAW;IACjB,mBAAgB,GAAE,6CAAqB,CAAC,OAAO;QAM/C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RootState } from '../index';
|
|
2
|
+
export interface AuthState {
|
|
3
|
+
accessToken: string | null;
|
|
4
|
+
refreshToken: string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare const setTokens: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
7
|
+
accessToken: string | null;
|
|
8
|
+
refreshToken?: string | null;
|
|
9
|
+
}, "auth/setTokens">, clearTokens: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"auth/clearTokens">;
|
|
10
|
+
export declare const selectAccessToken: (state: RootState) => string | null;
|
|
11
|
+
export declare const selectRefreshToken: (state: RootState) => string | null;
|
|
12
|
+
declare const _default: import("@reduxjs/toolkit").Reducer<AuthState>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.selectRefreshToken = exports.selectAccessToken = exports.clearTokens = exports.setTokens = void 0;
|
|
5
|
+
var toolkit_1 = require("@reduxjs/toolkit");
|
|
6
|
+
var initialState = {
|
|
7
|
+
accessToken: null,
|
|
8
|
+
refreshToken: null,
|
|
9
|
+
};
|
|
10
|
+
var authSlice = (0, toolkit_1.createSlice)({
|
|
11
|
+
name: 'auth',
|
|
12
|
+
initialState: initialState,
|
|
13
|
+
reducers: {
|
|
14
|
+
setTokens: function (state, action) {
|
|
15
|
+
state.accessToken = action.payload.accessToken;
|
|
16
|
+
if (action.payload.refreshToken !== undefined) {
|
|
17
|
+
state.refreshToken = action.payload.refreshToken;
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
clearTokens: function (state) {
|
|
21
|
+
state.accessToken = null;
|
|
22
|
+
state.refreshToken = null;
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
exports.setTokens = (_a = authSlice.actions, _a.setTokens), exports.clearTokens = _a.clearTokens;
|
|
27
|
+
// Selectors
|
|
28
|
+
var selectAccessToken = function (state) { return state.auth.accessToken; };
|
|
29
|
+
exports.selectAccessToken = selectAccessToken;
|
|
30
|
+
var selectRefreshToken = function (state) { return state.auth.refreshToken; };
|
|
31
|
+
exports.selectRefreshToken = selectRefreshToken;
|
|
32
|
+
exports.default = authSlice.reducer;
|
|
33
|
+
//# sourceMappingURL=authSlice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authSlice.js","sourceRoot":"","sources":["../../../../src/store/slices/authSlice.ts"],"names":[],"mappings":";;;;AAAA,4CAA8D;AAQ9D,IAAM,YAAY,GAAc;IAC9B,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF,IAAM,SAAS,GAAG,IAAA,qBAAW,EAAC;IAC5B,IAAI,EAAE,MAAM;IACZ,YAAY,cAAA;IACZ,QAAQ,EAAE;QACR,SAAS,EAAE,UAAC,KAAK,EAAE,MAAmF;YACpG,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;YAC/C,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC9C,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;YACnD,CAAC;QACH,CAAC;QACD,WAAW,EAAE,UAAC,KAAK;YACjB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;YACzB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC5B,CAAC;KACF;CACF,CAAC,CAAC;AAEY,QAAA,SAAS,IAAX,KAA6B,SAAS,CAAC,OAAO,iBAAjC,QAAA,WAAW,kBAAuB;AAE5D,YAAY;AACL,IAAM,iBAAiB,GAAG,UAAC,KAAgB,IAAK,OAAA,KAAK,CAAC,IAAI,CAAC,WAAW,EAAtB,CAAsB,CAAC;AAAjE,QAAA,iBAAiB,qBAAgD;AACvE,IAAM,kBAAkB,GAAG,UAAC,KAAgB,IAAK,OAAA,KAAK,CAAC,IAAI,CAAC,YAAY,EAAvB,CAAuB,CAAC;AAAnE,QAAA,kBAAkB,sBAAiD;AAEhF,kBAAe,SAAS,CAAC,OAAO,CAAC"}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect } from "react";
|
|
2
3
|
import { Provider } from "react-redux";
|
|
3
4
|
import { replykeStore } from "../store";
|
|
5
|
+
import useAuth from "../hooks/auth/useAuth";
|
|
6
|
+
import { setTokens } from "../store/slices/authSlice";
|
|
7
|
+
/**
|
|
8
|
+
* Component that syncs auth state from React context to Redux store
|
|
9
|
+
* Must be inside the Redux Provider to dispatch actions
|
|
10
|
+
*/
|
|
11
|
+
var AuthStateSyncer = function (_a) {
|
|
12
|
+
var children = _a.children;
|
|
13
|
+
var _b = useAuth(), accessToken = _b.accessToken, refreshToken = _b.refreshToken;
|
|
14
|
+
useEffect(function () {
|
|
15
|
+
// Sync auth tokens from React context to Redux state
|
|
16
|
+
replykeStore.dispatch(setTokens({
|
|
17
|
+
accessToken: accessToken || null,
|
|
18
|
+
refreshToken: refreshToken || null
|
|
19
|
+
}));
|
|
20
|
+
}, [accessToken, refreshToken]);
|
|
21
|
+
return _jsx(_Fragment, { children: children });
|
|
22
|
+
};
|
|
4
23
|
/**
|
|
5
24
|
* Redux store provider for Replyke
|
|
6
25
|
* This component provides the Redux store to all child components
|
|
@@ -8,7 +27,7 @@ import { replykeStore } from "../store";
|
|
|
8
27
|
*/
|
|
9
28
|
export var ReplykeStoreProvider = function (_a) {
|
|
10
29
|
var children = _a.children;
|
|
11
|
-
return (_jsx(Provider, { store: replykeStore, children: children }));
|
|
30
|
+
return (_jsx(Provider, { store: replykeStore, children: _jsx(AuthStateSyncer, { children: children }) }));
|
|
12
31
|
};
|
|
13
32
|
// ReplykeProviderWithRedux has been deprecated
|
|
14
33
|
// Use ReplykeProvider with enableRedux={true} instead
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replyke-store-context.js","sourceRoot":"","sources":["../../../src/context/replyke-store-context.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"replyke-store-context.js","sourceRoot":"","sources":["../../../src/context/replyke-store-context.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAMtD;;;GAGG;AACH,IAAM,eAAe,GAAsC,UAAC,EAAY;QAAV,QAAQ,cAAA;IAC9D,IAAA,KAAgC,OAAO,EAAE,EAAvC,WAAW,iBAAA,EAAE,YAAY,kBAAc,CAAC;IAEhD,SAAS,CAAC;QACR,qDAAqD;QACrD,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC9B,WAAW,EAAE,WAAW,IAAI,IAAI;YAChC,YAAY,EAAE,YAAY,IAAI,IAAI;SACnC,CAAC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEhC,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,IAAM,oBAAoB,GAAwC,UAAC,EAEzE;QADC,QAAQ,cAAA;IAER,OAAO,CACL,KAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAC3B,KAAC,eAAe,cACb,QAAQ,GACO,GACT,CACZ,CAAC;AACJ,CAAC,CAAC;AAEF,+CAA+C;AAC/C,sDAAsD;AAEtD,eAAe,oBAAoB,CAAC"}
|
|
@@ -3,11 +3,19 @@ import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
|
|
|
3
3
|
// Base query that uses the current project context and auth
|
|
4
4
|
var createBaseQuery = function () {
|
|
5
5
|
return fetchBaseQuery({
|
|
6
|
-
baseUrl: process.env.REACT_APP_API_BASE_URL || 'https://api.replyke.com',
|
|
6
|
+
baseUrl: process.env.REACT_APP_API_BASE_URL || 'https://api.replyke.com/api/v5',
|
|
7
7
|
credentials: 'include', // Equivalent to withCredentials: true
|
|
8
|
-
prepareHeaders: function (headers) {
|
|
9
|
-
|
|
10
|
-
//
|
|
8
|
+
prepareHeaders: function (headers, _a) {
|
|
9
|
+
var getState = _a.getState;
|
|
10
|
+
// Add Content-Type header
|
|
11
|
+
headers.set('Content-Type', 'application/json');
|
|
12
|
+
// Get access token from Redux state
|
|
13
|
+
var state = getState();
|
|
14
|
+
var accessToken = state.auth.accessToken;
|
|
15
|
+
// Add Authorization header if we have a token
|
|
16
|
+
if (accessToken) {
|
|
17
|
+
headers.set('Authorization', "Bearer ".concat(accessToken));
|
|
18
|
+
}
|
|
11
19
|
return headers;
|
|
12
20
|
},
|
|
13
21
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseApi.js","sourceRoot":"","sources":["../../../../src/store/api/baseApi.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"baseApi.js","sourceRoot":"","sources":["../../../../src/store/api/baseApi.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGzE,4DAA4D;AAC5D,IAAM,eAAe,GAAG;IACtB,OAAO,cAAc,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,gCAAgC;QAC/E,WAAW,EAAE,SAAS,EAAE,sCAAsC;QAC9D,cAAc,EAAE,UAAC,OAAO,EAAE,EAAY;gBAAV,QAAQ,cAAA;YAClC,0BAA0B;YAC1B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAEhD,oCAAoC;YACpC,IAAM,KAAK,GAAG,QAAQ,EAAe,CAAC;YACtC,IAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;YAE3C,8CAA8C;YAC9C,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAU,WAAW,CAAE,CAAC,CAAC;YACxD,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,4BAA4B;AAC5B,MAAM,CAAC,IAAM,OAAO,GAAG,SAAS,CAAC;IAC/B,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,eAAe,EAAE;IAC5B,QAAQ,EAAE;QACR,iBAAiB;QACjB,oBAAoB;QACpB,YAAY;QACZ,cAAc;QACd,UAAU;QACV,UAAU;KACX;IACD,SAAS,EAAE,cAAM,OAAA,CAAC,EAAE,CAAC,EAAJ,CAAI,EAAE,6CAA6C;CACrE,CAAC,CAAC;AAEH,+EAA+E;AAC/E,MAAM,UAAO,KAAK,OAAO,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export declare const store: import("@reduxjs/toolkit").EnhancedStore<{
|
|
2
2
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "AppNotification", "api">;
|
|
3
|
+
auth: import("./slices/authSlice").AuthState;
|
|
3
4
|
appNotifications: import("./slices").AppNotificationsState;
|
|
4
5
|
}, import("@reduxjs/toolkit").UnknownAction, import("@reduxjs/toolkit").Tuple<[import("@reduxjs/toolkit").StoreEnhancer<{
|
|
5
6
|
dispatch: import("@reduxjs/toolkit").ThunkDispatch<{
|
|
6
7
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "AppNotification", "api">;
|
|
8
|
+
auth: import("./slices/authSlice").AuthState;
|
|
7
9
|
appNotifications: import("./slices").AppNotificationsState;
|
|
8
10
|
}, undefined, import("@reduxjs/toolkit").UnknownAction>;
|
|
9
11
|
}>, import("@reduxjs/toolkit").StoreEnhancer]>>;
|
|
@@ -18,16 +18,14 @@ export var errorMiddleware = function (store) { return function (next) { return
|
|
|
18
18
|
throw error;
|
|
19
19
|
}
|
|
20
20
|
}; }; };
|
|
21
|
-
//
|
|
21
|
+
// Selective logger middleware for development - only logs important actions
|
|
22
22
|
export var loggerMiddleware = function (store) { return function (next) { return function (action) {
|
|
23
|
-
if (process.env.NODE_ENV === 'development') {
|
|
24
|
-
console.group("\uD83D\uDD04 Redux Action: ".concat(action.type));
|
|
25
|
-
console.log('Previous State:', store.getState());
|
|
26
|
-
console.log('Action:', action);
|
|
27
|
-
}
|
|
28
23
|
var result = next(action);
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
// Only log failed API calls and errors in development
|
|
25
|
+
if (process.env.NODE_ENV === 'development' && action.type.includes('/rejected')) {
|
|
26
|
+
console.group("\u274C Redux Action Failed: ".concat(action.type));
|
|
27
|
+
console.log('Error:', action.payload);
|
|
28
|
+
console.log('Action:', action);
|
|
31
29
|
console.groupEnd();
|
|
32
30
|
}
|
|
33
31
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/store/middleware.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,8CAA8C;AAC9C,MAAM,CAAC,IAAM,eAAe,GAAe,UAAC,KAAK,IAAK,OAAA,UAAC,IAAI,IAAK,OAAA,UAAC,MAAW;IAC1E,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,EAAE,+BAAwB,MAAM,CAAC,IAAI,CAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,EAP+D,CAO/D,EAPqD,CAOrD,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/store/middleware.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,8CAA8C;AAC9C,MAAM,CAAC,IAAM,eAAe,GAAe,UAAC,KAAK,IAAK,OAAA,UAAC,IAAI,IAAK,OAAA,UAAC,MAAW;IAC1E,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,EAAE,+BAAwB,MAAM,CAAC,IAAI,CAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,EAP+D,CAO/D,EAPqD,CAOrD,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,IAAM,gBAAgB,GAAe,UAAC,KAAK,IAAK,OAAA,UAAC,IAAI,IAAK,OAAA,UAAC,MAAW;IAC3E,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAE5B,sDAAsD;IACtD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAChF,OAAO,CAAC,KAAK,CAAC,sCAA0B,MAAM,CAAC,IAAI,CAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,EAZgE,CAYhE,EAZsD,CAYtD,CAAC;AAEF,gCAAgC;AAChC,MAAM,CAAC,IAAM,gBAAgB;IAC3B,eAAe;GACZ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OACtE,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export declare const rootReducer: import("@reduxjs/toolkit").Reducer<{
|
|
2
2
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "AppNotification", "api">;
|
|
3
|
+
auth: import("./slices/authSlice").AuthState;
|
|
3
4
|
appNotifications: import("./slices/appNotificationsSlice").AppNotificationsState;
|
|
4
5
|
}, import("@reduxjs/toolkit").UnknownAction, Partial<{
|
|
5
6
|
api: import("@reduxjs/toolkit/query").CombinedState<{}, "AppNotification", "api"> | undefined;
|
|
7
|
+
auth: import("./slices/authSlice").AuthState | undefined;
|
|
6
8
|
appNotifications: import("./slices/appNotificationsSlice").AppNotificationsState | undefined;
|
|
7
9
|
}>>;
|
|
8
10
|
export type RootState = ReturnType<typeof rootReducer>;
|
|
@@ -2,11 +2,13 @@ var _a;
|
|
|
2
2
|
import { combineReducers } from "@reduxjs/toolkit";
|
|
3
3
|
import { baseApi } from "./api/baseApi";
|
|
4
4
|
import { appNotificationsSlice } from "./slices/appNotificationsSlice";
|
|
5
|
+
import authReducer from "./slices/authSlice";
|
|
5
6
|
// Combine all reducers
|
|
6
7
|
export var rootReducer = combineReducers((_a = {},
|
|
7
8
|
// API slice reducer (manages RTK Query cache)
|
|
8
9
|
_a[baseApi.reducerPath] = baseApi.reducer,
|
|
9
10
|
// Feature slices
|
|
11
|
+
_a.auth = authReducer,
|
|
10
12
|
_a.appNotifications = appNotificationsSlice.reducer,
|
|
11
13
|
_a));
|
|
12
14
|
//# sourceMappingURL=rootReducer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rootReducer.js","sourceRoot":"","sources":["../../../src/store/rootReducer.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"rootReducer.js","sourceRoot":"","sources":["../../../src/store/rootReducer.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAE7C,uBAAuB;AACvB,MAAM,CAAC,IAAM,WAAW,GAAG,eAAe;IACxC,8CAA8C;IAC9C,GAAC,OAAO,CAAC,WAAW,IAAG,OAAO,CAAC,OAAO;IAEtC,iBAAiB;IACjB,OAAI,GAAE,WAAW;IACjB,mBAAgB,GAAE,qBAAqB,CAAC,OAAO;QAM/C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RootState } from '../index';
|
|
2
|
+
export interface AuthState {
|
|
3
|
+
accessToken: string | null;
|
|
4
|
+
refreshToken: string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare const setTokens: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
7
|
+
accessToken: string | null;
|
|
8
|
+
refreshToken?: string | null;
|
|
9
|
+
}, "auth/setTokens">, clearTokens: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"auth/clearTokens">;
|
|
10
|
+
export declare const selectAccessToken: (state: RootState) => string | null;
|
|
11
|
+
export declare const selectRefreshToken: (state: RootState) => string | null;
|
|
12
|
+
declare const _default: import("@reduxjs/toolkit").Reducer<AuthState>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { createSlice } from '@reduxjs/toolkit';
|
|
3
|
+
var initialState = {
|
|
4
|
+
accessToken: null,
|
|
5
|
+
refreshToken: null,
|
|
6
|
+
};
|
|
7
|
+
var authSlice = createSlice({
|
|
8
|
+
name: 'auth',
|
|
9
|
+
initialState: initialState,
|
|
10
|
+
reducers: {
|
|
11
|
+
setTokens: function (state, action) {
|
|
12
|
+
state.accessToken = action.payload.accessToken;
|
|
13
|
+
if (action.payload.refreshToken !== undefined) {
|
|
14
|
+
state.refreshToken = action.payload.refreshToken;
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
clearTokens: function (state) {
|
|
18
|
+
state.accessToken = null;
|
|
19
|
+
state.refreshToken = null;
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
export var setTokens = (_a = authSlice.actions, _a.setTokens), clearTokens = _a.clearTokens;
|
|
24
|
+
// Selectors
|
|
25
|
+
export var selectAccessToken = function (state) { return state.auth.accessToken; };
|
|
26
|
+
export var selectRefreshToken = function (state) { return state.auth.refreshToken; };
|
|
27
|
+
export default authSlice.reducer;
|
|
28
|
+
//# sourceMappingURL=authSlice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authSlice.js","sourceRoot":"","sources":["../../../../src/store/slices/authSlice.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAQ9D,IAAM,YAAY,GAAc;IAC9B,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF,IAAM,SAAS,GAAG,WAAW,CAAC;IAC5B,IAAI,EAAE,MAAM;IACZ,YAAY,cAAA;IACZ,QAAQ,EAAE;QACR,SAAS,EAAE,UAAC,KAAK,EAAE,MAAmF;YACpG,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;YAC/C,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC9C,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;YACnD,CAAC;QACH,CAAC;QACD,WAAW,EAAE,UAAC,KAAK;YACjB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;YACzB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC5B,CAAC;KACF;CACF,CAAC,CAAC;AAEH,MAAM,CAAS,IAAA,SAAS,IAAX,KAA6B,SAAS,CAAC,OAAO,eAAnC,EAAE,WAAW,iBAAA,CAAuB;AAE5D,YAAY;AACZ,MAAM,CAAC,IAAM,iBAAiB,GAAG,UAAC,KAAgB,IAAK,OAAA,KAAK,CAAC,IAAI,CAAC,WAAW,EAAtB,CAAsB,CAAC;AAC9E,MAAM,CAAC,IAAM,kBAAkB,GAAG,UAAC,KAAgB,IAAK,OAAA,KAAK,CAAC,IAAI,CAAC,YAAY,EAAvB,CAAuB,CAAC;AAEhF,eAAe,SAAS,CAAC,OAAO,CAAC"}
|