@xenon-device-management/xenon 2.11.1 → 2.13.0
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/lib/package.json +2 -2
- package/lib/public/assets/{AnnotationOverlay-Dt5AmXCR.js → AnnotationOverlay-CzbFYtPI.js} +1 -1
- package/lib/public/assets/{ApiKeyGate-CS05jXd7.js → ApiKeyGate-CA5KFHHJ.js} +1 -1
- package/lib/public/assets/{BugReportButton-ejWk5lof.js → BugReportButton-D-DSGg8C.js} +1 -1
- package/lib/public/assets/DeviceMosaicView-paDEFU4B.js +2 -0
- package/lib/public/assets/{EmptyState-DyojFa86.js → EmptyState-BE_5f8Vw.js} +1 -1
- package/lib/public/assets/{FieldGroup-Dm-U3Ucr.js → FieldGroup-DqMf7Rf3.js} +1 -1
- package/lib/public/assets/{FilterMenu-B3hgDfy_.js → FilterMenu-BQY75Su3.js} +1 -1
- package/lib/public/assets/{Menu-DFNsTx2i.js → Menu-BiW3os9u.js} +1 -1
- package/lib/public/assets/{Modal-BdWYrwfK.js → Modal-DfawTxih.js} +1 -1
- package/lib/public/assets/RecordingPage-BvemyRiy.js +1 -0
- package/lib/public/assets/{RecordingsPage-FAUS-RwG.js → RecordingsPage-CXfw7wpd.js} +2 -2
- package/lib/public/assets/{SegmentedControl-EBzIUjnM.js → SegmentedControl-B7m9kpom.js} +1 -1
- package/lib/public/assets/{SettingCard-BQ8wMHrz.js → SettingCard-Cw6lDD0l.js} +1 -1
- package/lib/public/assets/{Table-DDahAwGb.js → Table-DlEuFgv-.js} +1 -1
- package/lib/public/assets/{activity-CFEfukVD.js → activity-CnLvNwae.js} +1 -1
- package/lib/public/assets/{ai-settings-iPPNZMnS.js → ai-settings-D7Te8o-a.js} +2 -2
- package/lib/public/assets/{api-keys-DS979X_e.js → api-keys-DphSVzBr.js} +1 -1
- package/lib/public/assets/{apps-DQnxhScG.js → apps-vUfu15lX.js} +3 -3
- package/lib/public/assets/{arrow-left-CIqcStpJ.js → arrow-left-CLQWAiCY.js} +1 -1
- package/lib/public/assets/{arrow-right-Pw0XgjBJ.js → arrow-right-K6A5e_Ee.js} +1 -1
- package/lib/public/assets/{arrow-up-right-DWaEiSQf.js → arrow-up-right-DUA_lq6f.js} +1 -1
- package/lib/public/assets/{auth-shell-DvJ8qKdR.js → auth-shell-BYRHcZd6.js} +2 -2
- package/lib/public/assets/{builds-page-BIWuhGph.js → builds-page-C0fTvIG8.js} +1 -1
- package/lib/public/assets/{button-B1XDl_TT.js → button-BxnHCCsX.js} +1 -1
- package/lib/public/assets/{calendar-BPrY2NZL.js → calendar-CqVsn28A.js} +1 -1
- package/lib/public/assets/{check-DjbzNVbd.js → check-R6V3bot0.js} +1 -1
- package/lib/public/assets/{chevron-right-J_WfelGu.js → chevron-right-BA2Fntu-.js} +1 -1
- package/lib/public/assets/{circle-check-CGwn46BE.js → circle-check-D4EzyGzs.js} +1 -1
- package/lib/public/assets/{circle-x-Rfn2Zmq3.js → circle-x-Cf6AF2B2.js} +1 -1
- package/lib/public/assets/{clock-BAD4KA9j.js → clock-EZfet0sS.js} +1 -1
- package/lib/public/assets/{copy-CcNlsrXH.js → copy-Bc6P8v9V.js} +1 -1
- package/lib/public/assets/device-explorer-BFXpRq6d.js +279 -0
- package/lib/public/assets/device-explorer-CHv1miyr.css +1 -0
- package/lib/public/assets/{download-CoBA2mT_.js → download-Bd8OGLzi.js} +1 -1
- package/lib/public/assets/{forgot-password-BrV3pKRK.js → forgot-password-CoE7Ugtx.js} +1 -1
- package/lib/public/assets/{index-DQa193-A.css → index-BTYMAqNW.css} +1 -1
- package/lib/public/assets/{index-BHI_dBXi.js → index-BiL0Enl_.js} +1 -1
- package/lib/public/assets/index-CHOr4JCs.js +219 -0
- package/lib/public/assets/{input-Bo2b9153.js → input-CJ8z3IO5.js} +1 -1
- package/lib/public/assets/{line-chart-X7ZCpjWB.js → line-chart-CPK0ObjV.js} +1 -1
- package/lib/public/assets/{list-checks-Cqso6ROH.js → list-checks-mXGHUVbB.js} +1 -1
- package/lib/public/assets/{lock-D9WyaPyU.js → lock-BSXM1xvq.js} +1 -1
- package/lib/public/assets/{login-DqIYeZ2q.js → login-Ct2iW066.js} +1 -1
- package/lib/public/assets/{maintenance-settings-C7pWE0--.js → maintenance-settings-DaOs00P6.js} +1 -1
- package/lib/public/assets/{monitor-ZC2MoScA.js → monitor-D8WQK8md.js} +1 -1
- package/lib/public/assets/{mouse-pointer-2-DXh-LIn9.js → mouse-pointer-2-Cw2tWzDX.js} +1 -1
- package/lib/public/assets/{network-CivILLOW.js → network-Ba_uFxWo.js} +1 -1
- package/lib/public/assets/{overview-ClDfJNL5.js → overview-CxrZ7_6k.js} +1 -1
- package/lib/public/assets/{page-header-CV-WOQ7B.js → page-header-Cm1XL49f.js} +1 -1
- package/lib/public/assets/play-C0CuKLXj.js +11 -0
- package/lib/public/assets/{plus-DOp8RUCs.js → plus-CIIvR_6Z.js} +1 -1
- package/lib/public/assets/{profile-page-Ckx1bcSx.js → profile-page-BZ_e-Bgw.js} +2 -2
- package/lib/public/assets/recording-group-store-BWeeNs2_.js +26 -0
- package/lib/public/assets/{reset-password-CZDSfFZ6.js → reset-password-lfNz8Rm1.js} +1 -1
- package/lib/public/assets/{runbook-page-BXe7SL5K.js → runbook-page-Cnec3VSx.js} +1 -1
- package/lib/public/assets/{select-Bo_2fqDM.js → select-CZuCnold.js} +1 -1
- package/lib/public/assets/{selector-detail-redirect-D_aNBNim.js → selector-detail-redirect-BG3pxFLw.js} +1 -1
- package/lib/public/assets/{selector-health-page-BP4XhSI4.js → selector-health-page-DsyL58tb.js} +2 -2
- package/lib/public/assets/{session-detail-page-DN8MPDsL.js → session-detail-page-ZZyGM413.js} +1 -1
- package/lib/public/assets/{settings-rFQ6qW9Q.js → settings-DGZ7B_AR.js} +1 -1
- package/lib/public/assets/{stat-tile-D8taj4dL.js → stat-tile-DFhv8JoI.js} +1 -1
- package/lib/public/assets/{tablet-Cz9pTLGh.js → tablet-68J5f6zh.js} +1 -1
- package/lib/public/assets/{teams-DkFhPU6N.js → teams-eHSyEpbD.js} +1 -1
- package/lib/public/assets/{trash-2-DMkIlO0b.js → trash-2-CcSsv4fS.js} +1 -1
- package/lib/public/assets/{upload-Dg76vQUo.js → upload-BYf26K71.js} +1 -1
- package/lib/public/assets/{use-builds-data-iSxxYh9G.js → use-builds-data-CHW-MhaP.js} +1 -1
- package/lib/public/assets/{use-password-reset-mode-DsNcDXiv.js → use-password-reset-mode-DozShXkk.js} +1 -1
- package/lib/public/assets/{users-BShiNYd9.js → users-BpYnpOl2.js} +1 -1
- package/lib/public/assets/{users-Bu1HulwN.js → users-CcSQRoK9.js} +1 -1
- package/lib/public/assets/{video-off-BJ_s_mLK.js → video-off-dFKgps73.js} +1 -1
- package/lib/public/assets/webhook-settings-DD1XjiOD.js +1 -0
- package/lib/public/assets/{zap-BXZlQKN8.js → zap-COC2tZaH.js} +1 -1
- package/lib/public/index.html +2 -2
- package/lib/src/app/apiErrors.js +118 -0
- package/lib/src/app/index.js +6 -1
- package/lib/src/app/openapi/control.yaml +3129 -0
- package/lib/src/app/openapi/grid.yaml +2295 -0
- package/lib/src/app/openapi/identity.yaml +2168 -0
- package/lib/src/app/openapi/platform.yaml +2885 -0
- package/lib/src/app/openapi/sessions.yaml +3784 -0
- package/lib/src/app/routers/bug-report.js +4 -1
- package/lib/src/app/routers/config.js +6 -107
- package/lib/src/app/routers/control.js +117 -59
- package/lib/src/app/routers/dashboard.js +13 -7
- package/lib/src/app/routers/grid.js +54 -14
- package/lib/src/app/routers/profile.js +27 -13
- package/lib/src/app/routers/recordings.js +11 -5
- package/lib/src/app/routers/reservation.js +63 -15
- package/lib/src/app/routers/users.js +4 -0
- package/lib/src/app/routers/webhook.js +17 -8
- package/lib/src/app/swagger.js +259 -177
- package/lib/src/data-service/device-service.js +4 -1
- package/lib/src/data-service/deviceFieldOwners.js +1 -0
- package/lib/src/device-managers/AndroidDeviceManager.js +5 -2
- package/lib/src/device-managers/iOSTracker.js +14 -1
- package/lib/src/device-managers/ios/IOSDiscoveryService.js +9 -5
- package/lib/src/device-managers/ios/WDAClient.js +32 -32
- package/lib/src/device-managers/ios/usbmuxd.js +46 -0
- package/lib/src/generated/client/edge.js +4 -3
- package/lib/src/generated/client/index-browser.js +1 -0
- package/lib/src/generated/client/index.d.ts +38 -0
- package/lib/src/generated/client/index.js +4 -3
- package/lib/src/generated/client/package.json +1 -1
- package/lib/src/generated/client/schema.prisma +2 -0
- package/lib/src/generated/client/wasm.js +1 -0
- package/lib/src/middleware/csrfMiddleware.js +13 -5
- package/lib/src/middleware/rateLimitMiddleware.js +19 -5
- package/lib/src/middleware/roleGuard.js +20 -0
- package/lib/src/services/AIService.js +13 -3
- package/lib/src/services/NotificationService.js +28 -28
- package/lib/src/services/bug-report/BugReportService.js +8 -2
- package/lib/src/services/lease/LeaseService.js +71 -20
- package/lib/src/services/omni-vision/OmniVisionService.js +14 -5
- package/lib/src/services/recording/RecordingOrchestrator.js +16 -2
- package/lib/test/helpers/expressRoutes.js +41 -0
- package/lib/test/integration/team-visibility-control.spec.js +2 -2
- package/lib/test/unit/access-scopes.spec.js +227 -0
- package/lib/test/unit/api-error-handling.spec.js +179 -0
- package/lib/test/unit/bug-report/route.spec.js +29 -0
- package/lib/test/unit/bug-report/service.spec.js +30 -0
- package/lib/test/unit/control-honest-answers.spec.js +134 -0
- package/lib/test/unit/device-allocation-routes.spec.js +232 -0
- package/lib/test/unit/healing-state-endpoints.spec.js +8 -5
- package/lib/test/unit/install-repository-app-team.spec.js +4 -1
- package/lib/test/unit/ios-usbmuxd-missing.spec.js +111 -0
- package/lib/test/unit/lease/LeaseService.spec.js +5 -4
- package/lib/test/unit/lease/lease-device-match.spec.js +161 -0
- package/lib/test/unit/lease/lease-session-ownership.spec.js +10 -9
- package/lib/test/unit/omni-vision-failures.spec.js +81 -0
- package/lib/test/unit/openapi-coverage.spec.js +114 -0
- package/lib/test/unit/profile-router.test.js +42 -0
- package/lib/test/unit/rateLimitMiddleware.test.js +49 -0
- package/lib/test/unit/recording-orchestrator.spec.js +80 -0
- package/lib/test/unit/recordings-library-routes.spec.js +37 -0
- package/lib/test/unit/reservation-team-visibility.spec.js +4 -3
- package/lib/test/unit/reset-link.test.js +2 -1
- package/lib/test/unit/stream-ticket-identity.spec.js +1 -1
- package/lib/test/unit/users-router.test.js +14 -1
- package/lib/test/unit/wda-client-failures.spec.js +90 -0
- package/lib/test/unit/webhook-delivery.spec.js +142 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/prisma/migrations/20261004120000_reservation_holder/migration.sql +2 -0
- package/prisma/schema.prisma +2 -0
- package/lib/public/assets/DeviceMosaicView-C9AypMcW.js +0 -2
- package/lib/public/assets/RecordingPage-FIRd8b5d.js +0 -11
- package/lib/public/assets/device-explorer-D2AqrrLN.css +0 -1
- package/lib/public/assets/device-explorer-Dl1QGKQN.js +0 -268
- package/lib/public/assets/index-DklX18ye.js +0 -219
- package/lib/public/assets/keycodes-B5mWBGMd.js +0 -26
- package/lib/public/assets/webhook-settings-CJxMc7-Q.js +0 -1
- package/lib/src/app/swagger-docs.js +0 -1701
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import{c as t,r as o,j as u}from"./index-DklX18ye.js";/**
|
|
2
|
-
* @license lucide-react v0.555.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const l=[["path",{d:"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",key:"18u6gg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]],y=t("camera",l);/**
|
|
7
|
-
* @license lucide-react v0.555.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const i=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],M=t("chevron-left",i);/**
|
|
12
|
-
* @license lucide-react v0.555.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const _=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],f=t("circle",_);/**
|
|
17
|
-
* @license lucide-react v0.555.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const h=[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]],m=t("house",h);/**
|
|
22
|
-
* @license lucide-react v0.555.0 - ISC
|
|
23
|
-
*
|
|
24
|
-
* This source code is licensed under the ISC license.
|
|
25
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
-
*/const O=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],v=t("square",O);function E(s){return s.session_id||s.nodeHold||null}const d=o.forwardRef(function(a,c){const n=o.useRef(null),r=o.useCallback(e=>{n.current=e,typeof c=="function"?c(e):c&&(c.current=e)},[c]);return o.useEffect(()=>{const e=n.current;return()=>e==null?void 0:e.removeAttribute("src")},[]),u.jsx("img",{ref:r,...a})}),x={HOME:3,BACK:4,APP_SWITCH:187,VOLUME_UP:24,VOLUME_DOWN:25},H={HOME:"home",VOLUME_UP:"volumeup",VOLUME_DOWN:"volumedown"};export{x as A,f as C,m as H,H as I,d as M,v as S,M as a,y as b,E as h};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as P,r,X as c,j as e,J as u,A as b,C as U,K as D}from"./index-DklX18ye.js";/* empty css */import{F as S}from"./FieldGroup-Dm-U3Ucr.js";import{P as O}from"./page-header-CV-WOQ7B.js";import{T as V}from"./trash-2-DMkIlO0b.js";import{P as x}from"./plus-DOp8RUCs.js";import{C as B}from"./circle-x-Rfn2Zmq3.js";import{C as H}from"./circle-check-CGwn46BE.js";import{Z as I}from"./zap-BXZlQKN8.js";import{A as J}from"./activity-CFEfukVD.js";const C=[{id:"device_offline",label:"Device offline",icon:U,tone:"red"},{id:"device_new",label:"New device",icon:x,tone:"green"},{id:"session_failed",label:"Session failed",icon:B,tone:"amber"},{id:"selector_health_digest",label:"Selector health digest",icon:D,tone:"green"}],X=["udid","host","name","sessionId","failureReason","eventType","platform"],ae=()=>{const{toast:o}=P(),[g,T]=r.useState([]),[A,w]=r.useState(!0),[l,j]=r.useState(""),[d,k]=r.useState(["device_offline","session_failed"]),[h,f]=r.useState(!1),[v,N]=r.useState(!1),[n,_]=r.useState(!1),[y,m]=r.useState("");r.useEffect(()=>{p()},[]);const p=async()=>{w(!0);try{const s=await c.getWebhookConfigs();T(s||[])}catch(s){console.error("Failed to load webhook configs",s),o("Failed to load webhooks.","error")}finally{w(!1)}},z=async()=>{if(!l.trim()){o("Webhook URL is required.","error");return}if(d.length===0){o("Select at least one trigger event.","error");return}f(!0);try{await c.addWebhookConfig(l.trim(),d,"slack",y||void 0),j(""),m(""),_(!1),k(["device_offline","session_failed"]),await p(),o("Webhook saved.","success")}catch(s){console.error("Failed to add webhook",s),o(`Failed to add webhook: ${s.message||"unknown error"}`,"error")}finally{f(!1)}},E=async(s,t)=>{if(window.confirm(`Remove webhook for "${t}"?`))try{await c.deleteWebhookConfig(s),await p(),o("Webhook removed.","success")}catch(a){console.error("Failed to delete webhook",a),o(`Failed to delete: ${a.message||"unknown error"}`,"error")}},L=async()=>{if(l.trim()){N(!0);try{await c.testWebhook(l.trim(),"slack"),o("Test payload delivered.","success")}catch(s){o(`Test failed: ${s.message||"check the URL"}`,"error")}finally{N(!1)}}},$=s=>{k(t=>t.includes(s)?t.filter(a=>a!==s):[...t,s])},R=s=>{m(t=>t+`{{${s}}} `)};return e.jsxs("div",{className:"settings-container",children:[e.jsx(O,{icon:u,title:"Notifications",subtitle:"Configure Slack or generic webhooks to receive alerts for critical infrastructure events."}),e.jsxs("div",{className:"settings-content",children:[A?e.jsxs("div",{className:"settings-loading",style:{height:200},children:[e.jsx(b,{className:"animate-spin",size:28}),e.jsx("span",{children:"Loading webhooks…"})]}):g.length===0?e.jsxs("div",{className:"empty-state",children:[e.jsx("div",{className:"empty-state__icon",children:e.jsx(u,{size:28})}),e.jsx("h3",{className:"empty-state__title",children:"No webhooks configured"}),e.jsx("p",{className:"empty-state__copy",children:"Wire up a Slack incoming webhook or any HTTPS endpoint to receive alerts when devices go offline, new devices register, or sessions fail. Configure your first webhook below."})]}):e.jsx("div",{className:"webhook-list-grid",children:g.map(s=>{const t=(()=>{try{return JSON.parse(s.events)}catch{return[]}})();return e.jsxs("div",{className:"webhook-row-card",children:[e.jsxs("div",{className:"webhook-row-card__header",children:[e.jsx("span",{className:`pill-chip ${s.payloadTemplate?"pill-chip--admin":"pill-chip--scope"}`,children:s.payloadTemplate?"CUSTOM":"SLACK"}),e.jsx("span",{className:"webhook-row-card__url",title:s.url,children:s.url}),e.jsxs("button",{type:"button",className:"row-action row-action--danger",onClick:()=>E(s.id,s.url),"aria-label":`Remove webhook for ${s.url}`,children:[e.jsx(V,{size:13}),e.jsx("span",{children:"Remove"})]})]}),e.jsx("div",{className:"webhook-row-card__events",children:t.length===0?e.jsx("span",{className:"webhook-row-card__no-events",children:"No triggers"}):t.map(a=>{const i=C.find(F=>F.id===a),W=(i==null?void 0:i.icon)??u;return e.jsxs("span",{className:`event-pill event-pill--${(i==null?void 0:i.tone)||"gray"}`,children:[e.jsx(W,{size:11}),(i==null?void 0:i.label)||a]},a)})})]},s.id)})}),e.jsxs("div",{className:"add-webhook-card",children:[e.jsxs("div",{className:"add-webhook-card__header",children:[e.jsx(x,{size:14}),e.jsx("span",{children:"Add a new webhook"})]}),e.jsxs("div",{className:"add-webhook-card__body",children:[e.jsx(S,{label:"Webhook URL",description:"The endpoint we POST webhook events to.",htmlFor:"webhook-url",children:e.jsx("div",{className:"setting-input-wrapper",children:e.jsx("input",{id:"webhook-url",type:"url",placeholder:"https://hooks.slack.com/services/...",value:l,onChange:s=>j(s.target.value)})})}),e.jsx(S,{label:"Trigger events",children:e.jsx("div",{className:"event-toggle-grid",children:C.map(s=>{const t=d.includes(s.id),a=s.icon;return e.jsxs("button",{type:"button",role:"checkbox","aria-checked":t,className:`event-toggle event-toggle--${s.tone} ${t?"is-selected":""}`,onClick:()=>$(s.id),children:[e.jsx(a,{size:14,className:"event-toggle__lead"}),e.jsx("span",{children:s.label}),t&&e.jsx(H,{size:14,className:"event-toggle__check"})]},s.id)})})}),e.jsxs("div",{className:"template-section",children:[e.jsxs("button",{type:"button",className:"template-section__toggle",onClick:()=>_(!n),"aria-expanded":n,children:[e.jsx(I,{size:14,className:n?"tone-amber":"tone-dim"}),e.jsx("span",{children:"Use custom payload (optional)"}),e.jsx("span",{className:"template-section__indicator",children:n?"−":"+"})]}),n&&e.jsxs("div",{className:"template-editor",children:[e.jsx("p",{className:"template-editor__hint",children:"Define a JSON or text template. Click a variable below to insert it."}),e.jsx("div",{className:"template-editor__chips",children:X.map(s=>e.jsx("button",{type:"button",className:"template-editor__chip",onClick:()=>R(s),children:`{{${s}}}`},s))}),e.jsx("textarea",{className:"template-editor__textarea",placeholder:'Example: { "text": "Alert: Device {{udid}} is offline!" }',value:y,onChange:s=>m(s.target.value),rows:4})]})]})]}),e.jsxs("div",{className:"add-webhook-card__footer",children:[e.jsxs("button",{type:"button",className:"page-header-action page-header-action--ghost",onClick:L,disabled:!l.trim()||v,children:[v?e.jsx(b,{size:14,className:"animate-spin"}):e.jsx(J,{size:14}),e.jsx("span",{children:"Test payload"})]}),e.jsxs("button",{type:"button",className:"page-header-action",onClick:z,disabled:h||!l.trim(),children:[h?e.jsx(b,{size:14,className:"animate-spin"}):e.jsx(x,{size:14}),e.jsx("span",{children:h?"Saving…":"Save webhook"})]})]})]})]})]})};export{ae as WebhookSettings};
|