open-index/open-npm huggingface dataset:
npm package: @muperro/tojson
Description: > @ToJson : property decorator for Typescript.
Author: μ perro
Latest version: 0.1.4

# ToJson

> @ToJson : property decorator for Typescript. 

[![NPM version][npm-image]][npm-url] [![build][build-image]][build-url] [![publish][publish-image]][publish-url] [![codecov][codecov-image]][codecov-url]

---

## Getting Started

### Prerequisites

- Node 10+
- Typescript 1.5+

### Installation

```console
npm install @muperro/tojson
# or
yarn add @muperro/tojson
```
### Sample

```ts
import { ToJson, JsonValueFormat, fromObject, toJSON } from "@muperro/tojson";

class UserInfoEntity {
  @ToJson({ name: "one" })
  info1: number;

  @ToJson({ name: "two" })
  info2: string;

  @ToJson({ name: "secret", format: JsonValueFormat.BYTE_LENGTH })
  secret: string;
}

class UserEntity {
  @ToJson() // default
  id: number;
  
  @ToJson({ name: "Name" }) // rename key
  name: string;

  // custom value format
  @ToJson({ custom: (v: any) => v.substring(0, 2).padEnd(v.length, "*") })
  phone: string;

  // exclude of toJSON
  password: string;

  // date format (YYYY-MM-DD)
  @ToJson({ format: JsonValueFormat.DT_YMD })
  createdAt: Date;

  // date format (YYYY-MM-DD HH:mm:ss)
  @ToJson({ format: JsonValueFormat.DT_YMD_HMS })
  updatedAt: Date;

  // format by toJSON
  @ToJson({ format: JsonValueFormat.JSON })
  info: UserInfoEntity;
}

const info = { info1: 1, info2: "2", secret: "SECRET" }; // object
const userInfoEntity = fromObject(UserInfoEntity, info); // object to instance

const user = {
  id: 1,
  name: "user",
  phone: "1234567890",
  password: "0987654321",
  createdAt: new Date(),
  updatedAt: new Date(),
  info: userInfoEntity,
}; // objet
const userEntity = fromObject(UserEntity, user); // object to instance

const json = toJSON(userEntity);
console.log(json);
// {
//   id: 1,
//   Name: 'user',
//   phone: '12********',
//   createdAt: '2020-08-17',
//   updatedAt: '2020-08-17 22:37:42',
//   info: { one: 1, two: '2', secret: 6 }
// }
```

## Support & Contributions

## License

