UNPKG

super-jwt

Version:

Super-JWT helps to authenticate your users based on Superfluid streams using JSON Web Tokens (JWT)

72 lines 3.28 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.authenticateWithStream = authenticateWithStream; exports.verifyToken = verifyToken; const graphql_request_1 = require("graphql-request"); const jsonwebtoken_1 = __importDefault(require("jsonwebtoken")); const defaultSubgraphUrls = { sepolia: "https://subgraph-endpoints.superfluid.dev/eth-sepolia/protocol-v1", opsepolia: "https://subgraph-endpoints.superfluid.dev/optimism-sepolia/protocol-v1", fuji: "https://subgraph-endpoints.superfluid.dev/avalanche-fuji/protocol-v1", bsepolia: "https://base-sepolia.subgraph.x.superfluid.dev/", scrsepolia: "https://subgraph-endpoints.superfluid.dev/scroll-sepolia/protocol-v1", matic: "https://subgraph-endpoints.superfluid.dev/polygon-mainnet/protocol-v1", mainnet: "https://subgraph-endpoints.superfluid.dev/eth-mainnet/protocol-v1", xdai: "https://subgraph-endpoints.superfluid.dev/xdai-mainnet/protocol-v1", optimism: "https://subgraph-endpoints.superfluid.dev/optimism-mainnet/protocol-v1", avalanche: "https://subgraph-endpoints.superfluid.dev/avalanche-c/protocol-v1", bsc: "https://subgraph-endpoints.superfluid.dev/bsc-mainnet/protocol-v1", celo: "https://subgraph-endpoints.superfluid.dev/celo-mainnet/protocol-v1", base: "https://subgraph-endpoints.superfluid.dev/base-mainnet/protocol-v1" }; const STREAMS_QUERY = (0, graphql_request_1.gql) ` query GetStreams($first: Int, $where: Stream_filter) { streams(first: $first, where: $where) { id } } `; // Retrieve streams using the Superfluid subgraph async function getStreams({ chain, ...streamWhereParams }) { const subgraphUrl = defaultSubgraphUrls[chain]; if (!subgraphUrl) throw new Error(`super-jwt: Chain ${chain} is not supported`); try { const { streams } = await (0, graphql_request_1.request)(subgraphUrl, STREAMS_QUERY, { first: 1, where: { ...streamWhereParams } }); return streams; } catch (err) { console.warn(`super-jwt: Failed to retrieve streams: ${err}`); return []; } } async function authenticateWithStream(streamPayload, secret, jwtOptions) { const requiredParams = ["chain", "sender", "receiver", "token"]; if (!requiredParams.every((param) => streamPayload.hasOwnProperty(param))) { throw new Error("super-jwt: Missing required stream payload params: chain, sender, receiver, token"); } const streams = await getStreams(streamPayload); if (!streams || streams.length === 0) { throw new Error("super-jwt: No stream found to authenticate between sender and receiver"); } const jwtToken = jsonwebtoken_1.default.sign(streamPayload, secret, jwtOptions); return { token: jwtToken, stream: streamPayload }; } function verifyToken(jwtToken, secret) { try { const decoded = jsonwebtoken_1.default.verify(jwtToken, secret); return decoded; } catch (err) { throw new Error(`super-jwt: failed to verify token: ${err}`); } } //# sourceMappingURL=index.js.map