@solidxai/core-ui 0.1.7-beta.10 → 0.1.7-beta.11
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/README.md +215 -0
- package/dist/components/auth/SolidOTPVerify.d.ts +3 -0
- package/dist/components/auth/SolidOTPVerify.d.ts.map +1 -0
- package/dist/components/auth/SolidOTPVerify.js +67 -0
- package/dist/components/auth/SolidOTPVerify.js.map +1 -0
- package/dist/components/auth/SolidOTPVerify.tsx +133 -0
- package/dist/components/common/AuthBanner.js.map +1 -1
- package/dist/components/common/GeneralSettings.js +31 -29
- package/dist/components/common/GeneralSettings.js.map +1 -1
- package/dist/components/common/GeneralSettings.tsx +51 -41
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts +18 -14
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js +130 -26
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx +319 -80
- package/dist/components/core/common/LoadDynamicJsxComponent.d.ts +2 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.d.ts.map +1 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.js +50 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.js.map +1 -0
- package/dist/components/core/common/LoadDynamicJsxComponent.tsx +70 -0
- package/dist/components/core/kanban/SolidManyToOneFilterElement.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidManyToOneFilterElement.js.map +1 -1
- package/dist/components/core/kanban/SolidManyToOneFilterElement.tsx +2 -1
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.d.ts.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js +2 -2
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.tsx +10 -21
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.d.ts.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js +2 -2
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.tsx +10 -18
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.d.ts.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js +6 -3
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.tsx +24 -30
- package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.js.map +1 -1
- package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.tsx +2 -2
- package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts +1 -1
- package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts.map +1 -1
- package/dist/components/core/list/SolidListViewRowButtonContextMenu.js +7 -6
- package/dist/components/core/list/SolidListViewRowButtonContextMenu.js.map +1 -1
- package/dist/components/core/list/SolidListViewRowButtonContextMenu.tsx +10 -9
- package/dist/components/shad-cn-ui/SolidTabs.d.ts +2 -1
- package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidTabs.js +5 -5
- package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidTabs.tsx +6 -0
- package/dist/nextAuth/authProviders.d.ts +4 -0
- package/dist/nextAuth/authProviders.d.ts.map +1 -0
- package/dist/nextAuth/authProviders.js +198 -0
- package/dist/nextAuth/authProviders.js.map +1 -0
- package/dist/nextAuth/authProviders.tsx +232 -0
- package/dist/nextAuth/handleLogout.d.ts +2 -0
- package/dist/nextAuth/handleLogout.d.ts.map +1 -0
- package/dist/nextAuth/handleLogout.js +36 -0
- package/dist/nextAuth/handleLogout.js.map +1 -0
- package/dist/nextAuth/handleLogout.tsx +39 -0
- package/dist/nextAuth/refreshAccessToken.d.ts +2 -0
- package/dist/nextAuth/refreshAccessToken.d.ts.map +1 -0
- package/dist/nextAuth/refreshAccessToken.js +24 -0
- package/dist/nextAuth/refreshAccessToken.js.map +1 -0
- package/dist/nextAuth/refreshAccessToken.tsx +28 -0
- package/dist/redux/features/settingsSlice.d.ts +20 -0
- package/dist/redux/features/settingsSlice.d.ts.map +1 -0
- package/dist/redux/features/settingsSlice.js +39 -0
- package/dist/redux/features/settingsSlice.js.map +1 -0
- package/dist/redux/features/settingsSlice.ts +60 -0
- package/package.json +1 -1
- package/dist/components/core/list/SolidDataTablePagination.d.ts +0 -15
- package/dist/components/core/list/SolidDataTablePagination.d.ts.map +0 -1
- package/dist/components/core/list/SolidDataTablePagination.js +0 -22
- package/dist/components/core/list/SolidDataTablePagination.js.map +0 -1
- package/dist/components/core/list/SolidDataTablePagination.tsx +0 -71
- package/dist/components/solid-ui/SolidButton.d.ts +0 -14
- package/dist/components/solid-ui/SolidButton.d.ts.map +0 -1
- package/dist/components/solid-ui/SolidButton.js +0 -36
- package/dist/components/solid-ui/SolidButton.js.map +0 -1
- package/dist/components/solid-ui/SolidButton.tsx +0 -54
- package/dist/components/solid-ui/SolidTabs.d.ts +0 -18
- package/dist/components/solid-ui/SolidTabs.d.ts.map +0 -1
- package/dist/components/solid-ui/SolidTabs.js +0 -22
- package/dist/components/solid-ui/SolidTabs.js.map +0 -1
- package/dist/components/solid-ui/SolidTabs.tsx +0 -73
- package/dist/components/solid-ui/index.d.ts +0 -3
- package/dist/components/solid-ui/index.d.ts.map +0 -1
- package/dist/components/solid-ui/index.js +0 -3
- package/dist/components/solid-ui/index.js.map +0 -1
- package/dist/components/solid-ui/index.ts +0 -2
|
@@ -9,21 +9,23 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
-
import { jsx as _jsx
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
13
|
import { useSession } from "../../../hooks/useSession";
|
|
14
14
|
import { hasAnyRole } from "../../../helpers/rolesHelper";
|
|
15
|
+
import { Button } from "primereact/button";
|
|
15
16
|
export var SolidListViewRowButtonContextMenu = function (_a) {
|
|
16
17
|
var _b, _c, _d, _e, _f, _g, _h;
|
|
17
|
-
var button = _a.button, params = _a.params,
|
|
18
|
+
var button = _a.button, params = _a.params, getSelectedSolidViewData = _a.getSelectedSolidViewData, solidListViewMetaData = _a.solidListViewMetaData, handleCustomButtonClick = _a.handleCustomButtonClick;
|
|
19
|
+
var selectedSolidViewData = getSelectedSolidViewData === null || getSelectedSolidViewData === void 0 ? void 0 : getSelectedSolidViewData();
|
|
18
20
|
var _j = useSession(), session = _j.data, status = _j.status;
|
|
19
21
|
var user = session === null || session === void 0 ? void 0 : session.user;
|
|
20
22
|
var hasRole = !((_b = button === null || button === void 0 ? void 0 : button.attrs) === null || _b === void 0 ? void 0 : _b.roles) || ((_c = button === null || button === void 0 ? void 0 : button.attrs) === null || _c === void 0 ? void 0 : _c.roles.length) === 0 ? true : hasAnyRole(user === null || user === void 0 ? void 0 : user.roles, (_d = button === null || button === void 0 ? void 0 : button.attrs) === null || _d === void 0 ? void 0 : _d.roles);
|
|
21
23
|
if (!hasRole)
|
|
22
24
|
return null;
|
|
23
|
-
return (
|
|
25
|
+
return (_jsx(Button, { type: "button", icon: ((_e = button === null || button === void 0 ? void 0 : button.attrs) === null || _e === void 0 ? void 0 : _e.icon) ? (_f = button === null || button === void 0 ? void 0 : button.attrs) === null || _f === void 0 ? void 0 : _f.icon : "pi pi-pencil", className: "w-full text-left gap-2 ".concat(((_g = button === null || button === void 0 ? void 0 : button.attrs) === null || _g === void 0 ? void 0 : _g.className) ? (_h = button === null || button === void 0 ? void 0 : button.attrs) === null || _h === void 0 ? void 0 : _h.className : ''), label: button.attrs.label, size: "small", onClick: function () {
|
|
24
26
|
var event = {
|
|
25
27
|
params: params,
|
|
26
|
-
rowData:
|
|
28
|
+
rowData: selectedSolidViewData,
|
|
27
29
|
solidListViewMetaData: solidListViewMetaData.data,
|
|
28
30
|
};
|
|
29
31
|
var modifiedButtonAttrs = __assign({}, button.attrs); // Create a copy
|
|
@@ -32,7 +34,6 @@ export var SolidListViewRowButtonContextMenu = function (_a) {
|
|
|
32
34
|
modifiedButtonAttrs.popupWidth = '30vw';
|
|
33
35
|
}
|
|
34
36
|
handleCustomButtonClick(modifiedButtonAttrs, event);
|
|
35
|
-
|
|
36
|
-
}, children: [_jsx("i", { className: "".concat(((_g = button === null || button === void 0 ? void 0 : button.attrs) === null || _g === void 0 ? void 0 : _g.icon) ? (_h = button === null || button === void 0 ? void 0 : button.attrs) === null || _h === void 0 ? void 0 : _h.icon : "pi pi-pencil", " solid-row-action-button-icon") }), _jsx("span", { className: "solid-row-action-button-label", children: button.attrs.label })] }));
|
|
37
|
+
} }));
|
|
37
38
|
};
|
|
38
39
|
//# sourceMappingURL=SolidListViewRowButtonContextMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidListViewRowButtonContextMenu.js","sourceRoot":"","sources":["../../../../src/components/core/list/SolidListViewRowButtonContextMenu.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"SolidListViewRowButtonContextMenu.js","sourceRoot":"","sources":["../../../../src/components/core/list/SolidListViewRowButtonContextMenu.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,CAAC,IAAM,iCAAiC,GAAG,UAAC,EAAiG;;QAA/F,MAAM,YAAA,EAAE,MAAM,YAAA,EAAE,wBAAwB,8BAAA,EAAE,qBAAqB,2BAAA,EAAE,uBAAuB,6BAAA;IACxI,IAAM,qBAAqB,GAAG,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,EAAI,CAAC;IAErD,IAAA,KAA4B,UAAU,EAAE,EAAhC,OAAO,UAAA,EAAE,MAAM,YAAiB,CAAC;IAC/C,IAAM,IAAI,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;IAE3B,IAAM,OAAO,GAAG,CAAC,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,KAAK,CAAA,IAAI,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,KAAK,CAAC,MAAM,MAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,KAAK,CAAC,CAAC;IAElI,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CACH,KAAC,MAAM,IACH,IAAI,EAAC,QAAQ,EACb,IAAI,EAAE,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,IAAI,EAAC,CAAC,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,IAAI,CAAC,CAAC,CAAC,cAAc,EAChE,SAAS,EAAE,iCAA0B,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,SAAS,EAAC,CAAC,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAE,EAC/F,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EACzB,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE;YACL,IAAM,KAAK,GAAG;gBACV,MAAM,QAAA;gBACN,OAAO,EAAE,qBAAqB;gBAC9B,qBAAqB,EAAE,qBAAqB,CAAC,IAAI;aACpD,CAAC;YAEF,IAAM,mBAAmB,gBAAQ,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC,gBAAgB;YAEjE,oDAAoD;YACpD,IAAI,mBAAmB,CAAC,MAAM,KAAK,4BAA4B,IAAI,mBAAmB,CAAC,MAAM,KAAK,6BAA6B,EAAE;gBAC7H,mBAAmB,CAAC,UAAU,GAAG,MAAM,CAAC;aAC3C;YAED,uBAAuB,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC,GACH,CACL,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { useSession } from \"../../../hooks/useSession\";\nimport { hasAnyRole } from \"../../../helpers/rolesHelper\";\nimport { Button } from \"primereact/button\";\n\nexport const SolidListViewRowButtonContextMenu = ({ button, params, getSelectedSolidViewData, solidListViewMetaData, handleCustomButtonClick }: any) => {\n const selectedSolidViewData = getSelectedSolidViewData?.();\n\n const { data: session, status } = useSession();\n const user = session?.user;\n\n const hasRole = !button?.attrs?.roles || button?.attrs?.roles.length === 0 ? true : hasAnyRole(user?.roles, button?.attrs?.roles);\n\n if (!hasRole) return null;\n\n return (\n <Button\n type=\"button\"\n icon={button?.attrs?.icon ? button?.attrs?.icon : \"pi pi-pencil\"}\n className={`w-full text-left gap-2 ${button?.attrs?.className ? button?.attrs?.className : ''}`}\n label={button.attrs.label}\n size=\"small\"\n onClick={() => {\n const event = {\n params,\n rowData: selectedSolidViewData,\n solidListViewMetaData: solidListViewMetaData.data,\n };\n\n const modifiedButtonAttrs = { ...button.attrs }; // Create a copy\n\n // Conditionally add popupWidth for specific actions\n if (modifiedButtonAttrs.action === 'GenerateModelCodeRowAction' || modifiedButtonAttrs.action === 'GenerateModuleCodeRowAction') {\n modifiedButtonAttrs.popupWidth = '30vw';\n }\n\n handleCustomButtonClick(modifiedButtonAttrs, event);\n }}\n />\n );\n};\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { useSession } from "../../../hooks/useSession";
|
|
2
2
|
import { hasAnyRole } from "../../../helpers/rolesHelper";
|
|
3
|
+
import { Button } from "primereact/button";
|
|
3
4
|
|
|
4
|
-
export const SolidListViewRowButtonContextMenu = ({ button, params,
|
|
5
|
+
export const SolidListViewRowButtonContextMenu = ({ button, params, getSelectedSolidViewData, solidListViewMetaData, handleCustomButtonClick }: any) => {
|
|
6
|
+
const selectedSolidViewData = getSelectedSolidViewData?.();
|
|
5
7
|
|
|
6
8
|
const { data: session, status } = useSession();
|
|
7
9
|
const user = session?.user;
|
|
@@ -11,13 +13,16 @@ export const SolidListViewRowButtonContextMenu = ({ button, params, rowData, sol
|
|
|
11
13
|
if (!hasRole) return null;
|
|
12
14
|
|
|
13
15
|
return (
|
|
14
|
-
<
|
|
16
|
+
<Button
|
|
15
17
|
type="button"
|
|
16
|
-
|
|
18
|
+
icon={button?.attrs?.icon ? button?.attrs?.icon : "pi pi-pencil"}
|
|
19
|
+
className={`w-full text-left gap-2 ${button?.attrs?.className ? button?.attrs?.className : ''}`}
|
|
20
|
+
label={button.attrs.label}
|
|
21
|
+
size="small"
|
|
17
22
|
onClick={() => {
|
|
18
23
|
const event = {
|
|
19
24
|
params,
|
|
20
|
-
rowData:
|
|
25
|
+
rowData: selectedSolidViewData,
|
|
21
26
|
solidListViewMetaData: solidListViewMetaData.data,
|
|
22
27
|
};
|
|
23
28
|
|
|
@@ -29,11 +34,7 @@ export const SolidListViewRowButtonContextMenu = ({ button, params, rowData, sol
|
|
|
29
34
|
}
|
|
30
35
|
|
|
31
36
|
handleCustomButtonClick(modifiedButtonAttrs, event);
|
|
32
|
-
onActionComplete?.();
|
|
33
37
|
}}
|
|
34
|
-
|
|
35
|
-
<i className={`${button?.attrs?.icon ? button?.attrs?.icon : "pi pi-pencil"} solid-row-action-button-icon`} />
|
|
36
|
-
<span className="solid-row-action-button-label">{button.attrs.label}</span>
|
|
37
|
-
</button>
|
|
38
|
+
/>
|
|
38
39
|
);
|
|
39
40
|
};
|
|
@@ -13,8 +13,9 @@ type SolidTabGroupProps = {
|
|
|
13
13
|
listClassName?: string;
|
|
14
14
|
panelClassName?: string;
|
|
15
15
|
tabPosition?: "left" | "center" | "right";
|
|
16
|
+
extra?: React.ReactNode;
|
|
16
17
|
};
|
|
17
18
|
export declare function SolidTab(_props: SolidTabProps): null;
|
|
18
|
-
export declare function SolidTabGroup({ tabs, value, onValueChange, className, listClassName, panelClassName, tabPosition, }: SolidTabGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function SolidTabGroup({ tabs, value, onValueChange, className, listClassName, panelClassName, tabPosition, extra, }: SolidTabGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
19
20
|
export {};
|
|
20
21
|
//# sourceMappingURL=SolidTabs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidTabs.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SolidTabs.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB,CAAC;AAMF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,QAE7C;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,aAAa,EACb,SAAS,EACT,aAAa,EACb,cAAc,EACd,WAAoB,EACpB,KAAK,GACN,EAAE,kBAAkB,2CAqDpB"}
|
|
@@ -10,11 +10,11 @@ export function SolidTab(_props) {
|
|
|
10
10
|
return null;
|
|
11
11
|
}
|
|
12
12
|
export function SolidTabGroup(_a) {
|
|
13
|
-
var tabs = _a.tabs, value = _a.value, onValueChange = _a.onValueChange, className = _a.className, listClassName = _a.listClassName, panelClassName = _a.panelClassName, _b = _a.tabPosition, tabPosition = _b === void 0 ? "left" : _b;
|
|
14
|
-
return (_jsxs("div", { className: cx("solid-notebook", "solid-tabs", "solid-tabs--".concat(tabPosition), className), children: [
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
var tabs = _a.tabs, value = _a.value, onValueChange = _a.onValueChange, className = _a.className, listClassName = _a.listClassName, panelClassName = _a.panelClassName, _b = _a.tabPosition, tabPosition = _b === void 0 ? "left" : _b, extra = _a.extra;
|
|
14
|
+
return (_jsxs("div", { className: cx("solid-notebook", "solid-tabs", "solid-tabs--".concat(tabPosition), className), children: [_jsxs("div", { className: cx("solid-notebook-tablist", "solid-tabs-list", listClassName), role: "tablist", style: extra ? { display: "flex", alignItems: "center", justifyContent: "space-between" } : undefined, children: [_jsx("div", { style: extra ? { display: "flex" } : undefined, children: tabs.map(function (tab) {
|
|
15
|
+
var isActive = tab.value === value;
|
|
16
|
+
return (_jsx("button", { type: "button", role: "tab", "aria-selected": isActive, "aria-controls": "solid-tab-panel-".concat(tab.value), id: "solid-tab-".concat(tab.value), className: cx("solid-notebook-tab-trigger", "solid-tabs-trigger", tab.hasError && "error", isActive && "active", isActive && "is-active"), onClick: function () { return onValueChange(tab.value); }, children: tab.label }, tab.value));
|
|
17
|
+
}) }), extra && _jsx("div", { children: extra })] }), tabs.map(function (tab) {
|
|
18
18
|
var isActive = tab.value === value;
|
|
19
19
|
return (_jsx("div", { role: "tabpanel", id: "solid-tab-panel-".concat(tab.value), "aria-labelledby": "solid-tab-".concat(tab.value), hidden: !isActive, className: cx("solid-notebook-content", "solid-tabs-panel", panelClassName), children: isActive ? tab.content : null }, tab.value));
|
|
20
20
|
})] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidTabs.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidTabs.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"SolidTabs.js","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidTabs.tsx"],"names":[],"mappings":";AAoBA,SAAS,EAAE;IAAC,eAA2C;SAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;QAA3C,0BAA2C;;IACrD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAqB;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAST;QARnB,IAAI,UAAA,EACJ,KAAK,WAAA,EACL,aAAa,mBAAA,EACb,SAAS,eAAA,EACT,aAAa,mBAAA,EACb,cAAc,oBAAA,EACd,mBAAoB,EAApB,WAAW,mBAAG,MAAM,KAAA,EACpB,KAAK,WAAA;IAEL,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,sBAAe,WAAW,CAAE,EAAE,SAAS,CAAC,aACzF,eACE,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,iBAAiB,EAAE,aAAa,CAAC,EACzE,IAAI,EAAC,SAAS,EACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,aAErG,cAAK,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,YAClD,IAAI,CAAC,GAAG,CAAC,UAAC,GAAG;4BACZ,IAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC;4BACrC,OAAO,CACL,iBAEE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,KAAK,mBACK,QAAQ,mBACR,0BAAmB,GAAG,CAAC,KAAK,CAAE,EAC7C,EAAE,EAAE,oBAAa,GAAG,CAAC,KAAK,CAAE,EAC5B,SAAS,EAAE,EAAE,CACX,4BAA4B,EAC5B,oBAAoB,EACpB,GAAG,CAAC,QAAQ,IAAI,OAAO,EACvB,QAAQ,IAAI,QAAQ,EACpB,QAAQ,IAAI,WAAW,CACxB,EACD,OAAO,EAAE,cAAM,OAAA,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAxB,CAAwB,YAEtC,GAAG,CAAC,KAAK,IAfL,GAAG,CAAC,KAAK,CAgBP,CACV,CAAC;wBACJ,CAAC,CAAC,GACI,EACL,KAAK,IAAI,wBAAM,KAAK,GAAO,IACxB,EAEL,IAAI,CAAC,GAAG,CAAC,UAAC,GAAG;gBACZ,IAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC;gBACrC,OAAO,CACL,cAEE,IAAI,EAAC,UAAU,EACf,EAAE,EAAE,0BAAmB,GAAG,CAAC,KAAK,CAAE,qBACjB,oBAAa,GAAG,CAAC,KAAK,CAAE,EACzC,MAAM,EAAE,CAAC,QAAQ,EACjB,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,kBAAkB,EAAE,cAAc,CAAC,YAE1E,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAPzB,GAAG,CAAC,KAAK,CAQV,CACP,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC","sourcesContent":["import React from \"react\";\n\ntype SolidTabProps = {\n value: string;\n label: React.ReactNode;\n content: React.ReactNode;\n hasError?: boolean;\n};\n\ntype SolidTabGroupProps = {\n tabs: SolidTabProps[];\n value: string;\n onValueChange: (value: string) => void;\n className?: string;\n listClassName?: string;\n panelClassName?: string;\n tabPosition?: \"left\" | \"center\" | \"right\";\n extra?: React.ReactNode;\n};\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport function SolidTab(_props: SolidTabProps) {\n return null;\n}\n\nexport function SolidTabGroup({\n tabs,\n value,\n onValueChange,\n className,\n listClassName,\n panelClassName,\n tabPosition = \"left\",\n extra,\n}: SolidTabGroupProps) {\n return (\n <div className={cx(\"solid-notebook\", \"solid-tabs\", `solid-tabs--${tabPosition}`, className)}>\n <div\n className={cx(\"solid-notebook-tablist\", \"solid-tabs-list\", listClassName)}\n role=\"tablist\"\n style={extra ? { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" } : undefined}\n >\n <div style={extra ? { display: \"flex\" } : undefined}>\n {tabs.map((tab) => {\n const isActive = tab.value === value;\n return (\n <button\n key={tab.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`solid-tab-panel-${tab.value}`}\n id={`solid-tab-${tab.value}`}\n className={cx(\n \"solid-notebook-tab-trigger\",\n \"solid-tabs-trigger\",\n tab.hasError && \"error\",\n isActive && \"active\",\n isActive && \"is-active\",\n )}\n onClick={() => onValueChange(tab.value)}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n {extra && <div>{extra}</div>}\n </div>\n\n {tabs.map((tab) => {\n const isActive = tab.value === value;\n return (\n <div\n key={tab.value}\n role=\"tabpanel\"\n id={`solid-tab-panel-${tab.value}`}\n aria-labelledby={`solid-tab-${tab.value}`}\n hidden={!isActive}\n className={cx(\"solid-notebook-content\", \"solid-tabs-panel\", panelClassName)}\n >\n {isActive ? tab.content : null}\n </div>\n );\n })}\n </div>\n );\n}\n"]}
|
|
@@ -15,6 +15,7 @@ type SolidTabGroupProps = {
|
|
|
15
15
|
listClassName?: string;
|
|
16
16
|
panelClassName?: string;
|
|
17
17
|
tabPosition?: "left" | "center" | "right";
|
|
18
|
+
extra?: React.ReactNode;
|
|
18
19
|
};
|
|
19
20
|
|
|
20
21
|
function cx(...parts: Array<string | false | undefined>) {
|
|
@@ -33,13 +34,16 @@ export function SolidTabGroup({
|
|
|
33
34
|
listClassName,
|
|
34
35
|
panelClassName,
|
|
35
36
|
tabPosition = "left",
|
|
37
|
+
extra,
|
|
36
38
|
}: SolidTabGroupProps) {
|
|
37
39
|
return (
|
|
38
40
|
<div className={cx("solid-notebook", "solid-tabs", `solid-tabs--${tabPosition}`, className)}>
|
|
39
41
|
<div
|
|
40
42
|
className={cx("solid-notebook-tablist", "solid-tabs-list", listClassName)}
|
|
41
43
|
role="tablist"
|
|
44
|
+
style={extra ? { display: "flex", alignItems: "center", justifyContent: "space-between" } : undefined}
|
|
42
45
|
>
|
|
46
|
+
<div style={extra ? { display: "flex" } : undefined}>
|
|
43
47
|
{tabs.map((tab) => {
|
|
44
48
|
const isActive = tab.value === value;
|
|
45
49
|
return (
|
|
@@ -63,6 +67,8 @@ export function SolidTabGroup({
|
|
|
63
67
|
</button>
|
|
64
68
|
);
|
|
65
69
|
})}
|
|
70
|
+
</div>
|
|
71
|
+
{extra && <div>{extra}</div>}
|
|
66
72
|
</div>
|
|
67
73
|
|
|
68
74
|
{tabs.map((tab) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authProviders.d.ts","sourceRoot":"./","sources":["nextAuth/authProviders.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAW5C,QAAA,MAAM,aAAa,EAAE,eAqNpB,CAAA;AAED,eAAe,aAAa,CAAA"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import CredentialsProvider from "next-auth/providers/credentials";
|
|
2
|
+
import GoogleProvider from "next-auth/providers/google";
|
|
3
|
+
import { jwtDecode } from "jwt-decode";
|
|
4
|
+
import axios from "axios";
|
|
5
|
+
import { refreshAccessToken } from "./refreshAccessToken";
|
|
6
|
+
const authProviders = {
|
|
7
|
+
session: {
|
|
8
|
+
strategy: "jwt",
|
|
9
|
+
},
|
|
10
|
+
providers: [
|
|
11
|
+
GoogleProvider({
|
|
12
|
+
clientId: process.env.GOOGLE_ID,
|
|
13
|
+
clientSecret: process.env.GOOGLE_CLIENT_SECRET
|
|
14
|
+
}),
|
|
15
|
+
CredentialsProvider({
|
|
16
|
+
// @ts-ignore
|
|
17
|
+
async authorize(credentials, req) {
|
|
18
|
+
const userAgent = req.headers['user-agent'];
|
|
19
|
+
const { username, email, password, identifier, accessToken, accessCode } = credentials;
|
|
20
|
+
console.log(credentials, '=========================');
|
|
21
|
+
try {
|
|
22
|
+
if (accessCode) {
|
|
23
|
+
let config = {
|
|
24
|
+
method: 'get',
|
|
25
|
+
url: `${process.env.API_URL}/api/iam/google/authenticate?accessCode=${accessCode}`,
|
|
26
|
+
headers: {
|
|
27
|
+
'User-Agent': userAgent,
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const loginResponse = await axios.request(config);
|
|
31
|
+
if (loginResponse.status == 400) {
|
|
32
|
+
throw new Error(loginResponse.data.message);
|
|
33
|
+
}
|
|
34
|
+
if (loginResponse.status == 401) {
|
|
35
|
+
throw new Error(loginResponse.data.message);
|
|
36
|
+
}
|
|
37
|
+
let base64decoded = jwtDecode(loginResponse.data.data.accessToken);
|
|
38
|
+
// let accessTokenExpires = base64decoded.exp;
|
|
39
|
+
let accessTokenExpires = base64decoded.exp && base64decoded.exp * 1000;
|
|
40
|
+
return {
|
|
41
|
+
accessToken: loginResponse.data.data.accessToken,
|
|
42
|
+
refreshToken: loginResponse.data.data.refreshToken,
|
|
43
|
+
accessTokenExpires: accessTokenExpires,
|
|
44
|
+
...loginResponse.data.data,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
if (accessToken) {
|
|
49
|
+
let data = JSON.stringify({
|
|
50
|
+
username: identifier,
|
|
51
|
+
email: identifier.includes('@') ? identifier : null,
|
|
52
|
+
password: password
|
|
53
|
+
});
|
|
54
|
+
let config = {
|
|
55
|
+
method: 'get',
|
|
56
|
+
url: `${process.env.API_URL}/api/iam/me`,
|
|
57
|
+
headers: {
|
|
58
|
+
'accept': '*/*',
|
|
59
|
+
'Content-Type': 'application/json',
|
|
60
|
+
'Authorization': `Bearer ${accessToken}`
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const loginResponse = await axios.request(config);
|
|
64
|
+
if (loginResponse.status == 400) {
|
|
65
|
+
throw new Error(loginResponse.data.message);
|
|
66
|
+
}
|
|
67
|
+
if (loginResponse.status == 401) {
|
|
68
|
+
throw new Error(loginResponse.data.message);
|
|
69
|
+
}
|
|
70
|
+
let base64decoded = jwtDecode(accessToken);
|
|
71
|
+
// let accessTokenExpires = base64decoded.exp;
|
|
72
|
+
let accessTokenExpires = base64decoded.exp && base64decoded.exp * 1000;
|
|
73
|
+
return {
|
|
74
|
+
accessToken: accessToken,
|
|
75
|
+
refreshToken: loginResponse.data.data.refreshToken,
|
|
76
|
+
accessTokenExpires: accessTokenExpires,
|
|
77
|
+
...loginResponse.data.data,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
let data = JSON.stringify({
|
|
82
|
+
username: identifier,
|
|
83
|
+
email: identifier.includes('@') ? identifier : null,
|
|
84
|
+
password: password
|
|
85
|
+
});
|
|
86
|
+
let config = {
|
|
87
|
+
method: 'post',
|
|
88
|
+
maxBodyLength: Infinity,
|
|
89
|
+
url: `${process.env.API_URL}/api/iam/authenticate`,
|
|
90
|
+
headers: {
|
|
91
|
+
'accept': '*/*',
|
|
92
|
+
'Content-Type': 'application/json',
|
|
93
|
+
'User-Agent': userAgent,
|
|
94
|
+
},
|
|
95
|
+
data: data
|
|
96
|
+
};
|
|
97
|
+
const loginResponse = await axios.request(config);
|
|
98
|
+
// const authenticateResponse = await fetch(
|
|
99
|
+
// `${process.env.API_URL}/api/iam/authenticate`,
|
|
100
|
+
// {
|
|
101
|
+
// method: "Post",
|
|
102
|
+
// headers: {
|
|
103
|
+
// 'accept': '*/*',
|
|
104
|
+
// "Content-Type": "application/json"
|
|
105
|
+
// },
|
|
106
|
+
// body: JSON.stringify({
|
|
107
|
+
// username: email,
|
|
108
|
+
// email: email,
|
|
109
|
+
// password: password
|
|
110
|
+
// })
|
|
111
|
+
// }
|
|
112
|
+
// );
|
|
113
|
+
// const loginResponse = await authenticateResponse.json();
|
|
114
|
+
// const response = await fetch(
|
|
115
|
+
// `${process.env.API_URL}/api/iam/me`,
|
|
116
|
+
// {
|
|
117
|
+
// method: "Get",
|
|
118
|
+
// headers: {
|
|
119
|
+
// "Content-Type": "application/json",
|
|
120
|
+
// "Authorization": `Bearer ${loginResponse.data.accessToken}`,
|
|
121
|
+
// },
|
|
122
|
+
// }
|
|
123
|
+
// );
|
|
124
|
+
// const responseData = await response.json();
|
|
125
|
+
if (loginResponse.status == 400) {
|
|
126
|
+
throw new Error(loginResponse.data.message);
|
|
127
|
+
}
|
|
128
|
+
if (loginResponse.status == 401) {
|
|
129
|
+
throw new Error(loginResponse.data.data.message);
|
|
130
|
+
}
|
|
131
|
+
let base64decoded = jwtDecode(loginResponse.data.data.accessToken);
|
|
132
|
+
// let accessTokenExpires = base64decoded.exp;
|
|
133
|
+
let accessTokenExpires = base64decoded.exp && base64decoded.exp * 1000;
|
|
134
|
+
const returnResponse = {
|
|
135
|
+
accessToken: loginResponse.data.data.accessToken,
|
|
136
|
+
refreshToken: loginResponse.data.data.refreshToken,
|
|
137
|
+
accessTokenExpires: accessTokenExpires,
|
|
138
|
+
...loginResponse.data.data,
|
|
139
|
+
};
|
|
140
|
+
return returnResponse;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
throw new Error(error?.response?.data?.message);
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
}),
|
|
149
|
+
],
|
|
150
|
+
callbacks: {
|
|
151
|
+
// @ts-ignore
|
|
152
|
+
jwt: async ({ token, user }) => {
|
|
153
|
+
// console.log("JWT callback called");
|
|
154
|
+
const bufferTime = 60000;
|
|
155
|
+
if (Date.now() >= (token.accessTokenExpires - bufferTime)) {
|
|
156
|
+
// Call the refresh token function
|
|
157
|
+
return await refreshAccessToken(token);
|
|
158
|
+
}
|
|
159
|
+
// If there is no user (first time login or session), we return the user data
|
|
160
|
+
if (user) {
|
|
161
|
+
// const base64decoded = jwtDecode(user.accessToken);
|
|
162
|
+
// Convert from seconds to milliseconds
|
|
163
|
+
// const accessTokenExpires = base64decoded.exp && base64decoded.exp * 1000;
|
|
164
|
+
// const accessTokenExpires = user.accessTokenExpires * 1000;
|
|
165
|
+
return {
|
|
166
|
+
...token,
|
|
167
|
+
accessToken: user.accessToken,
|
|
168
|
+
refreshToken: user.refreshToken,
|
|
169
|
+
accessTokenExpires: user.accessTokenExpires,
|
|
170
|
+
user: user, // Include the user data here
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return token; // If no update needed, just return the existing token
|
|
174
|
+
},
|
|
175
|
+
// @ts-ignore
|
|
176
|
+
session: async ({ session, token }) => {
|
|
177
|
+
// console.log("Session callback called");
|
|
178
|
+
const user = token.user || {}; // Default to an empty object if user is undefined or null
|
|
179
|
+
session.error = token.error ? token.error : null;
|
|
180
|
+
// if (token.error) {
|
|
181
|
+
// return null
|
|
182
|
+
// }
|
|
183
|
+
session.user = {
|
|
184
|
+
...user,
|
|
185
|
+
accessToken: token?.accessToken,
|
|
186
|
+
refreshToken: token?.refreshToken,
|
|
187
|
+
accessTokenExpires: token?.accessTokenExpires && token?.accessTokenExpires, // Store the expiry time
|
|
188
|
+
};
|
|
189
|
+
return session;
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
pages: {
|
|
193
|
+
signIn: "/auth/login",
|
|
194
|
+
},
|
|
195
|
+
secret: process.env.NEXTAUTH_SECRET,
|
|
196
|
+
};
|
|
197
|
+
export default authProviders;
|
|
198
|
+
//# sourceMappingURL=authProviders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authProviders.js","sourceRoot":"./","sources":["nextAuth/authProviders.tsx"],"names":[],"mappings":"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","sourcesContent":["import CredentialsProvider from \"next-auth/providers/credentials\";\nimport GoogleProvider from \"next-auth/providers/google\";\nimport { NextRequest } from \"next/server\";\nimport { jwtDecode } from \"jwt-decode\";\nimport { JWT } from \"next-auth/jwt\";\nimport axios from \"axios\";\nimport { signOut } from \"next-auth/react\";\nimport { refreshAccessToken } from \"./refreshAccessToken\";\nimport { NextAuthOptions } from \"next-auth\";\n\ntype Credentials = {\n username: string,\n email: string,\n password: string,\n identifier:string,\n accessToken: string,\n accessCode: string,\n};\n\nconst authProviders: NextAuthOptions = {\n session: {\n strategy: \"jwt\",\n },\n providers: [\n GoogleProvider({\n clientId: process.env.GOOGLE_ID!,\n clientSecret: process.env.GOOGLE_CLIENT_SECRET!\n }),\n CredentialsProvider({\n // @ts-ignore\n async authorize(credentials: Credentials, req: any) {\n const userAgent = req.headers['user-agent'];\n\n const { username, email, password, identifier, accessToken, accessCode } = credentials;\n\n console.log(credentials , '=========================');\n \n try {\n if (accessCode) {\n let config = {\n method: 'get',\n url: `${process.env.API_URL}/api/iam/google/authenticate?accessCode=${accessCode}`,\n headers: {\n 'User-Agent': userAgent,\n }\n };\n const loginResponse = await axios.request(config);\n if (loginResponse.status == 400) {\n throw new Error(loginResponse.data.message);\n }\n if (loginResponse.status == 401) {\n throw new Error(loginResponse.data.message);\n }\n\n let base64decoded = jwtDecode(loginResponse.data.data.accessToken);\n // let accessTokenExpires = base64decoded.exp;\n let accessTokenExpires = base64decoded.exp && base64decoded.exp * 1000;\n\n return {\n accessToken: loginResponse.data.data.accessToken,\n refreshToken: loginResponse.data.data.refreshToken,\n accessTokenExpires: accessTokenExpires,\n ...loginResponse.data.data,\n };\n\n } else {\n if (accessToken) {\n let data = JSON.stringify({\n username: identifier,\n email: identifier.includes('@')? identifier : null,\n password: password\n });\n\n let config = {\n method: 'get',\n url: `${process.env.API_URL}/api/iam/me`,\n headers: {\n 'accept': '*/*',\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${accessToken}`\n }\n };\n\n\n const loginResponse = await axios.request(config);\n\n if (loginResponse.status == 400) {\n throw new Error(loginResponse.data.message);\n }\n if (loginResponse.status == 401) {\n throw new Error(loginResponse.data.message);\n }\n \n let base64decoded = jwtDecode(accessToken);\n // let accessTokenExpires = base64decoded.exp;\n let accessTokenExpires = base64decoded.exp && base64decoded.exp * 1000;\n\n return {\n accessToken: accessToken,\n refreshToken: loginResponse.data.data.refreshToken,\n accessTokenExpires: accessTokenExpires,\n ...loginResponse.data.data,\n };\n\n } else {\n\n let data = JSON.stringify({\n username: identifier,\n email: identifier.includes('@')? identifier : null,\n password: password\n });\n\n let config = {\n method: 'post',\n maxBodyLength: Infinity,\n url: `${process.env.API_URL}/api/iam/authenticate`,\n headers: {\n 'accept': '*/*',\n 'Content-Type': 'application/json',\n 'User-Agent': userAgent,\n },\n data: data\n };\n\n\n const loginResponse = await axios.request(config);\n\n // const authenticateResponse = await fetch(\n // `${process.env.API_URL}/api/iam/authenticate`,\n // {\n // method: \"Post\",\n // headers: {\n // 'accept': '*/*', \n // \"Content-Type\": \"application/json\"\n // },\n // body: JSON.stringify({\n // username: email,\n // email: email,\n // password: password\n // })\n // }\n // );\n\n // const loginResponse = await authenticateResponse.json();\n\n // const response = await fetch(\n // `${process.env.API_URL}/api/iam/me`,\n // {\n // method: \"Get\",\n // headers: {\n // \"Content-Type\": \"application/json\",\n // \"Authorization\": `Bearer ${loginResponse.data.accessToken}`,\n // },\n // }\n // );\n\n // const responseData = await response.json();\n\n if (loginResponse.status == 400) {\n throw new Error(loginResponse.data.message);\n }\n if (loginResponse.status == 401) {\n throw new Error(loginResponse.data.data.message);\n }\n let base64decoded = jwtDecode(loginResponse.data.data.accessToken);\n // let accessTokenExpires = base64decoded.exp;\n let accessTokenExpires = base64decoded.exp && base64decoded.exp * 1000;\n const returnResponse = {\n accessToken: loginResponse.data.data.accessToken,\n refreshToken: loginResponse.data.data.refreshToken,\n accessTokenExpires: accessTokenExpires,\n ...loginResponse.data.data,\n }\n return returnResponse;\n }\n }\n } catch (error: any) {\n throw new Error(error?.response?.data?.message);\n }\n },\n }),\n ],\n callbacks: {\n // @ts-ignore\n jwt: async ({ token, user }) => {\n // console.log(\"JWT callback called\");\n const bufferTime = 60000;\n if (Date.now() >= (token.accessTokenExpires as number - bufferTime)) {\n // Call the refresh token function\n return await refreshAccessToken(token);\n }\n\n // If there is no user (first time login or session), we return the user data\n if (user) {\n // const base64decoded = jwtDecode(user.accessToken);\n // Convert from seconds to milliseconds\n // const accessTokenExpires = base64decoded.exp && base64decoded.exp * 1000; \n // const accessTokenExpires = user.accessTokenExpires * 1000; \n return {\n ...token,\n accessToken: user.accessToken,\n refreshToken: user.refreshToken,\n accessTokenExpires: user.accessTokenExpires,\n user: user, // Include the user data here\n };\n }\n\n return token; // If no update needed, just return the existing token\n },\n // @ts-ignore\n session: async ({ session, token }) => {\n // console.log(\"Session callback called\");\n\n const user = token.user || {}; // Default to an empty object if user is undefined or null\n session.error = token.error ? token.error : null;\n // if (token.error) {\n // return null\n // }\n session.user = {\n ...user, // Include the user info from the token\n accessToken: token?.accessToken, // Add the access token to session for client use\n refreshToken: token?.refreshToken, // Add refresh token to session for future use\n accessTokenExpires: token?.accessTokenExpires && token?.accessTokenExpires, // Store the expiry time\n };\n return session;\n\n },\n },\n pages: {\n signIn: \"/auth/login\",\n },\n secret: process.env.NEXTAUTH_SECRET,\n}\n\nexport default authProviders"]}
|