UNPKG

@useorbis/db-sdk

Version:

Orbis' Typescript SDK for building open-data experiences.

58 lines (57 loc) 1.85 kB
import { SiwsMessage } from "@didtools/cacao"; import { normalizeProvider } from "../providers/index.js"; import { SupportedChains, } from "../types/providers.js"; import { authenticateDidWithSiwx } from "./common.js"; export class OrbisSolanaAuth { orbisAuthId = "orbis-solana"; chain = SupportedChains.solana; #provider; constructor(provider) { this.#provider = normalizeProvider({ provider, chain: this.chain }); } get provider() { return this.#provider; } async getUserInformation() { await this.#provider.connect(); const address = await this.#provider.getAddress(); // mainnet chain 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp // testnet chain 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z const did = `did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:${address}`; const chain = this.chain; return { did, chain, metadata: { address, }, }; } async signSiwx(siwx) { await this.#provider.connect(); const user = await this.getUserInformation(); const siwsMessage = new SiwsMessage(siwx); const messageToSign = siwsMessage.toMessage(); const signature = await this.#provider.signMessage(messageToSign); siwsMessage.signature = signature; return { chain: this.chain, user, siwx: { message: siwsMessage, serialized: messageToSign, signature, }, }; } async authenticateDid({ siwxOverwrites, params } = {}) { const { did, session } = await authenticateDidWithSiwx({ authenticator: this, siwxOverwrites, }); return { did, session, }; } }