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

@elvatis_com/openclaw-inwx

v0.2.0

Published

OpenClaw plugin for INWX domain registrar - domain registration, DNS management, nameservers, DNSSEC, pricing

Readme

openclaw-inwx

OpenClaw plugin for INWX (InterNetworX) domain registrar automation.

It provides 23 tools for domain lifecycle operations, DNS management, DNSSEC, contact handling, WHOIS, and account checks.

Features

  • INWX DomRobot JSON-RPC integration via domrobot-client
  • Environment switch: production or ote
  • Optional 2FA login support (otpSecret)
  • Safety controls:
    • readOnly blocks all write tools
    • allowedOperations allowlist for tool-level policy
  • TypeScript strict mode

Installation

npm install @elvatis_com/openclaw-inwx

For local development:

npm install
npm run build
npm test

INWX Account Setup

  1. Create or use your INWX account.
  2. Enable API access in INWX account settings.
  3. If 2FA is enabled, provide a shared secret via otpSecret.
  4. For safe testing, use OTE environment (ote.inwx.com).

Plugin Config

{
  "username": "your-inwx-user",
  "password": "your-inwx-password",
  "otpSecret": "optional-2fa-secret",
  "environment": "ote",
  "readOnly": false,
  "allowedOperations": []
}

Tool List

Read Tools

  1. inwx_domain_check
    • INWX method: domain.check
    • Params: domain (string)
  2. inwx_domain_list
    • INWX method: domain.list
    • Params: optional filters (object)
  3. inwx_domain_info
    • INWX method: domain.info
    • Params: domain (string)
  4. inwx_domain_pricing
    • INWX method: domain.check
    • Params: domain (string) or domains (string[])
  5. inwx_nameserver_list
    • INWX method: nameserver.list or domain.info
    • Params: optional domain
  6. inwx_dns_record_list
    • INWX method: nameserver.info
    • Params: domain (string)
  7. inwx_dnssec_list
    • INWX method: dnssec.info
    • Params: optional filters
  8. inwx_contact_list
    • INWX method: contact.list
    • Params: optional filters
  9. inwx_whois
    • INWX method: domain.whois
    • Params: domain (string)
  10. inwx_account_info
    • INWX method: account.info
    • Params: none

Write Tools

  1. inwx_domain_register
    • INWX method: domain.create
    • Params: domain, period, contacts, ns
  2. inwx_domain_update
    • INWX method: domain.update
    • Params: method payload
  3. inwx_domain_delete
    • INWX method: domain.delete
    • Params: method payload
  4. inwx_domain_transfer
    • INWX method: domain.transfer
    • Params: method payload
  5. inwx_domain_renew
    • INWX method: domain.renew
    • Params: method payload
  6. inwx_nameserver_set
    • INWX method: domain.update
    • Params: domain, ns (string[])
  7. inwx_dns_record_add
    • INWX method: nameserver.createRecord
    • Params: method payload
  8. inwx_dns_record_update
    • INWX method: nameserver.updateRecord
    • Params: method payload
  9. inwx_dns_record_delete
    • INWX method: nameserver.deleteRecord
    • Params: method payload
  10. inwx_dnssec_enable
    • INWX method: dnssec.create
    • Params: method payload
  11. inwx_dnssec_disable
    • INWX method: dnssec.delete
    • Params: method payload
  12. inwx_contact_create
    • INWX method: contact.create
    • Params: method payload
  13. inwx_contact_update
    • INWX method: contact.update
    • Params: method payload

OTE Test Environment

Set:

{ "environment": "ote" }

This points the client to INWX OTE API endpoint and allows free integration testing without production costs.

Integration with openclaw-ispconfig

This plugin exports a provisionDomainWithHosting function that orchestrates both openclaw-inwx and openclaw-ispconfig into a single domain-to-hosting provisioning workflow. No hard npm dependency on openclaw-ispconfig is required - the function accepts both toolsets via dependency injection.

Provisioning workflow steps

  1. Domain check - verify availability via inwx_domain_check
  2. Domain register - register via inwx_domain_register (skipped if already taken or skipRegistration=true)
  3. Nameserver set - configure nameservers via inwx_nameserver_set
  4. Hosting provision - create site, DNS zone, mail, and database via isp_provision_site

Usage

import { buildToolset, provisionDomainWithHosting } from "@elvatis_com/openclaw-inwx";
import ispPlugin from "@elvatis_com/openclaw-ispconfig";

const inwxTools = buildToolset({
  username: "inwx-user",
  password: "inwx-pass",
  environment: "ote",
});

const ispTools = ispPlugin.buildToolset({
  apiUrl: "https://ispconfig.example.com:8080/remote/json.php",
  username: "api-user",
  password: "api-pass",
  serverId: 1,
  defaultServerIp: "1.2.3.4",
});

const result = await provisionDomainWithHosting(inwxTools, ispTools, {
  domain: "example.com",
  nameservers: ["ns1.hosting.de", "ns2.hosting.de"],
  serverIp: "1.2.3.4",
  clientName: "Acme Corp",
  clientEmail: "[email protected]",
  createMail: true,
  createDb: true,
});

console.log(result.ok);     // true if all steps succeeded
console.log(result.steps);  // per-step status tracking
console.log(result.created); // summary of what was created

Parameters

| Parameter | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | domain | string | yes | - | Domain to register and provision | | nameservers | string[] | yes | - | Nameservers to set on the domain | | serverIp | string | yes | - | Hosting server IP (for ISPConfig A record) | | clientName | string | yes | - | ISPConfig client name | | clientEmail | string | yes | - | ISPConfig client email | | createMail | boolean | no | true | Create mail domain and mailboxes | | createDb | boolean | no | true | Create database and user | | serverId | number | no | config default | ISPConfig server ID | | registrationPeriod | number | no | 1 | Domain registration period in years | | contacts | object | no | - | INWX contact IDs for registration | | skipRegistration | boolean | no | false | Skip domain registration step |

Result structure

{
  ok: boolean;            // true if all steps succeeded
  domain: string;
  steps: Array<{
    step: string;         // "domain_check" | "domain_register" | "nameserver_set" | "isp_provision"
    status: "ok" | "error" | "skipped";
    data?: unknown;
    error?: string;
  }>;
  created: {
    domainRegistered?: boolean;
    nameserversConfigured?: boolean;
    hostingProvisioned?: boolean;
    ispProvisionResult?: unknown;
  };
}

Safety

  • readOnly=true allows only:
    • domain check/list/info/pricing
    • nameserver list
    • dns record list
    • dnssec list
    • contact list
    • whois
    • account info
  • allowedOperations can restrict to explicit tool names.

Testing

Unit tests

npm test

Unit tests use mocks only and require no credentials.

OTE integration tests

Integration tests run against the INWX OTE sandbox (ote.inwx.com). OTE is safe - no real billing, no production impact.

# Set OTE credentials
export INWX_OTE_USERNAME="your-ote-user"
export INWX_OTE_PASSWORD="your-ote-pass"
export INWX_OTE_OTP="optional-2fa-secret"

# Run OTE tests
npm run test:ote

Without credentials set, the OTE suite is automatically skipped.

Test coverage:

  • Client authentication and session management
  • All read tools (account info, domain check/list/pricing, contacts)
  • Guard enforcement (readOnly, allowedOperations) on live connection
  • Input validation (empty/missing required params)
  • API error handling (invalid credentials)
  • Full buildToolset round-trip against OTE