sshclient-wasm 0.1.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/LICENSE.md +28 -0
- package/README.md +1139 -0
- package/dist/aws-iot-tunnel.d.ts +96 -0
- package/dist/aws-iot-tunnel.d.ts.map +1 -0
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +92 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +1934 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/next.cjs.js +2 -0
- package/dist/next.cjs.js.map +1 -0
- package/dist/next.d.ts +75 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.esm.js +101 -0
- package/dist/next.esm.js.map +1 -0
- package/dist/react.cjs.js +2 -0
- package/dist/react.cjs.js.map +1 -0
- package/dist/react.d.ts +52 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.esm.js +121 -0
- package/dist/react.esm.js.map +1 -0
- package/dist/transport.d.ts +64 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/vite.cjs.js +2 -0
- package/dist/vite.cjs.js.map +1 -0
- package/dist/vite.d.ts +100 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.esm.js +146 -0
- package/dist/vite.esm.js.map +1 -0
- package/dist/wasm_exec.js +575 -0
- package/package.json +81 -0
package/dist/next.cjs.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./index.cjs.js");async function a(t={}){const e={publicDir:"/",autoDetect:!0,cacheBusting:process.env.NODE_ENV==="development",timeout:1e4,...t};return r.SSHClient.initialize(e)}const u={getWebpackConfig(){return{experiments:{asyncWebAssembly:!0,layers:!0}}},getCORSHeaders(){return[{source:"/(.*)",headers:[{key:"Cross-Origin-Embedder-Policy",value:"require-corp"},{key:"Cross-Origin-Opener-Policy",value:"same-origin"}]}]},getNextConfig(t={}){return{webpack:e=>{const n=this.getWebpackConfig();return e.experiments={...e.experiments,...n.experiments},t.webpack?t.webpack(e):e},async headers(){const e=this.getCORSHeaders();if(t.headers){const n=await t.headers();return[...e,...n]}return e},...t}}};let s;try{s=require("react")}catch{}function o(t={}){if(!s)throw new Error("React is not available. Please install React to use useSSHClient.");const[e,n]=s.useState(!1),[c,l]=s.useState(null),[S,p]=s.useState(!0);return s.useEffect(()=>{let i=!0;return a(t).then(()=>{i&&(n(!0),l(null))}).catch(d=>{i&&(l(d),n(!1))}).finally(()=>{i&&p(!1)}),()=>{i=!1}},[JSON.stringify(t)]),{isInitialized:e,initError:c,isLoading:S}}const f={initializeSSHClient:a,NextJSConfig:u,useSSHClient:o,SSHClient:r.SSHClient};exports.CustomTransport=r.CustomTransport;exports.PacketTransformer=r.PacketTransformer;exports.SSHClient=r.SSHClient;exports.SSHClientHelpers=r.SSHClientHelpers;exports.SecureTunnelTransport=r.SecureTunnelTransport;exports.TunnelMessageType=r.TunnelMessageType;exports.WebSocketTransport=r.WebSocketTransport;exports.NextJSConfig=u;exports.default=f;exports.initializeSSHClient=a;exports.useSSHClient=o;
|
|
2
|
+
//# sourceMappingURL=next.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.cjs.js","sources":["../lib/next.ts"],"sourcesContent":["/**\n * Next.js specific initialization and utilities for sshclient-wasm\n * \n * Usage:\n * import { initializeSSHClient, SSHClient } from 'sshclient-wasm/next';\n */\n\nimport { SSHClient, InitializationOptions } from './index';\n\nexport * from './index';\n\n/**\n * Initialize SSH client with Next.js optimized defaults\n */\nexport async function initializeSSHClient(options: Partial<InitializationOptions> = {}): Promise<void> {\n const nextjsDefaults: InitializationOptions = {\n publicDir: '/',\n autoDetect: true,\n cacheBusting: process.env.NODE_ENV === 'development',\n timeout: 10000,\n ...options\n };\n\n return SSHClient.initialize(nextjsDefaults);\n}\n\n/**\n * Next.js configuration helpers\n */\nexport const NextJSConfig = {\n /**\n * Get recommended Next.js webpack configuration for WASM support\n */\n getWebpackConfig() {\n return {\n experiments: { \n asyncWebAssembly: true,\n layers: true \n }\n };\n },\n\n /**\n * Get recommended CORS headers for Next.js\n */\n getCORSHeaders() {\n return [\n {\n source: '/(.*)',\n headers: [\n { key: 'Cross-Origin-Embedder-Policy', value: 'require-corp' },\n { key: 'Cross-Origin-Opener-Policy', value: 'same-origin' },\n ],\n },\n ];\n },\n\n /**\n * Complete Next.js configuration object\n */\n getNextConfig(customConfig: any = {}) {\n return {\n webpack: (config: any) => {\n const wasmConfig = this.getWebpackConfig();\n config.experiments = { ...config.experiments, ...wasmConfig.experiments };\n \n // Allow custom webpack modifications\n if (customConfig.webpack) {\n return customConfig.webpack(config);\n }\n \n return config;\n },\n async headers() {\n const corsHeaders = this.getCORSHeaders();\n \n // Merge with custom headers if provided\n if (customConfig.headers) {\n const customHeaders = await customConfig.headers();\n return [...corsHeaders, ...customHeaders];\n }\n \n return corsHeaders;\n },\n ...customConfig\n };\n }\n};\n\n// Import React for the hook (conditional to avoid issues in non-React environments)\nlet React: any;\ntry {\n React = require('react');\n} catch {\n // React not available, hook will not work but won't break the module\n}\n\n/**\n * React hook for SSH client initialization in Next.js\n */\nexport function useSSHClient(options: Partial<InitializationOptions> = {}) {\n if (!React) {\n throw new Error('React is not available. Please install React to use useSSHClient.');\n }\n\n const [isInitialized, setIsInitialized] = React.useState(false);\n const [initError, setInitError] = React.useState(null as Error | null);\n const [isLoading, setIsLoading] = React.useState(true);\n\n React.useEffect(() => {\n let mounted = true;\n\n initializeSSHClient(options)\n .then(() => {\n if (mounted) {\n setIsInitialized(true);\n setInitError(null);\n }\n })\n .catch((error: Error) => {\n if (mounted) {\n setInitError(error);\n setIsInitialized(false);\n }\n })\n .finally(() => {\n if (mounted) {\n setIsLoading(false);\n }\n });\n\n return () => {\n mounted = false;\n };\n }, [JSON.stringify(options)]);\n\n return { isInitialized, initError, isLoading };\n}\n\nexport default {\n initializeSSHClient,\n NextJSConfig,\n useSSHClient,\n SSHClient\n};"],"names":["initializeSSHClient","options","nextjsDefaults","SSHClient","NextJSConfig","customConfig","config","wasmConfig","corsHeaders","customHeaders","React","useSSHClient","isInitialized","setIsInitialized","initError","setInitError","isLoading","setIsLoading","mounted","error","next"],"mappings":"8IAcA,eAAsBA,EAAoBC,EAA0C,GAAmB,CACrG,MAAMC,EAAwC,CAC5C,UAAW,IACX,WAAY,GACZ,aAAc,QAAQ,IAAI,WAAa,cACvC,QAAS,IACT,GAAGD,CAAA,EAGL,OAAOE,EAAAA,UAAU,WAAWD,CAAc,CAC5C,CAKO,MAAME,EAAe,CAI1B,kBAAmB,CACjB,MAAO,CACL,YAAa,CACX,iBAAkB,GAClB,OAAQ,EAAA,CACV,CAEJ,EAKA,gBAAiB,CACf,MAAO,CACL,CACE,OAAQ,QACR,QAAS,CACP,CAAE,IAAK,+BAAgC,MAAO,cAAA,EAC9C,CAAE,IAAK,6BAA8B,MAAO,aAAA,CAAc,CAC5D,CACF,CAEJ,EAKA,cAAcC,EAAoB,GAAI,CACpC,MAAO,CACL,QAAUC,GAAgB,CACxB,MAAMC,EAAa,KAAK,iBAAA,EAIxB,OAHAD,EAAO,YAAc,CAAE,GAAGA,EAAO,YAAa,GAAGC,EAAW,WAAA,EAGxDF,EAAa,QACRA,EAAa,QAAQC,CAAM,EAG7BA,CACT,EACA,MAAM,SAAU,CACd,MAAME,EAAc,KAAK,eAAA,EAGzB,GAAIH,EAAa,QAAS,CACxB,MAAMI,EAAgB,MAAMJ,EAAa,QAAA,EACzC,MAAO,CAAC,GAAGG,EAAa,GAAGC,CAAa,CAC1C,CAEA,OAAOD,CACT,EACA,GAAGH,CAAA,CAEP,CACF,EAGA,IAAIK,EACJ,GAAI,CACFA,EAAQ,QAAQ,OAAO,CACzB,MAAQ,CAER,CAKO,SAASC,EAAaV,EAA0C,GAAI,CACzE,GAAI,CAACS,EACH,MAAM,IAAI,MAAM,mEAAmE,EAGrF,KAAM,CAACE,EAAeC,CAAgB,EAAIH,EAAM,SAAS,EAAK,EACxD,CAACI,EAAWC,CAAY,EAAIL,EAAM,SAAS,IAAoB,EAC/D,CAACM,EAAWC,CAAY,EAAIP,EAAM,SAAS,EAAI,EAErD,OAAAA,EAAM,UAAU,IAAM,CACpB,IAAIQ,EAAU,GAEd,OAAAlB,EAAoBC,CAAO,EACxB,KAAK,IAAM,CACNiB,IACFL,EAAiB,EAAI,EACrBE,EAAa,IAAI,EAErB,CAAC,EACA,MAAOI,GAAiB,CACnBD,IACFH,EAAaI,CAAK,EAClBN,EAAiB,EAAK,EAE1B,CAAC,EACA,QAAQ,IAAM,CACTK,GACFD,EAAa,EAAK,CAEtB,CAAC,EAEI,IAAM,CACXC,EAAU,EACZ,CACF,EAAG,CAAC,KAAK,UAAUjB,CAAO,CAAC,CAAC,EAErB,CAAE,cAAAW,EAAe,UAAAE,EAAW,UAAAE,CAAA,CACrC,CAEA,MAAAI,EAAe,CACb,oBAAApB,EACA,aAAAI,EACA,aAAAO,EAAA,UACAR,EAAAA,SACF"}
|
package/dist/next.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { SSHClient, InitializationOptions } from './index';
|
|
2
|
+
|
|
3
|
+
export * from './index';
|
|
4
|
+
/**
|
|
5
|
+
* Initialize SSH client with Next.js optimized defaults
|
|
6
|
+
*/
|
|
7
|
+
export declare function initializeSSHClient(options?: Partial<InitializationOptions>): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Next.js configuration helpers
|
|
10
|
+
*/
|
|
11
|
+
export declare const NextJSConfig: {
|
|
12
|
+
/**
|
|
13
|
+
* Get recommended Next.js webpack configuration for WASM support
|
|
14
|
+
*/
|
|
15
|
+
getWebpackConfig(): {
|
|
16
|
+
experiments: {
|
|
17
|
+
asyncWebAssembly: boolean;
|
|
18
|
+
layers: boolean;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Get recommended CORS headers for Next.js
|
|
23
|
+
*/
|
|
24
|
+
getCORSHeaders(): {
|
|
25
|
+
source: string;
|
|
26
|
+
headers: {
|
|
27
|
+
key: string;
|
|
28
|
+
value: string;
|
|
29
|
+
}[];
|
|
30
|
+
}[];
|
|
31
|
+
/**
|
|
32
|
+
* Complete Next.js configuration object
|
|
33
|
+
*/
|
|
34
|
+
getNextConfig(customConfig?: any): any;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* React hook for SSH client initialization in Next.js
|
|
38
|
+
*/
|
|
39
|
+
export declare function useSSHClient(options?: Partial<InitializationOptions>): {
|
|
40
|
+
isInitialized: any;
|
|
41
|
+
initError: any;
|
|
42
|
+
isLoading: any;
|
|
43
|
+
};
|
|
44
|
+
declare const _default: {
|
|
45
|
+
initializeSSHClient: typeof initializeSSHClient;
|
|
46
|
+
NextJSConfig: {
|
|
47
|
+
/**
|
|
48
|
+
* Get recommended Next.js webpack configuration for WASM support
|
|
49
|
+
*/
|
|
50
|
+
getWebpackConfig(): {
|
|
51
|
+
experiments: {
|
|
52
|
+
asyncWebAssembly: boolean;
|
|
53
|
+
layers: boolean;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Get recommended CORS headers for Next.js
|
|
58
|
+
*/
|
|
59
|
+
getCORSHeaders(): {
|
|
60
|
+
source: string;
|
|
61
|
+
headers: {
|
|
62
|
+
key: string;
|
|
63
|
+
value: string;
|
|
64
|
+
}[];
|
|
65
|
+
}[];
|
|
66
|
+
/**
|
|
67
|
+
* Complete Next.js configuration object
|
|
68
|
+
*/
|
|
69
|
+
getNextConfig(customConfig?: any): any;
|
|
70
|
+
};
|
|
71
|
+
useSSHClient: typeof useSSHClient;
|
|
72
|
+
SSHClient: typeof SSHClient;
|
|
73
|
+
};
|
|
74
|
+
export default _default;
|
|
75
|
+
//# sourceMappingURL=next.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../lib/next.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE3D,cAAc,SAAS,CAAC;AAExB;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUrG;AAED;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB;;OAEG;;;;;;;IAUH;;OAEG;;;;;;;;IAaH;;OAEG;iCACyB,GAAG;CA2BhC,CAAC;AAUF;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM;;;;EAqCxE;;;;QA3GC;;WAEG;;;;;;;QAUH;;WAEG;;;;;;;;QAaH;;WAEG;qCACyB,GAAG;;;;;AA+EjC,wBAKE"}
|
package/dist/next.esm.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { SSHClient as a } from "./index.esm.js";
|
|
2
|
+
import { CustomTransport as g, PacketTransformer as h, SSHClientHelpers as C, SecureTunnelTransport as x, TunnelMessageType as H, WebSocketTransport as k } from "./index.esm.js";
|
|
3
|
+
async function u(t = {}) {
|
|
4
|
+
const e = {
|
|
5
|
+
publicDir: "/",
|
|
6
|
+
autoDetect: !0,
|
|
7
|
+
cacheBusting: process.env.NODE_ENV === "development",
|
|
8
|
+
timeout: 1e4,
|
|
9
|
+
...t
|
|
10
|
+
};
|
|
11
|
+
return a.initialize(e);
|
|
12
|
+
}
|
|
13
|
+
const f = {
|
|
14
|
+
/**
|
|
15
|
+
* Get recommended Next.js webpack configuration for WASM support
|
|
16
|
+
*/
|
|
17
|
+
getWebpackConfig() {
|
|
18
|
+
return {
|
|
19
|
+
experiments: {
|
|
20
|
+
asyncWebAssembly: !0,
|
|
21
|
+
layers: !0
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
/**
|
|
26
|
+
* Get recommended CORS headers for Next.js
|
|
27
|
+
*/
|
|
28
|
+
getCORSHeaders() {
|
|
29
|
+
return [
|
|
30
|
+
{
|
|
31
|
+
source: "/(.*)",
|
|
32
|
+
headers: [
|
|
33
|
+
{ key: "Cross-Origin-Embedder-Policy", value: "require-corp" },
|
|
34
|
+
{ key: "Cross-Origin-Opener-Policy", value: "same-origin" }
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
];
|
|
38
|
+
},
|
|
39
|
+
/**
|
|
40
|
+
* Complete Next.js configuration object
|
|
41
|
+
*/
|
|
42
|
+
getNextConfig(t = {}) {
|
|
43
|
+
return {
|
|
44
|
+
webpack: (e) => {
|
|
45
|
+
const r = this.getWebpackConfig();
|
|
46
|
+
return e.experiments = { ...e.experiments, ...r.experiments }, t.webpack ? t.webpack(e) : e;
|
|
47
|
+
},
|
|
48
|
+
async headers() {
|
|
49
|
+
const e = this.getCORSHeaders();
|
|
50
|
+
if (t.headers) {
|
|
51
|
+
const r = await t.headers();
|
|
52
|
+
return [...e, ...r];
|
|
53
|
+
}
|
|
54
|
+
return e;
|
|
55
|
+
},
|
|
56
|
+
...t
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
let s;
|
|
61
|
+
try {
|
|
62
|
+
s = require("react");
|
|
63
|
+
} catch {
|
|
64
|
+
}
|
|
65
|
+
function S(t = {}) {
|
|
66
|
+
if (!s)
|
|
67
|
+
throw new Error("React is not available. Please install React to use useSSHClient.");
|
|
68
|
+
const [e, r] = s.useState(!1), [l, i] = s.useState(null), [o, c] = s.useState(!0);
|
|
69
|
+
return s.useEffect(() => {
|
|
70
|
+
let n = !0;
|
|
71
|
+
return u(t).then(() => {
|
|
72
|
+
n && (r(!0), i(null));
|
|
73
|
+
}).catch((p) => {
|
|
74
|
+
n && (i(p), r(!1));
|
|
75
|
+
}).finally(() => {
|
|
76
|
+
n && c(!1);
|
|
77
|
+
}), () => {
|
|
78
|
+
n = !1;
|
|
79
|
+
};
|
|
80
|
+
}, [JSON.stringify(t)]), { isInitialized: e, initError: l, isLoading: o };
|
|
81
|
+
}
|
|
82
|
+
const m = {
|
|
83
|
+
initializeSSHClient: u,
|
|
84
|
+
NextJSConfig: f,
|
|
85
|
+
useSSHClient: S,
|
|
86
|
+
SSHClient: a
|
|
87
|
+
};
|
|
88
|
+
export {
|
|
89
|
+
g as CustomTransport,
|
|
90
|
+
f as NextJSConfig,
|
|
91
|
+
h as PacketTransformer,
|
|
92
|
+
a as SSHClient,
|
|
93
|
+
C as SSHClientHelpers,
|
|
94
|
+
x as SecureTunnelTransport,
|
|
95
|
+
H as TunnelMessageType,
|
|
96
|
+
k as WebSocketTransport,
|
|
97
|
+
m as default,
|
|
98
|
+
u as initializeSSHClient,
|
|
99
|
+
S as useSSHClient
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=next.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.esm.js","sources":["../lib/next.ts"],"sourcesContent":["/**\n * Next.js specific initialization and utilities for sshclient-wasm\n * \n * Usage:\n * import { initializeSSHClient, SSHClient } from 'sshclient-wasm/next';\n */\n\nimport { SSHClient, InitializationOptions } from './index';\n\nexport * from './index';\n\n/**\n * Initialize SSH client with Next.js optimized defaults\n */\nexport async function initializeSSHClient(options: Partial<InitializationOptions> = {}): Promise<void> {\n const nextjsDefaults: InitializationOptions = {\n publicDir: '/',\n autoDetect: true,\n cacheBusting: process.env.NODE_ENV === 'development',\n timeout: 10000,\n ...options\n };\n\n return SSHClient.initialize(nextjsDefaults);\n}\n\n/**\n * Next.js configuration helpers\n */\nexport const NextJSConfig = {\n /**\n * Get recommended Next.js webpack configuration for WASM support\n */\n getWebpackConfig() {\n return {\n experiments: { \n asyncWebAssembly: true,\n layers: true \n }\n };\n },\n\n /**\n * Get recommended CORS headers for Next.js\n */\n getCORSHeaders() {\n return [\n {\n source: '/(.*)',\n headers: [\n { key: 'Cross-Origin-Embedder-Policy', value: 'require-corp' },\n { key: 'Cross-Origin-Opener-Policy', value: 'same-origin' },\n ],\n },\n ];\n },\n\n /**\n * Complete Next.js configuration object\n */\n getNextConfig(customConfig: any = {}) {\n return {\n webpack: (config: any) => {\n const wasmConfig = this.getWebpackConfig();\n config.experiments = { ...config.experiments, ...wasmConfig.experiments };\n \n // Allow custom webpack modifications\n if (customConfig.webpack) {\n return customConfig.webpack(config);\n }\n \n return config;\n },\n async headers() {\n const corsHeaders = this.getCORSHeaders();\n \n // Merge with custom headers if provided\n if (customConfig.headers) {\n const customHeaders = await customConfig.headers();\n return [...corsHeaders, ...customHeaders];\n }\n \n return corsHeaders;\n },\n ...customConfig\n };\n }\n};\n\n// Import React for the hook (conditional to avoid issues in non-React environments)\nlet React: any;\ntry {\n React = require('react');\n} catch {\n // React not available, hook will not work but won't break the module\n}\n\n/**\n * React hook for SSH client initialization in Next.js\n */\nexport function useSSHClient(options: Partial<InitializationOptions> = {}) {\n if (!React) {\n throw new Error('React is not available. Please install React to use useSSHClient.');\n }\n\n const [isInitialized, setIsInitialized] = React.useState(false);\n const [initError, setInitError] = React.useState(null as Error | null);\n const [isLoading, setIsLoading] = React.useState(true);\n\n React.useEffect(() => {\n let mounted = true;\n\n initializeSSHClient(options)\n .then(() => {\n if (mounted) {\n setIsInitialized(true);\n setInitError(null);\n }\n })\n .catch((error: Error) => {\n if (mounted) {\n setInitError(error);\n setIsInitialized(false);\n }\n })\n .finally(() => {\n if (mounted) {\n setIsLoading(false);\n }\n });\n\n return () => {\n mounted = false;\n };\n }, [JSON.stringify(options)]);\n\n return { isInitialized, initError, isLoading };\n}\n\nexport default {\n initializeSSHClient,\n NextJSConfig,\n useSSHClient,\n SSHClient\n};"],"names":["initializeSSHClient","options","nextjsDefaults","SSHClient","NextJSConfig","customConfig","config","wasmConfig","corsHeaders","customHeaders","React","useSSHClient","isInitialized","setIsInitialized","initError","setInitError","isLoading","setIsLoading","mounted","error","next"],"mappings":";;AAcA,eAAsBA,EAAoBC,IAA0C,IAAmB;AACrG,QAAMC,IAAwC;AAAA,IAC5C,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,cAAc,QAAQ,IAAI,aAAa;AAAA,IACvC,SAAS;AAAA,IACT,GAAGD;AAAA,EAAA;AAGL,SAAOE,EAAU,WAAWD,CAAc;AAC5C;AAKO,MAAME,IAAe;AAAA;AAAA;AAAA;AAAA,EAI1B,mBAAmB;AACjB,WAAO;AAAA,MACL,aAAa;AAAA,QACX,kBAAkB;AAAA,QAClB,QAAQ;AAAA,MAAA;AAAA,IACV;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB;AACf,WAAO;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,EAAE,KAAK,gCAAgC,OAAO,eAAA;AAAA,UAC9C,EAAE,KAAK,8BAA8B,OAAO,cAAA;AAAA,QAAc;AAAA,MAC5D;AAAA,IACF;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA,EAKA,cAAcC,IAAoB,IAAI;AACpC,WAAO;AAAA,MACL,SAAS,CAACC,MAAgB;AACxB,cAAMC,IAAa,KAAK,iBAAA;AAIxB,eAHAD,EAAO,cAAc,EAAE,GAAGA,EAAO,aAAa,GAAGC,EAAW,YAAA,GAGxDF,EAAa,UACRA,EAAa,QAAQC,CAAM,IAG7BA;AAAA,MACT;AAAA,MACA,MAAM,UAAU;AACd,cAAME,IAAc,KAAK,eAAA;AAGzB,YAAIH,EAAa,SAAS;AACxB,gBAAMI,IAAgB,MAAMJ,EAAa,QAAA;AACzC,iBAAO,CAAC,GAAGG,GAAa,GAAGC,CAAa;AAAA,QAC1C;AAEA,eAAOD;AAAA,MACT;AAAA,MACA,GAAGH;AAAA,IAAA;AAAA,EAEP;AACF;AAGA,IAAIK;AACJ,IAAI;AACF,EAAAA,IAAQ,QAAQ,OAAO;AACzB,QAAQ;AAER;AAKO,SAASC,EAAaV,IAA0C,IAAI;AACzE,MAAI,CAACS;AACH,UAAM,IAAI,MAAM,mEAAmE;AAGrF,QAAM,CAACE,GAAeC,CAAgB,IAAIH,EAAM,SAAS,EAAK,GACxD,CAACI,GAAWC,CAAY,IAAIL,EAAM,SAAS,IAAoB,GAC/D,CAACM,GAAWC,CAAY,IAAIP,EAAM,SAAS,EAAI;AAErD,SAAAA,EAAM,UAAU,MAAM;AACpB,QAAIQ,IAAU;AAEd,WAAAlB,EAAoBC,CAAO,EACxB,KAAK,MAAM;AACV,MAAIiB,MACFL,EAAiB,EAAI,GACrBE,EAAa,IAAI;AAAA,IAErB,CAAC,EACA,MAAM,CAACI,MAAiB;AACvB,MAAID,MACFH,EAAaI,CAAK,GAClBN,EAAiB,EAAK;AAAA,IAE1B,CAAC,EACA,QAAQ,MAAM;AACb,MAAIK,KACFD,EAAa,EAAK;AAAA,IAEtB,CAAC,GAEI,MAAM;AACX,MAAAC,IAAU;AAAA,IACZ;AAAA,EACF,GAAG,CAAC,KAAK,UAAUjB,CAAO,CAAC,CAAC,GAErB,EAAE,eAAAW,GAAe,WAAAE,GAAW,WAAAE,EAAA;AACrC;AAEA,MAAAI,IAAe;AAAA,EACb,qBAAApB;AAAA,EACA,cAAAI;AAAA,EACA,cAAAO;AAAA,EACA,WAAAR;AACF;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./index.cjs.js");let e;try{e=require("react")}catch{throw new Error("React is not available. Please install React to use sshclient-wasm/react.")}function f(t={}){if(!e)throw new Error("React is not available. Please install React to use useSSHClient.");const[i,o]=e.useState(!1),[n,l]=e.useState(null),[s,u]=e.useState(!0);return e.useEffect(()=>{let a=!0;return r.SSHClient.initialize(t).then(()=>{a&&(o(!0),l(null))}).catch(H=>{a&&(l(H),o(!1))}).finally(()=>{a&&u(!1)}),()=>{a=!1}},[JSON.stringify(t)]),{isInitialized:i,initError:n,isLoading:s}}function v(){if(!e)throw new Error("React is not available. Please install React to use useSSHConnection.");const[t,i]=e.useState(null),[o,n]=e.useState("idle"),[l,s]=e.useState(null),u=e.useCallback(async(c,P,S)=>{n("connecting"),s(null);try{const C={...S,onStateChange:h=>{var E;n(h==="connected"?"connected":"connecting"),(E=S==null?void 0:S.onStateChange)==null||E.call(S,h)}},w=await r.SSHClient.connect(c,P,C);return i(w),n("connected"),w}catch(C){throw s(C),n("error"),C}},[]),a=e.useCallback(async()=>{if(t)try{await t.disconnect(),i(null),n("disconnected")}catch(c){throw s(c),n("error"),c}},[t]),H=e.useCallback(async c=>{if(!t)throw new Error("No active SSH session");return t.send(c)},[t]);return e.useEffect(()=>()=>{t&&t.disconnect().catch(console.error)},[t]),{session:t,connectionState:o,connectionError:l,connect:u,disconnect:a,send:H}}function T(t,i={}){if(!e)throw new Error("React is not available. Please install React to use withSSHClient.");return e.forwardRef((o,n)=>{const{isInitialized:l,initError:s,isLoading:u}=f(i);return u?e.createElement("div",null,"Initializing SSH client..."):s?e.createElement("div",null,`SSH initialization error: ${s.message}`):l?e.createElement(t,{...o,ref:n}):e.createElement("div",null,"SSH client not initialized")})}const d=e!=null&&e.createContext?e.createContext(null):null;function g({children:t,options:i={}}){if(!e)throw new Error("React is not available. Please install React to use SSHClientProvider.");const o=f(i);return e.createElement(d.Provider,{value:o},t)}function m(){if(!e)throw new Error("React is not available. Please install React to use useSSHClientContext.");const t=e.useContext(d);if(!t)throw new Error("useSSHClientContext must be used within an SSHClientProvider");return t}const R={useSSHClient:f,useSSHConnection:v,withSSHClient:T,SSHClientProvider:g,SSHClientContext:d,useSSHClientContext:m,SSHClient:r.SSHClient};exports.CustomTransport=r.CustomTransport;exports.PacketTransformer=r.PacketTransformer;exports.SSHClient=r.SSHClient;exports.SSHClientHelpers=r.SSHClientHelpers;exports.SecureTunnelTransport=r.SecureTunnelTransport;exports.TunnelMessageType=r.TunnelMessageType;exports.WebSocketTransport=r.WebSocketTransport;exports.SSHClientContext=d;exports.SSHClientProvider=g;exports.default=R;exports.useSSHClient=f;exports.useSSHClientContext=m;exports.useSSHConnection=v;exports.withSSHClient=T;
|
|
2
|
+
//# sourceMappingURL=react.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.cjs.js","sources":["../lib/react.ts"],"sourcesContent":["/**\n * React specific utilities for sshclient-wasm\n * \n * Usage:\n * import { useSSHClient, SSHClient } from 'sshclient-wasm/react';\n */\n\nimport { SSHClient, InitializationOptions, SSHSession, Transport, ConnectionOptions, SSHClientCallbacks } from './index';\n\nexport * from './index';\n\n// Import React with error handling\nlet React: any;\ntry {\n React = require('react');\n} catch {\n throw new Error('React is not available. Please install React to use sshclient-wasm/react.');\n}\n\n/**\n * React hook for SSH client initialization\n */\nexport function useSSHClient(options: Partial<InitializationOptions> = {}) {\n if (!React) {\n throw new Error('React is not available. Please install React to use useSSHClient.');\n }\n\n const [isInitialized, setIsInitialized] = React.useState(false);\n const [initError, setInitError] = React.useState(null as Error | null);\n const [isLoading, setIsLoading] = React.useState(true);\n\n React.useEffect(() => {\n let mounted = true;\n\n SSHClient.initialize(options)\n .then(() => {\n if (mounted) {\n setIsInitialized(true);\n setInitError(null);\n }\n })\n .catch((error: Error) => {\n if (mounted) {\n setInitError(error);\n setIsInitialized(false);\n }\n })\n .finally(() => {\n if (mounted) {\n setIsLoading(false);\n }\n });\n\n return () => {\n mounted = false;\n };\n }, [JSON.stringify(options)]);\n\n return { isInitialized, initError, isLoading };\n}\n\n/**\n * React hook for managing SSH connections\n */\nexport function useSSHConnection() {\n if (!React) {\n throw new Error('React is not available. Please install React to use useSSHConnection.');\n }\n\n const [session, setSession] = React.useState(null as SSHSession | null);\n const [connectionState, setConnectionState] = React.useState('idle' as 'idle' | 'connecting' | 'connected' | 'error' | 'disconnected');\n const [connectionError, setConnectionError] = React.useState(null as Error | null);\n\n const connect = React.useCallback(async (\n options: ConnectionOptions, \n transport: Transport, \n callbacks?: SSHClientCallbacks\n ) => {\n setConnectionState('connecting');\n setConnectionError(null);\n\n try {\n const enhancedCallbacks: SSHClientCallbacks = {\n ...callbacks,\n onStateChange: (state) => {\n setConnectionState(state === 'connected' ? 'connected' : 'connecting');\n callbacks?.onStateChange?.(state);\n }\n };\n\n const newSession = await SSHClient.connect(options, transport, enhancedCallbacks);\n setSession(newSession);\n setConnectionState('connected');\n return newSession;\n } catch (error) {\n setConnectionError(error as Error);\n setConnectionState('error');\n throw error;\n }\n }, []);\n\n const disconnect = React.useCallback(async () => {\n if (session) {\n try {\n await session.disconnect();\n setSession(null);\n setConnectionState('disconnected');\n } catch (error) {\n setConnectionError(error as Error);\n setConnectionState('error');\n throw error;\n }\n }\n }, [session]);\n\n const send = React.useCallback(async (data: Uint8Array) => {\n if (!session) {\n throw new Error('No active SSH session');\n }\n return session.send(data);\n }, [session]);\n\n // Cleanup on unmount\n React.useEffect(() => {\n return () => {\n if (session) {\n session.disconnect().catch(console.error);\n }\n };\n }, [session]);\n\n return {\n session,\n connectionState,\n connectionError,\n connect,\n disconnect,\n send\n };\n}\n\n/**\n * Higher-order component for SSH client initialization\n */\nexport function withSSHClient<P extends object>(\n Component: any, \n options: Partial<InitializationOptions> = {}\n) {\n if (!React) {\n throw new Error('React is not available. Please install React to use withSSHClient.');\n }\n\n return React.forwardRef((props: P, ref: any) => {\n const { isInitialized, initError, isLoading } = useSSHClient(options);\n\n if (isLoading) {\n return React.createElement('div', null, 'Initializing SSH client...');\n }\n\n if (initError) {\n return React.createElement('div', null, `SSH initialization error: ${initError.message}`);\n }\n\n if (!isInitialized) {\n return React.createElement('div', null, 'SSH client not initialized');\n }\n\n return React.createElement(Component, { ...props, ref });\n });\n}\n\n/**\n * React context for SSH client\n */\nexport const SSHClientContext = React?.createContext ? React.createContext(null as {\n isInitialized: boolean;\n initError: Error | null;\n isLoading: boolean;\n} | null) : null;\n\n/**\n * SSH client provider component\n */\nexport function SSHClientProvider({ \n children, \n options = {} \n}: { \n children: any; \n options?: Partial<InitializationOptions>;\n}) {\n if (!React) {\n throw new Error('React is not available. Please install React to use SSHClientProvider.');\n }\n\n const sshState = useSSHClient(options);\n\n return React.createElement(\n SSHClientContext.Provider,\n { value: sshState },\n children\n );\n}\n\n/**\n * Hook to use SSH client context\n */\nexport function useSSHClientContext() {\n if (!React) {\n throw new Error('React is not available. Please install React to use useSSHClientContext.');\n }\n\n const context = React.useContext(SSHClientContext);\n if (!context) {\n throw new Error('useSSHClientContext must be used within an SSHClientProvider');\n }\n return context;\n}\n\nexport default {\n useSSHClient,\n useSSHConnection,\n withSSHClient,\n SSHClientProvider,\n SSHClientContext,\n useSSHClientContext,\n SSHClient\n};"],"names":["React","useSSHClient","options","isInitialized","setIsInitialized","initError","setInitError","isLoading","setIsLoading","mounted","SSHClient","error","useSSHConnection","session","setSession","connectionState","setConnectionState","connectionError","setConnectionError","connect","transport","callbacks","enhancedCallbacks","state","_a","newSession","disconnect","send","data","withSSHClient","Component","props","ref","SSHClientContext","SSHClientProvider","children","sshState","useSSHClientContext","context","react"],"mappings":"8IAYA,IAAIA,EACJ,GAAI,CACFA,EAAQ,QAAQ,OAAO,CACzB,MAAQ,CACN,MAAM,IAAI,MAAM,2EAA2E,CAC7F,CAKO,SAASC,EAAaC,EAA0C,GAAI,CACzE,GAAI,CAACF,EACH,MAAM,IAAI,MAAM,mEAAmE,EAGrF,KAAM,CAACG,EAAeC,CAAgB,EAAIJ,EAAM,SAAS,EAAK,EACxD,CAACK,EAAWC,CAAY,EAAIN,EAAM,SAAS,IAAoB,EAC/D,CAACO,EAAWC,CAAY,EAAIR,EAAM,SAAS,EAAI,EAErD,OAAAA,EAAM,UAAU,IAAM,CACpB,IAAIS,EAAU,GAEdC,OAAAA,EAAAA,UAAU,WAAWR,CAAO,EACzB,KAAK,IAAM,CACNO,IACFL,EAAiB,EAAI,EACrBE,EAAa,IAAI,EAErB,CAAC,EACA,MAAOK,GAAiB,CACnBF,IACFH,EAAaK,CAAK,EAClBP,EAAiB,EAAK,EAE1B,CAAC,EACA,QAAQ,IAAM,CACTK,GACFD,EAAa,EAAK,CAEtB,CAAC,EAEI,IAAM,CACXC,EAAU,EACZ,CACF,EAAG,CAAC,KAAK,UAAUP,CAAO,CAAC,CAAC,EAErB,CAAE,cAAAC,EAAe,UAAAE,EAAW,UAAAE,CAAA,CACrC,CAKO,SAASK,GAAmB,CACjC,GAAI,CAACZ,EACH,MAAM,IAAI,MAAM,uEAAuE,EAGzF,KAAM,CAACa,EAASC,CAAU,EAAId,EAAM,SAAS,IAAyB,EAChE,CAACe,EAAiBC,CAAkB,EAAIhB,EAAM,SAAS,MAAwE,EAC/H,CAACiB,EAAiBC,CAAkB,EAAIlB,EAAM,SAAS,IAAoB,EAE3EmB,EAAUnB,EAAM,YAAY,MAChCE,EACAkB,EACAC,IACG,CACHL,EAAmB,YAAY,EAC/BE,EAAmB,IAAI,EAEvB,GAAI,CACF,MAAMI,EAAwC,CAC5C,GAAGD,EACH,cAAgBE,GAAU,OACxBP,EAAmBO,IAAU,YAAc,YAAc,YAAY,GACrEC,EAAAH,GAAA,YAAAA,EAAW,gBAAX,MAAAG,EAAA,KAAAH,EAA2BE,EAC7B,CAAA,EAGIE,EAAa,MAAMf,EAAAA,UAAU,QAAQR,EAASkB,EAAWE,CAAiB,EAChF,OAAAR,EAAWW,CAAU,EACrBT,EAAmB,WAAW,EACvBS,CACT,OAASd,EAAO,CACd,MAAAO,EAAmBP,CAAc,EACjCK,EAAmB,OAAO,EACpBL,CACR,CACF,EAAG,CAAA,CAAE,EAECe,EAAa1B,EAAM,YAAY,SAAY,CAC/C,GAAIa,EACF,GAAI,CACF,MAAMA,EAAQ,WAAA,EACdC,EAAW,IAAI,EACfE,EAAmB,cAAc,CACnC,OAASL,EAAO,CACd,MAAAO,EAAmBP,CAAc,EACjCK,EAAmB,OAAO,EACpBL,CACR,CAEJ,EAAG,CAACE,CAAO,CAAC,EAENc,EAAO3B,EAAM,YAAY,MAAO4B,GAAqB,CACzD,GAAI,CAACf,EACH,MAAM,IAAI,MAAM,uBAAuB,EAEzC,OAAOA,EAAQ,KAAKe,CAAI,CAC1B,EAAG,CAACf,CAAO,CAAC,EAGZ,OAAAb,EAAM,UAAU,IACP,IAAM,CACPa,GACFA,EAAQ,WAAA,EAAa,MAAM,QAAQ,KAAK,CAE5C,EACC,CAACA,CAAO,CAAC,EAEL,CACL,QAAAA,EACA,gBAAAE,EACA,gBAAAE,EACA,QAAAE,EACA,WAAAO,EACA,KAAAC,CAAA,CAEJ,CAKO,SAASE,EACdC,EACA5B,EAA0C,GAC1C,CACA,GAAI,CAACF,EACH,MAAM,IAAI,MAAM,oEAAoE,EAGtF,OAAOA,EAAM,WAAW,CAAC+B,EAAUC,IAAa,CAC9C,KAAM,CAAE,cAAA7B,EAAe,UAAAE,EAAW,UAAAE,CAAA,EAAcN,EAAaC,CAAO,EAEpE,OAAIK,EACKP,EAAM,cAAc,MAAO,KAAM,4BAA4B,EAGlEK,EACKL,EAAM,cAAc,MAAO,KAAM,6BAA6BK,EAAU,OAAO,EAAE,EAGrFF,EAIEH,EAAM,cAAc8B,EAAW,CAAE,GAAGC,EAAO,IAAAC,EAAK,EAH9ChC,EAAM,cAAc,MAAO,KAAM,4BAA4B,CAIxE,CAAC,CACH,CAKO,MAAMiC,EAAmBjC,GAAA,MAAAA,EAAO,cAAgBA,EAAM,cAAc,IAInE,EAAI,KAKL,SAASkC,EAAkB,CAChC,SAAAC,EACA,QAAAjC,EAAU,CAAA,CACZ,EAGG,CACD,GAAI,CAACF,EACH,MAAM,IAAI,MAAM,wEAAwE,EAG1F,MAAMoC,EAAWnC,EAAaC,CAAO,EAErC,OAAOF,EAAM,cACXiC,EAAiB,SACjB,CAAE,MAAOG,CAAA,EACTD,CAAA,CAEJ,CAKO,SAASE,GAAsB,CACpC,GAAI,CAACrC,EACH,MAAM,IAAI,MAAM,0EAA0E,EAG5F,MAAMsC,EAAUtC,EAAM,WAAWiC,CAAgB,EACjD,GAAI,CAACK,EACH,MAAM,IAAI,MAAM,8DAA8D,EAEhF,OAAOA,CACT,CAEA,MAAAC,EAAe,CACb,aAAAtC,EACA,iBAAAW,EACA,cAAAiB,EACA,kBAAAK,EACA,iBAAAD,EACA,oBAAAI,EAAA,UACA3B,EAAAA,SACF"}
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { SSHClient, InitializationOptions } from './index';
|
|
2
|
+
|
|
3
|
+
export * from './index';
|
|
4
|
+
/**
|
|
5
|
+
* React hook for SSH client initialization
|
|
6
|
+
*/
|
|
7
|
+
export declare function useSSHClient(options?: Partial<InitializationOptions>): {
|
|
8
|
+
isInitialized: any;
|
|
9
|
+
initError: any;
|
|
10
|
+
isLoading: any;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* React hook for managing SSH connections
|
|
14
|
+
*/
|
|
15
|
+
export declare function useSSHConnection(): {
|
|
16
|
+
session: any;
|
|
17
|
+
connectionState: any;
|
|
18
|
+
connectionError: any;
|
|
19
|
+
connect: any;
|
|
20
|
+
disconnect: any;
|
|
21
|
+
send: any;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Higher-order component for SSH client initialization
|
|
25
|
+
*/
|
|
26
|
+
export declare function withSSHClient<P extends object>(Component: any, options?: Partial<InitializationOptions>): any;
|
|
27
|
+
/**
|
|
28
|
+
* React context for SSH client
|
|
29
|
+
*/
|
|
30
|
+
export declare const SSHClientContext: any;
|
|
31
|
+
/**
|
|
32
|
+
* SSH client provider component
|
|
33
|
+
*/
|
|
34
|
+
export declare function SSHClientProvider({ children, options }: {
|
|
35
|
+
children: any;
|
|
36
|
+
options?: Partial<InitializationOptions>;
|
|
37
|
+
}): any;
|
|
38
|
+
/**
|
|
39
|
+
* Hook to use SSH client context
|
|
40
|
+
*/
|
|
41
|
+
export declare function useSSHClientContext(): any;
|
|
42
|
+
declare const _default: {
|
|
43
|
+
useSSHClient: typeof useSSHClient;
|
|
44
|
+
useSSHConnection: typeof useSSHConnection;
|
|
45
|
+
withSSHClient: typeof withSSHClient;
|
|
46
|
+
SSHClientProvider: typeof SSHClientProvider;
|
|
47
|
+
SSHClientContext: any;
|
|
48
|
+
useSSHClientContext: typeof useSSHClientContext;
|
|
49
|
+
SSHClient: typeof SSHClient;
|
|
50
|
+
};
|
|
51
|
+
export default _default;
|
|
52
|
+
//# sourceMappingURL=react.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../lib/react.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAgE,MAAM,SAAS,CAAC;AAEzH,cAAc,SAAS,CAAC;AAUxB;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM;;;;EAqCxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB;;;;;;;EA2E/B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,SAAS,EAAE,GAAG,EACd,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM,OAuB7C;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,KAIb,CAAC;AAEjB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,OAAY,EACb,EAAE;IACD,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC1C,OAYA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,QAUlC;;;;;;;;;;AAED,wBAQE"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { SSHClient as C } from "./index.esm.js";
|
|
2
|
+
import { CustomTransport as I, PacketTransformer as T, SSHClientHelpers as b, SecureTunnelTransport as L, TunnelMessageType as N, WebSocketTransport as q } from "./index.esm.js";
|
|
3
|
+
let e;
|
|
4
|
+
try {
|
|
5
|
+
e = require("react");
|
|
6
|
+
} catch {
|
|
7
|
+
throw new Error("React is not available. Please install React to use sshclient-wasm/react.");
|
|
8
|
+
}
|
|
9
|
+
function d(t = {}) {
|
|
10
|
+
if (!e)
|
|
11
|
+
throw new Error("React is not available. Please install React to use useSSHClient.");
|
|
12
|
+
const [r, i] = e.useState(!1), [n, s] = e.useState(null), [o, u] = e.useState(!0);
|
|
13
|
+
return e.useEffect(() => {
|
|
14
|
+
let a = !0;
|
|
15
|
+
return C.initialize(t).then(() => {
|
|
16
|
+
a && (i(!0), s(null));
|
|
17
|
+
}).catch((f) => {
|
|
18
|
+
a && (s(f), i(!1));
|
|
19
|
+
}).finally(() => {
|
|
20
|
+
a && u(!1);
|
|
21
|
+
}), () => {
|
|
22
|
+
a = !1;
|
|
23
|
+
};
|
|
24
|
+
}, [JSON.stringify(t)]), { isInitialized: r, initError: n, isLoading: o };
|
|
25
|
+
}
|
|
26
|
+
function m() {
|
|
27
|
+
if (!e)
|
|
28
|
+
throw new Error("React is not available. Please install React to use useSSHConnection.");
|
|
29
|
+
const [t, r] = e.useState(null), [i, n] = e.useState("idle"), [s, o] = e.useState(null), u = e.useCallback(async (l, v, c) => {
|
|
30
|
+
n("connecting"), o(null);
|
|
31
|
+
try {
|
|
32
|
+
const S = {
|
|
33
|
+
...c,
|
|
34
|
+
onStateChange: (E) => {
|
|
35
|
+
var H;
|
|
36
|
+
n(E === "connected" ? "connected" : "connecting"), (H = c == null ? void 0 : c.onStateChange) == null || H.call(c, E);
|
|
37
|
+
}
|
|
38
|
+
}, h = await C.connect(l, v, S);
|
|
39
|
+
return r(h), n("connected"), h;
|
|
40
|
+
} catch (S) {
|
|
41
|
+
throw o(S), n("error"), S;
|
|
42
|
+
}
|
|
43
|
+
}, []), a = e.useCallback(async () => {
|
|
44
|
+
if (t)
|
|
45
|
+
try {
|
|
46
|
+
await t.disconnect(), r(null), n("disconnected");
|
|
47
|
+
} catch (l) {
|
|
48
|
+
throw o(l), n("error"), l;
|
|
49
|
+
}
|
|
50
|
+
}, [t]), f = e.useCallback(async (l) => {
|
|
51
|
+
if (!t)
|
|
52
|
+
throw new Error("No active SSH session");
|
|
53
|
+
return t.send(l);
|
|
54
|
+
}, [t]);
|
|
55
|
+
return e.useEffect(() => () => {
|
|
56
|
+
t && t.disconnect().catch(console.error);
|
|
57
|
+
}, [t]), {
|
|
58
|
+
session: t,
|
|
59
|
+
connectionState: i,
|
|
60
|
+
connectionError: s,
|
|
61
|
+
connect: u,
|
|
62
|
+
disconnect: a,
|
|
63
|
+
send: f
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function R(t, r = {}) {
|
|
67
|
+
if (!e)
|
|
68
|
+
throw new Error("React is not available. Please install React to use withSSHClient.");
|
|
69
|
+
return e.forwardRef((i, n) => {
|
|
70
|
+
const { isInitialized: s, initError: o, isLoading: u } = d(r);
|
|
71
|
+
return u ? e.createElement("div", null, "Initializing SSH client...") : o ? e.createElement("div", null, `SSH initialization error: ${o.message}`) : s ? e.createElement(t, { ...i, ref: n }) : e.createElement("div", null, "SSH client not initialized");
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const w = e != null && e.createContext ? e.createContext(null) : null;
|
|
75
|
+
function g({
|
|
76
|
+
children: t,
|
|
77
|
+
options: r = {}
|
|
78
|
+
}) {
|
|
79
|
+
if (!e)
|
|
80
|
+
throw new Error("React is not available. Please install React to use SSHClientProvider.");
|
|
81
|
+
const i = d(r);
|
|
82
|
+
return e.createElement(
|
|
83
|
+
w.Provider,
|
|
84
|
+
{ value: i },
|
|
85
|
+
t
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
function P() {
|
|
89
|
+
if (!e)
|
|
90
|
+
throw new Error("React is not available. Please install React to use useSSHClientContext.");
|
|
91
|
+
const t = e.useContext(w);
|
|
92
|
+
if (!t)
|
|
93
|
+
throw new Error("useSSHClientContext must be used within an SSHClientProvider");
|
|
94
|
+
return t;
|
|
95
|
+
}
|
|
96
|
+
const y = {
|
|
97
|
+
useSSHClient: d,
|
|
98
|
+
useSSHConnection: m,
|
|
99
|
+
withSSHClient: R,
|
|
100
|
+
SSHClientProvider: g,
|
|
101
|
+
SSHClientContext: w,
|
|
102
|
+
useSSHClientContext: P,
|
|
103
|
+
SSHClient: C
|
|
104
|
+
};
|
|
105
|
+
export {
|
|
106
|
+
I as CustomTransport,
|
|
107
|
+
T as PacketTransformer,
|
|
108
|
+
C as SSHClient,
|
|
109
|
+
w as SSHClientContext,
|
|
110
|
+
b as SSHClientHelpers,
|
|
111
|
+
g as SSHClientProvider,
|
|
112
|
+
L as SecureTunnelTransport,
|
|
113
|
+
N as TunnelMessageType,
|
|
114
|
+
q as WebSocketTransport,
|
|
115
|
+
y as default,
|
|
116
|
+
d as useSSHClient,
|
|
117
|
+
P as useSSHClientContext,
|
|
118
|
+
m as useSSHConnection,
|
|
119
|
+
R as withSSHClient
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=react.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.esm.js","sources":["../lib/react.ts"],"sourcesContent":["/**\n * React specific utilities for sshclient-wasm\n * \n * Usage:\n * import { useSSHClient, SSHClient } from 'sshclient-wasm/react';\n */\n\nimport { SSHClient, InitializationOptions, SSHSession, Transport, ConnectionOptions, SSHClientCallbacks } from './index';\n\nexport * from './index';\n\n// Import React with error handling\nlet React: any;\ntry {\n React = require('react');\n} catch {\n throw new Error('React is not available. Please install React to use sshclient-wasm/react.');\n}\n\n/**\n * React hook for SSH client initialization\n */\nexport function useSSHClient(options: Partial<InitializationOptions> = {}) {\n if (!React) {\n throw new Error('React is not available. Please install React to use useSSHClient.');\n }\n\n const [isInitialized, setIsInitialized] = React.useState(false);\n const [initError, setInitError] = React.useState(null as Error | null);\n const [isLoading, setIsLoading] = React.useState(true);\n\n React.useEffect(() => {\n let mounted = true;\n\n SSHClient.initialize(options)\n .then(() => {\n if (mounted) {\n setIsInitialized(true);\n setInitError(null);\n }\n })\n .catch((error: Error) => {\n if (mounted) {\n setInitError(error);\n setIsInitialized(false);\n }\n })\n .finally(() => {\n if (mounted) {\n setIsLoading(false);\n }\n });\n\n return () => {\n mounted = false;\n };\n }, [JSON.stringify(options)]);\n\n return { isInitialized, initError, isLoading };\n}\n\n/**\n * React hook for managing SSH connections\n */\nexport function useSSHConnection() {\n if (!React) {\n throw new Error('React is not available. Please install React to use useSSHConnection.');\n }\n\n const [session, setSession] = React.useState(null as SSHSession | null);\n const [connectionState, setConnectionState] = React.useState('idle' as 'idle' | 'connecting' | 'connected' | 'error' | 'disconnected');\n const [connectionError, setConnectionError] = React.useState(null as Error | null);\n\n const connect = React.useCallback(async (\n options: ConnectionOptions, \n transport: Transport, \n callbacks?: SSHClientCallbacks\n ) => {\n setConnectionState('connecting');\n setConnectionError(null);\n\n try {\n const enhancedCallbacks: SSHClientCallbacks = {\n ...callbacks,\n onStateChange: (state) => {\n setConnectionState(state === 'connected' ? 'connected' : 'connecting');\n callbacks?.onStateChange?.(state);\n }\n };\n\n const newSession = await SSHClient.connect(options, transport, enhancedCallbacks);\n setSession(newSession);\n setConnectionState('connected');\n return newSession;\n } catch (error) {\n setConnectionError(error as Error);\n setConnectionState('error');\n throw error;\n }\n }, []);\n\n const disconnect = React.useCallback(async () => {\n if (session) {\n try {\n await session.disconnect();\n setSession(null);\n setConnectionState('disconnected');\n } catch (error) {\n setConnectionError(error as Error);\n setConnectionState('error');\n throw error;\n }\n }\n }, [session]);\n\n const send = React.useCallback(async (data: Uint8Array) => {\n if (!session) {\n throw new Error('No active SSH session');\n }\n return session.send(data);\n }, [session]);\n\n // Cleanup on unmount\n React.useEffect(() => {\n return () => {\n if (session) {\n session.disconnect().catch(console.error);\n }\n };\n }, [session]);\n\n return {\n session,\n connectionState,\n connectionError,\n connect,\n disconnect,\n send\n };\n}\n\n/**\n * Higher-order component for SSH client initialization\n */\nexport function withSSHClient<P extends object>(\n Component: any, \n options: Partial<InitializationOptions> = {}\n) {\n if (!React) {\n throw new Error('React is not available. Please install React to use withSSHClient.');\n }\n\n return React.forwardRef((props: P, ref: any) => {\n const { isInitialized, initError, isLoading } = useSSHClient(options);\n\n if (isLoading) {\n return React.createElement('div', null, 'Initializing SSH client...');\n }\n\n if (initError) {\n return React.createElement('div', null, `SSH initialization error: ${initError.message}`);\n }\n\n if (!isInitialized) {\n return React.createElement('div', null, 'SSH client not initialized');\n }\n\n return React.createElement(Component, { ...props, ref });\n });\n}\n\n/**\n * React context for SSH client\n */\nexport const SSHClientContext = React?.createContext ? React.createContext(null as {\n isInitialized: boolean;\n initError: Error | null;\n isLoading: boolean;\n} | null) : null;\n\n/**\n * SSH client provider component\n */\nexport function SSHClientProvider({ \n children, \n options = {} \n}: { \n children: any; \n options?: Partial<InitializationOptions>;\n}) {\n if (!React) {\n throw new Error('React is not available. Please install React to use SSHClientProvider.');\n }\n\n const sshState = useSSHClient(options);\n\n return React.createElement(\n SSHClientContext.Provider,\n { value: sshState },\n children\n );\n}\n\n/**\n * Hook to use SSH client context\n */\nexport function useSSHClientContext() {\n if (!React) {\n throw new Error('React is not available. Please install React to use useSSHClientContext.');\n }\n\n const context = React.useContext(SSHClientContext);\n if (!context) {\n throw new Error('useSSHClientContext must be used within an SSHClientProvider');\n }\n return context;\n}\n\nexport default {\n useSSHClient,\n useSSHConnection,\n withSSHClient,\n SSHClientProvider,\n SSHClientContext,\n useSSHClientContext,\n SSHClient\n};"],"names":["React","useSSHClient","options","isInitialized","setIsInitialized","initError","setInitError","isLoading","setIsLoading","mounted","SSHClient","error","useSSHConnection","session","setSession","connectionState","setConnectionState","connectionError","setConnectionError","connect","transport","callbacks","enhancedCallbacks","state","_a","newSession","disconnect","send","data","withSSHClient","Component","props","ref","SSHClientContext","SSHClientProvider","children","sshState","useSSHClientContext","context","react"],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export interface Transport {
|
|
2
|
+
id: string;
|
|
3
|
+
connect(): Promise<void>;
|
|
4
|
+
disconnect(): Promise<void>;
|
|
5
|
+
send(data: Uint8Array): Promise<void>;
|
|
6
|
+
onData?: (data: Uint8Array) => void;
|
|
7
|
+
onError?: (error: Error) => void;
|
|
8
|
+
onClose?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface TransportCallbacks {
|
|
11
|
+
onWrite?: (data: Uint8Array) => void;
|
|
12
|
+
onClose?: () => void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* WebSocketTransport implements Transport over WebSocket
|
|
16
|
+
*/
|
|
17
|
+
export declare class WebSocketTransport implements Transport {
|
|
18
|
+
id: string;
|
|
19
|
+
private ws;
|
|
20
|
+
private url;
|
|
21
|
+
private protocols?;
|
|
22
|
+
private callbacks;
|
|
23
|
+
onData?: (data: Uint8Array) => void;
|
|
24
|
+
onError?: (error: Error) => void;
|
|
25
|
+
onClose?: () => void;
|
|
26
|
+
constructor(id: string, url: string, protocols?: string | string[]);
|
|
27
|
+
connect(): Promise<void>;
|
|
28
|
+
disconnect(): Promise<void>;
|
|
29
|
+
send(data: Uint8Array): Promise<void>;
|
|
30
|
+
setCallbacks(callbacks: TransportCallbacks): void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* CustomTransport allows implementing custom transport mechanisms
|
|
34
|
+
*/
|
|
35
|
+
export declare class CustomTransport implements Transport {
|
|
36
|
+
id: string;
|
|
37
|
+
private isConnected;
|
|
38
|
+
onData?: (data: Uint8Array) => void;
|
|
39
|
+
onError?: (error: Error) => void;
|
|
40
|
+
onClose?: () => void;
|
|
41
|
+
private connectImpl?;
|
|
42
|
+
private disconnectImpl?;
|
|
43
|
+
private sendImpl?;
|
|
44
|
+
constructor(id: string, connectImpl?: () => Promise<void>, disconnectImpl?: () => Promise<void>, sendImpl?: (data: Uint8Array) => Promise<void>);
|
|
45
|
+
connect(): Promise<void>;
|
|
46
|
+
disconnect(): Promise<void>;
|
|
47
|
+
send(data: Uint8Array): Promise<void>;
|
|
48
|
+
injectData(data: Uint8Array): void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* TransportManager manages the bridge between JavaScript transports and WASM
|
|
52
|
+
*/
|
|
53
|
+
export declare class TransportManager {
|
|
54
|
+
private static instance;
|
|
55
|
+
private transports;
|
|
56
|
+
private wasmInstance;
|
|
57
|
+
private constructor();
|
|
58
|
+
static getInstance(): TransportManager;
|
|
59
|
+
setWasmInstance(wasmInstance: any): void;
|
|
60
|
+
createTransport(transport: Transport): Promise<void>;
|
|
61
|
+
closeTransport(id: string): Promise<void>;
|
|
62
|
+
getTransport(id: string): Transport | undefined;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../lib/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/vite.cjs.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./index.cjs.js");async function o(t={}){var n,s,l;let e=!1;try{e=((l=(s=(n=globalThis.import)==null?void 0:n.meta)==null?void 0:s.env)==null?void 0:l.DEV)===!0}catch{e=!1}const i={publicDir:"/",autoDetect:!0,cacheBusting:e,timeout:1e4,...t};return r.SSHClient.initialize(i)}const c={getServerConfig(){return{headers:{"Cross-Origin-Embedder-Policy":"require-corp","Cross-Origin-Opener-Policy":"same-origin"},middlewares:[]}},getBuildConfig(){return{target:"esnext",rollupOptions:{output:{assetFileNames:t=>{var e;return(e=t.name)!=null&&e.endsWith(".wasm")?"[name][extname]":"[name].[hash][extname]"}}}}},getOptimizeDepsConfig(){return{exclude:["sshclient-wasm"]}},getViteConfig(t={}){const e=this.getServerConfig(),i=this.getBuildConfig(),n=this.getOptimizeDepsConfig();return{server:{...e,...t.server},build:{...i,...t.build},optimizeDeps:{...n,...t.optimizeDeps},...t}}};function S(t={}){if(!a)throw new Error("React is not available. Please install React to use useSSHClient.");const[e,i]=a.useState(!1),[n,s]=a.useState(null),[l,g]=a.useState(!0);return a.useEffect(()=>{let u=!0;return o(t).then(()=>{u&&(i(!0),s(null))}).catch(d=>{u&&(s(d),i(!1))}).finally(()=>{u&&g(!1)}),()=>{u=!1}},[JSON.stringify(t)]),{isInitialized:e,initError:n,isLoading:l}}function f(t={}){let e;try{e=require("vue")}catch{throw new Error("Vue is not available. Please install Vue to use useSSHClientVue.")}const i=e.ref(!1),n=e.ref(null),s=e.ref(!0);return e.onMounted(async()=>{try{await o(t),i.value=!0,n.value=null}catch(l){n.value=l,i.value=!1}finally{s.value=!1}}),{isInitialized:e.readonly(i),initError:e.readonly(n),isLoading:e.readonly(s)}}let a;try{a=require("react")}catch{}const C={initializeSSHClient:o,ViteConfig:c,useSSHClient:S,useSSHClientVue:f,SSHClient:r.SSHClient};exports.CustomTransport=r.CustomTransport;exports.PacketTransformer=r.PacketTransformer;exports.SSHClient=r.SSHClient;exports.SSHClientHelpers=r.SSHClientHelpers;exports.SecureTunnelTransport=r.SecureTunnelTransport;exports.TunnelMessageType=r.TunnelMessageType;exports.WebSocketTransport=r.WebSocketTransport;exports.ViteConfig=c;exports.default=C;exports.initializeSSHClient=o;exports.useSSHClient=S;exports.useSSHClientVue=f;
|
|
2
|
+
//# sourceMappingURL=vite.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.cjs.js","sources":["../lib/vite.ts"],"sourcesContent":["/**\n * Vite specific initialization and utilities for sshclient-wasm\n * \n * Usage:\n * import { initializeSSHClient, SSHClient } from 'sshclient-wasm/vite';\n */\n\nimport { SSHClient, InitializationOptions } from './index';\n\nexport * from './index';\n\n/**\n * Initialize SSH client with Vite optimized defaults\n */\nexport async function initializeSSHClient(options: Partial<InitializationOptions> = {}): Promise<void> {\n // Safe import.meta.env access - avoid TypeScript errors by using try/catch\n let isDev = false;\n try {\n // This will work in Vite environments where import.meta.env is available\n isDev = (globalThis as any).import?.meta?.env?.DEV === true;\n } catch {\n // Fallback or in non-Vite environments\n isDev = false;\n }\n\n const viteDefaults: InitializationOptions = {\n publicDir: '/',\n autoDetect: true,\n cacheBusting: isDev,\n timeout: 10000,\n ...options\n };\n\n return SSHClient.initialize(viteDefaults);\n}\n\n/**\n * Vite configuration helpers\n */\nexport const ViteConfig = {\n /**\n * Get recommended Vite server configuration for WASM support\n */\n getServerConfig() {\n return {\n headers: {\n 'Cross-Origin-Embedder-Policy': 'require-corp',\n 'Cross-Origin-Opener-Policy': 'same-origin',\n },\n // Ensure WASM files are served with correct MIME type\n middlewares: []\n };\n },\n\n /**\n * Get recommended Vite build configuration for WASM support\n */\n getBuildConfig() {\n return {\n target: 'esnext',\n rollupOptions: {\n output: {\n // Ensure WASM files are handled properly\n assetFileNames: (assetInfo: any) => {\n if (assetInfo.name?.endsWith('.wasm')) {\n return '[name][extname]';\n }\n return '[name].[hash][extname]';\n }\n }\n }\n };\n },\n\n /**\n * Get recommended Vite optimizeDeps configuration\n */\n getOptimizeDepsConfig() {\n return {\n exclude: ['sshclient-wasm']\n };\n },\n\n /**\n * Complete Vite configuration object\n */\n getViteConfig(customConfig: any = {}) {\n const serverConfig = this.getServerConfig();\n const buildConfig = this.getBuildConfig();\n const optimizeDepsConfig = this.getOptimizeDepsConfig();\n\n return {\n server: {\n ...serverConfig,\n ...customConfig.server\n },\n build: {\n ...buildConfig,\n ...customConfig.build\n },\n optimizeDeps: {\n ...optimizeDepsConfig,\n ...customConfig.optimizeDeps\n },\n ...customConfig\n };\n }\n};\n\n/**\n * React hook for SSH client initialization in Vite\n */\nexport function useSSHClient(options: Partial<InitializationOptions> = {}) {\n if (!React) {\n throw new Error('React is not available. Please install React to use useSSHClient.');\n }\n\n const [isInitialized, setIsInitialized] = React.useState(false);\n const [initError, setInitError] = React.useState(null as Error | null);\n const [isLoading, setIsLoading] = React.useState(true);\n\n React.useEffect(() => {\n let mounted = true;\n\n initializeSSHClient(options)\n .then(() => {\n if (mounted) {\n setIsInitialized(true);\n setInitError(null);\n }\n })\n .catch((error: Error) => {\n if (mounted) {\n setInitError(error);\n setIsInitialized(false);\n }\n })\n .finally(() => {\n if (mounted) {\n setIsLoading(false);\n }\n });\n\n return () => {\n mounted = false;\n };\n }, [JSON.stringify(options)]);\n\n return { isInitialized, initError, isLoading };\n}\n\n/**\n * Vue composition API composable for SSH client initialization\n */\nexport function useSSHClientVue(options: Partial<InitializationOptions> = {}) {\n let Vue: any;\n try {\n Vue = require('vue');\n } catch {\n throw new Error('Vue is not available. Please install Vue to use useSSHClientVue.');\n }\n\n const isInitialized = Vue.ref(false);\n const initError = Vue.ref(null as Error | null);\n const isLoading = Vue.ref(true);\n\n Vue.onMounted(async () => {\n try {\n await initializeSSHClient(options);\n isInitialized.value = true;\n initError.value = null;\n } catch (error) {\n initError.value = error as Error;\n isInitialized.value = false;\n } finally {\n isLoading.value = false;\n }\n });\n\n return { \n isInitialized: Vue.readonly(isInitialized), \n initError: Vue.readonly(initError), \n isLoading: Vue.readonly(isLoading) \n };\n}\n\n// Import React for the hook (conditional to avoid issues in non-React environments)\nlet React: any;\ntry {\n React = require('react');\n} catch {\n // React not available, hook will not work but won't break the module\n}\n\nexport default {\n initializeSSHClient,\n ViteConfig,\n useSSHClient,\n useSSHClientVue,\n SSHClient\n};"],"names":["initializeSSHClient","options","isDev","_c","_b","_a","viteDefaults","SSHClient","ViteConfig","assetInfo","customConfig","serverConfig","buildConfig","optimizeDepsConfig","useSSHClient","React","isInitialized","setIsInitialized","initError","setInitError","isLoading","setIsLoading","mounted","error","useSSHClientVue","Vue","vite"],"mappings":"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"}
|
package/dist/vite.d.ts
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { SSHClient, InitializationOptions } from './index';
|
|
2
|
+
|
|
3
|
+
export * from './index';
|
|
4
|
+
/**
|
|
5
|
+
* Initialize SSH client with Vite optimized defaults
|
|
6
|
+
*/
|
|
7
|
+
export declare function initializeSSHClient(options?: Partial<InitializationOptions>): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Vite configuration helpers
|
|
10
|
+
*/
|
|
11
|
+
export declare const ViteConfig: {
|
|
12
|
+
/**
|
|
13
|
+
* Get recommended Vite server configuration for WASM support
|
|
14
|
+
*/
|
|
15
|
+
getServerConfig(): {
|
|
16
|
+
headers: {
|
|
17
|
+
'Cross-Origin-Embedder-Policy': string;
|
|
18
|
+
'Cross-Origin-Opener-Policy': string;
|
|
19
|
+
};
|
|
20
|
+
middlewares: never[];
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Get recommended Vite build configuration for WASM support
|
|
24
|
+
*/
|
|
25
|
+
getBuildConfig(): {
|
|
26
|
+
target: string;
|
|
27
|
+
rollupOptions: {
|
|
28
|
+
output: {
|
|
29
|
+
assetFileNames: (assetInfo: any) => "[name][extname]" | "[name].[hash][extname]";
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Get recommended Vite optimizeDeps configuration
|
|
35
|
+
*/
|
|
36
|
+
getOptimizeDepsConfig(): {
|
|
37
|
+
exclude: string[];
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Complete Vite configuration object
|
|
41
|
+
*/
|
|
42
|
+
getViteConfig(customConfig?: any): any;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* React hook for SSH client initialization in Vite
|
|
46
|
+
*/
|
|
47
|
+
export declare function useSSHClient(options?: Partial<InitializationOptions>): {
|
|
48
|
+
isInitialized: any;
|
|
49
|
+
initError: any;
|
|
50
|
+
isLoading: any;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Vue composition API composable for SSH client initialization
|
|
54
|
+
*/
|
|
55
|
+
export declare function useSSHClientVue(options?: Partial<InitializationOptions>): {
|
|
56
|
+
isInitialized: any;
|
|
57
|
+
initError: any;
|
|
58
|
+
isLoading: any;
|
|
59
|
+
};
|
|
60
|
+
declare const _default: {
|
|
61
|
+
initializeSSHClient: typeof initializeSSHClient;
|
|
62
|
+
ViteConfig: {
|
|
63
|
+
/**
|
|
64
|
+
* Get recommended Vite server configuration for WASM support
|
|
65
|
+
*/
|
|
66
|
+
getServerConfig(): {
|
|
67
|
+
headers: {
|
|
68
|
+
'Cross-Origin-Embedder-Policy': string;
|
|
69
|
+
'Cross-Origin-Opener-Policy': string;
|
|
70
|
+
};
|
|
71
|
+
middlewares: never[];
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Get recommended Vite build configuration for WASM support
|
|
75
|
+
*/
|
|
76
|
+
getBuildConfig(): {
|
|
77
|
+
target: string;
|
|
78
|
+
rollupOptions: {
|
|
79
|
+
output: {
|
|
80
|
+
assetFileNames: (assetInfo: any) => "[name][extname]" | "[name].[hash][extname]";
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Get recommended Vite optimizeDeps configuration
|
|
86
|
+
*/
|
|
87
|
+
getOptimizeDepsConfig(): {
|
|
88
|
+
exclude: string[];
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Complete Vite configuration object
|
|
92
|
+
*/
|
|
93
|
+
getViteConfig(customConfig?: any): any;
|
|
94
|
+
};
|
|
95
|
+
useSSHClient: typeof useSSHClient;
|
|
96
|
+
useSSHClientVue: typeof useSSHClientVue;
|
|
97
|
+
SSHClient: typeof SSHClient;
|
|
98
|
+
};
|
|
99
|
+
export default _default;
|
|
100
|
+
//# sourceMappingURL=vite.d.ts.map
|