UNPKG

@metaspacecy/information-sdk

Version:
758 lines (749 loc) 25.4 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { Constants: () => constants_exports, default: () => InformationSDK, getResource: () => getResource_exports, services: () => services_exports }); module.exports = __toCommonJS(src_exports); var import_aptos2 = require("aptos"); var import_lodash = __toESM(require("lodash")); // src/constants.ts var constants_exports = {}; __export(constants_exports, { ACCESS_CONTROL_MODULE: () => ACCESS_CONTROL_MODULE, APTOS_NODE_URL: () => APTOS_NODE_URL, COLLECTION: () => COLLECTION, CONITIONAL_TOKEN: () => CONITIONAL_TOKEN, DEFAULT_COIN_TYPE: () => DEFAULT_COIN_TYPE, GraphQLEndpoint: () => GraphQLEndpoint, INFORMATION_DATA_MODULE: () => INFORMATION_DATA_MODULE, INFORMATION_MODULE: () => INFORMATION_MODULE, MODULE_ADDRESS: () => MODULE_ADDRESS, PREDICT_MODULE: () => PREDICT_MODULE, RESOURCE_ADDRESS: () => RESOURCE_ADDRESS, SECONDARY_ACCESS_CONTROL_MODULE: () => SECONDARY_ACCESS_CONTROL_MODULE, SURVEY_MODULE: () => SURVEY_MODULE, SURVEY_NFT_MODULE: () => SURVEY_NFT_MODULE }); var MODULE_ADDRESS = { 1: "0x98d807bee3b8a28feb99c87712787ad1608c5e31cd6770669e39dcb8a3ae6b0d", 2: "0x98d807bee3b8a28feb99c87712787ad1608c5e31cd6770669e39dcb8a3ae6b0d", 41: "0x98d807bee3b8a28feb99c87712787ad1608c5e31cd6770669e39dcb8a3ae6b0d" }; var RESOURCE_ADDRESS = { 1: "0x79bf4ba0dd0e0369dd15644192e8264db9f863a03b299cd85a5367b8d214c231", 2: "0x79bf4ba0dd0e0369dd15644192e8264db9f863a03b299cd85a5367b8d214c231", 41: "0x79bf4ba0dd0e0369dd15644192e8264db9f863a03b299cd85a5367b8d214c231" }; var APTOS_NODE_URL = { 1: "https://fullnode.mainnet.aptoslabs.com/v1", 2: "https://fullnode.testnet.aptoslabs.com/v1", 41: "https://fullnode.devnet.aptoslabs.com/v1" }; var COLLECTION = { 1: "Metaspacecy Conditional Token Test", 2: "Metaspacecy Conditional Token Test", 41: "Metaspacecy Conditional Token Test" }; var GraphQLEndpoint = { 1: "https://indexer.mainnet.aptoslabs.com/v1/graphql", 2: "https://indexer-testnet.staging.gcp.aptosdev.com/v1/graphql", 41: "https://indexer-devnet.staging.gcp.aptosdev.com/v1/graphql" }; var ACCESS_CONTROL_MODULE = "access_control"; var SECONDARY_ACCESS_CONTROL_MODULE = "secondary_access_control"; var INFORMATION_MODULE = "information_factory"; var INFORMATION_DATA_MODULE = "information_data_factory"; var PREDICT_MODULE = "prediction"; var SURVEY_MODULE = "survey"; var SURVEY_NFT_MODULE = "survey_nft"; var DEFAULT_COIN_TYPE = "0x1::aptos_coin::AptosCoin"; var CONITIONAL_TOKEN = "conditional_token"; // src/accessControl.ts var getMemberRole = async (signAndSubmitTransactionCallback, chainId) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainId]}::${SECONDARY_ACCESS_CONTROL_MODULE}::get_role`, type_arguments: [], arguments: [] }; return signAndSubmitTransactionCallback(payload); }; // src/getResource.ts var getResource_exports = {}; __export(getResource_exports, { getMemberOperatorRole: () => getMemberOperatorRole, getOptionPrice: () => getOptionPrice, getPredictEventByEventID: () => getPredictEventByEventID, getServiceFee: () => getServiceFee, getSurveyEventByEventID: () => getSurveyEventByEventID, getSurveyNFTEventByEventID: () => getSurveyNFTEventByEventID, getTokenBalance: () => getTokenBalance, getTokenForAccount: () => getTokenForAccount }); var import_aptos = require("aptos"); // src/utils.ts var import_js_sha256 = require("js-sha256"); var getOptionHashValue = (options) => { let hashOptionsValue = ""; let i = 0; while (i < options.length) { const hash = import_js_sha256.sha256.create(); hash.update(options[i]); hashOptionsValue += +hash.array().pop(); i += 1; } return hashOptionsValue; }; // src/getResource.ts var getPredictEventByEventID = async (creator, description, options, chainId, coinType = DEFAULT_COIN_TYPE) => { const client = new import_aptos.AptosClient(APTOS_NODE_URL[chainId]); const { data } = await client.getAccountResource( MODULE_ADDRESS[chainId], `${MODULE_ADDRESS[chainId]}::${PREDICT_MODULE}::Prediction<${coinType}>` ); const { handle } = data.all_events; try { const dataPredict = await client.getTableItem(handle, { key_type: `${MODULE_ADDRESS[chainId]}::${INFORMATION_DATA_MODULE}::EventID`, value_type: `${MODULE_ADDRESS[chainId]}::${PREDICT_MODULE}::Event<${coinType}>`, key: { creator, description: options.length !== 0 ? `${description}?#(${coinType})?#${getOptionHashValue(options)}` : description } }); return dataPredict; } catch (error) { return error; } }; var getSurveyEventByEventID = async (creator, description, options, chainId, coinType = DEFAULT_COIN_TYPE) => { const client = new import_aptos.AptosClient(APTOS_NODE_URL[chainId]); const { data } = await client.getAccountResource( MODULE_ADDRESS[chainId], `${MODULE_ADDRESS[chainId]}::${SURVEY_MODULE}::Survey<${coinType}>` ); const { handle } = data.all_events; try { const dataPredict = await client.getTableItem(handle, { key_type: `${MODULE_ADDRESS[chainId]}::${INFORMATION_MODULE}::EventID`, value_type: `${MODULE_ADDRESS[chainId]}::${SURVEY_MODULE}::Event<${coinType}>`, key: { creator, description: options.length !== 0 ? `${description}?#(${coinType})?#${getOptionHashValue(options)}` : description } }); return dataPredict; } catch (error) { return error; } }; var getSurveyNFTEventByEventID = async (creator, description, options, chainId) => { const client = new import_aptos.AptosClient(APTOS_NODE_URL[chainId]); const { data } = await client.getAccountResource( MODULE_ADDRESS[chainId], `${MODULE_ADDRESS[chainId]}::${SURVEY_NFT_MODULE}::SurveyNft` ); const { handle } = data.all_events; try { const dataPredict = await client.getTableItem(handle, { key_type: `${MODULE_ADDRESS[chainId]}::${INFORMATION_MODULE}::EventID`, value_type: `${MODULE_ADDRESS[chainId]}::${SURVEY_NFT_MODULE}::Event`, key: { creator, description: options.length !== 0 ? `${description}?#${getOptionHashValue(options)}` : description } }); return dataPredict; } catch (error) { return error; } }; var getTokenBalance = async (owner, itemName, chainId) => { const client = new import_aptos.AptosClient(APTOS_NODE_URL[chainId]); const tokenClient = new import_aptos.TokenClient(client); const tokenId = { token_data_id: { creator: RESOURCE_ADDRESS[chainId], collection: COLLECTION[chainId], name: itemName }, property_version: "0" }; let amount = ""; await tokenClient.getTokenForAccount(owner, tokenId).then((res) => { amount = res.amount; }); return amount; }; var getTokenForAccount = (owner, itemName, chainId = 2) => { const client = new import_aptos.AptosClient(APTOS_NODE_URL[chainId]); const tokenClient = new import_aptos.TokenClient(client); const tokenId = { token_data_id: { creator: RESOURCE_ADDRESS[chainId], collection: COLLECTION[chainId], name: itemName }, property_version: "0" }; return tokenClient.getTokenForAccount(owner, tokenId).then((res) => res.amount); }; var getMemberOperatorRole = async (chainId) => { const client = new import_aptos.AptosClient(APTOS_NODE_URL[chainId]); const { data } = await client.getAccountResource( MODULE_ADDRESS[chainId], `${MODULE_ADDRESS[chainId]}::access_control::AccessControl` ); const operator = data.role.data.filter( (item) => item.key === "Operator" )[0].value; return operator; }; var getServiceFee = async (chainId) => { const client = new import_aptos.AptosClient(APTOS_NODE_URL[chainId]); const { data } = await client.getAccountResource( MODULE_ADDRESS[chainId], `${MODULE_ADDRESS[chainId]}::information_data_factory::Information` ); return data.fee_numerator / data.fee_denominator; }; var getOptionPrice = async (creator, description, options, chainId, token_name) => { var _a; const event = await getPredictEventByEventID( creator, description, options, chainId ); const client = new import_aptos.AptosClient(APTOS_NODE_URL[chainId]); const tokenClient = new import_aptos.TokenClient(client); let totalSupply = 0; let count = 0; await Promise.all( options.map(async (option) => { const tokenName = `${token_name.split("-")[0]}- ${option}`; const tokenData2 = await tokenClient.getTokenData( RESOURCE_ADDRESS[chainId], COLLECTION[chainId], tokenName ); if (tokenData2.supply > 0) { totalSupply += Number(tokenData2.supply); count += 1; } }) ); if (((_a = event == null ? void 0 : event.reward) == null ? void 0 : _a.value) < 1e8 || count < 2) { return 1; } const tokenData = await tokenClient.getTokenData( RESOURCE_ADDRESS[chainId], COLLECTION[chainId], token_name ); const initScale = 1 / (options.length - 1); const poolScale = tokenData.supply / (totalSupply - tokenData.supply); const rewardRate = totalSupply / tokenData.supply; const tokenRate = 1 - (initScale - poolScale); return (rewardRate / ((rewardRate - 1) * tokenRate + 1)).toFixed(4); }; // src/services.ts var services_exports = {}; __export(services_exports, { getEventByCreator: () => getEventByCreator, getJoinedEvent: () => getJoinedEvent }); var import_axios = __toESM(require("axios")); var getEventByCreator = async (creator, chainID) => { var _a; const body = { operationName: "GetEventByCreator", query: `query GetEventByCreator { events( where: {account_address: {_like: "${MODULE_ADDRESS[chainID]}"}, type: {_regex: "CreateEvent"}} ) { data } } `, variables: null }; const data = await import_axios.default.post(GraphQLEndpoint[chainID], body); const results = []; await Promise.all( (_a = data.data.data.events) == null ? void 0 : _a.reduce( (a, event) => event.data.creator === creator ? [...a, event] : a, [] ).map(async (value) => { const result = await getPredictEventByEventID( value.data.event_id.creator, value.data.event_id.description, [], chainID ); results.push(result); }) ); return results; }; var getJoinedEvent = async (predictor, chainID) => { var _a; const body = { operationName: "GetEventByCreator", query: `query GetEventByCreator { events( where: {account_address: {_like: "${MODULE_ADDRESS[chainID]}"}, type: {_regex: "PredictEvent"}} ) { data } } `, variables: null }; const data = await import_axios.default.post(GraphQLEndpoint[chainID], body); const results = []; await Promise.all( (_a = data.data.data.events) == null ? void 0 : _a.reduce( (a, event) => event.data.predicter === predictor ? [...a, event] : a, [] ).map(async (value) => { const result = await getPredictEventByEventID( value.data.event_id.creator, value.data.event_id.description, [], chainID ); results.push(result); }) ); return results; }; // src/information.ts var createPredictEvent = async (signAndSubmitTransactionCallback, chainID, description, uri, options, start_time, end_time, payout_time, type_arguments) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::create_predict_event`, type_arguments: [type_arguments], arguments: [ `${description}?#(${type_arguments})`, uri, options, start_time, end_time, payout_time ] }; return signAndSubmitTransactionCallback(payload); }; var createSurveyEvent = async (signAndSubmitTransactionCallback, chainID, description, uri, reward, options, start_time, end_time, payout_time, type_arguments) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::create_survey_event`, type_arguments: [type_arguments], arguments: [ `${description}?#(${type_arguments})`, uri, reward, options, start_time, end_time, payout_time ] }; return signAndSubmitTransactionCallback(payload); }; var createSurveyNFTEvent = async (signAndSubmitTransactionCallback, chainID, description, collection, uri, options, start_time, end_time, payout_time) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::create_survey_nft_event`, type_arguments: [], arguments: [ description, collection, uri, options, start_time, end_time, payout_time ] }; return signAndSubmitTransactionCallback(payload); }; var predictEvent = async (signAndSubmitTransactionCallback, chainID, option, amount, event_creator, event_description, event_options, type_arguments) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::predict_event`, type_arguments: [type_arguments], arguments: [ option, amount, event_creator, `${event_description}?#(${type_arguments})`, event_options ] }; return signAndSubmitTransactionCallback(payload); }; var surveyEvent = async (signAndSubmitTransactionCallback, chainID, option, event_creator, event_description, event_options, type_arguments) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::survey_event`, type_arguments: [type_arguments], arguments: [ option, event_creator, `${event_description}?#(${type_arguments})`, event_options ] }; return signAndSubmitTransactionCallback(payload); }; var surveyNFTEvent = async (signAndSubmitTransactionCallback, chainID, option, amount, event_creator, event_description, event_options, token_creator, collection, token_name, token_version) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::survey_nft_event`, type_arguments: [], arguments: [ option, amount, event_creator, event_description, event_options, token_creator, collection, token_name, token_version ] }; return signAndSubmitTransactionCallback(payload); }; var redeemPredictEvent = async (signAndSubmitTransactionCallback, chainID, name, amount, type_arguments) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::redeem_predict_event`, type_arguments: [type_arguments], arguments: [RESOURCE_ADDRESS[chainID], COLLECTION[chainID], name, amount] }; return signAndSubmitTransactionCallback(payload); }; var redeemSurveyEvent = async (signAndSubmitTransactionCallback, chainID, name, type_arguments) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::redeem_survey_event`, type_arguments: [type_arguments], arguments: [RESOURCE_ADDRESS[chainID], COLLECTION[chainID], name] }; return signAndSubmitTransactionCallback(payload); }; var redeemSurveyNFTEvent = async (signAndSubmitTransactionCallback, chainID, name, amount) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::redeem_survey_nft_event`, type_arguments: [], arguments: [RESOURCE_ADDRESS[chainID], COLLECTION[chainID], name, amount] }; return signAndSubmitTransactionCallback(payload); }; var finalizePredictEvent = async (signAndSubmitTransactionCallback, chainID, description, options, outcomes, type_arguments) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::finalize_predict_event`, type_arguments: [type_arguments], arguments: [`${description}?#(${type_arguments})`, options, outcomes] }; return signAndSubmitTransactionCallback(payload); }; var finalizeSurveyEvent = async (signAndSubmitTransactionCallback, chainID, description, options, outcomes, type_arguments) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::finalize_survey_event`, type_arguments: [type_arguments], arguments: [`${description}?#(${type_arguments})`, options, outcomes] }; return signAndSubmitTransactionCallback(payload); }; var finalizeSurveyNFtEvent = async (signAndSubmitTransactionCallback, chainID, description, options, outcomes) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::finalize_survey_nft_event`, type_arguments: [], arguments: [description, options, outcomes] }; return signAndSubmitTransactionCallback(payload); }; var cancelPredictEvent = async (signAndSubmitTransactionCallback, chainID, description, options, type_arguments) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::cancel_predict_event`, type_arguments: [type_arguments], arguments: [`${description}?#(${type_arguments})`, options] }; return signAndSubmitTransactionCallback(payload); }; var cancelSurveyEvent = async (signAndSubmitTransactionCallback, chainID, description, options, type_arguments) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::cancel_survey_event`, type_arguments: [type_arguments], arguments: [`${description}?#(${type_arguments})`, options] }; return signAndSubmitTransactionCallback(payload); }; var cancelSurveyNFTEvent = async (signAndSubmitTransactionCallback, chainID, description, options) => { const payload = { type: "entry_function_payload", function: `${MODULE_ADDRESS[chainID]}::${INFORMATION_MODULE}::cancel_survey_nft_event`, type_arguments: [], arguments: [description, options] }; return signAndSubmitTransactionCallback(payload); }; // src/index.ts var InformationSDK = class { constructor(chainID, callBack, responseField) { this.signAndSubmitTransaction = async (transaction, options) => { let result; if (this.privateKey) { const aptosClient = new import_aptos2.AptosClient( APTOS_NODE_URL[this.chainID] ); const sender = new import_aptos2.AptosAccount(this.privateKey.toUint8Array()); const builder = new import_aptos2.TransactionBuilderRemoteABI(aptosClient, { sender: sender.address(), ...options }); const rawTxn = await builder.build( transaction.function, transaction.type_arguments, transaction.arguments ); const sign = await aptosClient.signTransaction(sender, rawTxn); result = await aptosClient.submitTransaction(sign); } else if (this.signAndSubmitTransactionCallback) { result = await this.signAndSubmitTransactionCallback( transaction, options ); } if (this.responseField) { return import_lodash.default.reduce( result, (_result, value, key) => { var _a; if ((_a = this.responseField) == null ? void 0 : _a.includes(key)) { return { ..._result, [key]: value }; } return _result; }, {} ); } return result; }; if ((0, import_lodash.isString)(callBack)) { this.privateKey = new import_aptos2.HexString(callBack); } else { this.signAndSubmitTransactionCallback = callBack; } this.chainID = chainID; this.responseField = responseField; } async getOperatorRole() { return getMemberRole(this.signAndSubmitTransaction, this.chainID); } async createPredictEvent(description, uri, options, start_time, end_time, payout_time, type_arguments) { return createPredictEvent( this.signAndSubmitTransaction, this.chainID, description, uri, options, start_time, end_time, payout_time, type_arguments ); } async createSuyveyEvent(description, uri, reward, options, start_time, end_time, payout_time, type_arguments) { return createSurveyEvent( this.signAndSubmitTransaction, this.chainID, description, uri, reward, options, start_time, end_time, payout_time, type_arguments ); } async createSuyveyNFTEvent(description, collection, uri, options, start_time, end_time, payout_time) { return createSurveyNFTEvent( this.signAndSubmitTransaction, this.chainID, description, collection, uri, options, start_time, end_time, payout_time ); } async predictEvent(option, amount, event_creator, event_description, event_options, type_arguments) { return predictEvent( this.signAndSubmitTransaction, this.chainID, option, amount, event_creator, event_description, event_options, type_arguments ); } async surveyEvent(option, event_creator, event_description, event_options, type_arguments) { return surveyEvent( this.signAndSubmitTransaction, this.chainID, option, event_creator, event_description, event_options, type_arguments ); } async surveyNFTEvent(option, amount, event_creator, event_description, event_options, token_creator, collection, token_name, token_version) { return surveyNFTEvent( this.signAndSubmitTransaction, this.chainID, option, amount, event_creator, event_description, event_options, token_creator, collection, token_name, token_version ); } async finalizePredictEvent(description, options, outcomes, type_arguments) { return finalizePredictEvent( this.signAndSubmitTransaction, this.chainID, description, options, outcomes, type_arguments ); } async finalizeSurveyEvent(description, options, outcomes, type_arguments) { return finalizeSurveyEvent( this.signAndSubmitTransaction, this.chainID, description, options, outcomes, type_arguments ); } async finalizeSurveyNFTEvent(description, options, outcomes) { return finalizeSurveyNFtEvent( this.signAndSubmitTransaction, this.chainID, description, options, outcomes ); } async redeemPredictEvent(name, amount, type_arguments) { return redeemPredictEvent( this.signAndSubmitTransaction, this.chainID, name, amount, type_arguments ); } async redeemSurveyEvent(name, type_arguments) { return redeemSurveyEvent( this.signAndSubmitTransaction, this.chainID, name, type_arguments ); } async redeemSurveyNFTEvent(name, amount) { return redeemSurveyNFTEvent( this.signAndSubmitTransaction, this.chainID, name, amount ); } async cancelPredictEvent(description, options, type_arguments) { return cancelPredictEvent( this.signAndSubmitTransaction, this.chainID, description, options, type_arguments ); } async cancelSurveyEvent(description, options, type_arguments) { return cancelSurveyEvent( this.signAndSubmitTransaction, this.chainID, description, options, type_arguments ); } async cancelSurveyNFTEvent(description, options) { return cancelSurveyNFTEvent( this.signAndSubmitTransaction, this.chainID, description, options ); } }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Constants, getResource, services }); //# sourceMappingURL=index.js.map