@tachybase/module-auth 1.3.20 → 1.3.22
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/client/index.d.ts +1 -1
- package/dist/client/index.js +3 -3
- package/dist/externalVersion.js +6 -11
- package/dist/node_modules/cron/package.json +1 -1
- package/dist/node_modules/ms/package.json +1 -1
- package/dist/server/actions/auth.d.ts +1 -1
- package/dist/server/actions/auth.js +8 -1
- package/dist/server/actions/authenticators.d.ts +1 -1
- package/dist/server/basic-auth.d.ts +1 -1
- package/dist/server/basic-auth.js +2 -2
- package/dist/server/collections/authenticators.d.ts +1 -1
- package/dist/server/collections/authenticators.js +2 -2
- package/dist/server/collections/issued-tokens.d.ts +1 -1
- package/dist/server/collections/issued-tokens.js +2 -2
- package/dist/server/collections/token-blacklist.d.ts +1 -1
- package/dist/server/collections/token-blacklist.js +2 -2
- package/dist/server/collections/token-poilcy-config.d.ts +1 -1
- package/dist/server/collections/token-poilcy-config.js +2 -2
- package/dist/server/collections/users-authenticators.d.ts +1 -1
- package/dist/server/collections/users-authenticators.js +2 -2
- package/dist/server/migrations/20230506152253-basic-authenticator.d.ts +1 -1
- package/dist/server/migrations/20230506152253-basic-authenticator.js +1 -1
- package/dist/server/migrations/20230607174500-update-basic.d.ts +1 -1
- package/dist/server/migrations/20230607174500-update-basic.js +1 -1
- package/dist/server/migrations/20231218132032-fix-allow-signup.d.ts +1 -1
- package/dist/server/migrations/20231218132032-fix-allow-signup.js +1 -1
- package/dist/server/migrations/20250318163707-create-token-policy.d.ts +1 -1
- package/dist/server/migrations/20250318163707-create-token-policy.js +1 -1
- package/dist/server/migrations/20250403152858-token-text-type.d.ts +1 -1
- package/dist/server/migrations/20250403152858-token-text-type.js +2 -3
- package/dist/server/migrations/20250626174901-change-token.d.ts +1 -1
- package/dist/server/migrations/20250626174901-change-token.js +2 -3
- package/dist/server/model/authenticator.d.ts +1 -2
- package/dist/server/model/authenticator.js +2 -2
- package/dist/server/plugin.d.ts +1 -2
- package/dist/server/plugin.js +1 -1
- package/dist/server/storer.d.ts +1 -4
- package/dist/server/token-blacklist.d.ts +3 -5
- package/dist/server/token-controller.d.ts +1 -5
- package/dist/server/token-controller.js +4 -4
- package/dist/types.d.ts +1 -1
- package/package.json +11 -20
package/dist/client/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ComponentType } from 'react';
|
|
2
2
|
import { Plugin } from '@tachybase/client';
|
|
3
|
-
import { Registry } from '@
|
|
3
|
+
import { Registry } from '@tego/client';
|
|
4
4
|
import { Authenticator as AuthenticatorType } from './authenticator';
|
|
5
5
|
export type AuthOptions = {
|
|
6
6
|
components: Partial<{
|
package/dist/client/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
(function(d,i){typeof exports=="object"&&typeof module!="undefined"?i(exports,require("@tachybase/client"),require("@
|
|
1
|
+
(function(d,i){typeof exports=="object"&&typeof module!="undefined"?i(exports,require("@tachybase/client"),require("@tego/client"),require("react/jsx-runtime"),require("react"),require("react-router-dom"),require("@tachybase/schema"),require("react-i18next"),require("antd"),require("@ant-design/icons")):typeof define=="function"&&define.amd?define(["exports","@tachybase/client","@tego/client","react/jsx-runtime","react","react-router-dom","@tachybase/schema","react-i18next","antd","@ant-design/icons"],i):(d=typeof globalThis!="undefined"?globalThis:d||self,i(d["@tachybase/module-auth"]={},d["@tachybase/client"],d["@tego/client"],d.jsxRuntime,d.react,d["react-router-dom"],d["@tachybase/schema"],d["react-i18next"],d.antd,d["@ant-design/icons"]))})(this,function(d,i,g,c,f,C,v,F,x,N){"use strict";var Jt=Object.defineProperty,Qt=Object.defineProperties;var Rt=Object.getOwnPropertyDescriptors;var K=Object.getOwnPropertySymbols;var We=Object.prototype.hasOwnProperty,Ge=Object.prototype.propertyIsEnumerable;var Ke=(d,i,g)=>i in d?Jt(d,i,{enumerable:!0,configurable:!0,writable:!0,value:g}):d[i]=g,E=(d,i)=>{for(var g in i||(i={}))We.call(i,g)&&Ke(d,g,i[g]);if(K)for(var g of K(i))Ge.call(i,g)&&Ke(d,g,i[g]);return d},W=(d,i)=>Qt(d,Rt(i));var He=(d,i)=>{var g={};for(var c in d)We.call(d,c)&&i.indexOf(c)<0&&(g[c]=d[c]);if(d!=null&&K)for(var c of K(d))i.indexOf(c)<0&&Ge.call(d,c)&&(g[c]=d[c]);return g};var k=(d,i,g)=>new Promise((c,f)=>{var C=x=>{try{F(g.next(x))}catch(N){f(N)}},v=x=>{try{F(g.throw(x))}catch(N){f(N)}},F=x=>x.done?c(x.value):Promise.resolve(x.value).then(C,v);F((g=g.apply(d,i)).next())});const Xe="Email/Password",ze=e=>{const o=C.useLocation(),t=i.useAPIClient();return f.useEffect(()=>{const n=new URLSearchParams(o.search),r=n.get("authenticator"),s=n.get("token");s&&(t.auth.setToken(s),t.auth.setAuthenticator(r))}),c.jsx(c.Fragment,{children:e.children})},P="auth";function w(){return F.useTranslation([P,"core"],{nsMode:"fallback"})}const q=e=>i.tval(e,{ns:P}),j=f.createContext([]);j.displayName="AuthenticatorsContext";const G=e=>f.useContext(j).find(t=>t.name===e);function Ye(e){var s;const{data:o}=i.useSystemSettings(),t=i.useAPIClient(),{data:n=[],error:r}=i.useRequest(()=>t.resource("authenticators").publicList().then(a=>{var u;return((u=a==null?void 0:a.data)==null?void 0:u.data)||[]}));if(r)throw r;return c.jsxs("div",{style:{maxWidth:320,margin:"0 auto",paddingTop:"20vh"},children:[c.jsx("h1",{children:(s=o==null?void 0:o.data)==null?void 0:s.title}),c.jsx(j.Provider,{value:n,children:c.jsx(C.Outlet,{})}),c.jsx("div",{className:i.css`
|
|
2
2
|
position: absolute;
|
|
3
3
|
bottom: 24px;
|
|
4
4
|
width: 100%;
|
|
5
5
|
left: 0;
|
|
6
6
|
text-align: center;
|
|
7
|
-
`,children:c.jsx(i.PoweredBy,{})})]})}const Ze=()=>{var n;const o=i.usePlugin(_).authTypes.getEntities(),t={};for(const[r,s]of o)(n=s.components)!=null&&n.SignInForm&&(t[r]=s.components.SignInForm);return t},Je=(e=[])=>{var s;const t=i.usePlugin(_).authTypes.getEntities(),n={};for(const[a,
|
|
7
|
+
`,children:c.jsx(i.PoweredBy,{})})]})}const Ze=()=>{var n;const o=i.usePlugin(_).authTypes.getEntities(),t={};for(const[r,s]of o)(n=s.components)!=null&&n.SignInForm&&(t[r]=s.components.SignInForm);return t},Je=(e=[])=>{var s;const t=i.usePlugin(_).authTypes.getEntities(),n={};for(const[a,u]of t)(s=u.components)!=null&&s.SignInButton&&(n[a]=u.components.SignInButton);const r=Object.keys(n);return e.filter(a=>r.includes(a.authType)).map((a,u)=>f.createElement(n[a.authType],{key:u,authenticator:a}))},Qe=()=>{const{t:e}=w();i.useCurrentDocumentTitle("Signin"),i.useViewport();const o=Ze(),t=f.useContext(j),n=Je(t);if(!t.length)return c.jsx("div",{style:{color:"#ccc"},children:e("No authentication methods available.")});const r=t.map(s=>{const a=o[s.authType];if(!a)return;const u=`${e("Sign-in")} (${e(s.authTypeTitle||s.authType)})`;return E({component:f.createElement(a,{authenticator:s}),tabTitle:s.title||s.name==="basic"?u:`${e(s.name)}`},s)}).filter(s=>s);return c.jsxs(x.Space,{direction:"vertical",className:i.css`
|
|
8
8
|
display: flex;
|
|
9
9
|
`,children:[r.length>1?c.jsx(x.Tabs,{items:r.map(s=>({label:s.tabTitle,key:s.name,children:s.component}))}):r.length?c.jsx("div",{children:r[0].component}):c.jsx(c.Fragment,{}),c.jsx(x.Space,{direction:"vertical",className:i.css`
|
|
10
10
|
display: flex;
|
|
@@ -19,4 +19,4 @@
|
|
|
19
19
|
} else {
|
|
20
20
|
return /^[^@.<>"'/]{2,16}$/.test(value) || t("Please enter a valid username");
|
|
21
21
|
}
|
|
22
|
-
}}}`,"x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Username/Email")}}',style:{}}},password:{type:"string","x-component":"Password",required:!0,"x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Password")}}',style:{}}},actions:{type:"void","x-component":"div",properties:{submit:{title:'{{t("Sign in")}}',type:"void","x-component":"Action","x-component-props":{htmlType:"submit",block:!0,type:"primary",useAction:"{{ useBasicSignIn }}",style:{width:"100%"}}}}},signUp:{type:"void","x-component":"Link","x-component-props":{to:"{{ signUpLink }}"},"x-content":'{{t("Create an account")}}',"x-visible":"{{ allowSignUp }}"}}},nt=e=>{const{t:o}=w(),t=e.authenticator,{authType:n,name:r,options:s}=t,p=!!me()[n]&&(s==null?void 0:s.allowSignUp),h=`/signup?name=${r}`,l=()=>he(r);return c.jsx(i.SchemaComponent,{schema:tt,scope:{useBasicSignIn:l,allowSignUp:p,signUpLink:h,t:o}})},ot=e=>{const o=C.useNavigate(),t=v.useForm(),n=i.useAPIClient(),{t:r}=F.useTranslation();return{run(){return k(this,null,function*(){var a;yield t.submit(),yield n.auth.signUp(t.values,e==null?void 0:e.authenticator),x.message.success(((a=e==null?void 0:e.message)==null?void 0:a.success)||r("Sign up successfully, and automatically jump to the sign in page")),setTimeout(()=>{o("/signin")},2e3)})}}},rt={type:"object",name:v.uid(),"x-component":"FormV2",properties:{username:{type:"string",required:!0,"x-component":"Input","x-validator":{username:!0},"x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Username")}}',style:{}}},password:{type:"string",required:!0,"x-component":"Password","x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Password")}}',checkStrength:!0,style:{}},"x-reactions":[{dependencies:[".confirm_password"],fulfill:{state:{selfErrors:'{{$deps[0] && $self.value && $self.value !== $deps[0] ? t("Password mismatch") : ""}}'}}}]},confirm_password:{type:"string",required:!0,"x-component":"Password","x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Confirm password")}}',style:{}},"x-reactions":[{dependencies:[".password"],fulfill:{state:{selfErrors:'{{$deps[0] && $self.value && $self.value !== $deps[0] ? t("Password mismatch") : ""}}'}}}]},actions:{type:"void","x-component":"div",properties:{submit:{title:'{{t("Sign up")}}',type:"void","x-component":"Action","x-component-props":{block:!0,type:"primary",htmlType:"submit",useAction:"{{ useBasicSignUp }}",style:{width:"100%"}}}}},link:{type:"void","x-component":"div",properties:{link:{type:"void","x-component":"Link","x-component-props":{to:"/signin"},"x-content":'{{t("Log in with an existing account")}}'}}}}},it=({authenticatorName:e})=>{const{t:o}=w(),t=()=>ot({authenticator:e}),n=G(e),{options:r}=n;return r!=null&&r.allowSignUp?c.jsx(i.SchemaComponent,{schema:rt,scope:{useBasicSignUp:t,t:o}}):c.jsx(C.Navigate,{to:"/not-found",replace:!0})},st=()=>{const{t:e}=w();return c.jsx(i.SchemaComponent,{scope:{t:e},components:{Alert:x.Alert},schema:{type:"object",properties:{public:{type:"object",properties:{allowSignUp:{"x-decorator":"FormItem",type:"boolean",title:'{{t("Allow to sign up")}}',"x-component":"Checkbox","x-component-props":{defaultChecked:!0}}}},notice:{type:"void","x-component":"Alert","x-component-props":{showIcon:!0,message:'{{t("The authentication allows users to sign in via username or email.")}}'}}}}})},at=()=>{var n;const o=i.usePlugin(_).authTypes.getEntities(),t={};for(const[r,s]of o)(n=s.components)!=null&&n.BindForm&&(t[r]=s.components.BindForm);return t},ct=()=>{const e=i.useRecord(),t=at()[e.authType];return f.createElement(t,{authenticator:e})},ut={type:"void",name:"authenticatorBind","x-decorator":"TableBlockProvider","x-decorator-props":{collection:{name:"authenticators",sortable:!1,fields:[{interface:"input",type:"string",name:"authType"},{interface:"input",type:"string",name:"title",uiSchema:{type:"string",title:'{{t("Title")}}',"x-component":"Input"}},{interface:"textarea",type:"string",name:"description",uiSchema:{type:"string",title:'{{t("Description")}}',"x-component":"Input"}},{type:"boolean",name:"bind",uiSchema:{type:"boolean",title:'{{t("Bind")}}',"x-component":"Checkbox"}},{type:"string",name:"nickname",uiSchema:{type:"string",title:'{{t("Nickname")}}',"x-component":"Input"}}]},resource:"authenticators",action:"bindTypes",params:{sort:["sort"]},rowKey:"name",showIndex:!0},"x-component":"div",properties:{table:{type:"array","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"name"},properties:{authType:{title:'{{t("Auth Type")}}',type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{authType:{type:"string","x-component":"Select","x-read-pretty":!0}}},title:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{title:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},description:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{description:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},bind:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{bind:{type:"boolean","x-component":"CollectionField","x-read-pretty":!0}}},nickname:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{nickname:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},actions:{type:"void",title:'{{t("Actions")}}',"x-component":"TableV2.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{unbind:{"x-visible":'{{ $self.query(".bind").value() }}',type:"void",title:'{{ t("Unbind") }}',"x-component":"Action.Link","x-component-props":{confirm:{title:"{{t('Unbind')}}",content:"{{t('Are you sure to unbind this authenticator?')}}"},useAction:"{{ useUnbindAction }}"}},bind:{"x-visible":'{{ !$self.query(".bind").value() }}',type:"void",title:"{{ t('Bind') }}","x-component":"Action.Link",properties:{modal:{type:"void","x-decorator":"Form",title:"{{ t('Bind') }}","x-component":"Action.Modal","x-component-props":{width:800},properties:{form:{type:"void","x-component":"BindForm"}}}}}}}}}}}}},pt=()=>{const{refreshCM:e}=i.useCollectionManager_deprecated(),o=i.useAPIClient(),t=i.useRecord();return{run(){return k(this,null,function*(){yield o.resource("authenticators").unbind({authenticator:t.name}),e()})}}},lt=()=>{const{t:e}=w();return c.jsx(x.Card,{bordered:!1,children:c.jsx(i.SchemaComponent,{schema:ut,components:{BindForm:ct},scope:{t:e,useUnbindAction:pt}})})};var L=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function fe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var H,xe;function ge(){if(xe)return H;xe=1;function e(o){var t=typeof o;return o!=null&&(t=="object"||t=="function")}return H=e,H}var X,be;function dt(){if(be)return X;be=1;var e=typeof L=="object"&&L&&L.Object===Object&&L;return X=e,X}var z,Te;function ve(){if(Te)return z;Te=1;var e=dt(),o=typeof self=="object"&&self&&self.Object===Object&&self,t=e||o||Function("return this")();return z=t,z}var Y,Se;function mt(){if(Se)return Y;Se=1;var e=ve(),o=function(){return e.Date.now()};return Y=o,Y}var Z,Ce;function yt(){if(Ce)return Z;Ce=1;var e=/\s/;function o(t){for(var n=t.length;n--&&e.test(t.charAt(n)););return n}return Z=o,Z}var J,Ae;function ht(){if(Ae)return J;Ae=1;var e=yt(),o=/^\s+/;function t(n){return n&&n.slice(0,e(n)+1).replace(o,"")}return J=t,J}var Q,we;function Ie(){if(we)return Q;we=1;var e=ve(),o=e.Symbol;return Q=o,Q}var R,Ee;function ft(){if(Ee)return R;Ee=1;var e=Ie(),o=Object.prototype,t=o.hasOwnProperty,n=o.toString,r=e?e.toStringTag:void 0;function s(a){var p=t.call(a,r),h=a[r];try{a[r]=void 0;var l=!0}catch(m){}var u=n.call(a);return l&&(p?a[r]=h:delete a[r]),u}return R=s,R}var ee,ke;function xt(){if(ke)return ee;ke=1;var e=Object.prototype,o=e.toString;function t(n){return o.call(n)}return ee=t,ee}var te,Fe;function gt(){if(Fe)return te;Fe=1;var e=Ie(),o=ft(),t=xt(),n="[object Null]",r="[object Undefined]",s=e?e.toStringTag:void 0;function a(p){return p==null?p===void 0?r:n:s&&s in Object(p)?o(p):t(p)}return te=a,te}var ne,Pe;function bt(){if(Pe)return ne;Pe=1;function e(o){return o!=null&&typeof o=="object"}return ne=e,ne}var oe,_e;function Tt(){if(_e)return oe;_e=1;var e=gt(),o=bt(),t="[object Symbol]";function n(r){return typeof r=="symbol"||o(r)&&e(r)==t}return oe=n,oe}var re,Oe;function vt(){if(Oe)return re;Oe=1;var e=ht(),o=ge(),t=Tt(),n=NaN,r=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,a=/^0o[0-7]+$/i,p=parseInt;function h(l){if(typeof l=="number")return l;if(t(l))return n;if(o(l)){var u=typeof l.valueOf=="function"?l.valueOf():l;l=o(u)?u+"":u}if(typeof l!="string")return l===0?l:+l;l=e(l);var m=s.test(l);return m||a.test(l)?p(l.slice(2),m?2:8):r.test(l)?n:+l}return re=h,re}var ie,Ne;function St(){if(Ne)return ie;Ne=1;var e=ge(),o=mt(),t=vt(),n="Expected a function",r=Math.max,s=Math.min;function a(p,h,l){var u,m,y,S,T,A,O=0,Ue=!1,B=!1,pe=!0;if(typeof p!="function")throw new TypeError(n);h=t(h)||0,e(l)&&(Ue=!!l.leading,B="maxWait"in l,y=B?r(t(l.maxWait)||0,h):y,pe="trailing"in l?!!l.trailing:pe);function le(b){var I=u,D=m;return u=m=void 0,O=b,S=p.apply(D,I),S}function Xt(b){return O=b,T=setTimeout($,h),Ue?le(b):S}function zt(b){var I=b-A,D=b-O,$e=h-I;return B?s($e,y-D):$e}function Ve(b){var I=b-A,D=b-O;return A===void 0||I>=h||I<0||B&&D>=y}function $(){var b=o();if(Ve(b))return Me(b);T=setTimeout($,zt(b))}function Me(b){return T=void 0,pe&&u?le(b):(u=m=void 0,S)}function Yt(){T!==void 0&&clearTimeout(T),O=0,u=A=m=T=void 0}function Zt(){return T===void 0?S:Me(o())}function de(){var b=o(),I=Ve(b);if(u=arguments,m=this,A=b,I){if(T===void 0)return Xt(A);if(B)return clearTimeout(T),T=setTimeout($,h),le(A)}return T===void 0&&(T=setTimeout($,h)),S}return de.cancel=Yt,de.flush=Zt,de}return ie=a,ie}var Ct=St();const At=fe(Ct),U={EMPTY_TOKEN:"EMPTY_TOKEN",EXPIRED_TOKEN:"EXPIRED_TOKEN",INVALID_TOKEN:"INVALID_TOKEN",TOKEN_RENEW_FAILED:"TOKEN_RENEW_FAILED",BLOCKED_TOKEN:"BLOCKED_TOKEN",EXPIRED_SESSION:"EXPIRED_SESSION",NOT_EXIST_USER:"NOT_EXIST_USER",SKIP_TOKEN_RENEW:"SKIP_TOKEN_RENEW",USER_HAS_NO_ROLES_ERR:"USER_HAS_NO_ROLES_ERR"};function wt(e,o){const t=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=new RegExp(`^${t.replace(/\/?$/,"")}(\\/|$)`);return e.replace(n,"/")||e}const It=At(e=>{e()},3e3,{leading:!0,trailing:!1});function Et({app:e}){return e.apiClient.axios,[n=>{var s;const r=(s=n==null?void 0:n.headers)==null?void 0:s["x-new-token"];return r&&e.apiClient.auth.setToken(r),n},n=>{var m,y,S,T,A;const r=(y=(m=n==null?void 0:n.response)==null?void 0:m.headers)==null?void 0:y["x-new-token"],s=(T=(S=n==null?void 0:n.response)==null?void 0:S.data)==null?void 0:T.errors,a=Array.isArray(s)?s[0]:null,p=e.router.state,{pathname:h,search:l}=p.location,u=e.router.basename;if(r&&e.apiClient.auth.setToken(r),n.status===401&&(a!=null&&a.code)&&U[a.code]&&(e.apiClient.auth.setToken(""),h===e.getHref("signin")&&(a==null?void 0:a.code)!==U.EMPTY_TOKEN&&n.config&&(n.config.skipNotify=!1),(a==null?void 0:a.code)==="USER_HAS_NO_ROLES_ERR"&&(n.config.skipNotify=!0,e.error=a)),n.status===401&&!((A=n.config)!=null&&A.skipAuth)&&(a!=null&&a.code)&&U[a.code]){if(!a||(a==null?void 0:a.code)===U.SKIP_TOKEN_RENEW)throw n;if(h!==e.getHref("signin")){const O=wt(h,u);It(()=>{e.apiClient.auth.setToken(null),e.router.navigate(`/signin?redirect=${O}${l}`,{replace:!0})})}}throw n}]}const se=f.createContext({type:""});se.displayName="AuthTypeContext";const ae=f.createContext({types:[]});ae.displayName="AuthTypesContext";const kt=()=>{const{types:e}=f.useContext(ae);return e},Ft=e=>{const o=i.useRecord(),t=i.useRequest(()=>Promise.resolve({data:E({},o.options)}),W(E({},e),{manual:!0})),{run:n}=t,r=i.useActionContext();return f.useEffect(()=>{r.visible&&n()},[r.visible,n]),t},Pt=e=>{var n;const t=i.usePlugin(_).authTypes.get(e);return(n=t==null?void 0:t.components)==null?void 0:n.AdminSettingsForm},_t=v.observer(()=>{const e=v.useForm(),o=i.useRecord(),t=Pt(e.values.authType||o.authType);return t?c.jsx(t,{}):null},{displayName:"Options"}),qe={name:"authenticators",sortable:!0,fields:[{name:"id",type:"string",interface:"id"},{interface:"input",type:"string",name:"name",uiSchema:{type:"string",title:'{{t("Auth UID")}}',"x-component":"Input","x-validator":e=>/^[a-zA-Z0-9_-]+$/.test(e)?"":i.i18n.t("a-z, A-Z, 0-9, _, -"),required:!0}},{interface:"input",type:"string",name:"authType",uiSchema:{type:"string",title:'{{t("Auth Type")}}',"x-component":"Select",dataSource:"{{ types }}",required:!0}},{interface:"input",type:"string",name:"title",uiSchema:{type:"string",title:'{{t("Title")}}',"x-component":"Input"}},{interface:"textarea",type:"string",name:"description",uiSchema:{type:"string",title:'{{t("Description")}}',"x-component":"Input"}},{type:"boolean",name:"enabled",uiSchema:{type:"boolean",title:'{{t("Enabled")}}',"x-component":"Checkbox"}}]},Ot={type:"object",properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(e){const o=i.useActionContext(),{type:t}=f.useContext(se);return i.useRequest(()=>Promise.resolve({data:{name:`s_${v.uid()}`,authType:t}}),W(E({},e),{refreshDeps:[o.visible]}))}},title:'{{t("Add new")}}',properties:{name:{"x-component":"CollectionField","x-decorator":"FormItem"},authType:{"x-component":"CollectionField","x-decorator":"FormItem","x-component-props":{options:"{{ types }}"}},title:{"x-component":"CollectionField","x-decorator":"FormItem"},description:{"x-component":"CollectionField","x-decorator":"FormItem"},enabled:{"x-component":"CollectionField","x-decorator":"FormItem"},options:{type:"object","x-component":"Options"},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},create:{title:'{{ t("Submit") }}',"x-action":"submit","x-component":"Action","x-use-component-props":"useCreateDatabaseConnectionAction","x-component-props":{type:"primary"}}}}}}}},Nt={type:"void",name:"authenticators","x-decorator":"TableBlockProvider","x-decorator-props":{collection:qe,dragSort:!0,action:"list",params:{pageSize:50,sort:"sort",appends:[]}},properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{delete:{type:"void",title:'{{t("Delete")}}',"x-action":"destroy","x-decorator":"ACLActionProvider","x-component":"Action","x-use-component-props":"useBulkDestroyActionProps","x-component-props":{icon:"DeleteOutlined",confirm:{title:"{{t('Delete')}}",content:"{{t('Are you sure you want to delete it?')}}"}}},create:{type:"void",title:'{{t("Add new")}}',"x-component":"AddNew","x-component-props":{type:"primary"}}}},table:{type:"array","x-uid":"input","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"}},properties:{id:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{id:{type:"number","x-component":"CollectionField","x-read-pretty":!0}}},name:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{name:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},authType:{title:'{{t("Auth Type")}}',type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{authType:{type:"string","x-component":"Select","x-read-pretty":!0,enum:"{{ types }}"}}},title:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{title:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},description:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{description:{type:"boolean","x-component":"CollectionField","x-read-pretty":!0}}},enabled:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{enabled:{type:"boolean","x-component":"CollectionField","x-read-pretty":!0}}},actions:{type:"void",title:'{{t("Actions")}}',"x-component":"TableV2.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{updateAuthenticator:{type:"void",title:'{{ t("Edit") }}',"x-action":"update","x-component":"Action.Link","x-component-props":{openMode:"drawer",icon:"EditOutlined"},"x-decorator":"ACLActionProvider",properties:{drawer:{type:"void",title:'{{ t("Edit record") }}',"x-component":"Action.Container","x-component-props":{className:"tb-action-popup"},properties:{card:{type:"void","x-acl-action-props":{skipScopeCheck:!1},"x-acl-action":"authenticators:update","x-decorator":"FormBlockProvider","x-use-decorator-props":"useEditFormBlockDecoratorProps","x-decorator-props":{action:"get",dataSource:"main",collection:qe},"x-component":"CardItem",properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":"useEditFormBlockProps",properties:{actionBar:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:24}},properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-use-component-props":"useUpdateActionProps","x-component-props":{type:"primary"}}}},name:{"x-component":"CollectionField","x-decorator":"FormItem"},authType:{"x-component":"CollectionField","x-decorator":"FormItem","x-component-props":{options:"{{ types }}"}},title:{"x-component":"CollectionField","x-decorator":"FormItem"},description:{"x-component":"CollectionField","x-decorator":"FormItem"},enabled:{"x-component":"CollectionField","x-decorator":"FormItem"},options:{type:"object","x-component":"Options"}}}}}}}}},delete:{type:"void",title:'{{ t("Delete") }}',"x-action":"destroy","x-component":"Action.Link","x-use-component-props":"useDestroyActionProps","x-component-props":{confirm:{title:"{{t('Delete record')}}",content:"{{t('Are you sure you want to delete it?')}}"}},"x-disabled":"{{ useCanNotDelete() }}"}}}}}}}}},qt=()=>{const{setVisible:e}=i.useActionContext();return{run(){return k(this,null,function*(){e(!1)})}}},jt=()=>{const{t:e}=F.useTranslation(),[o,t]=f.useState(!1),[n,r]=f.useState(""),s=kt(),a=s.map(p=>W(E({},p),{onClick:()=>{t(!0),r(p.value)}}));return c.jsx(i.ActionContextProvider,{value:{visible:o,setVisible:t},children:c.jsxs(se.Provider,{value:{type:n},children:[c.jsx(x.Dropdown,{menu:{items:a},children:c.jsxs(x.Button,{icon:c.jsx(N.PlusOutlined,{}),type:"primary",children:[e("Add new")," ",c.jsx(N.DownOutlined,{})]})}),c.jsx(i.SchemaComponent,{scope:{useCloseAction:qt,types:s,setType:r},schema:Ot})]})})},Bt=()=>{const{data:e}=i.useAsyncData();return!1},Dt=()=>{const{t:e}=w(),[o,t]=f.useState([]),n=i.useAPIClient();return i.useRequest(()=>n.resource("authenticators").listTypes().then(r=>{var a;return(((a=r==null?void 0:r.data)==null?void 0:a.data)||[]).map(p=>({key:p.name,label:e(p.title||p.name),value:p.name}))}),{onSuccess:r=>{t(r)}}),c.jsx(x.Card,{bordered:!1,children:c.jsx(ae.Provider,{value:{types:o},children:c.jsx(i.SchemaComponent,{schema:Nt,components:{AddNew:jt,Options:_t},scope:{types:o,useValuesFromOptions:Ft,useCanNotDelete:Bt,t:e}})})})},{Option:ce}=x.Select,Lt=v.connect(e=>{const{t:o}=w(),m=e,{value:t,onChange:n,minNum:r=1}=m,s=He(m,["value","onChange","minNum"]),a=/^(\d*)([a-zA-Z]*)$/,p=t?t.match(a):null;f.useEffect(()=>{p||n("10m")},[p,n]);const[h,l]=p?[parseInt(p[1]),p[2]]:[10,"m"],u=c.jsxs(x.Select,{value:l,onChange:y=>n(`${h}${y}`),style:{width:120},children:[c.jsx(ce,{value:"m",children:o("Minutes")}),c.jsx(ce,{value:"h",children:o("Hours")}),c.jsx(ce,{value:"d",children:o("Days")})]});return c.jsx(x.InputNumber,E({value:h,addonAfter:u,min:r,onChange:y=>n(`${y!=null?y:1}${l}`)},s))},v.mapProps({onInput:"onChange"})),V={InputTime:"InputTime"},Ut={[V.InputTime]:Lt};var ue,je;function Vt(){if(je)return ue;je=1;var e=1e3,o=e*60,t=o*60,n=t*24,r=n*7,s=n*365.25;ue=function(u,m){m=m||{};var y=typeof u;if(y==="string"&&u.length>0)return a(u);if(y==="number"&&isFinite(u))return m.long?h(u):p(u);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(u))};function a(u){if(u=String(u),!(u.length>100)){var m=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(u);if(m){var y=parseFloat(m[1]),S=(m[2]||"ms").toLowerCase();switch(S){case"years":case"year":case"yrs":case"yr":case"y":return y*s;case"weeks":case"week":case"w":return y*r;case"days":case"day":case"d":return y*n;case"hours":case"hour":case"hrs":case"hr":case"h":return y*t;case"minutes":case"minute":case"mins":case"min":case"m":return y*o;case"seconds":case"second":case"secs":case"sec":case"s":return y*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return y;default:return}}}}function p(u){var m=Math.abs(u);return m>=n?Math.round(u/n)+"d":m>=t?Math.round(u/t)+"h":m>=o?Math.round(u/o)+"m":m>=e?Math.round(u/e)+"s":u+"ms"}function h(u){var m=Math.abs(u);return m>=n?l(u,m,n,"day"):m>=t?l(u,m,t,"hour"):m>=o?l(u,m,o,"minute"):m>=e?l(u,m,e,"second"):u+" ms"}function l(u,m,y,S){var T=m>=y*1.5;return Math.round(u/y)+" "+S+(T?"s":"")}return ue}var Mt=Vt();const Be=fe(Mt),De="token-policy-config",Le="tokenControlConfig",$t=()=>{const e=i.useAPIClient(),o=f.useMemo(()=>v.createForm(),[]);return f.useEffect(()=>{k(null,null,function*(){var n;try{const{data:r}=yield e.resource(Le).get({filterByTk:De});(n=r==null?void 0:r.data)!=null&&n.config&&o.setValues(r.data.config)}catch(r){console.error(r)}})},[o,e]),{form:o}},Kt=()=>{const{message:e}=x.App.useApp(),o=i.useAPIClient(),t=v.useForm(),{t:n}=w();return{type:"primary",onClick(){return k(this,null,function*(){t.clearErrors("*");const{tokenExpirationTime:s,sessionExpirationTime:a,expiredTokenRenewLimit:p}=t.values;if(Be(s)>=Be(a)){t.setFieldState("tokenExpirationTime",l=>{l.feedbacks=[{type:"error",code:"ValidateError",messages:[n("Token validity period must be less than session validity period!")]}]});return}yield t.submit();const h=yield o.resource(Le).update({values:{config:t.values},filterByTk:De});h&&h.status===200&&e.success(n("Saved successfully!"))})}}},M={useSubmitActionProps:"useSubmitActionProps",useEditForm:"useEditForm"},Wt={[M.useEditForm]:$t,[M.useSubmitActionProps]:Kt},Gt={name:v.uid(),"x-component":"FormV2","x-use-component-props":M.useEditForm,type:"object",properties:{sessionExpirationTime:{type:"string",title:q("Session validity period"),"x-decorator":"FormItem","x-component":V.InputTime,required:!0,description:q("The maximum valid time for each user login. During the session validity, the Token will be automatically updated. After the timeout, the user is required to log in again.")},tokenExpirationTime:{type:"string",title:q("Token validity period"),"x-decorator":"FormItem","x-component":V.InputTime,required:!0,description:q("The validity period of each issued API Token. After the Token expires, if it is within the session validity period and has not exceeded the refresh limit, the server will automatically issue a new Token to maintain the user session, otherwise the user is required to log in again. (Each Token can only be refreshed once)")},expiredTokenRenewLimit:{type:"string",title:"{{t('Expired token refresh limit')}}","x-decorator":"FormItem","x-component":V.InputTime,"x-component-props":{minNum:0},required:!0,description:q("The maximum time limit allowed for refreshing a Token after it expires. After this time limit, the token cannot be automatically renewed, and the user needs to log in again.")},footer:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column"},properties:{submit:{title:'{{t("Submit")}}',"x-component":"Action","x-use-component-props":M.useSubmitActionProps}}}}},Ht=()=>{const{t:e}=w();return c.jsx(x.Card,{bordered:!1,children:c.jsx(i.SchemaComponent,{schema:Gt,scope:E({t:e},Wt),components:Ut})})};class _ extends i.Plugin{constructor(){super(...arguments),this.authTypes=new g.Registry}registerType(o,t){this.authTypes.register(o,t)}load(){return k(this,null,function*(){this.app.systemSettingsManager.add("system-services."+P,{icon:"LoginOutlined",title:`{{t("Authentication", { ns: "${P}" })}}`,Component:Dt,aclSnippet:"pm.auth.authenticators"}),this.app.userSettingsManager.add(P,{icon:"LoginOutlined",title:`{{t("Authentication login bind", { ns: "${P}" })}}`,Component:lt,aclSnippet:"pm.auth.authenticators"}),this.router.add("auth",{Component:"AuthLayout"}),this.router.add("auth.signin",{path:"/signin",Component:"SignInPage"}),this.router.add("auth.signup",{path:"/signup",Component:"SignUpPage"}),this.app.addComponents({AuthLayout:Ye,SignInPage:Qe,SignUpPage:et}),this.app.providers.unshift([ze,{}]),this.registerType(Xe,{components:{SignInForm:nt,SignUpForm:it,AdminSettingsForm:st}}),this.app.systemSettingsManager.add("security.token-policy",{title:`{{t("Token policy", { ns: "${P}" })}}`,Component:Ht,aclSnippet:"pm.security.token-policy",icon:"ApiOutlined",sort:0});const[o,t]=Et({app:this.app});this.app.apiClient.axios.interceptors.response.handlers.unshift({fulfilled:o,rejected:t,synchronous:!1,runWhen:null})})}}d.AuthenticatorsContext=j,d.PluginAuthClient=_,d.default=_,d.useAuthenticator=G,d.useRedirect=ye,d.useSignIn=he,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
22
|
+
}}}`,"x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Username/Email")}}',style:{}}},password:{type:"string","x-component":"Password",required:!0,"x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Password")}}',style:{}}},actions:{type:"void","x-component":"div",properties:{submit:{title:'{{t("Sign in")}}',type:"void","x-component":"Action","x-component-props":{htmlType:"submit",block:!0,type:"primary",useAction:"{{ useBasicSignIn }}",style:{width:"100%"}}}}},signUp:{type:"void","x-component":"Link","x-component-props":{to:"{{ signUpLink }}"},"x-content":'{{t("Create an account")}}',"x-visible":"{{ allowSignUp }}"}}},nt=e=>{const{t:o}=w(),t=e.authenticator,{authType:n,name:r,options:s}=t,u=!!me()[n]&&(s==null?void 0:s.allowSignUp),h=`/signup?name=${r}`,l=()=>he(r);return c.jsx(i.SchemaComponent,{schema:tt,scope:{useBasicSignIn:l,allowSignUp:u,signUpLink:h,t:o}})},ot=e=>{const o=C.useNavigate(),t=v.useForm(),n=i.useAPIClient(),{t:r}=F.useTranslation();return{run(){return k(this,null,function*(){var a;yield t.submit(),yield n.auth.signUp(t.values,e==null?void 0:e.authenticator),x.message.success(((a=e==null?void 0:e.message)==null?void 0:a.success)||r("Sign up successfully, and automatically jump to the sign in page")),setTimeout(()=>{o("/signin")},2e3)})}}},rt={type:"object",name:v.uid(),"x-component":"FormV2",properties:{username:{type:"string",required:!0,"x-component":"Input","x-validator":{username:!0},"x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Username")}}',style:{}}},password:{type:"string",required:!0,"x-component":"Password","x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Password")}}',checkStrength:!0,style:{}},"x-reactions":[{dependencies:[".confirm_password"],fulfill:{state:{selfErrors:'{{$deps[0] && $self.value && $self.value !== $deps[0] ? t("Password mismatch") : ""}}'}}}]},confirm_password:{type:"string",required:!0,"x-component":"Password","x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Confirm password")}}',style:{}},"x-reactions":[{dependencies:[".password"],fulfill:{state:{selfErrors:'{{$deps[0] && $self.value && $self.value !== $deps[0] ? t("Password mismatch") : ""}}'}}}]},actions:{type:"void","x-component":"div",properties:{submit:{title:'{{t("Sign up")}}',type:"void","x-component":"Action","x-component-props":{block:!0,type:"primary",htmlType:"submit",useAction:"{{ useBasicSignUp }}",style:{width:"100%"}}}}},link:{type:"void","x-component":"div",properties:{link:{type:"void","x-component":"Link","x-component-props":{to:"/signin"},"x-content":'{{t("Log in with an existing account")}}'}}}}},it=({authenticatorName:e})=>{const{t:o}=w(),t=()=>ot({authenticator:e}),n=G(e),{options:r}=n;return r!=null&&r.allowSignUp?c.jsx(i.SchemaComponent,{schema:rt,scope:{useBasicSignUp:t,t:o}}):c.jsx(C.Navigate,{to:"/not-found",replace:!0})},st=()=>{const{t:e}=w();return c.jsx(i.SchemaComponent,{scope:{t:e},components:{Alert:x.Alert},schema:{type:"object",properties:{public:{type:"object",properties:{allowSignUp:{"x-decorator":"FormItem",type:"boolean",title:'{{t("Allow to sign up")}}',"x-component":"Checkbox","x-component-props":{defaultChecked:!0}}}},notice:{type:"void","x-component":"Alert","x-component-props":{showIcon:!0,message:'{{t("The authentication allows users to sign in via username or email.")}}'}}}}})},at=()=>{var n;const o=i.usePlugin(_).authTypes.getEntities(),t={};for(const[r,s]of o)(n=s.components)!=null&&n.BindForm&&(t[r]=s.components.BindForm);return t},ct=()=>{const e=i.useRecord(),t=at()[e.authType];return f.createElement(t,{authenticator:e})},pt={type:"void",name:"authenticatorBind","x-decorator":"TableBlockProvider","x-decorator-props":{collection:{name:"authenticators",sortable:!1,fields:[{interface:"input",type:"string",name:"authType"},{interface:"input",type:"string",name:"title",uiSchema:{type:"string",title:'{{t("Title")}}',"x-component":"Input"}},{interface:"textarea",type:"string",name:"description",uiSchema:{type:"string",title:'{{t("Description")}}',"x-component":"Input"}},{type:"boolean",name:"bind",uiSchema:{type:"boolean",title:'{{t("Bind")}}',"x-component":"Checkbox"}},{type:"string",name:"nickname",uiSchema:{type:"string",title:'{{t("Nickname")}}',"x-component":"Input"}}]},resource:"authenticators",action:"bindTypes",params:{sort:["sort"]},rowKey:"name",showIndex:!0},"x-component":"div",properties:{table:{type:"array","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"name"},properties:{authType:{title:'{{t("Auth Type")}}',type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{authType:{type:"string","x-component":"Select","x-read-pretty":!0}}},title:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{title:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},description:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{description:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},bind:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{bind:{type:"boolean","x-component":"CollectionField","x-read-pretty":!0}}},nickname:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{nickname:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},actions:{type:"void",title:'{{t("Actions")}}',"x-component":"TableV2.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{unbind:{"x-visible":'{{ $self.query(".bind").value() }}',type:"void",title:'{{ t("Unbind") }}',"x-component":"Action.Link","x-component-props":{confirm:{title:"{{t('Unbind')}}",content:"{{t('Are you sure to unbind this authenticator?')}}"},useAction:"{{ useUnbindAction }}"}},bind:{"x-visible":'{{ !$self.query(".bind").value() }}',type:"void",title:"{{ t('Bind') }}","x-component":"Action.Link",properties:{modal:{type:"void","x-decorator":"Form",title:"{{ t('Bind') }}","x-component":"Action.Modal","x-component-props":{width:800},properties:{form:{type:"void","x-component":"BindForm"}}}}}}}}}}}}},ut=()=>{const{refreshCM:e}=i.useCollectionManager_deprecated(),o=i.useAPIClient(),t=i.useRecord();return{run(){return k(this,null,function*(){yield o.resource("authenticators").unbind({authenticator:t.name}),e()})}}},lt=()=>{const{t:e}=w();return c.jsx(x.Card,{bordered:!1,children:c.jsx(i.SchemaComponent,{schema:pt,components:{BindForm:ct},scope:{t:e,useUnbindAction:ut}})})};var L=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function fe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var H,xe;function ge(){if(xe)return H;xe=1;function e(o){var t=typeof o;return o!=null&&(t=="object"||t=="function")}return H=e,H}var X,be;function dt(){if(be)return X;be=1;var e=typeof L=="object"&&L&&L.Object===Object&&L;return X=e,X}var z,Te;function ve(){if(Te)return z;Te=1;var e=dt(),o=typeof self=="object"&&self&&self.Object===Object&&self,t=e||o||Function("return this")();return z=t,z}var Y,Se;function mt(){if(Se)return Y;Se=1;var e=ve(),o=function(){return e.Date.now()};return Y=o,Y}var Z,Ce;function yt(){if(Ce)return Z;Ce=1;var e=/\s/;function o(t){for(var n=t.length;n--&&e.test(t.charAt(n)););return n}return Z=o,Z}var J,Ae;function ht(){if(Ae)return J;Ae=1;var e=yt(),o=/^\s+/;function t(n){return n&&n.slice(0,e(n)+1).replace(o,"")}return J=t,J}var Q,we;function Ie(){if(we)return Q;we=1;var e=ve(),o=e.Symbol;return Q=o,Q}var R,Ee;function ft(){if(Ee)return R;Ee=1;var e=Ie(),o=Object.prototype,t=o.hasOwnProperty,n=o.toString,r=e?e.toStringTag:void 0;function s(a){var u=t.call(a,r),h=a[r];try{a[r]=void 0;var l=!0}catch(m){}var p=n.call(a);return l&&(u?a[r]=h:delete a[r]),p}return R=s,R}var ee,ke;function xt(){if(ke)return ee;ke=1;var e=Object.prototype,o=e.toString;function t(n){return o.call(n)}return ee=t,ee}var te,Fe;function gt(){if(Fe)return te;Fe=1;var e=Ie(),o=ft(),t=xt(),n="[object Null]",r="[object Undefined]",s=e?e.toStringTag:void 0;function a(u){return u==null?u===void 0?r:n:s&&s in Object(u)?o(u):t(u)}return te=a,te}var ne,Pe;function bt(){if(Pe)return ne;Pe=1;function e(o){return o!=null&&typeof o=="object"}return ne=e,ne}var oe,_e;function Tt(){if(_e)return oe;_e=1;var e=gt(),o=bt(),t="[object Symbol]";function n(r){return typeof r=="symbol"||o(r)&&e(r)==t}return oe=n,oe}var re,Oe;function vt(){if(Oe)return re;Oe=1;var e=ht(),o=ge(),t=Tt(),n=NaN,r=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,a=/^0o[0-7]+$/i,u=parseInt;function h(l){if(typeof l=="number")return l;if(t(l))return n;if(o(l)){var p=typeof l.valueOf=="function"?l.valueOf():l;l=o(p)?p+"":p}if(typeof l!="string")return l===0?l:+l;l=e(l);var m=s.test(l);return m||a.test(l)?u(l.slice(2),m?2:8):r.test(l)?n:+l}return re=h,re}var ie,Ne;function St(){if(Ne)return ie;Ne=1;var e=ge(),o=mt(),t=vt(),n="Expected a function",r=Math.max,s=Math.min;function a(u,h,l){var p,m,y,S,T,A,O=0,Ue=!1,B=!1,ue=!0;if(typeof u!="function")throw new TypeError(n);h=t(h)||0,e(l)&&(Ue=!!l.leading,B="maxWait"in l,y=B?r(t(l.maxWait)||0,h):y,ue="trailing"in l?!!l.trailing:ue);function le(b){var I=p,D=m;return p=m=void 0,O=b,S=u.apply(D,I),S}function Xt(b){return O=b,T=setTimeout($,h),Ue?le(b):S}function zt(b){var I=b-A,D=b-O,$e=h-I;return B?s($e,y-D):$e}function Ve(b){var I=b-A,D=b-O;return A===void 0||I>=h||I<0||B&&D>=y}function $(){var b=o();if(Ve(b))return Me(b);T=setTimeout($,zt(b))}function Me(b){return T=void 0,ue&&p?le(b):(p=m=void 0,S)}function Yt(){T!==void 0&&clearTimeout(T),O=0,p=A=m=T=void 0}function Zt(){return T===void 0?S:Me(o())}function de(){var b=o(),I=Ve(b);if(p=arguments,m=this,A=b,I){if(T===void 0)return Xt(A);if(B)return clearTimeout(T),T=setTimeout($,h),le(A)}return T===void 0&&(T=setTimeout($,h)),S}return de.cancel=Yt,de.flush=Zt,de}return ie=a,ie}var Ct=St();const At=fe(Ct),U={EMPTY_TOKEN:"EMPTY_TOKEN",EXPIRED_TOKEN:"EXPIRED_TOKEN",INVALID_TOKEN:"INVALID_TOKEN",TOKEN_RENEW_FAILED:"TOKEN_RENEW_FAILED",BLOCKED_TOKEN:"BLOCKED_TOKEN",EXPIRED_SESSION:"EXPIRED_SESSION",NOT_EXIST_USER:"NOT_EXIST_USER",SKIP_TOKEN_RENEW:"SKIP_TOKEN_RENEW",USER_HAS_NO_ROLES_ERR:"USER_HAS_NO_ROLES_ERR"};function wt(e,o){const t=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=new RegExp(`^${t.replace(/\/?$/,"")}(\\/|$)`);return e.replace(n,"/")||e}const It=At(e=>{e()},3e3,{leading:!0,trailing:!1});function Et({app:e}){return e.apiClient.axios,[n=>{var s;const r=(s=n==null?void 0:n.headers)==null?void 0:s["x-new-token"];return r&&e.apiClient.auth.setToken(r),n},n=>{var m,y,S,T,A;const r=(y=(m=n==null?void 0:n.response)==null?void 0:m.headers)==null?void 0:y["x-new-token"],s=(T=(S=n==null?void 0:n.response)==null?void 0:S.data)==null?void 0:T.errors,a=Array.isArray(s)?s[0]:null,u=e.router.state,{pathname:h,search:l}=u.location,p=e.router.basename;if(r&&e.apiClient.auth.setToken(r),n.status===401&&(a!=null&&a.code)&&U[a.code]&&(e.apiClient.auth.setToken(""),h===e.getHref("signin")&&(a==null?void 0:a.code)!==U.EMPTY_TOKEN&&n.config&&(n.config.skipNotify=!1),(a==null?void 0:a.code)==="USER_HAS_NO_ROLES_ERR"&&(n.config.skipNotify=!0,e.error=a)),n.status===401&&!((A=n.config)!=null&&A.skipAuth)&&(a!=null&&a.code)&&U[a.code]){if(!a||(a==null?void 0:a.code)===U.SKIP_TOKEN_RENEW)throw n;if(h!==e.getHref("signin")){const O=wt(h,p);It(()=>{e.apiClient.auth.setToken(null),e.router.navigate(`/signin?redirect=${O}${l}`,{replace:!0})})}}throw n}]}const se=f.createContext({type:""});se.displayName="AuthTypeContext";const ae=f.createContext({types:[]});ae.displayName="AuthTypesContext";const kt=()=>{const{types:e}=f.useContext(ae);return e},Ft=e=>{const o=i.useRecord(),t=i.useRequest(()=>Promise.resolve({data:E({},o.options)}),W(E({},e),{manual:!0})),{run:n}=t,r=i.useActionContext();return f.useEffect(()=>{r.visible&&n()},[r.visible,n]),t},Pt=e=>{var n;const t=i.usePlugin(_).authTypes.get(e);return(n=t==null?void 0:t.components)==null?void 0:n.AdminSettingsForm},_t=v.observer(()=>{const e=v.useForm(),o=i.useRecord(),t=Pt(e.values.authType||o.authType);return t?c.jsx(t,{}):null},{displayName:"Options"}),qe={name:"authenticators",sortable:!0,fields:[{name:"id",type:"string",interface:"id"},{interface:"input",type:"string",name:"name",uiSchema:{type:"string",title:'{{t("Auth UID")}}',"x-component":"Input","x-validator":e=>/^[a-zA-Z0-9_-]+$/.test(e)?"":i.i18n.t("a-z, A-Z, 0-9, _, -"),required:!0}},{interface:"input",type:"string",name:"authType",uiSchema:{type:"string",title:'{{t("Auth Type")}}',"x-component":"Select",dataSource:"{{ types }}",required:!0}},{interface:"input",type:"string",name:"title",uiSchema:{type:"string",title:'{{t("Title")}}',"x-component":"Input"}},{interface:"textarea",type:"string",name:"description",uiSchema:{type:"string",title:'{{t("Description")}}',"x-component":"Input"}},{type:"boolean",name:"enabled",uiSchema:{type:"boolean",title:'{{t("Enabled")}}',"x-component":"Checkbox"}}]},Ot={type:"object",properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(e){const o=i.useActionContext(),{type:t}=f.useContext(se);return i.useRequest(()=>Promise.resolve({data:{name:`s_${v.uid()}`,authType:t}}),W(E({},e),{refreshDeps:[o.visible]}))}},title:'{{t("Add new")}}',properties:{name:{"x-component":"CollectionField","x-decorator":"FormItem"},authType:{"x-component":"CollectionField","x-decorator":"FormItem","x-component-props":{options:"{{ types }}"}},title:{"x-component":"CollectionField","x-decorator":"FormItem"},description:{"x-component":"CollectionField","x-decorator":"FormItem"},enabled:{"x-component":"CollectionField","x-decorator":"FormItem"},options:{type:"object","x-component":"Options"},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},create:{title:'{{ t("Submit") }}',"x-action":"submit","x-component":"Action","x-use-component-props":"useCreateDatabaseConnectionAction","x-component-props":{type:"primary"}}}}}}}},Nt={type:"void",name:"authenticators","x-decorator":"TableBlockProvider","x-decorator-props":{collection:qe,dragSort:!0,action:"list",params:{pageSize:50,sort:"sort",appends:[]}},properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{delete:{type:"void",title:'{{t("Delete")}}',"x-action":"destroy","x-decorator":"ACLActionProvider","x-component":"Action","x-use-component-props":"useBulkDestroyActionProps","x-component-props":{icon:"DeleteOutlined",confirm:{title:"{{t('Delete')}}",content:"{{t('Are you sure you want to delete it?')}}"}}},create:{type:"void",title:'{{t("Add new")}}',"x-component":"AddNew","x-component-props":{type:"primary"}}}},table:{type:"array","x-uid":"input","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"}},properties:{id:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{id:{type:"number","x-component":"CollectionField","x-read-pretty":!0}}},name:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{name:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},authType:{title:'{{t("Auth Type")}}',type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{authType:{type:"string","x-component":"Select","x-read-pretty":!0,enum:"{{ types }}"}}},title:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{title:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},description:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{description:{type:"boolean","x-component":"CollectionField","x-read-pretty":!0}}},enabled:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{enabled:{type:"boolean","x-component":"CollectionField","x-read-pretty":!0}}},actions:{type:"void",title:'{{t("Actions")}}',"x-component":"TableV2.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{updateAuthenticator:{type:"void",title:'{{ t("Edit") }}',"x-action":"update","x-component":"Action.Link","x-component-props":{openMode:"drawer",icon:"EditOutlined"},"x-decorator":"ACLActionProvider",properties:{drawer:{type:"void",title:'{{ t("Edit record") }}',"x-component":"Action.Container","x-component-props":{className:"tb-action-popup"},properties:{card:{type:"void","x-acl-action-props":{skipScopeCheck:!1},"x-acl-action":"authenticators:update","x-decorator":"FormBlockProvider","x-use-decorator-props":"useEditFormBlockDecoratorProps","x-decorator-props":{action:"get",dataSource:"main",collection:qe},"x-component":"CardItem",properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":"useEditFormBlockProps",properties:{actionBar:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:24}},properties:{cancel:{title:'{{ t("Cancel") }}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-use-component-props":"useUpdateActionProps","x-component-props":{type:"primary"}}}},name:{"x-component":"CollectionField","x-decorator":"FormItem"},authType:{"x-component":"CollectionField","x-decorator":"FormItem","x-component-props":{options:"{{ types }}"}},title:{"x-component":"CollectionField","x-decorator":"FormItem"},description:{"x-component":"CollectionField","x-decorator":"FormItem"},enabled:{"x-component":"CollectionField","x-decorator":"FormItem"},options:{type:"object","x-component":"Options"}}}}}}}}},delete:{type:"void",title:'{{ t("Delete") }}',"x-action":"destroy","x-component":"Action.Link","x-use-component-props":"useDestroyActionProps","x-component-props":{confirm:{title:"{{t('Delete record')}}",content:"{{t('Are you sure you want to delete it?')}}"}},"x-disabled":"{{ useCanNotDelete() }}"}}}}}}}}},qt=()=>{const{setVisible:e}=i.useActionContext();return{run(){return k(this,null,function*(){e(!1)})}}},jt=()=>{const{t:e}=F.useTranslation(),[o,t]=f.useState(!1),[n,r]=f.useState(""),s=kt(),a=s.map(u=>W(E({},u),{onClick:()=>{t(!0),r(u.value)}}));return c.jsx(i.ActionContextProvider,{value:{visible:o,setVisible:t},children:c.jsxs(se.Provider,{value:{type:n},children:[c.jsx(x.Dropdown,{menu:{items:a},children:c.jsxs(x.Button,{icon:c.jsx(N.PlusOutlined,{}),type:"primary",children:[e("Add new")," ",c.jsx(N.DownOutlined,{})]})}),c.jsx(i.SchemaComponent,{scope:{useCloseAction:qt,types:s,setType:r},schema:Ot})]})})},Bt=()=>{const{data:e}=i.useAsyncData();return!1},Dt=()=>{const{t:e}=w(),[o,t]=f.useState([]),n=i.useAPIClient();return i.useRequest(()=>n.resource("authenticators").listTypes().then(r=>{var a;return(((a=r==null?void 0:r.data)==null?void 0:a.data)||[]).map(u=>({key:u.name,label:e(u.title||u.name),value:u.name}))}),{onSuccess:r=>{t(r)}}),c.jsx(x.Card,{bordered:!1,children:c.jsx(ae.Provider,{value:{types:o},children:c.jsx(i.SchemaComponent,{schema:Nt,components:{AddNew:jt,Options:_t},scope:{types:o,useValuesFromOptions:Ft,useCanNotDelete:Bt,t:e}})})})},{Option:ce}=x.Select,Lt=v.connect(e=>{const{t:o}=w(),m=e,{value:t,onChange:n,minNum:r=1}=m,s=He(m,["value","onChange","minNum"]),a=/^(\d*)([a-zA-Z]*)$/,u=t?t.match(a):null;f.useEffect(()=>{u||n("10m")},[u,n]);const[h,l]=u?[parseInt(u[1]),u[2]]:[10,"m"],p=c.jsxs(x.Select,{value:l,onChange:y=>n(`${h}${y}`),style:{width:120},children:[c.jsx(ce,{value:"m",children:o("Minutes")}),c.jsx(ce,{value:"h",children:o("Hours")}),c.jsx(ce,{value:"d",children:o("Days")})]});return c.jsx(x.InputNumber,E({value:h,addonAfter:p,min:r,onChange:y=>n(`${y!=null?y:1}${l}`)},s))},v.mapProps({onInput:"onChange"})),V={InputTime:"InputTime"},Ut={[V.InputTime]:Lt};var pe,je;function Vt(){if(je)return pe;je=1;var e=1e3,o=e*60,t=o*60,n=t*24,r=n*7,s=n*365.25;pe=function(p,m){m=m||{};var y=typeof p;if(y==="string"&&p.length>0)return a(p);if(y==="number"&&isFinite(p))return m.long?h(p):u(p);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(p))};function a(p){if(p=String(p),!(p.length>100)){var m=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(p);if(m){var y=parseFloat(m[1]),S=(m[2]||"ms").toLowerCase();switch(S){case"years":case"year":case"yrs":case"yr":case"y":return y*s;case"weeks":case"week":case"w":return y*r;case"days":case"day":case"d":return y*n;case"hours":case"hour":case"hrs":case"hr":case"h":return y*t;case"minutes":case"minute":case"mins":case"min":case"m":return y*o;case"seconds":case"second":case"secs":case"sec":case"s":return y*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return y;default:return}}}}function u(p){var m=Math.abs(p);return m>=n?Math.round(p/n)+"d":m>=t?Math.round(p/t)+"h":m>=o?Math.round(p/o)+"m":m>=e?Math.round(p/e)+"s":p+"ms"}function h(p){var m=Math.abs(p);return m>=n?l(p,m,n,"day"):m>=t?l(p,m,t,"hour"):m>=o?l(p,m,o,"minute"):m>=e?l(p,m,e,"second"):p+" ms"}function l(p,m,y,S){var T=m>=y*1.5;return Math.round(p/y)+" "+S+(T?"s":"")}return pe}var Mt=Vt();const Be=fe(Mt),De="token-policy-config",Le="tokenControlConfig",$t=()=>{const e=i.useAPIClient(),o=f.useMemo(()=>v.createForm(),[]);return f.useEffect(()=>{k(null,null,function*(){var n;try{const{data:r}=yield e.resource(Le).get({filterByTk:De});(n=r==null?void 0:r.data)!=null&&n.config&&o.setValues(r.data.config)}catch(r){console.error(r)}})},[o,e]),{form:o}},Kt=()=>{const{message:e}=x.App.useApp(),o=i.useAPIClient(),t=v.useForm(),{t:n}=w();return{type:"primary",onClick(){return k(this,null,function*(){t.clearErrors("*");const{tokenExpirationTime:s,sessionExpirationTime:a,expiredTokenRenewLimit:u}=t.values;if(Be(s)>=Be(a)){t.setFieldState("tokenExpirationTime",l=>{l.feedbacks=[{type:"error",code:"ValidateError",messages:[n("Token validity period must be less than session validity period!")]}]});return}yield t.submit();const h=yield o.resource(Le).update({values:{config:t.values},filterByTk:De});h&&h.status===200&&e.success(n("Saved successfully!"))})}}},M={useSubmitActionProps:"useSubmitActionProps",useEditForm:"useEditForm"},Wt={[M.useEditForm]:$t,[M.useSubmitActionProps]:Kt},Gt={name:v.uid(),"x-component":"FormV2","x-use-component-props":M.useEditForm,type:"object",properties:{sessionExpirationTime:{type:"string",title:q("Session validity period"),"x-decorator":"FormItem","x-component":V.InputTime,required:!0,description:q("The maximum valid time for each user login. During the session validity, the Token will be automatically updated. After the timeout, the user is required to log in again.")},tokenExpirationTime:{type:"string",title:q("Token validity period"),"x-decorator":"FormItem","x-component":V.InputTime,required:!0,description:q("The validity period of each issued API Token. After the Token expires, if it is within the session validity period and has not exceeded the refresh limit, the server will automatically issue a new Token to maintain the user session, otherwise the user is required to log in again. (Each Token can only be refreshed once)")},expiredTokenRenewLimit:{type:"string",title:"{{t('Expired token refresh limit')}}","x-decorator":"FormItem","x-component":V.InputTime,"x-component-props":{minNum:0},required:!0,description:q("The maximum time limit allowed for refreshing a Token after it expires. After this time limit, the token cannot be automatically renewed, and the user needs to log in again.")},footer:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column"},properties:{submit:{title:'{{t("Submit")}}',"x-component":"Action","x-use-component-props":M.useSubmitActionProps}}}}},Ht=()=>{const{t:e}=w();return c.jsx(x.Card,{bordered:!1,children:c.jsx(i.SchemaComponent,{schema:Gt,scope:E({t:e},Wt),components:Ut})})};class _ extends i.Plugin{constructor(){super(...arguments),this.authTypes=new g.Registry}registerType(o,t){this.authTypes.register(o,t)}load(){return k(this,null,function*(){this.app.systemSettingsManager.add("system-services."+P,{icon:"LoginOutlined",title:`{{t("Authentication", { ns: "${P}" })}}`,Component:Dt,aclSnippet:"pm.auth.authenticators"}),this.app.userSettingsManager.add(P,{icon:"LoginOutlined",title:`{{t("Authentication login bind", { ns: "${P}" })}}`,Component:lt,aclSnippet:"pm.auth.authenticators"}),this.router.add("auth",{Component:"AuthLayout"}),this.router.add("auth.signin",{path:"/signin",Component:"SignInPage"}),this.router.add("auth.signup",{path:"/signup",Component:"SignUpPage"}),this.app.addComponents({AuthLayout:Ye,SignInPage:Qe,SignUpPage:et}),this.app.providers.unshift([ze,{}]),this.registerType(Xe,{components:{SignInForm:nt,SignUpForm:it,AdminSettingsForm:st}}),this.app.systemSettingsManager.add("security.token-policy",{title:`{{t("Token policy", { ns: "${P}" })}}`,Component:Ht,aclSnippet:"pm.security.token-policy",icon:"ApiOutlined",sort:0});const[o,t]=Et({app:this.app});this.app.apiClient.axios.interceptors.response.handlers.unshift({fulfilled:o,rejected:t,synchronous:!1,runWhen:null})})}}d.AuthenticatorsContext=j,d.PluginAuthClient=_,d.default=_,d.useAuthenticator=G,d.useRedirect=ye,d.useSignIn=he,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/externalVersion.js
CHANGED
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
module.exports = {
|
|
2
2
|
"react": "18.3.1",
|
|
3
|
-
"@tachybase/client": "1.3.
|
|
3
|
+
"@tachybase/client": "1.3.22",
|
|
4
4
|
"react-router-dom": "6.28.1",
|
|
5
|
-
"@
|
|
5
|
+
"@tego/client": "1.3.39",
|
|
6
6
|
"axios": "1.7.7",
|
|
7
7
|
"lodash": "4.17.21",
|
|
8
|
-
"@
|
|
9
|
-
"@tachybase/
|
|
10
|
-
"@tachybase/cache": "1.3.20",
|
|
11
|
-
"@tachybase/server": "1.3.20",
|
|
12
|
-
"@tachybase/logger": "1.3.20",
|
|
13
|
-
"@tachybase/test": "1.3.20",
|
|
8
|
+
"@tego/server": "1.3.39",
|
|
9
|
+
"@tachybase/test": "1.3.39",
|
|
14
10
|
"antd": "5.22.5",
|
|
15
|
-
"@tachybase/schema": "1.3.
|
|
11
|
+
"@tachybase/schema": "1.3.39",
|
|
16
12
|
"react-i18next": "15.2.0",
|
|
17
|
-
"@ant-design/icons": "5.
|
|
18
|
-
"@tachybase/actions": "1.3.20"
|
|
13
|
+
"@ant-design/icons": "5.6.1"
|
|
19
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"cron","description":"Cron jobs for your node","version":"3.3.1","author":"Nick Campbell <nicholas.j.campbell@gmail.com> (https://github.com/ncb000gt)","bugs":{"url":"https://github.com/kelektiv/node-cron/issues"},"repository":{"type":"git","url":"https://github.com/kelektiv/node-cron.git"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc -b tsconfig.build.json","lint:eslint":"eslint src/ tests/","lint:prettier":"prettier ./**/*.{json,md,yml} --check","lint":"npm run lint:eslint && npm run lint:prettier","lint:fix":"npm run lint:eslint -- --fix && npm run lint:prettier -- --write","test":"jest --coverage","test:watch":"jest --watch --coverage","test:fuzz":"jest --testMatch='**/*.fuzz.ts' --coverage=false --testTimeout=120000","prepare":"husky"},"dependencies":{"@types/luxon":"~3.4.0","luxon":"~3.5.0"},"devDependencies":{"@commitlint/cli":"19.6.0","@eslint/js":"^9.14.0","@fast-check/jest":"2.0.3","@insurgent/commitlint-config":"20.0.0","@insurgent/conventional-changelog-preset":"10.0.0","@semantic-release/changelog":"6.0.3","@semantic-release/commit-analyzer":"13.0.0","@semantic-release/git":"10.0.1","@semantic-release/github":"11.0.1","@semantic-release/npm":"12.0.1","@semantic-release/release-notes-generator":"14.0.1","@types/jest":"29.5.14","@types/node":"20.17.9","@types/sinon":"17.0.3","chai":"4.5.0","eslint":"8.57.1","eslint-config-prettier":"9.1.0","eslint-plugin-jest":"27.9.0","eslint-plugin-prettier":"5.2.1","husky":"9.1.7","jest":"29.7.0","lint-staged":"15.2.10","prettier":"3.3.3","semantic-release":"24.2.0","sinon":"17.0.2","ts-jest":"29.2.5","typescript":"5.7.2","typescript-eslint":"^7.2.0"},"keywords":["cron","node cron","node-cron","schedule","scheduler","cronjob","cron job"],"license":"MIT","contributors":["Brandon der Blätter <https://interlucid.com/contact/> (https://github.com/intcreator)","Pierre Cavin <me@sherlox.io> (https://github.com/sheerlox)","Romain Beauxis <toots@rastageeks.org> (https://github.com/toots)","James Padolsey <> (https://github.com/jamespadolsey)","Finn Herpich <fh@three-heads.de> (https://github.com/ErrorProne)","Clifton Cunningham <clifton.cunningham@gmail.com> (https://github.com/cliftonc)","Eric Abouaf <eric.abouaf@gmail.com> (https://github.com/neyric)","humanchimp <morphcham@gmail.com> (https://github.com/humanchimp)","Craig Condon <craig@spiceapps.com> (https://github.com/spiceapps)","Dan Bear <daniel@hulu.com> (https://github.com/danhbear)","Vadim Baryshev <vadimbaryshev@gmail.com> (https://github.com/baryshev)","Leandro Ferrari <lfthomaz@gmail.com> (https://github.com/lfthomaz)","Gregg Zigler <greggzigler@gmail.com> (https://github.com/greggzigler)","Jordan Abderrachid <jabderrachid@gmail.com> (https://github.com/jordanabderrachid)","Masakazu Matsushita <matsukaz@gmail.com> (matsukaz)","Christopher Lunt <me@kirisu.co.uk> (https://github.com/kirisu)"],"files":["dist/**/*.js","dist/**/*.d.ts","CHANGELOG.md","LICENSE","README.md"],"lint-staged":{"*.ts":"eslint src/ tests/ --fix","*.{json,md,yml}":"prettier ./**/*.{json,md,yml} --check --write"},"_lastModified":"2025-07-
|
|
1
|
+
{"name":"cron","description":"Cron jobs for your node","version":"3.3.1","author":"Nick Campbell <nicholas.j.campbell@gmail.com> (https://github.com/ncb000gt)","bugs":{"url":"https://github.com/kelektiv/node-cron/issues"},"repository":{"type":"git","url":"https://github.com/kelektiv/node-cron.git"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc -b tsconfig.build.json","lint:eslint":"eslint src/ tests/","lint:prettier":"prettier ./**/*.{json,md,yml} --check","lint":"npm run lint:eslint && npm run lint:prettier","lint:fix":"npm run lint:eslint -- --fix && npm run lint:prettier -- --write","test":"jest --coverage","test:watch":"jest --watch --coverage","test:fuzz":"jest --testMatch='**/*.fuzz.ts' --coverage=false --testTimeout=120000","prepare":"husky"},"dependencies":{"@types/luxon":"~3.4.0","luxon":"~3.5.0"},"devDependencies":{"@commitlint/cli":"19.6.0","@eslint/js":"^9.14.0","@fast-check/jest":"2.0.3","@insurgent/commitlint-config":"20.0.0","@insurgent/conventional-changelog-preset":"10.0.0","@semantic-release/changelog":"6.0.3","@semantic-release/commit-analyzer":"13.0.0","@semantic-release/git":"10.0.1","@semantic-release/github":"11.0.1","@semantic-release/npm":"12.0.1","@semantic-release/release-notes-generator":"14.0.1","@types/jest":"29.5.14","@types/node":"20.17.9","@types/sinon":"17.0.3","chai":"4.5.0","eslint":"8.57.1","eslint-config-prettier":"9.1.0","eslint-plugin-jest":"27.9.0","eslint-plugin-prettier":"5.2.1","husky":"9.1.7","jest":"29.7.0","lint-staged":"15.2.10","prettier":"3.3.3","semantic-release":"24.2.0","sinon":"17.0.2","ts-jest":"29.2.5","typescript":"5.7.2","typescript-eslint":"^7.2.0"},"keywords":["cron","node cron","node-cron","schedule","scheduler","cronjob","cron job"],"license":"MIT","contributors":["Brandon der Blätter <https://interlucid.com/contact/> (https://github.com/intcreator)","Pierre Cavin <me@sherlox.io> (https://github.com/sheerlox)","Romain Beauxis <toots@rastageeks.org> (https://github.com/toots)","James Padolsey <> (https://github.com/jamespadolsey)","Finn Herpich <fh@three-heads.de> (https://github.com/ErrorProne)","Clifton Cunningham <clifton.cunningham@gmail.com> (https://github.com/cliftonc)","Eric Abouaf <eric.abouaf@gmail.com> (https://github.com/neyric)","humanchimp <morphcham@gmail.com> (https://github.com/humanchimp)","Craig Condon <craig@spiceapps.com> (https://github.com/spiceapps)","Dan Bear <daniel@hulu.com> (https://github.com/danhbear)","Vadim Baryshev <vadimbaryshev@gmail.com> (https://github.com/baryshev)","Leandro Ferrari <lfthomaz@gmail.com> (https://github.com/lfthomaz)","Gregg Zigler <greggzigler@gmail.com> (https://github.com/greggzigler)","Jordan Abderrachid <jabderrachid@gmail.com> (https://github.com/jordanabderrachid)","Masakazu Matsushita <matsukaz@gmail.com> (matsukaz)","Christopher Lunt <me@kirisu.co.uk> (https://github.com/kirisu)"],"files":["dist/**/*.js","dist/**/*.d.ts","CHANGELOG.md","LICENSE","README.md"],"lint-staged":{"*.ts":"eslint src/ tests/ --fix","*.{json,md,yml}":"prettier ./**/*.{json,md,yml} --check --write"},"_lastModified":"2025-07-29T06:13:29.102Z"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"ms","version":"2.1.3","description":"Tiny millisecond conversion utility","repository":"vercel/ms","main":"./index","files":["index.js"],"scripts":{"precommit":"lint-staged","lint":"eslint lib/* bin/*","test":"mocha tests.js"},"eslintConfig":{"extends":"eslint:recommended","env":{"node":true,"es6":true}},"lint-staged":{"*.js":["npm run lint","prettier --single-quote --write","git add"]},"license":"MIT","devDependencies":{"eslint":"4.18.2","expect.js":"0.3.1","husky":"0.14.3","lint-staged":"5.0.0","mocha":"4.0.1","prettier":"2.0.5"},"_lastModified":"2025-07-
|
|
1
|
+
{"name":"ms","version":"2.1.3","description":"Tiny millisecond conversion utility","repository":"vercel/ms","main":"./index","files":["index.js"],"scripts":{"precommit":"lint-staged","lint":"eslint lib/* bin/*","test":"mocha tests.js"},"eslintConfig":{"extends":"eslint:recommended","env":{"node":true,"es6":true}},"lint-staged":{"*.js":["npm run lint","prettier --single-quote --write","git add"]},"license":"MIT","devDependencies":{"eslint":"4.18.2","expect.js":"0.3.1","husky":"0.14.3","lint-staged":"5.0.0","mocha":"4.0.1","prettier":"2.0.5"},"_lastModified":"2025-07-29T06:13:29.217Z"}
|
|
@@ -34,7 +34,14 @@ var auth_default = {
|
|
|
34
34
|
await next();
|
|
35
35
|
},
|
|
36
36
|
changePassword: async (ctx, next) => {
|
|
37
|
-
|
|
37
|
+
var _a, _b;
|
|
38
|
+
if (((_b = (_a = ctx.action.params) == null ? void 0 : _a.values) == null ? void 0 : _b.verifyMethod) === "code") {
|
|
39
|
+
const auth = await ctx.app.authManager.get("sms", ctx);
|
|
40
|
+
ctx.body = await auth.changePassword();
|
|
41
|
+
} else {
|
|
42
|
+
const auth = await ctx.app.authManager.get("Email/Password", ctx);
|
|
43
|
+
ctx.body = await auth.changePassword();
|
|
44
|
+
}
|
|
38
45
|
await next();
|
|
39
46
|
}
|
|
40
47
|
};
|
|
@@ -31,9 +31,9 @@ __export(basic_auth_exports, {
|
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(basic_auth_exports);
|
|
33
33
|
var import_node_crypto = __toESM(require("node:crypto"));
|
|
34
|
-
var
|
|
34
|
+
var import_server = require("@tego/server");
|
|
35
35
|
var import_preset = require("../preset");
|
|
36
|
-
class BasicAuth extends
|
|
36
|
+
class BasicAuth extends import_server.BaseAuth {
|
|
37
37
|
constructor(config) {
|
|
38
38
|
const userCollection = config.ctx.db.getCollection("users");
|
|
39
39
|
super({ ...config, userCollection });
|
|
@@ -20,8 +20,8 @@ __export(authenticators_exports, {
|
|
|
20
20
|
default: () => authenticators_default
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(authenticators_exports);
|
|
23
|
-
var
|
|
24
|
-
var authenticators_default = (0,
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
|
+
var authenticators_default = (0, import_server.defineCollection)({
|
|
25
25
|
dumpRules: {
|
|
26
26
|
group: "third-party"
|
|
27
27
|
},
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import("@
|
|
1
|
+
declare const _default: import("@tego/server").CollectionOptions;
|
|
2
2
|
export default _default;
|
|
@@ -20,9 +20,9 @@ __export(issued_tokens_exports, {
|
|
|
20
20
|
default: () => issued_tokens_default
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(issued_tokens_exports);
|
|
23
|
-
var
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
24
|
var import_constants = require("../../constants");
|
|
25
|
-
var issued_tokens_default = (0,
|
|
25
|
+
var issued_tokens_default = (0, import_server.defineCollection)({
|
|
26
26
|
name: import_constants.issuedTokensCollectionName,
|
|
27
27
|
autoGenId: false,
|
|
28
28
|
createdAt: true,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import("@
|
|
1
|
+
declare const _default: import("@tego/server").CollectionOptions;
|
|
2
2
|
export default _default;
|
|
@@ -20,8 +20,8 @@ __export(token_blacklist_exports, {
|
|
|
20
20
|
default: () => token_blacklist_default
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(token_blacklist_exports);
|
|
23
|
-
var
|
|
24
|
-
var token_blacklist_default = (0,
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
|
+
var token_blacklist_default = (0, import_server.defineCollection)({
|
|
25
25
|
dumpRules: {
|
|
26
26
|
group: "log"
|
|
27
27
|
},
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import("@
|
|
1
|
+
declare const _default: import("@tego/server").CollectionOptions;
|
|
2
2
|
export default _default;
|
|
@@ -20,9 +20,9 @@ __export(token_poilcy_config_exports, {
|
|
|
20
20
|
default: () => token_poilcy_config_default
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(token_poilcy_config_exports);
|
|
23
|
-
var
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
24
|
var import_constants = require("../../constants");
|
|
25
|
-
var token_poilcy_config_default = (0,
|
|
25
|
+
var token_poilcy_config_default = (0, import_server.defineCollection)({
|
|
26
26
|
name: import_constants.tokenPolicyCollectionName,
|
|
27
27
|
autoGenId: false,
|
|
28
28
|
createdAt: true,
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Collection for user information of extended authentication methods,
|
|
3
3
|
* such as saml, oicd, oauth, sms, etc.
|
|
4
4
|
*/
|
|
5
|
-
declare const _default: import("@
|
|
5
|
+
declare const _default: import("@tego/server").CollectionOptions;
|
|
6
6
|
export default _default;
|
|
@@ -20,8 +20,8 @@ __export(users_authenticators_exports, {
|
|
|
20
20
|
default: () => users_authenticators_default
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(users_authenticators_exports);
|
|
23
|
-
var
|
|
24
|
-
var users_authenticators_default = (0,
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
|
+
var users_authenticators_default = (0, import_server.defineCollection)({
|
|
25
25
|
dumpRules: {
|
|
26
26
|
group: "user"
|
|
27
27
|
},
|
|
@@ -20,7 +20,7 @@ __export(basic_authenticator_exports, {
|
|
|
20
20
|
default: () => AddBasicAuthMigration
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(basic_authenticator_exports);
|
|
23
|
-
var import_server = require("@
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
24
|
var import_preset = require("../../preset");
|
|
25
25
|
class AddBasicAuthMigration extends import_server.Migration {
|
|
26
26
|
constructor() {
|
|
@@ -20,7 +20,7 @@ __export(update_basic_exports, {
|
|
|
20
20
|
default: () => UpdateBasicAuthMigration
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(update_basic_exports);
|
|
23
|
-
var import_server = require("@
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
24
|
var import_preset = require("../../preset");
|
|
25
25
|
class UpdateBasicAuthMigration extends import_server.Migration {
|
|
26
26
|
constructor() {
|
|
@@ -20,7 +20,7 @@ __export(fix_allow_signup_exports, {
|
|
|
20
20
|
default: () => FixAllowSignUpMigration
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(fix_allow_signup_exports);
|
|
23
|
-
var import_server = require("@
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
24
|
var import_preset = require("../../preset");
|
|
25
25
|
class FixAllowSignUpMigration extends import_server.Migration {
|
|
26
26
|
constructor() {
|
|
@@ -20,7 +20,7 @@ __export(create_token_policy_exports, {
|
|
|
20
20
|
default: () => create_token_policy_default
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(create_token_policy_exports);
|
|
23
|
-
var import_server = require("@
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
24
|
var import_constants = require("../../constants");
|
|
25
25
|
class create_token_policy_default extends import_server.Migration {
|
|
26
26
|
constructor() {
|
|
@@ -20,8 +20,7 @@ __export(token_text_type_exports, {
|
|
|
20
20
|
default: () => token_text_type_default
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(token_text_type_exports);
|
|
23
|
-
var
|
|
24
|
-
var import_server = require("@tachybase/server");
|
|
23
|
+
var import_server = require("@tego/server");
|
|
25
24
|
class token_text_type_default extends import_server.Migration {
|
|
26
25
|
constructor() {
|
|
27
26
|
super(...arguments);
|
|
@@ -32,7 +31,7 @@ class token_text_type_default extends import_server.Migration {
|
|
|
32
31
|
async up() {
|
|
33
32
|
const queryInterface = this.db.sequelize.getQueryInterface();
|
|
34
33
|
await queryInterface.changeColumn("tokenBlacklist", "token", {
|
|
35
|
-
type:
|
|
34
|
+
type: import_server.DataTypes.TEXT
|
|
36
35
|
});
|
|
37
36
|
this.app.logger.info("change tokenBlacklist token form string to text success!");
|
|
38
37
|
}
|
|
@@ -20,8 +20,7 @@ __export(change_token_exports, {
|
|
|
20
20
|
default: () => change_token_default
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(change_token_exports);
|
|
23
|
-
var
|
|
24
|
-
var import_server = require("@tachybase/server");
|
|
23
|
+
var import_server = require("@tego/server");
|
|
25
24
|
class change_token_default extends import_server.Migration {
|
|
26
25
|
constructor() {
|
|
27
26
|
super(...arguments);
|
|
@@ -37,7 +36,7 @@ class change_token_default extends import_server.Migration {
|
|
|
37
36
|
}
|
|
38
37
|
const queryInterface = this.db.sequelize.getQueryInterface();
|
|
39
38
|
await queryInterface.changeColumn("tokenBlacklist", "token", {
|
|
40
|
-
type:
|
|
39
|
+
type: import_server.DataTypes.STRING(512)
|
|
41
40
|
});
|
|
42
41
|
this.app.logger.info("tokenBlacklist token change string(512) success!");
|
|
43
42
|
}
|
|
@@ -20,8 +20,8 @@ __export(authenticator_exports, {
|
|
|
20
20
|
AuthModel: () => AuthModel
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(authenticator_exports);
|
|
23
|
-
var
|
|
24
|
-
class AuthModel extends
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
|
+
class AuthModel extends import_server.Model {
|
|
25
25
|
async findUser(uuid) {
|
|
26
26
|
let user;
|
|
27
27
|
const users = await this.getUsers({
|
package/dist/server/plugin.d.ts
CHANGED
package/dist/server/plugin.js
CHANGED
|
@@ -31,7 +31,7 @@ __export(plugin_exports, {
|
|
|
31
31
|
default: () => plugin_default
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(plugin_exports);
|
|
34
|
-
var import_server = require("@
|
|
34
|
+
var import_server = require("@tego/server");
|
|
35
35
|
var import_constants = require("../constants");
|
|
36
36
|
var import_preset = require("../preset");
|
|
37
37
|
var import_auth = __toESM(require("./actions/auth"));
|
package/dist/server/storer.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import { AuthManager, Storer as IStorer } from '@
|
|
2
|
-
import { Cache } from '@tachybase/cache';
|
|
3
|
-
import { Database } from '@tachybase/database';
|
|
4
|
-
import { Application } from '@tachybase/server';
|
|
1
|
+
import { Application, AuthManager, Cache, Database, Storer as IStorer } from '@tego/server';
|
|
5
2
|
import { AuthModel } from './model/authenticator';
|
|
6
3
|
export declare class Storer implements IStorer {
|
|
7
4
|
db: Database;
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { ITokenBlacklistService } from '@
|
|
2
|
-
import { BloomFilter } from '@tachybase/cache';
|
|
3
|
-
import { Repository } from '@tachybase/database';
|
|
1
|
+
import { BloomFilter, ITokenBlacklistService, Repository } from '@tego/server';
|
|
4
2
|
import { CronJob } from 'cron';
|
|
5
3
|
import AuthPlugin from './plugin';
|
|
6
4
|
export declare class TokenBlacklistService implements ITokenBlacklistService {
|
|
@@ -10,8 +8,8 @@ export declare class TokenBlacklistService implements ITokenBlacklistService {
|
|
|
10
8
|
bloomFilter: BloomFilter;
|
|
11
9
|
cacheKey: string;
|
|
12
10
|
constructor(plugin: AuthPlugin);
|
|
13
|
-
get app(): import("
|
|
11
|
+
get app(): import("@tego/server").Application<import("@tego/server").DefaultState, import("@tego/server").DefaultContext>;
|
|
14
12
|
has(token: string): Promise<boolean>;
|
|
15
|
-
add(values: any): Promise<[import("@
|
|
13
|
+
add(values: any): Promise<[import("@tego/server").Model<any, any>, boolean]>;
|
|
16
14
|
deleteExpiredTokens(): Promise<any>;
|
|
17
15
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import { ITokenControlService, NumericTokenPolicyConfig, TokenInfo, TokenPolicyConfig } from '@
|
|
2
|
-
import { Cache } from '@tachybase/cache';
|
|
3
|
-
import Database from '@tachybase/database';
|
|
4
|
-
import type { SystemLogger } from '@tachybase/logger';
|
|
5
|
-
import Application from '@tachybase/server';
|
|
1
|
+
import { Application, Cache, Database, ITokenControlService, NumericTokenPolicyConfig, TokenInfo, TokenPolicyConfig, type SystemLogger } from '@tego/server';
|
|
6
2
|
type TokenControlService = ITokenControlService;
|
|
7
3
|
export declare class TokenController implements TokenControlService {
|
|
8
4
|
cache: Cache;
|
|
@@ -31,7 +31,7 @@ __export(token_controller_exports, {
|
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(token_controller_exports);
|
|
33
33
|
var import_node_crypto = require("node:crypto");
|
|
34
|
-
var
|
|
34
|
+
var import_server = require("@tego/server");
|
|
35
35
|
var import_ms = __toESM(require("ms"));
|
|
36
36
|
var import_constants = require("../constants");
|
|
37
37
|
const JTICACHEKEY = "token-jti";
|
|
@@ -60,11 +60,11 @@ class TokenController {
|
|
|
60
60
|
submodule: "token-controller",
|
|
61
61
|
method: "renew",
|
|
62
62
|
jti,
|
|
63
|
-
code:
|
|
63
|
+
code: import_server.AuthErrorCode.TOKEN_RENEW_FAILED
|
|
64
64
|
});
|
|
65
|
-
throw new
|
|
65
|
+
throw new import_server.AuthError({
|
|
66
66
|
message: "Your session has expired. Please sign in again.",
|
|
67
|
-
code:
|
|
67
|
+
code: import_server.AuthErrorCode.TOKEN_RENEW_FAILED
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
70
|
};
|
package/dist/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export type { TokenPolicyConfig
|
|
1
|
+
export type { TokenPolicyConfig } from '@tego/server';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tachybase/module-auth",
|
|
3
3
|
"displayName": "Authentication",
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.22",
|
|
5
5
|
"description": "User authentication management, including password, SMS, and support for Single Sign-On (SSO) protocols, with extensibility.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"Authentication",
|
|
@@ -10,31 +10,22 @@
|
|
|
10
10
|
"main": "./dist/server/index.js",
|
|
11
11
|
"dependencies": {},
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@ant-design/icons": "
|
|
13
|
+
"@ant-design/icons": "^5.6.1",
|
|
14
|
+
"@tachybase/schema": "^1.3.39",
|
|
15
|
+
"@tachybase/test": "^1.3.39",
|
|
16
|
+
"@tego/client": "^1.3.39",
|
|
17
|
+
"@tego/server": "^1.3.39",
|
|
14
18
|
"antd": "5.22.5",
|
|
15
19
|
"axios": "1.7.7",
|
|
16
20
|
"cron": "^3.3.1",
|
|
17
|
-
"lodash": "
|
|
21
|
+
"lodash": "4.17.21",
|
|
18
22
|
"ms": "^2.1.3",
|
|
19
|
-
"react": "
|
|
20
|
-
"react-i18next": "
|
|
23
|
+
"react": "18.3.1",
|
|
24
|
+
"react-i18next": "15.2.0",
|
|
21
25
|
"react-router-dom": "6.28.1",
|
|
22
|
-
"@tachybase/
|
|
23
|
-
},
|
|
24
|
-
"peerDependencies": {
|
|
25
|
-
"@tachybase/auth": "1.3.20",
|
|
26
|
-
"@tachybase/cache": "1.3.20",
|
|
27
|
-
"@tachybase/actions": "1.3.20",
|
|
28
|
-
"@tachybase/client": "1.3.20",
|
|
29
|
-
"@tachybase/logger": "1.3.20",
|
|
30
|
-
"@tachybase/server": "1.3.20",
|
|
31
|
-
"@tachybase/utils": "1.3.20",
|
|
32
|
-
"@tachybase/test": "1.3.20",
|
|
33
|
-
"@tachybase/database": "1.3.20"
|
|
26
|
+
"@tachybase/client": "1.3.22"
|
|
34
27
|
},
|
|
35
28
|
"description.zh-CN": "用户认证管理,包括基础的密码认证、短信认证、SSO 协议的认证等,可扩展。",
|
|
36
29
|
"displayName.zh-CN": "用户认证",
|
|
37
|
-
"scripts": {
|
|
38
|
-
"build": "tachybase-build --no-dts @tachybase/module-auth"
|
|
39
|
-
}
|
|
30
|
+
"scripts": {}
|
|
40
31
|
}
|