commit 6f1d6ec37b95364dfc55a15303ede0e297d0f7e2 Author: Chris Daßler Date: Fri Aug 29 11:18:37 2025 +0200 Initial commit: libp2p-native-bridge package - Extracted libp2p component from main app - Created modular package structure with interfaces and implementations - Added dependency injection for NativeModules - Configured for IOR loading from Gitea - Added comprehensive README and documentation diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53e7358 --- /dev/null +++ b/.gitignore @@ -0,0 +1,237 @@ +# Created by https://www.toptal.com/developers/gitignore/api/macos,windows,linux,visualstudiocode,node +# Edit at https://www.toptal.com/developers/gitignore?templates=macos,windows,linux,visualstudiocode,node + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/macos,windows,linux,visualstudiocode,node \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..7052196 --- /dev/null +++ b/README.md @@ -0,0 +1,233 @@ +# libp2p-native-bridge + +Native libp2p bridge for React Native applications, providing a unified interface for iOS and Android libp2p implementations. + +## Installation + +### Via IOR (Interoperable Object Reference) + +```typescript +import { Libp2pComponent } from 'ior:gitea:gitea.metatrom.net:universal-components/libp2p-native-bridge@1.0.0'; +``` + +### Via npm/yarn (if published) + +```bash +npm install @metatrom/libp2p-native-bridge +# or +yarn add @metatrom/libp2p-native-bridge +``` + +## Features + +- 🌐 Unified libp2p interface for React Native +- πŸ“± iOS and Android native module support +- πŸ”§ Configurable settings management +- πŸŽ›οΈ Settings UI component +- πŸ”Œ Protocol handler support +- πŸ” Peer discovery and connection management +- πŸš€ TypeScript support with full type definitions + +## Usage + +### Basic Setup + +```typescript +import { Libp2pComponent } from '@metatrom/libp2p-native-bridge'; + +// Create libp2p instance +const libp2p = new Libp2pComponent({ + config: { + tcpPort: 10000, + wsPort: 10005, + }, + protocols: [ + { + protocolId: '/my-protocol/1.0.0', + handler: async ({ peerId, data }) => { + console.log(`Received data from ${peerId}:`, data); + }, + }, + ], +}); + +// Start the node +await libp2p.start(); + +// Listen for peer discovery +libp2p.addEventListener('peer:discovery', (evt) => { + console.log('Discovered peer:', evt.detail.id.toString()); +}); + +// Connect to a peer +await libp2p.dial('/ip4/192.168.1.2/tcp/10000/p2p/12D3KooW...'); +``` + +### Using with React Hook + +```typescript +import { useLibp2p } from './hooks/useLibp2p'; +import { Libp2pComponent } from '@metatrom/libp2p-native-bridge'; + +function MyComponent() { + const { isStarted, peerId, discoveredPeers, start, stop } = useLibp2p({ + config: { + tcpPort: 10000, + wsPort: 10005, + }, + }); + + return ( + + Status: {isStarted ? 'Started' : 'Stopped'} + Peer ID: {peerId?.toString()} +