diff --git a/src/platforms/kalshi-fetch.js b/src/platforms/kalshi-fetch.js new file mode 100644 index 0000000..3784234 --- /dev/null +++ b/src/platforms/kalshi-fetch.js @@ -0,0 +1,79 @@ +/* Imports */ +import fs from 'fs' +import axios from "axios" +import { calculateStars } from "../utils/stars.js" +import {upsert} from "../utils/mongo-wrapper.js" + +/* Definitions */ +let jsonEndpoint = "https://trading-api.kalshi.com/v1/cached/markets/"//"https://subgraph-matic.poly.market/subgraphs/name/TokenUnion/polymarket"//"https://subgraph-backup.poly.market/subgraphs/name/TokenUnion/polymarket"//'https://subgraph-matic.poly.market/subgraphs/name/TokenUnion/polymarket3' + +/* Support functions +async function fetchAllContractInfo(){ // for info which the polymarket graphql API + let data = fs.readFileSync("./data/polymarket-contract-list.json") + let response = JSON.parse(data) + return response +} + */ +async function fetchAllMarkets() { // for info which the polymarket graphql API + let response = await axios.get(jsonEndpoint).then(response => response.data.markets) + // console.log(response) + return response +} + + +async function processMarkets(markets) { + let dateNow = new Date().toISOString() + // console.log(markets) + markets = markets.filter(market => market.close_date > dateNow) + let results = await markets.map(market => { + let probability = market.last_price/100 + let options = [ + { + "name": "Yes", + "probability": probability, + "type": "PROBABILITY" + }, + { + "name": "No", + "probability": 1 - probability, + "type": "PROBABILITY" + } + ] + let result = ({ + "title": market.title, + "url": `https://kalshi.com/markets/${market.ticker_name}`, + "platform": "Kalshi", + "description": `${market.settle_details}. The resolution source is: ${market.ranged_group_name} (${market.settle_source_url})`, + "options": options, + "timestamp": new Date().toISOString(), + "qualityindicators": { + "stars": calculateStars("Kalshi", ({volume: market.volume, interest: market.open_interest})), + "yes_bid": market.yes_bid, + "yes_ask": market.yes_ask, + "spread": Math.abs(market.yes_bid-market.yes_ask), + "volume": market.volume, + "open_interest": market.open_interest + } + }) + return result + }) + //console.log(results.length) + // console.log(results.map(result => result.title)) + // console.log(results.map(result => result.title).length) + console.log([...new Set(results.map(result => result.title))]) + console.log("Number of unique questions: ", [...new Set(results.map(result => result.title))].length) + // console.log([...new Set(results.map(result => result.title))].length) + return results //resultsProcessed +} + +/* Body */ +export async function kalshi() { + let markets = await fetchAllMarkets() + let results = await processMarkets(markets) // somehow needed + // console.log(results) + // let string = JSON.stringify(results, null, 2) + // fs.writeFileSync('polymarket-questions.json', string); + await upsert(results, "kalshi-questions") + console.log("Done") +} +// kalshi()