Search code examples
npmdenoalpha-vantageskypack-cdn

Duplicate identifier 'alpha'.deno-ts(2300) Unexpected keyword or identifier


I am trying to use Alpha Vantage NPM package inside my Deno application. I tried to use SkyPack version of it. But it gives me the following error:

Duplicate identifier 'alpha'.deno-ts(2300)
Unexpected keyword or identifier.

This is the code I am using:

import alphavantageTs from 'https://cdn.skypack.dev/alphavantage-ts';

export class StockTimeSeries{
        alpha = new alphavantageTs ("ASLDVIWXGEWFWNZG");

        alpha.stocks.intraday("msft").then((data: any) => {
            console.log(data);
            });
        
        alpha.stocks.batch(["msft", "aapl"]).then((data: any) => {
        console.log(data);
        });
    
        alpha.forex.rate("btc", "usd").then((data: any) => {
        console.log(data);
        });
    
        alpha.crypto.intraday("btc", "usd").then((data: any) => {
        console.log(data);
        });
    
        alpha.technicals.sma("msft", "daily", 60, "close").then((data: any) => {
        console.log(data);
        });
    
        alpha.sectors.performance().then((data: any) => {
        console.log(data);
        });
   

}

Solution

  • It looks like SkyPack is responding with a 401 for one of the sub-dependencies for that module. I'm also not even sure it's compatible with Deno.

    That said, here's the repo source for the module, and here's the documentation for the API. It looks like it's just a simple REST API which discriminates requests by query parameters, so you can make your own Deno client without too much effort using that module as a template. I'll give you some starter code:

    TS Playground

    export type Params = NonNullable<ConstructorParameters<typeof URLSearchParams>[0]>;
    
    class AlphaVantageNS { constructor (protected readonly api: AlaphaVantage) {} }
    
    class Forex extends AlphaVantageNS {
      rate (from_currency: string, to_currency: string) {
        return this.api.query({
          function: 'CURRENCY_EXCHANGE_RATE',
          from_currency,
          to_currency,
        });
      }
    }
    
    export class AlaphaVantage {
      #token: string;
    
      constructor (token: string) {
        this.#token = token;
      }
    
      async query <Result = any>(params: Params): Promise<Result> {
        const url = new URL('https://www.alphavantage.co/query');
    
        const usp = new URLSearchParams(params);
        usp.set('apikey', this.#token);
        url.search = usp.toString();
    
        const request = new Request(url.href);
        const response = await fetch(request);
    
        if (!response.ok) throw new Error('Response not OK');
    
        return response.json();
      }
    
      forex = new Forex(this);
    }
    
    
    // Use:
    
    const YOUR_API_KEY = 'demo';
    const alpha = new AlaphaVantage(YOUR_API_KEY);
    alpha.forex.rate('BTC', 'USD').then(data => console.log(data));