@synonymdev/react-native-pubky

0.9.2 • Public • Published

react-native-pubky

React Native implementation of pubky-core

Installation

npm install @synonymdev/react-native-pubky

Implementation Status

Implemented Methods

  • [x] auth: Authentication functionality.
  • [x] parseAuthUrl: Method to decode an authUrl.
  • [x] publish: Functionality to publish content.
  • [x] resolve: Functionality to resolve content.
  • [x] publishHttps: Publish HTTPS records.
  • [x] resolveHttps: Resolve HTTPS records.
  • [x] signUp: Sign-up to a homeserver and update Pkarr accordingly.
  • [x] signIn: Sign-in to a homeserver.
  • [x] session: Check the current session for a given Pubky in its homeserver.
  • [x] signOut: Sign-out from a homeserver.
  • [x] put: Upload a small payload to a given path.
  • [x] get: Download a small payload from a given path relative to a pubky author.
  • [x] list: Returns a list of Pubky URLs of the files in the path of the url provided.
  • [x] delete: Delete a file at a path relative to a pubky author.
  • [x] generateSecretKey: Generate a secret key.
  • [x] getPublicKeyFromSecretKey: Get the public key string and uri from a secret key.
  • [x] create_recovery_file: Create a recovery file.
  • [x] decrypt_recovery_file: Decrypt a recovery file.

Usage

Auth

import { auth } from '@synonymdev/react-native-pubky';

const authRes = await auth(
  'pubkyauth:///?caps=/pub/pubky.app/:rw,/pub/foo.bar/file:r&secret=U55XnoH6vsMCpx1pxHtt8fReVg4Brvu9C0gUBuw-Jkw&relay=http://167.86.102.121:4173/',
  'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
);
if (authRes.isErr()) {
  console.log(authRes.error.message);
  return;
}
console.log(authRes.value);

parseAuthUrl

import { parseAuthUrl } from '@synonymdev/react-native-pubky';

const pubkyAuthUrl = 'pubkyauth:///?relay=https://demo.httprelay.io/link&capabilities=/pub/pubky.app:rw,/pub/example.com/nested:rw&secret=FyzJ3gJ1W7boyFZC1Do9fYrRmDNgCLNRwEu_gaBgPUA';
const parseRes = await parseAuthUrl(pubkyAuthUrl);
if (parseRes.isErr()) {
  console.log(parseRes.error.message);
  return;
}
console.log(parseRes.value);

publish

import { publish } from '@synonymdev/react-native-pubky';

const publishRes = await publish(
  'recordnametest',
  'recordcontenttest',
  'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
);
if (publishRes.isErr()) {
  console.log(publishRes.error.message);
  return;
}
console.log(publishRes.value);

resolve

import { resolve } from '@synonymdev/react-native-pubky';

const resolveRes = await resolve(
  'z4e8s17cou9qmuwen8p1556jzhf1wktmzo6ijsfnri9c4hnrdfty'
);
if (resolveRes.isErr()) {
  console.log(resolveRes.error.message);
  return;
}
console.log(resolveRes.value);

publishHttps

import { publishHttps } from '@synonymdev/react-native-pubky';

const publishHttpsRes = await publishHttps(
  'example.com', // Record Name
  'target.example.com', // Target
  'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' // Secret Key
);
if (publishHttpsRes.isErr()) {
  console.log(publishHttpsRes.error.message);
  return;
}
console.log(publishHttpsRes.value);

resolveHttps

import { resolveHttps } from '@synonymdev/react-native-pubky';

const resolveHttpsRes = await resolveHttps(
  'z4e8s17cou9qmuwen8p1556jzhf1wktmzo6ijsfnri9c4hnrdfty' // Public key
);
if (resolveHttpsRes.isErr()) {
  console.log(resolveHttpsRes.error.message);
  return;
}
console.log(resolveHttpsRes.value);

put

import { put } from '@synonymdev/react-native-pubky';

const putRes = await put(
  'pubky://z4e8s17cou9qmuwen8p1556jzhf1wktmzo6ijsfnri9c4hnrdfty/pub/synonym.to', // URL
  { data: 'test content' }, // Content
);
if (putRes.isErr()) {
  console.log(putRes.error.message);
  return;
}
console.log(putRes.value);

get

import { get } from '@synonymdev/react-native-pubky';

const getRes = await get(
  'pubky://z4e8s17cou9qmuwen8p1556jzhf1wktmzo6ijsfnri9c4hnrdfty/pub/synonym.to' // URL
);
if (getRes.isErr()) {
  console.log(getRes.error.message);
  return;
}
console.log(getRes.value);

list

import { list } from '@synonymdev/react-native-pubky';

const listRes = await list(
  'pubky://z4e8s17cou9qmuwen8p1556jzhf1wktmzo6ijsfnri9c4hnrdfty/pub/' // URL
);
if (listRes.isErr()) {
  console.log(listRes.error.message);
  return;
}
console.log(listRes.value);

deleteFile

import { deleteFile } from '@synonymdev/react-native-pubky';

