Catalog npm
Back to packageRELEASE DETAILS

1.1.0

npm

@-xun/ctl

The personal CLI of Xunnamius

xunnamius
Published25 Mar 2024
Direct dependencies120
Transitive dependenciesNot calculated

README

Current package documentation

Black Lives Matter! Last commit timestamp Codecov Source license Monthly Downloads NPM version Uses Semantic Release!

xunnctl

This is a highly-opinionated personal tool for interacting with various disparate networks, systems, and other resources of interest to me.

These used to be several CLIs, but the time has come to bring them together!


Install

You can install this package globally:

npm install --global @-xun/ctl

And then execute the CLI:

npx xunnctl ...

Alternatively, you can use npx to execute the CLI without pre-installation:

npx @-xun/ctl ...

Usage

Be careful running commands with huge footprints (e.g. using the --apex-all-known parameter) in quick succession. Take note of the rate limits for the APIs you're invoking.

For first time usage, or if credentials are inaccessible, you will be prompted to enter your credentials, which will be saved locally. You can do this manually at any time via xunnctl config set.

From there, you can begin issuing commands. Commands are organized hierarchically, starting with the bare xunnctl command at the root. For the most up-to-date list of available commands and flags, use xunnctl ... --help.

You can also use the xctl and x aliases, e.g. x --help. Most commands also have a single-letter alias, which is always the first letter of that command.

There are many individual commands available, each with their own accepted parameters and help text. These commands also share several standard parameters which can be found in the following table:

NameTypeDefaultDescription
optional--config-pathstringOS-dependent (XDG on linux)Path to the xunnctl configuration file.
optional--helpbooleanundefinedShow command-specific help text. Cannot be used with other parameters or sub-commands.
optional--hushbooleanfalseThe program output will be somewhat less verbose than usual.
optional--quietbooleanfalseThe program output will be dramatically less verbose than usual. Implies (and takes precedence over) --hush.
optional--silentbooleanfalseThe program will not output anything at all. Implies (and takes precedence over) --quiet and --hush.

Some commands have an additional --force parameter that is required whenever an exceedingly dangerous operation is requested. While present in help text output, this parameter will not be mentioned in this documentation going forward.

Currently, the available commands are:

xunnctl (Entry Point)

Alias: xctl, x

This command is the entry point into the CLI and as such can be used to retrieve metadata about the xunnctl software itself, including the currently installed version number.

Examples

xunnctl --version
xctl --version
x --version

Parameters

NameTypeDefaultDescription
optional--versionbooleanundefinedShow version number. Cannot be used with other parameters or sub-commands.

xunnctl config

Alias: x c

This command, unless called with --help, is an alias for xunnctl config get --all.

Examples

xunnctl config
x c

Parameters

See xunnctl config get.

xunnctl config get

Alias: x c g

This command dumps the value of one or more xunnctl configuration options straight to stdout without additional outputs, making it suitable for use in scripts. These values are stored locally and protected with 0660 permissions.

See here for a list of available configuration options.

When called without any arguments, this command is an alias for xunnctl config get --all.

Examples

xunnctl config get --sub-name cfApiToken
x c g --sub-name cfApiToken cfAccountId
x c g --sub-name cfApiToken --sub-name cfAccountId
# The next two lines are equivalent
x c g --all
x c g

Parameters

NameTypeDefaultDescription
optional--allbooleanundefinedDump the current value of all configuration options. Cannot be used with the --sub-name parameter.
optional--sub-namestring[]undefinedThe names of one or more options to retrieve. Cannot be used with the --all parameter.

xunnctl config set

Alias: x c s

This command updates the value of the --sub-name configuration option to --content, which is a valid JSON value. This includes double quotes if it's a string.

This value is stored locally and protected with 0660 permissions.

Note that --content can be any value JSON value, and that updating an option with the wrong value or type of value will cause undefined behavior. See here for a list of available configuration options and their valid values.

Examples

xunnctl config set --sub-name cfApiToken --content AbCd1234
x c s --sub-name cfApiToken --content AbCd1234

Parameters

NameTypeDefaultDescription
REQUIRED--contentstring
(unescaped spaces allowed)
undefinedThe new value of the option to update. This must be a valid JSON value.
REQUIRED--sub-namestringundefinedThe name of the option to update.

xunnctl config unset

Alias: x c u

This command deletes the configuration entry (name and content) associated with the --sub-name configuration option and commits the change to the filesystem.

Examples

xunnctl config unset --sub-name cfApiToken
x c u --sub-name cfApiToken

Parameters

