| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // ts/ledger.ts
- var apiKey = document.querySelector("#api-key");
- {
- const storedApiKey = localStorage.getItem("fio-api-key");
- if (storedApiKey)
- apiKey.value = storedApiKey;
- }
- document.querySelector("#fetch").addEventListener("click", async () => {
- const loader = document.querySelector("#loader");
- loader.style.display = "block";
- try {
- await renderLedger(apiKey.value);
- localStorage.setItem("fio-api-key", apiKey.value);
- } catch (e) {
- console.error(e);
- }
- loader.style.display = "none";
- });
- async function getPrices() {
- const allPrices = await fetchJSON("https://refined-prun.github.io/refined-prices/all.json");
- const priceMap = {};
- for (const price of allPrices)
- if (price.ExchangeCode === "IC1")
- priceMap[price.MaterialTicker] = price.VWAP30D;
- return priceMap;
- }
- var pricePromise = getPrices();
- var ledger = document.querySelector("textarea#ledger");
- async function renderLedger(apiKey2) {
- ledger.style.display = "none";
- ledger.value = `Time,Mat,Quantity,Actual Unit Price,Discounted Unit Price,Gateway,Debit,Credit,Contract ID
- `;
- const prices = await pricePromise;
- const contracts = await fetchJSON("https://rest.fnar.net/contract/allcontracts", { headers: { Authorization: apiKey2 } });
- contracts.sort((a, b) => a.DateEpochMs - b.DateEpochMs);
- for (const contract of contracts) {
- if (contract.PartnerCompanyCode === null || contract.PartnerName.endsWith(" Commodity Exchange"))
- continue;
- contract.Conditions.sort((a, b) => a.ConditionIndex - b.ConditionIndex);
- for (let i = 0;i < contract.Conditions.length; i++) {
- const condition = contract.Conditions[i];
- if (contract.Party !== condition.Party && condition.Type === "DELIVERY" || contract.Party === condition.Party && condition.Type === "COMEX_PURCHASE_PICKUP") {
- const time = new Date(contract.DateEpochMs).toISOString();
- const mat = condition.MaterialTicker;
- const quantity = condition.MaterialAmount;
- const totalPrice = contract.Conditions[i - 1].Amount;
- ledger.value += `${time},${mat},${quantity},${prices[mat]},${totalPrice / quantity},,${totalPrice},,${contract.ContractLocalId}
- `;
- } else
- continue;
- }
- }
- ledger.style.display = "block";
- }
- document.querySelector("#copy").addEventListener("click", () => {
- navigator.clipboard.writeText(ledger.value);
- });
- async function fetchJSON(url, options = {}) {
- const controller = new AbortController;
- const timeoutId = setTimeout(() => controller.abort(), 5000);
- const doc = await fetch(url, { ...options, signal: controller.signal }).then((r) => r.json());
- clearTimeout(timeoutId);
- return doc;
- }
- //# debugId=1ECCA7DD80B750F864756E2164756E21
|