ApiTokens-BCcpUvp-.js 13 KB

123456789101112131415161718192021
  1. import{a as e,n as t,r as n}from"./react-dom-stZKkA6x.js";import{a as r,d as i,r as a,u as o}from"./theme-CVfSdO4m.js";import{At as s,Mt as c,ct as l,i as u,n as d,t as f}from"./jsx-runtime-C5RSiriy.js";import{r as p}from"./card-DMbCO2Fu.js";import{n as ee,t as te}from"./table-DDUhevyo.js";import{n as ne,r as re,t as m}from"./StatusPill-BYj3zI1_.js";import{t as h}from"./descriptions-gniVz27W.js";import{t as g}from"./form-y5mvm6Rb.js";import{t as _}from"./input-7g-iBRng.js";import{t as ie}from"./modal-C7xDa6TW.js";import{t as ae}from"./popconfirm-D_VEsRZH.js";import{t as v}from"./CopyOutlined-BbN7wZaI.js";import{t as oe}from"./DeleteOutlined-J0odQPKG.js";import{t as se}from"./EditOutlined-CO1ElKoL.js";import{t as y}from"./PlusOutlined-B79Dovl9.js";import{t as ce}from"./ReloadOutlined-By3LF9WE.js";import{a as le,g as b,t as x,y as S}from"./index-Dy4xV4t8.js";import{t as C}from"./EmptyState-CeUjt5Wb.js";import{t as w}from"./CodeBlock-Cehl-9Ci.js";var T=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default={icon:{tag:`svg`,attrs:{viewBox:`64 64 896 896`,focusable:`false`},children:[{tag:`path`,attrs:{d:`M928 161H699.2c-49.1 0-97.1 14.1-138.4 40.7L512 233l-48.8-31.3A255.2 255.2 0 00324.8 161H96c-17.7 0-32 14.3-32 32v568c0 17.7 14.3 32 32 32h228.8c49.1 0 97.1 14.1 138.4 40.7l44.4 28.6c1.3.8 2.8 1.3 4.3 1.3s3-.4 4.3-1.3l44.4-28.6C602 807.1 650.1 793 699.2 793H928c17.7 0 32-14.3 32-32V193c0-17.7-14.3-32-32-32zM324.8 721H136V233h188.8c35.4 0 69.8 10.1 99.5 29.2l48.8 31.3 6.9 4.5v462c-47.6-25.6-100.8-39-155.2-39zm563.2 0H699.2c-54.4 0-107.6 13.4-155.2 39V298l6.9-4.5 48.8-31.3c29.7-19.1 64.1-29.2 99.5-29.2H888v488zM396.9 361H211.1c-3.9 0-7.1 3.4-7.1 7.5v45c0 4.1 3.2 7.5 7.1 7.5h185.7c3.9 0 7.1-3.4 7.1-7.5v-45c.1-4.1-3.1-7.5-7-7.5zm223.1 7.5v45c0 4.1 3.2 7.5 7.1 7.5h185.7c3.9 0 7.1-3.4 7.1-7.5v-45c0-4.1-3.2-7.5-7.1-7.5H627.1c-3.9 0-7.1 3.4-7.1 7.5zM396.9 501H211.1c-3.9 0-7.1 3.4-7.1 7.5v45c0 4.1 3.2 7.5 7.1 7.5h185.7c3.9 0 7.1-3.4 7.1-7.5v-45c.1-4.1-3.1-7.5-7-7.5zm416 0H627.1c-3.9 0-7.1 3.4-7.1 7.5v45c0 4.1 3.2 7.5 7.1 7.5h185.7c3.9 0 7.1-3.4 7.1-7.5v-45c.1-4.1-3.1-7.5-7-7.5z`}}]},name:`read`,theme:`outlined`}})),E=e(t()),D=e(T());function O(){return O=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},O.apply(this,arguments)}var k=E.forwardRef((e,t)=>E.createElement(o,O({},e,{ref:t,icon:D.default})));function A(e={}){return!!e.token}function j(e={}){return A(e)?String(e.token):``}function M(e={}){return e.tokenPrefix?`${e.tokenPrefix}...`:`-`}function N({endpoint:e=`/api/send`,token:t=`<USER_API_TOKEN>`,from:n=`noreply@example.com`,to:r=`user@example.com`}={}){let i=JSON.stringify({from:n,to:r,subject:`Hello from MailHub`,text:`Signed with DKIM and queued by MailHub.`},null,2);return{requestBody:i,successResponse:JSON.stringify({queued:!0,domain:I(n)||`example.com`,recipients:[r],smtp:`Message queued`},null,2),curl:`curl -X POST ${e} \\
  2. -H 'Authorization: Bearer ${t}' \\
  3. -H 'Content-Type: application/json' \\
  4. -d '${i}'`,nodeFetch:`const response = await fetch('${e}', {
  5. method: 'POST',
  6. headers: {
  7. Authorization: 'Bearer ${t}',
  8. 'Content-Type': 'application/json'
  9. },
  10. body: JSON.stringify({
  11. from: '${n}',
  12. to: '${r}',
  13. subject: 'Hello from MailHub',
  14. text: 'Signed with DKIM and queued by MailHub.'
  15. })
  16. });
  17. const result = await response.json();`}}function P({endpoint:e=`/api/mailboxes`,token:t=`<USER_API_TOKEN>`,domain:n=`example.com`}={}){let r={mode:`permanent`,address:`support@${n}`,password:`<MAILBOX_PASSWORD>`,displayName:`Support`},i={mode:`temporary`,domain:n,expiresInMinutes:60};return{permanent:JSON.stringify(r,null,2),temporary:JSON.stringify(i,null,2),permanentCurl:F(e,t,r),temporaryCurl:F(e,t,i),successResponse:JSON.stringify({mailbox:{address:`tmp-abc123@${n}`,temporary:!0,expiresAt:`2026-07-14T12:00:00.000Z`},password:`<GENERATED_MAILBOX_PASSWORD>`,clientConfig:{incoming:{protocol:`IMAP`,port:993,security:`SSL/TLS`},outgoing:{protocol:`SMTP`,port:465,security:`SSL/TLS`}}},null,2)}}function F(e,t,n){return`curl -X POST ${e} \\
  18. -H 'Authorization: Bearer ${t}' \\
  19. -H 'Content-Type: application/json' \\
  20. -d '${JSON.stringify(n,null,2)}'`}function I(e){return String(e||``).split(`@`)[1]||``}var L=f(),ue=[{label:`send`,value:`send`},{label:`mailboxes:read`,value:`mailboxes:read`},{label:`mailboxes:write`,value:`mailboxes:write`}];function R(){let{message:e}=i.useApp(),{t}=r(),{config:n}=x(),[o]=g.useForm(),[c,f]=(0,E.useState)([]),[T,D]=(0,E.useState)(!0),[O,N]=(0,E.useState)(``),[P,F]=(0,E.useState)(``),[I,R]=(0,E.useState)(!1),[W,G]=(0,E.useState)(null),[K,q]=(0,E.useState)(null),[J,Y]=(0,E.useState)(null),[fe,X]=(0,E.useState)(!1),Z=(0,E.useCallback)(async()=>{D(!0),N(``);try{let e=await a.apiTokens();f(e.tokens||[])}catch(e){N(e instanceof Error?e.message:t(`common.error`))}finally{D(!1)}},[t]);(0,E.useEffect)(()=>{Z()},[Z]);async function Q(n){n&&(await navigator.clipboard.writeText(n),e.success(t(`common.copied`)))}function $(){G(null),o.resetFields(),o.setFieldsValue({name:``,scopes:[`send`],expiresAt:``}),R(!0)}function pe(e){G(e),o.resetFields(),o.setFieldsValue({name:e.name,scopes:e.scopes||[`send`],expiresAt:B(e.expiresAt)}),R(!0)}async function me(){let n=de(await o.validateFields()),r=W?`save:${W.id}`:`create`;F(r);try{if(W)await a.updateApiToken(W.id,n),e.success(t(`tokens.updatedSuccess`));else{let r=await a.createApiToken(n);e.success(t(`tokens.createdSuccess`)),r.token&&A(r.token)&&Y(r.token)}R(!1),G(null),o.resetFields(),await Z()}catch(n){e.error(n instanceof Error?n.message:t(`common.error`))}finally{F(``)}}async function he(n){F(`revoke:${n.id}`);try{await a.deleteApiToken(n.id),e.success(t(`tokens.revokedSuccess`)),K?.id===n.id&&q(null),await Z()}catch(n){e.error(n instanceof Error?n.message:t(`common.error`))}finally{F(``)}}let ge=[{title:t(`tokens.name`),dataIndex:`name`,render:e=>(0,L.jsx)(d.Text,{strong:!0,children:e})},{title:t(`tokens.prefix`),dataIndex:`tokenPrefix`,width:180,render:(e,t)=>(0,L.jsx)(d.Text,{code:!0,children:M(t)})},{title:t(`tokens.scopes`),dataIndex:`scopes`,render:e=>(0,L.jsx)(u,{size:[4,4],wrap:!0,children:(e||[]).map(e=>(0,L.jsx)(b,{children:e},e))})},{title:t(`tokens.status`),dataIndex:`status`,width:120,render:(e,n)=>(0,L.jsx)(m,{tone:V(n.status),children:H(n.status,t)})},{title:t(`tokens.lastUsed`),dataIndex:`lastUsedAt`,width:190,render:e=>e?U(e):t(`tokens.neverUsed`)},{title:t(`tokens.actions`),width:180,render:(e,n)=>(0,L.jsxs)(u,{onClick:e=>e.stopPropagation(),children:[(0,L.jsx)(s,{"aria-label":t(`tokens.copyPrefix`),icon:(0,L.jsx)(v,{}),onClick:()=>void Q(n.tokenPrefix)}),(0,L.jsx)(s,{"aria-label":`${t(`tokens.edit`)} ${n.name}`,disabled:n.status===`revoked`,icon:(0,L.jsx)(se,{}),onClick:()=>pe(n)}),(0,L.jsx)(ae,{title:t(`tokens.revokeConfirm`),onConfirm:()=>void he(n),disabled:n.status===`revoked`,children:(0,L.jsx)(s,{"aria-label":`${t(`tokens.revoke`)} ${n.name}`,danger:!0,disabled:n.status===`revoked`,icon:(0,L.jsx)(oe,{}),loading:P===`revoke:${n.id}`})})]})}];return(0,L.jsxs)(u,{direction:`vertical`,size:20,className:`full-width`,children:[(0,L.jsx)(re,{title:t(`nav.tokens`),subtitle:t(`tokens.subtitle`),extra:(0,L.jsxs)(u,{wrap:!0,children:[(0,L.jsx)(s,{icon:(0,L.jsx)(k,{}),onClick:()=>X(!0),style:{minHeight:44},children:t(`tokens.docsTitle`)}),(0,L.jsx)(s,{type:`primary`,icon:(0,L.jsx)(y,{}),onClick:$,style:{minHeight:44},children:t(`tokens.create`)})]})}),O?(0,L.jsx)(p,{type:`error`,showIcon:!0,message:O,action:(0,L.jsx)(s,{icon:(0,L.jsx)(ce,{}),onClick:()=>void Z(),children:t(`common.refresh`)})}):null,(0,L.jsxs)(ne,{title:t(`tokens.listTitle`),extra:(0,L.jsx)(m,{tone:`neutral`,children:c.length}),children:[(0,L.jsx)(p,{type:`info`,showIcon:!0,message:t(`tokens.prefixOnlyHelp`),style:{marginBottom:16}}),T?(0,L.jsx)(l,{active:!0,paragraph:{rows:6}}):c.length?(0,L.jsx)(te,{rowKey:`id`,columns:ge,dataSource:c,scroll:{x:980},onRow:e=>({onClick:()=>q(e),style:{cursor:`pointer`},tabIndex:0,onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&q(e)}})}):(0,L.jsx)(C,{description:t(`tokens.noTokenHint`),action:(0,L.jsx)(s,{icon:(0,L.jsx)(y,{}),onClick:$,children:t(`tokens.create`)})})]}),(0,L.jsxs)(S,{title:t(W?`tokens.editTitle`:`tokens.createTitle`),width:520,open:I,onClose:()=>R(!1),destroyOnHidden:!0,footer:(0,L.jsxs)(u,{style:{display:`flex`,justifyContent:`flex-end`},children:[(0,L.jsx)(s,{onClick:()=>R(!1),children:t(`common.cancel`)}),(0,L.jsx)(s,{type:`primary`,icon:(0,L.jsx)(le,{}),loading:P===`create`||P.startsWith(`save:`),onClick:()=>void me(),children:t(W?`common.save`:`tokens.create`)})]}),children:[W?null:(0,L.jsx)(p,{type:`warning`,showIcon:!0,message:t(`tokens.createdWarning`),style:{marginBottom:20}}),(0,L.jsxs)(g,{form:o,layout:`vertical`,initialValues:{scopes:[`send`]},children:[(0,L.jsx)(g.Item,{name:`name`,label:t(`tokens.name`),rules:[{required:!0,message:t(`tokens.nameRequired`)}],children:(0,L.jsx)(_,{placeholder:t(`tokens.namePlaceholder`),autoComplete:`off`})}),(0,L.jsx)(g.Item,{name:`expiresAt`,label:t(`tokens.expiresAt`),extra:t(`tokens.expiresAtExtra`),children:(0,L.jsx)(_,{type:`datetime-local`})}),(0,L.jsx)(g.Item,{name:`scopes`,label:t(`tokens.scopes`),rules:[{required:!0,type:`array`,min:1,message:t(`tokens.scopesRequired`)}],extra:t(`tokens.scopesExtra`),children:(0,L.jsx)(ee.Group,{options:ue})})]})]}),(0,L.jsx)(S,{title:K?.name,width:520,open:!!K,onClose:()=>q(null),children:K?(0,L.jsxs)(u,{direction:`vertical`,size:20,className:`full-width`,children:[(0,L.jsxs)(h,{bordered:!0,column:1,size:`small`,children:[(0,L.jsx)(h.Item,{label:t(`tokens.prefix`),children:(0,L.jsx)(d.Text,{code:!0,children:M(K)})}),(0,L.jsx)(h.Item,{label:t(`tokens.status`),children:(0,L.jsx)(m,{tone:V(K.status),children:H(K.status,t)})}),(0,L.jsx)(h.Item,{label:t(`tokens.scopes`),children:(0,L.jsx)(u,{wrap:!0,children:K.scopes.map(e=>(0,L.jsx)(b,{children:e},e))})}),(0,L.jsx)(h.Item,{label:t(`tokens.expiresAt`),children:U(K.expiresAt)}),(0,L.jsx)(h.Item,{label:t(`tokens.lastUsed`),children:K.lastUsedAt?U(K.lastUsedAt):t(`tokens.neverUsed`)}),(0,L.jsx)(h.Item,{label:t(`tokens.createdAt`),children:U(K.createdAt)})]}),(0,L.jsx)(p,{type:`info`,showIcon:!0,message:t(`tokens.secretUnavailable`)}),(0,L.jsx)(s,{icon:(0,L.jsx)(k,{}),onClick:()=>X(!0),children:t(`tokens.docsTitle`)})]}):null}),(0,L.jsx)(z,{open:fe,config:n,onClose:()=>X(!1),onCopy:Q}),(0,L.jsx)(ie,{title:t(`tokens.createdTitle`),open:!!J,closable:!1,maskClosable:!1,keyboard:!1,destroyOnHidden:!0,footer:[(0,L.jsx)(s,{icon:(0,L.jsx)(v,{}),onClick:()=>void Q(j(J||{})||``),children:t(`tokens.copyCreated`)},`copy`),(0,L.jsx)(s,{type:`primary`,onClick:()=>Y(null),children:t(`common.confirm`)},`done`)],children:J?(0,L.jsxs)(u,{direction:`vertical`,size:16,className:`full-width`,children:[(0,L.jsx)(p,{type:`error`,showIcon:!0,message:t(`tokens.createdWarning`)}),(0,L.jsx)(w,{value:j(J)||``,onCopy:Q})]}):null})]})}function z({open:e,config:t,onClose:n,onCopy:i}){let{t:a}=r(),o=`${t?.appBaseUrl||window.location.origin}/api/send`,s=`${t?.appBaseUrl||window.location.origin}/api/mailboxes`,l=(0,E.useMemo)(()=>N({endpoint:o,token:`<USER_API_TOKEN>`,from:`noreply@example.com`,to:`user@example.com`}),[o]),f=(0,E.useMemo)(()=>P({endpoint:s,token:`<MAILBOX_API_TOKEN>`}),[s]);return(0,L.jsx)(S,{title:a(`tokens.docsTitle`),width:720,open:e,onClose:n,children:(0,L.jsxs)(u,{direction:`vertical`,size:16,className:`full-width`,children:[(0,L.jsxs)(h,{column:1,bordered:!0,size:`small`,children:[(0,L.jsx)(h.Item,{label:a(`tokens.endpoint`),children:(0,L.jsx)(d.Text,{code:!0,copyable:{onCopy:()=>i(o)},children:o})}),(0,L.jsx)(h.Item,{label:a(`tokens.mailboxEndpoint`),children:(0,L.jsx)(d.Text,{code:!0,copyable:{onCopy:()=>i(s)},children:s})}),(0,L.jsx)(h.Item,{label:a(`tokens.authHeader`),children:(0,L.jsx)(d.Text,{code:!0,children:a(`tokens.authHeaderValue`)})})]}),(0,L.jsx)(c,{defaultActiveKey:[`send`],items:[{key:`send`,label:a(`tokens.sendApi`),children:(0,L.jsxs)(u,{direction:`vertical`,size:12,className:`full-width`,children:[(0,L.jsx)(d.Text,{strong:!0,children:a(`tokens.curlExample`)}),(0,L.jsx)(w,{value:l.curl,onCopy:i}),(0,L.jsx)(d.Text,{strong:!0,children:a(`tokens.requestExample`)}),(0,L.jsx)(w,{value:l.requestBody,onCopy:i}),(0,L.jsx)(d.Text,{strong:!0,children:a(`tokens.responseExample`)}),(0,L.jsx)(w,{value:l.successResponse,onCopy:i})]})},{key:`mailboxes`,label:a(`tokens.mailboxApi`),children:(0,L.jsxs)(u,{direction:`vertical`,size:12,className:`full-width`,children:[(0,L.jsx)(p,{type:`info`,showIcon:!0,message:a(`tokens.mailboxApiHint`)}),(0,L.jsx)(d.Text,{strong:!0,children:a(`tokens.permanentMailbox`)}),(0,L.jsx)(w,{value:f.permanentCurl,onCopy:i}),(0,L.jsx)(d.Text,{strong:!0,children:a(`tokens.temporaryMailbox`)}),(0,L.jsx)(w,{value:f.temporaryCurl,onCopy:i}),(0,L.jsx)(d.Text,{strong:!0,children:a(`tokens.mailboxResponse`)}),(0,L.jsx)(w,{value:f.successResponse,onCopy:i})]})}]}),(0,L.jsx)(p,{type:`warning`,showIcon:!0,message:a(`tokens.securityTipStore`),description:a(`tokens.securityTipScopes`)})]})})}function de(e){return{name:e.name.trim(),scopes:e.scopes,expiresAt:e.expiresAt?new Date(e.expiresAt).toISOString():null}}function B(e){if(!e)return``;let t=new Date(e);if(Number.isNaN(t.getTime()))return``;let n=t.getTimezoneOffset()*6e4;return new Date(t.getTime()-n).toISOString().slice(0,16)}function V(e){return e===`active`?`success`:e===`expired`?`warning`:e===`revoked`?`error`:`neutral`}function H(e,t){return e===`active`?t(`tokens.statusActive`):e===`expired`?t(`tokens.statusExpired`):e===`revoked`?t(`tokens.statusRevoked`):`—`}function U(e){return e?new Date(e).toLocaleString():`—`}export{R as default};