NameTypeDefaultDescription
optional--allbooleanundefinedDelete all options in the configuration file. Cannot be used with the --sub-name parameter.
optional--sub-namestring[]undefinedThe names of one or more options to delete. Cannot be used with the --all parameter.

xunnctl dns record create A

Alias: x d r c a

This command creates a new DNS A resource record in one or more existing zones.

Examples

xunnctl dns record create a --apex xunn.io --sub-name @ --ipv4 1.2.3.4 --proxied=false
x d r c A --apex xunn.io --sub-name 'something.else' --ipv4 1.2.3.4

Parameters

NameTypeDefaultDescription
REQUIRED 1/2--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.
REQUIRED 2/2--apex-all-knownbooleanundefinedInclude all known zone apex domains. Can be used with other --apex* parameters.
REQUIRED--ipv4stringundefinedA valid IPv4 address.
REQUIRED--sub-namestringundefinedThe DNS record name in Punycode, or the character "@", but excluding the apex domain as a suffix.
optional--proxiedbooleanfalseWhether the record is receiving the performance and security benefits of Cloudflare.

xunnctl dns record create AAAA

Alias: x d r c aaaa

This command creates a new DNS AAAA resource record in one or more existing zones.

Examples

xunnctl dns record create aaaa --apex xunn.io --sub-name @ --ipv6 ::ffff:1.2.3.4 --proxied=false
x d r c AAAA --apex xunn.io --sub-name 'something.else' --ipv6 2001:db8::8a2e:7334

Parameters

NameTypeDefaultDescription
REQUIRED 1/2--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.
REQUIRED 2/2--apex-all-knownbooleanundefinedInclude all known zone apex domains. Can be used with other --apex* parameters.
REQUIRED--ipv6stringundefinedA valid IPv6 address.
REQUIRED--sub-namestringundefinedThe DNS record name in Punycode, or the character "@", but excluding the apex domain as a suffix.
optional--proxiedbooleanfalseWhether the record is receiving the performance and security benefits of Cloudflare.

xunnctl dns record create CAA

Alias: x d r c caa

This command creates pre-configured "issue" and "iodef" CAA resource records in one or more existing zones.

Examples

xunnctl dns record create caa --apex xunn.io
x d r c CAA --apex xunn.io --apex xunn.at

Parameters

NameTypeDefaultDescription
REQUIRED 1/2--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.
REQUIRED 2/2--apex-all-knownbooleanundefinedInclude all known zone apex domains. Can be used with other --apex* parameters.

xunnctl dns record create CNAME

Alias: x d r c cname

This command creates a new DNS CNAME resource record in one or more existing zones.

Examples

xunnctl dns record create cname --apex xunn.io --sub-name 'sub.domain' --to-name 'diff.com'
x d r c CNAME --apex xunn.io --apex xunn.at --sub-name 'sub.domain' --to-name 'diff.com'

Parameters

NameTypeDefaultDescription
REQUIRED 1/2--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.
REQUIRED 2/2--apex-all-knownbooleanundefinedInclude all known zone apex domains. Can be used with other --apex* parameters.
REQUIRED--sub-namestringundefinedThe DNS record name in Punycode, or the character "@", but excluding the apex domain as a suffix.
REQUIRED--to-namestringundefinedA valid fully-qualified hostname. Must not match the record's name.
optional--proxiedbooleanfalseWhether the record is receiving the performance and security benefits of Cloudflare.

xunnctl dns record create MX

Alias: x d r c mx

This command creates a new DNS MX resource record in one or more existing zones.

Examples

xunnctl dns record create mx --apex xunn.io --sub-name '@' --mail-name 'mail.xunn.io'
x d r c MX --apex xunn.io --apex xunn.at --sub-name 'something.else' --mail-name 'mail.xunn.io'

Parameters

NameTypeDefaultDescription
REQUIRED 1/2--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.
REQUIRED 2/2--apex-all-knownbooleanundefinedInclude all known zone apex domains. Can be used with other --apex* parameters.
REQUIRED--sub-namestringundefinedThe DNS record name in Punycode, or the character "@", but excluding the apex domain as a suffix.
REQUIRED--mail-namestringundefinedA valid fully-qualified mail server hostname.

xunnctl dns record create TXT

Alias: x d r c txt

This command creates a new DNS TXT resource record in one or more existing zones.

Examples

xunnctl dns record create txt --apex xunn.io --sub-name @ --content '...'
x d r c TXT --apex xunn.io --apex xunn.at --sub-name 'something.else' --content '...'

Parameters

NameTypeDefaultDescription
REQUIRED 1/2--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.
REQUIRED 2/2--apex-all-knownbooleanundefinedInclude all known zone apex domains. Can be used with other --apex* parameters.
REQUIRED--sub-namestringundefinedThe DNS record name in Punycode, or the character "@", but excluding the apex domain as a suffix.
REQUIRED--contentstringundefinedText content for the record.

