@lumal/core 0.0.1-beta → 0.0.3-beta

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 (86) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/LICENSE +21 -21
  3. package/README.md +22 -13
  4. package/dist/auth.cjs +1 -1
  5. package/dist/auth.js +13 -29
  6. package/dist/components-DCp2KGvo.js +2254 -0
  7. package/dist/components-oqKxhgFp.cjs +2 -0
  8. package/dist/components.cjs +1 -1
  9. package/dist/components.js +3 -3
  10. package/dist/{composables-C9EuCUjj.js → composables-BxZG0_RZ.js} +53 -40
  11. package/dist/composables-Dsl-todB.cjs +1 -0
  12. package/dist/composables.cjs +1 -1
  13. package/dist/composables.js +18 -17
  14. package/dist/context-Bdx-ZJbt.js +13 -0
  15. package/dist/context-CWQ1OO16.cjs +1 -0
  16. package/dist/core.css +1 -1
  17. package/dist/createLumalApp-BxQL77Qt.js +38 -0
  18. package/dist/createLumalApp-C5o7gAlu.cjs +1 -0
  19. package/dist/{dictionary-B7tsaVqB.js → dictionary-DnRiNaKi.js} +1 -1
  20. package/dist/{dictionary-ClEWtQCU.cjs → dictionary-Dt70z10M.cjs} +1 -1
  21. package/dist/dictionary.cjs +1 -1
  22. package/dist/dictionary.js +3 -3
  23. package/dist/index.cjs +1 -1
  24. package/dist/index.js +15 -58
  25. package/dist/{layout-C8H9wuQa.js → layout-B7yJhQXN.js} +473 -429
  26. package/dist/layout-BgyM9WJi.cjs +1 -0
  27. package/dist/layout.cjs +1 -1
  28. package/dist/layout.js +1 -1
  29. package/dist/minimal.cjs +1 -0
  30. package/dist/minimal.js +10 -0
  31. package/dist/{permission-CCkqvnWg.js → permission-CHw9eXd8.js} +24 -34
  32. package/dist/permission-CoqteYAi.cjs +1 -0
  33. package/dist/permission.cjs +1 -1
  34. package/dist/permission.js +4 -3
  35. package/dist/request.cjs +1 -1
  36. package/dist/request.js +103 -80
  37. package/dist/router.cjs +1 -1
  38. package/dist/router.js +24 -21
  39. package/dist/src/app/createLumalAdmin.d.ts +1 -1
  40. package/dist/src/app/createLumalAdmin.d.ts.map +1 -1
  41. package/dist/src/app/createLumalApp.d.ts +7 -0
  42. package/dist/src/app/createLumalApp.d.ts.map +1 -0
  43. package/dist/src/app/types.d.ts +5 -0
  44. package/dist/src/app/types.d.ts.map +1 -1
  45. package/dist/src/auth/createAuthSession.d.ts.map +1 -1
  46. package/dist/src/components/crud-table/LumalCrudTable.vue.d.ts.map +1 -1
  47. package/dist/src/components/crud-table/useCrudData.d.ts.map +1 -1
  48. package/dist/src/components/crud-table/useCrudDialog.d.ts +1 -1
  49. package/dist/src/components/crud-table/useCrudDialog.d.ts.map +1 -1
  50. package/dist/src/components/schema-form/LumalSchemaForm.vue.d.ts.map +1 -1
  51. package/dist/src/components/schema-table/LumalSchemaTable.vue.d.ts.map +1 -1
  52. package/dist/src/components/schema-table/cell.d.ts +1 -1
  53. package/dist/src/components/schema-table/cell.d.ts.map +1 -1
  54. package/dist/src/composables/usePagination.d.ts.map +1 -1
  55. package/dist/src/dictionary/index.d.ts +1 -1
  56. package/dist/src/dictionary/index.d.ts.map +1 -1
  57. package/dist/src/dictionary/normalize.d.ts +3 -1
  58. package/dist/src/dictionary/normalize.d.ts.map +1 -1
  59. package/dist/src/dictionary/store.d.ts.map +1 -1
  60. package/dist/src/layout/LumalGlobalSearch.vue.d.ts.map +1 -1
  61. package/dist/src/layout/LumalLayout.vue.d.ts +6 -2
  62. package/dist/src/layout/LumalLayout.vue.d.ts.map +1 -1
  63. package/dist/src/layout/LumalRouterView.vue.d.ts +2 -0
  64. package/dist/src/layout/LumalRouterView.vue.d.ts.map +1 -1
  65. package/dist/src/layout/LumalTabs.vue.d.ts.map +1 -1
  66. package/dist/src/minimal/index.d.ts +5 -0
  67. package/dist/src/minimal/index.d.ts.map +1 -0
  68. package/dist/src/request/client.d.ts.map +1 -1
  69. package/dist/src/request/types.d.ts +8 -2
  70. package/dist/src/request/types.d.ts.map +1 -1
  71. package/dist/src/router/index.d.ts.map +1 -1
  72. package/dist/src/utils/index.d.ts +1 -1
  73. package/dist/src/utils/index.d.ts.map +1 -1
  74. package/dist/src/utils/storage.d.ts +2 -0
  75. package/dist/src/utils/storage.d.ts.map +1 -1
  76. package/dist/storage-CCBa7Qh8.cjs +1 -0
  77. package/dist/storage-CorgkMJU.js +41 -0
  78. package/dist/utils.cjs +1 -1
  79. package/dist/utils.js +32 -54
  80. package/package.json +9 -3
  81. package/theme-chalk/index.scss +2 -2
  82. package/dist/components-DJiHYQQB.cjs +0 -2
  83. package/dist/components-DYmKh-eF.js +0 -2206
  84. package/dist/composables-C4twj5Ov.cjs +0 -1
  85. package/dist/layout-ZnyG9X3N.cjs +0 -1
  86. package/dist/permission-6sXtjGMS.cjs +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,29 @@
