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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@automators/datamaker

v1.1.0

Published

The official Node.js / Typescript library for the DataMaker API

Readme

@automators/datamaker

The official TypeScript / Node.js client for the DataMaker API.

Note on naming. The unscoped datamaker package on npm is an unrelated project by another author. This package is the official one and is always @automators/datamaker.

npm install @automators/datamaker

Node 18+, and it also runs on Deno, Bun, browsers and edge runtimes. Zero runtime dependencies: it uses the platform fetch.

Usage

import { DataMaker } from "@automators/datamaker";

const dm = new DataMaker({ apiKey: process.env.DATAMAKER_API_KEY });

const sets = await dm.sets.list();

const saved = await dm.sets.save({
  name: "golden customers",
  data: [{ id: 1, name: "Ada Lovelace" }],
});

const { mappings, missing } = await dm.keymaps.lookup({
  mapName: "sap-material-migration",
  object: "Material",
  oldKeys: ["OLD-1", "OLD-2"],
});

apiKey falls back to DATAMAKER_API_KEY and baseURL to DATAMAKER_API_URL - the same variables datamaker-py reads, so one configured machine works with both SDKs.

Resources

| Client | Methods | | --- | --- | | dm.projects | list get create update delete | | dm.templates | list get create update delete | | dm.sets | list get create update delete save | | dm.keymaps | list put lookup entries delete | | dm.maskingPolicies | list get create update delete | | dm.plans | list get update delete |

Method names mirror datamaker-py, so one set of docs covers both.

For anything not yet wrapped, dm.http is the typed transport:

const rows = await dm.http.get<MyShape>("/scenarios", { query: { projectId } });

Errors

A non-2xx throws DataMakerError, carrying the status and the parsed body rather than a flattened string, because callers branch on both:

import { DataMakerError } from "@automators/datamaker";

try {
  await dm.sets.delete(id);
} catch (error) {
  if (error instanceof DataMakerError && error.status === 409) {
    // the set is locked - unlock it first
  }
}

401 means the key is wrong, 403 that it is right but lacks a permission, 409 that the resource is locked.

Types are generated, not written

Every type comes from the API's own OpenAPI document, generated into src/generated/schema.ts:

pnpm generate        # regenerate from spec/openapi.json
pnpm generate:check  # fail if the committed types are stale (CI runs this)

This is deliberate. The previous release of this package sat at v0.2.0 for two and a half years while the API moved on, because its types were hand-copied and nothing ever failed when they diverged. Do not hand-edit src/generated/.

Development

pnpm install
pnpm test
pnpm lint
pnpm build

The tests never reach a real API: they inject a fetch stub and assert on the request the SDK builds.