open-index/open-npm huggingface dataset:
npm package: @ntlab/dplib
Description: Digital Persona fingerprint library
Author: Toha
Latest version: 1.2.1

# Digital Persona Fingerprint Library

## Introduction

Digital Persona Fingerprint library provides a binding to Digital Persona
U.are.U SDK to allow fingerprint acqusition either for enrollment or
identification.

## Usage

* [/test/enrollment.js](/test/enrollment.js) for API usage.
* [/test/bitmap.js](/test/bitmap.js) for raw bitmap capture.
npm package: @ntlab/express-controller
Description: Nodejs Express controller
Author: Toha
Latest version: 1.3.0

# Nodejs Express Controller

Nodejs Express Controller is a helper class to define routes in [Expressjs](https://expressjs.com).

## Usage

Create a controller in `controller/app.js`.

```js
const Controller = require('@ntlab/express-controller');

class AppController extends Controller
{
    buildRoutes() {
        this.addRoute('index', 'get', '/', async (req, res, next) => {
            res.render('app/main');
        });
    }

    static create(app) {
        const prefix = '/';
        const controller = new AppController({prefix: prefix, name: 'App'});
        app.use(prefix, controller.router);
        return controller;
    }
}

module.exports = AppController.create;
```

Register it in Expressjs app.

```js
const app = express();

// controllers
const Controller = require('@ntlab/express-controller');
Controller.scan(path.join(__dirname, 'controller'), (controller, name) => {
    controller(app);
});

// sub controllers
Controller.subControllers.forEach(controller => {
    const mountPath = controller.getMountPath();
    if (mountPath) {
        app.use(mountPath, controller.router);
    }
});
```
npm package: @ntlab/express-middleware
Description: Nodejs Express Middleware
Author: Toha
Latest version: 2.6.0

# Nodejs Express Middleware

Nodejs Express Middleware is a set of middlewares build for
[Expressjs](https://expressjs.com) aimed at:

* Support layout rendering.
* Provide block and slot mechanism to include views in Expressjs
  (`block` and `slot` helper).
* Provide [NODE-NTJS](https://github.com/tohenk/node-ntjs) script integration
  (`script`, `scripts`, `javascripts`, `stylesheets`, and `jsloader` helper).
* Provide menu builder (`menu` helper).
* Provide pager builder (`pager` helper).
* Provide a simple security to Expressjs routes (`user` helper).

## Expressjs Integration

Here is a typical usage in Expressjs app.

```js
// app.js

const { ScriptManager, ScriptAsset } = require('@ntlab/ntjs');
const { Helper, Security } = require('@ntlab/express-middleware');

// register script repository
require('@ntlab/ntjs-repo')();

// security
app.use(Security.core({}));

// app helpers
app.use(Helper.core());
app.use(Helper.menu());
app.use(Helper.pager());

ScriptManager.addDefault('SemanticUI');
ScriptManager.addAsset(ScriptAsset.STYLESHEET, 'app.css');

// relative from layout
app.slots = {
  mainmenu: {
    view: '../slot/mainmenu'
  }
};
```

```js
<%# mainmenu.ejs %>

<% menus = {
    branding: {
        type: 'brand',
        title: apptitle,
        logo: '/images/logo.png',
        url: '/'
    },
    tasks: {
        title: 'Tasks',
        class: 'right floated',
        items: {
            about: {
                title: 'About'
            }
        }
    }
} %>
<% if(user.authenticated) {
    Object.assign(menus.tasks.items, {
        divider1: {
            type: 'divider'
        },
        profile: {
            title: 'Profile'
        }
    });
} %>
<%- menu(menus, {mainmenu: true, indentation: 2}) %>
<% script.create('JQuery')
  .useDependencies(['SemanticUI/Dialog/Message'])
  .addMiddle(`
$.tasks = {
    about() {
        $.ntdlg.message('task-about', 'About', 'About App Message', $.ntdlg.ICON_INFO);
    },
    profile() {
        $.ntdlg.message('task-profile', 'Howdy', 'Welcome User', $.ntdlg.ICON_INFO);
    },
    init() {
        const self = this;
        $('.menu-about').on('click', function(e) {
            e.preventDefault();
            self.about();
        });
        $('.menu-profile').on('click', function(e) {
            e.preventDefault();
            self.profile();
        });
    }
}
`).addLast(`
$.tasks.init();
`); %>
```

## Example Usage

Nodejs Express Middleware is heavily used by [NODE-SMS-TERMINAL](https://github.com/tohenk/node-sms-terminal/blob/master/ui/app.js)
and [NODE-SMS-GATEWAY](https://github.com/tohenk/node-sms-gateway/blob/master/ui/app.js).
npm package: @ntlab/gsm-at
Description: A GSM AT library
Author: Toha
Latest version: 3.12.0

# A GSM AT Library

GSM AT Library uses generic AT commands to support wide range of dongle
hardwares.

Supported dongles:
- Sony Ericsson mobile phone
- Siemens C-55
- Huawai modem (tested on E173, E3372, EC1260-2)
- ZTE modem (tested on MF190)
- Prolink modem (tested on PHS301, still need testing)
- Wavecom modem

Support for new modem is easily achieved by providing the commands in the
[`Drivers.ini`](/Drivers.ini) configuration.
npm package: @ntlab/ntjs
Description: NODE-NTJS Javascript
Author: Toha
Latest version: 3.1.0

# Code Javascript Everywhere!

This is a port of [PHP-NTJS](https://github.com/tohenk/php-ntjs).

NODE-NTJS allows to dynamically manage your javascripts, stylesheets, and
scripts so you can focus on your code. You can code your javascript using
ES6 class, or write directly in the javascript code, even on template.

## JQuery and SemanticUI/FomanticUI

Support for popular javascript like JQuery, SemanticUI/FomanticUI.

## Using external CDN

An external CDN is also supported, simply pass CDN parameters to ScriptManager.

```js
const { ScriptManager } = require('@ntlab/ntjs');

const cdn = {
    jquery: {
        version: '3.5.1',
        url: 'https://code.jquery.com/%NAME%',
        js: {
            jquery: 'jquery-%VER%',
            'jquery.min': 'jquery-%VER%.min'
        }
    },
    'semantic-ui': {
        version: '2.8.7',
        url: 'https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/%VER%/%NAME%'
    }
}
ScriptManager.parseCdn(cdn);
```

## Example Usage

See usage example in [NODE-EXPRESS-MIDDLEWARE](https://github.com/tohenk/node-express-middleware).

## TODO

* Script output minifying is not yet supported.
npm package: @ntlab/ntjs-assets
Description: Node Javascript assets
Author: Toha
Latest version: 3.5.0

NTJS Web Assets Repository
==========================

This is a collection of web assets used by [NODE-NTJS](https://github.com/tohenk/node-ntjs).

Example usage using express app:
```js
const express = require('express');
const { Assets } = require('@ntlab/ntjs-assets');

const app = express();
app.use(express.static(Assets));
```
npm package: @ntlab/ntlib
Description: A collection of common library
Author: Toha
Latest version: 2.9.1

# A collection of common library

## Beautify (beautify.js)

Beautify a text.

```javascript
const { Beautify } = require('@ntlab/ntlib');

console.log(Beautify.beautify('this is the message')); // This Is The Message

Beautify.exceptions.add('is');
console.log(Beautify.beautify('THIS IS THE MESSAGE')); // This is The Message
```

## Character Sequence (charseq.js)

Class to handle string as a sequence of character.

```javascript
const { CharSequence } = require('@ntlab/ntlib');

let charseq = new CharSequence('This is a string');
while (!charseq.eof()) {
    console.log(charseq.read(1));
}
```

## Command Line Argument Parser (cmd.js)

Provide functions to work with Command Line arguments.

```javascript
const path = require('path');
const { Cmd } = require('@ntlab/ntlib');

Cmd.addBool('help', 'h', 'Show program usage').setAccessible(false);
Cmd.addVar('something', 's', 'Something description', 'some-argument');

if (!Cmd.parse() || (Cmd.get('help') && usage())) {
    process.exit();
}

/* do something here */

function usage() {
    console.log('Usage:');
    console.log('  node %s [options]', path.basename(process.argv[1]));
    console.log('');
    console.log('Options:');
    console.log(Cmd.dump());
    console.log('');
    return true;
}
```

## CLI or HTTP Executor (command.js, httpcmd.js)

Execute a Command Line Interface (CLI) or HTTP command.

```javascript
const { CommandExecutor } = require('@ntlab/ntlib');
const cmd = {
    bin: 'php',
    cli: 'path/to/php.file.to.execute.php',
    args: [
        '-f',
        '%CLI%',
        '--',
        '%DATA%'
    ]
}
const p = CommandExecutor(cmd).exec({DATA: 'some-data'});
p.on('exit', (code) => {
    /* do something on exit */
});
p.stdout.on('data', (line) => {
    /* do something on stdout data */
});
p.stderr.on('data', (line) => {
    /* do something on stderr data */
});
```

## A Simple Logger (logger.js)

Provide a simple logger class.

```javascript
const { Logger } = require('@ntlab/ntlib');

const log = new Logger('/path/to/logfile');
log.log('Somthing to log');
```

## Stringify (stringify.js)

Convert javascript object to string.

```javascript
const { Stringify } = require('@ntlab/ntlib');

console.log(Stringify.from({
    message: 'message',
    raw: Stringify.raw('`string`'),
})); // {message: 'message', raw: `string`}
```

## Token Processing (token.js)

Provide an utility to parse string into tokens.

```javascript
const { Token } = require('@ntlab/ntlib');
console.log(Token.split('1, 2, (1, "ABC")')); // [1, 2, [1, "ABC"]]
```

## App Utility (util.js)

Internally used by CLI/HTTP Executor, also provide a small set of common functions.

```javascript
const { AppUtil } = require('@ntlab/ntlib');
console.log(AppUtil.trans('Translate %ME%', {ME: '123'})); // Translate 123
```
npm package: @ntlab/roman
Description: Roman number parser
Author: Toha
Latest version: 1.0.0

# Roman Number Parser

Usage:

```javascript
const roman = require('@ntlab/roman');

// check if a string is a roman number
const str = 'CDXLIX';
if (roman.isRoman(str)) {
    console.log(`String ${str} is a roman number`);
    console.log(`Value of ${str} is %d`, roman.toInteger(str));
}

// convert number to roman
const num = 2914;
console.log(`Roman number for ${num} is %s`, roman.toRoman(num));
```
npm package: @ntlab/sequelize-manager
Description: Sequelize model manager
Author: Toha
Latest version: 1.4.1

# Sequelize Model Manager

Sequelize Model Manager provides functionality to handle loading, applying
some extensions to model, synchronize models to database, inserting fixtures
and so on. The models to manage can be generated using [MySQL Workbench Schema Exporter](https://github.com/mysql-workbench-schema-exporter/sequelize-exporter).

The directory layout suggested as follows:

```
> model                       <- contains model classes
  > addon                     <- contains handler for all models extension
  > data
    > lifecycle.json
    > tostring.json
  > extend                    <- contains model extension
  > extension                 <- contains model attributes extension
  > fixture                   <- contains fixture data
    > Model1.json
  > hook                      <- contains lifecycle handler
    > audit.js
  > Model1.js
  > Model2.js
```

## Usage

Sequelize Model Manager constructor accepts an options described below:

* `modeldir`: The path which contains models will be looked for
* `extensiondir`: The extension directory, will use `modeldir/extension` if not specified
* `hookdir`: The hook directory, will use `modeldir/hook` if not specified
* `datadir`: The data directory, will use `modeldir/data` if not specified
* `extenddir`: The extend directory, will use `modeldir/extend` if not specified
* `addondir`: The addon directory, will use `modeldir/addon` if not specified
* `fixturedir`: The fixture directory, will use `modeldir/fixture` if not specified
* `onconnect`: A function which returns `Promise` and called when finishing `connectToDatase()`
* `onpopulate`: A function which called when populating each row form fixture

An example usage of Sequelize Model Manager shown below:

```js

const SequelizeManager = require('@ntlab/sequelize-manager');

const db = new SequelizeManager({
    modeldir: path.join(__dirname, 'model'),
});

(async function run() {
    await db.init({
        dialect: 'sqlite',
        storage: './data/mydb.sqlite'
    });
    await db.connectDatabase();
    await db.syncModels();
    await db.loadFixtures();

    // find a row in database
    const m = await db.Model1.findOne({where: {Id: 990}});
})();
```
npm package: @ntlab/sms-gateway
Description: SMS Gateway
Author: Toha
Latest version: 3.2.2

# Node SMS Gateway

## Introduction

Node SMS Gateway is SMS Gateway application which connects to
[Node SMS Terminal](https://github.com/tohenk/node-sms-terminal) and provide
GSM communication queuing such as SMS and USSD. It is also acts as proxy to
other party via its socket communication.

Node SMS Gateway can be extended with other functionality using its plugin
interface.

For example, see included [Prepaid](https://github.com/tohenk/node-sms-gateway-prepaid) plugin.

## Installation

Stand alone installation is available using GIT.

```
$ cd ~
$ git clone https://github.com/tohenk/node-sms-gateway.git
$ cd node-sms-gateway
$ npm install
```

A web interface installation is needed as its now a separate package.

```
$ npm install @ntlab/sms-gateway-ui
```

Install plugins as you need.

```
$ npm install @ntlab/sms-gateway-prepaid
```

To run application (On some Linux distribution replace `node` with `nodejs`)

```
$ node app.js --plugins=@ntlab/sms-gateway-prepaid
```

## Configuration

Node SMS Gateway uses JSON configuration named `config.json` in the working
directory, but it can be told to use configuration elsewhere.

### `database`

Set [Sequelize](http://docs.sequelizejs.com/) database connection parameter.

```json
{
    "database": {
        "dialect": "mysql",
        "host": "localhost",
        "port": 3306,
        "user": "username",
        "password": "password",
        "database": "smsgw",
        "timezone": "Asia/Jakarta"
    }
}
```

### `secret`

Set socket connection secret. Each socket client must send `auth` with secret
and will be checked against this value. If it matches, connection accepted,
otherwise connection will be closed.

```json
{
    "secret": "CHANGEME"
}
```

### `security`

Set web interface username and password. Default username and password is both
`admin`. To secure your instance, it is advised to change default password.

```json
{
    "security": {
        "username": "admin",
        "password": "admin"
    }
}
```

### `pools`

Node SMS Gateway can connects to multiple terminals. Each terminal can be
configured as shown below.

```json
{
    "pools": [
        {
            "name": "localhost",
            "url": "http://localhost:8000",
            "key": "CHANGEME"
        }
    ]
}
```

## Command line options

```
$ node app.js --help
Usage:
  node app.js [options]

Options:
--config=config-file  Read app configuration from file
--url=url, -u=url     Use terminal at URL if no configuration supplied
--key=key, -k=key     Terminal secret key
--port=port, -p=port  Set web server port to listen
--plugins=plugins     Load plugins at start, separate each plugin with comma
```

## Web interface

Node SMS Gateway web interface can be accessed via port `8080` (default) or as
specified by the command line options above.

## Todo

- Socket and web interface currently doesn't support https
npm package: @ntlab/sms-terminal
Description: SMS Terminal
Author: Toha
Latest version: 3.2.3

# Node SMS Terminal

## Introduction

Node SMS Terminal is designed to handle GSM communication such as sending or
receiving short message (SMS), querying USSD data from network provider. It
utilizes modem dongle usually used to connect to data network from provider,
so it doesn't need special or expensive hardware.

Node SMS Terminal doesn't provide direct method to handle its functionality,
but it uses socket communication to provide those functionality to other party.

Currently, there is [Node SMS Gateway](https://github.com/tohenk/node-sms-gateway)
other party implementation for this terminal.

## Installation

Stand alone installation is available using GIT.

```
$ cd ~
$ git clone https://github.com/tohenk/node-sms-terminal.git
$ cd node-sms-terminal
$ npm install
```

A web interface installation is needed as its now a separate package.

```
$ npm install @ntlab/sms-terminal-ui
```

To run application (On some Linux distribution replace `node` with `nodejs`)

```
$ node app.js --auto
```

## Configuration

Node SMS Terminal uses JSON configuration named `config.json` in the working
directory, but it can be told to use configuration elsewhere.

### `database`

Set [Sequelize](http://docs.sequelizejs.com/) database connection parameter.

```json
{
    "database": {
        "dialect": "mysql",
        "host": "localhost",
        "port": 3306,
        "user": "username",
        "password": "password",
        "database": "smsgw",
        "timezone": "Asia/Jakarta"
    }
}
```

### `secret`

Set socket connection secret. Each socket client must send `auth` with secret
and will be checked against this value. If it matches, connection accepted,
otherwise connection will be closed.

```json
{
    "secret": "CHANGEME"
}
```

### `security`

Set web interface username and password. Default username and password is both
`admin`. To secure your instance, it is advised to change default password.

```json
{
    "security": {
        "username": "admin",
        "password": "admin"
    }
}
```

## Command line options

```
$ node app.js --help
Usage:
  node app.js [options]

Options:
--config=config-file  Read app configuration from file
--driver=driver-file  Read driver from file
--port=port, -p=port  Set web server port to listen
--logdir=directory    Set the log file location
--auto, -a            Automatically open all available ports
--read-new-message    Once the terminal opened, try to read new messages
--log-ussd, -u        Add ussd command to activity
```

## Web interface

Node SMS Terminal web interface can be accessed via port `8000` (default) or as
specified by the command line options above.

## Todo

- Text SMS mode currently not supported
- STK functionality still missing
- Socket and web interface currently doesn't support https
npm package: @ntlab/urllib
Description: A Universal URL Library
Author: Toha
Latest version: 1.1.0

# A Universal URL Library

## Perform webhook call

```js
const UrlFetch = require('@ntlab/urllib/fetch');

const payload = {message: 'This is the payload'};
const params = {
    method: 'POST',
    data: Buffer.from(JSON.stringify(payload)),
    dataType: 'application/json',
    headers: {
        authorization: 'Bearer MYTOKEN'
    }
}
const callback = new UrlFetch();
callback.fetch('https://example.com/mywebhook', params)
    .then(res => {
        if (res) {
            console.log(res);
        }
    })
    .catch(err => console.error(err));
```

## Download a file

```js
const UrlDownload = require('@ntlab/urllib/download');

let totalSize;
const downloader = new UrlDownload();
downloader.fetch('https://example.com/myfile.dat',
    {
        outfile: '/path/to/myfile.dat',
        onstart: async data => {
            if (data.headers) {
                totalSize = parseInt(data.headers['content-length']);
            }
        },
        ondata: async data => {
            if (data.stream && totalSize > 0) {
                const bytesDone = data.stream.bytesWritten;
                console.log(`Downloaded ${Math.round(bytesDone / totalSize * 100)}%...`);
            }
        }
    })
    .then(data => {
        // data is the downloaded content stream
    })
    .catch(err => console.error(err));
```
npm package: @ntlab/webrobot
Description: A webrobot based on Selenium
Author: Toha
Latest version: 2.6.0

# WebRobot, A Selenium Addons

Provide a base class to extends to use Selenium for web automation.

```js
const { WebRobot } = require('@ntlab/webrobot');

class MyWebRobot extends WebRobot {

}
```
npm package: @ntlab/work
Description: Nodejs queue and promise based work queue
Author: Toha
Latest version: 2.5.0

# Nodejs Queue and Promise Based Work Queue

## Queue Processing (queue.js)

Provide a queue mechanism.

```js
const { Queue } = require('@ntlab/work');

const queues = ['One', 'Two', 'Three'];
const q = new Queue(queues, seq => {
    console.log(seq);
    q.next();
});
q.once('done', () => {
    ...
});
```

## Promise Based Work Queue (work.js)

Provide promise queue mechanism for easy chaining. It accepts a function as its
worker. Its also accepts an array with signature of `[[string,] function, function]`.
If the first element is a string, it is considered as step name and can be used to
reference the result later, otherwise the first element would be the worker and
the second would be a state function and must be evaluated to true for worker to
be executed.

```js
const { Work } = require('@ntlab/work');

Work.works([
    ['step-1', w => new Promise((resolve, reject) => {
        console.log('First work');
        resolve(false);
    })],
    ['step-2', w => new Promise((resolve, reject) => {
        console.log('This will be skipped');
        resolve();
    }), w => w.getRes(0)/* can be referenced using w.getRes('step-1') */],
    ['step-3', w => new Promise((resolve, reject) => {
        console.log('It\'s done');
        resolve();
    })],
])
.then(res => {
    ...
})
.catch(err => {
    ...
});
```
npm package: @ntlib/status-monitor-nestjs
Description: Realtime Monitoring for Express-based NestJS V9+ Apps
Author: ntedgi
Latest version: 1.0.3

# @ntlib/status-monitor-nestjs

Simple, self-hosted module based on Socket.io and Chart.js to report realtime server metrics for NestJS v9+ based servers.

```sh 
$ npm i @ntlib/status-monitor-nestjs
```

### NodeJS and Nest Compatibility Matrix.
####
| Node Version | Nest Version |
|--------------|--------------|
| ^18.x        | ^9.x         |
####
###

![Status monitor page](https://raw.githubusercontent.com/ntedgi/nestjs-status-monitor/main/assets/demo.gif?token=GHSAT0AAAAAACGYTHRFFTOGCQG3TJ6GCYSSZHMWXJQ)

## Installation & setup NestJS 

1. Run `npm install @ntlib/status-monitor-nestjs @nestjs/platform-socket.io@9.4.3 --save`
2. Setup module import:

```javascript
@Module({
  imports: [StatusMonitorModule.forRoot()] //default config
})
```

3. Run server and visit `/status`

## Options

Monitor can be configured by passing options object during initialization of
module.

```javascript
@Module({
  imports: [StatusMonitorModule.forRoot(config)]
})
```

Default config:

```javascript
{
  title: 'NestJS Status',
  path: '/status',
  socketPath: '/socket.io',
  port: null, 
  spans: [
    {
      interval: 1, 
      retention: 60, 
    },
    {
      interval: 5,
      retention: 60,
    },
    {
      interval: 15, 
      retention: 60,
    },
  ],
  chartVisibility: {
    cpu: true,
    mem: true,
    load: true,
    eventLoop: true,
    heap: true,
    responseTime: true,
    rps: true,
    statusCodes: true,
  },
  ignoreStartsWith: ['/admin'],
  healthChecks: [],
}
```

## Health Checks

You can add a series of health checks to the configuration that will appear
below the other stats. The health check will be considered successful if the
endpoint returns a 200 status code.

```javascript
// config
healthChecks: [
  {
    protocol: 'http',
    host: 'localhost',
    path: '/health/alive',
    port: 3001,
  },
  {
    protocol: 'http',
    host: 'localhost',
    path: '/health/dead',
    port: 3001,
  },
];
```

## Local demo

1. Run the following:

```sh
npm i
cd examples/integrate-status-monitor
npm i
npm start
```

2. Visit [http://localhost:3001/status](http://localhost:3001/status)
npm package: @ntm-al/angular
Description: ## Validators
Author: NTM Team
Latest version: 2.2.6-beta

# NtmAngular

## Validators

- Cpf
- Email
- Instagram
- Phone
- Required
- Twitter
- MatchPassword

## Directives

- Cpf (mask)
- Instagram
- Phone (mask)
- Twitter
- Cep (mask)

## Pipes (in progress)

- Difference Time
- First and last name
- number to month

## Publishing

ng build core --prod
cd dist/core
npm publish

## TODO:

- [ ] Create test to directives
- [ ] Create test to validators
- [ ] Create test to pipes
- [x] Adding ESLint
- [ ] Typescript integration to see documentation
- [x] Lint all files
- [x] Pipes
- [ ] Create a example project to show how to use
- [ ] Create a static page with githubPages
npm package: @ntnbrtnkv/ga4node
Description: An Open-Source Google Analytics 4 Client-Side Protocol Implementation
Author: David Vallejo
Latest version: 0.0.8


# GA4MP - Google Analytics 4 Measurement Protocol

This is an open-source implementation for the *client-side* protocol used by **Google Analytics 4**. When I mention "**client-side**" is because it must be differentiated with the official [GA4 Measurement Protocol](https://developers.google.com/analytics/devguides/collection/protocol/ga4) offered by Google.
  
This library implements the public **Google Analytics 4** protocol to make possible to do a full server-side tracking using NODE/JS which is not actually possible with the official **Measurement Protocol** , which is meant only to augment the current GA4 data and it's not ready for doing a full tracking.
  
Main differences with the official offerser server-side protocol are:

- Trigger new sessions and visits starts
- Track Sessions attribution
- Override the User IP to populate the GEO Details
- View the hits on the DebugView
- Override ANY value you want
- Easily portable to other languages

If we compare this library with the official GTAG implementation.

 - Lightweight 8.7kb (<4kb compressed ) 95.6% Lighter than a GTAG Container
![image](https://user-images.githubusercontent.com/1494564/201500771-f54c592b-4f37-4ac1-9a89-87878987cc33.png)
 - Privacy Compliant: Full control over which cookies are created/read and sent to Google
 - Dual Tracking (send hits to multiple measurement Ids)

## Usage

#### **ES6 Imports**

    import  ga4mp  from  '@analytics-debugger/ga4mp'
    const  ga4track = ga4mp(["G-THYNGSTER"], {
    	user_id:  undefined,
    	non_personalized_ads:  true,
    	debug:  true
    });

#### **Browser**
<.script  src="https://cdn.jsdelivr.net/npm/@analytics-debugger/ga4mp@latest/dist/ga4mp.umd.min.js">< /script>

    const  ga4track  =  ga4mp(["G-THYNGSTER"],  {
    	user_id: undefined,
    	non_personalized_ads: true,
    	debug: true
    });

#### **NODE.JS**

    const  ga4mp = require('./dist/ga4mp')
    const  ga4track = ga4mp(["G-THYNGSTER"], {
    	user_id:  undefined,
    	non_personalized_ads:  true,
    	debug:  true
    });

# More API details
Read more at: https://ga4mp.dev/
npm package: @ntnyq/css
Description: Sharable CSS
Author: ntnyq
Latest version: 0.0.0

# @ntnyq/css

[![CI](https://github.com/ntnyq/css/workflows/CI/badge.svg)](https://github.com/ntnyq/css/actions)
[![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/css.svg)](https://www.npmjs.com/package/@ntnyq/css)
[![NPM DOWNLOADS](https://img.shields.io/npm/dy/@ntnyq/css.svg)](https://www.npmjs.com/package/@ntnyq/css)
[![LICENSE](https://img.shields.io/github/license/ntnyq/css.svg)](https://github.com/ntnyq/css/blob/main/LICENSE)

Sharable CSS.

## Install

```shell
npm install @ntnyq/css
```

```shell
yarn add @ntnyq/css
```

```shell
pnpm add @ntnyq/css
```

## License

[MIT](./LICENSE) License © 2025-PRESENT [ntnyq](https://github.com/ntnyq)
npm package: @ntnyq/ease
Description: [![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/ease.svg)](https://www.npmjs.com/package/@ntnyq/ease)
Author: ntnyq
Latest version: 0.2.0

# @ntnyq/ease

[![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/ease.svg)](https://www.npmjs.com/package/@ntnyq/ease)

## Install

```shell
npm i @ntnyq/ease
```

```shell
yarn add @ntnyq/ease
```

```shell
pnpm add @ntnyq/ease
```

## Usage

**TODO**

## Credits

- [easings.net](https://easings.net)

## License

[MIT](./LICENSE) License © 2022-PRESENT [ntnyq](https://github.com/ntnyq)
npm package: @ntnyq/element-validators
Description: [![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/element-validators.svg)](https://www.npmjs.com/package/@ntnyq/element-validators)
Author: ntnyq
Latest version: 0.2.0

# @ntnyq/element-validators

[![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/element-validators.svg)](https://www.npmjs.com/package/@ntnyq/element-validators)

## Install

```shell
pnpm add element-plus @ntnyq/element-validators
```

## Utils

## License

[MIT](./LICENSE) License © 2022-PRESENT [ntnyq](https://github.com/ntnyq)
npm package: @ntnyq/eslint-config-prettier-react
Description: ntnyq eslint config for React.js with prettier
Author: ntnyq
Latest version: 0.1.14

# EsLint config for React.js with Prettier

## Usage

### Install

```bash
$ npm i @ntnyq/eslint-config-prettier-react -D
# OR
$ yarn add @ntnyq/eslint-config-prettier-react -D
```

### Extend this config

in `.eslintrc.js`

```js
module.exports = {
    root: true,

    extends: ['@ntnyq/prettier-react'],

    rules: {
        // Override rules
    },
}
```

in `package.json`

```json
{
    "eslintConfig": {
        "root": true,
        "extends": "@ntnyq/prettier-react"
    }
}
```
npm package: @ntnyq/eslint-config-prettier-typescript
Description: ntnyq eslint config for TypeScript with prettier
Author: ntnyq
Latest version: 0.1.15

# EsLint config for TypeScript with Prettier

## Usage

### Install

```bash
$ npm i @ntnyq/eslint-config-prettier-typescript -D
# OR
$ yarn add @ntnyq/eslint-config-prettier-typescript -D
```

### Extend this config

in `.eslintrc.js`

```js
module.exports = {
    root: true,

    extends: ['@ntnyq/prettier-typescript'],

    rules: {
        // Override rules
    },
}
```

in `package.json`

```json
{
    "eslintConfig": {
        "root": true,
        "extends": "@ntnyq/prettier-typescript"
    }
}
```
npm package: @ntnyq/eslint-config-prettier-typescript-react
Description: ntnyq eslint config for TypeScript and React.js with Prettier
Author: ntnyq
Latest version: 0.1.16

# EsLint config for React.js and TypeScript with Prettier

## Usage

### Install

```bash
$ npm i @ntnyq/eslint-config-prettier-typescript-react -D
# OR
$ yarn add @ntnyq/eslint-config-prettier-typescript-react -D
```

### Extend this config

in `.eslintrc.js`

```js
module.exports = {
    root: true,

    extends: ['@ntnyq/prettier-typescript-react'],

    rules: {
        // Override rules
    },
}
```

in `package.json`

```json
{
    "eslintConfig": {
        "root": true,
        "extends": "@ntnyq/prettier-typescript-react"
    }
}
```
npm package: @ntnyq/eslint-config-prettier-typescript-vue
Description: ntnyq eslint config for TypeScript and Vue.js with Prettier
Author: ntnyq
Latest version: 0.1.15

# EsLint config for Vue.js and TypeScript with Prettier

## Usage

### Install

```bash
$ npm i @ntnyq/eslint-config-prettier-typescript-vue -D
# OR
$ yarn add @ntnyq/eslint-config-prettier-typescript-vue -D
```

### Extend this config

in `.eslintrc.js`

```js
module.exports = {
    root: true,

    extends: ['@ntnyq/prettier-typescript-vue'],

    rules: {
        // Override rules
    },
}
```

in `package.json`

```json
{
    "eslintConfig": {
        "root": true,
        "extends": "@ntnyq/prettier-typescript-vue"
    }
}
```
npm package: @ntnyq/eslint-config-prettier-vue
Description: ntnyq eslint config for Vue.js with prettier
Author: ntnyq
Latest version: 0.1.10

# EsLint config for Vue.js with Prettier

## Usage

### Install

```bash
$ npm i @ntnyq/eslint-config-prettier-vue -D
# OR
$ yarn add @ntnyq/eslint-config-prettier-vue -D
```

### Extend this config

in `.eslintrc.js`

```js
module.exports = {
    root: true,

    extends: ['@ntnyq/prettier-vue'],

    rules: {
        // Override rules
    },
}
```

in `package.json`

```json
{
    "eslintConfig": {
        "root": true,
        "extends": "@ntnyq/prettier-vue"
    }
}
```
npm package: @ntnyq/eslint-config-typescript-react
Description: ntnyq eslint config for TypeScript and React.js
Author: ntnyq
Latest version: 0.1.15

# EsLint config for React.js and TypeScript

## Usage

### Install

```bash
$ npm i @ntnyq/eslint-config-typescript-react -D
# OR
$ yarn add @ntnyq/eslint-config-typescript-react -D
```

### Extend this config

in `.eslintrc.js`

```js
module.exports = {
    root: true,

    extends: ['@ntnyq/typescript-react'],

    rules: {
        // Override rules
    },
}
```

in `package.json`

```json
{
    "eslintConfig": {
        "root": true,
        "extends": "@ntnyq/typescript-react"
    }
}
```
npm package: @ntnyq/eslint-config-typescript-vue
Description: ntnyq eslint config for TypeScript and Vue.js
Author: ntnyq
Latest version: 0.1.14

# EsLint config for Vue.js and TypeScript

## Usage

### Install

```bash
$ npm i @ntnyq/eslint-config-typescript-vue -D
# OR
$ yarn add @ntnyq/eslint-config-typescript-vue -D
```

### Extend this config

in `.eslintrc.js`

```js
module.exports = {
    root: true,

    extends: ['@ntnyq/typescript-vue'],

    rules: {
        // Override rules
    },
}
```

in `package.json`

```json
{
    "eslintConfig": {
        "root": true,
        "extends": "@ntnyq/typescript-vue"
    }
}
```
npm package: @ntnyq/logger
Description: [![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/logger.svg)](https://www.npmjs.com/package/@ntnyq/logger)
Author: ntnyq
Latest version: 0.2.0

# @ntnyq/logger

[![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/logger.svg)](https://www.npmjs.com/package/@ntnyq/logger)

## Install

```shell
pnpm add @ntnyq/logger picocolors dayjs -D
```

## Usage

**default logger**:

```ts
import logger from '@ntnyq/logger'

logger.debug(`debug message`)
logger.info(`info message`)
logger.success(`success message`)
logger.warn(`warn message`)
logger.error(`error message`)
```

**custom logger**:

```ts
import { createLogger } from '@ntnyq/logger'

const logger = createLogger({ prefix: `[@ntnyq/logger]` })

logger.debug(`debug message`)
logger.info(`info message`)
logger.success(`success message`)
logger.warn(`warn message`)
logger.error(`error message`)
```

## Options

`createLogger` options:

### `prefix`

log prefix

**type**: `string`

**default**: ``

### `type`

show log type: `debug`, `info`, `success`, `warn`, `error`

**type**: `boolean`

**default**: `true`

### `mode`

if `prod`, `debug` message will not be shown

**type**: `dev | prod`

**default**: `dev`

### `enable`

set `false` to disable all log

**type**: `boolean`

**default**: `true`

### `time`

set `string` for time format.

set `false` to disable time.

set `true` to enable time with format `YYYY-MM-DD HH:mm:ss`.

**type**: `string | boolean`

**default**: `false`

## License

[MIT](./LICENSE) License © 2022-PRESENT [ntnyq](https://github.com/ntnyq)
npm package: @ntnyq/prettier-config
Description: Sharable prettier config of ntnyq.
Author: ntnyq
Latest version: 3.0.1

# @ntnyq/prettier-config

[![CI](https://github.com/ntnyq/prettier-config/workflows/CI/badge.svg)](https://github.com/ntnyq/prettier-config/actions)
[![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/prettier-config.svg)](https://www.npmjs.com/package/@ntnyq/prettier-config)
[![NPM DOWNLOADS](https://img.shields.io/npm/dy/@ntnyq/prettier-config.svg)](https://www.npmjs.com/package/@ntnyq/prettier-config)
[![LICENSE](https://img.shields.io/github/license/ntnyq/prettier-config.svg)](https://github.com/ntnyq/prettier-config/blob/main/LICENSE)

My sharable prettier config.

## Style

- 2 spaces
- No semi
- Single quote
- Trailing comma
- Avoid arrow parens

## Install

```shell
npm install @ntnyq/prettier-config
```

```shell
yarn add @ntnyq/prettier-config
```

```shell
pnpm add @ntnyq/prettier-config
```

```shell
bun add @ntnyq/prettier-config
```

### Usage

Config in `prettier.config.mjs`:

### Basic usage

```mjs
// @ts-check

import { defineConfig } from '@ntnyq/prettier-config'

export default defineConfig()
```

### Custom options

```mjs
// @ts-check

import { defineConfig } from '@ntnyq/prettier-config'

export default defineConfig({
  printWidth: 100,
  trailingComma: 'none',
  overrides: [
    {
      files: ['**/*.html'],
      options: {
        singleAttributePerLine: false,
      },
    },
    {
      files: ['**/*.{css,scss}'],
      options: {
        singleQuote: false,
      },
    },
  ],
})
```

## Config in VSCode

Config in `.vscode/settings.json`:

```json
{
  "prettier.enable": true,
  "editor.formatOnSave": true,
  "prettier.configPath": "./prettier.config.mjs",
  "editor.defaultFormatter": "esbenp.prettier-vscode"
}
```

## License

[MIT](./LICENSE) License © 2020-PRESENT [ntnyq](https://github.com/ntnyq)
npm package: @ntnyq/storage
Description: [![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/storage.svg)](https://www.npmjs.com/package/@ntnyq/storage)
Author: ntnyq
Latest version: 0.2.0

# @ntnyq/storage

[![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/storage.svg)](https://www.npmjs.com/package/@ntnyq/storage)

## Install

```shell
pnpm add @ntnyq/storage
```

## License

[MIT](./LICENSE) License © 2022-PRESENT [ntnyq](https://github.com/ntnyq)
npm package: @ntnyq/stylelint-config
Description: ntnyq stylelint config
Author: ntnyq
Latest version: 0.2.0

# StyleLint config

## Usage

### Install

```bash
$ npm i @ntnyq/stylelint-config -D
# OR
$ yarn add @ntnyq/stylelint-config -D
```

### Extend this config

in `.stylelintrc.yml`

```yaml
extends:
  - @ntnyq/stylelint-config
```

in `package.json`

```json
{
    "stylelint": {
        "extends": ["@ntnyq/stylelint-config"]
    }
}
```
npm package: @ntnyq/stylelint-config-order
Description: ntnyq's stylelint config with order
Latest version: 0.1.0

# stylelint-config-order

> ntnyq's stylelint config with order

## Usage

### Install

```bash
$ npm i @ntnyq/stylelint-config-order -D
# OR
$ yarn add @ntnyq/stylelint-config-order -D
```

### Extend this config

in `.stylelintrc.yml`

```yml
extends:
    - '@ntnyq/stylelint-config-order'

rules:
    # Override rules
```

in `package.json`

```json
{
    "stylelint": {
        "extends": "@ntnyq/stylelint-config-order"
    }
}
```
npm package: @ntnyq/stylelint-config-prettier
Description: ntnyq's stylelint config with prettier
Latest version: 0.1.0

# stylelint-config-prettier

> ntnyq's stylelint config with prettier

## Usage

### Install

```bash
$ npm i @ntnyq/stylelint-config-prettier -D
# OR
$ yarn add @ntnyq/stylelint-config-prettier -D
```

### Extend this config

in `.stylelintrc.yml`

```yml
extends:
    - '@ntnyq/stylelint-config-prettier'

rules:
    # Override rules
```

in `package.json`

```json
{
    "stylelint": {
        "extends": "@ntnyq/stylelint-config-prettier"
    }
}
```
npm package: @ntnyq/stylelint-config-scss
Description: ntnyq stylelint config
Author: ntnyq
Latest version: 0.2.0

# StyleLint config for SCSS

## Usage

### Install

```bash
$ npm i @ntnyq/stylelint-config-scss -D
# OR
$ yarn add @ntnyq/stylelint-config-scss -D
```

### Extend this config

in `.stylelintrc.yml`

```yaml
extends:
  - @ntnyq/stylelint-config-scss
```

in `package.json`

```json
{
    "stylelint": {
        "extends": ["@ntnyq/stylelint-config-scss"]
    }
}
```
npm package: @ntnyq/stylelint-config-vue
Description: ntnyq's stylelint config for vue SFC
Latest version: 0.1.0

# stylelint-config-vue

> ntnyq's stylelint config for vue SFC

## Usage

### Install

```bash
$ npm i @ntnyq/stylelint-config-vue -D
# OR
$ yarn add @ntnyq/stylelint-config-vue -D
```

### Extend this config

in `.stylelintrc.yml`

```yml
extends:
    - '@ntnyq/stylelint-config-vue'

rules:
    # Override rules
```

in `package.json`

```json
{
    "stylelint": {
        "extends": "@ntnyq/stylelint-config-vue"
    }
}
```
npm package: @ntnyq/tsconfig
Description: [![CI](https://github.com/ntnyq/configs/workflows/CI/badge.svg)](https://github.com/ntnyq/configs/actions) [![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/tsconfig.svg)](https://www.npmjs.com/package/@ntnyq/tsconfig) [![NPM DOWNLOADS](https://img.shie
Author: ntnyq
Latest version: 3.1.0

# @ntnyq/tsconfig

[![CI](https://github.com/ntnyq/configs/workflows/CI/badge.svg)](https://github.com/ntnyq/configs/actions)
[![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/tsconfig.svg)](https://www.npmjs.com/package/@ntnyq/tsconfig)
[![NPM DOWNLOADS](https://img.shields.io/npm/dy/@ntnyq/tsconfig.svg)](https://www.npmjs.com/package/@ntnyq/tsconfig)
[![LICENSE](https://img.shields.io/github/license/ntnyq/configs.svg)](https://github.com/ntnyq/configs/blob/main/LICENSE)

Opinionable and shareable tsconfig of [ntnyq](https://ntnyq.com).

## Install

```shell
npm install @ntnyq/tsconfig -D
```

```shell
yarn add @ntnyq/tsconfig -D
```

```shell
pnpm add @ntnyq/tsconfig -D
```

## Usage

Preset `base`:

```json
{
  "extends": "@ntnyq/tsconfig/base.json",
  "compilerOptions": {}
}
```

Preset `strict`:

```json
{
  "extends": "@ntnyq/tsconfig/strict.json",
  "compilerOptions": {}
}
```

## License

[MIT](./LICENSE) License © 2025-PRESENT [ntnyq](https://github.com/ntnyq)
npm package: @ntnyq/types
Description: [![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/types.svg)](https://www.npmjs.com/package/@ntnyq/types)
Author: ntnyq
Latest version: 0.0.2

# @ntnyq/types

[![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/types.svg)](https://www.npmjs.com/package/@ntnyq/types)

## Install

```bash
pnpm add @ntnyq/types
```

## License

[MIT](./LICENSE) License © 2022-PRESENT [ntnyq](https://github.com/ntnyq)
npm package: @ntnyq/utils
Description: Common used utils.
Author: ntnyq
Latest version: 0.11.6

# @ntnyq/utils

[![CI](https://github.com/ntnyq/utils/workflows/CI/badge.svg)](https://github.com/ntnyq/utils/actions)
[![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/utils.svg)](https://www.npmjs.com/package/@ntnyq/utils)
[![NPM DOWNLOADS](https://img.shields.io/npm/dy/@ntnyq/utils.svg)](https://www.npmjs.com/package/@ntnyq/utils)
[![LICENSE](https://img.shields.io/github/license/ntnyq/utils.svg)](https://github.com/ntnyq/utils/blob/main/LICENSE)

> Common used utils.

## Install

```shell
npm install @ntnyq/utils
```

```shell
yarn add @ntnyq/utils
```

```shell
pnpm add @ntnyq/utils
```

## Credits

- [antfu/utils](https://github.com/antfu/utils)

## License

[MIT](./LICENSE) License © 2024-PRESENT [ntnyq](https://github.com/ntnyq)
npm package: @ntourne/bitcoin-cli
Description: A Bitcoin command line tool
Author: Nicolas Tourne
Latest version: 1.0.10

# bitcoin-cli
A Bitcoin command line tool to get current price. That's all.


### Installation
```bash
$ [sudo] npm install -g @ntourne/bitcoin-cli
```

### Command Line Interface
Just run `bitcoin` and price will show.
```bash
$ bitcoin
```

### Example
```bash
$ bitcoin
> BTC 1
> USD 4,209
> GBP 3,141
> EUR 3,563
Yesterday: +0.56%   7 days: +9.09%   30 days: -9.45%
Updated: Sep 29, 2017 16:16:00 UTC
```
npm package: @ntpanel/plugin-sdk
Description: SDK for developing NT Panel plugins
Author: NT Panel
Latest version: 1.0.0

# @ntpanel/plugin-sdk

SDK for developing NT Panel plugins.

## Installation

```bash
npm install @ntpanel/plugin-sdk
```

## Quick Start

Create a new plugin:
```bash
npx ntplugin create my-plugin
cd my-plugin
npm install
npm run build
npm run pack
```

## Plugin Structure

```
my-plugin/
├── plugin.json       # Plugin manifest
├── package.json
├── tsconfig.json
├── src/
│   └── backend/
│       └── index.ts  # Main plugin class
└── dist/             # Compiled output
```

## Example Plugin

```typescript
import { PluginBase, PluginContext, PluginRoute } from '@ntpanel/plugin-sdk';

export default class MyPlugin extends PluginBase {
    readonly name = 'My Plugin';

    async init(context: PluginContext): Promise<void> {
        this.context = context;
        this.log('Plugin initialized');
    }

    getRoutes(): PluginRoute[] {
        return [
            {
                path: '/hello',
                method: 'GET',
                handler: async (req, res) => {
                    res.json({ message: 'Hello!' });
                }
            }
        ];
    }
}
```

## CLI Commands

| Command | Description |
|---------|-------------|
| `ntplugin create <name>` | Create new plugin from template |
| `ntplugin build` | Compile TypeScript |
| `ntplugin validate` | Validate plugin.json |
| `ntplugin pack` | Create .ntplugin archive |

## Publishing

1. Build your plugin: `npm run build`
2. Pack it: `npm run pack`
3. Upload the `.ntplugin` file to the NT Panel Developer Portal

## License

MIT