0.10.4 • Published 2 months ago
@synonymdev/react-native-pubky v0.10.4
react-native-pubky
React Native implementation of pubky-core
Installation
npm install @synonymdev/react-native-pubky
Implementation Status
Implemented Methods
- auth: Authentication functionality.
- parseAuthUrl: Method to decode an authUrl.
- publish: Functionality to publish content.
- resolve: Functionality to resolve content.
- publishHttps: Publish HTTPS records.
- resolveHttps: Resolve HTTPS records.
- getSignupToken: Get a signup token from a homeserver with admin credentials.
- signUp: Sign-up to a homeserver and update Pkarr accordingly, with optional signup token support.
- republishHomeserver: Republish homeserver information to the DHT.
- signIn: Sign-in to a homeserver.
- session: Check the current session for a given Pubky in its homeserver.
- signOut: Sign-out from a homeserver.
- put: Upload a small payload to a given path.
- get: Download a small payload from a given path relative to a pubky author.
- list: Returns a list of Pubky URLs of the files in the path of the
url
provided. - delete: Delete a file at a path relative to a pubky author.
- generateSecretKey: Generate a secret key.
- getPublicKeyFromSecretKey: Get the public key string and uri from a secret key.
- create_recovery_file: Create a recovery file.
- decrypt_recovery_file: Decrypt a recovery file.
- getHomeserver: Get homeserver URL from a public key.
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);
getSignupToken
import { getSignupToken } from '@synonymdev/react-native-pubky';
const getSignupTokenRes = await getSignupToken(
'8pinxxgqs41n4aididenw5apqp1urfmzdztr8jt4abrkdn435ewo', // Homeserver pubky
'admin_password' // Admin Password
);
if (getSignupTokenRes.isErr()) {
console.log(getSignupTokenRes.error.message);
return;
}
console.log('Signup Token:', getSignupTokenRes.value);
signUp
import { signUp } from '@synonymdev/react-native-pubky';
// Standard signup
const signUpRes = await signUp(
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', // Secret
'pubky://8pinxxgqs41n4aididenw5apqp1urfmzdztr8jt4abrkdn435ewo', // Homeserver
);
if (signUpRes.isErr()) {
console.log(signUpRes.error.message);
return;
}
console.log(signUpRes.value);
// Signup with token
const signUpWithTokenRes = await signUp(
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', // Secret
'pubky://8pinxxgqs41n4aididenw5apqp1urfmzdztr8jt4abrkdn435ewo', // Homeserver
'your_signup_token' // Optional signup token
);
if (signUpWithTokenRes.isErr()) {
console.log(signUpWithTokenRes.error.message);
return;
}
console.log(signUpWithTokenRes.value);
republishHomeserver
import { republishHomeserver } from '@synonymdev/react-native-pubky';
const republishRes = await republishHomeserver(
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', // Secret Key
'pubky://8pinxxgqs41n4aididenw5apqp1urfmzdztr8jt4abrkdn435ewo' // Homeserver
);
if (republishRes.isErr()) {
console.log(republishRes.error.message);
return;
}
console.log(republishRes.value); // "Homeserver republished successfully"
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);
getHomeserver
import { getHomeserver } from '@synonymdev/react-native-pubky';
const getHomeserverRes = await getHomeserver(
'z4e8s17cou9qmuwen8p1556jzhf1wktmzo6ijsfnri9c4hnrdfty' // Public Key
);
if (getHomeserverRes.isErr()) {
console.log(getHomeserverRes.error.message);
return;
}
console.log(getHomeserverRes.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
- Clone & npm install:
git clone git@github.com:pubky/react-native-pubky.git && cd react-native-pubky && npm i
- Delete the
rust/pubky
directory to prevent a memory error (This step will be removed once pubky is public). - Yarn add it to your project:
yarn add path/to/react-native-pubky
Run React Native Example App
- Run Homeserver:
cd rust/pubky/pubky-homeserver && cargo run -- --config=./src/config.toml
- 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
0.10.2
4 months ago
0.10.3
2 months ago
0.10.4
2 months ago
0.10.0
4 months ago
0.10.1
4 months ago
0.9.5
5 months ago
0.9.4
7 months ago
0.9.3
8 months ago
0.9.0
9 months ago
0.8.0
9 months ago
0.7.1
9 months ago
0.9.2
8 months ago
0.9.1
8 months ago
0.5.0
10 months ago
0.7.0
10 months ago
0.6.0
10 months ago
0.4.0
10 months ago
0.3.0
10 months ago
0.2.3
10 months ago
0.2.2
10 months ago
0.2.1
10 months ago
0.2.0
10 months ago
0.1.1
10 months ago
0.1.0
10 months ago