1
+ # @lumal/core
2
+
3
+ ## 0.0.3-beta (2026-10-16)
4
+
5
+ ### Minor Changes
6
+
7
+ - 新增 `@lumal/core/minimal`,不引用默认 UI 注册表,按需接入组件与插件,字典默认关闭。
8
+ - 请求缓存增加身份与租户隔离、显式作用域及 `clearCache()`;默认仅缓存 GET,非 GET 需要显式 key。
9
+ - `LumalRouterView` 增加 `cacheKeys`,打通标签关闭和按标签刷新;缓存默认最多 20 项,并遵守 `meta.keepAlive=false`。
10
+
11
+ ### Patch Changes
12
+
13
+ - 修复字典删除、清空和手动赋值后的旧请求回填、错误与 loading 竞态。
14
+ - 路由进度和 loading 改为反映真实导航状态;修复 Esc 退出最大化及新窗口 history/base 地址。
15
+ - 标签快照先恢复后持久化、恢复时限量,卸载不再写回已清理快照。
16
+ - 全局搜索补齐弹窗焦点约束与恢复,内存 Storage 兜底收敛为共享工具。
17
+
18
+ ## 0.0.2-beta (2026-08-01)
19
+
20
+ ### Minor Changes
21
+
22
+ - Add the unified static and remote menu route runtime, navigation discovery components, permission access control, and persisted navigation and font-size preferences. Nested route guards enforce ancestor permissions and roles, and generated admin projects now use the same menu runtime.
23
+ - Expose live selected rows, selected row keys, and a shared clear-selection action through the CRUD table toolbar actions slot.
24
+
25
+ ### Patch Changes
26
+
27
+ - 让 mixed-nav 顶级目录默认只切换侧栏分组,并提供可配置的子菜单自动激活;同时保留后端菜单重定向,避免首个子项为外链时误跳转和菜单高亮错位。
28
+ - 修复应用插件安装顺序和脚手架发布后的依赖版本同步,并统一多包版本发布策略。
29
+ - 优化后台布局的面包屑落点、侧栏退场动画和普通路由页面自然高度,避免宽屏页面内容被强制拉伸。
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Lumal contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Lumal contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,16 +1,25 @@
1
- # @lumal/core
2
-
3
- Lumal 后台核心包,提供应用安装器、布局、路由菜单辅助、权限、请求、主题和基础组件。
4
-
5
- ```ts
6
- import { createLumalAdmin } from '@lumal/core'
7
- import { LumalCrudTable, LumalSchemaForm } from '@lumal/core/components'
8
- import '@lumal/core/theme-chalk/index.scss'
9
- import '@lumal/core/style.css'
10
- ```
11
-
1
+ # @lumal/core
2
+
3
+ Lumal 后台核心包,提供应用安装器、布局、路由菜单辅助、权限、请求、主题和基础组件。
4
+
5
+ ```ts
6
+ import { createLumalAdmin } from '@lumal/core'
7
+ import { LumalCrudTable, LumalSchemaForm } from '@lumal/core/components'
8
+ import '@lumal/core/theme-chalk/index.scss'
9
+ import '@lumal/core/style.css'
10
+ ```
11
+
12
12
  `createLumalAdmin` 支持 preset、异步 mount、应用侧 `router` / `pinia`、权限 Store 自动注入、Element Plus options 和选择性全局组件注册;这些依赖保持为 peer dependency,不会由 core 默认创建。
