From c73ab6464b15810a590a0e87d2221715b18c1120 Mon Sep 17 00:00:00 2001 From: Alex Lee <3076438032@qq.com> Date: Thu, 17 Sep 2026 17:08:08 +0800 Subject: [PATCH] feat(dataflow): add embedded desktop support --- dataflow/package.json | 3 +- dataflow/pnpm-lock.yaml | 482 +++++++++++++++++- dataflow/src/stores/useSealosStore.ts | 88 +--- dataflow/src/test/useSealosStore.test.ts | 81 +-- deploy/README.md | 17 + deploy/charts/dataflow/dataflow-values.yaml | 3 + deploy/charts/dataflow/templates/ingress.yaml | 23 +- deploy/charts/dataflow/values.yaml | 3 + 8 files changed, 550 insertions(+), 150 deletions(-) diff --git a/dataflow/package.json b/dataflow/package.json index bb06366bd..2b37b97c3 100644 --- a/dataflow/package.json +++ b/dataflow/package.json @@ -21,6 +21,8 @@ }, "dependencies": { "@apollo/client": "3.13.8", + "@kubernetes/client-node": "^0.21.0", + "@labring/sealos-desktop-sdk": "0.1.23", "@monaco-editor/react": "^4.7.0", "@types/react-grid-layout": "^1.3.6", "@types/react-resizable": "^3.0.8", @@ -38,7 +40,6 @@ "react-dom": "19.2.0", "react-grid-layout": "^1.5.2", "react-resizable": "^3.1.3", - "sealos-desktop-sdk": "^0.1.14", "sql-formatter": "^15.7.2", "tailwind-merge": "^3.4.0", "tw-animate-css": "^1.4.0", diff --git a/dataflow/pnpm-lock.yaml b/dataflow/pnpm-lock.yaml index 3f81da7c5..b03667e99 100644 --- a/dataflow/pnpm-lock.yaml +++ b/dataflow/pnpm-lock.yaml @@ -11,6 +11,12 @@ importers: '@apollo/client': specifier: 3.13.8 version: 3.13.8(@types/react@19.2.14)(graphql-ws@6.0.7(graphql@16.11.0)(ws@8.20.0))(graphql@16.11.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@kubernetes/client-node': + specifier: ^0.21.0 + version: 0.21.0 + '@labring/sealos-desktop-sdk': + specifier: 0.1.23 + version: 0.1.23(@kubernetes/client-node@0.21.0) '@monaco-editor/react': specifier: ^4.7.0 version: 4.7.0(monaco-editor@0.55.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -62,9 +68,6 @@ importers: react-resizable: specifier: ^3.1.3 version: 3.1.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - sealos-desktop-sdk: - specifier: ^0.1.14 - version: 0.1.14 sql-formatter: specifier: ^15.7.2 version: 15.7.2 @@ -1310,6 +1313,10 @@ packages: '@types/node': optional: true + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1326,6 +1333,14 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@kubernetes/client-node@0.21.0': + resolution: {integrity: sha512-yYRbgMeyQbvZDHt/ZqsW3m4lRefzhbbJEuj8sVXM+bufKrgmzriA2oq7lWPH/k/LQIicAME9ixPUadTrxIF6dQ==} + + '@labring/sealos-desktop-sdk@0.1.23': + resolution: {integrity: sha512-Ri5TEgJj9hHgmEofbCqlKFzDoHcaJeJQWLo0srq0xLyM4D4pFJ4lyL9tNB0N/7SSZCN4cVGbi1rFOIoghFID3Q==} + peerDependencies: + '@kubernetes/client-node': ^0.18.1 + '@monaco-editor/loader@1.7.0': resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} @@ -2375,6 +2390,9 @@ packages: '@types/babel__traverse@7.28.0': resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + '@types/caseless@0.12.5': + resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -2407,6 +2425,12 @@ packages: '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/request@2.48.13': + resolution: {integrity: sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -2545,6 +2569,13 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -2560,6 +2591,12 @@ packages: resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} engines: {node: '>=8'} + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + axios@1.15.0: resolution: {integrity: sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==} @@ -2586,6 +2623,9 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -2611,6 +2651,10 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + byline@5.0.0: + resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==} + engines: {node: '>=0.10.0'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -2632,6 +2676,9 @@ packages: capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + cfb@1.2.2: resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} engines: {node: '>=0.8'} @@ -2653,6 +2700,10 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} @@ -2728,6 +2779,9 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2771,6 +2825,10 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -2782,6 +2840,9 @@ packages: dataloader@2.2.3: resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} + dayjs@1.11.23: + resolution: {integrity: sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==} + debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} @@ -2861,6 +2922,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + echarts-for-react@3.0.6: resolution: {integrity: sha512-4zqLgTGWS3JvkQDXjzkR1k1CHRdpd6by0988TWMJgnvDytegWLbeP/VNZmMa+0VJx2eD7Y632bi2JquXDgiGJg==} peerDependencies: @@ -2938,6 +3002,7 @@ packages: eslint@9.39.4: resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true peerDependencies: jiti: '*' @@ -2972,6 +3037,13 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3049,6 +3121,17 @@ packages: debug: optional: true + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + + form-data@2.5.6: + resolution: {integrity: sha512-Ogz/E85h9tlfJzpI6TuFpGcHZFhLrb9Gw8wq9v40CxSCPnv7ahKr6Xgtkn0KYCDQJ8DNn5VoMO8EXr9V5PadyA==} + engines: {node: '>= 0.12'} + form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -3097,6 +3180,9 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3165,6 +3251,15 @@ packages: resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + + har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -3181,6 +3276,10 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + header-case@2.0.4: resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} @@ -3195,6 +3294,10 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -3291,6 +3394,9 @@ packages: resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} engines: {node: '>=0.10.0'} + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + is-unc-path@1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} engines: {node: '>=0.10.0'} @@ -3322,6 +3428,9 @@ packages: peerDependencies: ws: '*' + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + jiti@1.21.7: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true @@ -3330,6 +3439,9 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jose@4.15.9: + resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} + jose@5.10.0: resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} @@ -3344,6 +3456,9 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + jsdom@25.0.1: resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} engines: {node: '>=18'} @@ -3367,9 +3482,15 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json-to-pretty-yaml@1.2.2: resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} engines: {node: '>= 0.2.0'} @@ -3379,6 +3500,15 @@ packages: engines: {node: '>=6'} hasBin: true + jsonpath-plus@8.1.0: + resolution: {integrity: sha512-qVTiuKztFGw0dGhYi3WNqvddx3/SHtyDT0xJaeyz4uP0d1tkpG+0y5uYQ4OcIo1TLAz3PE/qDOW9F0uDt3+CTw==} + engines: {node: '>=14.0.0'} + hasBin: true + + jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} @@ -3519,6 +3649,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + lucide-react@0.555.0: resolution: {integrity: sha512-D8FvHUGbxWBRQM90NZeIyhAvkFfsh3u9ekrMvJ30Z6gnpBHS6HC6ldLg7tL45hwiIz/u66eKDtdA23gwwGsAHA==} peerDependencies: @@ -3584,6 +3718,14 @@ packages: minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + monaco-editor@0.55.1: resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==} @@ -3666,13 +3808,24 @@ packages: nwsapi@2.2.23: resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} + oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-hash@2.2.0: + resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} + engines: {node: '>= 6'} + obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + oidc-token-hash@5.2.0: + resolution: {integrity: sha512-6gj2m8cJZ+iSW8bm0FXdGF0YhIQbKrfP4yWTNzxc31U6MOjfEmB1rHvlYvxI1B7t7BCi1F2vYTT6YhtQRG4hxw==} + engines: {node: ^10.13.0 || >=12.0.0} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3680,6 +3833,9 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + openid-client@5.7.1: + resolution: {integrity: sha512-jDBPgSVfTnkIh71Hg9pRvtJc6wTwqjRkN88+gCFtYWrlP4Yx2Dsrow8uPi3qLr/aeymPF3o2+dS+wOpglK04ew==} + optimism@0.18.1: resolution: {integrity: sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==} @@ -3769,6 +3925,9 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3828,10 +3987,17 @@ packages: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + qs@6.5.5: + resolution: {integrity: sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==} + engines: {node: '>=0.6'} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -3868,6 +4034,7 @@ packages: react-grid-layout@1.5.3: resolution: {integrity: sha512-KaG6IbjD6fYhagUtIvOzhftXG+ViKZjCjADe86X1KHl7C/dsBN2z0mi14nbvZKTkp0RKiil9RPcJBgq3LnoA8g==} + deprecated: 'Ships stray files that were never in the repo: an ip_fetcher binary and its curl-sample source (1.5.0-1.5.3), plus a yarn-error.log containing local paths (1.5.3). Upgrade to 1.5.4, which is byte-identical apart from removing them. See https://github.com/react-grid-layout/react-grid-layout/issues/2269' peerDependencies: react: '>= 16.3.0' react-dom: '>= 16.3.0' @@ -3956,6 +4123,11 @@ packages: remove-trailing-spaces@1.0.9: resolution: {integrity: sha512-xzG7w5IRijvIkHIjDk65URsJJ7k4J95wmcArY5PRcmjldIOl7oTvG8+X2Ag690R7SfwiOcHrWZKVc1Pp5WIOzA==} + request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3986,6 +4158,9 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfc4648@1.5.4: + resolution: {integrity: sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==} + rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -4029,9 +4204,6 @@ packages: scuid@1.1.0: resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} - sealos-desktop-sdk@0.1.14: - resolution: {integrity: sha512-CCmwDz3+jRcMqpqfUcXbxk0ErVaIM/p1hzR1rZ4Cl6BWRr9Wtw1mZIhO/you2HVSBGjt7eyTut6Sxq8zC0n76w==} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4108,6 +4280,11 @@ packages: resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} engines: {node: '>=0.8'} + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -4117,6 +4294,10 @@ packages: std-env@4.0.0: resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + stream-buffers@3.0.3: + resolution: {integrity: sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==} + engines: {node: '>= 0.10.0'} + string-env-interpolation@1.0.1: resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} @@ -4190,6 +4371,10 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} + tar@7.5.22: + resolution: {integrity: sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==} + engines: {node: '>=18'} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -4226,6 +4411,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + tough-cookie@5.1.2: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} @@ -4256,9 +4445,15 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tw-animate-css@1.4.0: resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -4337,11 +4532,20 @@ packages: resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} hasBin: true + uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + vite@7.3.1: resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4521,6 +4725,13 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yaml-ast-parser@0.0.43: resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} @@ -5932,6 +6143,10 @@ snapshots: optionalDependencies: '@types/node': 20.19.37 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.3 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -5951,6 +6166,39 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@kubernetes/client-node@0.21.0': + dependencies: + '@types/js-yaml': 4.0.9 + '@types/node': 20.19.37 + '@types/request': 2.48.13 + '@types/ws': 8.18.1 + byline: 5.0.0 + isomorphic-ws: 5.0.0(ws@8.20.0) + js-yaml: 4.1.1 + jsonpath-plus: 8.1.0 + request: 2.88.2 + rfc4648: 1.5.4 + stream-buffers: 3.0.3 + tar: 7.5.22 + tslib: 2.8.1 + ws: 8.20.0 + optionalDependencies: + openid-client: 5.7.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@labring/sealos-desktop-sdk@0.1.23(@kubernetes/client-node@0.21.0)': + dependencies: + '@kubernetes/client-node': 0.21.0 + axios: 1.15.0 + dayjs: 1.11.23 + js-cookie: 3.0.5 + js-yaml: 4.1.1 + uuid: 9.0.1 + transitivePeerDependencies: + - debug + '@monaco-editor/loader@1.7.0': dependencies: state-local: 1.0.7 @@ -6953,6 +7201,8 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@types/caseless@0.12.5': {} + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -6986,6 +7236,15 @@ snapshots: dependencies: csstype: 3.2.3 + '@types/request@2.48.13': + dependencies: + '@types/caseless': 0.12.5 + '@types/node': 20.19.37 + '@types/tough-cookie': 4.0.5 + form-data: 2.5.6 + + '@types/tough-cookie@4.0.5': {} + '@types/trusted-types@2.0.7': optional: true @@ -7135,6 +7394,12 @@ snapshots: asap@2.0.6: {} + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + + assert-plus@1.0.0: {} + assertion-error@2.0.1: {} astral-regex@2.0.0: {} @@ -7143,6 +7408,10 @@ snapshots: auto-bind@4.0.0: {} + aws-sign2@0.7.0: {} + + aws4@1.13.2: {} + axios@1.15.0: dependencies: follow-redirects: 1.16.0 @@ -7194,6 +7463,10 @@ snapshots: baseline-browser-mapping@2.10.8: {} + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -7230,6 +7503,8 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + byline@5.0.0: {} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -7252,6 +7527,8 @@ snapshots: tslib: 2.8.1 upper-case-first: 2.0.2 + caseless@0.12.0: {} + cfb@1.2.2: dependencies: adler-32: 1.3.1 @@ -7294,6 +7571,8 @@ snapshots: chardet@2.1.1: {} + chownr@3.0.0: {} + class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 @@ -7359,6 +7638,8 @@ snapshots: convert-source-map@2.0.0: {} + core-util-is@1.0.2: {} + core-util-is@1.0.3: {} cosmiconfig@8.3.6(typescript@5.9.3): @@ -7399,6 +7680,10 @@ snapshots: csstype@3.2.3: {} + dashdash@1.14.1: + dependencies: + assert-plus: 1.0.0 + data-uri-to-buffer@4.0.1: {} data-urls@5.0.0: @@ -7408,6 +7693,8 @@ snapshots: dataloader@2.2.3: {} + dayjs@1.11.23: {} + debounce@1.2.1: {} debug@4.4.3: @@ -7465,6 +7752,11 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + ecc-jsbn@0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + echarts-for-react@3.0.6(echarts@6.0.0)(react@19.2.0): dependencies: echarts: 6.0.0 @@ -7618,6 +7910,10 @@ snapshots: expect-type@1.3.0: {} + extend@3.0.2: {} + + extsprintf@1.3.0: {} + fast-deep-equal@3.1.3: {} fast-equals@4.0.3: {} @@ -7696,6 +7992,23 @@ snapshots: follow-redirects@1.16.0: {} + forever-agent@0.6.1: {} + + form-data@2.3.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + form-data@2.5.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + safe-buffer: 5.2.1 + form-data@4.0.5: dependencies: asynckit: 0.4.0 @@ -7745,6 +8058,10 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + getpass@0.1.7: + dependencies: + assert-plus: 1.0.0 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -7820,6 +8137,13 @@ snapshots: graphql@16.11.0: {} + har-schema@2.0.0: {} + + har-validator@5.1.5: + dependencies: + ajv: 6.14.0 + har-schema: 2.0.0 + has-flag@4.0.0: {} has-symbols@1.1.0: {} @@ -7832,6 +8156,10 @@ snapshots: dependencies: function-bind: 1.1.2 + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + header-case@2.0.4: dependencies: capital-case: 1.0.4 @@ -7852,6 +8180,12 @@ snapshots: transitivePeerDependencies: - supports-color + http-signature@1.2.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.18.0 + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -7948,6 +8282,8 @@ snapshots: dependencies: is-unc-path: 1.0.0 + is-typedarray@1.0.0: {} + is-unc-path@1.0.0: dependencies: unc-path-regex: 0.1.2 @@ -7972,10 +8308,15 @@ snapshots: dependencies: ws: 8.20.0 + isstream@0.1.2: {} + jiti@1.21.7: {} jiti@2.6.1: {} + jose@4.15.9: + optional: true + jose@5.10.0: {} js-cookie@3.0.5: {} @@ -7986,6 +8327,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsbn@0.1.1: {} + jsdom@25.0.1: dependencies: cssstyle: 4.6.0 @@ -8022,8 +8365,12 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema@0.4.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} + json-stringify-safe@5.0.1: {} + json-to-pretty-yaml@1.2.2: dependencies: remedial: 1.0.8 @@ -8031,6 +8378,15 @@ snapshots: json5@2.2.3: {} + jsonpath-plus@8.1.0: {} + + jsprim@1.4.2: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + jszip@3.10.1: dependencies: lie: 3.3.0 @@ -8157,6 +8513,11 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + optional: true + lucide-react@0.555.0(react@19.2.0): dependencies: react: 19.2.0 @@ -8202,6 +8563,12 @@ snapshots: dependencies: brace-expansion: 1.1.12 + minipass@7.1.3: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.3 + monaco-editor@0.55.1: dependencies: dompurify: 3.2.7 @@ -8277,10 +8644,18 @@ snapshots: nwsapi@2.2.23: {} + oauth-sign@0.9.0: {} + object-assign@4.1.1: {} + object-hash@2.2.0: + optional: true + obug@2.1.1: {} + oidc-token-hash@5.2.0: + optional: true + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -8289,6 +8664,14 @@ snapshots: dependencies: mimic-fn: 2.1.0 + openid-client@5.7.1: + dependencies: + jose: 4.15.9 + lru-cache: 6.0.0 + object-hash: 2.2.0 + oidc-token-hash: 5.2.0 + optional: true + optimism@0.18.1: dependencies: '@wry/caches': 1.0.1 @@ -8393,6 +8776,8 @@ snapshots: pathe@2.0.3: {} + performance-now@2.1.0: {} + picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -8451,8 +8836,14 @@ snapshots: proxy-from-env@2.1.0: {} + psl@1.15.0: + dependencies: + punycode: 2.3.1 + punycode@2.3.1: {} + qs@6.5.5: {} + queue-microtask@1.2.3: {} radix-ui@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): @@ -8630,6 +9021,29 @@ snapshots: remove-trailing-spaces@1.0.9: {} + request@2.88.2: + dependencies: + aws-sign2: 0.7.0 + aws4: 1.13.2 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.5 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + require-directory@2.1.1: {} require-main-filename@2.0.0: {} @@ -8649,6 +9063,8 @@ snapshots: reusify@1.1.0: {} + rfc4648@1.5.4: {} + rfdc@1.4.1: {} rollup@4.60.0: @@ -8710,14 +9126,6 @@ snapshots: scuid@1.1.0: {} - sealos-desktop-sdk@0.1.14: - dependencies: - axios: 1.15.0 - js-cookie: 3.0.5 - uuid: 9.0.1 - transitivePeerDependencies: - - debug - semver@6.3.1: {} semver@7.7.4: @@ -8815,12 +9223,26 @@ snapshots: dependencies: frac: 1.1.2 + sshpk@1.18.0: + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + stackback@0.0.2: {} state-local@1.0.7: {} std-env@4.0.0: {} + stream-buffers@3.0.3: {} + string-env-interpolation@1.0.1: {} string-width@4.2.3: @@ -8886,6 +9308,14 @@ snapshots: tapable@2.3.0: {} + tar@7.5.22: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.3 + minizlib: 3.1.0 + yallist: 5.0.0 + through@2.3.8: {} timeout-signal@2.0.0: {} @@ -8915,6 +9345,11 @@ snapshots: dependencies: is-number: 7.0.0 + tough-cookie@2.5.0: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + tough-cookie@5.1.2: dependencies: tldts: 6.1.86 @@ -8939,8 +9374,14 @@ snapshots: tslib@2.8.1: {} + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + tw-animate-css@1.4.0: {} + tweetnacl@0.14.5: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -9002,8 +9443,16 @@ snapshots: uuid@13.0.0: {} + uuid@3.4.0: {} + uuid@9.0.1: {} + verror@1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + vite@7.3.1(@types/node@20.19.37)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.8.3): dependencies: esbuild: 0.27.4 @@ -9130,6 +9579,11 @@ snapshots: yallist@3.1.1: {} + yallist@4.0.0: + optional: true + + yallist@5.0.0: {} + yaml-ast-parser@0.0.43: {} yaml@2.8.3: {} diff --git a/dataflow/src/stores/useSealosStore.ts b/dataflow/src/stores/useSealosStore.ts index ab2210c34..78f0f9527 100644 --- a/dataflow/src/stores/useSealosStore.ts +++ b/dataflow/src/stores/useSealosStore.ts @@ -1,21 +1,8 @@ import { create } from 'zustand' -import { EVENT_NAME } from 'sealos-desktop-sdk' -import { createSealosApp, sealosApp } from 'sealos-desktop-sdk/app' +import { EVENT_NAME, type SessionV1 } from '@labring/sealos-desktop-sdk' +import { createSealosApp, sealosApp } from '@labring/sealos-desktop-sdk/app' -export interface SealosSession { - token?: { - access_token: string - token_type: string - refresh_token: string - expiry: string - } - user: { - id: string - name: string - avatar: string - } - kubeconfig: string -} +type SealosSession = Pick interface SealosState { loading: boolean @@ -30,72 +17,10 @@ let initializePromise: Promise | null = null let sdkCleanup: (() => void) | undefined let languageCleanup: (() => void) | undefined -function getLocalStorageSessionShape(): 'missing' | 'raw-session' | 'zustand-session' | 'no-kubeconfig' | 'malformed' { - try { - const rawSession = localStorage.getItem('session') - if (!rawSession) return 'missing' - - const session = JSON.parse(rawSession) - if (hasKubeconfig(session)) return 'raw-session' - if (hasKubeconfig(session?.state?.session ?? null)) return 'zustand-session' - return 'no-kubeconfig' - } catch { - return 'malformed' - } -} - -function logSealosAuthDebug(message: string, details: Record = {}) { - const localStorageSessionShape = getLocalStorageSessionShape() - - console.warn('[SealosAuthDebug]', { - message, - origin: window.location.origin, - inIframe: window.top !== window, - hasLocalStorageSession: localStorageSessionShape !== 'missing', - localStorageSessionShape, - ...details, - }) -} - function hasKubeconfig(session: SealosSession | null): session is SealosSession { return typeof session?.kubeconfig === 'string' && session.kubeconfig.trim().length > 0 } -function summarizeError(error: unknown): string { - if (error instanceof Error) return error.message - if (typeof error === 'string') return error - - try { - return JSON.stringify(error) - } catch { - return String(error) - } -} - -function getDbprovider51Session(): SealosSession | null { - try { - const rawSession = localStorage.getItem('session') - if (!rawSession) return null - - const session = JSON.parse(rawSession) as SealosSession | null - return hasKubeconfig(session) ? session : null - } catch { - return null - } -} - -async function resolveSealosSession(): Promise { - try { - const session = await sealosApp.getSession() - if (hasKubeconfig(session)) return session - } catch (error) { - return getDbprovider51Session() - } - - logSealosAuthDebug('sdk session missing kubeconfig; trying dbprovider 5.1 localStorage') - return getDbprovider51Session() -} - export const useSealosStore = create((set) => ({ loading: true, initialized: false, @@ -118,7 +43,12 @@ export const useSealosStore = create((set) => ({ let session: SealosSession | null = null let language: string | null = null - session = await resolveSealosSession() + try { + const resolvedSession = await sealosApp.getSession() + session = hasKubeconfig(resolvedSession) ? resolvedSession : null + } catch { + session = null + } try { const result = await sealosApp.getLanguage() diff --git a/dataflow/src/test/useSealosStore.test.ts b/dataflow/src/test/useSealosStore.test.ts index b78c9d4f9..59b4cd63e 100644 --- a/dataflow/src/test/useSealosStore.test.ts +++ b/dataflow/src/test/useSealosStore.test.ts @@ -3,15 +3,16 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' const getSessionMock = vi.fn() const getLanguageMock = vi.fn() const addAppEventListenMock = vi.fn() +const createSealosAppMock = vi.fn(() => undefined) -vi.mock('sealos-desktop-sdk', () => ({ +vi.mock('@labring/sealos-desktop-sdk', () => ({ EVENT_NAME: { CHANGE_I18N: 'change-i18n', }, })) -vi.mock('sealos-desktop-sdk/app', () => ({ - createSealosApp: vi.fn(() => undefined), +vi.mock('@labring/sealos-desktop-sdk/app', () => ({ + createSealosApp: createSealosAppMock, sealosApp: { getSession: getSessionMock, getLanguage: getLanguageMock, @@ -22,28 +23,18 @@ vi.mock('sealos-desktop-sdk/app', () => ({ describe('useSealosStore', () => { beforeEach(() => { vi.resetModules() - const storage = new Map() - vi.stubGlobal('localStorage', { - getItem: vi.fn((key: string) => storage.get(key) ?? null), - setItem: vi.fn((key: string, value: string) => { - storage.set(key, value) - }), - removeItem: vi.fn((key: string) => { - storage.delete(key) - }), - clear: vi.fn(() => { - storage.clear() - }), - }) getSessionMock.mockReset() getLanguageMock.mockReset() addAppEventListenMock.mockReset() + createSealosAppMock.mockReset() + createSealosAppMock.mockReturnValue(undefined) getLanguageMock.mockResolvedValue({ lng: 'en' }) addAppEventListenMock.mockReturnValue(undefined) }) it('prefers the Sealos SDK session when it includes kubeconfig', async () => { getSessionMock.mockResolvedValue({ + token: 'sdk-token', user: { id: 'u-1', name: 'Ada', @@ -51,59 +42,27 @@ describe('useSealosStore', () => { }, kubeconfig: 'sdk-kubeconfig', }) - localStorage.setItem( - 'session', - JSON.stringify({ - user: { - id: 'u-2', - name: 'Grace', - avatar: '', - }, - kubeconfig: 'local-storage-kubeconfig', - }), - ) - const { useSealosStore } = await import('@/stores/useSealosStore') await useSealosStore.getState().initialize() expect(useSealosStore.getState().session?.kubeconfig).toBe('sdk-kubeconfig') + expect(createSealosAppMock).toHaveBeenCalledOnce() }) - it('loads the Sealos session from dbprovider 5.1 localStorage when SDK session is unavailable', async () => { + it('treats an unavailable SDK session as outside Sealos Desktop', async () => { getSessionMock.mockRejectedValue(new Error('not in desktop bridge')) - localStorage.setItem( - 'session', - JSON.stringify({ - user: { - id: 'u-1', - name: 'Ada', - avatar: '', - }, - kubeconfig: 'apiVersion: v1\ncurrent-context: ns-admin\n', - }), - ) const { useSealosStore } = await import('@/stores/useSealosStore') await useSealosStore.getState().initialize() - expect(useSealosStore.getState().session?.kubeconfig).toBe('apiVersion: v1\ncurrent-context: ns-admin\n') - expect(useSealosStore.getState().isInSealosDesktop).toBe(true) + expect(useSealosStore.getState().session).toBeNull() + expect(useSealosStore.getState().isInSealosDesktop).toBe(false) }) - it('ignores malformed dbprovider 5.1 localStorage sessions without kubeconfig', async () => { + it('ignores SDK sessions without kubeconfig', async () => { getSessionMock.mockResolvedValue(null) - localStorage.setItem( - 'session', - JSON.stringify({ - user: { - id: 'u-1', - name: 'Ada', - avatar: '', - }, - }), - ) const { useSealosStore } = await import('@/stores/useSealosStore') @@ -112,4 +71,20 @@ describe('useSealosStore', () => { expect(useSealosStore.getState().session).toBeNull() expect(useSealosStore.getState().isInSealosDesktop).toBe(false) }) + + it('updates the language from Desktop events', async () => { + let changeI18n: ((data: { currentLanguage?: string }) => void) | undefined + getSessionMock.mockResolvedValue(null) + addAppEventListenMock.mockImplementation((_, callback) => { + changeI18n = callback + return undefined + }) + + const { useSealosStore } = await import('@/stores/useSealosStore') + + await useSealosStore.getState().initialize() + changeI18n?.({ currentLanguage: 'zh' }) + + expect(useSealosStore.getState().language).toBe('zh') + }) }) diff --git a/deploy/README.md b/deploy/README.md index 4a801c227..7ecdae329 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -37,3 +37,20 @@ During install, `install.sh` ensures the user override file exists at: When the file does not exist yet, it is initialized from: - `deploy/charts/dataflow/dataflow-values.yaml` + +## Embedded UI + +To allow an external parent page to embed DataFlow, set +`dataflowConfig.embeddedAllowedOrigins` to exact HTTP(S) origins, including the +protocol and optional port. For example: + +```yaml +dataflowConfig: + embeddedAllowedOrigins: + - https://province.example.com +``` + +Wildcards, paths, and protocol-less hostnames are rejected during Helm +rendering. The Ingress removes `X-Frame-Options` and limits CSP +`frame-ancestors` to Sealos origins plus this list for both NGINX Ingress and +Higress. diff --git a/deploy/charts/dataflow/dataflow-values.yaml b/deploy/charts/dataflow/dataflow-values.yaml index 99085e7f5..4cab47d1b 100644 --- a/deploy/charts/dataflow/dataflow-values.yaml +++ b/deploy/charts/dataflow/dataflow-values.yaml @@ -1,5 +1,8 @@ replicaCount: 1 +dataflowConfig: + embeddedAllowedOrigins: [] + deploymentStrategy: type: RollingUpdate rollingUpdate: diff --git a/deploy/charts/dataflow/templates/ingress.yaml b/deploy/charts/dataflow/templates/ingress.yaml index 642beee56..464f494df 100644 --- a/deploy/charts/dataflow/templates/ingress.yaml +++ b/deploy/charts/dataflow/templates/ingress.yaml @@ -1,5 +1,24 @@ {{- if .Values.ingress.enabled -}} {{- $host := include "dataflow.ingressHost" . -}} +{{- $dataflowConfig := default (dict) .Values.dataflowConfig -}} +{{- $embeddedAllowedOrigins := default (list) $dataflowConfig.embeddedAllowedOrigins -}} +{{- range $index, $origin := $embeddedAllowedOrigins -}} +{{- if not (regexMatch `^https?://(?:[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?|\[[0-9A-Fa-f:.]+\])(?::[0-9]+)?$` $origin) -}} +{{- fail (printf "dataflowConfig.embeddedAllowedOrigins[%d] must be an exact http(s) origin without wildcards or paths: %s" $index $origin) -}} +{{- end -}} +{{- end -}} +{{- $embeddedOrigins := join " " $embeddedAllowedOrigins -}} +{{- $frameAncestors := printf "frame-ancestors 'self' https://%s https://*.%s" .Values.cloudDomain .Values.cloudDomain -}} +{{- if $embeddedOrigins -}} +{{- $frameAncestors = printf "%s %s" $frameAncestors $embeddedOrigins -}} +{{- end -}} +{{- $ingressAnnotations := default (dict) .Values.ingress.annotations -}} +{{- $securityAnnotations := dict + "nginx.ingress.kubernetes.io/configuration-snippet" (printf "more_clear_headers \"X-Frame-Options:\";\nmore_set_headers \"Content-Security-Policy: %s\";" $frameAncestors) + "higress.io/response-header-control-remove" "X-Frame-Options" + "higress.io/response-header-control-update" (printf "Content-Security-Policy \"%s\"" $frameAncestors) +-}} +{{- $annotations := mergeOverwrite (deepCopy $ingressAnnotations) $securityAnnotations -}} apiVersion: networking.k8s.io/v1 kind: Ingress metadata: @@ -7,10 +26,8 @@ metadata: namespace: {{ .Release.Namespace }} labels: {{- include "dataflow.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} annotations: - {{- toYaml . | nindent 4 }} - {{- end }} + {{- toYaml $annotations | nindent 4 }} spec: ingressClassName: {{ .Values.ingress.className }} tls: diff --git a/deploy/charts/dataflow/values.yaml b/deploy/charts/dataflow/values.yaml index 50f9c956c..0c6afd41c 100644 --- a/deploy/charts/dataflow/values.yaml +++ b/deploy/charts/dataflow/values.yaml @@ -20,6 +20,9 @@ fullnameOverride: '' cloudDomain: '127.0.0.1.nip.io' +dataflowConfig: + embeddedAllowedOrigins: [] + session: encryptionKey: 'replace-with-32-byte-secret-key!' ttl: 24h