15.17.15 • Published 4 months ago

@getcircuit/engine-client v15.17.15

Weekly downloads
-
License
MIT
Repository
-
Last release
4 months ago

@getcircuit/engine-client

Package for consuming the Circuit Engine API via JavaScript. Failed requests are automatically retried up to 3 times, via p-retry.

Using

Initializing

First we need to initialize the client with some important information such as:

  • the base url for the Circuit Engine API
  • a method to return the user's token, if using a private API method.
  • some environment variables.
import { createEngineClient } from '@getcircuit/engine-client'

const baseUrl = process.env.FIREBASE_EMULATOR
  ? `http://localhost:3333/rest`
  : process.env.FIREBASE_ENV !== 'production'
  ? `https://staging-api.getcircuit.com/rest`
  : `https://api.getcircuit.com/rest`

// Required
const engineClient = createEngineClient({
  baseUrl,
  // Optional. Only used for private APIs.
  getToken: () => '',
  env: {
    FIREBASE_ENV: 'production' | 'development',
  },
  // Optional error handler. Useful to log errors to better debug issues.
  onError(error) {
    trackError(error)
  },
})

Dealing with errors

The onError method can receive any kind of errors and exceptions. However, engine-client differentiates between two types of errors:

  • UnknownError
  • EngineResponseError
export type UnknownError = Error & {
  origin: 'unknown'
  status?: number
  response?: EngineResponse
  request?: EngineRequest
}

export type EngineResponseError = Error & {
  origin: 'engine'
  status: number
  response: EngineResponseWithError<ErrorDetail>
  request: EngineRequest
}

EngineResponseErrors are dispatched whenever a API request was received and answered by the server, but something went wrong. In other words, if the status of the response is not in the 200-299 status code range. EngineResponseError are thrown to facilitate error handling via catch blocks or .catch() method. A helper utility handleEngineError is provided for running a piece of code in case if what's been thrown is an EngineResponseError.

import {
  createEngineClient,
  handleEngineError,
} from '@getcircuit/engine-client'

import type { CreateMemberErrorDetail } from '@getcircuit/engine-client'

const EngineClient = createEngineClient(/* ... */)

EngineClient.createMember(/* { ... } */)
  .catch(
    handleEngineError<CreateMemberErrorDetail>((error) => {
      // `error` is an instance of EngineResponseError<CreateMemberErrorDetail>
      // Has error.status, error.response, error.request, etc.
    }),
  )
  .catch((err) => {
    // Other errors are handled here.
  })

However, generic errors and exceptions can also happen, be it due to a malformed response, a client misconfiguration, etc. These can be caught via a usual catch block or .catch() method, but without using the handleEngineError mentioned above. While is difficult to provide relevant data to help debug generic errors, engine-client will add the response, request and status code to the error object.

To facilitate the usage with typescript, a handleUnknownError method is also provided to properly type the error object with the extra response, request, and status properties:

import {
  createEngineClient,
  handleEngineError,
  handleUnknownError,
} from '@getcircuit/engine-client'

const EngineClient = createEngineClient(/* ... */)

EngineClient.createMember(/* { ... } */)
  .catch(
    handleEngineError((error) => {
      // `error` is a EngineResponseError
      // Has error.status, error.response, error.request, etc.
    }),
  )
  .catch(
    handleUnknownError((error) => {
      // `error` is unknown
      // but may have error.status, error.response, error.request, etc.
    }),
  )

Methods

After initializing the client, we're ready to use the methods to our hearts desires.

engineClient.importQueries()
engineClient.createUser()
engineClient.createMember()
engineClient.activateUser()
engineClient.optimizePlan()
engineClient.updateStripeSubscription()
engineClient.searchAddress()
engineClient.geocodeStop()

Contributing

How it works

The createEngineClient method grabs all the exported methods of src/methods/index.ts, all of which receive a context value as their first argument, and binds them to the client's context. Think this as instantiating a new object of a certain class. However, we don' deal with the this reference, as things can get very messy with them. Instead, we create a new object for the context and then create a copy of each method bound to that object.

Simplified example:

function CreateUser(context, { email }) {
  return context.request('/createUser', { json: { email } })
}

const Methods = {
  CreateUser,
}

function createEngineClient() {
  const context = {
    request: () => {},
  }

  return {
    // this binds the first argument to the object referenced by `context`
    CreateUser: CreateUser.bind(undefined, context),
  }
}

// ...

const client = createEngineClient()

client.createUser('foo@bar.com')
14.12.2

11 months ago

10.0.0

1 year ago

14.19.0-react18.0

