@meshsdk/midnight-setup
Version:
Midnight Network integration SDK for MeshSDK - https://meshjs.dev/midnight
1 lines • 16.5 kB
Source Map (JSON)
{"version":3,"sources":["../src/common-types.ts","../src/utils.ts","../src/index.ts"],"names":["Observable"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n MidnightProvider,\n PrivateStateProvider,\n ProofProvider,\n PublicDataProvider,\n WalletProvider,\n ZKConfigProvider,\n} from \"@midnight-ntwrk/midnight-js-types\";\n\n// Private state identifier for the contract\nexport const MidnightSetupPrivateStateId = \"midnight-setup-private-state\";\nexport type MidnightSetupPrivateStateId = typeof MidnightSetupPrivateStateId;\n\n// Circuit keys type for proof provider\nexport type TokenCircuitKeys = string;\n\n// Contract providers interface with proper types\nexport interface MidnightSetupContractProviders {\n privateStateProvider: PrivateStateProvider;\n zkConfigProvider: ZKConfigProvider<TokenCircuitKeys>;\n proofProvider: ProofProvider<TokenCircuitKeys>;\n publicDataProvider: PublicDataProvider;\n walletProvider: WalletProvider;\n midnightProvider: MidnightProvider;\n}\n\n// Deployed contract interface\nexport interface DeployedContract {\n deployTxData: {\n public: {\n contractAddress: string;\n };\n };\n}\n\n// Contract instance type - accepts any Midnight contract\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ContractInstance = any;\n\n// Contract state from public data provider\nexport interface QueryContractState {\n data: unknown;\n blockHeight?: number | bigint;\n blockHash?: string | Uint8Array;\n}\n\n// Contract state types - using unknown for flexible state data\nexport interface ContractStateData {\n readonly address: string;\n readonly data: unknown;\n readonly blockHeight?: string;\n readonly blockHash?: string;\n readonly message?: string;\n readonly error?: string;\n}\n\nexport interface LedgerStateData {\n readonly address: string;\n readonly ledgerState?: {\n readonly message: string | null;\n };\n readonly blockHeight?: string;\n readonly blockHash?: string;\n readonly rawData?: unknown;\n readonly parseError?: string;\n readonly error?: string;\n}\n\nexport type DerivedMidnightSetupContractState = {\n readonly protocolTVL: unknown[];\n readonly projects: unknown[];\n};\n","import { Logger } from \"pino\";\n\n// Simple utility functions for proof server connection\nexport const randomNonceBytes = (length: number, logger?: Logger): Uint8Array => {\n const newBytes = new Uint8Array(length);\n crypto.getRandomValues(newBytes);\n logger?.info(\"Random nonce bytes generated\");\n return newBytes;\n}\n\nexport function hexStringToUint8Array(hexStr: string): Uint8Array {\n // Simple hex to Uint8Array conversion\n const hex = hexStr.replace(/^0x/, '');\n const bytes = new Uint8Array(hex.length / 2);\n \n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.substr(i, 2), 16);\n }\n \n return bytes;\n}\n\nexport default { randomNonceBytes, hexStringToUint8Array };","import { ContractAddress } from \"@midnight-ntwrk/compact-runtime\";\nimport { type Logger } from \"pino\";\nimport { Observable } from \"rxjs\";\n\nimport {\n ContractInstance,\n ContractStateData,\n DeployedContract,\n DerivedMidnightSetupContractState,\n LedgerStateData,\n MidnightSetupContractProviders,\n MidnightSetupPrivateStateId,\n QueryContractState,\n} from \"./common-types.js\";\n\nexport interface DeployedMidnightSetupAPI {\n readonly deployedContractAddress: ContractAddress;\n readonly state: Observable<DerivedMidnightSetupContractState>;\n getContractState: () => Promise<ContractStateData>;\n getLedgerState: () => Promise<LedgerStateData>;\n}\n\nexport class MidnightSetupAPI implements DeployedMidnightSetupAPI {\n deployedContractAddress: string;\n state: Observable<DerivedMidnightSetupContractState>;\n\n private constructor(\n private providers: MidnightSetupContractProviders,\n public readonly deployedContract: DeployedContract,\n private logger?: Logger,\n ) {\n this.deployedContractAddress =\n deployedContract.deployTxData.public.contractAddress;\n\n this.state = new Observable((subscriber) => {\n subscriber.next({\n protocolTVL: [],\n projects: [],\n });\n });\n }\n\n async getContractState(): Promise<ContractStateData> {\n try {\n this.logger?.info(\"Getting contract state...\", {\n address: this.deployedContractAddress,\n });\n\n const contractState =\n (await this.providers.publicDataProvider.queryContractState(\n this.deployedContractAddress,\n )) as QueryContractState | null;\n\n if (contractState) {\n this.logger?.info(\"Contract state retrieved successfully\");\n return {\n address: this.deployedContractAddress,\n data: contractState.data,\n blockHeight: contractState.blockHeight?.toString(),\n blockHash:\n typeof contractState.blockHash === \"string\"\n ? contractState.blockHash\n : contractState.blockHash?.toString(),\n };\n } else {\n this.logger?.warn(\"No contract state found\");\n return {\n address: this.deployedContractAddress,\n data: null,\n message: \"No contract state found at this address\",\n };\n }\n } catch (error) {\n this.logger?.error(\"Failed to get contract state\", {\n error: error instanceof Error ? error.message : error,\n });\n return {\n address: this.deployedContractAddress,\n data: null,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to get contract state\",\n };\n }\n }\n\n async getLedgerState(): Promise<LedgerStateData> {\n try {\n this.logger?.info(\"Getting ledger state...\", {\n address: this.deployedContractAddress,\n });\n\n const contractState = await this.getContractState();\n\n if (contractState.data) {\n try {\n // Generic ledger state parsing\n const ledgerState = contractState.data as Record<string, unknown>;\n this.logger?.info(\"Ledger state parsed successfully\");\n\n // Parse message if it exists and is a Uint8Array\n let messageText: string | null = null;\n if (\n ledgerState.message &&\n ledgerState.message instanceof Uint8Array\n ) {\n messageText = new TextDecoder().decode(ledgerState.message);\n }\n\n return {\n address: this.deployedContractAddress,\n ledgerState: {\n message: messageText,\n },\n blockHeight: contractState.blockHeight,\n blockHash: contractState.blockHash,\n };\n } catch (parseError) {\n this.logger?.warn(\"Failed to parse ledger state\", {\n error: parseError,\n });\n return {\n address: this.deployedContractAddress,\n rawData: contractState.data,\n parseError:\n parseError instanceof Error\n ? parseError.message\n : \"Failed to parse ledger state\",\n };\n }\n } else {\n return {\n address: this.deployedContractAddress,\n error: contractState.error || contractState.message,\n };\n }\n } catch (error) {\n this.logger?.error(\"Failed to get ledger state\", {\n error: error instanceof Error ? error.message : error,\n });\n return {\n address: this.deployedContractAddress,\n error:\n error instanceof Error ? error.message : \"Failed to get ledger state\",\n };\n }\n }\n\n static async deployContract(\n providers: MidnightSetupContractProviders,\n contractInstance: ContractInstance,\n logger?: Logger,\n ): Promise<MidnightSetupAPI> {\n logger?.info(\"Deploying contract...\");\n\n try {\n const initialPrivateState =\n await MidnightSetupAPI.getPrivateState(providers);\n\n const { deployContract } = await import(\n \"@midnight-ntwrk/midnight-js-contracts\"\n );\n\n const deployedContract = (await deployContract(providers, {\n contract: contractInstance,\n initialPrivateState: initialPrivateState,\n privateStateId: MidnightSetupPrivateStateId,\n })) as DeployedContract;\n\n logger?.info(\"Contract deployed successfully\", {\n address: deployedContract.deployTxData.public.contractAddress,\n });\n return new MidnightSetupAPI(providers, deployedContract, logger);\n } catch (error) {\n logger?.error(\"Failed to deploy contract\", {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n });\n throw error;\n }\n }\n\n static async joinContract(\n providers: MidnightSetupContractProviders,\n contractInstance: ContractInstance,\n contractAddress: string,\n logger?: Logger,\n ): Promise<MidnightSetupAPI> {\n logger?.info(\"Joining contract...\", { contractAddress });\n\n try {\n const initialPrivateState =\n await MidnightSetupAPI.getPrivateState(providers);\n\n const { findDeployedContract } = await import(\n \"@midnight-ntwrk/midnight-js-contracts\"\n );\n\n const existingContract = (await findDeployedContract(providers, {\n contract: contractInstance,\n contractAddress: contractAddress,\n privateStateId: MidnightSetupPrivateStateId,\n initialPrivateState: initialPrivateState,\n })) as DeployedContract;\n\n logger?.info(\"Successfully joined contract\", {\n address: existingContract.deployTxData.public.contractAddress,\n });\n return new MidnightSetupAPI(providers, existingContract, logger);\n } catch (error) {\n logger?.error(\"Failed to join contract\", {\n error: error instanceof Error ? error.message : String(error),\n contractAddress,\n });\n throw error;\n }\n }\n\n private static async getPrivateState(\n providers: MidnightSetupContractProviders,\n ): Promise<Record<string, unknown>> {\n try {\n const existingPrivateState = await providers.privateStateProvider.get(\n MidnightSetupPrivateStateId,\n );\n\n return existingPrivateState ?? {};\n } catch (error) {\n console.warn(\n \"Error getting private state, returning empty object:\",\n error,\n );\n return {};\n }\n }\n}\n\nexport * as utils from \"./utils.js\";\nexport * from \"./common-types.js\";\n\n// Re-export main types for convenience\nexport type {\n ContractStateData,\n LedgerStateData,\n DeployedContract,\n ContractInstance,\n QueryContractState,\n MidnightSetupContractProviders,\n TokenCircuitKeys,\n} from \"./common-types.js\";\n"]}