xunnctl dns record retrieve

Alias: x d r r

This command retrieves one or more resource records of name --target-name and/or of type --target-type from the specified --apex* DNS zone(s). If --search-for-name is given, --target-name will be matched partially (via startsWith()) rather than exactly.

Omitting both --target-name and --target-type will retrieve all records.

The result can be queried via --local-query, which accepts a JMESPath value. Note that, as a feature, the presence of spaces in the query does not necessitate quoting or escaping. When --local-query is present, the resulting JSON will be dumped straight to stdout.

Examples

xunnctl dns record retrieve --apex xunn.io --target-name mail --target-type CNAME
x d r r --apex-all-known --apex new-site.com --target-name mail
x d r r --apex xunn.io --apex xunn.at --target-type cname --local-query id

Parameters

NameTypeDefaultDescription
REQUIRED 1/2--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.
REQUIRED 2/2--apex-all-knownbooleanundefinedInclude all known zone apex domains. Can be used with other --apex* parameters.
optional--target-namestringundefinedThe target DNS record name in Punycode, including the apex domain as a suffix. Note that the "@" character is not recognized here.
optional--target-typestringundefinedCase-insensitive DNS record type, such as AAAA or mx.
optional--local-querystring
(unescaped spaces allowed)
undefinedA JMESPath query string. Unescaped spaces are preserved in CLI. The resulting JSON will be dumped straight to stdout.
optional--search-for-nameboolean
falseMatch names starting with --target-name instead of matching said names exactly, which is the default behavior.

xunnctl dns record destroy

Alias: x d r d

This command irrecoverably destroys one or more resource records that are named --target-name and are of type --target-type from the specified --apex* DNS zone(s). If no such record(s) exist, this command is a no-op.

If --search-for-name is given, --target-name will be matched partially (via startsWith()) rather than exactly.

Examples

xunnctl dns record destroy --apex dangerous.com --target-name some.specific.record --target-type CNAME
xunnctl d r d --apex dangerous.com --target-name some.specific.record --target-type cname

Parameters

NameTypeDefaultDescription
REQUIRED 1/2--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.
REQUIRED 2/2--apex-all-knownbooleanundefinedInclude all known zone apex domains. Can be used with other --apex* parameters. Note that this is incredibly dangerous!
REQUIRED--target-namestringundefinedThe target DNS record name in Punycode, including the apex domain as a suffix. Note that the "@" character is not recognized here.
REQUIRED--target-typestringundefinedCase-insensitive DNS record type, such as AAAA or mx.
optional--search-for-nameboolean
falseMatch names starting with --target-name instead of matching said names exactly, which is the default behavior.

xunnctl dns zone

Alias: x d z

This command, unless called with --help, is an alias for xunnctl dns zone retrieve --apex-all-known.

Examples

xunnctl dns zone
x d z

Parameters

See xunnctl dns zone retrieve.

xunnctl dns zone create

Alias: x d z c

This command creates and initializes a new DNS --apex zone. If a conflicting apex zone already exists, this command will fail. If you're trying to bring an existing zone up to current configuration standards, see xunnctl dns zone update instead.

Examples

xunnctl dns zone create --apex xunn.at
x d z c --apex xunn.at

Parameters

NameTypeDefaultDescription
REQUIRED--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.

xunnctl dns zone retrieve

Alias: x d z r

This command returns information about one or more --apex zones.

The result can be queried via --local-query, which accepts a JMESPath value. Note that, as a feature, the presence of spaces in the query does not necessitate quoting or escaping. When --local-query is present, the resulting JSON will be dumped straight to stdout.

Examples

xunnctl dns zone retrieve --apex xunn.at
x d z r --apex-all-known --apex new-site.com --local-query id
x d z r --apex xunn.io --apex xunn.at --local-query { id: id, cdnOnly: meta.cdn_only }

Parameters

NameTypeDefaultDescription
REQUIRED 1/2--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.
REQUIRED 2/2--apex-all-knownbooleanundefinedInclude all known zone apex domains. Can be used with other --apex* parameters.
optional--local-querystring
(unescaped spaces allowed)
undefinedA JMESPath query string. Unescaped spaces are preserved in CLI. The resulting JSON will be dumped straight to stdout.

xunnctl dns zone update

Alias: x d z u

This command is equivalent to xunnctl dns zone create but for zones that already exist. It will attempt to bring one or more zones up to date with the latest best practices with respect to zone configuration; any failures thrown when attempting to create records, while reported, are ignored. No records are deleted or updated, only creations will be attempted.