13
13
 
14
+ 纯服务或需要严格按需加载时,使用无默认 UI 注册表的轻入口:
15
+
16
+ ```ts
17
+ import { createLumalAdmin } from '@lumal/core/minimal'
18
+ await createLumalAdmin({ rootComponent: App }).mount('#app')
19
+ ```
20
+
21
+ 轻入口默认不安装字典,只接受显式 `components: { MyComponent }` 映射,不静态加载 Element Plus 或 Sortable。根入口的 `preset: 'minimal'` 只关闭默认注册,不是体积隔离边界。`@lumal/core/request` 等纯服务子入口也无需安装 Element Plus;UI 子入口仍需安装对应 peer 和样式。
22
+
14
23
  路由子入口提供 `createMenuRouteRuntime`,统一静态与远程菜单的校验、排序、组件解析和原子注册。布局子入口提供面包屑、全局搜索、菜单徽标与 `activeMenu` 高亮;主题偏好支持持久化动态标题、导航开关和 12-20px 全局字号。
15
-
16
- 详细说明见仓库文档 `docs/core-api.md`。
24
+
25
+ 详细说明见仓库文档 `docs/core-api.md`。
package/dist/auth.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e,t={}){let n=t.parseResponse?t.parseResponse(e):e;if(!n||typeof n!=`object`||Array.isArray(n))throw TypeError(`会话响应格式不正确`);let r=n,i=r[t.fieldNames?.accessToken??`accessToken`],a=r[t.fieldNames?.refreshToken??`refreshToken`],o=r[t.fieldNames?.expiresAt??`expiresAt`],s=o==null?void 0:Number(o);if(typeof i!=`string`||!i)throw TypeError(`会话响应缺少有效的 accessToken`);let c={accessToken:i,...typeof a==`string`&&a?{refreshToken:a}:{},...s!==void 0&&Number.isFinite(s)?{expiresAt:s}:{}};return t.transform?t.transform(c):c}function t(e,t={}){let n=t.loginPath??`/login`,r=t.redirectQueryKey??`redirect`,i=e.trim();if(!i||i===n)return n;let a=new URL(n,`http://lumal.local`);return a.searchParams.set(r,i),`${a.pathname}${a.search}`}function n(e,t){return{getToken:()=>e.getItem(t)??``,setToken:n=>{if(!n){e.removeItem(t);return}e.setItem(t,n)},clearToken:()=>{e.removeItem(t)}}}function r(){let e=new Map;return{get length(){return e.size},clear:()=>e.clear(),getItem:t=>e.has(t)?e.get(t):null,key:t=>Array.from(e.keys())[t]??null,removeItem:t=>{e.delete(t)},setItem:(t,n)=>{e.set(t,n)}}}function i(e){return e||(typeof localStorage<`u`?localStorage:r())}function a(e={}){let r=e.tokenKey??`lumal:token`,a=i(e.storage),o=n(a,r),s=n(a,e.refreshTokenKey??`${r}:refresh`),c=e.expiresAtKey??`${r}:expires-at`;function l(){o.clearToken(),s.clearToken(),a.removeItem(c)}function u(){let e=o.getToken();if(!e)return null;let t=s.getToken(),n=a.getItem(c),r=n===null?void 0:Number(n);return{accessToken:e,...t?{refreshToken:t}:{},...r!==void 0&&Number.isFinite(r)?{expiresAt:r}:{}}}function d(e){if(!e.accessToken){l();return}o.setToken(e.accessToken),s.setToken(e.refreshToken??``),e.expiresAt===void 0?a.removeItem(c):a.setItem(c,String(e.expiresAt))}function f(e){l(),o.setToken(e)}async function p(){l(),await e.onSessionExpired?.()}return{getToken:()=>o.getToken(),getRefreshToken:()=>s.getToken(),getSession:u,setToken:f,setSession:d,clearToken:l,isAuthenticated:()=>!!o.getToken(),handleSessionExpired:p,logout:p,resolveRedirect:(n,r)=>t(n,r??e.redirect)}}var o=`lumal:token`;function s(e,t=o){return n(e,t).getToken()}function c(e,t,r=o){n(e,r).setToken(t)}function l(e,t=o){n(e,t).clearToken()}var u=null;function d(e){u=e}function f(){u=null}async function p(){await u?.()}exports.DEFAULT_TOKEN_STORAGE_KEY=o,exports.clearSessionExpiredHandler=f,exports.clearStoredToken=l,exports.createAuthSession=a,exports.createTokenStorage=n,exports.getStoredToken=s,exports.handleSessionExpired=p,exports.parseAuthSession=e,exports.registerSessionExpiredHandler=d,exports.resolveLoginRedirect=t,exports.setStoredToken=c;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./storage-CCBa7Qh8.cjs");function t(e,t={}){let n=t.parseResponse?t.parseResponse(e):e;if(!n||typeof n!=`object`||Array.isArray(n))throw TypeError(`会话响应格式不正确`);let r=n,i=r[t.fieldNames?.accessToken??`accessToken`],a=r[t.fieldNames?.refreshToken??`refreshToken`],o=r[t.fieldNames?.expiresAt??`expiresAt`],s=o==null?void 0:Number(o);if(typeof i!=`string`||!i)throw TypeError(`会话响应缺少有效的 accessToken`);let c={accessToken:i,...typeof a==`string`&&a?{refreshToken:a}:{},...s!==void 0&&Number.isFinite(s)?{expiresAt:s}:{}};return t.transform?t.transform(c):c}function n(e,t={}){let n=t.loginPath??`/login`,r=t.redirectQueryKey??`redirect`,i=e.trim();if(!i||i===n)return n;let a=new URL(n,`http://lumal.local`);return a.searchParams.set(r,i),`${a.pathname}${a.search}`}function r(e,t){return{getToken:()=>e.getItem(t)??``,setToken:n=>{if(!n){e.removeItem(t);return}e.setItem(t,n)},clearToken:()=>{e.removeItem(t)}}}function i(t){return t||(typeof localStorage<`u`?localStorage:e.t())}function a(e={}){let t=e.tokenKey??`lumal:token`,a=i(e.storage),o=r(a,t),s=r(a,e.refreshTokenKey??`${t}:refresh`),c=e.expiresAtKey??`${t}:expires-at`;function l(){o.clearToken(),s.clearToken(),a.removeItem(c)}function u(){let e=o.getToken();if(!e)return null;let t=s.getToken(),n=a.getItem(c),r=n===null?void 0:Number(n);return{accessToken:e,...t?{refreshToken:t}:{},...r!==void 0&&Number.isFinite(r)?{expiresAt:r}:{}}}function d(e){if(!e.accessToken){l();return}o.setToken(e.accessToken),s.setToken(e.refreshToken??``),e.expiresAt===void 0?a.removeItem(c):a.setItem(c,String(e.expiresAt))}function f(e){l(),o.setToken(e)}async function p(){l(),await e.onSessionExpired?.()}return{getToken:()=>o.getToken(),getRefreshToken:()=>s.getToken(),getSession:u,setToken:f,setSession:d,clearToken:l,isAuthenticated:()=>!!o.getToken(),handleSessionExpired:p,logout:p,resolveRedirect:(t,r)=>n(t,r??e.redirect)}}var o=`lumal:token`;function s(e,t=o){return r(e,t).getToken()}function c(e,t,n=o){r(e,n).setToken(t)}function l(e,t=o){r(e,t).clearToken()}var u=null;function d(e){u=e}function f(){u=null}async function p(){await u?.()}exports.DEFAULT_TOKEN_STORAGE_KEY=o,exports.clearSessionExpiredHandler=f,exports.clearStoredToken=l,exports.createAuthSession=a,exports.createTokenStorage=r,exports.getStoredToken=s,exports.handleSessionExpired=p,exports.parseAuthSession=t,exports.registerSessionExpiredHandler=d,exports.resolveLoginRedirect=n,exports.setStoredToken=c;
package/dist/auth.js CHANGED
@@ -1,5 +1,6 @@
1
+ import { t as e } from "./storage-CorgkMJU.js";
1
2
  //#region src/auth/adapter.ts
