superset/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-connection
Chris Williams 6c8e40c710 [build] fix typescript builds (#56)
* [build] fix typescript builds

* [typescript] ensure types pass in build

* [typescript][connection] declare modules in tests

* [typescript][connection] fix ts errors in tests

* [typescript][connection] test/types.ts => types/external.d.ts

* [chart][typescript] add @types/react-loadable

* [chart][components] convert to ts

* [charts][tests][broken] convert to ts

* [chart][typescript] re-write component generics

* [chart][typescript] fix reactify generic, add react-dom types

* [chart][typescript] more iteration

* - Tweaking reactify types (using Readonly types).
- Uncovered an issue in which ReactifyProps and Props can collide on id and className.
- Move @types/react-loadable to dev dependency
- Fixing a lint error

* [chart][deps] add @types/fetch-mock

* [client][typescript] add and export SupersetClientInterface

* [chart][clients] fix ts

* [charts][components] more ts iterations

* [chart][client] assert FormData type

* [chart][deps] try adding newest @types/react

* [chart][components][ts] fix reactify prop TS

* [chart] lint

* [chart][ts] lint #2, move @types to deps not dev-deps

* [chart][jest] fix tests

* [chart][tests] up branch coverage

* [chart][ts][test] null => undefined

* [chart][tests] hundo

* [chart][tests] update name

* [chart][ts] ChartClient type fixes
2021-11-26 11:44:38 +08:00
..
src [build] fix typescript builds (#56) 2021-11-26 11:44:38 +08:00
test [build] fix typescript builds (#56) 2021-11-26 11:44:38 +08:00
types [build] fix typescript builds (#56) 2021-11-26 11:44:38 +08:00
.eslintrc add Typescript support + convert @superset-ui/connection to Typescript (#41) 2021-11-26 11:44:35 +08:00
package.json v0.7.2 2021-11-26 11:44:37 +08:00
README.md add badges 2021-11-26 11:44:32 +08:00

@superset-ui/connection

Version David (path)

Connection modules for Superset:

  • SupersetClient requests and authentication
  • (future) i18n locales and translation

SupersetClient

The SupersetClient handles all client-side requests to the Superset backend. It can be configured for use within the Superset application, or used to issue CORS requests in other applications. At a high-level it supports:

  • CSRF token authentication
    • a token may be passed at configuration time, else the client will handle fetching and passing the token in all subsequent requests.
    • queues requests in the case that another request is made before the token is received.
    • it checks for a token before every request, and will fail if no token was received or if it has expired. In either case the user should be directed to re-authenticate.
  • supports GET and POST requests (no PUT or DELETE)
  • timeouts
  • query aborts through the AbortController API

Example usage

// appSetup.js
import { SupersetClient } from `@superset-ui/connection`;
// or import SupersetClient from `@superset-ui/connection/lib|esm/SupersetClient`;

SupersetClient.configure(...clientConfig);
SupersetClient.init(); // CSRF auth, can also chain `.configure().init();

// anotherFile.js
import { SupersetClient } from `@superset-ui/connection`;

SupersetClient.post(...requestConfig)
  .then(({ request, json }) => ...)
  .catch((error) => ...);

API

Client Configuration

The following flags can be passed in the client config call SupersetClient.configure(...clientConfig);

  • protocol = 'http:'
  • host
  • headers
  • credentials = 'same-origin' (set to include for non-Superset apps)
  • mode = 'same-origin' (set to cors for non-Superset apps)
  • timeout
  • csrfToken you can configure the client with a CSRF token at configuration time, else the client will attempt to fetch this before any other requests are issued
Per-request Configuration

The following flags can be passed on a per-request call SupersetClient.get/post(...requestConfig);

  • url or endpoint
  • headers
  • body
  • timeout
  • signal (for aborting, from const { signal } = (new AbortController()))
  • for POST requests
    • postPayload (key values are added to a new FormData())
    • stringify whether to call JSON.stringify on postPayload values
Request aborting

Per-request aborting is implemented through the AbortController API:

import { SupersetClient } from '@superset-ui/connection';
import AbortController from 'abortcontroller-polyfill';

const controller = new AbortController();
const { signal } = controller;

SupersetClient.get({ ..., signal }).then(...).catch(...);

if (IWantToCancelForSomeReason) {
  signal.abort(); // Promise is rejected, request `catch` is invoked
}

Development

@data-ui/build-config is used to manage the build configuration for this package including babel builds, jest testing, eslint, and prettier.