@yelon/bis 17.3.2 → 18.0.1

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.
Files changed (70) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1 -1
  3. package/config/bis.config.d.ts +3 -3
  4. package/config/index.d.ts +5 -5
  5. package/config/public_api.d.ts +1 -1
  6. package/esm2022/bis.mjs +4 -4
  7. package/esm2022/config/bis.config.mjs +14 -14
  8. package/esm2022/config/config.mjs +4 -4
  9. package/esm2022/config/public_api.mjs +1 -1
  10. package/esm2022/layout/layout-basic.component.mjs +518 -508
  11. package/esm2022/layout/layout-nav-application.component.mjs +372 -372
  12. package/esm2022/layout/layout-nav-group.component.mjs +166 -162
  13. package/esm2022/layout/layout-nav-tile.component.mjs +14 -14
  14. package/esm2022/layout/layout.mjs +4 -4
  15. package/esm2022/layout/layout.module.mjs +53 -53
  16. package/esm2022/layout/public_api.mjs +5 -5
  17. package/esm2022/public_api.mjs +8 -8
  18. package/esm2022/src/bis.module.mjs +16 -16
  19. package/esm2022/src/helper.mjs +44 -44
  20. package/esm2022/src/provide.mjs +7 -7
  21. package/esm2022/src/refresh-token.mjs +78 -78
  22. package/esm2022/src/startup.service.mjs +183 -183
  23. package/esm2022/src/yunzai-act.guard.mjs +87 -87
  24. package/esm2022/src/yunzai-analysis-addon.guard.mjs +98 -98
  25. package/esm2022/src/yunzai-default.interceptor.mjs +62 -62
  26. package/esm2022/yunzai-widgets/public_api.mjs +6 -6
  27. package/esm2022/yunzai-widgets/yunzai-clear-storage.component.mjs +46 -46
  28. package/esm2022/yunzai-widgets/yunzai-fullscreen.component.mjs +46 -46
  29. package/esm2022/yunzai-widgets/yunzai-i18n.component.mjs +138 -138
  30. package/esm2022/yunzai-widgets/yunzai-notify.component.mjs +179 -179
  31. package/esm2022/yunzai-widgets/yunzai-user.component.mjs +119 -119
  32. package/esm2022/yunzai-widgets/yunzai-widget.module.mjs +61 -61
  33. package/esm2022/yunzai-widgets/yunzai-widgets.mjs +4 -4
  34. package/fesm2022/bis.mjs +559 -559
  35. package/fesm2022/config.mjs +21 -21
  36. package/fesm2022/layout.mjs +1097 -1083
  37. package/fesm2022/layout.mjs.map +1 -1
  38. package/fesm2022/yunzai-widgets.mjs +563 -563
  39. package/index.d.ts +5 -5
  40. package/index.less +1 -1
  41. package/layout/index.d.ts +5 -5
  42. package/layout/layout-basic.component.d.ts +54 -54
  43. package/layout/layout-nav-application.component.d.ts +26 -26
  44. package/layout/layout-nav-group.component.d.ts +14 -14
  45. package/layout/layout-nav-tile.component.d.ts +5 -5
  46. package/layout/layout.module.d.ts +18 -18
  47. package/layout/public_api.d.ts +5 -5
  48. package/layout/style/index.less +181 -182
  49. package/package.json +68 -68
  50. package/public_api.d.ts +8 -8
  51. package/src/bis.module.d.ts +8 -8
  52. package/src/helper.d.ts +16 -16
  53. package/src/provide.d.ts +2 -2
  54. package/src/refresh-token.d.ts +6 -6
  55. package/src/startup.service.d.ts +24 -24
  56. package/src/yunzai-act.guard.d.ts +20 -20
  57. package/src/yunzai-analysis-addon.guard.d.ts +26 -26
  58. package/src/yunzai-default.interceptor.d.ts +2 -2
  59. package/theme-compact.less +3 -3
  60. package/theme-dark.less +46 -46
  61. package/theme-default.less +48 -48
  62. package/theme-variable.less +1 -0
  63. package/yunzai-widgets/index.d.ts +5 -5
  64. package/yunzai-widgets/public_api.d.ts +6 -6
  65. package/yunzai-widgets/yunzai-clear-storage.component.d.ts +8 -8
  66. package/yunzai-widgets/yunzai-fullscreen.component.d.ts +8 -8
  67. package/yunzai-widgets/yunzai-i18n.component.d.ts +19 -19
  68. package/yunzai-widgets/yunzai-notify.component.d.ts +25 -25
  69. package/yunzai-widgets/yunzai-user.component.d.ts +22 -22
  70. package/yunzai-widgets/yunzai-widget.module.d.ts +18 -18
