@intuweb3/sdk
Version:
INTU SDK - Modern blockchain interaction toolkit
590 lines • 16.7 kB
JavaScript
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