Node.js library for the Lithic API.

Overview

Lithic Node API Library [beta]

The Lithic Node library provides convenient access to the Lithic REST API from applications written in server-side JavaScript. It includes TypeScript definitions for all request params and response fields.

Status

This package is in beta. Its internals and interfaces are not stable and subject to change without a major semver bump; please reach out if you rely on any undocumented behavior.

We are keen for your feedback; please email us at [email protected] or open an issue with questions, bugs, or suggestions.

Installation

npm install --save lithic
# or
yarn add lithic

Usage

import Lithic from 'lithic';

const lithic = new Lithic(process.env.LITHIC_API_KEY, {
  environment: 'sandbox', // or 'production'
});

async function main() {
  const card = await lithic.cards.create({
    type: 'SINGLE_USE',
  });

  console.log(card.token);
}
main();

Usage with TypeScript

Importing, instantiating, and interacting with the library are the same as above. If you like, you may reference our types directly:

import Lithic from 'lithic';

const lithic = new Lithic(process.env.LITHIC_API_KEY, {
  environment: 'sandbox', // or 'production'
});

async function main() {
  const params: Lithic.CardCreateParams = { type: 'SINGLE_USE' };

  const card: Lithic.Card = await lithic.cards.create(params);

  const funding: Lithic.Card.Funding['type'] = card.funding;
  console.log(funding.type); // TS knows this is 'DEPOSITORY_CHECKING' | 'DEPOSITORY_SAVINGS'
}
main();

Documentation for each method, request param, and response field are available in docstrings and will appear on hover in most modern editors.

Handling errors

When the library is unable to connect to the API, or if the API returns a non-success status code (i.e., 4xx or 5xx response), a subclass of APIError will be thrown:

async function main() {
  const card = await lithic.cards.create({ type: 'an_incorrect_type' }).catch((err) => {
    if (err instanceof Lithic.APIError) {
      console.log(err.status); // 400
      console.log(err.name); // BadRequestError
      console.log(err.error?.message); // Invalid parameter(s): type
      console.log(err.error?.debugging_request_id); // 94d5e915-xxxx-4cee-a4f5-2xd6ebd279ac
      console.log(err.headers); // {server: 'nginx', ...}
    }
  });
}
main();

Error codes are as followed:

Status Code Error Type
400 BadRequestError
401 AuthenticationError
403 PermissionDeniedError
404 NotFoundError
422 UnprocessableEntityError
429 RateLimitError
>=500 InternalServerError
N/A APIConnectionError

Retries

Certain errors will be automatically retried 2 times by default, with a short exponential backoff. Connection errors (for example, due to a network connectivity problem), 409 Conflict, 429 Rate Limit, and >=500 Internal errors will all be retried by default.

You can use the maxRetries option to configure or disable this:

// Configure the default across the library:
const lithic = new Lithic(process.env.LITHIC_API_KEY, {
  maxRetries: 0, // default is 2
});

// Or, configure this per-request:
lithic.cards.list({ page_size: 5 }, {
  maxRetries: 5
});

Timeouts

Requests time out after 60 seconds by default. You can configure this with a timeout option:

// Configure the default across the library:
const lithic = new Lithic(process.env.LITHIC_API_KEY, {
  timeout: 20 * 1000, // 20 seconds (default is 60s)
});

// Or, configure per-request:
lithic.cards.list({ page_size: 5 }, {
  timeout: 5 * 1000
});

On timeout, an APIConnectionTimeoutError is thrown.

Note that request which time out will be retried twice by default.

Auto-pagination

List methods in the Lithic API are paginated. Use for await … of syntax to iterate through items across all pages.

async function fetchAllCards(params) {
  const allCards = [];
  // Automatically fetches more pages as needed.
  for await (const card of lithic.cards.list()) {
    allCards.push(card);
  }
  return allCards;
}

Configuring an HTTP(S) Agent (e.g., for proxies)

By default, this library uses a stable agent for all http/https requests to reuse TCP connections, eliminating many TCP & TLS handshakes and shaving around 100ms off most requests.

If you would like to disable or customize this behavior, for example to use the API behind a proxy, you can pass an httpAgent which is used for all requests (be they http or https), for example:

import http from 'http';
import HttpsProxyAgent from 'https-proxy-agent';

const lithic = new Lithic(process.env.LITHIC_API_KEY, {
  httpAgent: new HttpsProxyAgent(process.env.PROXY_URL),
});

// Can override per-request
lithic.cards.create(params, {
  baseURL: 'http://localhost:8080/test-api',
  httpAgent: new http.Agent({ keepAlive: false }),
});

Requirements

Node.js version 12 or higher.

If you are interested in other runtime environments, please open or upvote an issue on Github.

You might also like...

Node.js library for creating bots and sending/receiving messages using the Whatsapp Cloud API

whatsapp-cloud-api whatsapp-cloud-api is a Node.js library for creating bots and sending/receiving messages using the Whatsapp Cloud API. Contains bui

Jan 2, 2023

A unofficial Node.js library for HoYoWiki API, can get the details of Genshin Impact items!

HoYoWiki API (Node.js Library) English | 繁體中文 | 简体中文 A unofficial Node.js library for HoYoWiki API, can get the details of Genshin Impact items! Repor

Jul 17, 2022

Lightweight universal Cloudflare API client library for Node.js, Browser, and CF Workers

Cloudflare API Client Lightweight universal HTTP client for Cloudflare API based on Fetch API that works in Node.js, browser, and CF Workers environme

Nov 13, 2022