10 months ago

8.0.0-input.0

1 year ago

2.20.0-eng.0

1 year ago

15.12.11

5 months ago

14.3.0-alpha.7

11 months ago

15.12.10

5 months ago

2.22.1

1 year ago

2.22.0

1 year ago

15.12.12

5 months ago

14.3.0-alpha.6

11 months ago

14.23.0

10 months ago

14.57.2

8 months ago

15.6.9-potato.1

5 months ago

14.57.4

8 months ago

14.57.3

8 months ago

14.1.1-alpha.1

12 months ago

14.57.8

8 months ago

2.22.3

1 year ago

2.22.2

1 year ago

15.8.1

5 months ago

15.8.2

5 months ago

14.11.0

11 months ago

14.13.0-pow.0

11 months ago

14.45.3

8 months ago

2.21.0

1 year ago

2.21.2

1 year ago

2.21.1

1 year ago

14.1.4-wow.0

12 months ago

12.15.0-pow.0

1 year ago

14.45.0

8 months ago

10.2.0-kiwi.0

1 year ago

8.4.0-yam.0

1 year ago

2.21.4

1 year ago

10.2.0

1 year ago

2.21.3

1 year ago

14.25.0

10 months ago

14.25.1

9 months ago

2.20.0

1 year ago

2.20.1

1 year ago

12.3.0-cells.0

1 year ago

2.18.0-eng.0

2 years ago

15.6.9-potato.0

5 months ago

11.0.0

1 year ago

14.13.2

11 months ago

6.0.1

1 year ago

6.0.0

1 year ago

15.6.1

5 months ago

15.6.0

5 months ago

15.6.3

5 months ago

14.1.5-wow.0

12 months ago

2.17.3-beta.0

2 years ago

14.13.0

11 months ago

12.7.0-rows.0

1 year ago

12.13.1

1 year ago

13.4.5-pow.0

1 year ago

13.17.0

12 months ago

14.16.0-react18.0

10 months ago

14.18.0-react18.0

10 months ago

14.3.0-read-only.0

11 months ago

15.16.2-leo.0

4 months ago

2.24.3-input.0

1 year ago

2.21.3-yam.3.0

1 year ago

12.5.0-rows.0

1 year ago

14.17.0-pow.0

10 months ago

14.60.0-pow.0

8 months ago

14.54.2

8 months ago

15.17.8

4 months ago

15.17.9

4 months ago

15.17.6

4 months ago

15.17.7

4 months ago

15.17.4

4 months ago

15.1.0-dws.0

6 months ago

15.17.5

4 months ago

12.0.0

1 year ago

15.17.2

4 months ago

15.17.3

4 months ago

15.17.0

4 months ago

15.17.1

4 months ago

14.42.0

9 months ago

14.65.3

7 months ago

8.2.0-yam.0

1 year ago

7.1.0-inputs.0

1 year ago

14.1.3-rdx.0

12 months ago

13.5.0-yam.0

1 year ago

14.30.0

9 months ago

13.0.0

1 year ago

8.2.0-input.0

1 year ago

2.20.2-yam.1.0

1 year ago

7.1.0-gamma.0

1 year ago

14.29.0-potato.0

9 months ago

14.4.0-alpha.0

11 months ago

15.2.0-pow.0

6 months ago

14.64.1

7 months ago

15.18.0-banana.0

4 months ago

15.18.0-banana.1

4 months ago

14.33.1

9 months ago

14.33.2

9 months ago

14.33.0

9 months ago

12.2.5

1 year ago

14.67.5

7 months ago

12.2.7

1 year ago

14.49.0-zoning.0

8 months ago

12.2.8

1 year ago

14.67.6

7 months ago

12.16.0

1 year ago

12.16.2

1 year ago

12.2.0

1 year ago

12.2.9

1 year ago

14.67.1

7 months ago

14.44.0

9 months ago

15.6.8-intl.0

5 months ago

15.18.0-leo.0

4 months ago

15.2.0-count.0

6 months ago

12.17.4

1 year ago

12.17.0

1 year ago

12.7.0-yam.0

1 year ago

13.5.0-pow.0

1 year ago

12.17.0-pow.0

1 year ago

14.20.0

10 months ago

13.13.1

12 months ago

14.66.0

7 months ago

14.43.0

9 months ago

15.6.0-pow.0

6 months ago

2.21.2-yam.2.0

1 year ago

13.14.0-pow.0

12 months ago

13.3.0

1 year ago

14.1.1

12 months ago

8.1.0

1 year ago

2.19.0

2 years ago

15.13.6

4 months ago