Examples

xunnctl dns zone update --apex-all-known
x d z u --apex xunn.at --apex xunn.io

Parameters

NameTypeDefaultDescription
REQUIRED 1/2--apexstring[]undefinedZero or more zone apex domains. Can be used with other --apex* parameters.
REQUIRED 2/2--apex-all-knownbooleanundefinedInclude all known zone apex domains. Can be used with other --apex* parameters.
optional--purge-firstbooleanundefinedDelete pertinent records on the zone before recreating them. This can be dangerous!

xunnctl dns zone destroy

Alias: x d z d

This command irrecoverably destroys a DNS --apex zone. If no such zone exists, this command is a no-op.

Examples

xunnctl dns zone destroy --apex be-careful.org
x d z d --apex dangerous.com

Parameters

NameTypeDefaultDescription
REQUIRED--apexstringundefinedAn apex domain to destroy.

xunnctl firewall

Alias: x f

This command, unless called with --help, is an alias for xunnctl firewall status.

Examples

xunnctl firewall
x f

Parameters

See xunnctl firewall status.

xunnctl firewall ban

Alias: x f b

This command adds an ip address to the global hostile ip list, which is a Cloudflare WAF List. No managed system will accept packets coming from an IP on this list.

All IP formats supported by Cloudflare WAF Lists are supported. Additionally, full ipv6 addresses will be translated into the supported ipv6 CIDR double colon notation.

Examples

xunnctl firewall ban --ip 1.2.3.4 --ip 5.6.7.8
# Cloudflare doesn't support the following, but this CLI does:
x f b --ip 2600:8800:51a1:1234:5678:9101:2007:76eb

Parameters

NameTypeDefaultDescription
REQUIRED--ipstring[]undefinedOne or more IP addresses to ban. All IP formats supported by Cloudflare WAF Lists are supported here. Full ipv6 addresses are also supported (converted to /64 CIDRs).

xunnctl firewall status

Alias: x f s

This command returns the contents of the global hostile ip list, which is a Cloudflare WAF List. No managed system will accept packets coming from an IP on this list.

All IP formats supported by Cloudflare WAF Lists are supported. Additionally, full ipv6 addresses will be translated into the supported ipv6 CIDR double colon notation.

Examples

xunnctl firewall status
x f s --ip 5.6.7.8 --ip 2600:8800:51a1:1234:5678:9101:2007:76eb

Parameters

NameTypeDefaultDescription
optional--ipstring[]undefinedOne or more IP addresses to report on. All IP formats supported by Cloudflare WAF Lists are supported here. Full ipv6 addresses are also supported (converted to /64 CIDRs).

xunnctl firewall unban

Alias: x f u

This command removes an ip address from the global hostile ip list, which is a Cloudflare WAF List. No managed system will accept packets coming from an IP on this list.

All IP formats supported by Cloudflare WAF Lists are supported. Additionally, full ipv6 addresses will be translated into the supported ipv6 CIDR double colon notation.

Examples

xunnctl firewall unban --ip 1.2.3.4 --ip 5.6.7.8
# Cloudflare doesn't support the following, but this CLI does:
x f u --ip 2600:8800:51a1:1234:5678:9101:2007:76eb

Parameters

NameTypeDefaultDescription
REQUIRED--ipstring[]undefinedOne or more IP address to unban. All IP formats supported by Cloudflare WAF Lists are supported here. Full ipv6 addresses are also supported (converted to /64 CIDRs).
optional--if-comment-excludesstringundefinedOnly unban if --ip's comment does not include the given text.

xunnctl raw

Alias: x r

This command will dump freeform data into stdout depending on --id and without additional outputs, making it suitable for use in scripts.

The following values for --id are supported:

conf.nginx.allowOnlyCloudflare

This is an nginx configuration file consisting of directives that, when included in an server context, will cause nginx to reject all connection attempts from IP addresses that do not belong to Cloudflare.

When using this ID, you can also pipe in the contents of an nginx configuration file and it will be included in the output with respect for the lines consisting of ### START AUTOGENERATED RULES and ### END AUTOGENERATED RULES. For example:

echo 'before\n### START AUTOGENERATED RULES\n\nx\ny\nz\n\n### END AUTOGENERATED RULES\nafter\n' | npx x r --id conf.nginx.allowOnlyCloudflare

Note that deny all; should be included in your Nginx configuration for it to be meaningful. This tool will not add it for you. For example:

...
### START AUTOGENERATED RULES
...
### END AUTOGENERATED RULES

allow 127.0.0.0/8;
allow ::1/128;
deny all;

Examples

