2018-10-31 13:14:59 -04:00
|
|
|
## @superset-ui/connection
|
2018-09-07 21:36:47 -04:00
|
|
|
|
2018-10-31 18:25:15 -04:00
|
|
|
[![Version](https://img.shields.io/npm/v/@superset-ui/connection.svg?style=flat)](https://img.shields.io/npm/v/@superset-ui/connection.svg?style=flat-square)
|
|
|
|
[![David (path)](https://img.shields.io/david/apache-superset/superset-ui.svg?path=packages%2Fsuperset-ui-connection&style=flat-square)](https://david-dm.org/apache-superset/superset-ui?path=packages/superset-ui-connection)
|
2018-09-07 21:36:47 -04:00
|
|
|
|
2018-10-31 13:14:59 -04:00
|
|
|
Connection modules for Superset:
|
2018-09-07 21:36:47 -04:00
|
|
|
|
|
|
|
- `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
|
2018-10-18 20:53:05 -04:00
|
|
|
- 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.
|
2018-09-07 21:36:47 -04:00
|
|
|
- supports `GET` and `POST` requests (no `PUT` or `DELETE`)
|
|
|
|
- timeouts
|
|
|
|
- query aborts through the `AbortController` API
|
|
|
|
|
|
|
|
#### Example usage
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
// appSetup.js
|
2018-10-31 13:14:59 -04:00
|
|
|
import { SupersetClient } from `@superset-ui/connection`;
|
|
|
|
// or import SupersetClient from `@superset-ui/connection/lib|esm/SupersetClient`;
|
2018-09-07 21:36:47 -04:00
|
|
|
|
|
|
|
SupersetClient.configure(...clientConfig);
|
|
|
|
SupersetClient.init(); // CSRF auth, can also chain `.configure().init();
|
|
|
|
|
|
|
|
// anotherFile.js
|
2018-10-31 13:14:59 -04:00
|
|
|
import { SupersetClient } from `@superset-ui/connection`;
|
2018-09-07 21:36:47 -04:00
|
|
|
|
|
|
|
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);`
|
|
|
|
|
2018-10-18 20:53:05 -04:00
|
|
|
- `protocol = 'http:'`
|
2018-09-07 21:36:47 -04:00
|
|
|
- `host`
|
|
|
|
- `headers`
|
|
|
|
- `credentials = 'same-origin'` (set to `include` for non-Superset apps)
|
|
|
|
- `mode = 'same-origin'` (set to `cors` for non-Superset apps)
|
|
|
|
- `timeout`
|
2018-10-18 20:53:05 -04:00
|
|
|
- `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
|
2018-09-07 21:36:47 -04:00
|
|
|
|
|
|
|
##### 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:
|
|
|
|
|
|
|
|
```javascript
|
2018-10-31 13:14:59 -04:00
|
|
|
import { SupersetClient } from '@superset-ui/connection';
|
2018-09-07 21:36:47 -04:00
|
|
|
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.
|