2
- function e(e, t = {}) {
3
+ function t(e, t = {}) {
3
4
  let n = t.parseResponse ? t.parseResponse(e) : e;
4
5
  if (!n || typeof n != "object" || Array.isArray(n)) throw TypeError("会话响应格式不正确");
5
6
  let r = n, i = r[t.fieldNames?.accessToken ?? "accessToken"], a = r[t.fieldNames?.refreshToken ?? "refreshToken"], o = r[t.fieldNames?.expiresAt ?? "expiresAt"], s = o == null ? void 0 : Number(o);
@@ -13,7 +14,7 @@ function e(e, t = {}) {
13
14
  }
14
15
  //#endregion
15
16
  //#region src/auth/redirect.ts
16
- function t(e, t = {}) {
17
+ function n(e, t = {}) {
17
18
  let n = t.loginPath ?? "/login", r = t.redirectQueryKey ?? "redirect", i = e.trim();
18
19
  if (!i || i === n) return n;
19
20
  let a = new URL(n, "http://lumal.local");
@@ -21,7 +22,7 @@ function t(e, t = {}) {
21
22
  }
22
23
  //#endregion
23
24
  //#region src/auth/storage.ts
24
- function n(e, t) {
25
+ function r(e, t) {
25
26
  return {
26
27
  getToken: () => e.getItem(t) ?? "",
27
28
  setToken: (n) => {
@@ -38,28 +39,11 @@ function n(e, t) {
38
39
  }
39
40
  //#endregion
40
41
  //#region src/auth/createAuthSession.ts
41
- function r() {
42
- let e = /* @__PURE__ */ new Map();
43
- return {
44
- get length() {
45
- return e.size;
46
- },
47
- clear: () => e.clear(),
48
- getItem: (t) => e.has(t) ? e.get(t) : null,
49
- key: (t) => Array.from(e.keys())[t] ?? null,
50
- removeItem: (t) => {
51
- e.delete(t);
52
- },
53
- setItem: (t, n) => {
54
- e.set(t, n);
55
- }
56
- };
57
- }
58
- function i(e) {
59
- return e || (typeof localStorage < "u" ? localStorage : r());
42
+ function i(t) {
43
+ return t || (typeof localStorage < "u" ? localStorage : e());
60
44
  }
61
45
  function a(e = {}) {
62
- let r = e.tokenKey ?? "lumal:token", a = i(e.storage), o = n(a, r), s = n(a, e.refreshTokenKey ?? `${r}:refresh`), c = e.expiresAtKey ?? `${r}:expires-at`;
46
+ let t = e.tokenKey ?? "lumal:token", a = i(e.storage), o = r(a, t), s = r(a, e.refreshTokenKey ?? `${t}:refresh`), c = e.expiresAtKey ?? `${t}:expires-at`;
63
47
  function l() {
64
48
  o.clearToken(), s.clearToken(), a.removeItem(c);
65
49
  }
@@ -96,20 +80,20 @@ function a(e = {}) {
96
80
  isAuthenticated: () => !!o.getToken(),
97
81
  handleSessionExpired: p,
98
82
  logout: p,
99
- resolveRedirect: (n, r) => t(n, r ?? e.redirect)
83
+ resolveRedirect: (t, r) => n(t, r ?? e.redirect)
100
84
  };
101
85
  }
102
86
  //#endregion
103
87
  //#region src/auth/session.ts
104
88
  var o = "lumal:token";
105
89
  function s(e, t = o) {
106
- return n(e, t).getToken();
90
+ return r(e, t).getToken();
107
91
  }
108
- function c(e, t, r = o) {
109
- n(e, r).setToken(t);
92
+ function c(e, t, n = o) {
93
+ r(e, n).setToken(t);
110
94
  }
111
95
  function l(e, t = o) {
112
- n(e, t).clearToken();
96
+ r(e, t).clearToken();
113
97
  }
114
98
  //#endregion
115
99
  //#region src/auth/session-expired.ts
@@ -124,4 +108,4 @@ async function p() {
124
108
  await u?.();
125
109
  }
126
110
  //#endregion
127
- export { o as DEFAULT_TOKEN_STORAGE_KEY, f as clearSessionExpiredHandler, l as clearStoredToken, a as createAuthSession, n as createTokenStorage, s as getStoredToken, p as handleSessionExpired, e as parseAuthSession, d as registerSessionExpiredHandler, t as resolveLoginRedirect, c as setStoredToken };
111
+ export { o as DEFAULT_TOKEN_STORAGE_KEY, f as clearSessionExpiredHandler, l as clearStoredToken, a as createAuthSession, r as createTokenStorage, s as getStoredToken, p as handleSessionExpired, t as parseAuthSession, d as registerSessionExpiredHandler, n as resolveLoginRedirect, c as setStoredToken };