8.1.1

1 year ago

15.13.4

4 months ago

15.13.5

4 months ago

15.13.2

5 months ago

15.13.3

5 months ago

15.13.0

5 months ago

15.13.1

5 months ago

12.18.0-pow.0

1 year ago

14.13.0-cms.2

11 months ago

14.13.0-cms.1

11 months ago

14.13.0-cms.0

11 months ago

14.2.6-pow.0

11 months ago

15.0.2

6 months ago

15.0.0

6 months ago

15.17.14

4 months ago

13.4.4

1 year ago

15.17.13

4 months ago

15.17.15

4 months ago

13.4.0

1 year ago

8.3.1

1 year ago

14.2.4

11 months ago

12.3.0-clx.0

1 year ago

12.3.0

1 year ago

2.19.1-beta.0

1 year ago

15.12.0-slct.0

5 months ago

8.2.0

1 year ago

2.18.0

2 years ago

15.17.10

4 months ago

15.17.12

4 months ago

15.17.11

4 months ago

15.14.0

4 months ago

9.0.0

1 year ago

8.1.0-yam.0

1 year ago

15.18.0-alpha.0

4 months ago

15.18.0-alpha.1

4 months ago

12.15.0-yam.0

1 year ago

15.18.0-alpha.2

4 months ago

12.1.0-cell.0

1 year ago

14.21.0-tll.0

10 months ago

14.52.0

8 months ago

12.6.3

1 year ago

12.6.0

1 year ago

2.17.2

2 years ago

2.17.0

2 years ago

2.17.1

2 years ago

15.15.2

4 months ago

15.15.0

4 months ago

15.15.1

4 months ago

7.0.0-kiwi.6

1 year ago

15.9.0-sd.0

5 months ago

12.12.0-leo.0

1 year ago

15.6.11

5 months ago

15.6.12

5 months ago

15.7.0-pow.0

5 months ago

15.6.2-pow.0

5 months ago

14.0.0

12 months ago

14.0.1

12 months ago

14.0.2

12 months ago

15.11.0-leo.0

5 months ago

14.62.8

7 months ago

12.2.5-kiwi.0

1 year ago

12.5.0-row.0

1 year ago

2.16.1

2 years ago

2.16.2

2 years ago

15.16.1

4 months ago

2.16.0

2 years ago

15.16.0

4 months ago

12.2.10

1 year ago

14.62.0

8 months ago

12.3.0-cell.0

1 year ago

14.16.0

10 months ago

15.3.0

6 months ago

13.7.2

1 year ago

14.5.0

11 months ago

14.27.0

9 months ago

14.27.1

9 months ago

14.27.2

9 months ago

15.7.0-select.0

5 months ago

14.60.0-ttp.0

8 months ago

15.11.4-potato.0

5 months ago

15.6.5-pow.0

5 months ago

9.0.1-kiwi.0

1 year ago

9.0.1-kiwi.1

1 year ago

14.45.1-pow.0

8 months ago

2.21.0-eng.0

1 year ago

2.21.0-eng.1

1 year ago

15.6.8-pow.0

5 months ago

6.2.0

1 year ago

2.20.0-yam.0

1 year ago

7.0.0

1 year ago

7.2.0-yam.0

1 year ago

14.26.1

9 months ago

14.26.2

9 months ago

14.26.0

9 months ago

12.3.0-cll.0

1 year ago

15.10.2

5 months ago

12.12.0-pim.0

1 year ago

12.9.0-rows.0

1 year ago

6.3.0-input.0

1 year ago

9.1.0-badge.0

1 year ago

14.33.0-shopify.0

9 months ago

15.1.1

6 months ago

2.25.0

1 year ago

13.4.0-yam.0

1 year ago

2.20.2-gamma.0

1 year ago

2.24.1-input.0

1 year ago

13.5.1-pow.0

1 year ago

7.1.3

1 year ago

2.22.0-yam.5.0

1 year ago

14.29.0

9 months ago

8.3.0-popover.0

1 year ago

12.4.0-row.0

1 year ago

14.3.0-yam.1.0

11 months ago

15.2.0

6 months ago

14.18.0-pow.0

10 months ago

2.24.0

1 year ago

2.24.2

1 year ago

14.70.0

6 months ago

14.12.0-yam.0

11 months ago

7.1.0-alpha.0

1 year ago

8.0.0

1 year ago

13.5.0-yam.1.0

1 year ago

15.12.5

5 months ago

12.3.0-ico.0

1 year ago

15.12.6

5 months ago

15.12.1

5 months ago

15.12.2

5 months ago