const deleteFileRes = await deleteFile(
  'pubky://z4e8s17cou9qmuwen8p1556jzhf1wktmzo6ijsfnri9c4hnrdfty/pub/' // URL
);
if (deleteFileRes.isErr()) {
  console.log(deleteFileRes.error.message);
  return;
}
console.log(deleteFileRes.value);

generateSecretKey

import { generateSecretKey } from '@synonymdev/react-native-pubky';

const generateSecretKeyRes = await generateSecretKey();
if (generateSecretKeyRes.isErr()) {
  console.log(generateSecretKeyRes.error.message);
  return;
}
console.log(generateSecretKeyRes.value);

getPublicKeyFromSecretKey

import { getPublicKeyFromSecretKey } from '@synonymdev/react-native-pubky';

const getPublicKeyFromSecretKeyRes = await getPublicKeyFromSecretKey('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855');
if (getPublicKeyFromSecretKeyRes.isErr()) {
  console.log(getPublicKeyFromSecretKeyRes.error.message);
  return;
}
console.log(getPublicKeyFromSecretKeyRes.value);

signUp

import { signUp } from '@synonymdev/react-native-pubky';

const signUpRes = await signUp(
  'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', // Secret
  'pubky://8pinxxgqs41n4aididenw5apqp1urfmzdztr8jt4abrkdn435ewo', // Homeserver
);
if (signUpRes.isErr()) {
  console.log(signUpRes.error.message);
  return;
}
console.log(signUpRes.value);

signIn

import { signIn } from '@synonymdev/react-native-pubky';

const signInRes = await signIn(
  'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' // Secret Key
);
if (signInRes.isErr()) {
  console.log(signInRes.error.message);
  return;
}
console.log(signInRes.value);

sessionRes

import { session } from '@synonymdev/react-native-pubky';

const sessionRes = await session(
  'z4e8s17cou9qmuwen8p1556jzhf1wktmzo6ijsfnri9c4hnrdfty' // Public Key
);
if (sessionRes.isErr()) {
  console.log(sessionRes.error.message);
  return;
}
console.log(sessionRes.value);

signIn

import { signOut } from '@synonymdev/react-native-pubky';

const signOutRes = await signOut(
  'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' // Secret Key
);
if (signOutRes.isErr()) {
  console.log(signOutRes.error.message);
  return;
}
console.log(signOutRes.value);

createRecoveryFile

import { createRecoveryFile } from '@synonymdev/react-native-pubky';

const createRecoveryFileRes = await createRecoveryFile(
  'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', // Secret Key
  'passphrase', // Passphrase
);
if (createRecoveryFileRes.isErr()) {
  console.log(createRecoveryFileRes.error.message);
  return;
}
console.log(createRecoveryFileRes.value);

decryptRecoveryFile

import { decryptRecoveryFile } from '@synonymdev/react-native-pubky';

const decryptRecoveryFileRes = await decryptRecoveryFile(
  'cHVia3kub3JnL3JlY292ZXJ5CkZRt1NHIjxyTo0whSSgTgNrH56MPpGrSxvAQSE0x5FeklVJpNJqcNP4zjdwW/OpdBOsEC1qZ5MI/mcEUKFKVAEZwikdclsLZg==', // Recovery File
  'passphrase', // Passphrase
);
if (decryptRecoveryFileRes.isErr()) {
  console.log(decryptRecoveryFileRes.error.message);
  return;
}
console.log(decryptRecoveryFileRes.value);

Local Installation

  1. Clone & npm install:
git clone git@github.com:pubky/react-native-pubky.git && cd react-native-pubky && npm i
  1. Delete the rust/pubky directory to prevent a memory error (This step will be removed once pubky is public).
  2. Yarn add it to your project:
yarn add path/to/react-native-pubky

Run React Native Example App

  1. Run Homeserver:
cd rust/pubky/pubky-homeserver && cargo run -- --config=./src/config.toml
  1. Run the React Native Example App:
cd example && yarn install && cd ios && pod install && cd ../ && yarn ios

Download Remote Bindings

This command will download the current bindings from the SDK repo:

npm run update-remote-bindings

Setup Local Bindings

This command will download the entire Rust project if it doesn't exist and set up the bindings locally for faster iteration and testing:

npm run update-local-bindings

Finally, ensure that PubkyModule.kt, Pubky.swift, Pubky.mm & src/index.tsx are updated accordingly based on the changes made to the Rust files.

License

MIT


Resources

Package Sidebar

Install

npm i @synonymdev/react-native-pubky

Weekly Downloads

190

Version

0.9.2

License

MIT

Unpacked Size

105 MB

Total Files

37

Last publish

Collaborators

  • ovitrif
  • jools.weedcoder
  • thisispav
  • shacollision
  • flaviomoceri
  • amirramfa
  • tipogi
  • limpbrains
  • catch-21
  • dzdidi_restored
  • pwltr
  • miguelmedeirosweb
  • bitcoinerrorlog
  • jayvdb
  • coreyphillips
  • nzh