@wzyjs/middle-sdk 0.3.36 → 0.3.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/login/index.js +1 -1
- package/dist/page/index.d.ts +2 -1
- package/dist/page/index.js +1 -1
- package/dist/page/types.d.ts +18 -0
- package/dist/page/utils.d.ts +2 -1
- package/package.json +3 -3
package/dist/login/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
-
var S=["iframe","blank"],c=(e)=>Boolean(e)&&typeof e==="object"&&!Array.isArray(e),i=(e)=>typeof e==="string"?e:"",l=(e)=>typeof e==="string"?e:null,z=(e)=>Array.isArray(e)?e.filter((t)=>typeof t==="string"):[],A=(e)=>{if(!c(e))return;let t=i(e.id),s=i(e.identifier),o=i(e.name);if(!t||!s||!o)return;return{id:t,identifier:s,name:o}},C=(e)=>S.includes(e)?e:null,d=(e)=>{if(!Array.isArray(e))return[];return e.flatMap((t)=>{if(!c(t))return[];let s=i(t.name),o=i(t.path);if(!s||!o)return[];return[{icon:l(t.icon),isMenu:Boolean(t.isMenu),name:s,openMode:C(t.openMode),path:o,permissions:z(t.permissions)}]})},h=(e)=>{if(!Array.isArray(e))return[];return e.flatMap((t)=>{if(!c(t))return[];let s=i(t.key),o=i(t.name);if(!s||!o)return[];return[{description:l(t.description),key:s,name:o}]})},M=(e)=>h(e),y=(e)=>h(e);var F=async(e,t)=>{if(typeof t!=="string"||!t)return{app:void 0,pages:[],permissions:[],roles:[]};let s=`${e.replace(/\/$/,"")}/api/oauth/userinfo`,o=await fetch(s,{cache:"no-store",headers:{Authorization:`Bearer ${t}`}});if(!o.ok)throw Error("Failed to load middle userinfo");let r=await o.json();return{app:A(r.app),pages:d(r.pages),permissions:M(r.permissions),roles:y(r.roles)}},f=async(e,t)=>{let s=await F(e,t.middleAccessToken);t.app=s.app,t.pages=s.pages,t.permissions=s.permissions,t.roles=s.roles},p=(e)=>{e.app=void 0,e.pages=[],e.permissions=[],e.roles=[]};var k=()=>({middleAction:"middle:access-profile:refresh"}),g=(e)=>Boolean(e)&&typeof e==="object"&&!Array.isArray(e)&&e.middleAction==="middle:access-profile:refresh";import{Buffer as E}from"node:buffer";var I=300000,x=(e)=>typeof e==="number"&&Number.isFinite(e)&&Date.now()+I<e,u=(e)=>{let t=e;if(typeof t.expires_at==="number"&&Number.isFinite(t.expires_at))return t.expires_at*1000;if(typeof t.expires_in==="number"&&Number.isFinite(t.expires_in))return Date.now()+t.expires_in*1000;return},m=async(e)=>{let t=await fetch(`${e.issuer}/api/oauth/token`,{body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e.refreshToken}),cache:"no-store",headers:{Authorization:`Basic ${E.from(`${e.clientId}:${e.clientSecret}`).toString("base64")}`,"Content-Type":"application/x-www-form-urlencoded"},method:"POST"}),s=await t.json().catch(()=>({}));if(!t.ok||typeof s.access_token!=="string"||!s.access_token)throw Error("刷新中台 access token 失败");return{accessToken:s.access_token,accessTokenExpiresAt:u(s),refreshToken:typeof s.refresh_token==="string"&&s.refresh_token?s.refresh_token:e.refreshToken}};var U=(e,t)=>{let s=t;if(typeof s?.sub==="string")e.sub=s.sub;if(typeof s?.email==="string")e.email=s.email;if(typeof s?.name==="string")e.name=s.name;if(typeof s?.picture==="string")e.picture=s.picture},j=(e,t)=>{let s=t;if(!s?.access_token)return;if(e.middleAccessToken=s.access_token,e.middleAccessTokenExpiresAt=u(t),e.middleAuthError=void 0,typeof s.refresh_token==="string"&&s.refresh_token)e.middleRefreshToken=s.refresh_token},w=(e)=>{if(!e.middleAccessTokenExpiresAt||Date.now()>=e.middleAccessTokenExpiresAt)e.middleAccessToken=void 0,p(e)},B=async(e,t,s)=>{if(!g(s)||!t.middleAccessToken)return!1;try{await f(e,t),t.middleAuthError=void 0}catch(o){p(t),t.middleAuthError="access_profile_refresh_failed"}return!0},b=(e,t,s)=>async({token:o,account:r,profile:O,session:R,trigger:$})=>{let n=o;if(U(n,O),j(n,r),!r?.access_token&&n.middleAccessToken&&!x(n.middleAccessTokenExpiresAt)){if(!n.middleRefreshToken)return w(n),n;try{let a=await m({clientId:t,clientSecret:s,issuer:e,refreshToken:n.middleRefreshToken});n.middleAccessToken=a.accessToken,n.middleAccessTokenExpiresAt=a.accessTokenExpiresAt,n.middleRefreshToken=a.refreshToken,n.middleAuthError=void 0}catch(a){return w(n),n.middleAuthError="access_token_refresh_failed",n}}if($==="update"&&await B(e,n,R))return n;if(n.middleAccessToken&&(r?.access_token||!n.app))try{await f(e,n),n.middleAuthError=void 0}catch(a){if(r?.access_token)throw a;p(n),n.middleAuthError="access_profile_refresh_failed"}return n};var N=()=>async({session:e,token:t})=>{let s=e,o=s.user,r=t;if(s.user&&r.sub)o.id=r.sub;if(s.user)s.user.email=r.email,s.user.name=r.name,s.user.image=typeof r.picture==="string"?r.picture:null;return s.app=r.app,s.middleAuthError=r.middleAuthError,s.middleAccessToken=r.middleAccessToken,s.pages=r.pages??[],s.permissions=r.permissions??[],s.roles=r.roles??[],s};var P=(e,t,s)=>({jwt:b(e,t,s),session:N(),async redirect({url:o,baseUrl:r}){if(o.startsWith(r))return o;if(o.startsWith("/"))return`${r}${o}`;return r}});var _=(e,t)=>{let s={httpOnly:!0,path:"/",sameSite:"lax",secure:t};return{callbackUrl:{name:`${e}.callback-url`,options:s},csrfToken:{name:`${e}.csrf-token`,options:s},nonce:{name:`${e}.nonce`,options:s},pkceCodeVerifier:{name:`${e}.pkce.code-verifier`,options:{...s,maxAge:900}},sessionToken:{name:`${e}.session-token`,options:s},state:{name:`${e}.state`,options:{...s,maxAge:900}}}};var te=(e)=>{let t=e.issuer.replace(/\/$/,"");return{debug:e.debug??!1,cookies:!e.cookiePrefix?void 0:_(e.cookiePrefix,e.secureCookies??!1),pages:e.pages,secret:e.secret,callbacks:P(t,e.clientId,e.clientSecret),session:{strategy:"jwt"},providers:[{id:"middle",name:"中台登录",type:"oauth",issuer:t,clientId:e.clientId,clientSecret:e.clientSecret,checks:["pkce","state"],idToken:!0,jwks_endpoint:`${t}/api/oauth/jwks`,authorization:{url:`${t}/api/oauth/authorize`,params:{scope:"openid profile email offline_access"}},token:{url:`${t}/api/oauth/token`},userinfo:{url:`${t}/api/oauth/userinfo`},profile(s){return{email:s.email,id:s.sub,image:s.picture,name:s.name}}}]}};export{g as isMiddleAccessProfileRefreshUpdate,te as createMiddleNextAuthOptions,k as createMiddleAccessProfileRefreshUpdate};
|
|
2
|
+
var S=["iframe","blank"],c=(e)=>Boolean(e)&&typeof e==="object"&&!Array.isArray(e),i=(e)=>typeof e==="string"?e:"",l=(e)=>typeof e==="string"?e:null,z=(e)=>Array.isArray(e)?e.filter((t)=>typeof t==="string"):[],A=(e)=>{if(!c(e))return;let t=i(e.id),s=i(e.identifier),o=i(e.name);if(!t||!s||!o)return;return{id:t,identifier:s,name:o}},C=(e)=>S.includes(e)?e:null,d=(e)=>{if(!Array.isArray(e))return[];return e.flatMap((t)=>{if(!c(t))return[];let s=i(t.name),o=i(t.path);if(!s||!o)return[];return[{icon:l(t.icon),isMenu:Boolean(t.isMenu),name:s,openMode:C(t.openMode),path:o,permissions:z(t.permissions)}]})},h=(e)=>{if(!Array.isArray(e))return[];return e.flatMap((t)=>{if(!c(t))return[];let s=i(t.key),o=i(t.name);if(!s||!o)return[];return[{description:l(t.description),key:s,name:o}]})},M=(e)=>h(e),y=(e)=>h(e);var F=async(e,t)=>{if(typeof t!=="string"||!t)return{app:void 0,pages:[],permissions:[],roles:[]};let s=`${e.replace(/\/$/,"")}/api/oauth/userinfo`,o=await fetch(s,{cache:"no-store",headers:{Authorization:`Bearer ${t}`}});if(!o.ok)throw Error("Failed to load middle userinfo");let r=await o.json();return{app:A(r.app),pages:d(r.pages),permissions:M(r.permissions),roles:y(r.roles)}},f=async(e,t)=>{let s=await F(e,t.middleAccessToken);t.app=s.app,t.pages=s.pages,t.permissions=s.permissions,t.roles=s.roles},p=(e)=>{e.app=void 0,e.pages=[],e.permissions=[],e.roles=[]};var k=()=>({middleAction:"middle:access-profile:refresh"}),g=(e)=>Boolean(e)&&typeof e==="object"&&!Array.isArray(e)&&e.middleAction==="middle:access-profile:refresh";import{Buffer as E}from"node:buffer";var I=300000,x=(e)=>typeof e==="number"&&Number.isFinite(e)&&Date.now()+I<e,u=(e)=>{let t=e;if(typeof t.expires_at==="number"&&Number.isFinite(t.expires_at))return t.expires_at*1000;if(typeof t.expires_in==="number"&&Number.isFinite(t.expires_in))return Date.now()+t.expires_in*1000;return},m=async(e)=>{let t=await fetch(`${e.issuer}/api/oauth/token`,{body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e.refreshToken}),cache:"no-store",headers:{Authorization:`Basic ${E.from(`${e.clientId}:${e.clientSecret}`).toString("base64")}`,"Content-Type":"application/x-www-form-urlencoded"},method:"POST"}),s=await t.json().catch(()=>({}));if(!t.ok||typeof s.access_token!=="string"||!s.access_token)throw Error("刷新中台 access token 失败");return{accessToken:s.access_token,accessTokenExpiresAt:u(s),refreshToken:typeof s.refresh_token==="string"&&s.refresh_token?s.refresh_token:e.refreshToken}};var U=(e,t)=>{let s=t;if(typeof s?.sub==="string")e.sub=s.sub;if(typeof s?.email==="string")e.email=s.email;if(typeof s?.name==="string")e.name=s.name;if(typeof s?.picture==="string")e.picture=s.picture},j=(e,t)=>{let s=t;if(!s?.access_token)return;if(e.middleAccessToken=s.access_token,e.middleAccessTokenExpiresAt=u(t),e.middleAuthError=void 0,typeof s.refresh_token==="string"&&s.refresh_token)e.middleRefreshToken=s.refresh_token},w=(e)=>{if(!e.middleAccessTokenExpiresAt||Date.now()>=e.middleAccessTokenExpiresAt)e.middleAccessToken=void 0,p(e)},B=async(e,t,s)=>{if(!g(s)||!t.middleAccessToken)return!1;try{await f(e,t),t.middleAuthError=void 0}catch(o){p(t),t.middleAuthError="access_profile_refresh_failed"}return!0},b=(e,t,s)=>async({token:o,account:r,profile:O,session:R,trigger:$})=>{let n=o;if(U(n,O),j(n,r),!r?.access_token&&n.middleAccessToken&&!x(n.middleAccessTokenExpiresAt)){if(!n.middleRefreshToken)return w(n),n;try{let a=await m({clientId:t,clientSecret:s,issuer:e,refreshToken:n.middleRefreshToken});n.middleAccessToken=a.accessToken,n.middleAccessTokenExpiresAt=a.accessTokenExpiresAt,n.middleRefreshToken=a.refreshToken,n.middleAuthError=void 0}catch(a){return w(n),n.middleAuthError="access_token_refresh_failed",n}}if($==="update"&&await B(e,n,R))return n;if(n.middleAccessToken&&(r?.access_token||!n.app))try{await f(e,n),n.middleAuthError=void 0}catch(a){if(r?.access_token)throw a;p(n),n.middleAuthError="access_profile_refresh_failed"}return n};var N=()=>async({session:e,token:t})=>{let s=e,o=s.user,r=t;if(s.user&&r.sub)o.id=r.sub;if(s.user)s.user.email=r.email,s.user.name=r.name,s.user.image=typeof r.picture==="string"?r.picture:null;return s.app=r.app,s.middleAuthError=r.middleAuthError,s.middleAccessToken=r.middleAccessToken,s.pages=r.pages??[],s.permissions=r.permissions??[],s.roles=r.roles??[],s};var P=(e,t,s)=>({jwt:b(e,t,s),session:N(),async redirect({url:o,baseUrl:r}){if(o.startsWith(r))return o;if(o.startsWith("/"))return`${r}${o}`;return r}});var _=(e,t)=>{let s={httpOnly:!0,path:"/",sameSite:"lax",secure:t};return{callbackUrl:{name:`${e}.callback-url`,options:s},csrfToken:{name:`${e}.csrf-token`,options:s},nonce:{name:`${e}.nonce`,options:s},pkceCodeVerifier:{name:`${e}.pkce.code-verifier`,options:{...s,maxAge:900}},sessionToken:{name:`${e}.session-token`,options:s},state:{name:`${e}.state`,options:{...s,maxAge:900}}}};var te=(e)=>{let t=e.issuer.replace(/\/$/,"");return{debug:e.debug??!1,cookies:!e.cookiePrefix?void 0:_(e.cookiePrefix,e.secureCookies??!1),pages:e.pages,secret:e.secret,callbacks:P(t,e.clientId,e.clientSecret),session:{strategy:"jwt"},providers:[{id:"middle",name:"中台登录",type:"oauth",issuer:t,clientId:e.clientId,clientSecret:e.clientSecret,checks:["pkce","state"],idToken:!0,jwks_endpoint:`${t}/api/oauth/jwks`,authorization:{url:`${t}/api/oauth/authorize`,params:{prompt:"consent",scope:"openid profile email offline_access"}},token:{url:`${t}/api/oauth/token`},userinfo:{url:`${t}/api/oauth/userinfo`},profile(s){return{email:s.email,id:s.sub,image:s.picture,name:s.name}}}]}};export{g as isMiddleAccessProfileRefreshUpdate,te as createMiddleNextAuthOptions,k as createMiddleAccessProfileRefreshUpdate};
|
package/dist/page/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare const MiddleIframeRoutePage: (props: import("./MiddleIframeRoutePage").MiddleIframeRoutePageProps) => import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare const resolveMiddleMenuGroups: (option?: import("./types").ResolveMiddleMenuGroupOptions) => import("./types").MiddleResolvedMenuGroup[];
|
|
2
3
|
export declare const resolveMiddleMenuPages: (pages: import("./types").MiddlePage[], option?: import("./types").ResolveMiddlePageOptions) => import("./types").MiddleResolvedPage[];
|
|
3
|
-
export type { MiddlePage, MiddleResolvedPage } from './types';
|
|
4
|
+
export type { MiddleMenuGroup, MiddleMenuItem, MiddlePage, MiddleResolvedMenuGroup, MiddleResolvedPage, ResolveMiddleMenuGroupOptions, } from './types';
|
package/dist/page/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
'use client';
|
|
3
|
-
import{useSearchParams as
|
|
3
|
+
import{useSearchParams as A}from"next/navigation";var a=(e)=>/^https?:\/\/[^\s]+$/i.test(e),P=(e)=>/^\/[^\s]*$/.test(e),M=(e)=>a(e.path)&&e.openMode!=="blank",c=(e)=>a(e.path)&&e.openMode==="blank",f=(e,r={})=>{if(!M(e))return e.path;let t=new URLSearchParams({url:e.path});return`${r.iframePagePath??"/middle"}?${t.toString()}`},g=(e)=>{if(c(e))return"blank";if(M(e))return"iframe";return"route"},h=(e,r)=>{if(!r||!P(e.path))return!1;return r===e.path||e.path!=="/"&&r.startsWith(`${e.path}/`)},R=(e,r={})=>{let t=g(e),s=t==="blank",i=r.iframePagePath??"/middle",o=t==="iframe"?r.pathname===i&&r.iframeUrl===e.path:t==="route"?h(e,r.pathname):!1;return{href:f(e,r),isActive:o,isBlank:s,isExternal:a(e.path),isIframe:t==="iframe",isRoute:t==="route",page:e,rel:s?"noreferrer":void 0,target:s?"_blank":void 0,type:t}},d=(e,r={})=>{return e.filter((t)=>t.isMenu).map((t)=>R(t,r))},v=(e)=>{let[r="",t=""]=e.split("/");return{groupName:r.trim(),pageName:t.trim()}},E=(e)=>{let r=new Map;return e.forEach((t)=>{if(!t.isMenu)return;let{groupName:s,pageName:i}=v(t.name);if(!s||!i)return;let o={icon:t.icon,name:i,openMode:t.openMode,path:t.path,permissions:t.permissions},n=r.get(s);if(n){n.items.push(o);return}r.set(s,{groupName:s,items:[o]})}),Array.from(r.values())},m=(e={})=>{return E(e.pages??[]).flatMap((t)=>{let s=d(t.items.map((i)=>({...i,isMenu:!0})),e);if(!s.length)return[];return[{groupName:t.groupName,items:s}]})};import{jsx as u}from"react/jsx-runtime";var N={background:"#fff",display:"flex",flexDirection:"column",height:"100%",minHeight:720},y={border:0,flex:1,minHeight:0},G={alignItems:"center",background:"#fff",color:"#6b7280",display:"flex",justifyContent:"center",minHeight:"100%",padding:"48px 24px"},p=(e)=>{let{className:r,fallback:t="页面地址无效",style:s,url:i,urlParamName:o="url"}=e,n=A(),l=i??n.get(o)??"";if(!l||!a(l))return u("div",{className:r,style:{...G,...s},children:t});return u("div",{className:r,style:{...N,...s},children:u("iframe",{src:l,style:y,title:l})})};var U=p,O=m,T=d;export{T as resolveMiddleMenuPages,O as resolveMiddleMenuGroups,U as MiddleIframeRoutePage};
|
package/dist/page/types.d.ts
CHANGED
|
@@ -6,6 +6,20 @@ export interface MiddlePage {
|
|
|
6
6
|
path: string;
|
|
7
7
|
permissions: string[];
|
|
8
8
|
}
|
|
9
|
+
export interface MiddleMenuItem {
|
|
10
|
+
icon: string | null;
|
|
11
|
+
name: string;
|
|
12
|
+
openMode: 'iframe' | 'blank' | null;
|
|
13
|
+
path: string;
|
|
14
|
+
permissions: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface MiddleMenuGroup {
|
|
17
|
+
groupName: string;
|
|
18
|
+
items: MiddleMenuItem[];
|
|
19
|
+
}
|
|
20
|
+
export interface ResolveMiddleMenuGroupOptions extends ResolveMiddlePageOptions {
|
|
21
|
+
pages?: MiddlePage[] | null;
|
|
22
|
+
}
|
|
9
23
|
export interface ResolveMiddlePageOptions {
|
|
10
24
|
iframePagePath?: string;
|
|
11
25
|
iframeUrl?: string | null;
|
|
@@ -23,3 +37,7 @@ export interface MiddleResolvedPage {
|
|
|
23
37
|
target?: '_blank';
|
|
24
38
|
type: 'route' | 'iframe' | 'blank';
|
|
25
39
|
}
|
|
40
|
+
export interface MiddleResolvedMenuGroup {
|
|
41
|
+
groupName: string;
|
|
42
|
+
items: MiddleResolvedPage[];
|
|
43
|
+
}
|
package/dist/page/utils.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type { MiddlePage, MiddleResolvedPage, ResolveMiddlePageOptions } from './types';
|
|
1
|
+
import type { MiddlePage, MiddleResolvedMenuGroup, MiddleResolvedPage, ResolveMiddleMenuGroupOptions, ResolveMiddlePageOptions } from './types';
|
|
2
2
|
export declare const isExternalPagePath: (path: string) => boolean;
|
|
3
3
|
export declare const resolveMiddleMenuPages: (pages: MiddlePage[], option?: ResolveMiddlePageOptions) => MiddleResolvedPage[];
|
|
4
|
+
export declare const resolveMiddleMenuGroups: (option?: ResolveMiddleMenuGroupOptions) => MiddleResolvedMenuGroup[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wzyjs/middle-sdk",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.38",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"scripts": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@trpc/react-query": "^11.7.0",
|
|
48
48
|
"@trpc/server": "^11.7.0",
|
|
49
49
|
"@types/react": "^19.1.10",
|
|
50
|
-
"next": "^16.2.
|
|
50
|
+
"next": "^16.2.9",
|
|
51
51
|
"next-auth": "^4.24.11",
|
|
52
52
|
"react": "^19.1.0",
|
|
53
53
|
"typescript": "^5.9.3"
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"publishConfig": {
|
|
85
85
|
"access": "public"
|
|
86
86
|
},
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "e88061e1c33e2905e50909fab454baf1e86d0d6d"
|
|
88
88
|
}
|