@didtools/pkh-solana
Version:
Implements support to authenticate, authorize and verify with Solana accounts as a did:pkh with SIWS(X) and CACAO. Primarly used with `did-session` and `@didtools/cacao`.
117 lines (115 loc) • 3.94 kB
TypeScript
/**
* # Solana AuthMethod and Verifier
* Implements support to authenticate, authorize and verify with Solana accounts as a did:pkh with SIWS(X) and CACAO.
* Primarly used with `did-session` and `@didtools/cacao`.
*
* ## Installation
*
* ```
* npm install --save @didtools/pkh-solana
* ```
*
* ## Auth Usage
*
* To Auth in web based env, use any injected Solana provider that implements the standard wallet/provider interface with `SolanaWebAuth`.
*
* ```js
* // Web Auth Usage
* import { SolanaWebAuth, getAccountIdByNetwork } from '@didtools/pkh-solana'
* // ...
*
* const solProvider = // import/get your Solana provider (ie: window.phantom.solana)
* const address = await solProvider.connect()
* const accountId = getAccountIdByNetwork('mainnet', address.publicKey.toString())
*
* const authMethod = await SolanaWebAuth.getAuthMethod(solProvider, accountId)
* ```
*
* To Auth in a Node based env, use any standard Solana provider interface with `SolanaNodeAuth`
*
*
* ```js
* // Node Auth Usage
* import { SolanaNodeAuth, getAccountIdByNetwork } from '@didtools/pkh-solana'
* // ...
*
* const solProvider = // import/get your Solana provider (ie: window.phantom.solana)
* const address = await solProvider.connect()
* const accountId = getAccountIdByNetwork('mainnet', address.publicKey.toString())
* const appName = 'MyNodeApp'
*
* const authMethod = await SolanaWebAuth.getAuthMethod(solProvider, accountId, appName)
* ```
*
* To use with did-session and reference did-session docs for more details.
*
* ```js
* const client = new ComposeClient({ceramic, definition})
* const resources = client.resources
*
* const session = await DIDSession.authorize(authMethod, { resources })
* client.setDID(session.did)
* ```
*
* ## Configuration
*
* AuthMethod creators consume a standard Solana provider and an AccountId. AccountID follows the
* CAIP10 standard. The helper methods `getAccountIdByNetwork` and `getAccountId` are provided, but you can also create an AccountID
* using the CAIP library directly.
*
* ```js
* import { AccountId } from 'caip'
* import { getAccountIdByNetwork, getAccountId } from '@didtools/pkh-solana'
* import { Connection, clusterApiUrl } from "@solana/web3.js"
*
* // Using network string
* const accountId = getAccountIdByNetwork('mainnet', address)
*
* // With CAIP
* const ethMainnetChainId = '1'
* const chainNameSpace = 'eip155'
* const chainId = `${chainNameSpace}:${ethMainnetChainId}`
* const accountIdCAIP = new AccountId({ address, chainId })
*
* // Using Solana Connection to query connect network/chain
* const connection = new Connection(solanaWeb3.clusterApiUrl("mainnet-beta"))
* const accountIdByConnection = await getAccountIdSolana(connection, address)
*
* // accountId = accountIdCAIP = accountIdByConnection
* ```
*
* The `SolanaNodeAuth` additionally consumes an application name. The 'SolanaWebAuth' method uses your
* application domain name by default.
*
* ```js
* import { SolanaNodeAuth } from '@didtools/pkh-solana'
* const appName = 'MyNodeApp'
* const authMethod = SolanaNodeAuth.getAuthMethod(solProvider, accountId, appName)
* ```
*
* ## Verifier Usage
*
* Verifiers are needed to verify different did:pkh signed payloads using CACAO. Libraries that need them will
* consume a verifiers map allowing your to register the verifiers you want to support.
*
* ```js
* import { Cacao } from '@didtools/cacao'
* import { getSolanaVerifier } from '@didtools/pkh-solana'
* import { DID } from 'dids'
*
* const verifiers = {
* ...getSolanaVerifier()
* }
*
* // Directly with cacao
* Cacao.verify(cacao, { verifiers, ...opts})
*
* // With DIDS, reference DIDS for more details
* const dids = //configured dids instance
* await dids.verifyJWS(jws, { capability, verifiers, ...opts})
* ```
*
* @module pkh-solana
*/
export * from './authmethod.js';
export * from './verifier.js';