open-index/open-npm huggingface dataset:
npm package: @mora/foe-common
Description: foe 通用的一些脚本
Author: Mora
Latest version: 0.6.2


## 注意事项：

此模块中的所有文件都通过 `src/index.ts` 导出了，所以在使用的时候不要直接 `import { Xxx } from 'foe-common'`，
需要使用 `import { Xxx } from 'foe-common/dist/path/to/Xxx'`

但在以 `project-` 或 `example-` 开头的项目中，由于使用了 webpack loader: `mora-common/helper/index-loader`，
所以可以直接使用 `import { Xxx } from 'foe-common'`， index-loader 会将它转化成 `import { Xxx } from 'foe-common/dist/path/to/Xxx'`


## Form

**自定义新的 Form 组件时，不能使用 `Stateless function components`**

Stateless function components 中不能使用 `ref`， Form 组件需要使用 `ref` 来确定哪些组件挂载在页面上，以此判断是否需要验证



## react ui 库 （开发公用组件时可以参考）

* https://github.com/rsuite/rsuite


## webpack 黑科技

* webpack 4.6 支持 prefetch，即当浏览器空闲的时候，才会去加载指定的组件，[详情查看此文](https://medium.com/webpack/link-rel-prefetch-preload-in-webpack-51a52358f84c)


  ```ts
  import(/* webpackPrefetch: true */ "LoginModal")
  ```
npm package: @mora/foe-fvm
Description: foe version manager
Author: Mora
Latest version: 0.2.4

# foe-fvm

foe 多版本自动切换

**根据 package.json 中的 engines 字段中的 foe 配置来决定使用 @mora/foe-cli 的版本号**


## 支持的环境变量

* `FOE_LOCAL` 指定此字段（值可以为任意非空值，也可以是 foe-cli.js 的文件路径），表示使用本地的 foe-cli
* `FOE_VERSION` 指定此字段（需要是一个有效的版本号），表示使用指定的版本来运行项目

## 支持读取当前项目的 .env 文件
npm package: @mora/foe-mc
Description: foe 移动端通用组件
Author: Mora
Latest version: 0.6.2


## 注意事项：

此模块中的所有文件都通过 `src/index.ts` 导出了，所以在使用的时候不要直接 `import { Xxx } from 'foe-common'`，
需要使用 `import { Xxx } from 'foe-common/dist/path/to/Xxx'`

但在以 `project-` 或 `example-` 开头的项目中，由于使用了 webpack loader: `mora-common/helper/index-loader`，
所以可以直接使用 `import { Xxx } from 'foe-common'`， index-loader 会将它转化成 `import { Xxx } from 'foe-common/dist/path/to/Xxx'`
npm package: @mora/foe-pc
Description: foe pc 端通用组件
Author: Mora
Latest version: 0.6.2


## 注意事项：

此模块中的所有文件都通过 `src/index.ts` 导出了，所以在使用的时候不要直接 `import { Xxx } from 'foe-common'`，
需要使用 `import { Xxx } from 'foe-common/dist/path/to/Xxx'`

但在以 `project-` 或 `example-` 开头的项目中，由于使用了 webpack loader: `mora-common/helper/index-loader`，
所以可以直接使用 `import { Xxx } from 'foe-common'`， index-loader 会将它转化成 `import { Xxx } from 'foe-common/dist/path/to/Xxx'`
npm package: @mora/holiday
Description: holiday api
Author: Mora
Latest version: 0.0.3

# @mora/holiday

* 支持获取 `2010-当前` 的节假日
* 其它时间范围只能判断是周末还是工作日


**注意：最新年份的节假日需要等候国家公布后才能知道，并且数据也需要更新进来**

## 安装

```bash
npm install --save @mora/holiday
```

## 使用

* `holiday(date, lang = 'zh_CN')`
* `holiday(dateString, lang = 'zh_CN')`


## 例子

```js
const holiday = require('@mora/holiday')

holiday(new Date()) // => 返回 0, 1 或者 2
holiday('2017-05-01', 'zh_CN') // 2
```

## TODO

* [ ] 自动获取最新的节假日信息


## 字段含义

* `0`: workday
* `1`: weekend
* `2`: holiday
npm package: @mora/imagemin
Description: 压缩图片
Author: Mora
Latest version: 0.0.0

# @mora/imagemin

## 二进制工具
* [jpegtran](https://github.com/imagemin/jpegtran-bin)：针对 <JPG> 图片的无损压缩，基于 libjpeg-turbo，支持 progress 显示
* [mozjpeg](https://github.com/imagemin/mozjpeg-bin): 针对 <JPG> 图片的无损压缩，基于 libjpeg-turbo，支持 progress 显示
* [optipng](https://github.com/imagemin/optipng-bin): 针对 <PNG, BMP, GIF, PNM or TIFF> 图片的无损压缩
* [gifsicle](https://github.com/imagemin/gifsicle-bin): 针对 <GIF> 图片压缩，同时支持其它 gif 图片处理相关操作

* [guetzli](https://github.com/imagemin/guetzli-bin)：谷歌出的，压缩比较猛，针对 <JPG>
* [jpegoptim](https://github.com/imagemin/jpegoptim-bin)
* [pngquant](https://github.com/imagemin/pngquant-bin)
* [pngcrush](https://github.com/imagemin/pngcrush-bin)
* [zopflipng](https://github.com/imagemin/zopflipng-bin)：谷歌出的，压缩比较猛
npm package: @mora/markdown2code
Description: transform markdown to vue/react code
Author: Mora
Latest version: 0.7.0

# markdown2code

transform markdown to vue/react code


## Installation

```bash
npm install markdown2code
```

## Usage




## Support

- 咨询：Mora <qiuzhongleiabc@126.com>

<!--
## Roadmap

If you have ideas for releases in the future, it is a good idea to list them in the README.
-->

## Changelog

[Changelog](./CHANGELOG.md)


## Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.


## License

[MIT](https://choosealicense.com/licenses/mit/)
npm package: @mora/module-parse
Description: parse export import statement
Author: Mora
Latest version: 0.2.0

# @mora/module-parse

解析代码中的 `require`, `module.exports`, `import` 和 `export` 语句

注意：由于 require 和 exports 可以赋值给其它变量，其它变量也可以覆盖 require 和 exports，所以解析出来的结果可能不准备，如：

```js
const r = require
const fs = r('fs') // 这里的 r 是解析不出来的
```

**建议采用 import 和 export 来解析，即设置 `module="esnext"`**

## 支持解析下面的语句

* `module="commonjs"`

```js
// REQUIRE_ONLY
require('my_module')

// REQUIRE_ASIGN
var fs = require('my_module')
let fs = require('my_module')
const fs = require('my_module')

// REQUIRE_DESTRUCT
const { stat, exists, readFile } = require('my_module')

// EXPORTS_DEFAULT
module.exports = 42
module.exports = variable
module.exports = function() {}
module.exports = function test() {}

// EXPORTS_VARIABLE
exports.a = xx
module.exports.a = xx
```

* `module="esnext"`

```js
// IMPORT_ONLY
import 'my_module'

// IMPORT_ALL
import * as fs from 'my_module'

// IMPORT_NAMED
import fs from 'my_module'
import { stat, exists, readFile } from 'my_module'
import { a as b } from 'my_module'
import _, { each, forEach } from 'lodash'

// EXPORT_DEFAULT
export default 42
export default variable
export default function() {}
export default function test() {}

// EXPORT_ASSIGN
export const A = 1
export class A {}
export function A() {}

// EXPORT_NAMED
export {A, B}
export {A as AA, B}

// EXPORT_ALL_FROM
export * from './a'

// EXPORT_NAMED_FROM
export { default } from 'foo'
export { foo, bar } from 'my_module'
export { es6 as default } from './someModule'
```

## Installation

```bash
npm i @mora/module-parser
```

## Usage

```js
import parse from '@mora/module-parser'

parse(code, options)
```


## Support

- 咨询：Mora <qiuzhongleiabc@126.com>

<!--
## Roadmap

If you have ideas for releases in the future, it is a good idea to list them in the README.
-->

## Changelog

[Changelog][./CHANGELOG.md]


## Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.


## License

[MIT](https://choosealicense.com/licenses/mit/)
npm package: @mora/playground
Description: 通用 webpack + es6 配置，支持多项目
Author: Mora
Latest version: 0.0.1


## TODOs

* [ ] 测试集成
* [ ] 添加 libs 中的通用功能
* [ ] fix: webpack.config.js 中提取 commonChunk 的 minChunk 函数

## packages

### eslint packages

    eslint
    babel-eslint
    eslint-loader
    eslint-plugin-promise
    eslint-plugin-react
    eslint-plugin-standard

### stylelint package

    stylelint
    stylelint-scss
    stylelint-webpack-plugin

### babel packages

    babel-core

    babel-preset-latest
    babel-preset-react
    babel-preset-stage-0

    babel-plugin-transform-class-properties
    babel-plugin-transform-decorators-legacy
    babel-plugin-transform-function-bind
    babel-plugin-transform-object-rest-spread
    babel-plugin-transform-runtime

    // for code eliminate
    babel-plugin-transform-react-constant-elements
    babel-plugin-transform-react-remove-prop-types

    // for support ES3
    babel-plugin-transform-es3-member-expression-literals
    babel-plugin-transform-es3-property-literals

### webpack packages

    babel-loader
    html-webpack-plugin
    copy-webpack-plugin
    extract-text-webpack-plugin
    mora-favicons-webpack-plugin (favicons-webpack-plugin@0.0.7 还不支持 webpack 2.x)

    style-loader css-loader postcss-loader sass-loader
    file-loader url-loader
npm package: @morabr/mora-sdk
Description: Mora SDK
Author: Mora
Latest version: 1.0.4

# Mora SDK 
## Installation

Install the package with npm
```
npm i @morabr/mora-sdk --save
```

Use the package in the project

```js
import 'dotenv/config'
import { MoraSDK } from '@morabr/mora-sdk'

async function main() {
  const sdk = new MoraSDK({
    baseURL: 'http://localhost:3000',
    autoRefresh: true
  });
  await sdk.authenticate({ email: 'example@example.com', password: 'P@ssw0rd' })
}

main().then(() => {
  console.log('script running with success')
})
```



## Generate Api from Swagger

`SWAGGER_JSON_PATH=http://localhost:3000/docs-json npm run gen:api`
npm package: @moraes/prometheus-nodejs-exporter
Description: The simplest way to export your NodeJS Applications metrics to Prometheus.
Author: Fernando Moraes
Latest version: 1.1.0

# prometheus-nodejs-exporter

The simplest way to export your NodeJS Applications metrics to Prometheus.

## Instalation

```
yarn add @moraes/prometheus-nodejs-exporter

//or with npm
npm install --save @moraes/prometheus-nodejs-exporter
```

You can now load de agent module using the preload sintax, without need to chance your production code:

```
node -r node_modules/@moraes/prometheus-nodejs-exporter myServer.js
```

Congragulations, now you have all the metrics exported at:

`http://localhost:{port}/metrics`

## Metrics

Example values:

```
nodejs_app_cpu_percent 0.008496580143248911
nodejs_app_cpu_system 4474
nodejs_app_cpu_user 29499
nodejs_app_memory_percent 0.00238173648447801
nodejs_app_memory_rss_allocated_byte 39546880
nodejs_app_memory_total_byte 16604221440
nodejs_app_memory_heap_percent 0.5280970213498623
nodejs_app_memory_heap_used_byte 4711200
nodejs_app_memory_heap_total_byte 8921088
nodejs_app_memory_ext_usage_byte 1625018
nodejs_app_event_loop_delay_ms 0
nodejs_app_runtime_ms 6003
nodejs_app_gc_total_ms{type="scavenge"} 0
nodejs_app_gc_total_ms{type="mark_sweep_compact"} 0
nodejs_app_gc_total_ms{type="incremental_marking"} 0
nodejs_app_gc_total_ms{type="process_weak_callbacks"} 0
nodejs_app_gc_total_ms{type="all"} 0
```

## Configuration

The following variables can be used to customize de metrics exporter:

-   PROMETHEUS_SCHEDULE_TIMER (default 2000 ms): Time used to read and update the metrics values
-   PROMETHEUS_METRICS_PATH (default metrics): Path that will respond the metrics

## Http server support

This library works with all http servers basead on nodejs `http, https or http2` modules like `Express` and so on.
npm package: @moraes/tiny-livereload-server
Description: tiny web live reload
Author: Fernando Moraes
Latest version: 1.3.0

# tiny-livereload-server

The simplest yet powerful cli http server

There is only one rule, there is no configuration

## Features

* css livereload without full reload
* auto open browser

## Install

```
npm install -g @moraes/tiny-livereload-server
```

Inside project`s root:

```
tiny-livereload-server
``` 

## Parameters

The following parameters can be used:

```
tiny-livereload-server \
    --cwd src
```
npm package: @morairty0909/hass-mcp
Description: MCP server for Home Assistant (REST/WebSocket) control.
Author: Han Lee
Latest version: 0.1.10

# @morairty0909/hass-mcp (Moriarty0909 修复增强版)

> ⚠️ **此 fork 修复了原版的关键 bug 并新增功能**：
> - 修复 `ha_call_service` 参数字段名错误
> - 新增 `ha_get_entities_by_area` 和 `ha_get_entities_by_type` 工具
>
> 原版仓库：[hannoeru/hass-mcp](https://github.com/hannoeru/hass-mcp)
> 已提交 PR：[#2](https://github.com/hannoeru/hass-mcp/pull/2)

---

## 🔧 修复内容

### 问题描述

调用 `ha_call_service` 工具时，参数字段名使用 `service_data`，但工具 schema 定义的是 `data`，导致参数无法正确传递给 Home Assistant，服务调用失败。

**症状**：
- 工具返回 `[object Object]`
- 服务实际未执行
- 实体状态无变化

### 修复方案

- **修复参数字段名**: `service_data` → `data`（与 schema 定义一致）
- 添加错误处理（try-catch）
- 添加调用日志便于调试

### 测试验证

- [x] light.turn_on / light.turn_off
- [x] switch.turn_on / switch.turn_off
- [x] 服务正常执行，返回正确响应

### 修改文件

- `src/ha.ts`: 添加 try-catch 错误处理
- `src/index.ts`: 修复参数字段名，增强错误处理

---

An open-source **MCP server** for controlling and querying **Home Assistant**.

- Transport: stdio
- Auth: Home Assistant long-lived token
- API: Home Assistant REST API

## Features

Tools exposed:

**状态查询**:
- `ha_get_state` — get state for an entity
- `ha_list_states` — list all states (can be large)
- `ha_get_entities_by_area` — get entities in specific area with states
- `ha_get_entities_by_type` — get entities of specific type with states

**控制操作**:
- `ha_call_service` — call any service
- `ha_light_turn_on/off` — light control
- `ha_area_lights_on/off` — area lights batch control

**配置查询**:
- `ha_list_services` — list available services
- `ha_list_areas` — list areas
- `ha_list_devices` — list devices
- `ha_list_entity_registry` — list entity registry

**历史数据**:
- `ha_get_logbook` — get logbook entries
- `ha_get_history` — get history data

## Install

### 方式 1：从 npm 安装（最新版本）✅

**注意**: 包已发布到 npm，包含最新功能。

```bash
npx @morairty0909/hass-mcp
```

### 方式 2：从 GitHub 安装

```bash
npx -y github:Moriarty0909/hass-mcp#main
```

### 方式 3：本地源码安装

```bash
git clone https://github.com/Moriarty0909/hass-mcp.git
cd hass-mcp
pnpm install
pnpm build
```

## Run

```bash
export HASS_URL="http://homeassistant.local:8123"
export HASS_TOKEN="<your long-lived access token>"

# 使用 npm 包（推荐）
npx @morairty0909/hass-mcp

# 或使用 GitHub
npx -y github:Moriarty0909/hass-mcp#main
```
## Configure in an MCP client

Example (CoPaw config.json):

      

{
  "mcpServers": {
    "homeassistant": {
      "name": "homeassistant_mcp",
      "command": "npx",
      "args": ["@morairty0909/hass-mcp"],
      "env": {
        "HASS_URL": "http://homeassistant.local:8123",
        "HASS_TOKEN": "你的 long-lived access token"
      }
    }
  }
}

## Security

- Treat tokens as secrets.
- Prefer running this server on the same LAN as Home Assistant.
- If your HA is behind Cloudflare Access, run this MCP server on the LAN side.

## License

MIT
npm package: @moraj/path-equal
Description: ![stability](https://img.shields.io/badge/stability-stable-brightgreen) ![version](https://img.shields.io/badge/version-1.0.1-blue) ![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)
Author: Morteza Jamali
Latest version: 1.0.1

# path-equal

![stability](https://img.shields.io/badge/stability-stable-brightgreen)
![version](https://img.shields.io/badge/version-1.0.1-blue)
![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)

> Core functionality forked from [unional/path-equal](https://github.com/unional/path-equal)

File paths in Unix and Windows are different.
During test, sometimes we want to compare if the file paths are the same.

Doing this comparison can get unwieldy.
But not doing it would means the project can only be develop in specific platform.

This library provides this comparison to check if the two paths are the same,
regardless of the running platform.

## Install

```text
npm install --save @moraj/path-equal
```

### Usage

```ts
import pathEqual from '@moraj/path-equal'

pathEqual('dir/sub-dir/file.txt', 'dir\\sub-dir\\file.txt') // true
```

This library will not access the file system,
so comparing absolute path with relative path will fail.

## Contribute

```sh
# after fork and clone
npm install

# begin making changes
git checkout -b <branch>
npm run watch

# after making change(s)
git commit -m "<commit message>"
git push

# create PR
```
npm package: @moraleja39/shade-generator
Description: Generate tints and shades easily.
Author: João Ribeiro
Latest version: 1.2.7

# shade-generator

#### This will output a `Record<Shade, string>`.

```typescript
const colorMap = ShadeGenerator.hue("#ff0000").shadesMap("hex");
```

#### You can use it like so.

```typescriptreact
const StyledComponent = styled.div`
  background-color: ${color['300']};
  margin: 8px;
  padding: 16px;
  border-radius: 8px;
  position: relative;
  display: flex;
  flex-direction: column;
  flex: 1;
`;
```

#### This also works.

```typescript
const color = ShadeGenerator.hue("#ff0000").shade("10").hex();
```

#### Pass a config to fine tune the output

```typescript
const config: Record<Shade, number> = {
  "10": 0.9,
  "20": 0.8,
  "30": 0.7,
  "40": 0.6,
  "50": 0.5,
  "60": 0.4,
  "70": 0.3,
  "80": 0.2,
  "90": 0.1,
  "100": 0,
  "200": 0.9,
  "300": 0.8,
  "400": 0.7,
  "500": 0.6,
  "600": 0.5,
  "700": 0.4,
  "800": 0.3,
  "900": 0.2,
  "1000": 0.1,
};

// You can, for example, change shade 50 to be "50": 0.55

const color = ShadeGenerator.hue("#ff0000").config(config).shade("10").hex();

const colorMap = ShadeGenerator.hue("#ff0000").config(config).shadesMap("hex");
```

#### Checkout other formats

```typescript
...shadesMap("rgba");
...shadesMap("hsl");
...shadesMap("hex");

...rgba();
...hsl();
...hex();
```

See it in action [here.](https://millennium-palette-generator.netlify.app/)

Enjoy ♥️
npm package: @moralesl/billing-alert
Description: Utility CDK construct to setup billing alerts easily
Author: Luis Morales
Latest version: 0.6.0

## CDK Billing Alert utility

---

[![Build Status](https://travis-ci.com/moralesl/cdk-billing-alert.svg?branch=master)](https://travis-ci.com/moralesl/cdk-billing-alert)
[![GitHub release](https://img.shields.io/github/release/moralesl/cdk-billing-alert/all.svg)](https://img.shields.io/github/release/moralesl/cdk-billing-alert/all.svg)

---

Utility CDK construct to setup billing alerts easily


## Usage
### Typescript

First you need to install the package

```
npm install @moralesl/billing-alert
```

Then you can use the billing alert utility in your code:

```ts
import { BillingAlert } from "@moralesl/billing-alert";

new BillingAlert(this, "BillingAlertTenDollars", {
    amount: 10,
    emails: [
        "test@example.com",
    ]
});
```

### Python

First you need to install the package

```
pip install moralesl.billing-alert
```

Then you can use the billing alert utility in your code:

```python
import moralesl.billing_alert as billing_alert

billing_alert.BillingAlert(self, "BillingAlertTenDollars",
    amount=10,
    emails=["test@example.com"]
)
```
npm package: @moralisweb3/client-firebase-evm-auth
Description: Authenticate your user by a EVM wallet using the **Authenticate with Moralis Web3** extension for the Firebase.
Author: Moralis
Latest version: 2.27.2

# @moralisweb3/client-firebase-evm-auth

Authenticate your user by a EVM wallet using the **Authenticate with Moralis Web3** extension for the Firebase.
npm package: @moralisweb3/client-firebase-sol-auth
Description: Authenticate your user by a Solana wallet using the **Authenticate with Moralis Web3** extension for the Firebase.
Author: Moralis
Latest version: 2.27.2

# @moralisweb3/client-firebase-sol-auth

Authenticate your user by a Solana wallet using the **Authenticate with Moralis Web3** extension for the Firebase.
npm package: @moralisweb3/eslint-config
Description: Eslint rules, used by Moralis for projects with TypeScript.
Latest version: 1.0.3

# @moralisweb3/eslint-config

Eslint rules, used by Moralis for projects with TypeScript.

These rules are based on community standards and inspired by the airbnb and google presets, without taking too much opinionated/formatting rules into account.

# Usage

## 1. Install dependencies

```sh
npm install @moralisweb3/eslint-config \
            @typescript-eslint/eslint-plugin@^5.13.0 \
            @eslint-plugin-etc@^2.0.2 \
            @typescript-eslint/parser@^5.0.0 \
            --save-dev
```

or
```sh
yarn add @moralisweb3/eslint-config \
         @typescript-eslint/eslint-plugin@^5.13.0 \
         @eslint-plugin-etc@^2.0.2 \
         @typescript-eslint/parser@^5.0.0 \
         -D
```

## 2. Configure Eslint

Add `@moralisweb3` to your eslint config file (`.eslint` or .`eslint.js`), or create a new one if it doesn't exist.


```diff
extends: [
+ '@moralisweb3'
]
```

Add any additional rules/plugins etc. you want to use.

```js
{
  extends: ['@moralisweb3'],
  plugins: [/* any plugins */],
  rules: {
    // Any other rules
  }
};
```

## 3. Configure the ESLint TypeScript parser

This config requires knowledge of your TypeScript config.

In your ESLint config, set [parserOptions.project](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser#parseroptionsproject) to the path of your `tsconfig.json`.

For example:

```diff
{
  extends: ['@moralisweb3'],
+ parserOptions: {
+   project: './tsconfig.json'
+ }
}
```

## 4. Run eslnt
Run eslint via
```
npx eslint . --ext .js,.ts,.tsx,jsx
```

# FAQ
## I get this error when running ESLint: "The file must be included in at least one of the projects provided"

This means you are attempting to lint a file that `tsconfig.json` doesn't include.

A common fix is to create a `tsconfig.eslint.json` file, which extends your `tsconfig.json` file and includes all files you are linting.

```json
{
  "extends": "./tsconfig.json",
  "include": ["src/**/*.ts", "src/**/*.js", "test/**/*.ts"]
}
```

Update your ESLint config file:

```diff
parserOptions: {
-  project: './tsconfig.json',
+  project: './tsconfig.eslint.json',
}
```
## Why do I need the peer dependencies?

`@typescript-eslint/eslint-plugin` is a peer dependency due to a limitation within ESLint. See [issue](https://github.com/eslint/eslint/issues/3458), [RFC](https://github.com/eslint/rfcs/tree/master/designs/2019-config-simplification), and [progress](https://github.com/eslint/eslint/issues/13481).

`@typescript-eslint/parser` is a peer dependency because the version number must match `@typescript-eslint/eslint-plugin`.
npm package: @moralisweb3/evm-connector-utils
Description: This is a shared library for all connectors.
Author: Moralis
Latest version: 2.0.0-alpha.2

# @moralisweb3/evm-connector-utils

This is a shared library for all connectors.

## 🔧 How to Build Own Connector?

Install below dependencies to your TypeScript project.

```
yarn add @moralisweb3/core
yarn add @moralisweb3/evm-connector-utils
```

After this you may create a new connector class. Your class should extend `EvmAbstractConnector` class and:

- set a connector name,
- implement `createProvider` method, this method should return a valid [EIP1193](https://eips.ethereum.org/EIPS/eip-1193) provider,
- implement `createConnection` method.

```ts
import {
  MoralisCore,
  EvmConnection,
  EvmProvider,
  EvmChain,
  EvmAddress,
  EvmBaseConnectOptions,
} from '@moralisweb3/core';
import { EvmAbstractConnector } from '@moralisweb3/evm-connector-utils';
import { MyProvider } from 'my-provider';

export interface MyConnectorConnectOptions extends EvmBaseConnectOptions {
  myParam: number;
  // ...
}

export class MyConnector extends EvmAbstractConnector<MyProvider, MyConnectorConnectOptions> {
  public constructor(core: MoralisCore) {
    super('connector-name', core);
  }

  protected async createProvider(options?: MyConnectorConnectOptions): Promise<MyProvider> {
    // ...
    return provider;
  }

  protected async createConnection(options?: MyConnectorConnectOptions): Promise<EvmConnection> {
    // DO NOT call createProvider() here, use getProvider() instead.
    const provider: EvmProvider = await this.getProvider();

    const chain: EvmChain | null = new EvmChain('ropsten');
    const account: EvmAddress | null = new EvmAddress('0x1234...');

    // ...

    return { provider, chain, account };
  }
}
```

👉 Check our implementations: [EvmMetamaskConnector](../EvmMetamaskConnector/src/EvmMetamaskConnector.ts), [EvmWalletconnectConnector](../EvmWalletconnectConnector/src/EvmWalletConnectConnector.ts).

Now you can register your connector:

```ts
import core from '@moralisweb3/core';

const myConnector = new MyConnector(core);
Moralis.Evm.connectors.register(myConnector);
```

And use it:

```ts
Moralis.Evm.connect('connector-name', {
  myParam: 0x0,
  /* ... */
});
```
npm package: @moralisweb3/evm-utils
Description: 🚨 This package is depreciated. Please use the `@moralisweb3/common-evm-utils` package instead.
Author: Moralis
Latest version: 2.27.2

# @moralisweb3/evm-utils

🚨 This package is depreciated. Please use the `@moralisweb3/common-evm-utils` package instead.
npm package: @moralisweb3/parse-server
Description: # Parse Server Moralis Streams
Author: Moralis
Latest version: 2.27.2

# @moralisweb3/parse-server

# Parse Server Moralis Streams

This Plugin adapts parse-server to support [streams](https://docs.moralis.io/docs/what-is-streams-api-1)

# Usage

Since parse server is runs on express, this plugin is a middleware that can be added to the express app.

## Installations

First add parse-server to your express app:

```bash
yarn add parse-server
```

Then add moralis parse server plugin:

```bash
yarn add @moralisweb3/parse-server
```

## Setup parse server

Initialize parse server in your express app:

```javascript
import ParseServer from 'parse-server';
import config from './config';

export const parseServer = new ParseServer({
  databaseURI: config.DATABASE_URI,
  cloud: config.CLOUD_PATH,
  appId: config.APPLICATION_ID,
  masterKey: config.MASTER_KEY,
  serverURL: config.SERVER_URL,
});
```

## Setup moralis parse server plugin

Then add the plugin to your express app:

```typescript
import { streamsSync } from '@moralisweb3/parse-server';

```

the initializeStreams function takes the following options:
- the parse server instance
- Other options

```typescript
interface StreamOptions {
  webhookUrl?: string;
  apiKey: string;
}
```

- `apiKey`: Your Moralis API key
- `webhookUrl` - the url of choice to receive the stream data (optional). default path is `/streams-webhook`


## Putting all together

```typescript
import Moralis from 'moralis';
import express from 'express';
import config from './config';
import { streamsSync } from '@moralisweb3/parse-server';

const expressApp = express();

Moralis.start({
  apiKey: config.MORALIS_API_KEY,
});

expressApp.use(express.urlencoded({ extended: true }));
expressApp.use(express.json());

expressApp.use(cors());

expressApp.use(
  streamsSync(parseServer, {
    apiKey: config.MORALIS_API_KEY,
    webhookUrl: '/streams-webhook',
  }),
);

expressApp.use(`/${config.SERVER_ENDPOINT}`, parseServer.app);
expressApp.use(errorHandler);

app.listen(config.PORT, () => {
  console.log(`${config.APP_NAME} is running on port ${config.PORT}`);
});
```

The endpoint to receive webhooks is `YOUR_EXPRESSAPP_URL/SET_WEBHOOKURL`. This is the URL that you should use when setting up a stream.

# Done!

After you have configured the plugin and created a stream you can see the data in the dashboard. Note that the stream tag will be concatenated with `Txs` and `Logs` meaning if you have a tag called "MyStream" you will have two collections in DB called "MyStreamTxs" and "MyStreamLogs", which will contain the transactions and logs respectively.

Full example can be found [here](https://github.com/MoralisWeb3/Moralis-JS-SDK/tree/main/demos/parse-server-migration)
npm package: @moralisweb3/sol-utils
Description: 🚨 This package is depreciated. Please use the `@moralisweb3/common-sol-utils` package instead.
Author: Moralis
Latest version: 2.27.2

# @moralisweb3/sol-utils

🚨 This package is depreciated. Please use the `@moralisweb3/common-sol-utils` package instead.
npm package: @moralisweb3/wallet-connect-wrapper
Description: Rollup cannot build an UMD bundle with `@walletconnect/web3-provider`, so this project is a workaround for this problem. It contains a wrapper of WalletConnectProvider. How it works? Webpack creates a single CommonJs bundle which Rollup can consume withou
Author: Moralis
Latest version: 2.0.0-alpha.2

# @moralisweb3/wallet-connect-wrapper

Rollup cannot build an UMD bundle with `@walletconnect/web3-provider`, so this project is a workaround for this problem. It contains a wrapper of WalletConnectProvider. How it works? Webpack creates a single CommonJs bundle which Rollup can consume without any problem.

The idea is taken from [walletconnect-v1](https://github.com/DePayFi/walletconnect-v1).