@@ -1,45 +1,45 @@
1
- import { inject } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { YA_SERVICE_TOKEN } from '@yelon/auth';
4
- import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
5
- import { NzNotificationService } from 'ng-zorro-antd/notification';
6
- export const CODEMESSAGE = {
7
- 200: '服务器成功返回请求的数据。',
8
- 201: '新建或修改数据成功。',
9
- 202: '一个请求已经进入后台排队(异步任务)。',
10
- 204: '删除数据成功。',
11
- 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
12
- 401: '用户没有权限(令牌、用户名、密码错误)。',
13
- 403: '用户得到授权,但是访问是被禁止的。',
14
- 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
15
- 406: '请求的格式不可得。',
16
- 410: '请求的资源被永久删除,且不会再得到的。',
17
- 422: '当创建一个对象时,发生一个验证错误。',
18
- 500: '服务器发生错误,请检查服务器。',
19
- 502: '网关错误。',
20
- 503: '服务不可用,服务器暂时过载或维护。',
21
- 504: '网关超时。'
22
- };
23
- export function getAdditionalHeaders(headers) {
24
- const res = {};
25
- const lang = inject(YUNZAI_I18N_TOKEN).currentLang;
26
- if (!headers?.has('Accept-Language') && lang) {
27
- res['Accept-Language'] = lang;
28
- }
29
- return res;
30
- }
31
- export function checkStatus(injector, ev) {
32
- if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {
33
- return;
34
- }
35
- const errortext = CODEMESSAGE[ev.status] || ev.statusText;
36
- injector.get(NzNotificationService).error(`请求错误 ${ev.status}: ${ev.url}`, errortext);
37
- }
38
- export function goTo(injector, url) {
39
- setTimeout(() => injector.get(Router).navigateByUrl(url));
40
- }
41
- export function toLogin(injector) {
42
- injector.get(NzNotificationService).error(`未登录或登录已过期,请重新登录。`, ``);
43
- goTo(injector, injector.get(YA_SERVICE_TOKEN).login_url);
44
- }
1
+ import { inject } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { YA_SERVICE_TOKEN } from '@yelon/auth';
4
+ import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
5
+ import { NzNotificationService } from 'ng-zorro-antd/notification';
6
+ export const CODEMESSAGE = {
7
+ 200: '服务器成功返回请求的数据。',
8
+ 201: '新建或修改数据成功。',
9
+ 202: '一个请求已经进入后台排队(异步任务)。',
10
+ 204: '删除数据成功。',
11
+ 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
12
+ 401: '用户没有权限(令牌、用户名、密码错误)。',
13
+ 403: '用户得到授权,但是访问是被禁止的。',
14
+ 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
15
+ 406: '请求的格式不可得。',
16
+ 410: '请求的资源被永久删除,且不会再得到的。',
17
+ 422: '当创建一个对象时,发生一个验证错误。',
18
+ 500: '服务器发生错误,请检查服务器。',
19
+ 502: '网关错误。',
20
+ 503: '服务不可用,服务器暂时过载或维护。',
21
+ 504: '网关超时。'
22
+ };
23
+ export function getAdditionalHeaders(headers) {
24
+ const res = {};
25
+ const lang = inject(YUNZAI_I18N_TOKEN).currentLang;
26
+ if (!headers?.has('Accept-Language') && lang) {
27
+ res['Accept-Language'] = lang;
28
+ }
29
+ return res;
30
+ }
31
+ export function checkStatus(injector, ev) {
32
+ if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {
33
+ return;
34
+ }
35
+ const errortext = CODEMESSAGE[ev.status] || ev.statusText;
36
+ injector.get(NzNotificationService).error(`请求错误 ${ev.status}: ${ev.url}`, errortext);
37
+ }
38
+ export function goTo(injector, url) {
39
+ setTimeout(() => injector.get(Router).navigateByUrl(url));
40
+ }
41
+ export function toLogin(injector) {
42
+ injector.get(NzNotificationService).error(`未登录或登录已过期,请重新登录。`, ``);
43
+ goTo(injector, injector.get(YA_SERVICE_TOKEN).login_url);
44
+ }
45
45
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL3NyYy9oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQThCO0lBQ3BELEdBQUcsRUFBRSxlQUFlO0lBQ3BCLEdBQUcsRUFBRSxZQUFZO0lBQ2pCLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUIsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsNkJBQTZCO0lBQ2xDLEdBQUcsRUFBRSxzQkFBc0I7SUFDM0IsR0FBRyxFQUFFLG1CQUFtQjtJQUN4QixHQUFHLEVBQUUsNEJBQTRCO0lBQ2pDLEdBQUcsRUFBRSxXQUFXO0lBQ2hCLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUIsR0FBRyxFQUFFLG9CQUFvQjtJQUN6QixHQUFHLEVBQUUsaUJBQWlCO0lBQ3RCLEdBQUcsRUFBRSxPQUFPO0lBQ1osR0FBRyxFQUFFLG1CQUFtQjtJQUN4QixHQUFHLEVBQUUsT0FBTztDQUNiLENBQUM7QUFFRixNQUFNLFVBQVUsb0JBQW9CLENBQUMsT0FBcUI7SUFDeEQsTUFBTSxHQUFHLEdBQStCLEVBQUUsQ0FBQztJQUMzQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDbkQsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsUUFBa0IsRUFBRSxFQUFvQjtJQUNsRSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQy9ELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQzFELFFBQVEsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RixDQUFDO0FBT0QsTUFBTSxVQUFVLElBQUksQ0FBQyxRQUFrQixFQUFFLEdBQVc7SUFDbEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsUUFBa0I7SUFDeEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFVLENBQUMsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZUJhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBZQV9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnQHllbG9uL2F1dGgnO1xuaW1wb3J0IHsgWVVOWkFJX0kxOE5fVE9LRU4gfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE56Tm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvbm90aWZpY2F0aW9uJztcblxuZXhwb3J0IGNvbnN0IENPREVNRVNTQUdFOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge1xuICAyMDA6ICfmnI3liqHlmajmiJDlip/ov5Tlm57or7fmsYLnmoTmlbDmja7jgIInLFxuICAyMDE6ICfmlrDlu7rmiJbkv67mlLnmlbDmja7miJDlip/jgIInLFxuICAyMDI6ICfkuIDkuKror7fmsYLlt7Lnu4/ov5vlhaXlkI7lj7DmjpLpmJ/vvIjlvILmraXku7vliqHvvInjgIInLFxuICAyMDQ6ICfliKDpmaTmlbDmja7miJDlip/jgIInLFxuICA0MDA6ICflj5Hlh7rnmoTor7fmsYLmnInplJnor6/vvIzmnI3liqHlmajmsqHmnInov5vooYzmlrDlu7rmiJbkv67mlLnmlbDmja7nmoTmk43kvZzjgIInLFxuICA0MDE6ICfnlKjmiLfmsqHmnInmnYPpmZDvvIjku6TniYzjgIHnlKjmiLflkI3jgIHlr4bnoIHplJnor6/vvInjgIInLFxuICA0MDM6ICfnlKjmiLflvpfliLDmjojmnYPvvIzkvYbmmK/orr/pl67mmK/ooqvnpoHmraLnmoTjgIInLFxuICA0MDQ6ICflj5Hlh7rnmoTor7fmsYLpkojlr7nnmoTmmK/kuI3lrZjlnKjnmoTorrDlvZXvvIzmnI3liqHlmajmsqHmnInov5vooYzmk43kvZzjgIInLFxuICA0MDY6ICfor7fmsYLnmoTmoLzlvI/kuI3lj6/lvpfjgIInLFxuICA0MTA6ICfor7fmsYLnmoTotYTmupDooqvmsLjkuYXliKDpmaTvvIzkuJTkuI3kvJrlho3lvpfliLDnmoTjgIInLFxuICA0MjI6ICflvZPliJvlu7rkuIDkuKrlr7nosaHml7bvvIzlj5HnlJ/kuIDkuKrpqozor4HplJnor6/jgIInLFxuICA1MDA6ICfmnI3liqHlmajlj5HnlJ/plJnor6/vvIzor7fmo4Dmn6XmnI3liqHlmajjgIInLFxuICA1MDI6ICfnvZHlhbPplJnor6/jgIInLFxuICA1MDM6ICfmnI3liqHkuI3lj6/nlKjvvIzmnI3liqHlmajmmoLml7bov4fovb3miJbnu7TmiqTjgIInLFxuICA1MDQ6ICfnvZHlhbPotoXml7bjgIInXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkaXRpb25hbEhlYWRlcnMoaGVhZGVycz86IEh0dHBIZWFkZXJzKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICBjb25zdCByZXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIGNvbnN0IGxhbmcgPSBpbmplY3QoWVVOWkFJX0kxOE5fVE9LRU4pLmN1cnJlbnRMYW5nO1xuICBpZiAoIWhlYWRlcnM/LmhhcygnQWNjZXB0LUxhbmd1YWdlJykgJiYgbGFuZykge1xuICAgIHJlc1snQWNjZXB0LUxhbmd1YWdlJ10gPSBsYW5nO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU3RhdHVzKGluamVjdG9yOiBJbmplY3RvciwgZXY6IEh0dHBSZXNwb25zZUJhc2UpOiB2b2lkIHtcbiAgaWYgKChldi5zdGF0dXMgPj0gMjAwICYmIGV2LnN0YXR1cyA8IDMwMCkgfHwgZXYuc3RhdHVzID09PSA0MDEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXJyb3J0ZXh0ID0gQ09ERU1FU1NBR0VbZXYuc3RhdHVzXSB8fCBldi5zdGF0dXNUZXh0O1xuICBpbmplY3Rvci5nZXQoTnpOb3RpZmljYXRpb25TZXJ2aWNlKS5lcnJvcihg6K+35rGC6ZSZ6K+vICR7ZXYuc3RhdHVzfTogJHtldi51cmx9YCwgZXJyb3J0ZXh0KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZVRocm93SHR0cEVycm9yIHtcbiAgYm9keTogTnpTYWZlQW55O1xuICBfdGhyb3c6IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnb1RvKGluamVjdG9yOiBJbmplY3RvciwgdXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgc2V0VGltZW91dCgoKSA9PiBpbmplY3Rvci5nZXQoUm91dGVyKS5uYXZpZ2F0ZUJ5VXJsKHVybCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Mb2dpbihpbmplY3RvcjogSW5qZWN0b3IpOiB2b2lkIHtcbiAgaW5qZWN0b3IuZ2V0KE56Tm90aWZpY2F0aW9uU2VydmljZSkuZXJyb3IoYOacqueZu+W9leaIlueZu+W9leW3sui/h+acn++8jOivt+mHjeaWsOeZu+W9leOAgmAsIGBgKTtcbiAgZ29UbyhpbmplY3RvciwgaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pLmxvZ2luX3VybCEpO1xufVxuIl19
@@ -1,8 +1,8 @@
1
- import { importProvidersFrom, makeEnvironmentProviders } from '@angular/core';
2
- import { BisModule } from './bis.module';
3
- export function provideYunzaiBis() {
4
- const provides = [];
5
- provides.push(importProvidersFrom(BisModule));
6
- return makeEnvironmentProviders(provides);
7
- }
1
+ import { importProvidersFrom, makeEnvironmentProviders } from '@angular/core';
2
+ import { BisModule } from './bis.module';
3
+ export function provideYunzaiBis() {
4
+ const provides = [];
5
+ provides.push(importProvidersFrom(BisModule));
6
+ return makeEnvironmentProviders(provides);
7
+ }
8
8
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9zcmMvcHJvdmlkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixNQUFNLFFBQVEsR0FBMkIsRUFBRSxDQUFDO0lBQzVDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM5QyxPQUFPLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgaW1wb3J0UHJvdmlkZXJzRnJvbSwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJpc01vZHVsZSB9IGZyb20gJy4vYmlzLm1vZHVsZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlWXVuemFpQmlzKCk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3QgcHJvdmlkZXM6IEVudmlyb25tZW50UHJvdmlkZXJzW10gPSBbXTtcbiAgcHJvdmlkZXMucHVzaChpbXBvcnRQcm92aWRlcnNGcm9tKEJpc01vZHVsZSkpO1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKHByb3ZpZGVzKTtcbn1cbiJdfQ==
@@ -1,79 +1,79 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { APP_INITIALIZER, Injector } from '@angular/core';
3
- import { BehaviorSubject, catchError, filter, switchMap, take, throwError } from 'rxjs';
4
- import { YA_SERVICE_TOKEN } from '@yelon/auth';
5
- import { log } from '@yelon/util';
6
- import { toLogin } from './helper';
7
- let refreshToking = false;
8
- let refreshToken$ = new BehaviorSubject(null);
9
- export const tryRefreshToken = (injector, ev, req, next) => {
10
- // 连刷新Token的请求都错了,那就是真错了
11
- if (['/auth/oauth/getOrCreateToken/webapp'].some(url => req.url.includes(url))) {
12
- toLogin(injector);
13
- return throwError(() => ev);
14
- }
15
- // 2、如果 `refreshToking` 为 `true` 表示已经在请求刷新 Token 中,后续所有请求转入等待状态,直至结果返回后再重新发起请求
16
- if (refreshToking) {
17
- return refreshToken$.pipe(filter(v => !!v), take(1), switchMap(() => next(reAttachToken(injector, req))));
18
- }
19
- // 3、尝试调用刷新 Token
20
- refreshToking = true;
21
- refreshToken$.next(null);
22
- return refreshTokenRequest(injector).pipe(switchMap(res => {
23
- // 通知后续请求继续执行
24
- refreshToking = false;
25
- refreshToken$.next(res);
26
- // 重新保存新 token
27
- injector.get(YA_SERVICE_TOKEN).set(res);
28
- // 重新发起请求
29
- return next(reAttachToken(injector, req));
30
- }), catchError(err => {
31
- refreshToking = false;
32
- toLogin(injector);
33
- return throwError(() => err);
34
- }));
35
- };
36
- function reAttachToken(injector, req) {
37
- const token = injector.get(YA_SERVICE_TOKEN).get()?.access_token;
38
- return req.clone({
39
- setHeaders: {
40
- Authorization: `Bearer ${token}`
41
- }
42
- });
43
- }
44
- function refreshTokenRequest(injector) {
45
- const model = injector.get(YA_SERVICE_TOKEN).get();
46
- const form = new FormData();
47
- form.set('refresh_token', model?.refresh_token);
48
- form.set('grant_type', 'refresh_token');
49
- form.set('scope', 'webapp');
50
- return injector.get(HttpClient).post(`/auth/oauth/getOrCreateToken/webapp`, form);
51
- }
52
- function buildAuthRefresh(injector) {
53
- const tokenSrv = injector.get(YA_SERVICE_TOKEN);
54
- tokenSrv.refresh
55
- .pipe(filter(() => !refreshToking), switchMap(res => {
56
- log(res);
57
- refreshToking = true;
58
- return refreshTokenRequest(injector);
59
- }))
60
- .subscribe({
61
- next: res => {
62
- res.expired = +new Date() + 1000 * 60 * 5;
63
- refreshToking = false;
64
- tokenSrv.set(res);
65
- },
66
- error: () => toLogin(injector)
67
- });
68
- }
69
- export function provideYunzaiBindAuthRefresh() {
70
- return [
71
- {
72
- provide: APP_INITIALIZER,
73
- useFactory: (injector) => () => buildAuthRefresh(injector),
74
- deps: [Injector],
75
- multi: true
76
- }
77
- ];
78
- }
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { APP_INITIALIZER, Injector } from '@angular/core';
3
+ import { BehaviorSubject, catchError, filter, switchMap, take, throwError } from 'rxjs';
4
+ import { YA_SERVICE_TOKEN } from '@yelon/auth';
5
+ import { log } from '@yelon/util';
6
+ import { toLogin } from './helper';
7
+ let refreshToking = false;
8
+ let refreshToken$ = new BehaviorSubject(null);
9
+ export const tryRefreshToken = (injector, ev, req, next) => {
10
+ // 连刷新Token的请求都错了,那就是真错了
11
+ if (['/auth/oauth/getOrCreateToken/webapp'].some(url => req.url.includes(url))) {
12
+ toLogin(injector);
13
+ return throwError(() => ev);
14
+ }
15
+ // 2、如果 `refreshToking` 为 `true` 表示已经在请求刷新 Token 中,后续所有请求转入等待状态,直至结果返回后再重新发起请求
16
+ if (refreshToking) {
17
+ return refreshToken$.pipe(filter(v => !!v), take(1), switchMap(() => next(reAttachToken(injector, req))));
18
+ }
19
+ // 3、尝试调用刷新 Token
20
+ refreshToking = true;
21
+ refreshToken$.next(null);
22
+ return refreshTokenRequest(injector).pipe(switchMap(res => {
23
+ // 通知后续请求继续执行
24
+ refreshToking = false;
25
+ refreshToken$.next(res);
26
+ // 重新保存新 token
27
+ injector.get(YA_SERVICE_TOKEN).set(res);
28
+ // 重新发起请求
29
+ return next(reAttachToken(injector, req));
30
+ }), catchError(err => {
31
+ refreshToking = false;
32
+ toLogin(injector);
33
+ return throwError(() => err);
34
+ }));
35
+ };
36
+ function reAttachToken(injector, req) {
37
+ const token = injector.get(YA_SERVICE_TOKEN).get()?.access_token;
38
+ return req.clone({
39
+ setHeaders: {
40
+ Authorization: `Bearer ${token}`
41
+ }
42
+ });
43
+ }
44
+ function refreshTokenRequest(injector) {
45
+ const model = injector.get(YA_SERVICE_TOKEN).get();
46
+ const form = new FormData();
47
+ form.set('refresh_token', model?.refresh_token);
48
+ form.set('grant_type', 'refresh_token');
49
+ form.set('scope', 'webapp');
50
+ return injector.get(HttpClient).post(`/auth/oauth/getOrCreateToken/webapp`, form);
51
+ }
52
+ function buildAuthRefresh(injector) {
53
+ const tokenSrv = injector.get(YA_SERVICE_TOKEN);
54
+ tokenSrv.refresh
55
+ .pipe(filter(() => !refreshToking), switchMap(res => {
56
+ log(res);
57
+ refreshToking = true;
58
+ return refreshTokenRequest(injector);
59
+ }))
60
+ .subscribe({
61
+ next: res => {
62
+ res.expired = +new Date() + 1000 * 60 * 5;
63
+ refreshToking = false;
64
+ tokenSrv.set(res);
65
+ },
66
+ error: () => toLogin(injector)
67
+ });
68
+ }
69
+ export function provideYunzaiBindAuthRefresh() {
70
+ return [
71
+ {
72
+ provide: APP_INITIALIZER,
73
+ useFactory: (injector) => () => buildAuthRefresh(injector),
74
+ deps: [Injector],
75
+ multi: true
76
+ }
77
+ ];
78
+ }
79
79
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Jpcy9zcmMvcmVmcmVzaC10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnRCxNQUFNLHNCQUFzQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRW5DLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztBQUMxQixJQUFJLGFBQWEsR0FBK0IsSUFBSSxlQUFlLENBQVksSUFBSSxDQUFDLENBQUM7QUFFckYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQzdCLFFBQWtCLEVBQ2xCLEVBQW9CLEVBQ3BCLEdBQTJCLEVBQzNCLElBQW1CLEVBQ0ksRUFBRTtJQUN6Qix3QkFBd0I7SUFDeEIsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9FLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsOEVBQThFO0lBQzlFLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsT0FBTyxhQUFh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QUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUMvQixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLDRCQUE0QjtJQUMxQyxPQUFPO1FBQ0w7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7WUFDcEUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIYW5kbGVyRm4sIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2VCYXNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBJbmplY3RvciwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgZmlsdGVyLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRha2UsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgWUFfU0VSVklDRV9UT0tFTiB9IGZyb20gJ0B5ZWxvbi9hdXRoJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJ0B5ZWxvbi91dGlsJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IHRvTG9naW4gfSBmcm9tICcuL2hlbHBlcic7XG5cbmxldCByZWZyZXNoVG9raW5nID0gZmFsc2U7XG5sZXQgcmVmcmVzaFRva2VuJDogQmVoYXZpb3JTdWJqZWN0PE56U2FmZUFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE56U2FmZUFueT4obnVsbCk7XG5cbmV4cG9ydCBjb25zdCB0cnlSZWZyZXNoVG9rZW4gPSAoXG4gIGluamVjdG9yOiBJbmplY3RvcixcbiAgZXY6IEh0dHBSZXNwb25zZUJhc2UsXG4gIHJlcTogSHR0cFJlcXVlc3Q8TnpTYWZlQW55PixcbiAgbmV4dDogSHR0cEhhbmRsZXJGblxuKTogT2JzZXJ2YWJsZTxOelNhZmVBbnk+ID0+IHtcbiAgLy8g6L+e5Yi35pawVG9rZW7nmoTor7fmsYLpg73plJnkuobvvIzpgqPlsLHmmK/nnJ/plJnkuoZcbiAgaWYgKFsnL2F1dGgvb2F1dGgvZ2V0T3JDcmVhdGVUb2tlbi93ZWJhcHAnXS5zb21lKHVybCA9PiByZXEudXJsLmluY2x1ZGVzKHVybCkpKSB7XG4gICAgdG9Mb2dpbihpbmplY3Rvcik7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXYpO1xuICB9XG4gIC8vIDLjgIHlpoLmnpwgYHJlZnJlc2hUb2tpbmdgIOS4uiBgdHJ1ZWAg6KGo56S65bey57uP5Zyo6K+35rGC5Yi35pawIFRva2VuIOS4re+8jOWQjue7reaJgOacieivt+axgui9rOWFpeetieW+heeKtuaAge+8jOebtOiHs+e7k+aenOi/lOWbnuWQjuWGjemHjeaWsOWPkei1t+ivt+axglxuICBpZiAocmVmcmVzaFRva2luZykge1xuICAgIHJldHVybiByZWZyZXNoVG9rZW4kLnBpcGUoXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiBuZXh0KHJlQXR0YWNoVG9rZW4oaW5qZWN0b3IsIHJlcSkpKVxuICAgICk7XG4gIH1cbiAgLy8gM+OAgeWwneivleiwg+eUqOWIt+aWsCBUb2tlblxuICByZWZyZXNoVG9raW5nID0gdHJ1ZTtcbiAgcmVmcmVzaFRva2VuJC5uZXh0KG51bGwpO1xuXG4gIHJldHVybiByZWZyZXNoVG9rZW5SZXF1ZXN0KGluamVjdG9yKS5waXBlKFxuICAgIHN3aXRjaE1hcChyZXMgPT4ge1xuICAgICAgLy8g6YCa55+l5ZCO57ut6K+35rGC57un57ut5omn6KGMXG4gICAgICByZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICByZWZyZXNoVG9rZW4kLm5leHQocmVzKTtcbiAgICAgIC8vIOmHjeaWsOS/neWtmOaWsCB0b2tlblxuICAgICAgaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pLnNldChyZXMpO1xuICAgICAgLy8g6YeN5paw5Y+R6LW36K+35rGCXG4gICAgICByZXR1cm4gbmV4dChyZUF0dGFjaFRva2VuKGluamVjdG9yLCByZXEpKTtcbiAgICB9KSxcbiAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICByZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICB0b0xvZ2luKGluamVjdG9yKTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgfSlcbiAgKTtcbn07XG5cbmZ1bmN0aW9uIHJlQXR0YWNoVG9rZW4oaW5qZWN0b3I6IEluamVjdG9yLCByZXE6IEh0dHBSZXF1ZXN0PE56U2FmZUFueT4pOiBIdHRwUmVxdWVzdDxOelNhZmVBbnk+IHtcbiAgY29uc3QgdG9rZW4gPSBpbmplY3Rvci5nZXQoWUFfU0VSVklDRV9UT0tFTikuZ2V0KCk/LmFjY2Vzc190b2tlbjtcbiAgcmV0dXJuIHJlcS5jbG9uZSh7XG4gICAgc2V0SGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWBcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoVG9rZW5SZXF1ZXN0KGluamVjdG9yOiBJbmplY3Rvcik6IE9ic2VydmFibGU8TnpTYWZlQW55PiB7XG4gIGNvbnN0IG1vZGVsID0gaW5qZWN0b3IuZ2V0KFlBX1NFUlZJQ0VfVE9LRU4pLmdldCgpO1xuICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gIGZvcm0uc2V0KCdyZWZyZXNoX3Rva2VuJywgbW9kZWw/LnJlZnJlc2hfdG9rZW4hKTtcbiAgZm9ybS5zZXQoJ2dyYW50X3R5cGUnLCAncmVmcmVzaF90b2tlbicpO1xuICBmb3JtLnNldCgnc2NvcGUnLCAnd2ViYXBwJyk7XG4gIHJldHVybiBpbmplY3Rvci5nZXQoSHR0cENsaWVudCkucG9zdChgL2F1dGgvb2F1dGgvZ2V0T3JDcmVhdGVUb2tlbi93ZWJhcHBgLCBmb3JtKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBdXRoUmVmcmVzaChpbmplY3RvcjogSW5qZWN0b3IpOiB2b2lkIHtcbiAgY29uc3QgdG9rZW5TcnYgPSBpbmplY3Rvci5nZXQoWUFfU0VSVklDRV9UT0tFTik7XG4gIHRva2VuU3J2LnJlZnJlc2hcbiAgICAucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiAhcmVmcmVzaFRva2luZyksXG4gICAgICBzd2l0Y2hNYXAocmVzID0+IHtcbiAgICAgICAgbG9nKHJlcyk7XG4gICAgICAgIHJlZnJlc2hUb2tpbmcgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVmcmVzaFRva2VuUmVxdWVzdChpbmplY3Rvcik7XG4gICAgICB9KVxuICAgIClcbiAgICAuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgIHJlcy5leHBpcmVkID0gK25ldyBEYXRlKCkgKyAxMDAwICogNjAgKiA1O1xuICAgICAgICByZWZyZXNoVG9raW5nID0gZmFsc2U7XG4gICAgICAgIHRva2VuU3J2LnNldChyZXMpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB0b0xvZ2luKGluamVjdG9yKVxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVl1bnphaUJpbmRBdXRoUmVmcmVzaCgpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiAoaW5qZWN0b3I6IEluamVjdG9yKSA9PiAoKSA9PiBidWlsZEF1dGhSZWZyZXNoKGluamVjdG9yKSxcbiAgICAgIGRlcHM6IFtJbmplY3Rvcl0sXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXTtcbn1cbiJdfQ==