Skip to content
This repository has been archived by the owner on Jan 2, 2024. It is now read-only.

Commit

Permalink
Merge pull request #15 from gregtuc/typescript
Browse files Browse the repository at this point in the history
Converted StockSocket.js to Typescript
  • Loading branch information
gregtuc authored Mar 12, 2021
2 parents 0ec2986 + 8d296bd commit 6503a02
Show file tree
Hide file tree
Showing 8 changed files with 300 additions and 30 deletions.
2 changes: 2 additions & 0 deletions lib/StockSocket.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=StockSocket.d.ts.map
1 change: 1 addition & 0 deletions lib/StockSocket.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

152 changes: 152 additions & 0 deletions lib/StockSocket.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions lib/StockSocket.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 17 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 7 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
{
"name": "stocksocket",
"version": "1.2.0",
"version": "1.2.1",
"description": "Real-time Yahoo Stock Prices",
"main": "stocksocket.js",
"main": "lib/stocksocket.js",
"types": "lib",
"scripts": {
"build": "tsc -p .",
"test": "mocha"
},
"repository": {
Expand Down Expand Up @@ -37,10 +39,12 @@
"puppeteer": "^8.0.0"
},
"devDependencies": {
"@types/puppeteer": "^5.4.3",
"assert": "^2.0.0",
"chromedriver": "^88.0.0",
"mocha": "^8.3.0",
"request": "^2.88.2",
"selenium-webdriver": "^4.0.0-beta.1"
"selenium-webdriver": "^4.0.0-beta.1",
"typescript": "^4.2.3"
}
}
72 changes: 48 additions & 24 deletions StockSocket.js → src/StockSocket.ts
Original file line number Diff line number Diff line change
@@ -1,37 +1,54 @@
"use strict";
const puppeteer = require("puppeteer");

var browser;
var tickersArray = [];
var pagesArray = {};
import { Browser, Page, launch } from "puppeteer";
var browser: Browser;

async function addTickers(tickers, callbackFunc) {
//Pages Array
interface IPagesArray {
[key: string]: Page;
}
var pagesArray: IPagesArray;
pagesArray = {};

//Tickers Array
interface ITickersArray {
symbol: string;
price: number;
}
var tickersArray: ITickersArray[];
tickersArray = [];

async function addTickers(
tickers: Array<string>,
callback: (arg0: object) => void
) {
//If browser has not been declared, launch it.
if (browser == undefined) {
browser = await puppeteer.launch();
browser = await launch();
}
//Format the inputted tickers, add them to tickersArray, begin operations.
for (var i = 0; i < tickers.length; i++) {
tickersArray.push({ symbol: tickers[i], price: 0 });
startDataFeed(tickersArray[tickersArray.length - 1], callbackFunc);
var tickerObject: ITickersArray = { symbol: tickers[i], price: 0 };
tickersArray.push(tickerObject);
startDataFeed(tickersArray[tickersArray.length - 1], callback);
}
}

async function addTicker(ticker, callbackFunc) {
async function addTicker(ticker: string, callback: (arg0: object) => void) {
//If browser has not been declared, launch it.
if (browser == undefined) {
browser = await puppeteer.launch();
browser = await launch();
}

//Push the new ticker to tickersArray.
tickersArray.push({ symbol: ticker, price: 0 });

//Begin operations on the new ticker.
startDataFeed(tickersArray[tickersArray.length - 1], callbackFunc);
startDataFeed(tickersArray[tickersArray.length - 1], callback);
}

//Stop data for a specific ticker.
async function removeTicker(ticker) {
async function removeTicker(ticker: string) {
for (var key in pagesArray) {
if (key == ticker) {
await pagesArray[key].close();
Expand All @@ -42,7 +59,7 @@ async function removeTicker(ticker) {
}

//Stop data for a list of tickers.
async function removeTickers(tickers) {
async function removeTickers(tickers: Array<string>) {
for (var i = 0; i < tickers.length; i++) {
removeTicker(tickers[i]);
}
Expand All @@ -56,7 +73,10 @@ async function removeAllTickers() {
}
}

async function startDataFeed(ticker, callbackFunc) {
async function startDataFeed(
ticker: { symbol: string; price: number },
callback: (arg0: object) => void
) {
try {
//Configure Puppeteer page.
pagesArray[ticker.symbol] = await browser.newPage();
Expand All @@ -78,11 +98,11 @@ async function startDataFeed(ticker, callbackFunc) {
"#consent-page > div > div > div > form > div.wizard-body > div.actions.couple > button"
)
) {
document
.querySelector(
"#consent-page > div > div > div > form > div.wizard-body > div.actions.couple > button"
)
.click();
var element = document.querySelector(
"#consent-page > div > div > div > form > div.wizard-body > div.actions.couple > button"
) as HTMLElement;
element.click();

return;
}
} catch (e) {
Expand All @@ -96,7 +116,7 @@ async function startDataFeed(ticker, callbackFunc) {
//Evaluate the actual page.
await pagesArray[ticker.symbol].evaluate(function () {
var target;
const potentialSelectors = {
const potentialSelectors: { [key: string]: string } = {
premarket:
"#quote-header-info > div.Pos\\(r\\) > div.D\\(ib\\) > p > span",
regmarket: "#quote-header-info > div.Pos\\(r\\) > div > p > span",
Expand Down Expand Up @@ -133,10 +153,14 @@ async function startDataFeed(ticker, callbackFunc) {
}

//Take action on the observed price mutation.
function puppeteerMutationListener(data) {
if (ticker.price != data) {
ticker.price = data;
callbackFunc(ticker);
function puppeteerMutationListener(data: string | null) {
var parsedData: any = data;
parsedData = parsedData.replace(/\,/g, "");
parsedData = parseFloat(parsedData);

if (ticker.price != parsedData) {
ticker.price = parsedData;
callback(ticker);
}
}
}
Expand Down
Loading

0 comments on commit 6503a02

Please sign in to comment.