xunnctl raw --id conf.nginx.allowOnlyCloudflare
x r --id conf.nginx.allowOnlyCloudflare

Parameters

NameTypeDefaultDescription
REQUIRED--idstringundefinedThe identifier associated with the target data.

xunnctl super install

Alias: x s i

This command will install several privileged commands from a private repository. These commands will be dynamically added to xunnctl, potentially updating existing commands in the process, thus greatly expanding the available commands beyond those listed in this documentation.

This command is idempotent so long as the contents of said private repository remain unchanged. Running this command after said repository has been updated will install the updates but will not synchronize deletes.

To completely clear out installed commands, see xunnctl super uninstall.

Examples

xunnctl super install
x s i

Parameters

This command does not accept additional parameters.

xunnctl super uninstall

Alias: x s u

This command will completely uninstall any command that has ever been downloaded and installed by xunnctl super install. Downloaded commands that overwrote their public versions will be reverted.

To reinstall all available privileged commands, see xunnctl super install

Examples

xunnctl super uninstall
x s u

Parameters

This command does not accept additional parameters.

Appendix

Further documentation can be found under docs/.

Published Package Details

This is a CJS2 package with statically-analyzable exports built by Babel for Node.js versions that are not end-of-life. For TypeScript users, this package supports both "Node10" and "Node16" module resolution strategies.

Expand details

That means both CJS2 (via require(...)) and ESM (via import { ... } from ... or await import(...)) source will load this package from the same entry points when using Node. This has several benefits, the foremost being: less code shipped/smaller package size, avoiding dual package hazard entirely, distributables are not packed/bundled/uglified, a drastically less complex build process, and CJS consumers aren't shafted.

Each entry point (i.e. ENTRY) in package.json's exports[ENTRY] object includes one or more export conditions. These entries may or may not include: an exports[ENTRY].types condition pointing to a type declarations file for TypeScript and IDEs, an exports[ENTRY].module condition pointing to (usually ESM) source for Webpack/Rollup, an exports[ENTRY].node condition pointing to (usually CJS2) source for Node.js require and import, an exports[ENTRY].default condition pointing to source for browsers and other environments, and other conditions not enumerated here. Check the package.json file to see which export conditions are supported.

Though package.json includes { "type": "commonjs" }, note that any ESM-only entry points will be ES module (.mjs) files. Finally, package.json also includes the sideEffects key, which is false for optimal tree shaking where appropriate.

License

See LICENSE.

Contributing and Support

New issues and pull requests are always welcome and greatly appreciated! 🤩 Just as well, you can star 🌟 this project to let me know you found it useful! ✊🏿 Or you could buy me a beer 🥺Thank you!

See CONTRIBUTING.md and SUPPORT.md for more information.

Contributors

All Contributors

Thanks goes to these wonderful people (emoji key):

This project follows the all-contributors specification. Contributions of any kind welcome!

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 120

