UNPKG

@useorbis/db-sdk

Version:

Orbis' Typescript SDK for building open-data experiences.

55 lines (54 loc) 2.25 kB
import { randomString } from "@stablelib/random"; import { SupportedChains } from "../types/providers.js"; import { SiweMessage, SiwStacksMessage, SiwTezosMessage, SiwsMessage, } from "@didtools/cacao"; import { CHAIN_NAMESPACE_MAP, THREE_MONTHS } from "../util/const.js"; export async function createOrbisSiwxMessage(params) { const siwxOpts = params.siwxOverwrites || {}; const address = "address" in params ? params.address : await params.provider.getAddress(); const chain = "chain" in params ? params.chain : params.provider.chain; const statement = `Give this application access to some of your data on Ceramic Network.`; const domain = siwxOpts.domain || (typeof window !== "undefined" && window?.location?.host) || "localhost"; if (!domain) { throw 'No "domain" has been set'; } const uri = siwxOpts.uri || (typeof window !== "undefined" && window?.location?.href) || "http://localhost"; if (!uri) { throw 'No "uri" has been set'; } const newSiwxOpts = { domain, address, statement, uri, version: "1", nonce: siwxOpts.nonce || randomString(10), issuedAt: siwxOpts.issuedAt || new Date().toISOString(), expirationTime: siwxOpts.expirationTime || new Date(Date.now() + THREE_MONTHS).toISOString(), chainId: siwxOpts.chainId || CHAIN_NAMESPACE_MAP[chain].chainId, resources: siwxOpts.resources || ["ceramic://*"], ...siwxOpts, }; return createSiwxMessage({ siwxOpts: newSiwxOpts, chain }); } export function createSiwxMessage(params) { const chain = "chain" in params ? params.chain : params.provider.chain; const siwxOpts = params.siwxOpts; switch (chain) { case SupportedChains.evm: // TODO: enable lowercased address if Lit supports it return new SiweMessage(siwxOpts); case SupportedChains.solana: return new SiwsMessage(siwxOpts); case SupportedChains.tezos: return new SiwTezosMessage(siwxOpts); case SupportedChains.stacks: return new SiwStacksMessage(siwxOpts); default: throw "Unsupported chain " + chain; } }