ToJson is licensed under a [MIT License](https://github.com/muperro/tojson/blob/master/LICENSE).

[npm-image]: https://img.shields.io/npm/v/@muperro/tojson
[npm-url]: https://www.npmjs.com/package/@muperro/tojson
[build-image]: https://github.com/muperro/tojson/workflows/build/badge.svg
[build-url]: https://github.com/muperro/tojson/actions
[publish-image]: https://github.com/muperro/tojson/workflows/publish/badge.svg
[publish-url]: https://github.com/muperro/tojson/actions
[codecov-image]: https://codecov.io/gh/muperro/tojson/branch/master/graph/badge.svg
[codecov-url]: https://codecov.io/gh/muperro/tojson
npm package: @mupiao/alert
Description: Web前端开发 常用弹窗、抽屉、确认框、弹出层、加载框、模态框、消息提示
Author: 沐枫（MuGuiLin）
Latest version: 1.0.2

# @MUPIAO/ALERT

---

[![MIT License](https://img.shields.io/npm/l/utilsjs.svg?style=flat-square)](https://www.npmjs.com/package/mu-alert)

> Web 前端开发 常用弹窗、抽屉、确认框、加载框、弹出层、模态框、消息提示等工具集！

#### 下载安装：

```shell
# 使用npm命令下载安装
$ npm i @mupiao/alert

# 使用yarn命令下载安装
yarn add @mupiao/alert
```
---
#### 使用方法：

- 通过 JS Module(模块)方式导入使用

  ```html
  <!-- ES6模块导入使用 -->
  <script type="module">
    /**
     * 1、全部引入使用
     **/
    import * as mu from "@mupiao/alert";

    // 在浏览器控制台中打印mu-alert的所有方法
    console.log(mu);

    // 显示加载动画
    mu.loading();

    // 关闭加载动画
    mu.loading.close();

    /**
     * 2、按需引入使用
     **/
    import { loading, message, notice, drawer, dialog } from "@mupiao/alert";

    // 显示加载动画
    loading();

    // 关闭加载动画
    loading.close();
  </script>
  ```

- 通过 script 标签以 CDN 的形式引入使用

  ```html
  <!-- 将mu-alert.js下载后，在html文件中引入本地脚本 -->
  <script src="./js/mu-alert.js"></script>
  <script>
    // 在浏览器控制台中打印mu-alert的所有方法
    console.log(mu);
  
    // 显示加载动画
    mu.loading;
  
    // 关闭加载动画
    mu.loading.close();
  </script>
  ```
---
#### 重写函数：

- **alert() 弹框**

  > 重写 window 对象下的 alert 方法。

  ```js
  /**
   * @param {String} message // 要弹出的文本
   * @returns Undefined
   */

  alert("Hello World");
  ```

- **confirm() 确认框**

  > 重写 window 对象下的 confirm 方法。

  ```js
  /**
   * @param {String} message // 要提示的文本
   * @param {Function} enterFn // 确定回调方法
   * @param {Function} cancelFn // 取消回调方法
   * @returns Undefined
   */
  
  confirm(
    "Hello World",
    () => {
      // 点击了确定按扭
    },
    () => {
      // 点击了取消按扭
    }
  );
  ```
---
#### 支持情况：

- **loading() 请求加载**

  > 常用于数据请求、数据加载等待时 显示的反馈动效。

  ```js
  // 显示加载动画
  mu.loading();

  // 关闭加载动画
  mu.loading.close();
  ```

- **message() 消息提示**

  > 常用于主动操作后的反馈提示。在顶部居中显示，并自动消失。有多种不同的提示状态可选择。

  ```js
  /**
   * @param message {String | Object}  // 提示内容 | 样式类型（必传）
   * @param callback? {Function}  // 关闭后的回调函数（非必传）
   * @returns Undefined
   */
  
  // 调用方式1
  mu.message("我是message消息提示，我在3秒后自动关闭！", () => {
    console.log("提示已关闭！");
  });
  
  // 调用方式2 success(): 成功提示，error()：错误提示，warning()：警告提示
  mu.message.success("我是message消息提示，我在3秒后自动关闭！", () => {
    console.log("提示已关闭！");
  });
  
  // 调用方式3
  mu.message({
    type: "success", // "success": 成功提示，"error"：错误提示，"warning"：警告提示
    message: "我是message消息提示，我在3秒后自动关闭！",
    duration: 3000, // 显示时间（默认3秒）, 单位(毫秒)，
    callback: () => {
      //  关闭后的回调函数（非必传）
      console.log("提示已关闭！");
    },
  });
  ```
---
#### 后续更新。。。！
npm package: @muppet-kit/inspector
Description: MCP inspector for debugging and inspecting MCP servers.
Latest version: 0.1.22

# Muppet Inspector

It is a devtool for testing and debugging MCPs servers.

[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/muppet-dev/kit/tree/main/packages/inspector)

![Inspector](https://raw.githubusercontent.com/muppet-dev/kit/main/public/inspector.png)

## Usage

```bash
npx muppet-kit inspector
```

## Features

- Explorer - Explore the MCP server's capabilities, while leveraging AI to assist you.
- Playground - Test the MCP server with different LLMs and configurations.
- MCP Scan - Scan the MCP server for vulnerabilities and security issues.
- Tracing - Trace the requests and responses between the client and server. Tunneling is also supported for connecting to remote clients.
- History - View the history of requests and responses between the client and server for the current session.

## Configuration

You can configure the inspector by creating a `muppet.config.js`/`muppet.config.ts` file in the root of your project. The configuration file should export an object with the following properties:

```ts
import { defineInspectorConfig } from "muppet-kit";
import { ngrok } from "muppet-kit/tunnel";
import { openai } from "@ai-sdk/openai";

export default defineInspectorConfig({
  // ...
  models: [openai("gpt-4.1-nano")],
  // You can either pass the API key here or have it in .env as NGROK_API_KEY
  tunneling: ngrok(),
});
```

## Credits

The idea for this project was inspired by the official [MCP Inspector](https://github.com/modelcontextprotocol/inspector) and their amazing work.
npm package: @muppets/finance-data-example1
Description: does financial things
Author: Tim Sameke
Latest version: 1.1.1

# finance data example

## overview

does the stuff with the things

## install

```bash
yarn add @muppets/finance-data-example1

#or

npm i @muppets/finance-data-example1
```

## usage

*getXyz* provides several commonly used stock queries.
each query method returns a list of stock entries -  these may be further manipulated with the *groupByXyz* functions

```javascript
const {
  getGainers,
  groupByExchange,
} = require('@muppets/finance-data-example1')

getGainers()
  .then((gainers) => {
    //view list of gainers
    console.log(gainers)

    //view grouped exchanges
    console.log(groupByExchange(gainers))
  })
  .catch(console.error)
```

## cli

this project supports a cli that provides basic query and formatting commands

```bash
npx stock-query --help

#or

yarn stock-query --help
```
npm package: @muppets/kerfuffle
Description: generates random churn in a repository
Author: Craig Saxton
Latest version: 1.1.2

# kerfuffle

[![CircleCI](https://circleci.com/gh/csaxton/kerfuffle.svg?style=svg)](https://circleci.com/gh/csaxton/kerfuffle) [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)

a little tool that allows you to create random churn in a local repository.

need to practice working with gitflow repositories and/or mono repos? this allows you to practice the management tasks

## install

install the tool right into your practice repository

`yarn add -D @muppets/kerfuffle`

## generate change/churn plans

you can generate and customise 'churn plans' that effectively describe the alterations that will be performed against your repository

```bash
kerfuffle plan . > .my-first-changes.json
```

generate as many of these plans as you'd like and modify their contents should you wish for something less random

## apply change/churn plans

when you are ready to affect the changes run:

```bash
kerfuffle apply . --plan .myfirst-changes.json
```

when done, push your branches up to the origin; create pull requests and do your thing
npm package: @muprotocol/cli
Description: Command line interface for MUP (Model UI Protocol) development
Author: MUP Foundation
Latest version: 0.2.0

# @muprotocol/cli

MUP (Model UI Protocol) CLI - Development tools for dynamic UI applications

## Installation

```bash
npm install -g @muprotocol/cli
```

## Usage

### Initialize a new MUP project

```bash
mup init my-project
cd my-project
```

### Start development server

```bash
mup serve
# or with custom port
mup serve --port 8080
```

### Start development server with hot reload

```bash
mup dev
```

### Validate MUP protocol messages

```bash
mup validate ./path/to/message.json
```

### Build for production

```bash
mup build
```

## Commands

### `mup init [project-name]`

Initialize a new MUP project with the specified name.

**Options:**
- `--template <template>` - Project template to use
- `--force` - Overwrite existing files

### `mup serve`

Start MUP development server.

**Options:**
- `-p, --port <port>` - Port number (default: 3000)
- `-h, --host <host>` - Host address (default: localhost)
- `--protocol <protocol>` - Protocol (ws|wss) (default: ws)
- `-c, --config <config>` - Configuration file path
- `--ssl-cert <cert>` - SSL certificate file (for wss)
- `--ssl-key <key>` - SSL private key file (for wss)
- `-w, --watch` - Watch for file changes and reload
- `-v, --verbose` - Verbose logging

### `mup dev`

Start MUP development server with hot reload.

**Options:**
- `-p, --port <port>` - Port number (default: 3000)
- `-h, --host <host>` - Host address (default: localhost)
- `-c, --config <config>` - Configuration file path
- `--open` - Open browser automatically
- `-v, --verbose` - Verbose logging

### `mup validate <file>`

Validate MUP protocol messages and components.

**Options:**
- `--schema <schema>` - Custom schema file
- `--strict` - Enable strict validation
- `-v, --verbose` - Verbose output

### `mup build`

Build MUP project for production.

**Options:**
- `-o, --output <dir>` - Output directory (default: dist)
- `-c, --config <config>` - Configuration file path
- `--minify` - Minify output
- `-v, --verbose` - Verbose logging

## Configuration

Create a `mup.config.js` file in your project root:

```javascript
module.exports = {
  port: 3000,
  host: 'localhost',
  protocol: 'ws',
  timeout: 30000,
  // Additional configuration options
};
```

## Examples

### Basic WebSocket Server

```bash
# Initialize project
mup init chat-app
cd chat-app

# Start development server
mup serve --port 8080 --verbose
```

### SSL/WSS Server

```bash
mup serve --protocol wss --ssl-cert cert.pem --ssl-key key.pem
```

### Production Build

```bash
mup build --output ./dist --minify
```

## Requirements

- Node.js >= 16.0.0
- npm >= 7.0.0

## License

MIT

## Contributing

See [CONTRIBUTING.md](../../CONTRIBUTING.md) for contribution guidelines.

## Support

For issues and questions, please visit our [GitHub repository](https://github.com/muprotocol/mup-sdk).
npm package: @mur-run/debug
Description: Debug utilities for BitL - dump(), dd(), and Express middleware
Author: BitL Team
Latest version: 0.1.0

# @mur-run/debug

> Debug utilities for Node.js applications with BitL Debug Bar integration.

[![npm version](https://img.shields.io/npm/v/@mur-run/debug.svg)](https://www.npmjs.com/package/@mur-run/debug)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

## Installation

```bash
npm install @mur-run/debug
# or
yarn add @mur-run/debug
# or
pnpm add @mur-run/debug
```

## Quick Start

```typescript
import { dump, dd } from '@mur-run/debug';

// Dump a value (continues execution)
dump({ user: 'John', age: 30 });
dump(myVariable, 'My Label');

// Dump and die (stops execution)
dd(someValue);
```

## Features

### dump(value, label?)

Send a value to BitL Debug Bar. Execution continues.

```typescript
import { dump } from '@mur-run/debug';

const user = { name: 'John', email: 'john@example.com' };
dump(user, 'Current User');

const items = [1, 2, 3, 4, 5];
dump(items);
```

### dd(value, label?)

Dump and die - sends a value and exits the process.

```typescript
import { dd } from '@mur-run/debug';

// Debug and stop here
dd(suspiciousValue, 'Check this!');

// Code below never runs
```

### logError(error, label?)

Log errors with full stack traces.

```typescript
import { logError } from '@mur-run/debug';

try {
  await riskyOperation();
} catch (error) {
  logError(error);
  // Handle error...
}
```

### logQuery(sql, bindings?, durationMs?)

Log database queries with timing.

```typescript
import { logQuery } from '@mur-run/debug';

// Manual logging
logQuery('SELECT * FROM users WHERE id = ?', [1], 12.5);

// With your ORM/Query builder
db.on('query', (query) => {
  logQuery(query.sql, query.bindings, query.duration);
});
```

### Express Middleware

Automatically log all HTTP requests.

```typescript
import express from 'express';
import { expressMiddleware } from '@mur-run/debug';

const app = express();

// Add early in middleware chain
app.use(expressMiddleware());

app.get('/', (req, res) => {
  res.json({ message: 'Hello World' });
});
```

## Configuration

```typescript
import { configure } from '@mur-run/debug';

configure({
  host: '127.0.0.1',  // BitL debug server host
  port: 8765,         // BitL debug server port
  enabled: true,      // Enable/disable debugging
});

// Disable in production
configure({
  enabled: process.env.NODE_ENV !== 'production',
});
```

## Supported Types

The following types are serialized with special handling:

- **Primitives**: strings, numbers, booleans, null, undefined
- **Objects**: plain objects, class instances
- **Arrays**: with nested serialization
- **Errors**: with name, message, and stack trace
- **Dates**: ISO string representation
- **Maps & Sets**: converted to arrays
- **Buffers**: hex preview (first 100 bytes)
- **Functions**: `[Function: name]`
- **Symbols**: `Symbol(description)`
- **BigInt**: string with 'n' suffix

## Requirements

- Node.js 18+
- BitL app running with Debug Server enabled

## License

MIT
npm package: @muradley/grid-plus
Description: Advanced DataGrid component built with React, TanStack Table, and shadcn/ui
Author: Murad Durrani
Latest version: 0.1.0

# GridPlus

**GridPlus** is a high-performance, virtualized data grid component for React. It is built on top of [TanStack Table](https://tanstack.com/table) and designed for large datasets, advanced filtering, multi-column sorting, and modern theming. GridPlus is optimized for responsiveness and performance-critical applications.

## Key Features

- Server-side row fetching and caching
- Virtualized rendering for massive datasets
- Multi-column sorting and filtering
- Theming with Tailwind and ShadCN (Zinc by default)
- Fully typed API with TypeScript support
- Customizable row and column sizes

## Installation

```bash
npm install grid-plus @tanstack/react-table @tanstack/react-virtual
```

GridPlus includes precompiled styles. Tailwind CSS is not required unless you want to override default styles. See the [Theming Guide](./docs/theming.md) for customization options.

## When to Use GridPlus

GridPlus is ideal when:

- You need to render thousands (or millions) of rows without slowing down the UI
- Your data is stored remotely or paginated server-side
- You want multi-column filtering, sorting, and theming out-of-the-box
- You need a highly customizable but developer-friendly table

Example use cases:
- Admin dashboards
- Financial/analytics tools
- Complex internal data browsers

## Quick Start

```tsx
import { DataGrid } from 'grid-plus';
import type { ColumnDef } from '@tanstack/react-table';

type Person = {
  id: number;
  name: string;
  email: string;
  age: number;
};

const columns: ColumnDef<Person>[] = [
  { accessorKey: 'name', header: 'Name' },
  { accessorKey: 'email', header: 'Email', size: 300 },
  { accessorKey: 'age', header: 'Age' },
];

const datasource = {
  getRows: async ({ startRow, endRow, successCallback }) => {
    const response = await fetch(`/api/people?start=${startRow}&end=${endRow}`);
    const data = await response.json();
    successCallback(data.rows, data.totalCount - 1);
  },
};

<div style={{ height: 500 }}>
  <DataGrid columns={columns} datasource={datasource} />
</div>
```

Note: GridPlus must be placed inside a container with a fixed `height` or `maxHeight` and `overflow: auto` to enable virtualization.

## Documentation

See the [full documentation](./docs/index.md) for usage, customization, and API reference.

## Live Examples

Explore interactive demos in [Storybook](https://your-deployment-url.com):

- Default configuration
- Filtering with all filter types
- Multi-column sorting
- Dark mode and custom theming
- Large dataset performance test

## Requirements

- React 18+
- `@tanstack/react-table` v8+
- `@tanstack/react-virtual` v3+

## License

GridPlus is open-source software licensed under the [MIT License](https://opensource.org/licenses/MIT).
npm package: @muraenateam/puppeteer-cluster
Description: Cluster management for puppeteer, forked for Necrobrowser
Author: Thomas Dondorf
Latest version: 0.5.0

# Puppeteer Cluster for Necrobrowser

[![Build Status](https://api.travis-ci.org/thomasdondorf/puppeteer-cluster.svg?branch=master)](https://travis-ci.org/thomasdondorf/puppeteer-cluster)
[![npm](https://badgen.now.sh/npm/v/@muraenateam/puppeteer-cluster)](https://www.npmjs.com/package/@muraenateam/puppeteer-cluster)

> :warning: **This is repo contains a modified version of Puppeteer Cluster for Necrobrowser needs**: Be very careful here!


Create a cluster of puppeteer workers. This library spawns a pool of Chromium instances via [Puppeteer] and helps to keep track of jobs and errors. This is helpful if you want to crawl multiple pages or run tests in parallel. Puppeteer Cluster takes care of reusing Chromium and restarting the browser in case of errors.

- [Installation](#installation)
- ... 
- [License](#license)


## Installation

Install puppeteer (if you don't already have it installed):

`npm install --save puppeteer`

Install puppeteer-cluster:

`npm install --save @muraenateam/puppeteer-cluster`

## Hacking

If you edit the TypeScript source, you need to rebuild first and use a local version of this library.

puppeteer-cluster$ rm -rf ./node-modules && npm run-script clean 
puppeteer-cluster$ npm install tsc typescript jest
puppeteer-cluster$ npm run-script build --target ES6 --force
> @muraenateam/puppeteer-cluster@0.2.1 build
> tsc "ES6"

At this stage you should have freshly generated javascript in dist.

## License

[MIT license](./LICENSE).
npm package: @murai-wallet/core
Description: Core wallet, ledger, and checkout manager for murai
Latest version: 1.0.3

# @murai-wallet/core

Core wallet, ledger, and checkout manager for [Murai](https://github.com/ebuntario/murai) — a payment-gateway-agnostic token wallet library for AI/SaaS applications.

## Install

```bash
npm install @murai-wallet/core
```

## Usage

```typescript
import { createWallet, createLedger, createCheckoutManager } from '@murai-wallet/core';

// Create wallet with your storage adapter
const wallet = createWallet({ storage });

// Check balance and spend
const balance = await wallet.getBalance('user_123');
if (await wallet.canSpend('user_123', 5_000)) {
  await wallet.spend('user_123', 5_000, 'usage-key');
}

// Top up
await wallet.topUp('user_123', 50_000, 'topup-key');
```

## API

| Function | Returns |
| --- | --- |
| `createWallet({ storage })` | `{ getBalance, canSpend, spend, topUp, expireTokens, getUsageReport, getTransactions, getCheckouts }` |
| `createLedger(storage)` | `{ credit, debit, getBalance, getTransactions }` |
| `createCheckoutManager(gateway, ledger, storage)` | `{ createSession, handleWebhook }` |

## Documentation

Full docs: [ebuntario.github.io/murai](https://ebuntario.github.io/murai)

## License

[MIT](../../LICENSE)
npm package: @murai-wallet/gateway-midtrans
Description: Midtrans Snap payment gateway adapter for murai
Latest version: 1.0.3

# @murai-wallet/gateway-midtrans

Midtrans Snap payment gateway adapter for [Murai](https://github.com/ebuntario/murai).

Supports GoPay, ShopeePay, QRIS, bank transfer, and credit card via Midtrans Snap.

## Install

```bash
npm install @murai-wallet/gateway-midtrans @murai-wallet/core
```

## Usage

```typescript
import { createMidtransGateway } from '@murai-wallet/gateway-midtrans';

const gateway = createMidtransGateway({
  serverKey: process.env.MIDTRANS_SERVER_KEY,
  clientKey: process.env.MIDTRANS_CLIENT_KEY,
  sandbox: true,
});

// Use with createCheckoutManager from @murai-wallet/core
```

## Features

- Midtrans Snap checkout integration
- SHA512 timing-safe webhook signature verification
- Payment status polling via Midtrans API
- Sandbox and production support

## Documentation

Full docs: [ebuntario.github.io/murai](https://ebuntario.github.io/murai)

## License

[MIT](../../LICENSE)
npm package: @murai-wallet/gateway-stripe
Description: Stripe Checkout payment gateway adapter for murai
Latest version: 1.0.3

# @murai-wallet/gateway-stripe

Stripe Checkout payment gateway adapter for [Murai](https://github.com/ebuntario/murai).

Supports global card payments, Apple Pay, and Google Pay via Stripe Checkout.

## Install

```bash
npm install @murai-wallet/gateway-stripe @murai-wallet/core stripe
```

## Usage

```typescript
import { createStripeGateway } from '@murai-wallet/gateway-stripe';

const gateway = createStripeGateway({
  secretKey: process.env.STRIPE_SECRET_KEY,
  webhookSecret: process.env.STRIPE_WEBHOOK_SECRET,
});

// Use with createCheckoutManager from @murai-wallet/core
```

## Features

- Stripe Checkout Session integration
- Webhook signature verification via Stripe SDK
- Payment status polling
- Supports all Stripe-enabled payment methods

## Documentation

Full docs: [ebuntario.github.io/murai](https://ebuntario.github.io/murai)

## License

[MIT](../../LICENSE)
npm package: @murai-wallet/gateway-xendit
Description: Xendit Checkout payment gateway adapter for murai
Latest version: 1.0.3

# @murai-wallet/gateway-xendit

Xendit Checkout payment gateway adapter for [Murai](https://github.com/ebuntario/murai).

Supports OVO, DANA, ShopeePay, QRIS, and virtual accounts via Xendit Checkout.

## Install

```bash
npm install @murai-wallet/gateway-xendit @murai-wallet/core
```

## Usage

```typescript
import { createXenditGateway } from '@murai-wallet/gateway-xendit';

const gateway = createXenditGateway({
  secretKey: process.env.XENDIT_SECRET_KEY,
  callbackToken: process.env.XENDIT_CALLBACK_TOKEN,
});

// Use with createCheckoutManager from @murai-wallet/core
```

## Features

- Xendit Checkout integration
- Timing-safe callback token verification
- Payment status polling via Xendit API
- Invoice-based payment flow

## Documentation

Full docs: [ebuntario.github.io/murai](https://ebuntario.github.io/murai)

## License

[MIT](../../LICENSE)
npm package: @murai-wallet/murai
Description: Lightweight token wallet library for AI/SaaS apps — with Midtrans, Xendit & Stripe support
Latest version: 1.0.3

# murai

Lightweight token wallet library for AI/SaaS apps — with Midtrans, Xendit & Stripe support.

This is the convenience meta-package that re-exports all [Murai](https://github.com/ebuntario/murai) modules in a single install.

## Install

```bash
npm install @murai-wallet/murai drizzle-orm postgres
```

## Usage

```typescript
import {
  createWallet,
  createCheckoutManager,
  createLedger,
  createDrizzleStorage,
  createMidtransGateway,
} from 'murai';

const storage = createDrizzleStorage(drizzle(sql));
const gateway = createMidtransGateway({ serverKey, clientKey, sandbox: true });
const wallet = createWallet({ storage });
const ledger = createLedger(storage);
const checkout = createCheckoutManager(gateway, ledger, storage);

// Top up via payment gateway
const session = await checkout.createSession({
  userId: 'user_123',
  amount: 100_000,
  successRedirectUrl: 'https://yourapp.com/success',
  failureRedirectUrl: 'https://yourapp.com/fail',
});

// Spend tokens
await wallet.spend('user_123', 5_000, 'usage-key');
```

## Included Packages

| Package | Description |
| --- | --- |
| `@murai-wallet/core` | Wallet, ledger, checkout manager, types, errors |
| `@murai-wallet/gateway-midtrans` | Midtrans Snap adapter |
| `@murai-wallet/gateway-xendit` | Xendit Checkout adapter |
| `@murai-wallet/gateway-stripe` | Stripe Checkout adapter |
| `@murai-wallet/storage-drizzle` | Drizzle ORM storage (PostgreSQL) |

## Documentation

Full docs: [ebuntario.github.io/murai](https://ebuntario.github.io/murai)

## License

[MIT](../../LICENSE)
npm package: @murai-wallet/storage-drizzle
Description: Drizzle ORM storage adapter for murai (PostgreSQL)
Latest version: 1.0.3

# @murai-wallet/storage-drizzle

Drizzle ORM storage adapter for [Murai](https://github.com/ebuntario/murai) — PostgreSQL with row-level locking.

## Install

```bash
npm install @murai-wallet/storage-drizzle @murai-wallet/core drizzle-orm postgres
```

## Usage

```typescript
import postgres from 'postgres';
import { drizzle } from 'drizzle-orm/postgres-js';
import { createDrizzleStorage } from '@murai-wallet/storage-drizzle';

const sql = postgres(process.env.DATABASE_URL);
const storage = createDrizzleStorage(drizzle(sql));

// Use with createWallet from @murai-wallet/core
```

## Features

- PostgreSQL via `drizzle-orm/postgres-js`
- `SELECT FOR UPDATE` row-level locking for atomic balance operations
- BIGINT storage for precise monetary amounts
- Paginated transaction and checkout queries with filtering

## Documentation

Full docs: [ebuntario.github.io/murai](https://ebuntario.github.io/murai)

## License

[MIT](../../LICENSE)
npm package: @muraikenta/dart-merger
Description: [![npm version](https://badge.fury.io/js/@muraikenta%2Fdart-merger.svg)](https://badge.fury.io/js/@muraikenta%2Fdart-merger)
Latest version: 0.1.0

# dart-merger

[![npm version](https://badge.fury.io/js/@muraikenta%2Fdart-merger.svg)](https://badge.fury.io/js/@muraikenta%2Fdart-merger)

Combine a set of dart files into one. \
This is useful when you want to organize a group of files automatically generated by generator.

## Install

```
npm install -D dart-merger
```

## Usage

```
❯ npx @muraikenta/dart-merger -h
dart-merger

Usage:
  $ dart-merger <command> [options]

Options:
  --package <packageName>  Provide package name
  --src <folderPath>       Provide source directory (default: .)
  --out <filePath>         Provide file path of output (default: out.dart)
  -h, --help               Display this message
```

e.g. Combine a set of files in example/lib with package name example.

```
npx @muraikenta/dart-merger --package example --src example/lib --out example/out/out.dart
```