UNPKG

@intuweb3/sdk

Version:

INTU SDK - Modern blockchain interaction toolkit

590 lines 16.7 kB
import { createClient } from "graphql-ws"; const isBrowser = typeof window !== "undefined"; if (!isBrowser) { try { import("ws") .then((ws) => { global.WebSocket = ws.default || ws; }) .catch((error) => { console.warn("WebSocket polyfill not available:", error); }); } catch (error) { console.warn("WebSocket polyfill not available:", error); } } const getWebSocketImpl = () => { if (isBrowser) { return window.WebSocket; } if (typeof WebSocket === "undefined") { throw new Error("WebSocket implementation not found. Make sure ws package is installed for node environment."); } return WebSocket; }; export const normalizeQuery = (name, chainId) => { if (chainId === 421614 || chainId === 42161) { return name.slice(0, -1); } return name; }; const isHyperindex = (url) => url ? url.includes("indexer.hyperindex.xyz") : true; const standardQueries = { getVaultTransactions: ({ vaultAddress, chainId }) => ` query { TransactionProposed( where: { vaultAddress: { _ilike: "${vaultAddress}" } } order_by: { blockNumber: asc } ) { txId transactionHash transactionInfo notes } TransactionUserConfirmed( where: { vaultAddress: { _ilike: "${vaultAddress}" } } order_by: { blockNumber: asc } ) { txId signedTransaction user } } `, getVaultCreateds: ({ userAddress, chainId }) => ` query { vaultCreateds( first: 1000 where: { proposedAddresses_contains: ["${userAddress}"]} orderBy: blockNumber, orderDirection: asc ) { vaultAddress } } `, getVaultCreatedSingle: ({ userAddress, chainId }) => ` query { vaultCreateds( where: { proposedAddresses_contains: ["${userAddress}"]} orderBy: blockNumber, orderDirection: asc ) { vaultAddress } } `, getVaultCompleted: ({ masterPublicAddress, chainId }) => ` query { vaultCompleteds( where: { masterPubKey: "${masterPublicAddress}", chainId: { _eq: ${chainId} } } orderBy: blockNumber, orderDirection: asc ) { vaultAddress } } `, getTransactionById: ({ vaultAddress, txId, chainId }) => ` query { TransactionProposed( where: { vaultAddress: { _ilike: "${vaultAddress}" }, txId: { _eq: "${txId}" } } order_by: { blockNumber: asc } ) { txId transactionHash transactionInfo notes } TransactionUserConfirmed( where: { vaultAddress: { _ilike: "${vaultAddress}" }, txId: { _eq: "${txId}" } } order_by: { blockNumber: asc } ) { signedTransaction user } } `, vaultUserPreRegister: ({ vaultAddress, chainId }) => ` query { vaultUserPreRegisters( where: { vaultAddress: "${vaultAddress}", chainId: { _eq: ${chainId} } } orderBy: blockNumber, orderDirection: asc ) { user dbKey encSharedKey megaPublicKey parisEncKey } } `, vaultUserRegisteredAll: ({ vaultAddress, chainId }) => ` query { vaultUserRegisteredAlls( where: { vaultAddress: "${vaultAddress}", chainId: { _eq: ${chainId} } } orderBy: blockNumber, orderDirection: asc ) { user step1Dealings openingKey openingKappa openingLambda simpleDealingKey simpleDealingKappa transcriptKey transcriptKappa transcriptLambda step3Crypto } } `, vaultUserRegisteredAllSingle: ({ vaultAddress, userAddress, chainId }) => ` query { vaultUserRegisteredAlls( where: { vaultAddress: "${vaultAddress}", user: "${userAddress}", chainId: { _eq: ${chainId} } } orderBy: blockNumber, orderDirection: asc ) { user step1Dealings openingKey openingKappa openingLambda simpleDealingKey simpleDealingKappa transcriptKey transcriptKappa transcriptLambda step3Crypto } } `, vaultUserRegisteredSigningOnly: ({ vaultAddress, userAddress, chainId }) => ` query { vaultUserRegisteredAlls( where: { vaultAddress: "${vaultAddress}", user: "${userAddress}", chainId: { _eq: ${chainId} } } orderBy: blockNumber, orderDirection: asc ) { user step3Crypto } } `, getUserRegistrationReshareStep3Info: ({ vaultAddress, chainId }) => ` query { VaultUserReshareRegisteredAlls( where: { vaultAddress: "${vaultAddress}", chainId: { _eq: ${chainId} } } orderBy: blockNumber, orderDirection: asc ) { user step3Crypto } } `, getUserReSharingStep1Info: ({ vaultAddress, chainId }) => ` query { vaultUserReshareRegisteredAlls( where: { vaultAddress: "${vaultAddress}", chainId: { _eq: ${chainId} } } orderBy: blockNumber, orderDirection: asc ) { user step3Crypto step1Dealings } } `, }; const arbitrumSepoliaGoldskyQueries = { ...standardQueries, }; const arbitrumSepoliaQueries = { getVaultTransactions: ({ vaultAddress, chainId }) => ` query { TransactionProposed( where: { vaultAddress: { _ilike: "${vaultAddress}" } } order_by: { blockNumber: asc } ) { txId transactionHash transactionInfo notes } TransactionUserConfirmed( where: { vaultAddress: { _ilike: "${vaultAddress}" } } order_by: { blockNumber: asc } ) { txId signedTransaction user } } `, getVaultCreateds: ({ userAddress, chainId }) => ` query { VaultCreated( limit: 1000 where: { proposedAddresses: { _contains: ["${userAddress}"] }, chainId: { _eq: ${chainId} } } order_by: { blockNumber: asc } ) { vaultAddress } } `, getVaultCreatedSingle: ({ userAddress, chainId }) => ` query { VaultCreated( where: { proposedAddresses: { _contains: ["${userAddress}"] }, chainId: { _eq: ${chainId} } } order_by: { blockNumber: asc } ) { vaultAddress } } `, getVaultCompleted: ({ masterPublicAddress, chainId }) => ` query { VaultCompleted( where: { masterPubKey: { _ilike: "${masterPublicAddress}" }} order_by: { blockNumber: asc } ) { vaultAddress } } `, getTransactionById: ({ vaultAddress, txId, chainId }) => ` query { TransactionProposed( where: { vaultAddress: { _ilike: "${vaultAddress}" }, txId: { _eq: "${txId}" } } order_by: { blockNumber: asc } ) { txId transactionHash transactionInfo notes } TransactionUserConfirmed( where: { vaultAddress: { _ilike: "${vaultAddress}" }, txId: { _eq: "${txId}" } } order_by: { blockNumber: asc } ) { signedTransaction user } } `, vaultUserPreRegister: ({ vaultAddress, chainId }) => ` query { VaultUserPreRegister( where: { vaultAddress: { _ilike: "${vaultAddress}" }} order_by: { blockNumber: asc } ) { user dbKey encSharedKey megaPublicKey parisEncKey } } `, vaultUserRegisteredAll: ({ vaultAddress, chainId }) => ` query { VaultUserRegisteredAll( where: { vaultAddress: { _ilike: "${vaultAddress}" }} order_by: { blockNumber: asc } ) { user step1Dealings openingKey openingKappa openingLambda simpleDealingKey simpleDealingKappa transcriptKey transcriptKappa transcriptLambda step3Crypto } } `, vaultUserRegisteredAllSingle: ({ vaultAddress, userAddress, chainId }) => ` query { VaultUserRegisteredAll( where: { vaultAddress: { _ilike: "${vaultAddress}" }, user: { _ilike: "${userAddress}" } } order_by: { blockNumber: asc } ) { user step1Dealings openingKey openingKappa openingLambda simpleDealingKey simpleDealingKappa transcriptKey transcriptKappa transcriptLambda step3Crypto } } `, vaultUserRegisteredSigningOnly: ({ vaultAddress, userAddress, chainId }) => ` query { VaultUserRegisteredAll( where: { vaultAddress: { _ilike: "${vaultAddress}" }, user: { _ilike: "${userAddress}" } } order_by: { blockNumber: asc } ) { user step3Crypto } } `, getUserRegistrationReshareStep3Info: ({ vaultAddress, chainId }) => ` query { VaultUserReshareRegisteredAll( where: { vaultAddress: { _ilike: "${vaultAddress}" } } order_by: { blockNumber: asc } ) { user step3Crypto } } `, getUserReSharingStep1Info: ({ vaultAddress, chainId }) => ` query { VaultUserReshareRegisteredAlls( where: { vaultAddress: { _ilike: "${vaultAddress}" } } order_by: { blockNumber: asc } ) { user step3Crypto step1Dealings } } `, }; export const getQuery = (queryName, chainId, params, endpoint) => { const paramsWithChainId = { ...params, chainId }; if (chainId === 421614 || chainId === 42161) { if (endpoint === "goldsky") { return arbitrumSepoliaGoldskyQueries[queryName](paramsWithChainId); } return arbitrumSepoliaQueries[queryName](paramsWithChainId); } return standardQueries[queryName](paramsWithChainId); }; const arbitrumSepoliaSubscriptions = { subscribeToVaultTransactions: ({ vaultAddress, chainId }) => ` subscription { TransactionProposed( where: { vaultAddress: { _ilike: "${vaultAddress}" }} order_by: { blockNumber: asc } ) { txId transactionHash transactionInfo notes } TransactionUserConfirmed( where: { vaultAddress: { _ilike: "${vaultAddress}" }} order_by: { blockNumber: asc } ) { txId signedTransaction user } } `, subscribeToVaultCreateds: ({ userAddress, chainId }) => ` subscription { VaultCreated( limit: 1000 where: { proposedAddresses: { _contains: ["${userAddress}"] }, chainId: { _eq: ${chainId} } } order_by: { blockNumber: asc } ) { vaultAddress } } `, subscribeToVaultCreatedSingle: ({ userAddress, chainId }) => ` subscription { VaultCreated( where: { proposedAddresses: { _contains: ["${userAddress}"] }, chainId: { _eq: ${chainId} } } order_by: { blockNumber: asc } ) { vaultAddress } } `, subscribeToVaultCompleted: ({ masterPublicAddress, chainId }) => ` subscription { VaultCompleted( where: { masterPubKey: { _ilike: "${masterPublicAddress}" }} order_by: { blockNumber: asc } ) { vaultAddress } } `, subscribeToTransactionById: ({ vaultAddress, txId, chainId }) => ` subscription { TransactionProposed( where: { vaultAddress: { _ilike: "${vaultAddress}" }, txId: { _eq: "${txId}" } } order_by: { blockNumber: asc } ) { txId transactionHash transactionInfo notes } TransactionUserConfirmed( where: { vaultAddress: { _ilike: "${vaultAddress}" }, txId: { _eq: "${txId}" } } order_by: { blockNumber: asc } ) { signedTransaction user } } `, subscribeToVaultUserPreRegister: ({ vaultAddress, chainId }) => ` subscription { VaultUserPreRegister( where: { vaultAddress: { _ilike: "${vaultAddress}" } } order_by: { blockNumber: asc } ) { user dbKey encSharedKey megaPublicKey parisEncKey } } `, subscribeToVaultUserRegisteredAll: ({ vaultAddress, chainId }) => ` subscription { VaultUserRegisteredAll( where: { vaultAddress: { _ilike: "${vaultAddress}" } } order_by: { blockNumber: asc } ) { user step1Dealings openingKey openingKappa openingLambda simpleDealingKey simpleDealingKappa transcriptKey transcriptKappa transcriptLambda step3Crypto } } `, subscribeToUserRegistrationReshareStep3Info: ({ vaultAddress, chainId }) => ` subscription { VaultUserReshareRegisteredAll( where: { vaultAddress: { _ilike: "${vaultAddress}" } } order_by: { blockNumber: asc } ) { user step3Crypto } } `, subscribeToUserReSharingStep1Info: ({ vaultAddress, chainId }) => ` subscription { VaultUserReshareRegisteredAlls( where: { vaultAddress: { _ilike: "${vaultAddress}" } } order_by: { blockNumber: asc } ) { user step3Crypto step1Dealings } } `, }; export const subscribeToQuery = (queryName, params, callbacks, chainId = 421614, endpoint) => { if (typeof window === "undefined") { import("ws") .then((ws) => { global.WebSocket = ws.default || ws; }) .catch((error) => { console.warn("WebSocket polyfill not available:", error); }); } const getWebSocketUrl = () => { return "wss://indexer.hyperindex.xyz/2e6bc4f/v1/graphql"; }; const client = createClient({ url: getWebSocketUrl(), webSocketImpl: getWebSocketImpl(), connectionParams: { headers: { "Sec-WebSocket-Protocol": "graphql-ws", }, }, on: { connected: () => console.log("🚀 WebSocket Connected for", queryName), error: (err) => { callbacks.error(err); }, closed: () => { callbacks.complete(); }, }, retryAttempts: 10, shouldRetry: (errOrCloseEvent) => { return true; }, }); const getQuery = () => { const paramsWithChainId = { ...params, chainId }; if (chainId === 421614 || chainId === 42161) { if (!arbitrumSepoliaSubscriptions[queryName]) { throw new Error(`Missing subscription query: ${queryName}`); } const query = arbitrumSepoliaSubscriptions[queryName](paramsWithChainId); return query; } throw new Error(`Subscriptions not supported for chainId: ${chainId}`); }; let isActive = true; let subscription = null; const heartbeatInterval = setInterval(() => { if (!isActive) { clearInterval(heartbeatInterval); return; } try { client.subscribe({ query: `subscription { __typename }`, }, { next: () => { }, error: () => { if (subscription) { subscription(); } createSubscription(); }, complete: () => { }, })(); } catch (error) { } }, 5000); const createSubscription = () => { try { subscription = client.subscribe({ query: getQuery(), }, { next: (data) => { if (isActive) { callbacks.next(data); } }, error: (error) => { if (isActive) { callbacks.error(error); } }, complete: () => { if (isActive) { callbacks.complete(); } }, }); } catch (error) { if (isActive) { callbacks.error(error); } } }; createSubscription(); return { unsubscribe: () => { console.log("🛑 Unsubscribing from query:", queryName); isActive = false; clearInterval(heartbeatInterval); if (subscription) { subscription(); } }, }; }; //# sourceMappingURL=graph.js.map