2.21.2-alpha.0

1 year ago

2.23.0

1 year ago

15.12.0

5 months ago

14.1.3-pow.0

12 months ago

14.27.0-export.0

9 months ago

2.15.0

2 years ago

2.15.1

2 years ago

2.14.4

2 years ago

2.12.1-kiwi.0

2 years ago

2.14.3

2 years ago

2.14.1

2 years ago

2.14.2

2 years ago

2.14.0

2 years ago

2.13.4

2 years ago

2.13.2

2 years ago

2.13.3

2 years ago

2.13.0

2 years ago

2.13.1

2 years ago

2.12.1-kiwi.3

2 years ago

2.12.1-kiwi.1

2 years ago

2.12.1-kiwi.2

2 years ago

2.12.1

2 years ago

2.12.2

2 years ago

2.11.0

2 years ago

2.11.1

2 years ago

2.8.1

2 years ago

2.8.0

2 years ago

2.7.6-alpha.0

2 years ago

2.9.2

2 years ago

2.9.1

2 years ago

2.9.4

2 years ago

2.9.3

2 years ago

2.9.5

2 years ago

2.11.2

2 years ago

2.10.1

2 years ago

2.10.2

2 years ago

2.10.0

2 years ago

2.8.3

2 years ago

2.8.2

2 years ago

2.8.4

2 years ago

2.10.3

2 years ago

2.10.4

2 years ago

2.7.4

2 years ago

2.7.6

2 years ago

2.7.5

2 years ago

2.7.8

2 years ago

2.7.7

2 years ago

2.7.9

2 years ago

2.12.0

2 years ago

2.9.0

2 years ago

2.6.2-kiwi.0

2 years ago

2.6.2-potato.0

2 years ago

2.6.2-potato.1

2 years ago

2.6.2-potato.2

2 years ago

2.7.3

2 years ago

2.7.0

2 years ago

2.7.2

2 years ago

2.7.1

2 years ago

2.7.4-map.2

2 years ago

2.7.4-map.0

2 years ago

2.7.4-map.1

2 years ago

2.6.1

2 years ago

2.6.0

2 years ago

2.5.0

2 years ago

2.4.1

2 years ago

2.4.0

2 years ago

2.4.3

2 years ago

2.4.2

2 years ago

2.4.5

2 years ago

2.4.4

2 years ago

2.4.6

2 years ago

2.2.1

2 years ago

2.2.0

2 years ago

2.2.3

2 years ago

2.2.2

2 years ago

2.2.5

2 years ago

2.2.4

2 years ago

2.2.6

2 years ago

2.3.0

2 years ago

2.1.1

2 years ago

2.3.2

2 years ago

2.3.1

2 years ago

2.3.4

2 years ago

2.3.3

2 years ago

2.3.6

2 years ago

2.3.5

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

0.2.3-alpha.3

2 years ago

0.2.3-alpha.0

2 years ago

2.0.2

2 years ago

0.2.3-alpha.6

2 years ago

0.2.3-alpha.5

2 years ago

1.0.2-alpha.0

2 years ago

0.2.3-alpha.9

2 years ago

2.0.0

2 years ago

0.2.3-alpha.8

2 years ago

1.0.2-alpha1.0

2 years ago

1.0.2-alpha1.2

2 years ago

0.3.0

2 years ago

2.0.3-kiwi.0

2 years ago

2.0.3-kiwi.1

2 years ago

0.4.1-alpha.3

2 years ago

0.4.1-alpha.2

2 years ago

0.4.1-alpha.1

2 years ago

1.0.1-alpha.0

2 years ago

0.4.1-alpha.7

2 years ago

0.4.1-alpha.6

2 years ago

0.4.1-alpha.5

2 years ago

0.4.1-alpha.4

2 years ago

2.1.0

2 years ago

0.4.1-alpha.8

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.4.0

2 years ago

0.2.2

2 years ago

0.0.23

2 years ago

0.0.24

2 years ago

0.0.25

2 years ago

0.1.0

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.0.20

2 years ago

0.0.21

2 years ago

0.0.22

2 years ago

0.0.19

2 years ago

0.0.18

3 years ago

0.0.15

3 years ago

0.0.16

3 years ago

0.0.17

3 years ago

0.0.14

3 years ago

0.0.13

3 years ago

0.0.10

3 years ago

0.0.11

3 years ago

0.0.12

3 years ago

0.0.9

3 years ago

0.0.8

3 years ago

0.0.7

3 years ago

0.0.5

3 years ago

0.0.6

3 years ago

0.0.4

3 years ago

0.0.2

3 years ago