npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@joeldodge/sdk

v21.5.1

Published

Looker SDK

Downloads

4

Readme

Looker SDK

test

The Looker SDK for Typescript/Javascript works with Node and browser run-times. The SDK provides a convenient way to communicate with a Looker server's APIs.

This package supports using the Looker SDK in the browser. The @joeldodge/sdk-node package depends on this package (@joeldodge/sdk) and @joeldodge/sdk-rtl.

The SDK uses a plug-in architecture (also known as dependency injection) for initializing that supports run-time specific transports (like NodeTransport and BrowserTransport) and different approaches for managing API authentication (like NodeSession, BrowserSession, ProxySession, and CorsSession).

DISCLAIMER: This is a beta version of the Looker SDK. Implementations are still subject to change, but SDK method calls are expected to work correctly. Please report any issues encountered, and indicate the SDK language in the report.

Getting started

The Looker Browser SDK can be used in a browser application in 3 steps:

  • install
  • authenticate
  • use

Install the Looker SDK into your application

Using yarn:

yarn add @joeldodge/sdk @joeldodge/sdk-rtl

Using npm:

npm install @joeldodge/sdk @joeldodge/sdk-rtl

Authenticate your API calls

All requests to the Looker API server require an access token. For browser implementations, authentication is typically achieved via OAuth as described in cors.md or a Proxy Server.

Use the SDK in your browser application

Authenticating for the browser takes more setup than authenticating for use with a Node application.

The stand-alone version of the Looker API Explorer uses OAuth and the BrowserSDK to get an authentication token for Looker API requests.

  • RunItSDK shows how to override readConfig() to get SDK configuration values.

  • RunItSDK tests support debugging the flow of RunItSDK.

  • The OAuthScene React component receives the OAuth response from the Looker server and logs the user in to retrieve the API authentication token.

Looker's OAuth support makes it possible to build a Looker SDK application that only requires the browser. If a browser application can use a proxy server instead, or already uses an existing backend server, it may be simpler to use a proxy for authentication/

The looker.ini configuration file and environment variables are never used in the Browser runtime.

Developing with multiple API versions

Starting with Looker release 7.2, the experimental version of API 4.0 is available. To support iterative migration to API 4.0 from API 3.1, the single Looker SDK package now supports multiple API versions for the generated SDK classes. Both API 3.1 and API 4.0 are supported for Node and browser-based use.

LookerBrowserSDK.init31() and Looker31SDK() initialize the API 3.1 implementation of the SDK.

LookerBrowserSDK.init40() and Looker40SDK() initialize the API 4.1 implementation of the SDK.

Using a Proxy for authentication

CORS support allows the Looker API to be used directly in the browser application running on a different domain than the Looker server. Because all API endpoints require authentication except for Login, a proxy server can be used to retrieve the API authentication token and provide it to the browser session.

ProxySession is the SDK class specifically designed to streamline proxy session creation. The source code example below shows how to override the authenticate method for use in a CORS request scenario.

  • getProxyToken() is the call to the proxy server's API that returns the API auth token to use
  • the code in the if (this.isAuthenticated() branch
    • Sets CORS mode
    • Sets the auth token header
    • Identifies the Looker SDK version for the Looker server

By writing your own getProxyToken() visible to this class, any proxied authentication workflow is supported.

export class EmbedSession extends ProxySession {
  constructor(public settings: IApiSettings, transport?: ITransport) {
    super(settings, transport)
  }

  async authenticate(props: any) {
    // get the auth token from the proxy server
    const token = await getProxyToken()
    if (token) {
      // Assign the token, which will track its expiration time automatically
      this.activeToken.setToken(token)
    }

    if (this.isAuthenticated()) {
      // Session is authenticated
      // set CORS mode (in this scenario)
      props.mode = 'cors'

      // remove any credentials attribute that may have been set
      // because the BrowserTransport defaults to having `same-origin` for credentials
      delete props['credentials']

      // replace the headers argument with required values
      // Note: using new Headers() to construct the headers breaks CORS for the Looker API. Don't know why yet
      props.headers = {
        Authorization: `Bearer ${token.access_token}`,
        'x-looker-appid': agentTag,
      }
    }
    return props
  }
}

More examples

Looker's open source repository of SDK Examples has more example scripts and applications that show how to use the Looker SDK.

A note about security

Any script or configuration file used to provide credentials to your Looker SDK instance needs to be secured.