# wechaty-puppet-service

> Puppet Service for Wechaty

Latest version **1.18.2** (published 2022-03-13) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install wechaty-puppet-service
pnpm add wechaty-puppet-service
yarn add wechaty-puppet-service
bun add wechaty-puppet-service
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.18.2 |
| Published | 2022-03-13 |
| First published | 2021-01-23 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | ESM |
| Node | >=16 |
| Dependencies | 12 |
| Unpacked size | 1.3 MB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 83 |
| Author | Huan LI |
| Maintainers | zixia |
| Keywords | chatie, wechaty, chatbot, bot, grpc, wechat, sdk |

## Links

- npm: https://www.npmjs.com/package/wechaty-puppet-service
- Repository: https://github.com/wechaty/wechaty-puppet-service
- Homepage: https://github.com/wechaty/wechaty-puppet-service#readme
- Issues: https://github.com/wechaty/wechaty-puppet-service/issues
- npm.io page: https://npm.io/package/wechaty-puppet-service

## Dependencies (12)

- [rxjs](https://npm.io/package/rxjs.md) ^7.5.5
- [uuid](https://npm.io/package/uuid.md) ^8.3.2
- [ducks](https://npm.io/package/ducks.md) ^1.0.2
- [gerror](https://npm.io/package/gerror.md) ^1.0.16
- [semver](https://npm.io/package/semver.md) ^7.3.5
- [clone-class](https://npm.io/package/clone-class.md) ^1.0.3
- [flash-store](https://npm.io/package/flash-store.md) ^1.3.4
- [wechaty-grpc](https://npm.io/package/wechaty-grpc.md) ^1.1.1
- [wechaty-redux](https://npm.io/package/wechaty-redux.md) ^1.10.2
- [wechaty-token](https://npm.io/package/wechaty-token.md) ^1.0.6
- [redux-observable](https://npm.io/package/redux-observable.md) ^2.0.0
- [stronger-typed-streams](https://npm.io/package/stronger-typed-streams.md) ^0.2.0

## Recent versions

- 1.18.2 (latest) — 2022-03-13
- 1.19.9 (next) — 2023-01-09
- 1.19.8 — 2022-05-15
- 1.19.7 — 2022-05-14
- 1.19.5 — 2022-05-10
- 1.19.4 — 2022-04-28
- 1.19.3 — 2022-04-22
- 1.19.2 — 2022-03-29
- 1.19.1 — 2022-03-25
- 1.18.1 — 2022-03-13
- 1.11.3 — 2022-01-18
- 1.11.2 — 2021-11-26
- 1.11.1 — 2021-11-22
- 1.10.2 — 2021-11-21
- 1.10.1 — 2021-11-21
- … 109 more at https://npm.io/package/wechaty-puppet-service/versions

## README

# wechaty-puppet-service

[![NPM Version](https://badge.fury.io/js/wechaty-puppet-service.svg)](https://www.npmjs.com/package/wechaty-puppet-service)
[![NPM](https://github.com/wechaty/wechaty-puppet-service/workflows/NPM/badge.svg)](https://github.com/wechaty/wechaty-puppet-service/actions?query=workflow%3ANPM)
[![ES Modules](https://img.shields.io/badge/ES-Modules-brightgreen)](https://github.com/Chatie/tsconfig/issues/16)

![Wechaty Service](https://wechaty.github.io/wechaty-puppet-service/images/hostie.png)

Wechaty Puppet Service is gRPC for Wechaty Puppet Provider.

For example, we can cloudify the Wechaty Puppet Provider wechaty-puppet-padlocal
to a Wechaty Puppet Service by running our Wechaty Puppet Service Token Gateway.

If you want to learn more about what is Wechaty Puppet and Wechaty Puppet Service,
we have a blog post to explain them in details at
<https://wechaty.js.org/2021/01/14/wechaty-puppet-service/>

[![Powered by Wechaty](https://img.shields.io/badge/Powered%20By-Wechaty-brightgreen.svg)](https://github.com/Wechaty/wechaty)

## Features

1. Consume Wechaty Puppet Service
1. Provide Wechaty Puppet Service

## Usage

```ts
import { WechatyBuilder } from 'wechaty'

const wechaty = WechatyBuilder.build({
  puppet: 'wechaty-puppet-service',
  puppetOptions: {
    token: `${TOKEN}`
  }
})

wechaty.start()
```

Learn more about Wechaty Puppet Token from our official website: <http://wechaty.js.org/docs/puppet-services/>

## Environment Variables

### 1 `WECHATY_PUPPET_SERVICE_TOKEN`

The token set to this environment variable will become the default value of `puppetOptions.token`

```sh
WECHATY_PUPPET_SERVICE_TOKEN=${WECHATY_PUPPET_SERVCIE_TOKEN} node bot.js
```

## gRPC Health Checking Protocol

From version 0.37, Wechaty Puppet Service start
supporting the [GRPC Health Checking Protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md).

```sh
$ npm install --global wechaty-token
$ go install github.com/grpc-ecosystem/grpc-health-probe@latest

$ wechaty-token discovery uuid_12345678-1234-1234-1234-567812345678
{"host": 1.2.3.4, "port": 5678}

$ grpc-health-probe -tls -tls-no-verify -addr 1.2.3.4
status: SERVING
```

See:

- [Add health checking API wechaty/grpc#151](https://github.com/wechaty/grpc/issues/151)

## Resources

### Authentication

1. [Authentication and Security in gRPC Microservices - Jan Tattermusch, Google](https://youtu.be/_y-lzjdVEf0)
1. [[gRPC #15] Implement gRPC interceptor + JWT authentication in Go](https://youtu.be/kVpB-uH6X-s)

## History

### master v0.31

1. ES Modules supported.
1. gRPC Health Checking Protocol support

### v0.30 (Aug 25, 2021)

1. Implemented TLS and server-side token authorization.
1. Refactor the gRPC client code.
1. Add local payload cache to reduce the cost of RPC.

#### New environment variables

<!-- markdownlint-disable MD013 -->

1. `WECHATY_PUPPET_SERVICE_TLS_CA_CERT`: can be overwrite by `options.tlsRootCert`. Set Root CA Cert to verify the server or client.

For Puppet Server:

| Environment Variable | Options | Description |
| -------------------- | ------- | ----------- |
| `WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT` | `options.tls.serverCert` | Server CA Cert (string data) |
| `WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY` | `options.tls.serverKey` | Server CA Key (string data) |
| `WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER` | `options.tls.disable` | Set `true` to disable server TLS |

For Puppet Client:

| Environment Variable | Options | Description |
| -------------------- | ------- | ----------- |
| `WECHATY_PUPPET_SERVICE_AUTHORITY` | `options.authority` | Service discovery host, default: `api.chatie.io` |
| `WECHATY_PUPPET_SERVICE_TLS_CA_CERT` | `options.caCert` | Certification Authority Root Cert, default is using Wechaty Community root cert |
| `WECHATY_PUPPET_SERVICE_TLS_SERVER_NAME` | `options.serverName` | Server Name (mast match for SNI) |
| `WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT` | `options.tls.disable` | Set `true` to disable client TLS |

## Changelog

### main v1.0 (Oct 29, 2021)

Release v1.0 of Wechaty Puppet Service.

1. use [wechaty-token](https://github.com/wechaty/token)
  for gRPC service discovery with `wechaty` schema (xDS like)
1. deprecated `WECHATY_SERVICE_DISCOVERY_ENDPOINT`,
  replaced by `WECHATY_PUPPET_SERVICE_AUTHORITY`.
  (See [#156](https://github.com/wechaty/wechaty-puppet-service/issues/156))
1. enable TLS & Token Auth (See [#124](https://github.com/wechaty/wechaty-puppet-service/issues/124))

### v0.14 (Jan 2021)

Rename from ~~wechaty-puppet-hostie~~ to [wechaty-puppet-service](https://www.npmjs.com/package/wechaty-puppet-service)
(Issue [#118](https://github.com/wechaty/wechaty-puppet-service/issues/118))

### v0.10.4 (Oct 2020)

1. Add 'grpc.default_authority' to gRPC client option.  
    > See: [Issue #78: gRPC server can use the authority  to identify current user](https://github.com/wechaty/wechaty-puppet-hostie/pull/78)

### v0.6 (Apr 2020)

Beta Version

1. Reconnect to Hostie Server with RxSJ Observables

### v0.3 (Feb 2020)

1. Publish the NPM module [wechaty-puppet-hostie](https://www.npmjs.com/package/wechaty-puppet-hostie)
1. Implemented basic hostie features with gRPC module: [@chatie/grpc](https://github.com/Chatie/grpc)

### v0.0.1 (Jun 2018)

Designing the puppet hostie with the following protocols:

1. [gRPC](https://grpc.io/)
1. [JSON RPC](https://www.jsonrpc.org/)
1. [OpenAPI/Swagger](https://swagger.io/docs/specification/about/)

## Maintainers

- [@huan](https://github.com/huan) Huan
- [@windmemory](https://github.com/windmemory) Yuan

## Copyright & License

- Code & Docs © 2018-now Huan LI \<zixia@zixia.net\>
- Code released under the Apache-2.0 License
- Docs released under Creative Commons

---
_Source: https://npm.io/package/wechaty-puppet-service · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
