@vc-shell/framework 1.0.126 → 1.0.128
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/CHANGELOG.md +18 -0
- package/core/composables/useUser/index.ts +62 -47
- package/core/plugins/signalR/index.ts +2 -2
- package/dist/core/composables/useUser/index.d.ts.map +1 -1
- package/dist/framework.mjs +7585 -7563
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/types/index.d.ts +4 -1
- package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
- package/dist/utils/isInDemoMode.d.ts +2 -0
- package/dist/utils/isInDemoMode.d.ts.map +1 -0
- package/package.json +4 -4
- package/shared/components/app-switcher/composables/useAppSwitcher/index.ts +1 -1
- package/shared/modules/dynamic/index.ts +9 -7
- package/shared/modules/dynamic/pages/dynamic-blade-list.vue +31 -10
- package/shared/modules/dynamic/types/index.ts +6 -1
- package/ui/components/organisms/vc-table/vc-table.vue +10 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## [1.0.128](https://github.com/VirtoCommerce/vc-shell/compare/v1.0.127...v1.0.128) (2023-12-14)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **dynamic:** ability to add custom visibility method to columns schema ([68922fd](https://github.com/VirtoCommerce/vc-shell/commit/68922fda60310f1f85d5c34122248693897354e4))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## [1.0.127](https://github.com/VirtoCommerce/vc-shell/compare/v1.0.126...v1.0.127) (2023-12-13)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **dynamic:** props pass to created component instance ([29331fb](https://github.com/VirtoCommerce/vc-shell/commit/29331fb60bacf142d48eccc1af117a0b8fc299dd))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
1
19
|
## [1.0.126](https://github.com/VirtoCommerce/vc-shell/compare/v1.0.125...v1.0.126) (2023-11-28)
|
|
2
20
|
|
|
3
21
|
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
ExternalSignInProviderInfo,
|
|
15
15
|
} from "./../../api/platform";
|
|
16
16
|
import { AuthData, RequestPasswordResult, SignInResults } from "./../../types";
|
|
17
|
-
import { useLocalStorage } from "@vueuse/core";
|
|
17
|
+
import { useLocalStorage, useStorage } from "@vueuse/core";
|
|
18
18
|
//The Platform Manager uses the same key to store authorization data in the
|
|
19
19
|
//local storage, so we can exchange authorization data between the Platform Manager
|
|
20
20
|
//and the user application that is hosted in the same domain as the sub application.
|
|
@@ -22,7 +22,6 @@ const VC_AUTH_DATA_KEY = "ls.authenticationData";
|
|
|
22
22
|
|
|
23
23
|
const user: Ref<UserDetail | undefined> = ref();
|
|
24
24
|
const loading: Ref<boolean> = ref(false);
|
|
25
|
-
const authData: Ref<AuthData | undefined> = ref();
|
|
26
25
|
const authClient = new ClientOAuth2({
|
|
27
26
|
accessTokenUri: `/connect/token`,
|
|
28
27
|
scopes: ["offline_access"],
|
|
@@ -48,7 +47,16 @@ interface IUseUser {
|
|
|
48
47
|
isAuthenticated: () => Promise<boolean>;
|
|
49
48
|
}
|
|
50
49
|
|
|
50
|
+
const simulateLogin = async () => {
|
|
51
|
+
return {
|
|
52
|
+
accessToken: "testToken",
|
|
53
|
+
refreshToken: "testTokenRefresh",
|
|
54
|
+
data: { expires_in: new Date(new Date().setDate(new Date().getDate() + 1)) },
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
51
58
|
export function useUser(): IUseUser {
|
|
59
|
+
const authData: Ref<AuthData | null> = useStorage(VC_AUTH_DATA_KEY, {});
|
|
52
60
|
const base = window.location.origin + "/";
|
|
53
61
|
const externalSecurityClient = new ExternalSignInClient(base);
|
|
54
62
|
const externalSignInStorage = useLocalStorage<{ providerType: string | undefined }>("externalSignIn", {
|
|
@@ -90,7 +98,7 @@ export function useUser(): IUseUser {
|
|
|
90
98
|
let token = undefined;
|
|
91
99
|
try {
|
|
92
100
|
loading.value = true;
|
|
93
|
-
token = await authClient.owner.getToken(username, password);
|
|
101
|
+
token = !window.__DEMO_MODE__ ? await authClient.owner.getToken(username, password) : await simulateLogin();
|
|
94
102
|
} catch (e) {
|
|
95
103
|
//TODO: log error
|
|
96
104
|
return { succeeded: false, error: e as string };
|
|
@@ -102,13 +110,14 @@ export function useUser(): IUseUser {
|
|
|
102
110
|
authData.value = {
|
|
103
111
|
accessToken: token.accessToken,
|
|
104
112
|
refreshToken: token.refreshToken,
|
|
105
|
-
expiresAt: addOffsetToCurrentDate(Number(token.data["expires_in"])),
|
|
113
|
+
expiresAt: addOffsetToCurrentDate(Number(token.data?.["expires_in"])),
|
|
106
114
|
userName: username,
|
|
107
115
|
};
|
|
108
116
|
console.log("[useUser]: an access token has been obtained successfully", authData.value);
|
|
109
117
|
|
|
110
118
|
storeAuthData(authData.value);
|
|
111
119
|
}
|
|
120
|
+
|
|
112
121
|
await loadUser();
|
|
113
122
|
return { succeeded: true };
|
|
114
123
|
}
|
|
@@ -120,68 +129,74 @@ export function useUser(): IUseUser {
|
|
|
120
129
|
externalSignOut(externalSignInStorage.value.providerType);
|
|
121
130
|
} else {
|
|
122
131
|
user.value = undefined;
|
|
123
|
-
authData.value =
|
|
124
|
-
storeAuthData(
|
|
132
|
+
authData.value = null;
|
|
133
|
+
storeAuthData(null);
|
|
125
134
|
}
|
|
126
135
|
}
|
|
127
136
|
|
|
128
137
|
async function loadUser(): Promise<UserDetail> {
|
|
129
138
|
console.debug(`[@vc-shell/framework#useUser:loadUser] - Entry point`);
|
|
130
|
-
const token = await getAccessToken();
|
|
131
|
-
if (token) {
|
|
132
|
-
securityClient.setAuthToken(token);
|
|
133
139
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
} catch (e) {
|
|
139
|
-
console.dir(e);
|
|
140
|
-
throw e;
|
|
141
|
-
} finally {
|
|
142
|
-
loading.value = false;
|
|
140
|
+
if (!externalSignInStorage.value?.providerType) {
|
|
141
|
+
const token = await getAccessToken();
|
|
142
|
+
if (token) {
|
|
143
|
+
securityClient.setAuthToken(token);
|
|
143
144
|
}
|
|
144
145
|
}
|
|
145
146
|
|
|
147
|
+
try {
|
|
148
|
+
loading.value = true;
|
|
149
|
+
user.value = !window.__DEMO_MODE__
|
|
150
|
+
? await securityClient.getCurrentUser()
|
|
151
|
+
: ({
|
|
152
|
+
id: "testUserId",
|
|
153
|
+
userName: "testUserName",
|
|
154
|
+
} as UserDetail);
|
|
155
|
+
|
|
156
|
+
console.log("[useUser]: an user details has been loaded", user.value);
|
|
157
|
+
} catch (e: any) {
|
|
158
|
+
console.dir(e);
|
|
159
|
+
} finally {
|
|
160
|
+
loading.value = false;
|
|
161
|
+
}
|
|
162
|
+
|
|
146
163
|
return { ...user.value } as UserDetail;
|
|
147
164
|
}
|
|
148
165
|
|
|
149
166
|
async function getAccessToken(): Promise<string | undefined> {
|
|
150
167
|
console.debug(`[@vc-shell/framework#useUser:getAccessToken] - Entry point`);
|
|
151
|
-
if (
|
|
152
|
-
authData.value
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
if (authData.value) {
|
|
169
|
+
if (Date.now() >= (authData.value.expiresAt ?? 0)) {
|
|
170
|
+
const token = authClient.createToken(
|
|
171
|
+
authData.value.accessToken ?? authData.value.token ?? "",
|
|
172
|
+
authData.value.refreshToken ?? "",
|
|
173
|
+
{}
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
console.log("[useUser]: an access token is expired, using refresh token to receive a new");
|
|
177
|
+
try {
|
|
178
|
+
const newToken = await token.refresh();
|
|
179
|
+
if (newToken) {
|
|
180
|
+
authData.value = {
|
|
181
|
+
...authData.value,
|
|
182
|
+
accessToken: newToken.accessToken,
|
|
183
|
+
token: newToken.accessToken,
|
|
184
|
+
refreshToken: newToken.refreshToken,
|
|
185
|
+
expiresAt: addOffsetToCurrentDate(Number(newToken.data["expires_in"])),
|
|
186
|
+
};
|
|
187
|
+
storeAuthData(authData.value);
|
|
188
|
+
}
|
|
189
|
+
} catch (e: any) {
|
|
190
|
+
console.log("[useUser]: getAccessToken() returns error", e);
|
|
174
191
|
}
|
|
175
|
-
} catch (e) {
|
|
176
|
-
console.log("[useUser]: getAccessToken() returns error", e);
|
|
177
192
|
}
|
|
178
|
-
}
|
|
179
193
|
|
|
180
|
-
|
|
194
|
+
return authData.value?.accessToken ?? authData.value?.token;
|
|
195
|
+
}
|
|
181
196
|
}
|
|
182
197
|
|
|
183
|
-
function storeAuthData(
|
|
184
|
-
|
|
198
|
+
function storeAuthData(data: AuthData | null) {
|
|
199
|
+
authData.value = data;
|
|
185
200
|
}
|
|
186
201
|
|
|
187
202
|
async function readAuthData(): Promise<AuthData> {
|
|
@@ -12,7 +12,7 @@ export const signalR = {
|
|
|
12
12
|
.configureLogging(LogLevel.Information)
|
|
13
13
|
.build();
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
const start = () => {
|
|
16
16
|
connection
|
|
17
17
|
.start()
|
|
18
18
|
.then(() => {
|
|
@@ -22,7 +22,7 @@ export const signalR = {
|
|
|
22
22
|
console.log("SignalR Connection Error: ", err);
|
|
23
23
|
setTimeout(() => start(), 5000);
|
|
24
24
|
});
|
|
25
|
-
}
|
|
25
|
+
};
|
|
26
26
|
|
|
27
27
|
connection.onclose(() => {
|
|
28
28
|
start();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useUser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,WAAW,EAAE,MAAM,KAAK,CAAC;AAEtD,OAAO,EACL,UAAU,EAGV,cAAc,EAEd,cAAc,EAGd,SAAS,EACT,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAY,qBAAqB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useUser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,WAAW,EAAE,MAAM,KAAK,CAAC;AAEtD,OAAO,EACL,UAAU,EAGV,cAAc,EAEd,cAAc,EAGd,SAAS,EACT,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAY,qBAAqB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAe/E,UAAU,QAAQ;IAChB,IAAI,EAAE,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAC1C,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,eAAe,EAAE,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAClD,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACvE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAChE,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACnG,oBAAoB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/E,kBAAkB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IACtG,yBAAyB,EAAE,MAAM,OAAO,CAAC,0BAA0B,EAAE,GAAG,SAAS,CAAC,CAAC;IACnF,cAAc,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAClG,YAAY,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACzC;AAUD,wBAAgB,OAAO,IAAI,QAAQ,CA2QlC"}
|