mirror of
https://github.com/EthanShoeDev/fressh.git
synced 2026-01-10 22:02:50 +00:00
small tweaks
This commit is contained in:
@@ -50,7 +50,7 @@
|
||||
"expo-font": "~14.0.8",
|
||||
"expo-glass-effect": "^0.1.4",
|
||||
"expo-haptics": "~15.0.7",
|
||||
"expo-image": "~3.0.8",
|
||||
"expo-image": "~3.0.9",
|
||||
"expo-linking": "~8.0.8",
|
||||
"expo-router": "6.0.10",
|
||||
"expo-secure-store": "~15.0.7",
|
||||
|
||||
@@ -16,11 +16,42 @@ Peer dependencies (you manage): `react`, `react-native`.
|
||||
### Usage
|
||||
|
||||
This package exposes a native Rust module for SSH transport. For a complete,
|
||||
working integration, see the example app in this monorepo at `apps/mobile`.
|
||||
working integration, see the example app:
|
||||
|
||||
- https://github.com/EthanShoeDev/fressh/tree/main/apps/mobile
|
||||
|
||||
### API overview
|
||||
|
||||
High-level API surface (see code for full types):
|
||||
|
||||
```ts
|
||||
import { RnRussh } from '@fressh/react-native-uniffi-russh';
|
||||
|
||||
await RnRussh.uniffiInitAsync();
|
||||
|
||||
const conn = await RnRussh.connect({
|
||||
host: 'example.com',
|
||||
port: 22,
|
||||
username: 'me',
|
||||
security: { type: 'password', password: '...' },
|
||||
onServerKey: async () => true,
|
||||
});
|
||||
|
||||
const shell = await conn.startShell({ term: 'Xterm' });
|
||||
shell.addListener(
|
||||
(ev) => {
|
||||
// handle TerminalChunk or DropNotice
|
||||
},
|
||||
{ cursor: { mode: 'live' } },
|
||||
);
|
||||
```
|
||||
|
||||
### Links
|
||||
|
||||
- Changelog: [`CHANGELOG.md`](./CHANGELOG.md)
|
||||
- Contributing: see the monorepo guide at
|
||||
[`../../CONTRIBUTING.md`](../../CONTRIBUTING.md)
|
||||
- Changelog:
|
||||
[`CHANGELOG.md`](https://github.com/EthanShoeDev/fressh/blob/main/packages/react-native-uniffi-russh/CHANGELOG.md)
|
||||
- Contributing:
|
||||
[`CONTRIBUTING.md`](https://github.com/EthanShoeDev/fressh/blob/main/CONTRIBUTING.md)
|
||||
- API source:
|
||||
[`src/api.ts`](https://github.com/EthanShoeDev/fressh/blob/main/packages/react-native-uniffi-russh/src/api.ts)
|
||||
- License: MIT
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@fressh/react-native-uniffi-russh",
|
||||
"homepage": "https://github.com/EthanShoeDev/fressh",
|
||||
"homepage": "https://github.com/EthanShoeDev/fressh#readme",
|
||||
"license": "MIT",
|
||||
"description": "Uniffi bindings for russh",
|
||||
"version": "0.0.1",
|
||||
@@ -52,15 +52,23 @@
|
||||
"release": "GITHUB_TOKEN=$(gh auth token) release-it",
|
||||
"release:dry": "release-it --dry-run"
|
||||
},
|
||||
"keywords": [
|
||||
"react-native",
|
||||
"ios",
|
||||
"android"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/EthanShoeDev/fressh.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/EthanShoeDev/fressh/issues"
|
||||
},
|
||||
"keywords": [
|
||||
"react-native",
|
||||
"ssh",
|
||||
"russh",
|
||||
"uniffi",
|
||||
"rust",
|
||||
"expo",
|
||||
"android",
|
||||
"ios"
|
||||
],
|
||||
"author": "EthanShoeDev <13422990+EthanShoeDev@users.noreply.github.com> (https://github.com/EthanShoeDev)",
|
||||
"publishConfig": {
|
||||
"registry": "https://registry.npmjs.org/"
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"dependsOn": ["build:bob"],
|
||||
},
|
||||
"typecheck": {
|
||||
"dependsOn": ["build:native"],
|
||||
"dependsOn": ["build:native", "build:bob"],
|
||||
},
|
||||
|
||||
// Special tasks
|
||||
|
||||
@@ -11,28 +11,33 @@ defaults and a bridge for input and output.
|
||||
pnpm add @fressh/react-native-xtermjs-webview react-native-webview
|
||||
```
|
||||
|
||||
Peer dependencies: `react`, `react-dom` (for web), `react-native-webview`.
|
||||
Peer dependencies: `react`, `react-native-webview`.
|
||||
|
||||
### Usage
|
||||
|
||||
See `apps/mobile` in this monorepo for a complete example. Basic usage:
|
||||
For a complete production example, see the mobile app:
|
||||
https://github.com/EthanShoeDev/fressh/tree/main/apps/mobile
|
||||
|
||||
Basic usage:
|
||||
|
||||
```tsx
|
||||
import React, { useRef } from 'react';
|
||||
import {
|
||||
XtermJsWebView,
|
||||
type XtermWebViewHandle,
|
||||
} from '@fressh/react-native-xtermjs-webview';
|
||||
import type { XtermWebViewHandle } from '@fressh/react-native-xtermjs-webview';
|
||||
import { XtermJsWebView } from '@fressh/react-native-xtermjs-webview';
|
||||
|
||||
export function Terminal() {
|
||||
const termRef = useRef<XtermWebViewHandle | null>(null);
|
||||
|
||||
return (
|
||||
<XtermJsWebView
|
||||
ref={termRef}
|
||||
onInitialized={() =>
|
||||
termRef.current?.write(new TextEncoder().encode('hello'))
|
||||
}
|
||||
onData={(input) => console.log('user input:', input)}
|
||||
onInitialized={() => {
|
||||
const hello = new TextEncoder().encode('hello');
|
||||
termRef.current?.write(hello);
|
||||
}}
|
||||
onData={(input) => {
|
||||
console.log('user input:', input);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -60,8 +65,14 @@ transparency and debugging.
|
||||
|
||||
### Links
|
||||
|
||||
- Changelog: [`CHANGELOG.md`](./CHANGELOG.md)
|
||||
- Contributing: see the monorepo guide at
|
||||
[`../../CONTRIBUTING.md`](../../CONTRIBUTING.md)
|
||||
- Example: `apps/mobile`
|
||||
- Changelog:
|
||||
[`CHANGELOG.md`](https://github.com/EthanShoeDev/fressh/blob/main/packages/react-native-xtermjs-webview/CHANGELOG.md)
|
||||
- Contributing:
|
||||
[`CONTRIBUTING.md`](https://github.com/EthanShoeDev/fressh/blob/main/CONTRIBUTING.md)
|
||||
- Example app:
|
||||
[`apps/mobile`](https://github.com/EthanShoeDev/fressh/tree/main/apps/mobile)
|
||||
and source usage:
|
||||
[`apps/mobile/src/app/(tabs)/shell/detail.tsx`](<https://github.com/EthanShoeDev/fressh/blob/main/apps/mobile/src/app/(tabs)/shell/detail.tsx>)
|
||||
- API source:
|
||||
[`src/index.tsx`](https://github.com/EthanShoeDev/fressh/blob/main/packages/react-native-xtermjs-webview/src/index.tsx)
|
||||
- License: MIT
|
||||
|
||||
@@ -15,6 +15,24 @@
|
||||
"exports": {
|
||||
".": "./dist/index.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/EthanShoeDev/fressh.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/EthanShoeDev/fressh/issues"
|
||||
},
|
||||
"homepage": "https://github.com/EthanShoeDev/fressh#readme",
|
||||
"keywords": [
|
||||
"react-native",
|
||||
"xterm",
|
||||
"webview",
|
||||
"terminal",
|
||||
"ssh",
|
||||
"expo",
|
||||
"android",
|
||||
"ios"
|
||||
],
|
||||
"scripts": {
|
||||
"fmt": "cross-env SORT_IMPORTS=true prettier --write .",
|
||||
"fmt:check": "cross-env SORT_IMPORTS=true prettier --check .",
|
||||
@@ -33,7 +51,6 @@
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-native-webview": "13.15.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
@@ -113,8 +113,8 @@ importers:
|
||||
specifier: ~15.0.7
|
||||
version: 15.0.7(expo@54.0.12)
|
||||
expo-image:
|
||||
specifier: ~3.0.8
|
||||
version: 3.0.8(expo@54.0.12)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)
|
||||
specifier: ~3.0.9
|
||||
version: 3.0.9(expo@54.0.12)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)
|
||||
expo-linking:
|
||||
specifier: ~8.0.8
|
||||
version: 8.0.8(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)
|
||||
@@ -5336,8 +5336,8 @@ packages:
|
||||
peerDependencies:
|
||||
expo: '*'
|
||||
|
||||
expo-image@3.0.8:
|
||||
resolution: {integrity: sha512-L83fTHVjvE5hACxUXPk3dpABteI/IypeqxKMeOAAcT2eB/jbqT53ddsYKEvKAP86eoByQ7+TCtw9AOUizEtaTQ==}
|
||||
expo-image@3.0.9:
|
||||
resolution: {integrity: sha512-GkPIjeqrODMBdpbRWOzbwiq8ztxjgq1rdZrnqwt/pzQavgXPlr4rW/7aigue9Jm5t5vebhMNAuc1A/XIXXqpcA==}
|
||||
peerDependencies:
|
||||
expo: '*'
|
||||
react: '*'
|
||||
@@ -15754,7 +15754,7 @@ snapshots:
|
||||
dependencies:
|
||||
expo: 54.0.12(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.10)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)
|
||||
|
||||
expo-image@3.0.8(expo@54.0.12)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0):
|
||||
expo-image@3.0.9(expo@54.0.12)(react-native-web@0.21.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0):
|
||||
dependencies:
|
||||
expo: 54.0.12(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.10)(react-native-webview@13.15.0(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)
|
||||
react: 19.1.0
|
||||
|
||||
Reference in New Issue
Block a user