Native requirements
120 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
@black-flag/core
Environment
{
  "local_name": "@black-flag/core",
  "alias": false,
  "peer_metadata": null
}
^1.2.2runtime
@listr2/manager
Environment
{
  "local_name": "@listr2/manager",
  "alias": false,
  "peer_metadata": null
}
^2.0.2runtime
@types/debug
Environment
{
  "local_name": "@types/debug",
  "alias": false,
  "peer_metadata": null
}
^4.1.12runtime
core-js
Environment
{
  "local_name": "core-js",
  "alias": false,
  "peer_metadata": null
}
3.36.1runtime
debug
Environment
{
  "local_name": "debug",
  "alias": false,
  "peer_metadata": null
}
^4.3.4runtime
env-paths
Environment
{
  "local_name": "env-paths",
  "alias": false,
  "peer_metadata": null
}
^3.0.0runtime
get-stdin
Environment
{
  "local_name": "get-stdin",
  "alias": false,
  "peer_metadata": null
}
^9.0.0runtime
ip6addr
Environment
{
  "local_name": "ip6addr",
  "alias": false,
  "peer_metadata": null
}
^0.2.5runtime
jmespath
Environment
{
  "local_name": "jmespath",
  "alias": false,
  "peer_metadata": null
}
^0.16.0runtime
listr2
Environment
{
  "local_name": "listr2",
  "alias": false,
  "peer_metadata": null
}
^8.0.2runtime
merge-descriptors
Environment
{
  "local_name": "merge-descriptors",
  "alias": false,
  "peer_metadata": null
}
^2.0.0runtime
supports-color
Environment
{
  "local_name": "supports-color",
  "alias": false,
  "peer_metadata": null
}
^8.1.1runtime
@arethetypeswrong/cli
Environment
{
  "local_name": "@arethetypeswrong/cli",
  "alias": false,
  "peer_metadata": null
}
^0.15.2development
@babel/cli
Environment
{
  "local_name": "@babel/cli",
  "alias": false,
  "peer_metadata": null
}
^7.24.1development
@babel/eslint-parser
Environment
{
  "local_name": "@babel/eslint-parser",
  "alias": false,
  "peer_metadata": null
}
^7.24.1development
@babel/plugin-proposal-export-default-from
Environment
{
  "local_name": "@babel/plugin-proposal-export-default-from",
  "alias": false,
  "peer_metadata": null
}
^7.24.1development
@babel/preset-env
Environment
{
  "local_name": "@babel/preset-env",
  "alias": false,
  "peer_metadata": null
}
^7.24.3development
@babel/preset-typescript
Environment
{
  "local_name": "@babel/preset-typescript",
  "alias": false,
  "peer_metadata": null
}
^7.24.1development
@commitlint/cli
Environment
{
  "local_name": "@commitlint/cli",
  "alias": false,
  "peer_metadata": null
}
^19.2.1development
@commitlint/config-conventional
Environment
{
  "local_name": "@commitlint/config-conventional",
  "alias": false,
  "peer_metadata": null
}
^19.1.0development
@semantic-release/changelog
Environment
{
  "local_name": "@semantic-release/changelog",
  "alias": false,
  "peer_metadata": null
}
^6.0.3development
@semantic-release/exec
Environment
{
  "local_name": "@semantic-release/exec",
  "alias": false,
  "peer_metadata": null
}
^6.0.3development
@semantic-release/git
Environment
{
  "local_name": "@semantic-release/git",
  "alias": false,
  "peer_metadata": null
}
^10.0.1development
@types/glob
Environment
{
  "local_name": "@types/glob",
  "alias": false,
  "peer_metadata": null
}
^8.1.0development
@types/ip6addr
Environment
{
  "local_name": "@types/ip6addr",
  "alias": false,
  "peer_metadata": null
}
^0.2.6development
@types/jest
Environment
{
  "local_name": "@types/jest",
  "alias": false,
  "peer_metadata": null
}
^29.5.12development
@types/jmespath
Environment
{
  "local_name": "@types/jmespath",
  "alias": false,
  "peer_metadata": null
}
^0.15.2development
@types/lodash.mergewith
Environment
{
  "local_name": "@types/lodash.mergewith",
  "alias": false,
  "peer_metadata": null
}
^4.6.9development
@types/merge-descriptors
Environment
{
  "local_name": "@types/merge-descriptors",
  "alias": false,
  "peer_metadata": null
}
^1.0.3development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
^20.11.30development
@typescript-eslint/eslint-plugin
Environment
{
  "local_name": "@typescript-eslint/eslint-plugin",
  "alias": false,
  "peer_metadata": null
}
^7.3.1development
@typescript-eslint/parser
Environment
{
  "local_name": "@typescript-eslint/parser",
  "alias": false,
  "peer_metadata": null
}
^7.3.1development
@xunnamius/conventional-changelog-projector
Environment
{
  "local_name": "@xunnamius/conventional-changelog-projector",
  "alias": false,
  "peer_metadata": null
}
^1.2.1development
@xunnamius/jest-types
Environment
{
  "local_name": "@xunnamius/jest-types",
  "alias": false,
  "peer_metadata": null
}
^1.1.3development
all-contributors-cli
Environment
{
  "local_name": "all-contributors-cli",
  "alias": false,
  "peer_metadata": null
}
^6.26.1development
babel-jest
Environment
{
  "local_name": "babel-jest",
  "alias": false,
  "peer_metadata": null
}
^29.7.0development
babel-plugin-explicit-exports-references
Environment
{
  "local_name": "babel-plugin-explicit-exports-references",
  "alias": false,
  "peer_metadata": null
}
^1.0.2development
babel-plugin-module-resolver
Environment
{
  "local_name": "babel-plugin-module-resolver",
  "alias": false,
  "peer_metadata": null
}
^5.0.0development
babel-plugin-transform-rewrite-imports
Environment
{
  "local_name": "babel-plugin-transform-rewrite-imports",
  "alias": false,
  "peer_metadata": null
}
^1.2.0development
confusing-browser-globals
Environment
{
  "local_name": "confusing-browser-globals",
  "alias": false,
  "peer_metadata": null
}
^1.0.11development
conventional-changelog-cli
Environment
{
  "local_name": "conventional-changelog-cli",
  "alias": false,
  "peer_metadata": null
}
^4.1.0development
doctoc
Environment
{
  "local_name": "doctoc",
  "alias": false,
  "peer_metadata": null
}
^2.2.1development
dotenv
Environment
{
  "local_name": "dotenv",
  "alias": false,
  "peer_metadata": null
}
^16.4.5development
eslint
Environment
{
  "local_name": "eslint",
  "alias": false,
  "peer_metadata": null
}
^8.57.0development
eslint-import-resolver-alias
Environment
{
  "local_name": "eslint-import-resolver-alias",
  "alias": false,
  "peer_metadata": null
}
^1.1.2development
eslint-import-resolver-babel-module
Environment
{
  "local_name": "eslint-import-resolver-babel-module",
  "alias": false,
  "peer_metadata": null
}
^5.3.2development
eslint-import-resolver-typescript
Environment
{
  "local_name": "eslint-import-resolver-typescript",
  "alias": false,
  "peer_metadata": null
}
^3.6.1development
eslint-plugin-import
Environment
{
  "local_name": "eslint-plugin-import",
  "alias": false,
  "peer_metadata": null
}
^2.29.1development
eslint-plugin-jest
Environment
{
  "local_name": "eslint-plugin-jest",
  "alias": false,
  "peer_metadata": null
}
^27.9.0development
eslint-plugin-module-resolver
Environment
{
  "local_name": "eslint-plugin-module-resolver",
  "alias": false,
  "peer_metadata": null
}
^1.5.0development
eslint-plugin-unicorn
Environment
{
  "local_name": "eslint-plugin-unicorn",
  "alias": false,
  "peer_metadata": null
}
^51.0.1development
execa
Environment
{
  "local_name": "execa",
  "alias": false,
  "peer_metadata": null
}
^5.1.1development
glob
Environment
{
  "local_name": "glob",
  "alias": false,
  "peer_metadata": null
}
^10.3.10development
glob-gitignore
Environment
{
  "local_name": "glob-gitignore",
  "alias": false,
  "peer_metadata": null
}
^1.0.14development
husky
Environment
{
  "local_name": "husky",
  "alias": false,
  "peer_metadata": null
}
^9.0.11development
jest
Environment
{
  "local_name": "jest",
  "alias": false,
  "peer_metadata": null
}
^29.7.0development
jest-circus
Environment
{
  "local_name": "jest-circus",
  "alias": false,
  "peer_metadata": null
}
^29.7.0development
jest-extended
Environment
{
  "local_name": "jest-extended",
  "alias": false,
  "peer_metadata": null
}
^4.0.2development
lint-staged
Environment
{
  "local_name": "lint-staged",
  "alias": false,
  "peer_metadata": null
}
^15.2.2development
lodash.mergewith
Environment
{
  "local_name": "lodash.mergewith",
  "alias": false,
  "peer_metadata": null
}
^4.6.2development
prettier
Environment
{
  "local_name": "prettier",
  "alias": false,
  "peer_metadata": null
}
^3.2.5development
remark-capitalize-headings
Environment
{
  "local_name": "remark-capitalize-headings",
  "alias": false,
  "peer_metadata": null
}
^2.0.1development
remark-cli
Environment
{
  "local_name": "remark-cli",
  "alias": false,
  "peer_metadata": null
}
^12.0.0development
remark-frontmatter
Environment
{
  "local_name": "remark-frontmatter",
  "alias": false,
  "peer_metadata": null
}
^5.0.0development
remark-gfm
Environment
{
  "local_name": "remark-gfm",
  "alias": false,
  "peer_metadata": null
}
^4.0.0development
remark-ignore
Environment
{
  "local_name": "remark-ignore",
  "alias": false,
  "peer_metadata": null
}
^2.0.0development
remark-lint
Environment
{
  "local_name": "remark-lint",
  "alias": false,
  "peer_metadata": null
}
^9.1.2development
remark-lint-definition-case
Environment
{
  "local_name": "remark-lint-definition-case",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-fenced-code-flag
Environment
{
  "local_name": "remark-lint-fenced-code-flag",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-fenced-code-flag-case
Environment
{
  "local_name": "remark-lint-fenced-code-flag-case",
  "alias": false,
  "peer_metadata": null
}
^2.0.0development
remark-lint-file-extension
Environment
{
  "local_name": "remark-lint-file-extension",
  "alias": false,
  "peer_metadata": null
}
^2.1.2development
remark-lint-final-newline
Environment
{
  "local_name": "remark-lint-final-newline",
  "alias": false,
  "peer_metadata": null
}
^2.1.2development
remark-lint-first-heading-level
Environment
{
  "local_name": "remark-lint-first-heading-level",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-hard-break-spaces
Environment
{
  "local_name": "remark-lint-hard-break-spaces",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-heading-increment
Environment
{
  "local_name": "remark-lint-heading-increment",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-heading-whitespace
Environment
{
  "local_name": "remark-lint-heading-whitespace",
  "alias": false,
  "peer_metadata": null
}
^1.0.0development
remark-lint-heading-word-length
Environment
{
  "local_name": "remark-lint-heading-word-length",
  "alias": false,
  "peer_metadata": null
}
^2.0.0development
remark-lint-list-item-style
Environment
{
  "local_name": "remark-lint-list-item-style",
  "alias": false,
  "peer_metadata": null
}
^2.0.0development
remark-lint-no-auto-link-without-protocol
Environment
{
  "local_name": "remark-lint-no-auto-link-without-protocol",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-blockquote-without-marker
Environment
{
  "local_name": "remark-lint-no-blockquote-without-marker",
  "alias": false,
  "peer_metadata": null
}
^5.1.2development
remark-lint-no-duplicate-defined-urls
Environment
{
  "local_name": "remark-lint-no-duplicate-defined-urls",
  "alias": false,
  "peer_metadata": null
}
^2.1.2development
remark-lint-no-duplicate-definitions
Environment
{
  "local_name": "remark-lint-no-duplicate-definitions",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-duplicate-headings-in-section
Environment
{
  "local_name": "remark-lint-no-duplicate-headings-in-section",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-empty-sections
Environment
{
  "local_name": "remark-lint-no-empty-sections",
  "alias": false,
  "peer_metadata": null
}
^4.0.0development
remark-lint-no-empty-url
Environment
{
  "local_name": "remark-lint-no-empty-url",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-heading-content-indent
Environment
{
  "local_name": "remark-lint-no-heading-content-indent",
  "alias": false,
  "peer_metadata": null
}
^4.1.2development
remark-lint-no-heading-like-paragraph
Environment
{
  "local_name": "remark-lint-no-heading-like-paragraph",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-heading-punctuation
Environment
{
  "local_name": "remark-lint-no-heading-punctuation",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-inline-padding
Environment
{
  "local_name": "remark-lint-no-inline-padding",
  "alias": false,
  "peer_metadata": null
}
^4.1.2development
remark-lint-no-literal-urls
Environment
{
  "local_name": "remark-lint-no-literal-urls",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-multiple-toplevel-headings
Environment
{
  "local_name": "remark-lint-no-multiple-toplevel-headings",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-reference-like-url
Environment
{
  "local_name": "remark-lint-no-reference-like-url",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-shell-dollars
Environment
{
  "local_name": "remark-lint-no-shell-dollars",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-shortcut-reference-image
Environment
{
  "local_name": "remark-lint-no-shortcut-reference-image",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-shortcut-reference-link
Environment
{
  "local_name": "remark-lint-no-shortcut-reference-link",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-tabs
Environment
{
  "local_name": "remark-lint-no-tabs",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-no-undefined-references
Environment
{
  "local_name": "remark-lint-no-undefined-references",
  "alias": false,
  "peer_metadata": null
}
^4.2.1development
remark-lint-no-unused-definitions
Environment
{
  "local_name": "remark-lint-no-unused-definitions",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-ordered-list-marker-style
Environment
{
  "local_name": "remark-lint-ordered-list-marker-style",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development
remark-lint-ordered-list-marker-value
Environment
{
  "local_name": "remark-lint-ordered-list-marker-value",
  "alias": false,
  "peer_metadata": null
}
^3.1.2development

Showing the first 100 declarations.

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "integrity": "sha512-lnT96NeLRdIxbca2qXPggxHlFngO70K3nrQMeyBC7k6QeOfaj9LSyRsDk6Qm1+jZAhMJspa7qK9lkZQtlmGOYg==",
  "shasum": "6f735a1f02108933df40f0444e0b591ae9d15607",
  "tarball": "https://registry.npmjs.org/@-xun/ctl/-/ctl-1.1.0.tgz",
  "fileCount": 61,
  "unpackedSize": 285615,
  "signatures": [
    {
      "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
      "sig": "MEUCIQCZVm9RUTos5mESpdbzQzDlhXVYY8FLbU4Qbx+wWoEdUwIgWGotZjf1mc9DTNvF1CafvAr5/fbGWUF+ILbiJJRBHO0="
    }
  ]
}

Repository

PENDING
xunnamius/xunnctl

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 21:50 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:33d44bac5263b59caefbbdabde41b218d01387a4f0a8ff0d6ea1c76cef2cbabf

Other collected versions

1.5.028 Mar1.4.127 Mar1.4.027 Mar1.3.627 Mar1.3.527 Mar1.3.427 MarView all collected versions →