Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/oddsdk/odd-walletauth

Use your blockchain wallet as an ODD SDK authentication strategy.
https://github.com/oddsdk/odd-walletauth

blockchain ethereum fission odd oddjs

Last synced: 11 days ago
JSON representation

Use your blockchain wallet as an ODD SDK authentication strategy.

Awesome Lists containing this project

README

        

Use the [ODD SDK](https://github.com/oddsdk/ts-odd#readme) with a blockchain wallet. Access your personal encrypted file system with your wallet keys.

## Usage

Uses Ethereum by default with `window.ethereum` as the provider. Currently only works with MetaMask because it's the only wallet with encryption and decryption.

```ts
import * as walletauth from "odd-walletauth";
import { AppScenario } from "@oddjs/odd";

// Initialise

const program = await walletauth.program({
// optional event handlers
onAccountChange: (newProgram) => handleProgram(newProgram),
onDisconnect: () => {
/* eg. logout() */
},
});

handleProgram(program);

function handleProgram(program) {
if (program.session) {
// ✅ Authenticated
} else {
// Failed to authenticate with wallet
}
}
```

Use a custom Ethereum provider:

```ts
import * as ethereum from "odd-walletauth/wallet/ethereum";

ethereum.setProvider(window.ethereum);
```

**You can also write an implementation for other wallets.** Note that the DID method has to be supported by the [Fission server](https://github.com/fission-codes/fission), unless you're using other services with the ODD SDK. At the moment of writing, you can only use the `key` method for DIDs with the Fission servers. It supports ED25519, RSA and SECP256K1 keys, same for the UCAN algorithms.

```ts
import { Implementation } from "odd-walletauth/wallet/implementation"

const impl: Implementation = {
decrypt: (encryptedMessage: Uint8Array) => Promise,
encrypt: (storage: Storage.Implementation, data: Uint8Array) => Promise,
init: (storage: Storage.Implementation, args: InitArgs) => Promise,
publicSignature: {
type: string
magicBytes: Uint8Array
key: (storage: Storage.Implementation) => Promise
},
sign: (data: Uint8Array) => Promise,
ucanAlgorithm: string,
username: () => Promise,
verifySignedMessage: (storage: Storage.Implementation, args: VerifyArgs) => Promise,
}

// When creating a Program indicate that you want to use your custom wallet implementation.
walletauth.program({
wallet: impl
})
```