Node.js library for the Modern Treasury API.

ModernTreasury Node API Library The ModernTreasury Node library provides convenient access to the ModernTreasury REST API from applications written in

Nov 4, 2022

WPPConnect/WA-JS API SERVER is a small api server to provide url preview for @wppconnect/wa-js library

WPPConnect/WA-JS API SERVER WPPConnect/WA-JS API SERVER is a small api server to provide url preview for @wppconnect/wa-js library Our online channels

Aug 11, 2022

A JavaScript library built on top of the Faker.JS library. It generates massive amounts of fake data in the browser and node.js.

Blaver - generate massive amounts of fake data in the browser and node.js Blaver is a JavaScript library built on top of the Faker.JS library. It gene

Dec 30, 2022

Node-cli-starter - Basic starter kit for building Node CLI applications with TypeScript.

node-cli-starter Minimal starter kit for building Node CLI applications with TypeScript. Getting Started To get started clone repo locally and run npm

May 17, 2022

Inter Process Communication Module for node supporting Unix sockets, TCP, TLS, and UDP. Giving lightning speed on Linux, Mac, and Windows. Neural Networking in Node.JS

Inter Process Communication Module for node supporting Unix sockets, TCP, TLS, and UDP. Giving lightning speed on Linux, Mac, and Windows. Neural Networking in Node.JS

Inter Process Communication Module for node supporting Unix sockets, TCP, TLS, and UDP. Giving lightning speed on Linux, Mac, and Windows. Neural Networking in Node.JS

Dec 9, 2022

Node js package makes creating node jd dependincies files like Controllers,Entities and Repositories easier by executing a few instructions

Node js package makes creating node jd dependincies files like Controllers,Entities and Repositories easier by executing a few instructions

Nodejs Studio Node js package makes creating node js project dependincies files like Controllers,Entities and Repositories easier by executing a few i

Oct 12, 2022
Comments
  • Not being able to use with Serverless framework (SST)

    Not being able to use with Serverless framework (SST)

    I am trying to use this library on a Serverless framework project with SST: https://sst.dev/ and fails with a simple call like const cards = await lithic.cards.list() to my sandbox account.

    Basically, I cannot make any request and always get this error: APIConnectionError: Connection error. Getting the output to console:

       cause: TypeError: this.getRequestClient(...).fetch is not a function
    

    My setup:

    • Using typescript
    • Node version: v14.18.1
    • Dependencies:
    "devDependencies": {
      "@serverless-stack/cli": "^1.12.4",
      "@serverless-stack/resources": "^1.12.4",
      "@tsconfig/node16": "^1.0.3",
      "aws-cdk-lib": "2.32.0",
      "typescript": "^4.8.3",
      "vitest": "^0.23.2"
    },
    "workspaces": [
      "services"
    ],
    "dependencies": {
      "aws-sdk": "^2.1213.0",
      "kysely": "^0.21.6",
      "kysely-data-api": "^0.1.2",
      "lithic": "^0.8.0"
    }
    

    Any help on solving this issue will be much appreciated

    opened by cesaraugustogarcia 8
  • Issue when deploying to Firebase

    Issue when deploying to Firebase

    I'm getting the following error when trying to deploy to Firebase.

    " Error: Error parsing triggers: Cannot find module './core' Require stack:

    • .../functions/node_modules/lithic/dist/cjs/index.js "

    The reference to core.ts is off. Can you help with this?

    opened by vetribalaji 2
Releases(v0.7.1)
Owner
Lithic
Developer tools for modern card issuing
Lithic
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
This is a vanilla Node.js rest API created to show that it is possible to create a rest API using only vanilla Node.js

This is a vanilla Node.js rest API created to show that it is possible to create a rest API using only vanilla Node.js. But in most cases, I would recommend you to use something like Express in a production project for productivity purposes.

Eduardo Dantas 7 Jul 19, 2022
Node 18's node:test, as a node module

node-core-test This is a user-land port of node:test, the experimental test runner introduced in Node.js 18. This module makes it available in Node.js

Julian Gruber 62 Dec 15, 2022
Apilytics for Node.js - Easy API analytics for Node backends

apilytics-node Apilytics is a service that lets you analyze operational, performance and security metrics from your APIs without infrastructure-level

Apilytics 9 Sep 2, 2022
Spin node create spin api for node

Links Contract api JS api @spinfi/core @spinfi/node @spinfi/node Spin node create spin api for node How to install yarn add @spinfi/node How to init i

Spin 6 Oct 18, 2022
A Weather API project inspired by The Ultimate API Challenge / Weather API.

Weather API Project A Weather API project inspired by The Ultimate API Challenge / Weather API. Tech Stack: React.js Tailwind Axios Inspiration The Pr

Franziska 1 Dec 29, 2021
This project is built with JavaScript, Webpack, HTML & CSS, Leaderboard api. When user clicks on Refresh button it hits the api and responds with the data, The user can also post data to the api

leaderboad Description the project. this project is about the leaderboad i did during Microverse to build a website for adding Data to the API and fet

Emmanuel Moombe 4 May 30, 2022
Official Node.js client library for Devzat plugin API

Devzat plugin API client for Node.js This NPM package allows you to build Devzat plugins/bots with JavaScript/TypeScript. See example/index.ts for a f

Benjamin Smith 2 Apr 26, 2022
Node.js library for the MVola API

MVola Node.js Library The MVola Node library provides convenient access to the MVola API from applications written in server-side Javascript ?? Instal

Tsiry Sandratraina 39 Aug 23, 2022