{"_id":"@dedanzi/midnight-mobile-sdk","_rev":"2-d292b177ebc5460186e96ecc50c9afb5","name":"@dedanzi/midnight-mobile-sdk","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@dedanzi/midnight-mobile-sdk","version":"0.1.0","keywords":["midnight","blockchain","zero-knowledge","react-native","wallet","mobile"],"author":{"name":"dedanzi"},"license":"MIT","_id":"@dedanzi/midnight-mobile-sdk@0.1.0","maintainers":[{"name":"dedanzi","email":"mzidanfatonie@gmail.com"}],"homepage":"https://github.com/dedanzi/midnight-mobile-sdk#readme","bugs":{"url":"https://github.com/dedanzi/midnight-mobile-sdk/issues"},"dist":{"shasum":"4514bcc1bba8644cfca2bdb4cd2626b8e416da4b","tarball":"https://registry.npmjs.org/@dedanzi/midnight-mobile-sdk/-/midnight-mobile-sdk-0.1.0.tgz","fileCount":31,"integrity":"sha512-aMv8RWaD4fz469F3HnC3yT1hOH2wuo/uD74vm3SzOqIJOTk11x3yPBM7tfQU8rUVzKCIOdc8IH6D/+pAfreK1g==","signatures":[{"sig":"MEYCIQDoJOSuv4V48hry5UFYx0trftYBDW5+1YOmIdqSq75rwAIhAIEGiQAZkY/hCfnLo0RQGe/vKPT9knTtlVJ9rZyRWQzY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245334},"main":"src/index.ts","types":"src/types/index.ts","gitHead":"5e8868eaf88a4b45d859a0acddb8e2e3e2b5e3af","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","typecheck":"tsc --noEmit"},"_npmUser":{"name":"dedanzi","email":"mzidanfatonie@gmail.com"},"repository":{"url":"git+https://github.com/dedanzi/midnight-mobile-sdk.git","type":"git"},"_npmVersion":"10.9.4","description":"React Native SDK for Midnight Network - Mobile wallet, contracts, and DApp connectivity","directories":{},"_nodeVersion":"22.22.0","dependencies":{"uuid":"^11.0.3","bip39":"^3.1.0","hdkey":"^2.1.0","graphql":"^16.9.0","graphql-ws":"^5.16.2","eventemitter3":"^5.0.1","@apollo/client":"^3.11.8"},"react-native":"src/index.ts","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.3","@types/jest":"^29.5.14","@types/uuid":"^10.0.0","@types/bip39":"^3.0.0","@types/hdkey":"^2.0.2","@types/react":"^18.3.12"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0","expo-secure-store":">=12.0.0","@midnight-ntwrk/zkp":">=2.0.0","@midnight-ntwrk/ledger-v7":">=2.0.0","expo-local-authentication":">=13.0.0","react-native-quick-sqlite":">=5.0.0","@midnight-ntwrk/wallet-sdk-hd":">=2.0.0","@midnight-ntwrk/wallet-sdk-facade":">=2.0.0","@midnight-ntwrk/midnight-js-contracts":">=1.0.0","@midnight-ntwrk/midnight-js-network-id":">=1.0.0","@midnight-ntwrk/wallet-sdk-dust-wallet":">=2.0.0","@midnight-ntwrk/node-zk-config-provider":">=2.0.0","@midnight-ntwrk/http-client-proof-provider":">=1.0.0","@midnight-ntwrk/indexer-public-data-provider":">=1.0.0"},"peerDependenciesMeta":{"@midnight-ntwrk/zkp":{"optional":true},"@midnight-ntwrk/ledger-v7":{"optional":true},"@midnight-ntwrk/wallet-sdk-hd":{"optional":true},"@midnight-ntwrk/wallet-sdk-facade":{"optional":true},"@midnight-ntwrk/midnight-js-contracts":{"optional":true},"@midnight-ntwrk/midnight-js-network-id":{"optional":true},"@midnight-ntwrk/wallet-sdk-dust-wallet":{"optional":true},"@midnight-ntwrk/node-zk-config-provider":{"optional":true},"@midnight-ntwrk/http-client-proof-provider":{"optional":true},"@midnight-ntwrk/indexer-public-data-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/midnight-mobile-sdk_0.1.0_1774847192114_0.4345395447120093","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dedanzi/midnight-mobile-sdk","version":"0.1.1","description":"React Native SDK for Midnight Network - Mobile wallet, contracts, and DApp connectivity","main":"src/index.ts","types":"src/types/index.ts","react-native":"src/index.ts","scripts":{"test":"jest","typecheck":"tsc --noEmit","lint":"eslint \"**/*.{js,ts,tsx}\""},"keywords":["midnight","blockchain","zero-knowledge","react-native","wallet","mobile"],"repository":{"type":"git","url":"git+https://github.com/mzf11125/midnight-mobile-sdk.git"},"author":{"name":"dedanzi"},"license":"MIT","bugs":{"url":"https://github.com/mzf11125/midnight-mobile-sdk/issues"},"homepage":"https://github.com/mzf11125/midnight-mobile-sdk#readme","publishConfig":{"access":"public"},"dependencies":{"@apollo/client":"^3.11.8","graphql":"^16.9.0","graphql-ws":"^5.16.2","bip39":"^3.1.0","hdkey":"^2.1.0","eventemitter3":"^5.0.1","uuid":"^11.0.3"},"peerDependencies":{"@midnight-ntwrk/wallet-sdk-hd":">=2.0.0","@midnight-ntwrk/wallet-sdk-facade":">=2.0.0","@midnight-ntwrk/wallet-sdk-dust-wallet":">=2.0.0","@midnight-ntwrk/midnight-js-contracts":">=1.0.0","@midnight-ntwrk/http-client-proof-provider":">=1.0.0","@midnight-ntwrk/indexer-public-data-provider":">=1.0.0","@midnight-ntwrk/node-zk-config-provider":">=2.0.0","@midnight-ntwrk/midnight-js-network-id":">=1.0.0","@midnight-ntwrk/ledger-v7":">=2.0.0","@midnight-ntwrk/zkp":">=2.0.0","expo-local-authentication":">=13.0.0","expo-secure-store":">=12.0.0","react":">=18.0.0","react-native":">=0.70.0","react-native-quick-sqlite":">=5.0.0"},"peerDependenciesMeta":{"@midnight-ntwrk/wallet-sdk-hd":{"optional":true},"@midnight-ntwrk/wallet-sdk-facade":{"optional":true},"@midnight-ntwrk/wallet-sdk-dust-wallet":{"optional":true},"@midnight-ntwrk/midnight-js-contracts":{"optional":true},"@midnight-ntwrk/http-client-proof-provider":{"optional":true},"@midnight-ntwrk/indexer-public-data-provider":{"optional":true},"@midnight-ntwrk/node-zk-config-provider":{"optional":true},"@midnight-ntwrk/midnight-js-network-id":{"optional":true},"@midnight-ntwrk/ledger-v7":{"optional":true},"@midnight-ntwrk/zkp":{"optional":true}},"devDependencies":{"@types/bip39":"^3.0.0","@types/hdkey":"^2.0.2","@types/jest":"^29.5.14","@types/react":"^18.3.12","@types/uuid":"^10.0.0","typescript":"^5.6.3"},"_id":"@dedanzi/midnight-mobile-sdk@0.1.1","gitHead":"0c0e0dce308f01cc9bf0cbe205623188d37ce257","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-mv6ma4fsDMWv/aw5KbGx4QNoCt5N9MNi5GYB/W220/6O9RIZ7b1BuMO53B0Xm5HuYAdQ3NEoNd6gEjRS8HidFA==","shasum":"ed8c44cb0e904e95f56166e76f9711402873a58c","tarball":"https://registry.npmjs.org/@dedanzi/midnight-mobile-sdk/-/midnight-mobile-sdk-0.1.1.tgz","fileCount":31,"unpackedSize":245341,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDblUTjfsGWbT67n9P1DBqB4qsOiTUaYo54BOdDMLe2kgIhAJbIV3PBQukUUiRdf1P+wOMG6nIkHONtV/WPH2G1GwQ8"}]},"_npmUser":{"name":"dedanzi","email":"mzidanfatonie@gmail.com"},"directories":{},"maintainers":[{"name":"dedanzi","email":"mzidanfatonie@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/midnight-mobile-sdk_0.1.1_1774847418695_0.08675728914107417"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-30T05:06:31.982Z","modified":"2026-03-30T05:10:19.012Z","0.1.0":"2026-03-30T05:06:32.248Z","0.1.1":"2026-03-30T05:10:18.864Z"},"bugs":{"url":"https://github.com/mzf11125/midnight-mobile-sdk/issues"},"author":{"name":"dedanzi"},"license":"MIT","homepage":"https://github.com/mzf11125/midnight-mobile-sdk#readme","keywords":["midnight","blockchain","zero-knowledge","react-native","wallet","mobile"],"repository":{"type":"git","url":"git+https://github.com/mzf11125/midnight-mobile-sdk.git"},"description":"React Native SDK for Midnight Network - Mobile wallet, contracts, and DApp connectivity","maintainers":[{"name":"dedanzi","email":"mzidanfatonie@gmail.com"}],"readme":"# @dedanzi/midnight-mobile-sdk\n\n> React Native SDK for Midnight Network - Mobile wallet, zero-knowledge contracts, and DApp connectivity.\n\n[![npm version](https://badge.fury.io/js/%40dedanzi%2Fmidnight-mobile-sdk.svg)](https://www.npmjs.com/package/@dedanzi/midnight-mobile-sdk)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## Overview\n\n`@dedanzi/midnight-mobile-sdk` is a comprehensive React Native library for building mobile applications on the Midnight Network. It wraps the existing `@midnight-ntwrk` packages while providing mobile-specific adapters:\n\n- **Storage:** LevelDB → SQLite adapter for mobile persistence\n- **Security:** iOS Keychain + Android Keystore for secure wallet key storage\n- **Authentication:** Biometric authentication gate (FaceID/TouchID/Fingerprint) before all signing operations\n- **Connectivity:** Deep Links / Universal Links replacing browser-based `window.midnight`\n- **UX Features:** QR code scanner, offline transaction queue, real-time subscriptions\n\n## Features\n\n| Feature | iOS | Android | Description |\n|---------|-----|---------|-------------|\n| HD Wallet (BIP-32/44) | ✅ | ✅ | Hierarchical deterministic wallet generation |\n| Biometric Auth | ✅ | ✅ | FaceID, TouchID, Fingerprint support |\n| Secure Storage | ✅ | ✅ | Keychain / EncryptedSharedPreferences |\n| Contract Deploy | ✅ | ✅ | With ZK proof delegation |\n| Contract Calls | ✅ | ✅ | With ZK proof delegation |\n| Indexer Queries | ✅ | ✅ | GraphQL + WebSocket subscriptions |\n| Deep Links | ✅ | ✅ | `midnight://` protocol |\n| QR Scanner | ✅ | ✅ | Payment requests, DApp connections |\n| Offline Queue | ✅ | ✅ | Transaction caching for retry |\n\n## Installation\n\n```bash\nnpm install @dedanzi/midnight-mobile-sdk\n# or\nyarn add @dedanzi/midnight-mobile-sdk\n```\n\n### Peer Dependencies\n\nInstall the required peer dependencies:\n\n```bash\nnpm install expo-local-authentication expo-secure-store react-native-quick-sqlite\n# or\nyarn add expo-local-authentication expo-secure-store react-native-quick-sqlite\n```\n\n## Quick Start\n\n```typescript\nimport { initMidnightSDK } from '@dedanzi/midnight-mobile-sdk';\n\n// Initialize the SDK for testnet\nconst sdk = await initMidnightSDK('testnet');\n\n// Create a new wallet (prompts for biometric)\nconst walletInfo = await sdk.createWallet();\nconsole.log('Wallet address:', walletInfo.address);\n\n// Get wallet balance\nconst balance = await sdk.getBalance();\nconsole.log('Available balance:', balance.available.toString());\n\n// Subscribe to new transactions\nconst unsubscribe = sdk.subscribeToTransactions((tx) => {\n  console.log('New transaction:', tx.hash, 'Amount:', tx.amount);\n});\n```\n\n## Wallet Management\n\n### Create a New Wallet\n\n```typescript\nimport { createMidnightClient } from '@dedanzi/midnight-mobile-sdk';\n\nconst sdk = await createMidnightClient({\n  network: 'testnet',\n  requireBiometrics: true,\n  autoLockTimeout: 300000, // 5 minutes\n});\n\n// Create wallet with BIP-39 mnemonic\nconst wallet = await sdk.createWallet();\n// { address: 'tmid1...', publicKey: '...', network: 'testnet' }\n```\n\n### Import Existing Wallet\n\n```typescript\n// Import from 12 or 24 word mnemonic\nconst wallet = await sdk.importWallet(\n  'abandon ability able about above absent absorb abstract absurd abuse access accident account accuse achieve acid'\n);\n```\n\n### Sign Transactions (with Biometric Gate)\n\n```typescript\n// Automatically prompts for biometric authentication\nconst signature = await (await sdk.getWallet())?.signTransaction(transactionData);\n\n// Sign a message\nconst messageSig = await (await sdk.getWallet())?.signMessage(\n  new TextEncoder().encode('Hello Midnight!')\n);\n```\n\n### Wallet Lock/Unlock\n\n```typescript\n// Lock wallet (requires re-authentication)\nawait sdk.lockWallet();\n\n// Unlock with biometric\nconst unlocked = await sdk.unlockWallet(true);\n```\n\n## Contract Interaction\n\n### Deploy a Contract\n\n```typescript\nconst result = await sdk.deployContract({\n  source: compactContractSource,\n  args: encodedConstructorArgs,\n  maxFee: 5000000n,\n});\n\nconsole.log('Contract deployed:', result.address);\n```\n\n### Call a Contract Method\n\n```typescript\nconst result = await sdk.callContract({\n  address: 'tmid1...',\n  method: 'transfer',\n  args: encodedArgs,\n  value: 1000000n,\n});\n\nconsole.log('Transaction hash:', result.txHash);\n```\n\n### Query Contract (Read-Only)\n\n```typescript\nconst result = await sdk.queryContract(\n  contractAddress,\n  'getBalance',\n  queryArgs\n);\n```\n\n## Indexer & Subscriptions\n\n### Query Transactions\n\n```typescript\nimport { createIndexerClient } from '@dedanzi/midnight-mobile-sdk';\n\nconst indexer = await createIndexerClient({\n  indexerUrl: 'https://indexer.testnet.midnight.network/api/v1/graphql',\n  indexerWsUrl: 'wss://indexer.testnet.midnight.network/api/v1/graphql',\n});\n\n// Get transaction history\nconst transactions = await indexer.getTransactions(walletAddress, {\n  limit: 50,\n  type: 'transfer',\n});\n```\n\n### Subscribe to Events\n\n```typescript\n// Subscribe to new transactions\nconst unsubscribe = indexer.subscribe(\n  { address: walletAddress },\n  (event) => {\n    if (event.type === 'new_tx') {\n      const tx = event.data[0];\n      console.log('Received:', tx.amount);\n    }\n  }\n);\n\n// Later: unsubscribe();\n```\n\n### Custom GraphQL Queries\n\n```typescript\nconst result = await indexer.query(`\n  query GetContractState($address: String!) {\n    contract(address: $address) {\n      state\n      transactionCount\n    }\n  }\n`, { address: contractAddress });\n```\n\n## DApp Connectivity\n\n### Handle Deep Links\n\n```typescript\nimport { createDeepLinkManager } from '@dedanzi/midnight-mobile-sdk';\n\nconst deepLinkManager = createDeepLinkManager();\n\n// Process incoming deep link\nawait deepLinkManager.processDeepLink('midnight://payment?address=...&amount=...');\n\n// Listen for deep link events\ndeepLinkManager.on('payment_request', (event) => {\n  console.log('Payment requested:', event.data);\n});\n```\n\n### QR Code Scanning\n\n```typescript\nimport { QRScanner, scanQRCode } from '@dedanzi/midnight-mobile-sdk';\n\n// Quick scan\nconst result = await scanQRCode();\nconsole.log('Scanned:', result.data);\n\n// Or use the scanner directly\nconst scanner = new QRScanner({ useFrontCamera: false });\nawait scanner.startScanning((result) => {\n  const parsed = QRScanner.parseMidnightQR(result.data);\n  if (parsed?.type === 'payment_request') {\n    console.log('Payment:', parsed.data);\n  }\n});\n```\n\n### Generate Payment QR Codes\n\n```typescript\n// Generate a payment request QR\nconst qrUrl = QRScanner.generatePaymentQR(\n  'tmid1...',  // address\n  1000000n,    // amount (in dust)\n  'testnet'\n);\n```\n\n## Network Configuration\n\n### Supported Networks\n\n```typescript\nimport { setNetwork, NetworkConfig } from '@dedanzi/midnight-mobile-sdk';\n\n// Switch to mainnet\nawait sdk.setNetwork('mainnet');\n\n// Or use NetworkConfig directly\nNetworkConfig.getInstance().setCurrentNetwork('preprod');\n```\n\n### Custom Endpoints\n\n```typescript\nconst sdk = await createMidnightClient({\n  network: 'testnet',\n  customEndpoints: {\n    indexerUrl: 'https://custom-indexer.example.com/graphql',\n    proofProviderUrl: 'https://custom-proof.example.com',\n  },\n});\n```\n\n## Storage & Offline Support\n\n### Transaction Cache\n\nThe SDK automatically caches failed transactions for retry:\n\n```typescript\nimport { createTransactionCache } from '@dedanzi/midnight-mobile-sdk';\n\nconst cache = await createTransactionCache(storage);\n\n// Get pending transactions\nconst pending = await cache.getPending('testnet');\n\n// Retry with custom sender\nawait cache.retryPending('testnet', async (cachedTx) => {\n  return await submitToNetwork(cachedTx.transaction);\n});\n```\n\n### SQLite Storage\n\n```typescript\nimport { createSQLiteStorage } from '@dedanzi/midnight-mobile-sdk';\n\nconst storage = await createSQLiteStorage('my_app_db');\n\n// LevelDB-compatible API\nawait storage.put('key', new Uint8Array([1, 2, 3]));\nconst value = await storage.get('key');\n```\n\n## Error Handling\n\n```typescript\nimport {\n  MidnightError,\n  MidnightErrorCode,\n  getUserMessage,\n  isRetryable,\n} from '@dedanzi/midnight-mobile-sdk';\n\ntry {\n  await sdk.deployContract(options);\n} catch (error) {\n  if (error instanceof MidnightError) {\n    console.error('Error code:', error.code);\n    console.error('User message:', getUserMessage(error));\n\n    if (isRetryable(error)) {\n      // Retry the operation\n    }\n  }\n}\n```\n\n### Error Codes\n\n| Code | Description |\n|------|-------------|\n| `WALLET_NOT_FOUND` | No wallet exists. Create or import one first. |\n| `WALLET_LOCKED` | Wallet is locked. Authenticate to continue. |\n| `WALLET_ALREADY_EXISTS` | A wallet already exists. Wipe it first. |\n| `INVALID_MNEMONIC` | Invalid recovery phrase. Check and try again. |\n| `KEY_DERIVATION_FAILED` | Failed to derive wallet keys. |\n| `BIOMETRIC_NOT_AVAILABLE` | Biometric auth not available on this device. |\n| `BIOMETRIC_FAILED` | Biometric authentication failed. |\n| `BIOMETRIC_DISMISSED` | User cancelled biometric prompt. |\n| `INSUFFICIENT_BALANCE` | Not enough funds for this transaction. |\n| `TRANSACTION_FAILED` | Transaction execution failed. |\n| `TRANSACTION_TIMEOUT` | Transaction timed out. Check status later. |\n| `CONTRACT_DEPLOY_FAILED` | Contract deployment failed. |\n| `CONTRACT_CALL_FAILED` | Contract call failed. |\n| `PROOF_GENERATION_FAILED` | ZK proof generation failed. |\n| `INVALID_CONTRACT_SOURCE` | Invalid contract source code. |\n\n## Platform Setup\n\n### iOS\n\n1. **Add to Podfile:**\n```ruby\npod 'MidnightMobileSDK', :path => '../node_modules/@dedanzi/midnight-mobile-sdk/ios'\n```\n\n2. **Install pods:**\n```bash\ncd ios && pod install && cd ..\n```\n\n3. **Configure Universal Links (optional):**\n   - Open Xcode → Your App Target → Signing & Capabilities\n   - Add \"Associated Domains\"\n   - Add `applinks:your-domain.com` for verified links\n\n4. **Info.plist entries are auto-configured by the SDK**\n\n### Android\n\n1. **Add to `android/settings.gradle`:**\n```gradle\ninclude ':@dedanzi_midnight-mobile-sdk'\nproject(':@dedanzi_midnight-mobile-sdk').projectDir = new File(rootProject.projectDir, '../node_modules/@dedanzi/midnight-mobile-sdk/android')\n```\n\n2. **Add to `android/app/build.gradle`:**\n```gradle\ndependencies {\n    implementation project(':@dedanzi_midnight-mobile-sdk')\n}\n```\n\n3. **ProGuard (if enabled):**\n```proguard\n-keep class com.dedanzi.midnightmobilesdk.** { *; }\n```\n\n4. **Deep linking is auto-configured via AndroidManifest.xml**\n\n## API Reference\n\n### MidnightClient\n\nThe main SDK client.\n\n```typescript\nclass MidnightClient extends EventEmitter {\n  // Initialization\n  async initialize(): Promise<void>\n\n  // Wallet\n  async createWallet(): Promise<WalletInfo>\n  async importWallet(mnemonic: string): Promise<WalletInfo>\n  async hasWallet(): Promise<boolean>\n  async getWalletInfo(): Promise<WalletInfo>\n  async getBalance(): Promise<WalletBalance>\n  async lockWallet(): Promise<void>\n  async unlockWallet(biometric?: boolean): Promise<boolean>\n  isWalletUnlocked(): boolean\n\n  // Transactions\n  async getTransactions(options?: IndexerQueryOptions): Promise<Transaction[]>\n  subscribeToTransactions(callback: (tx: Transaction) => void): () => void\n\n  // Contracts\n  async deployContract(options: ContractDeployOptions): Promise<ContractDeployResult>\n  async callContract(options: ContractCallOptions): Promise<ContractCallResult>\n  async queryContract(address: string, method: string, args: Uint8Array): Promise<unknown>\n\n  // DApp\n  async handleDeepLink(url: string): Promise<void>\n  async approveDAppRequest(request: DAppRequest, result?: unknown): Promise<void>\n  async rejectDAppRequest(request: DAppRequest, reason?: string): Promise<void>\n  async scanQRCode(): Promise<string>\n\n  // Network\n  async setNetwork(network: NetworkType): void\n  getNetwork(): NetworkType\n  getConnectionState(): ConnectionState\n\n  // Cleanup\n  async disconnect(): Promise<void>\n}\n```\n\n## TypeScript Support\n\nThis package is built with TypeScript. All types are exported:\n\n```typescript\nimport type {\n  WalletInfo,\n  WalletBalance,\n  Transaction,\n  ContractDeployOptions,\n  DAppRequest,\n  NetworkType,\n  MidnightErrorCode,\n  // ... and many more\n} from '@dedanzi/midnight-mobile-sdk';\n```\n\n## License\n\nMIT © [dedanzi](https://github.com/dedanzi)\n\n## Contributing\n\nContributions are welcome! Please read our contributing guidelines and submit pull requests to the main repository.\n\n## Support\n\n- **Issues:** [GitHub Issues](https://github.com/dedanzi/midnight-mobile-sdk/issues)\n- **Discussions:** [GitHub Discussions](https://github.com/dedanzi/midnight-mobile-sdk/discussions)\n- **Midnight Network:** [midnight.network](https://midnight.network)\n\n---\n\n**Built with ❤️ for the Midnight Network**\n","readmeFilename":"README.md"}