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

@comms-id/dfat-sanctions-consolidated-list

v0.3.2

Published

Typed client for the Comms.ID Sanctions API: screening of one individual, entity or vessel against the Australian Sanctions Consolidated List

Readme

@comms-id/sanctions

Typed client for the Comms.ID Sanctions API (https://api.comms.id/dfat-sanctions-consolidated-list/v1): screening of one individual, entity or vessel against the Australian Sanctions Consolidated List.

src/ is generated from the Sanctions contract (packages/dfat-consolidated-list/openapi/dfat-sanctions-consolidated-list.v1.json) by @comms-id/forge-transformers. Do not edit it: change the contract and run pnpm --filter @comms-id/forge-transformers generate.

import { createDfatSanctionsConsolidatedListClient } from "@comms-id/dfat-sanctions-consolidated-list/server";

const client = createDfatSanctionsConsolidatedListClient({
  clientId: process.env.COMMS_ID_CLIENT_ID!,
  privateJwk: JSON.parse(process.env.COMMS_ID_PRIVATE_JWK!),
});
const reply = await client.screen({"type": "Individual", "name": "Example Person", "dateOfBirth": "1970-06-15"});

Operations

  • screen: Screen one individual, entity or vessel against the Australian Sanctions Consolidated List (DFAT): exact names and aliases, optionally narrowed by date and place of birth. The reply carries every possible match with its evidence, the list generation and its freshness. It refuses to answer from a stale list.

Every operation is a read, safe to repeat, and is retried after a retryable failure. A reply that is not a match is one of the outcomes of the reply convention: an error with outcomeOf(error) of no-match, source-unavailable or failed; an outage is never a "no match".

Test it first

createDfatSanctionsConsolidatedListFixtureClient() from @comms-id/dfat-sanctions-consolidated-list/fixtures answers from the contract's own examples with no network and says so (fixture: true). To call the TEST service (synthetic replies, your development app's key), pass environment: "test"; going live changes only the environment and the key.

Server only

Sanctions screening is not open to a browser holding no credential: call it from your own server, or through a relay (@comms-id/relay). ./browser takes your relay route and never signs.

COMMS_ID_PRIVATE_JWK is an ML-DSA-87 private JWK (kty AKP, with priv and pub). The server entry needs Node.js 24.7 or later, or a Cloudflare Worker with the compatibility flag webcrypto_modern_algorithms.

Entries: . (types and errors, safe in a browser), ./server (signs each call), ./browser (your relay route; never signs), ./fixtures (LOCAL FIXTURES, no network), ./descriptor (what @comms-id/relay may forward).

LICENSE is the consumer client licence.

The form

@comms-id/dfat-sanctions-consolidated-list/controller is the headless controller of a sanctions screening form: values, checks, one explicit submit, the answer, errors and retry, with the accessibility attributes of a labelled form. It has no framework and no DOM. @comms-id/dfat-sanctions-consolidated-list-react (a hook and a component) and <comms-id-dfat-sanctions-consolidated-list> (a web element) run on it, and so can your own UI.

import { createDfatSanctionsConsolidatedListController } from "@comms-id/dfat-sanctions-consolidated-list/controller";

const controller = createDfatSanctionsConsolidatedListController({ client, onResult: (record, timing) => console.log(record, timing.ms) });
controller.subscribe(() => render(controller.getState()));
controller.setValue("name", "…");
controller.submit();

src/local/profile.ts is the only product-specific part: it lists the fields, checks the values, prepares the call and says the reply in plain words. Everything else is generated. Like the client itself, the form is for your server or your relay: screening is never open to a browser that holds no credential.