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

pauth-js

v0.1.0

Published

Official JavaScript/TypeScript SDK for pauth.me - Phone-based authentication API

Downloads

94

Readme

pauth-js

Official JavaScript/TypeScript SDK for pauth.me

License: MIT Node.js TypeScript

Installation

npm install github:pauth-me/pauth-js

Quick Start

import { PauthClient } from 'pauth-js';

const client = new PauthClient({ apiKey: 'test_your-api-key' });
const result = await client.verify('+819012345678');
console.log(result.pin); // "1234"(サンドボックスでは約2秒後に返る)

Sandbox Mode

  • APIキーが test_ で始まる場合、サンドボックスモードで動作
  • 実際に着信はせず、約2秒後に自動でPIN=1234が返る
  • pauth.me でサインアップすれば無料枠(100回/月)で利用可能

API Reference

new PauthClient(options)

| Option | Type | Required | Description | |--------|------|----------|-------------| | apiKey | string | Yes | Your API key (test_ prefix for sandbox) | | baseUrl | string | No | Base URL (default: https://pauth.me) |

client.authenticate(): Promise<string>

APIキーでBearer トークンを取得します。トークンはクライアント内部でキャッシュされるため、通常は直接呼び出す必要はありません。

client.entry(callerNumber, signal?): Promise<EntryEvent>

SSEストリームで着信PINを待ち受けます。

| Parameter | Type | Description | |-----------|------|-------------| | callerNumber | string | 電話番号(国際形式: +819012345678) | | signal | AbortSignal | (optional) キャンセル用シグナル |

Returns: EntryEvent{ expires_in: number, callerd_number: string, pin: string | null }

client.apply(callerNumber, pin): Promise<boolean>

PINを照合します。

| Parameter | Type | Description | |-----------|------|-------------| | callerNumber | string | 電話番号(国際形式) | | pin | string | PIN コード |

Returns: true (認証成功) / false (PIN不一致)

client.verify(callerNumber, options?): Promise<VerifyResult>

電話番号認証を一括実行します(authenticate → entry → apply)。

| Parameter | Type | Description | |-----------|------|-------------| | callerNumber | string | 電話番号(国際形式) | | options.onStep | function | ステップ進捗コールバック | | options.signal | AbortSignal | キャンセル用シグナル |

const result = await client.verify('+819012345678', {
  onStep: (step) => console.log('Step:', step),
  // step: 'authenticating' | 'waiting_for_call' | 'verifying_pin'
});
// result: { callerNumber: string, pin: string }

Error Handling

import {
  PauthError, AuthenticationError, ConflictError,
  RateLimitError, StreamError, TimeoutError, PauthAPIError
} from 'pauth-js';

try {
  const result = await client.verify('+819012345678');
} catch (err) {
  if (err instanceof RateLimitError) {
    console.log('Rate limited. Retry after:', err.retryAfter);
  } else if (err instanceof ConflictError) {
    console.log('Duplicate request detected');
  } else if (err instanceof TimeoutError) {
    console.log('Timed out waiting for call');
  } else if (err instanceof AuthenticationError) {
    console.log('Invalid or expired API key');
  } else if (err instanceof PauthAPIError) {
    console.log('API error:', err.status, err.message);
  }
}

| Error Class | Trigger | |-------------|---------| | AuthenticationError | 無効または期限切れのAPIキー/トークン (401) | | ConflictError | 同一番号で認証が既に進行中 (409) | | RateLimitError | レート制限超過 (429)。err.retryAfter (秒) を参照 | | StreamError | SSEストリームエラー | | TimeoutError | PIN待機タイムアウト | | PauthAPIError | その他のAPIエラー。err.status でHTTPステータスを取得 |

Examples

License

MIT