wechaty-puppet-padplus2 3.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -0
- package/dist/cjs/cleanup.cjs +1 -0
- package/dist/cjs/config.cjs +1 -0
- package/dist/cjs/mock/cache-manager.cjs +1 -0
- package/dist/cjs/mock/events/event-friendship.cjs +1 -0
- package/dist/cjs/mock/events/event-message.cjs +1 -0
- package/dist/cjs/mock/events/event-room-invite.cjs +1 -0
- package/dist/cjs/mock/events/event-room-join.cjs +1 -0
- package/dist/cjs/mock/events/event-room-leave.cjs +1 -0
- package/dist/cjs/mock/events/event-room-topic.cjs +1 -0
- package/dist/cjs/mock/events/event.cjs +1 -0
- package/dist/cjs/mock/events/mod.cjs +1 -0
- package/dist/cjs/mock/messages/message-appmsg.cjs +1 -0
- package/dist/cjs/mock/messages/message-emotion.cjs +1 -0
- package/dist/cjs/mock/messages/message-miniprogram.cjs +1 -0
- package/dist/cjs/mock/messages/message-sysmsg.cjs +1 -0
- package/dist/cjs/mock/messages/sysmsg/message-pat.cjs +1 -0
- package/dist/cjs/mock/messages/sysmsg/message-revokemsg.cjs +1 -0
- package/dist/cjs/mock/messages/sysmsg/message-sysmsgtemplate.cjs +1 -0
- package/dist/cjs/mock/messages/sysmsg/message-todo.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/contact.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/message/message-parser-appmsg.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/message/message-parser-refermsg.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/message/message-parser-room.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/message/message-parser-single-chat.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/message/message-parser-sysmsg.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/message/message-parser-type.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/message/message-parser.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/message/mod.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/message.cjs +1 -0
- package/dist/cjs/mock/schema-mapper/room.cjs +1 -0
- package/dist/cjs/mock/types.cjs +1 -0
- package/dist/cjs/mock/utils/cached-promise.cjs +1 -0
- package/dist/cjs/mock/utils/is-type.cjs +1 -0
- package/dist/cjs/mock/utils/regex.cjs +1 -0
- package/dist/cjs/mock/utils/runner.cjs +1 -0
- package/dist/cjs/mock/utils/xml-to-json.cjs +1 -0
- package/dist/cjs/mod.cjs +1 -0
- package/dist/cjs/package-json.cjs +1 -0
- package/dist/cjs/puppet-plus.cjs +1 -0
- package/dist/cjs/server/cache-manager.cjs +1 -0
- package/dist/cjs/server/index.cjs +1 -0
- package/dist/cjs/server/map/AppMessageLink.cjs +1 -0
- package/dist/cjs/server/map/Label.cjs +1 -0
- package/dist/cjs/server/map/RoomMemberList.cjs +1 -0
- package/dist/cjs/server/map/contact.cjs +1 -0
- package/dist/cjs/server/map/index.cjs +1 -0
- package/dist/cjs/server/map/message.cjs +1 -0
- package/dist/cjs/server/map/response.cjs +1 -0
- package/dist/cjs/server/service/api/index3.cjs +1 -0
- package/dist/cjs/server/service/config/index.cjs +1 -0
- package/dist/cjs/server/service/index.cjs +1 -0
- package/dist/cjs/server/service/request/index.cjs +1 -0
- package/dist/cjs/server/service/utils/polling.cjs +1 -0
- package/dist/cjs/server/utils/PromiseUtils.cjs +1 -0
- package/dist/cjs/server/utils/SerialExecutor.cjs +1 -0
- package/dist/cjs/server/utils/Utils.cjs +1 -0
- package/dist/cjs/server/utils/xml-to-json.cjs +1 -0
- package/dist/esm/cleanup.js +26 -0
- package/dist/esm/config.js +9 -0
- package/dist/esm/mock/cache-manager.js +182 -0
- package/dist/esm/mock/events/event-friendship.js +59 -0
- package/dist/esm/mock/events/event-message.js +3 -0
- package/dist/esm/mock/events/event-room-invite.js +33 -0
- package/dist/esm/mock/events/event-room-join.js +105 -0
- package/dist/esm/mock/events/event-room-leave.js +83 -0
- package/dist/esm/mock/events/event-room-topic.js +50 -0
- package/dist/esm/mock/events/event.js +38 -0
- package/dist/esm/mock/events/mod.js +20 -0
- package/dist/esm/mock/messages/message-appmsg.js +41 -0
- package/dist/esm/mock/messages/message-emotion.js +24 -0
- package/dist/esm/mock/messages/message-miniprogram.js +18 -0
- package/dist/esm/mock/messages/message-sysmsg.js +50 -0
- package/dist/esm/mock/messages/sysmsg/message-pat.js +10 -0
- package/dist/esm/mock/messages/sysmsg/message-revokemsg.js +20 -0
- package/dist/esm/mock/messages/sysmsg/message-sysmsgtemplate.js +45 -0
- package/dist/esm/mock/messages/sysmsg/message-todo.js +15 -0
- package/dist/esm/mock/schema-mapper/contact.js +22 -0
- package/dist/esm/mock/schema-mapper/message/message-parser-appmsg.js +64 -0
- package/dist/esm/mock/schema-mapper/message/message-parser-refermsg.js +46 -0
- package/dist/esm/mock/schema-mapper/message/message-parser-room.js +33 -0
- package/dist/esm/mock/schema-mapper/message/message-parser-single-chat.js +4 -0
- package/dist/esm/mock/schema-mapper/message/message-parser-sysmsg.js +33 -0
- package/dist/esm/mock/schema-mapper/message/message-parser-type.js +31 -0
- package/dist/esm/mock/schema-mapper/message/message-parser.js +20 -0
- package/dist/esm/mock/schema-mapper/message/mod.js +19 -0
- package/dist/esm/mock/schema-mapper/message.js +21 -0
- package/dist/esm/mock/schema-mapper/room.js +30 -0
- package/dist/esm/mock/types.js +13 -0
- package/dist/esm/mock/utils/cached-promise.js +12 -0
- package/dist/esm/mock/utils/is-type.js +21 -0
- package/dist/esm/mock/utils/regex.js +11 -0
- package/dist/esm/mock/utils/runner.js +11 -0
- package/dist/esm/mock/utils/xml-to-json.js +14 -0
- package/dist/esm/mod.js +5 -0
- package/dist/esm/package-json.js +5 -0
- package/dist/esm/puppet-plus.js +829 -0
- package/dist/esm/server/cache-manager.js +77 -0
- package/dist/esm/server/index.js +19 -0
- package/dist/esm/server/map/AppMessageLink.js +58 -0
- package/dist/esm/server/map/Label.js +30 -0
- package/dist/esm/server/map/RoomMemberList.js +48 -0
- package/dist/esm/server/map/contact.js +192 -0
- package/dist/esm/server/map/index.js +7 -0
- package/dist/esm/server/map/message.js +107 -0
- package/dist/esm/server/map/response.js +78 -0
- package/dist/esm/server/service/api/index3.js +960 -0
- package/dist/esm/server/service/config/index.js +7 -0
- package/dist/esm/server/service/index.js +30 -0
- package/dist/esm/server/service/request/index.js +47 -0
- package/dist/esm/server/service/utils/polling.js +24 -0
- package/dist/esm/server/utils/PromiseUtils.js +19 -0
- package/dist/esm/server/utils/SerialExecutor.js +41 -0
- package/dist/esm/server/utils/Utils.js +7 -0
- package/dist/esm/server/utils/xml-to-json.js +18 -0
- package/dist/types/cleanup.d.ts +4 -0
- package/dist/types/config.d.ts +9 -0
- package/dist/types/mock/cache-manager.d.ts +55 -0
- package/dist/types/mock/events/event-friendship.d.ts +5 -0
- package/dist/types/mock/events/event-message.d.ts +5 -0
- package/dist/types/mock/events/event-room-invite.d.ts +5 -0
- package/dist/types/mock/events/event-room-join.d.ts +5 -0
- package/dist/types/mock/events/event-room-leave.d.ts +7 -0
- package/dist/types/mock/events/event-room-topic.d.ts +5 -0
- package/dist/types/mock/events/event.d.ts +28 -0
- package/dist/types/mock/events/mod.d.ts +4 -0
- package/dist/types/mock/messages/message-appmsg.d.ts +57 -0
- package/dist/types/mock/messages/message-emotion.d.ts +12 -0
- package/dist/types/mock/messages/message-miniprogram.d.ts +3 -0
- package/dist/types/mock/messages/message-sysmsg.d.ts +18 -0
- package/dist/types/mock/messages/sysmsg/message-pat.d.ts +14 -0
- package/dist/types/mock/messages/sysmsg/message-revokemsg.d.ts +19 -0
- package/dist/types/mock/messages/sysmsg/message-sysmsgtemplate.d.ts +60 -0
- package/dist/types/mock/messages/sysmsg/message-todo.d.ts +31 -0
- package/dist/types/mock/schema-mapper/contact.d.ts +4 -0
- package/dist/types/mock/schema-mapper/message/message-parser-appmsg.d.ts +4 -0
- package/dist/types/mock/schema-mapper/message/message-parser-refermsg.d.ts +4 -0
- package/dist/types/mock/schema-mapper/message/message-parser-room.d.ts +4 -0
- package/dist/types/mock/schema-mapper/message/message-parser-single-chat.d.ts +4 -0
- package/dist/types/mock/schema-mapper/message/message-parser-sysmsg.d.ts +4 -0
- package/dist/types/mock/schema-mapper/message/message-parser-type.d.ts +4 -0
- package/dist/types/mock/schema-mapper/message/message-parser.d.ts +12 -0
- package/dist/types/mock/schema-mapper/message/mod.d.ts +4 -0
- package/dist/types/mock/schema-mapper/message.d.ts +3 -0
- package/dist/types/mock/schema-mapper/room.d.ts +5 -0
- package/dist/types/mock/types.d.ts +35 -0
- package/dist/types/mock/utils/cached-promise.d.ts +5 -0
- package/dist/types/mock/utils/is-type.d.ts +9 -0
- package/dist/types/mock/utils/regex.d.ts +3 -0
- package/dist/types/mock/utils/runner.d.ts +3 -0
- package/dist/types/mock/utils/xml-to-json.d.ts +2 -0
- package/dist/types/mod.d.ts +6 -0
- package/dist/types/package-json.d.ts +4 -0
- package/dist/types/puppet-plus.d.ts +102 -0
- package/dist/types/server/cache-manager.d.ts +22 -0
- package/dist/types/server/index.d.ts +15 -0
- package/dist/types/server/map/AppMessageLink.d.ts +31 -0
- package/dist/types/server/map/Label.d.ts +17 -0
- package/dist/types/server/map/RoomMemberList.d.ts +31 -0
- package/dist/types/server/map/contact.d.ts +113 -0
- package/dist/types/server/map/index.d.ts +13 -0
- package/dist/types/server/map/message.d.ts +68 -0
- package/dist/types/server/map/response.d.ts +45 -0
- package/dist/types/server/server.d.ts +6 -0
- package/dist/types/server/service/api/index.d.ts +78 -0
- package/dist/types/server/service/api/index2.d.ts +72 -0
- package/dist/types/server/service/api/index3.d.ts +78 -0
- package/dist/types/server/service/api/index_c.d.ts +71 -0
- package/dist/types/server/service/api/ws.d.ts +2 -0
- package/dist/types/server/service/config/index.d.ts +6 -0
- package/dist/types/server/service/index.d.ts +8 -0
- package/dist/types/server/service/request/index.d.ts +14 -0
- package/dist/types/server/service/request/type.d.ts +11 -0
- package/dist/types/server/service/utils/polling.d.ts +8 -0
- package/dist/types/server/utils/PromiseUtils.d.ts +13 -0
- package/dist/types/server/utils/SerialExecutor.d.ts +10 -0
- package/dist/types/server/utils/Utils.d.ts +3 -0
- package/dist/types/server/utils/diff.d.ts +35 -0
- package/dist/types/server/utils/polling.d.ts +7 -0
- package/dist/types/server/utils/token.d.ts +11 -0
- package/dist/types/server/utils/xml-to-json.d.ts +3 -0
- package/package.json +123 -0
package/README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Wechaty PadPlus
|
|
2
|
+
|
|
3
|
+
## 手动获取登录二维码(推荐)
|
|
4
|
+
|
|
5
|
+
本库不再在二维码过期后自动刷新;掉线(kickout)后也不会自动重启并不断出码。
|
|
6
|
+
|
|
7
|
+
你可以在业务侧按需调用 `puppet.requestLoginQRCode()` 主动获取最新二维码:
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { PuppetPlus } from 'wechaty-puppet-padplus'
|
|
11
|
+
|
|
12
|
+
const puppet = new PuppetPlus({ token: 'puppet_padplus_xxx' })
|
|
13
|
+
|
|
14
|
+
puppet.on('scan', ({ qrcode, status }) => {
|
|
15
|
+
// status=Waiting 时 qrcode 有值
|
|
16
|
+
if (qrcode) {
|
|
17
|
+
console.log('qrcode url:', qrcode)
|
|
18
|
+
}
|
|
19
|
+
console.log('scan status:', status)
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
await puppet.start()
|
|
23
|
+
|
|
24
|
+
// 需要的时候(例如你自己的 HTTP 接口被调用时)触发出码
|
|
25
|
+
const qrcodeUrl = await puppet.requestLoginQRCode()
|
|
26
|
+
console.log('manual qrcode url:', qrcodeUrl)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 发布到私有NPM仓库
|
|
30
|
+
|
|
31
|
+
本项目配置为发布到私有 NPM仓库。
|
|
32
|
+
|
|
33
|
+
### 发布步骤
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
2. 设置认证环境变量:
|
|
37
|
+
```bash
|
|
38
|
+
export NPM_AUTH_TOKEN=$(echo -n 'username:password' | openssl base64)
|
|
39
|
+
export NPM_EMAIL=your-email@example.com
|
|
40
|
+
```
|
|
41
|
+
3. 执行发布命令:
|
|
42
|
+
```bash
|
|
43
|
+
npm run publish
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
如有问题,请联系管理员。
|
|
47
|
+
|
|
48
|
+
pnpm build
|
|
49
|
+
npm publish --registry http://localhost:4873/
|
|
50
|
+
npm version patch
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e=>e&&e.__esModule?e:{default:e})(require("node-cleanup")),n=[];e.default(((t,o)=>{if(null!==t)return!0;const l=n.slice();return Promise.all(l.map((async puppet=>{await puppet.stop()}))).finally((()=>{e.default.uninstall(),process.kill(process.pid,o)})).catch(console.error),!1})),exports.addRunningPuppet=function(puppet){n.push(puppet)},exports.removeRunningPuppet=function(puppet){const e=n.indexOf(puppet);-1!==e&&delete n[e]};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),require("file-box");const e=require("wechaty-puppet"),VERSION=require("./package-json.cjs").packageJson.version;Object.defineProperty(exports,"log",{enumerable:!0,get:()=>e.log}),exports.VERSION=VERSION;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("fs-extra"),t=require("os"),a=require("path"),s=require("lru-cache"),o=require("wechaty-puppet"),c=require("flash-store"),i=e=>e&&e.__esModule?e:{default:e},h=i(e),n=i(t),r=i(a),l="[CacheManager]";exports.CacheManager=class{_userName;_messageCache;_messageRevokeCache;_contactCache;_contactSearchCache;_contactStrangerAliasCache;_roomCache;_roomMemberCache;_roomInvitationCache;_friendshipCache;_labelList;constructor(e){this._userName=e}async init(){if(this._messageCache)throw new Error("already initialized");const e=r.default.join(n.default.homedir(),r.default.sep,".wechaty","puppet-padplus-cache",r.default.sep,this._userName,r.default.sep);await h.default.pathExists(e)||await h.default.mkdirp(e),this._messageCache=new s.LRUCache({dispose(e,t){o.log.silly(l,"constructor() lruOptions.dispose(%s, %s)",e,JSON.stringify(t))},max:1e3,ttl:36e5}),this._messageRevokeCache=new s.LRUCache({dispose(e,t){o.log.silly(l,"constructor() lruOptions.dispose(%s, %s)",e,JSON.stringify(t))},max:1e3,ttl:36e5}),this._contactCache=new c.FlashStore(r.default.join(e,"contact-raw-payload")),this._contactSearchCache=new s.LRUCache({dispose(e,t){o.log.silly(l,"constructor() lruOptions.dispose(%s, %s)",e,JSON.stringify(t))},max:1e3,ttl:36e5}),this._contactStrangerAliasCache=new c.FlashStore(r.default.join(e,"contact-stranger-alias")),this._roomCache=new c.FlashStore(r.default.join(e,"room-raw-payload")),this._roomMemberCache=new c.FlashStore(r.default.join(e,"room-member-raw-payload")),this._roomInvitationCache=new c.FlashStore(r.default.join(e,"room-invitation-raw-payload")),this._friendshipCache=new c.FlashStore(r.default.join(e,"friendship-raw-payload"));const t=await this._contactCache.size;o.log.silly(l,`initCache() inited ${t} Contacts, cachedir="${e}"`)}async close(){o.log.silly(l,"close()"),this._contactCache&&this._contactStrangerAliasCache&&this._roomMemberCache&&this._roomCache&&this._friendshipCache&&this._roomInvitationCache&&this._messageCache?(o.log.silly(l,"close() closing caches ..."),await Promise.all([this._contactCache.close(),this._contactStrangerAliasCache.close(),this._roomMemberCache.close(),this._roomCache.close(),this._friendshipCache.close(),this._roomInvitationCache.close()]),this._contactCache=void 0,this._contactStrangerAliasCache=void 0,this._roomMemberCache=void 0,this._roomCache=void 0,this._friendshipCache=void 0,this._roomInvitationCache=void 0,this._messageCache=void 0,o.log.silly(l,"close() cache closed.")):o.log.silly(l,"close() cache not exist.")}async getMessage(e){return this._messageCache.get(e)}async setMessage(e,t){await this._messageCache.set(e,t)}async hasMessage(e){return this._messageCache.has(e)}async getMessageRevokeInfo(e){return this._messageRevokeCache.get(e)}async setMessageRevokeInfo(e,t){await this._messageRevokeCache.set(e,t)}async getContact(e){return this._contactCache.get(e)}async setContact(e,t){await this._contactCache.set(e,t)}async deleteContact(e){await this._contactCache.delete(e)}async getContactIds(){const e=[];for await(const t of this._contactCache.keys())e.push(t);return e}async getAllContacts(){const e=[];for await(const t of this._contactCache.values())e.push(t);return e}async hasContact(e){return this._contactCache.has(e)}async getContactCount(){return this._contactCache.size}async getContactSearch(e){return this._contactSearchCache.get(e)}async setContactSearch(e,t){await this._contactSearchCache.set(e,t)}async hasContactSearch(e){return this._contactSearchCache.has(e)}async getContactStrangerAlias(e){return this._contactStrangerAliasCache.get(e)}async setContactStrangerAlias(e,t){await this._contactStrangerAliasCache.set(e,t)}async deleteContactStrangerAlias(e){await this._contactStrangerAliasCache.delete(e)}async getRoom(e){return this._roomCache.get(e)}async setRoom(e,t){await this._roomCache.set(e,t)}async deleteRoom(e){await this._roomCache.delete(e)}async getRoomIds(){const e=[];for await(const t of this._roomCache.keys())e.push(t);return e}async getRoomCount(){return this._roomCache.size}async hasRoom(e){return this._roomCache.has(e)}async getRoomMember(e){return this._roomMemberCache.get(e)}async setRoomMember(e,t){await this._roomMemberCache.set(e,t)}async deleteRoomMember(e){await this._roomMemberCache.delete(e)}async getRoomInvitation(e){return this._roomInvitationCache.get(e)}async setRoomInvitation(e,t){await this._roomInvitationCache.set(e,t)}async deleteRoomInvitation(e){await this._roomInvitationCache.delete(e)}async getFriendshipRawPayload(e){return this._friendshipCache.get(e)}async setFriendshipRawPayload(e,t){await this._friendshipCache.set(e,t)}getLabelList(){return this._labelList}setLabelList(e){this._labelList=e}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("wechaty-puppet"),t=require("../utils/is-type.cjs"),r=require("../utils/xml-to-json.cjs"),s=require("../types.cjs"),n=function(e){if(e&&e.__esModule)return e;const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const r in e)if("default"!==r){const s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:()=>e[r]})}return t.default=e,Object.freeze(t)}(e),a=[/^You have added (.+) as your WeChat contact. Start chatting!$/,/^你已添加了(.+),现在可以开始聊天了。$/,/I've accepted your friend request. Now let's chat!$/,/^(.+) just added you to his\/her contacts list. Send a message to him\/her now!$/,/^(.+)刚刚把你添加到通讯录,现在可以开始聊天了。$/,/^我通过了你的朋友验证请求,现在我们可以开始聊天了$/],c=[/^(.+) has enabled Friend Confirmation/,/^(.+)开启了朋友验证,你还不是他(她)朋友。请先发送朋友验证请求,对方验证通过后,才能聊天。/];exports.default=async(e,message)=>{if((message=>a.some((e=>!!message.content.match(e))))(message))return{contactId:message.fromusername,id:message.id,timestamp:message.createtime,type:n.types.Friendship.Confirm};if((message=>c.some((e=>!!message.content.match(e))))(message))return{contactId:message.fromusername,id:message.id,timestamp:message.createtime,type:n.types.Friendship.Verify};{const e=await(async message=>{if(message.type!==s.WechatMessageType.VerifyMsg&&message.type!==s.WechatMessageType.VerifyMsgEnterprise)return null;try{const e=await r.xmlToJson(message.content),s=e.msg.$.fromusername;if(t.isContactId(s)&&e.msg.$.encryptusername)return e;if(t.isIMContactId(s))return e}catch(e){}return null})(message);return e?{contactId:e.msg.$.fromusername,hello:e.msg.$.content,id:message.id,scene:parseInt(e.msg.$.scene,10),shareCardContactId:e.msg.$.sharecardusername,shareCardNickName:e.msg.$.sharecardnickname,sourceContactId:e.msg.$.sourceusername,sourceNickName:e.msg.$.sourcenickname,stranger:e.msg.$.encryptusername,ticket:e.msg.$.ticket,timestamp:message.createtime,type:n.types.Friendship.Receive}:null}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.default=async(e,message)=>message;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../messages/message-appmsg.cjs"),t=[/邀请你加入群聊/],r=[/Group Chat Invitation/],a=[/^"(.+)"邀请你加入群聊(.*),进入可查看详情。/],l=[/"(.+)" invited you to join the group chat "(.+)"\. Enter to view details\./];exports.default=async(n,message)=>{let s;try{s=await e.parseAppmsgMessagePayload(message.content)}catch(e){return null}if(s.type!==e.AppMessageType.Url)return null;if(!s.title||!s.des)return null;let i=null,o=null,u=null,m=null;r.some((e=>!!(i=s.title.match(e)))),t.some((e=>!!(o=s.title.match(e)))),l.some((e=>!!(u=s.des.match(e)))),a.some((e=>!!(m=s.des.match(e))));const c=u||m;return(i||o)&&c?{avatar:s.thumburl,id:message.id,invitation:s.url,inviterId:message.fromusername,memberCount:0,memberIdList:[],receiverId:message.tousername,timestamp:message.createtime,topic:c[2]}:null};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../utils/is-type.cjs"),t=require("./event-room-leave.cjs"),r=require("../messages/message-sysmsg.cjs"),s=require("../types.cjs"),a=require("../utils/regex.cjs"),i=require("../messages/sysmsg/message-sysmsgtemplate.cjs"),n=require("../utils/runner.cjs"),o=[/^你邀请"(.+)"加入了群聊 {2}\$revoke\$/,/^You invited (.+) to the group chat/],m=[/^"([^"]+?)"邀请你加入了群聊,群聊参与人还有:(.+)/,/^(.+) invited you to a group chat with (.+)/],c=[/^"([^"]+?)"邀请你和"(.+?)"加入了群聊/,/^(.+?) invited you and (.+?) to (the|a) group chat/],u=[/^"(.+)"邀请"(.+)"加入了群聊/,/^(.+?) invited (.+?) to (the|a) group chat/],d=[/^" ?(.+)"通过扫描你分享的二维码加入群聊/,/^" ?(.+)" joined group chat via the QR code you shared/],p=[/^" (.+)"通过扫描"(.+)"分享的二维码加入群聊/,/^"(.+)" joined the group chat via the QR Code shared by "(.+)"/],y=[/^(.*?)通过(.+)加入群聊/,/^(.*?) joined the group chat through (.+)/];exports.default=async(puppet,message)=>{const l=message.fromusername;if(!e.isRoomId(l))return null;const I=message.createtime,h=await r.parseSysmsgSysmsgTemplateMessagePayload(message);if(!h&&1e4!==message.type)return null;let g=null;if(h){const e=i.createSysmsgTemplateRunner(h,[...o,...d],(async e=>({inviteeIdList:e[0].payload.map((e=>e.userName)).filter((e=>!!e)),inviterId:puppet.currentUserId,roomId:l,timestamp:I}))),r=i.createSysmsgTemplateRunner(h,m,(async e=>{const t=e[0].payload;return{inviteeIdList:[puppet.currentUserId],inviterId:t[0].userName,roomId:l,timestamp:I}})),s=i.createSysmsgTemplateRunner(h,[...c,...u],(async(e,t)=>{const r=e[0].payload,s=e[1].payload.map((e=>e.userName)).filter((e=>!!e));return t<c.length&&s.unshift(puppet.currentUserId),{inviteeIdList:s,inviterId:r[0].userName,roomId:l,timestamp:I}})),a=i.createSysmsgTemplateRunner(h,p,(async e=>({inviteeIdList:e[0].payload.map((e=>e.userName)).filter((e=>!!e)),inviterId:e[1].payload[0].userName,roomId:l,timestamp:I}))),v=i.createSysmsgTemplateRunner(h,y,(async e=>({inviteeIdList:e[0].payload.map((e=>e.userName)).filter((e=>!!e)),inviterId:puppet.currentUserId,roomId:l,timestamp:I})));g=await n.executeRunners([e,r,s,a,v]),g&&g.inviteeIdList.forEach((e=>{t.removeRoomLeaveDebounce(g.roomId,e)}))}else{if(message.type!==s.WechatMessageType.Sys)return null;const e=async()=>a.parseTextWithRegexList(message.content,[...o,...d],(async(e,t)=>{t[1];const r=t[2];return{inviteeIdList:[(await puppet.roomMemberSearch(l,r))[0]],inviterId:puppet.currentUserId,roomId:l,timestamp:message.createtime}})),t=async()=>a.parseTextWithRegexList(message.content,m,(async(e,t)=>{const r=t[1],s=(await puppet.roomMemberSearch(l,r))[0];return{inviteeIdList:[puppet.currentUserId],inviterId:s,roomId:l,timestamp:message.createtime}})),r=async()=>a.parseTextWithRegexList(message.content,[...c,...u],(async(e,t)=>{const r=t[1],s=await Promise.all(t[2].split("、").map((async e=>(await puppet.roomMemberSearch(l,e))[0])));return e<c.length&&s.unshift(puppet.currentUserId),{inviteeIdList:s,inviterId:(await puppet.roomMemberSearch(l,r))[0],roomId:l,timestamp:message.createtime}})),i=async()=>a.parseTextWithRegexList(message.content,p,(async(e,t)=>{const r=t[1],s=t[2],a=(await puppet.roomMemberSearch(l,r))[0];return{inviteeIdList:[(await puppet.roomMemberSearch(l,s))[0]],inviterId:a,roomId:l,timestamp:message.createtime}}));g=await n.executeRunners([e,t,r,i])}return g};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../utils/is-type.cjs"),t=require("../messages/message-sysmsg.cjs"),r=require("../messages/sysmsg/message-sysmsgtemplate.cjs"),s=require("../types.cjs"),o=require("../utils/runner.cjs"),n=[/^(你)将"(.+)"移出了群聊/,/^(You) removed "(.+)" from the group chat/],a=[/^(你)被"([^"]+?)"移出群聊/,/^(You) were removed from the group chat by "([^"]+)"/],m=new Map;function u(e,t){return`${e}:${t}`}exports.default=async(puppet,message)=>{const c=message.fromusername;if(!e.isRoomId(c))return null;const i=await o.executeRunners([async()=>{const e=await t.parseSysmsgSysmsgTemplateMessagePayload(message);return e?await r.parseSysmsgTemplate(e,n,(async e=>({removeeIdList:e[0].payload.map((e=>e.userName)).filter((e=>!!e)),removerId:puppet.currentUserId,roomId:c,timestamp:message.createtime}))):null},async()=>{if(message.type!==s.WechatMessageType.Sys)return null;let e=null;if(a.some((t=>!!(e=message.content.match(t)))),e){const t=e[2],r=(await puppet.roomMemberSearch(c,t))[0];return{removeeIdList:[puppet.currentUserId],removerId:r,roomId:c,timestamp:message.createtime}}return null},async()=>{if(message.type!==s.WechatMessageType.Sys)return null;let e=null;if(n.some((t=>!!(e=message.content.match(t)))),e){const t=e[2];return{removeeIdList:[(await puppet.roomMemberSearch(c,t))[0]],removerId:puppet.currentUserId,roomId:c,timestamp:message.createtime}}return null}]);return i&&i.removeeIdList.forEach((e=>{!function(e,t){const r=u(e,t),s=m.get(r);s&&clearTimeout(s);const o=setTimeout((()=>{m.delete(r)}),36e5);m.set(r,o)}(c,e)})),i},exports.isRoomLeaveDebouncing=function(e,t){const r=u(e,t);return void 0!==m.get(r)},exports.removeRoomLeaveDebounce=function(e,t){const r=u(e,t);m.delete(r)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../utils/is-type.cjs"),s=require("../messages/message-sysmsg.cjs"),t=require("../messages/sysmsg/message-sysmsgtemplate.cjs"),a=require("../utils/regex.cjs"),r=require("../types.cjs"),n=require("../utils/runner.cjs"),c=[/^"(.+)"修改群名为“(.+)”$/,/^"(.+)" changed the group name to "(.+)"$/],o=[/^(你)修改群名为“(.+)”$/,/^(You) changed the group name to "(.+)"$/];exports.default=async(puppet,message)=>{const i=message.fromusername;if(!e.isRoomId(i))return null;const u=await n.executeRunners([async()=>message.type!==r.WechatMessageType.Sys?null:a.parseTextWithRegexList(message.content,o,(async(e,s)=>{const t=s[2];return{changerId:puppet.currentUserId,newTopic:t}})),async()=>{const e=await s.parseSysmsgSysmsgTemplateMessagePayload(message);return e?t.parseSysmsgTemplate(e,c,(async e=>({changerId:e[0].payload[0].userName,newTopic:e[1].payload[0].nickName}))):null},async()=>message.type!==r.WechatMessageType.Sys?null:a.parseTextWithRegexList(message.content,c,(async(e,s)=>{const t=s[2],a=s[1];return{changerId:(await puppet.roomMemberSearch(i,a))[0],newTopic:t}}))]);if(u){const e=(await puppet.roomPayload(i)).topic;return{changerId:u.changerId,newTopic:u.newTopic,oldTopic:e,roomId:i,timestamp:message.createtime}}return null};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("wechaty-puppet");var o;exports.EventType=void 0,(o=exports.EventType||(exports.EventType={}))[o.Message=0]="Message",o[o.Friendship=1]="Friendship",o[o.RoomInvite=2]="RoomInvite",o[o.RoomJoin=3]="RoomJoin",o[o.RoomLeave=4]="RoomLeave",o[o.RoomTopic=5]="RoomTopic";const t=[];exports.addEventParser=function(e,o){t.push({handler:o,type:e})},exports.parseEvent=async function(puppet,message){for(const o of t)try{const e=await o.handler(puppet,message);if(e)return{payload:e,type:o.type}}catch(o){e.log.error("[Event]",`parse message error: ${o.stack}`)}return{payload:message,type:exports.EventType.Message}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./event-friendship.cjs"),r=require("./event-room-invite.cjs"),t=require("./event-room-join.cjs"),n=require("./event-room-leave.cjs"),o=require("./event-room-topic.cjs"),v=require("./event-message.cjs"),a=require("./event.cjs");a.addEventParser(a.EventType.Friendship,e.default),a.addEventParser(a.EventType.RoomInvite,r.default),a.addEventParser(a.EventType.RoomJoin,t.default),a.addEventParser(a.EventType.RoomLeave,n.default),a.addEventParser(a.EventType.RoomTopic,o.default),a.addEventParser(a.EventType.Message,v.default),Object.defineProperty(exports,"EventType",{enumerable:!0,get:()=>a.EventType}),exports.parseEvent=a.parseEvent;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../utils/xml-to-json.cjs");var t;exports.AppMessageType=void 0,(t=exports.AppMessageType||(exports.AppMessageType={}))[t.Text=1]="Text",t[t.Img=2]="Img",t[t.Audio=3]="Audio",t[t.Video=4]="Video",t[t.Url=5]="Url",t[t.Attach=6]="Attach",t[t.Open=7]="Open",t[t.Emoji=8]="Emoji",t[t.VoiceRemind=9]="VoiceRemind",t[t.ScanGood=10]="ScanGood",t[t.Good=13]="Good",t[t.Emotion=15]="Emotion",t[t.CardTicket=16]="CardTicket",t[t.RealtimeShareLocation=17]="RealtimeShareLocation",t[t.ChatHistory=19]="ChatHistory",t[t.MiniProgram=33]="MiniProgram",t[t.MiniProgramApp=36]="MiniProgramApp",t[t.GroupNote=53]="GroupNote",t[t.ReferMsg=57]="ReferMsg",t[t.Transfers=2e3]="Transfers",t[t.RedEnvelopes=2001]="RedEnvelopes",t[t.ReaderType=100001]="ReaderType",exports.parseAppmsgMessagePayload=async function(t){const r=await e.xmlToJson(t),{title:a,des:o,url:s,thumburl:i,type:p,md5:n,recorditem:m}=r.msg.appmsg;let l;const c=r.msg.appmsg.appattach;return c&&(l={aeskey:c.aeskey,attachid:c.attachid,cdnattachurl:c.cdnattachurl,cdnthumbaeskey:c.cdnthumbaeskey,emoticonmd5:c.emoticonmd5,encryver:c.encryver&&parseInt(c.encryver,10)||0,fileext:c.fileext,islargefilemsg:c.islargefilemsg&&parseInt(c.islargefilemsg,10)||0,totallen:c.totallen&&parseInt(c.totallen,10)||0}),{appattach:l,des:o,md5:n,recorditem:m,refermsg:r.msg.appmsg.refermsg,thumburl:i,title:a,type:parseInt(p,10),url:s}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../utils/xml-to-json.cjs");exports.generateEmotionPayload=function(e){return`<msg><emoji cdnurl="${e.cdnurl}" len="${e.len}" md5="${e.md5}" type="${e.type}"/>${e.gameext||""}</msg>`},exports.parseEmotionMessagePayload=async function(message){const t=await e.xmlToJson(message.content),n=parseInt(t.msg.emoji.$.len,10)||0,m=parseInt(t.msg.emoji.$.width,10)||0,o=parseInt(t.msg.emoji.$.height,10)||0,s=t.msg.emoji.$.cdnurl,a=parseInt(t.msg.emoji.$.type,10)||0,g=t.msg.emoji.$.md5;let r;return t.msg.gameext&&(r=`<gameext type="${parseInt(t.msg.gameext.$.type,10)||0}" content="${parseInt(t.msg.gameext.$.content,10)||0}" ></gameext>`),{cdnurl:s,gameext:r,height:o,len:n,md5:g,type:a,width:m}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../utils/xml-to-json.cjs");exports.parseMiniProgramMessagePayload=async function(a){const t=(await e.xmlToJson(a.content)).msg.appmsg,n=t.weappinfo,r=t.appattach;return{appid:n.appid,description:t.sourcedisplayname,iconUrl:n.weappiconurl,pagePath:n.pagepath,shareId:n.shareId,thumbKey:r.cdnthumbaeskey,thumbUrl:r.cdnthumburl,title:t.title,username:n.username}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../types.cjs"),e=require("../utils/xml-to-json.cjs"),a=require("./sysmsg/message-pat.cjs"),t=require("./sysmsg/message-sysmsgtemplate.cjs"),r=require("./sysmsg/message-todo.cjs"),o=require("./sysmsg/message-revokemsg.cjs");async function y(message){if(message.type!==s.WechatMessageType.SysTemplate)return null;const y=message.content.trim(),m=y.indexOf("<sysmsg");if(-1===m)return null;const g=await e.xmlToJson(y.substring(m));let l;switch(g.sysmsg.$.type){case"pat":l=await a.parsePatMessagePayload(g.sysmsg.pat);break;case"sysmsgtemplate":l=await t.parseSysmsgTemplateMessagePayload(g.sysmsg.sysmsgtemplate);break;case"roomtoolstips":l=await r.parseTodoMessagePayload(g.sysmsg.todo);break;case"revokemsg":l=await o.parseRevokeMsgMessagePayload(g.sysmsg.revokemsg)}return l?{payload:l,type:g.sysmsg.$.type}:null}exports.parseSysmsgMessagePayload=y,exports.parseSysmsgSysmsgTemplateMessagePayload=async function(message){const s=await y(message);return s&&"sysmsgtemplate"===s.type?s.payload:null};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.parsePatMessagePayload=async function(e){return{chatUserName:e.chatusername,fromUserName:e.fromusername,pattedUserName:e.pattedusername,template:e.template}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../utils/regex.cjs"),s=require("../../utils/runner.cjs"),a=[/你撤回了一条消息/,/You recalled a message/],r=[/"(.+)" 撤回了一条消息/,/"(.+)" has recalled a message./];exports.parseRevokeMsgMessagePayload=async function(t){let n;const c=await s.executeRunners([async()=>e.parseTextWithRegexList(t.replacemsg,a,(async()=>"You")),async()=>e.parseTextWithRegexList(t.replacemsg,r,(async(e,s)=>(n=s[1],"Other")))]);return{content:t.replacemsg,operatorNickName:n,originalMessageId:t.newmsgid,session:t.session,type:c}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../utils/regex.cjs");function t(e){return Array.isArray(e)?e:[e]}async function n(t,n,a){return e.parseTextWithRegexList(t.template,n,(async e=>a(t.templateLinkList,e)))}exports.createSysmsgTemplateRunner=function(e,t,a){return async()=>n(e,t,a)},exports.parseSysmsgTemplate=n,exports.parseSysmsgTemplateMessagePayload=async function(e){const n=t(e.content_template.link_list.link).map((e=>{const n=e.$.type;let a;return"link_profile"===n?a=t(e.memberlist.member).map((e=>({nickName:e.nickname,userName:e.username}))):"link_revoke"===e.$.type&&(a={title:e.title,userNameList:t(e.usernamelist.username)}),{name:e.$.name,payload:a,type:n}})),a=e.content_template.template,r=[...a.matchAll(/\$(.+?)\$/g)];return{template:a,templateLinkList:r.map((e=>{const t=e[1];return n.filter((e=>e.name===t))[0]}))}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.parseTodoMessagePayload=async function(e){return{appId:e.username,creatorUserName:e.creator,id:e.todoid,numberOfReply:e.nreply,operatorUserName:e.oper,path:e.path,relatedMessageId:e.related_msgid,template:e.template,title:e.title}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("wechaty-puppet"),t=require("../utils/is-type.cjs"),r=function(e){if(e&&e.__esModule)return e;const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const r in e)if("default"!==r){const n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:()=>e[r]})}return t.default=e,Object.freeze(t)}(e);exports.padPlusContactToWechaty=function(contact){return{alias:contact.remark,avatar:contact.avatar,city:contact.city,friend:!contact.stranger,gender:contact.gender,id:contact.username,name:contact.nickname,phone:contact.phoneList,province:contact.province,signature:contact.signature,type:t.isContactOfficialId(contact.username)?r.types.Contact.Official:r.types.Contact.Individual,weixin:contact.alias}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("wechaty-puppet"),s=require("./message-parser.cjs"),t=require("../../messages/message-appmsg.cjs"),a=function(e){if(e&&e.__esModule)return e;const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const t in e)if("default"!==t){const a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(s,t,a.get?a:{enumerable:!0,get:()=>e[t]})}return s.default=e,Object.freeze(s)}(e);exports.appMsgParser=async(p,r,y)=>{if(r.type!==a.types.Message.Attachment)return r;try{const e=await t.parseAppmsgMessagePayload(p.content);switch(y.appMessagePayload=e,e.type){case t.AppMessageType.Text:r.type=a.types.Message.Text,r.text=e.title;break;case t.AppMessageType.Audio:case t.AppMessageType.Video:case t.AppMessageType.Url:r.type=a.types.Message.Url;break;case t.AppMessageType.Attach:r.type=a.types.Message.Attachment,r.filename=e.title;break;case t.AppMessageType.ChatHistory:r.type=a.types.Message.ChatHistory;break;case t.AppMessageType.MiniProgram:case t.AppMessageType.MiniProgramApp:r.type=a.types.Message.MiniProgram;break;case t.AppMessageType.RedEnvelopes:r.type=a.types.Message.RedEnvelope;break;case t.AppMessageType.Transfers:r.type=a.types.Message.Transfer;break;case t.AppMessageType.RealtimeShareLocation:r.type=a.types.Message.Location;break;case t.AppMessageType.GroupNote:r.type=a.types.Message.GroupNote,r.text=e.title;break;default:r.type=a.types.Message.Unknown}}catch(t){e.log.warn(s.LOGPRE,`Error occurred while parse message attachment: ${JSON.stringify(p)} , ${t.stack}`)}return r};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("wechaty-puppet"),a=require("../../messages/message-appmsg.cjs"),t=require("../../types.cjs"),s=function(e){if(e&&e.__esModule)return e;const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const t in e)if("default"!==t){const s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,s.get?s:{enumerable:!0,get:()=>e[t]})}return a.default=e,Object.freeze(a)}(e);exports.referMsgParser=async(e,r,p)=>{if(!p.appMessagePayload||p.appMessagePayload.type!==a.AppMessageType.ReferMsg)return r;const c=p.appMessagePayload;let o;const n=c.refermsg;switch(parseInt(n.type)){case t.WechatMessageType.Text:o=n.content;break;case t.WechatMessageType.Image:o="图片";break;case t.WechatMessageType.Video:o="视频";break;case t.WechatMessageType.Emoticon:o="动画表情";break;case t.WechatMessageType.Location:o="位置";break;case t.WechatMessageType.App:o=(await a.parseAppmsgMessagePayload(n.content)).title;break;default:o="未知消息"}return r.type=s.types.Message.Text,r.text=`「${n.displayname}:${o}」\n- - - - - - - - - - - - - - -\n${c.title}`,r};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../utils/is-type.cjs");exports.roomParser=async(t,o,n)=>{if(await async function(t,o){if(e.isRoomId(t.fromusername)||e.isIMRoomId(t.fromusername)){o.roomId=t.fromusername;const e=t.content.indexOf(":\n");if(-1!==e){const n=t.content.slice(0,e);o.talkerId=n,o.text=t.content.slice(e+2)}else o.talkerId=t.tousername}}(t,o),await async function(t,o){if(e.isRoomId(t.tousername)||e.isIMRoomId(t.tousername)){o.roomId=t.tousername,o.talkerId=t.fromusername;const e=t.content.indexOf(":\n");-1!==e&&(o.text=t.content.slice(e+2))}}(t,o),o.roomId){let e;n.isRoomMessage=!0,e=1===t.atList.length&&"announcement@all"===t.atList[0]?(await n.puppet.roomPayload(o.roomId)).memberIdList:t.atList,o.mentionIdList=e}return o};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.singleChatParser=async(e,r,s)=>(s.isRoomMessage||(r.talkerId=e.fromusername,r.listenerId=e.tousername),r);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../messages/message-sysmsg.cjs");exports.sysmsgParser=async(s,a,r)=>{const t=await e.parseSysmsgMessagePayload(s);if(!t)return a;switch(t.type){case"pat":{const e=t.payload;r.isRoomMessage&&(a.talkerId=e.pattedUserName,a.listenerId=e.fromUserName);break}case"roomtoolstips":{const e=t.payload;r.isRoomMessage&&(a.talkerId=e.operatorUserName);break}case"revokemsg":{const e=t.payload;r.isRoomMessage||"You"===e.type&&(a.listenerId=a.talkerId,a.talkerId=r.puppet.currentUserId);break}}return a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("wechaty-puppet"),s=require("../../types.cjs"),t=require("./message-parser.cjs"),a=function(e){if(e&&e.__esModule)return e;const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const t in e)if("default"!==t){const a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(s,t,a.get?a:{enumerable:!0,get:()=>e[t]})}return s.default=e,Object.freeze(s)}(e),p={[s.WechatMessageType.Text]:a.types.Message.Text,[s.WechatMessageType.Image]:a.types.Message.Image,[s.WechatMessageType.Voice]:a.types.Message.Audio,[s.WechatMessageType.Emoticon]:a.types.Message.Emoticon,[s.WechatMessageType.App]:a.types.Message.Attachment,[s.WechatMessageType.File]:a.types.Message.Attachment,[s.WechatMessageType.Location]:a.types.Message.Location,[s.WechatMessageType.Video]:a.types.Message.Video,[s.WechatMessageType.Sys]:a.types.Message.Unknown,[s.WechatMessageType.ShareCard]:a.types.Message.Contact,[s.WechatMessageType.VoipMsg]:a.types.Message.Recalled,[s.WechatMessageType.SysTemplate]:a.types.Message.Recalled,[s.WechatMessageType.StatusNotify]:a.types.Message.Unknown,[s.WechatMessageType.SysNotice]:a.types.Message.Unknown};exports.typeParser=async(s,y,o)=>{const c=s.type;let g=p[c];return g||(e.log.verbose(t.LOGPRE,`unsupported type: ${JSON.stringify(s)}`),g=a.types.Message.Unknown),y.type=g,y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=[];exports.LOGPRE="message-parser",exports.addMessageParser=function(s){e.push(s)},exports.executeMessageParsers=async function(puppet,s,o){const t={isRoomMessage:!1,puppet};for(const r of e)o=await r(s,o,t);return o};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./message-parser.cjs"),s=require("./message-parser-type.cjs"),r=require("./message-parser-room.cjs"),a=require("./message-parser-single-chat.cjs"),g=require("./message-parser-appmsg.cjs"),p=require("./message-parser-refermsg.cjs"),P=require("./message-parser-sysmsg.cjs");e.addMessageParser(s.typeParser),e.addMessageParser(r.roomParser),e.addMessageParser(a.singleChatParser),e.addMessageParser(g.appMsgParser),e.addMessageParser(p.referMsgParser),e.addMessageParser(P.sysmsgParser),exports.executeMessageParsers=e.executeMessageParsers;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("wechaty-puppet");require("./message/mod.cjs");const t=require("./message/message-parser.cjs"),r=function(e){if(e&&e.__esModule)return e;const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const r in e)if("default"!==r){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}return t.default=e,Object.freeze(t)}(e);exports.padPlusToWechaty=async function(puppet,e){const o={id:e.id,talkerId:e.fromusername,text:e.content,timestamp:e.createtime,type:r.types.Message.Unknown};if(await t.executeMessageParsers(puppet,e,o),!o.roomId&&!o.listenerId)throw new Error("neither roomId nor listenerId");return o};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),require("../../server/map/index.cjs");const contact=require("../../server/map/contact.cjs");exports.chatRoomMemberToContact=function(e){return(new contact.Contact).setUsername(e.getUsername()).setNickname(e.getNickname()).setAvatar(e.getAvatar()).setStranger(!0)},exports.padPlusRoomMemberToWechaty=function(e){return{avatar:e.avatar,id:e.username,inviterId:e.inviterusername,name:e.nickname,roomAlias:e.displayname}},exports.padPlusRoomToWechaty=function(e){return{adminIdList:[],avatar:e.avatar,id:e.username,memberIdList:e.chatroommemberList.map((e=>e.username)),ownerId:e.chatroomownerusername,topic:e.nickname}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.WechatMessageType=void 0,(e=exports.WechatMessageType||(exports.WechatMessageType={}))[e.Text=1]="Text",e[e.Image=3]="Image",e[e.Voice=34]="Voice",e[e.VerifyMsg=37]="VerifyMsg",e[e.PossibleFriendMsg=40]="PossibleFriendMsg",e[e.ShareCard=42]="ShareCard",e[e.Video=43]="Video",e[e.Emoticon=47]="Emoticon",e[e.Location=48]="Location",e[e.App=49]="App",e[e.VoipMsg=50]="VoipMsg",e[e.StatusNotify=51]="StatusNotify",e[e.VoipNotify=52]="VoipNotify",e[e.VoipInvite=53]="VoipInvite",e[e.MicroVideo=62]="MicroVideo",e[e.VerifyMsgEnterprise=65]="VerifyMsgEnterprise",e[e.Transfer=2e3]="Transfer",e[e.RedEnvelope=2001]="RedEnvelope",e[e.MiniProgram=2002]="MiniProgram",e[e.GroupInvite=2003]="GroupInvite",e[e.File=2004]="File",e[e.SysNotice=9999]="SysNotice",e[e.Sys=1e4]="Sys",e[e.SysTemplate=10002]="SysTemplate";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=new Map;exports.CachedPromiseFunc=async function(t,n){const o=e.get(t);if(o)return o;const r=n();return e.set(t,r),r.finally((()=>e.delete(t)))};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function t(t){return!!t&&/@chatroom$/.test(t)}function o(t){return!!t&&/@im.chatroom$/.test(t)}function e(t){return!!t&&/@openim$/.test(t)}Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.isContactId=function(n){return!(!n||t(n)||o(n)||e(n))},exports.isContactOfficialId=function(t){return!!t&&/^gh_/i.test(t)},exports.isIMContactId=e,exports.isIMRoomId=o,exports.isRoomId=t;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.parseTextWithRegexList=async function(t,e,r){for(let n=0;n<e.length;++n){const o=e[n],a=t.match(o);if(a)return await r(n,a)}return null};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.executeRunners=async function(e){for(const t of e){const e=await t();if(e)return e}return null};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("xml2js"),r=require("wechaty-puppet");exports.xmlToJson=async function(t){const n=t.indexOf("<");return 0!==n&&(t=t.substring(n,t.length)),new Promise((n=>{e.parseString(t,{explicitArray:!1},((e,t)=>(e&&0!==Object.keys(e).length&&r.log.warn(JSON.stringify(e)),n(t))))}))};
|
package/dist/cjs/mod.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./config.cjs"),p=require("./puppet-plus.cjs");exports.VERSION=e.VERSION,exports.PuppetPlus=p.PuppetPlus,exports.default=p.PuppetPlus;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.packageJson={version:"3.1.0"};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("fast-xml-parser"),t=require("./server/utils/Utils.cjs"),a=require("./server/index.cjs"),s=require("./server/utils/SerialExecutor.cjs"),i=require("./server/map/index.cjs"),n=require("./mock/messages/message-appmsg.cjs"),r=require("./mock/messages/message-miniprogram.cjs"),o=require("./mock/types.cjs"),c=require("./mock/messages/message-emotion.cjs"),g=require("wechaty-puppet"),m=require("file-box");require("./mock/events/mod.cjs");const h=require("./package-json.cjs"),l=require("./mock/cache-manager.cjs"),u=require("./cleanup.cjs"),d=require("./mock/utils/cached-promise.cjs"),p=require("./mock/schema-mapper/message.cjs"),y=require("./mock/utils/is-type.cjs"),w=require("./mock/events/event-room-leave.cjs"),f=require("./mock/schema-mapper/contact.cjs"),room=require("./mock/schema-mapper/room.cjs"),M=require("fs"),_=require("fluent-ffmpeg"),C=require("os"),b=require("path"),P=require("ffmpeg-static"),R=require("./mock/events/event.cjs"),message=require("./server/map/message.cjs"),contact=require("./server/map/contact.cjs"),S=require("./server/map/AppMessageLink.cjs"),v=require("./server/map/Label.cjs"),I=e=>e&&e.__esModule?e:{default:e};function T(e){if(e&&e.__esModule)return e;const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const a in e)if("default"!==a){const s=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,s.get?s:{enumerable:!0,get:()=>e[a]})}return t.default=e,Object.freeze(t)}const k=T(e),$=T(g),x=I(M),j=I(_),L=I(C),B=I(b),F=I(P),U="$search$-",A="[PuppetPadPlus]",VERSION=h.packageJson.version;x.default.existsSync("/usr/bin/ffmpeg")?(console.log("/usr/bin/ffmpeg 文件存在,使用系统默认的"),j.default.setFfmpegPath("/usr/bin/ffmpeg")):j.default.setFfmpegPath(F.default);class PuppetPlus extends $.Puppet{options;static VERSION=VERSION;_printVersion=!0;_onPushSerialExecutor=new s.SerialExecutor;selfInfo;_cacheMgr;_client;get client(){return this._client}constructor(e={}){super(e),this.options=e}version(){return VERSION}async onStop(){await this._stopClient(!1)}async _stopClient(e){this._client&&this._client.removeAllListeners(),this._client=void 0,this.__currentUserId=void 0,this._cacheMgr&&(await this._cacheMgr.close(),this._cacheMgr=void 0),u.removeRunningPuppet(this),e&&setTimeout((()=>{this.wrapAsync(this._startClient())}))}async onStart(){await this._startClient()}async requestLoginQRCode(){if(!this._client)throw new Error("puppet has not started");if(!this._client.api?.requestLoginQRCode)throw new Error("requestLoginQRCode is unsupported by current Api implementation");return this._client.api.requestLoginQRCode()}async login(e){this._cacheMgr||(this._cacheMgr=new l.CacheManager(e),await this._cacheMgr.init()),await super.login(e),await this._cacheMgr.getContact(this.currentUserId)||await this._updateContactCache(this._client.selfContact.toObject())}ding(e){g.log.silly("PuppetXp","ding(%s)",e||""),setTimeout((()=>this.emit("dong",{data:e||""})),1e3)}async contactSelfName(e){await this._client.api.updateSelfNickName(e),this._client.selfContact.setNickname(e);const t=await this.contactRawPayload(this._client.selfContact.getUsername());t.nickname=e,await this._updateContactCache(t)}async contactSelfQRCode(){const e=await this._client.api.getContactQRCode(this._client.selfContact.getUsername(),1);return m.FileBox.fromBase64(`${e.Data.qrcode.buffer}`,`qr-${this.currentUserId}.jpg`).toQRCode()}async contactSelfSignature(e){await this._client.api.updateSelfSignature(e),this._client.selfContact.setSignature(e);const t=await this.contactRawPayload(this._client.selfContact.getUsername());t.signature=e,await this._updateContactCache(t)}async contactAlias(e,t){const a=await this.contactRawPayload(e);if(!t)return a.remark;if(-1!==a.username.indexOf("@stranger")){if(await this._cacheMgr.setContactStrangerAlias(a.username,t),e.startsWith(U)){const a=await(this._cacheMgr?.getContactSearch(e));a&&a.contact&&(a.contact.remark=t,await this._cacheMgr.setContactSearch(e,a))}}else await this._client.api.updateContactRemark(a.username,t),a.remark=t,await this._updateContactCache(a)}async contactAvatar(e,t){if(t)throw new Error("set avatar is not unsupported");const a=await this.contactRawPayload(e);return m.FileBox.fromUrl(a.avatar,{name:`avatar-${e}.jpg`})}async contactList(){return this._cacheMgr.getContactIds()}contactCorporationRemark(e,t){throw new Error(`contactCorporationRemark(${e}, ${t}) called failed: Method not supported.`)}contactDescription(e,t){throw new Error(`contactDescription(${e}, ${t}) called failed: Method not supported.`)}contactPhone(e,t){throw new Error(`contactPhone(${e}, ${t}) called failed: Method not supported.`)}async conversationReadMark(e,t){g.log.verbose("PuppetService","conversationRead(%s, %s)",e,t)}async messageContact(e){throw new Error("not implement")}async messageFile(e){const t=await this.messageRawPayload(e),a=await this.messageRawPayloadParser(t);switch(a.type){case $.types.Message.Image:return this._getMessageImageFileBox(e,t,$.types.Image.HD);case $.types.Message.Audio:{let s;s=t.binarypayload&&t.binarypayload.length?"string"==typeof t.binarypayload?Buffer.from(t.binarypayload,"base64"):Buffer.from(t.binarypayload):await this._client.api.getMessageVoice(a.id,a.text,t.fromusername);const i=m.FileBox.fromBase64(s,`message-${e}-audio.sil`),n={attrNodeName:"$",attributeNamePrefix:"",ignoreAttributes:!1},r=k.parse(t.content,n),o=parseInt(r.msg.voicemsg.$.voicelength,10);return i.metadata={voiceLength:o},i}case $.types.Message.Video:{const s=await this._client.api.getMessageVideo(a.id,a.text,t.tousername);return m.FileBox.fromBase64(s,`message-${e}-video.mp4`)}case $.types.Message.Attachment:{const e=await n.parseAppmsgMessagePayload(t.content),s=await this._client.api.getMessageAttach(a.text,t.tousername);return m.FileBox.fromBase64(s,e.title)}case $.types.Message.Emoticon:{const a=await c.parseEmotionMessagePayload(t),s=m.FileBox.fromUrl(a.cdnurl,{name:`message-${e}-emoticon.jpg`});return s.metadata={payload:a,type:"emoticon"},s}case $.types.Message.MiniProgram:try{const a=await this._client.api.getMessageMiniProgramThumb(t.content,t.tousername);return m.FileBox.fromBase64(a,`message-${e}-miniprogram-thumb.jpg`)}catch(a){return g.log.warn(`fail to get thumb for miniprogram message:${e}, payload: ${JSON.stringify(t)}`),m.FileBox.fromBuffer(Buffer.from(new ArrayBuffer(0)),`message-${e}-url-thumb.jpg`)}case $.types.Message.Url:{const a=await n.parseAppmsgMessagePayload(t.content);if(a.thumburl)return m.FileBox.fromUrl(a.thumburl);try{const a=await this._client.api.getMessageAttachThumb(t.content,t.tousername);return m.FileBox.fromBase64(a,`message-${e}-url-thumb.jpg`)}catch(t){return g.log.warn(`fail to get thumb for url message:${e}, payload: ${JSON.stringify(a)}`),m.FileBox.fromBuffer(Buffer.from(new ArrayBuffer(0)),`message-${e}-url-thumb.jpg`)}}default:throw new Error(`Can not get file for message: ${e}`)}}async messageImage(e,t){const a=await this.messageRawPayload(e);return this._getMessageImageFileBox(e,a,t)}async messageMiniProgram(e){const t=await this.messageRawPayload(e);if((await this.messageRawPayloadParser(t)).type!==$.types.Message.MiniProgram)throw new Error("message is not mini program, can not get MiniProgramPayload");return r.parseMiniProgramMessagePayload(t)}async messageUrl(e){const t=await this.messageRawPayload(e);if((await this.messageRawPayloadParser(t)).type!==$.types.Message.Url)throw new Error("Can not get url from non url payload");const a=await n.parseAppmsgMessagePayload(t.content);return{description:a.des,thumbnailUrl:a.thumburl,title:a.title,url:a.url}}async messageSendText(e,t,a){const s=await this.client.api.send_text(e,t,a||[]),i=y.isRoomId(e)?`${this._client.selfContact.getNickname()}: ${t}`:t;return await this._onSendMessage((new message.Message).setType(o.WechatMessageType.Text).setFromusername(this.currentUserId).setTousername(e).setContent(t).setPushcontent(i),s.getMsgid(),s.getMessagerevokeinfo()),s.getMsgid()}async messageSendFile(e,t){const a=t.metadata;if("emoticon"===a.type){const t=a.payload,s=await this._client.api.sendMessageEmoji(e,t.md5,t.len),i=y.isRoomId(e)?`${this._client.selfContact.getNickname()}: [动画表情]`:"[动画表情]",n=c.generateEmotionPayload(t);return await this._onSendMessage((new message.Message).setType(o.WechatMessageType.Emoticon).setFromusername(this.currentUserId).setTousername(e).setContent(n).setPushcontent(i),s.getMsgid(),s.getMessagerevokeinfo()),s.getMsgid()}if(t.mediaType.startsWith("image/")){const a=await t.toBase64(),s=await this._client.api.sendImageMessage(e,a),i=y.isRoomId(e)?`${this._client.selfContact.getNickname()}: [图片]`:"[图片]";return await this._onSendMessage((new message.Message).setType(o.WechatMessageType.Text).setFromusername(this.currentUserId).setTousername(e).setContent(i).setPushcontent(i),s.getMsgid(),s.getMessagerevokeinfo()),s.getMsgid()}if("audio/silk"===t.mediaType){const a=await t.toBase64(),s=await this._client.api.sendVoiceMessage(e,a,t.metadata.voiceLength),i=y.isRoomId(e)?`${this._client.selfContact.getNickname()}: [语音]`:"[语音]";return await this._onSendMessage((new message.Message).setType(o.WechatMessageType.Text).setFromusername(this.currentUserId).setTousername(e).setContent(i).setPushcontent(i),s.getMsgid(),s.getMessagerevokeinfo()),s.getMsgid()}if(t.mediaType.startsWith("video/")){const a=await t.toBase64(),s=await async function(e){const t=await e.toBuffer(),a=B.default.join(L.default.tmpdir(),`temp_video_${Date.now()}.mp4`),s=B.default.join(L.default.tmpdir(),`temp_image_${Date.now()}.jpg`);try{return x.default.writeFileSync(a,t),await new Promise(((e,t)=>{j.default(a).outputOptions("-frames:v 1").output(s).on("end",e).on("error",t).run()})),x.default.readFileSync(s).toString("base64")}finally{x.default.existsSync(a)&&x.default.unlinkSync(a),x.default.existsSync(s)&&x.default.unlinkSync(s)}}(t),i=await this._client.api.sendVideoMessage(e,a,s),n=y.isRoomId(e)?`${this._client.selfContact.getNickname()}: [视频]`:"[视频]";return await this._onSendMessage((new message.Message).setType(o.WechatMessageType.Text).setFromusername(this.currentUserId).setTousername(e).setContent(n).setPushcontent(n),i.getMsgid(),i.getMessagerevokeinfo()),i.getMsgid()}{const a=await t.toBase64(),s=await this._client.api.sendFileMessage(`data:${t.mediaType};base64,${a}`),i=y.isRoomId(e)?`${this._client.selfContact.getNickname()}: [文件]`:"[文件]";return await this._onSendMessage((new message.Message).setType(o.WechatMessageType.Text).setFromusername(this.currentUserId).setTousername(e).setContent(i).setPushcontent(i),s.getMsgid(),s.getMessagerevokeinfo()),s.getMsgid()}}async messageSendContact(e,t){const a=await this.contactRawPayload(t),s=(new contact.Contact).setUsername(a.username).setNickname(a.nickname).setAvatar(a.avatar).setGender(a.gender).setSignature(a.signature).setAlias(a.alias).setLabel(a.label).setRemark(a.remark).setCity(a.city).setProvince(a.province).setCountry(a.country).setContactaddscene(a.contactaddscene).setStranger(a.stranger),i=await this._client.api.sendContactCardMessage(e,s),n=(y.isRoomId(e)?`${this._client.selfContact.getNickname()}: `:"")+"向你推荐了"+s.getNickname();return await this._onSendMessage((new message.Message).setType(o.WechatMessageType.Text).setFromusername(this.currentUserId).setTousername(e).setContent(n).setPushcontent(n),i.getMsgid(),i.getMessagerevokeinfo()),i.getMsgid()}async messageSendUrl(e,a){const s=new S.AppMessageLink;s.setTitle(a.title).setUrl(a.url),a.description&&s.setDescription(a.description),a.thumbnailUrl&&s.setThumburl(a.thumbnailUrl);const i=await this._client.api.sendMessageLink(t.genIdempotentId(),e,s),n=y.isRoomId(e)?`${this._client.selfContact.getNickname()}: [链接] ${a.title}`:`[链接] ${a.title}`;return await this._onSendMessage((new message.Message).setType(o.WechatMessageType.App).setFromusername(this.currentUserId).setTousername(e).setContent(i.getMsgcontent()).setPushcontent(n),i.getMsgid(),i.getMessagerevokeinfo()),i.getMsgid()}async messageSendMiniProgram(e,t){const a=await this._client.api.sendMessageMiniProgram(e,t),s=y.isRoomId(e)?`${this._client.selfContact.getNickname()}: [小程序] ${t.title}`:`[小程序] ${t.title}`;return await this._onSendMessage((new message.Message).setType(o.WechatMessageType.App).setFromusername(this.currentUserId).setTousername(e).setContent(a.getMsgcontent()).setPushcontent(s),a.getMsgid(),a.getMessagerevokeinfo()),a.getMsgid()}async messageRecall(e){const t=await this._cacheMgr.getMessage(e),a=await this._cacheMgr.getMessageRevokeInfo(e);return await this._client.api.revokeMessage(t.tousername,a.clientmsgid,a.newclientmsgid),!0}async forwardMessagewenjian(e,t){await this._client.api.forwardMessagewenjian(e,t)}async messageForward(e,t){const a=await this.messageRawPayload(t),s=await this.messageRawPayloadParser(a);let i;switch(s.type){case $.types.Message.Text:i=await this.messageSendText(e,s.text);break;case $.types.Message.Image:{const a=await this.messageImage(t,$.types.Image.HD);i=await this.messageSendFile(e,a);break}case $.types.Message.Audio:{const a=await this.messageFile(t);i=await this.messageSendFile(e,a);break}case $.types.Message.Video:{const a=await this.messageFile(t);i=await this.messageSendFile(e,a);break}case $.types.Message.Attachment:{const t=await this._client.api.forwardMessagewenjian(e,a.content);i=t.getMsgid();let s=a.pushcontent;s&&-1!==s.indexOf(":")&&(s=s.split(":")[1]),y.isRoomId(e)&&(s=`${this._client.selfContact.getNickname()}:${s}`),await this._onSendMessage((new message.Message).setType(o.WechatMessageType.App).setFromusername(this.currentUserId).setTousername(e).setContent(t.getMsgcontent()).setPushcontent(s),t.getMsgid(),t.getMessagerevokeinfo());break}case $.types.Message.MiniProgram:case $.types.Message.Url:{const t=await this._client.api.forwardMessage(e,a.content);i=t.getMsgid();let s=a.pushcontent;s&&-1!==s.indexOf(":")&&(s=s.split(":")[1]),y.isRoomId(e)&&(s=`${this._client.selfContact.getNickname()}:${s}`),await this._onSendMessage((new message.Message).setType(o.WechatMessageType.App).setFromusername(this.currentUserId).setTousername(e).setContent(t.getMsgcontent()).setPushcontent(s),t.getMsgid(),t.getMessagerevokeinfo());break}case $.types.Message.Emoticon:{const a=await this.messageFile(t);i=await this.messageSendFile(e,a);break}default:throw new Error(`Message forwarding is unsupported for messageId:${t}, type:${s.type}`)}return i}async roomAdd(e,t){await this._client.api.inviteChatroomMembers(e,t)}async roomAvatar(e){const t=await this.roomRawPayload(e);return t.avatar?m.FileBox.fromUrl(t.avatar):m.FileBox.fromBuffer(Buffer.from(new ArrayBuffer(0)),`room-${t.username}-avatar.jpg`)}async roomQRCode(e){const t=await this._client.api.getChatRoomQrCode(e);return m.FileBox.fromBase64(`${t.Data.qrcode.buffer}`,`qr-${this.currentUserId}.jpg`).toQRCode()}async logout(){this.isLoggedIn&&(await this._client.api.logout(),this.emit("logout",{contactId:this.currentUserId,data:"logout by self"}))}async roomCreate(e,t){return(await this._client.api.createChatRoom(e,t)).getRoomid()}async roomDel(e,t){await this._client.api.deleteChatRoomMember(e,t)}async roomList(){return this._cacheMgr.getRoomIds()}async roomQuit(e){await this._client.api.quitChatRoom(e)}async roomTopic(e,t){await this._client.api.setChatRoomName(e,t||"")}async roomAnnounce(e,t){if(void 0===t)return this._client.api.getChatRoomAnnouncement(e);await this._client.api.setChatRoomAnnouncement(e,t)}async roomMemberList(e){const t=await this._getRoomMemberList(e);return Object.values(t).map((e=>e.username))}async roomInvitationAccept(e){const t=await this.roomInvitationRawPayload(e);await this._client.api.acceptChatRoomInvitation(t.inviterId,t.invitation)}async friendshipAccept(e){const friendship=await this.friendshipRawPayload(e),t=friendship.contactId;y.isIMContactId(t)&&await this._refreshContact(t,friendship.ticket),await this._client.api.acceptUser(t,friendship.ticket,friendship.stranger,friendship.scene)}async isFriend(e){const t=await this._client.api.GetFriendRelation(e);return 0===t.Data?.FriendRelation}async friendshipAdd(e,t){let a;t&&(a="string"==typeof t?t:t.hello);const s=await this._client.api.getChatContact(e);await this._client.api.addContact(s.getUsername(),s.getAntispamticket(),a)}async friendshipSearchPhone(e){return this._friendshipSearch(e)}async friendshipSearchWeixin(e){return this._friendshipSearch(e)}async _friendshipSearch(e){if(await this._cacheMgr.getContactSearch(e))return e;const t=await this._client.api.getChatContact(e),a=`${U}${e}`;return await this._cacheMgr.setContactSearch(a,t.toObject()),a}async _findRoomIdForUserName(e){const t=[],a=await(this._cacheMgr?.getRoomIds())||[];for(const s of a){const a=await(this._cacheMgr?.getRoomMember(s));a&&(-1!==Object.keys(a).indexOf(e)&&t.push(s))}return t}async contactDelete(e){if((await this._refreshContact(e)).getStranger())return g.log.warn(`can not delete contact which is not a friend:: ${e}`),void 0;await this._client.api.deleteContact(e),await this._refreshContact(e)}async tagContactAdd(e,t){const a=await this._findTagWithName(e,!0),s=await this.contactRawPayload(t),i=s.label.split(",").filter((e=>e)).map((e=>parseInt(e,10)));if(-1!==i.indexOf(a.getId()))return g.log.warn(`contact: ${t} has already assigned tag: ${e}`),void 0;i.push(a.getId()),await this._client.api.setContactLabel(t,i),s.label=i.join(","),await this._updateContactCache(s)}async tagContactRemove(e,t){const a=await this._findTagWithName(e);if(!a)throw new Error(`can not find tag with name: ${e}`);const s=await this.contactRawPayload(t),i=s.label.split(",").filter((e=>e)).map((e=>parseInt(e,10))),n=i.indexOf(a.getId());if(-1===n)return g.log.warn(A,`contact: ${t} has no tag: ${e}`),void 0;i.splice(n,1),await this._client.api.setContactLabel(t,i),s.label=i.join(","),await this._updateContactCache(s)}async tagContactDelete(e){const t=await this._findTagWithName(e,!1);if(!t)throw new Error(`tag:${e} doesn't exist`);await this._client.api.removeLabel(t.getId()),await this._getTagList(!0)}async tagContactList(e){if(e){const t=await this.contactRawPayload(e);if(!t.label||!t.label.length)return[];const a=t.label.split(",").filter((e=>e)).map((e=>parseInt(e,10))),{labelList:s,fromCache:i}=await this._getTagList();let n=s.filter((e=>-1!==a.indexOf(e.getId())));return n.length!==a.length&&i?(n=(await this._getTagList(!0)).labelList.filter((e=>-1!==a.indexOf(e.getId()))),n.map((e=>e.getName()))):n.map((e=>e.getName()))}{const{labelList:e}=await this._getTagList(!0);return e.map((e=>e.getName()))}}async contactRawPayload(e){if(e.startsWith(U))return(await(this._cacheMgr?.getContactSearch(e))).contact;let t=await this._cacheMgr.getContact(e);return t||(t=await d.CachedPromiseFunc(`contactRawPayload-${e}`,(async()=>(await this._refreshContact(e)).toObject()))),t}async contactRawPayloadParser(e){return f.padPlusContactToWechaty(e)}async messageRawPayload(e){const t=await this._cacheMgr.getMessage(e);if(!t)throw new Error(`can not find message in cache for messageId: ${e}`);return t}async messageRawPayloadParser(e){return p.padPlusToWechaty(this,e)}async roomRawPayload(e){let t=await this._cacheMgr.getRoom(e);return t||(t=(await this._refreshContact(e)).toObject()),t}async roomRawPayloadParser(e){return room.padPlusRoomToWechaty(e)}async roomMemberRawPayload(e,t){return(await this._getRoomMemberList(e))[t]}async roomMemberRawPayloadParser(e){return room.padPlusRoomMemberToWechaty(e)}async roomInvitationRawPayload(e){const t=await this._cacheMgr.getRoomInvitation(e);if(!t)throw new Error(`Can not find room invitation for id: ${e}`);return t}async roomInvitationRawPayloadParser(e){return e}async friendshipRawPayload(e){const t=await this._cacheMgr.getFriendshipRawPayload(e);if(!t)throw new Error(`Can not find friendship for id: ${e}`);return t}async friendshipRawPayloadParser(e){return e}async _onPushContact(e,t){if(g.log.silly(A,`on push contact: ${JSON.stringify(e.toObject())}`),await this._updateContactCache(e.toObject(),t),e.getEncryptusername()){const t=await this._cacheMgr.getContactStrangerAlias(e.getEncryptusername());t&&(await this.contactAlias(e.getUsername(),t),await this._cacheMgr.deleteContactStrangerAlias(e.getEncryptusername()))}}async _onPushMessage(e){const t=e.getId();if(g.log.silly(A,`on push original message: ${JSON.stringify("")}`),await this._cacheMgr.hasMessage(t))return;const a=e.toObject();await this._cacheMgr.setMessage(e.getId(),a);const s=await R.parseEvent(this,a);switch(s.type){case R.EventType.Message:this.emit("message",{messageId:t});break;case R.EventType.Friendship:{const friendship=s.payload;await this._cacheMgr.setFriendshipRawPayload(t,friendship),this.emit("friendship",{friendshipId:t});break}case R.EventType.RoomInvite:{const e=s.payload;await this._cacheMgr.setRoomInvitation(t,e),this.emit("room-invite",{roomInvitationId:t});break}case R.EventType.RoomJoin:{const e=s.payload;this.emit("room-join",e),await this._updateRoomMember(e.roomId);break}case R.EventType.RoomLeave:{const e=s.payload;this.emit("room-leave",e),await this._updateRoomMember(e.roomId);break}case R.EventType.RoomTopic:{const e=s.payload;this.emit("room-topic",e);break}}}async _updateContactCache(e,t){if(!e.username)return g.log.warn(A,`username is required for contact: ${JSON.stringify(e)}`),void 0;if(y.isRoomId(e.username)){const a=await this._cacheMgr.getRoom(e.username);if(a&&!t&&(e.avatar||(e.avatar=a.avatar),e.chatroommemberList.length<a.chatroommemberList.length&&Math.abs(a.chatroommemberList.length-e.chatroommemberList.length)<3)){const t=new Set(e.chatroommemberList.map((e=>e.username))),s=a.chatroommemberList.filter((e=>!t.has(e.username))).map((e=>e.username)).filter((t=>!w.isRoomLeaveDebouncing(e.username,t)));s.length&&s.forEach((t=>{const a={removeeIdList:[t],removerId:t,roomId:e.username,timestamp:Math.floor(Date.now()/1e3)};this.emit("room-leave",a)}))}const s=e.username;await this._cacheMgr.setRoom(s,e),await this.dirtyPayload($.types.Payload.Room,s),await this._updateRoomMember(s)}else await this._cacheMgr.setContact(e.username,e),await this.dirtyPayload($.types.Payload.Contact,e.username)}async _updateRoomMember(e,t){t?await this._cacheMgr.setRoomMember(e,t):await this._cacheMgr.deleteRoomMember(e),await this.dirtyPayload($.types.Payload.RoomMember,e)}async _refreshContact(e,t){const a=await this._client.api.getContact(e,t);return a.getUsername()||a.setUsername(e),await this._updateContactCache(a.toObject()),a}async _getMessageImageFileBox(e,t,a){if((await this.messageRawPayloadParser(t)).type!==$.types.Message.Image)throw new Error(`message ${e} is not image type message`);if(a===$.types.Image.Thumbnail&&t.binarypayload&&t.binarypayload.length){const a=Buffer.from(t.binarypayload);return m.FileBox.fromBuffer(a,`message-${e}-image-thumb.jpg`)}let s;s=a===$.types.Image.Thumbnail?i.ImageType.THUMB:(a===$.types.Image.HD,i.ImageType.HD);try{const a=await this._client.api.getMessageImage(t.content,t.tousername,s);let n;return n=a.imageType===i.ImageType.THUMB?"thumb":a.imageType===i.ImageType.HD?"hd":"normal",a.imageData?m.FileBox.fromBase64(a.imageData,`message-${e}-image-${n}.jpg`):m.FileBox.fromBuffer(Buffer.from(new ArrayBuffer(0)),`message-${e}-image-${(new Date).getTime()}.jpg`)}catch(t){return m.FileBox.fromBuffer(Buffer.from(new ArrayBuffer(0)),`message-${e}-image-${(new Date).getTime()}.jpg`)}}async _onSendMessage(e,t,a){e.setId(t),e.setCreatetime(a.getCreatetime()),await this._cacheMgr.setMessage(t,e.toObject()),await this._cacheMgr.setMessageRevokeInfo(t,a.toObject()),setImmediate((()=>{this.emit("message",{messageId:t})}))}async _findTagWithName(e,t){let a=(await this._getTagList()).labelList,s=a.find((t=>t.getName()===e));if(s||(a=(await this._getTagList(!0)).labelList,s=a.find((t=>t.getName()===e))),!s&&t){const t=await this._client.api.addLabel(e);s=(new v.Label).setId(t).setName(e),await this._getTagList(!0)}return s||null}async _getTagList(e){let t=this._cacheMgr.getLabelList(),a=!0;return t&&!e||(t=await this._client.api.getLabelList(),this._cacheMgr?.setLabelList(t),a=!1),{fromCache:a,labelList:t}}async _getRoomMemberList(e,t){if(!this._cacheMgr)return{};let a=await this._cacheMgr.getRoomMember(e);if(!a||t){const t=await this._client.api.getChatRoomMembers(e),s={};for(const e of t){const t=room.chatRoomMemberToContact(e);await this._cacheMgr.hasContact(t.getUsername())||await this._cacheMgr.setContact(t.getUsername(),t.toObject()),s[e.getUsername()]=e.toObject()}a=s,await this._updateRoomMember(e,s)}return a}async _startClient(){u.addRunningPuppet(this),await this._setupClient();const e={[$.types.ScanStatus.Unknown]:"Unknown",[$.types.ScanStatus.Cancel]:"Cancel",[$.types.ScanStatus.Waiting]:"Waiting",[$.types.ScanStatus.Scanned]:"Scanned",[$.types.ScanStatus.Confirmed]:"Confirmed",[$.types.ScanStatus.Timeout]:"Timeout"},t=async t=>{let a,s=$.types.ScanStatus.Unknown;switch(t.status){case 1:a=t.imageUrl,s=$.types.ScanStatus.Waiting;break;case 2:s=$.types.ScanStatus.Scanned;break;case 3:s=$.types.ScanStatus.Confirmed;break;case 4:s=$.types.ScanStatus.Cancel;break;case 5:s=$.types.ScanStatus.Timeout}g.log.silly(A,`scan event, status: ${e[s]}${a?", with qrcode: "+a:""}`),this.emit("scan",{qrcode:a,status:s})};this._client.api.login("",{onLoginStart:e=>{g.log.info(A,"start login with type")},onLoginSuccess:async e=>{this.wrapAsync(this._onPushSerialExecutor.execute((async()=>{const e=this._client.selfContact.getUsername();g.log.silly(A,`login success: ${e}`),await this.login(this._client.selfContact.getUsername()),g.log.silly(A,"login success: DONE")})))},onOneClickEvent:t,onQrCodeEvent:t,onSync:async e=>{this.wrapAsync(this._onPushSerialExecutor.execute((async()=>{for(const t of e.getContactList())await this._onPushContact(t,!0);for(const t of e.getMessageList());})))}}).then((()=>(this.wrapAsync(this._onPushSerialExecutor.execute((async()=>{g.log.silly(A,"on ready"),this.emit("ready",{data:"ready"})}))),null))).catch((async error=>{g.log.error(`start client failed: ${error.stack}`)}))}async _setupClient(){this._client=new a.LocalClient(this.options),this._client.on("kickout",this.wrapAsync((async()=>{this.currentUserId&&this.emit("logout",{contactId:this.currentUserId,data:"退出登录"}),this.__currentUserId=void 0}))),this._client.on("message",(async e=>{await this._onPushSerialExecutor.execute((async()=>{for(const t of e)await this._onPushMessage(t)}))})),this._client.on("contact",this.wrapAsync((async e=>{await this._onPushSerialExecutor.execute((async()=>{for(const t of e)await this._onPushContact(t)}))}))),this._printVersion&&(this._printVersion=!1,g.log.info(`\n ============================================================\n Welcome to Wechaty Padplus puppet plus!\n - puppet-Padplus version: ${VERSION}\n ============================================================\n `))}}exports.PuppetPlus=PuppetPlus,exports.default=PuppetPlus;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("fs-extra"),o=require("os"),a=require("path"),t=require("wechaty-puppet"),s=require("flash-store"),r=e=>e&&e.__esModule?e:{default:e},h=r(e),c=r(o),i=r(a),l="[CacheManager]";exports.CacheManager=class{_userName;_tokenCache;_roomCache;_roomMemberCache;constructor(e){this._userName=e}async init(){if(this._roomCache)throw new Error("already initialized");const e=i.default.join(c.default.homedir(),i.default.sep,".wechaty","server-cache",i.default.sep,this._userName,i.default.sep);await h.default.pathExists(e)||await h.default.mkdirp(e),this._tokenCache=new s.FlashStore(i.default.join(e,"uuid")),this._roomCache=new s.FlashStore(i.default.join(e,"room-raw-payload")),this._roomMemberCache=new s.FlashStore(i.default.join(e,"room-member-raw-payload"))}async close(){t.log.silly(l,"close()"),this._roomMemberCache&&this._roomCache&&this._tokenCache?(t.log.silly(l,"close() closing caches ..."),await Promise.all([this._roomMemberCache.close(),this._roomCache.close(),this._tokenCache.close()]),this._roomMemberCache=void 0,this._roomCache=void 0,this._tokenCache=void 0,t.log.silly(l,"close() cache closed.")):t.log.silly(l,"close() cache not exist.")}async getRoom(e){return this._roomCache.get(e)}async setRoom(e,o){await this._roomCache.set(e,o)}async deleteRoom(e){await this._roomCache.delete(e)}async getRoomIds(){const e=[];for await(const o of this._roomCache.keys())e.push(o);return e}async getRoomCount(){return this._roomCache.size}async hasRoom(e){return this._roomCache.has(e)}async getRoomMember(e){return this._roomMemberCache.get(e)}async setRoomMember(e,o){await this._roomMemberCache.set(e,o)}async deleteRoomMember(e){await this._roomMemberCache.delete(e)}async getUUID(e){return await this._tokenCache.get(e)}async setUUID(e,o){await this._tokenCache.set(e,o)}async deleteToken(e){await this._tokenCache.delete(e)}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("events"),t=require("./service/api/index3.cjs");class LocalClient extends e.EventEmitter{selfContact;token;proxy;arr;api;constructor(e){super(),this.token=e.token,this.proxy=e.proxy,this.api=new t.Api(this)}emit(e,...t){return super.emit(e,...t)}}exports.LocalClient=LocalClient;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.AppMessageLink=class{title="";description="";url="";thumbImage="";thumbURL="";getTitle(){return this.title}setTitle(t){return this.title=t,this}getDescription(){return this.description}setDescription(t){return this.description=t,this}getUrl(){return this.url}setUrl(t){return this.url=t,this}getThumbImage_asU8(){return"string"==typeof this.thumbImage?this.decodeBase64(this.thumbImage):this.thumbImage}getThumbImage_asB64(){const t="string"==typeof this.thumbImage?this.decodeBase64(this.thumbImage):this.thumbImage;return this.encodeBase64(t)}setThumbImage(t){return this.thumbImage=t,this}getThumburl(){return this.thumbURL}setThumburl(t){return this.thumbURL=t,this}decodeBase64(t){return Uint8Array.from(atob(t),(t=>t.charCodeAt(0)))}encodeBase64(t){return btoa(String.fromCharCode.apply(null,t))}toObject(){return{title:this.title,description:this.description,url:this.url,thumbImage:this.thumbImage instanceof Uint8Array?this.getThumbImage_asB64():this.thumbImage,thumbURL:this.thumbURL}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.Label=class{_name="";_id=0;getName(){return this._name}setName(t){return this._name=t,this}getId(){return this._id}setId(t){return this._id=t,this}toObject(t=!1){const e={name:this._name,id:this._id};return t?{...e}:e}static toObject(t,e){return e.toObject(t)}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.ChatRoomMember=class{_username="";_nickname="";_displayname="";_avatar="";_inviterusername="";getUsername(){return this._username}setUsername(e){return this._username=e,this}getNickname(){return this._nickname}setNickname(e){return this._nickname=e,this}getDisplayname(){return this._displayname}setDisplayname(e){return this._displayname=e,this}getAvatar(){return this._avatar}setAvatar(e){return this._avatar=e,this}getInviterusername(){return this._inviterusername}setInviterusername(e){return this._inviterusername=e,this}toObject(){return{username:this._username,nickname:this._nickname,displayname:this._displayname,avatar:this._avatar,inviterusername:this._inviterusername}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class Contact{username="";nickname="";avatar="";gender=0;signature="";alias="";label="";remark="";city="";province="";country="";contactaddscene=0;antispamticket="";stranger=!1;encryptusername="";phoneList=[];chatroomownerusername="";chatroommaxcount=0;chatroommemberList=[];constructor({username:t="",nickname:e="",avatar:r="",gender:s=0,signature:n="",alias:a="",label:i="",remark:h="",city:o="",province:c="",country:m="",contactaddscene:u=0,stranger:g=!1,encryptusername:p="",antispamticket:d="",phoneList:l=[],chatroomownerusername:y="",chatroommaxcount:b=0,chatroommemberList:L=[]}={}){this.username=t,this.nickname=e,this.avatar=r,this.gender=s,this.signature=n,this.alias=a,this.label=i,this.remark=h,this.city=o,this.province=c,this.country=m,this.contactaddscene=u,this.stranger=g,this.antispamticket=d,this.encryptusername=p,this.phoneList=l,this.chatroomownerusername=y,this.chatroommaxcount=b,this.chatroommemberList=L}getUsername(){return this.username}setUsername(t){return this.username=t,this}getNickname(){return this.nickname}setNickname(t){return this.nickname=t,this}getAvatar(){return this.avatar}setAvatar(t){return this.avatar=t,this}getGender(){return this.gender}setGender(t){return this.gender=t,this}getSignature(){return this.signature}setSignature(t){return this.signature=t,this}getAlias(){return this.alias}setAlias(t){return this.alias=t,this}getLabel(){return this.label}setLabel(t){return this.label=t,this}getRemark(){return this.remark}setRemark(t){return this.remark=t,this}getCity(){return this.city}setCity(t){return this.city=t,this}getProvince(){return this.province}setProvince(t){return this.province=t,this}getCountry(){return this.country}setCountry(t){return this.country=t,this}getContactaddscene(){return this.contactaddscene}setContactaddscene(t){return this.contactaddscene=t,this}getStranger(){return this.stranger}setStranger(t){return this.stranger=t,this}getEncryptusername(){return this.encryptusername}setEncryptusername(t){return this.encryptusername=t,this}getAntispamticket(){return this.antispamticket}setAntispamticket(t){return this.antispamticket=t,this}clearPhoneList(){this.phoneList=[]}getPhoneList(){return this.phoneList}setPhoneList(t){return this.phoneList=t,this}addPhone(t,e){return void 0!==e?this.phoneList.splice(e,0,t):this.phoneList.push(t),t}getChatroomownerusername(){return this.chatroomownerusername}setChatroomownerusername(t){return this.chatroomownerusername=t,this}getChatroommaxcount(){return this.chatroommaxcount}setChatroommaxcount(t){return this.chatroommaxcount=t,this}clearChatroommemberList(){this.chatroommemberList=[]}getChatroommemberList(){return this.chatroommemberList}setChatroommemberList(t){return this.chatroommemberList=t,this}addChatroommember(t,e){return t&&(void 0!==e?this.chatroommemberList.splice(e,0,t):this.chatroommemberList.push(t)),t}serializeBinary(){return new Uint8Array}toObject(t=!1){return{username:this.username,nickname:this.nickname,avatar:this.avatar,gender:this.gender,signature:this.signature,alias:this.alias,label:this.label,remark:this.remark,city:this.city,province:this.province,country:this.country,contactaddscene:this.contactaddscene,stranger:this.stranger,encryptusername:this.encryptusername,phoneList:this.phoneList,chatroomownerusername:this.chatroomownerusername,chatroommaxcount:this.chatroommaxcount,chatroommemberList:this.chatroommemberList.map((e=>e.toObject(t)))}}static toObject(t,e){return e.toObject(t)}static serializeBinaryToWriter(message,t){}static deserializeBinary(t){return new Contact}static deserializeBinaryFromReader(message,t){return new Contact}}exports.Contact=Contact;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),require("cuid"),exports.ImageType=void 0,(e=exports.ImageType||(exports.ImageType={}))[e.HD=2]="HD",e[e.THUMB=3]="THUMB";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=(t=>t&&t.__esModule?t:{default:t})(require("cuid"));class Message{_id;_type;_createtime;_fromusername;_tousername;_content;_atList;_pushcontent;_binarypayload;constructor({id:e=t.default(),type:s=0,createtime:r=0,fromusername:i="",tousername:n="",content:a="",atList:o=[],pushcontent:h="",binarypayload:u=""}={}){this._id=e,this._type=s,this._createtime=r,this._fromusername=i,this._tousername=n,this._content=a,this._atList=o,this._pushcontent=h,this._binarypayload=u}getId(){return this._id}setId(t){return this._id=t,this}getType(){return this._type}setType(t){return this._type=t,this}getCreatetime(){return this._createtime}setCreatetime(t){return this._createtime=t,this}getFromusername(){return this._fromusername}setFromusername(t){return this._fromusername=t,this}getTousername(){return this._tousername}setTousername(t){return this._tousername=t,this}getContent(){return this._content}setContent(t){return this._content=t,this}getPushcontent(){return this._pushcontent}setPushcontent(t){return this._pushcontent=t,this}getBinarypayload(){return this._binarypayload}getBinarypayload_asU8(){return"string"==typeof this._binarypayload?Uint8Array.from(atob(this._binarypayload),(t=>t.charCodeAt(0))):this._binarypayload}setBinarypayload(t){return this._binarypayload=t,this}clearAtList(){this._atList=[]}getAtList(){return this._atList}setAtList(t){return this._atList=t,this}addAt(t,e){return void 0!==e?this._atList.splice(e,0,t):this._atList.push(t),t}serializeBinary(){return new Uint8Array}static deserializeBinary(t){return new Message}serializeBinaryToWriter(t){}static deserializeBinaryFromReader(message,t){return message}toObject(t=!1){return{id:this._id,type:this._type,createtime:this._createtime,fromusername:this._fromusername,tousername:this._tousername,content:this._content,pushcontent:this._pushcontent,binarypayload:this._binarypayload,atList:this._atList}}static extensions={};static extensionsBinary={}}exports.Message=Message;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class MessageRevokeInfo{_clientmsgid="";_newclientmsgid="";_createtime=0;getClientmsgid(){return this._clientmsgid}setClientmsgid(e){return this._clientmsgid=e,this}getNewclientmsgid(){return this._newclientmsgid}setNewclientmsgid(e){return this._newclientmsgid=e,this}getCreatetime(){return this._createtime}setCreatetime(e){return this._createtime=e,this}toObject(e){return{clientmsgid:this._clientmsgid,newclientmsgid:this._newclientmsgid,createtime:this._createtime}}}class Response{_msgid="";_messagerevokeinfo;getMsgid(){return this._msgid}setMsgid(e){return this._msgid=e,this}hasMessagerevokeinfo(){return void 0!==this._messagerevokeinfo}clearMessagerevokeinfo(){this._messagerevokeinfo=void 0}getMessagerevokeinfo(){return this._messagerevokeinfo}setMessagerevokeinfo(e){return this._messagerevokeinfo=(new MessageRevokeInfo).setClientmsgid(e.clientmsgid).setNewclientmsgid(e.newclientmsgid).setCreatetime(e.createtime),this}serializeBinary(){throw new Error("Method not implemented.")}toObject(e){return{msgid:this._msgid,messagerevokeinfo:this._messagerevokeinfo}}}exports.MessageRevokeInfo=MessageRevokeInfo,exports.Response=Response,exports.SendAppMessageResponse=class extends Response{_msgcontent="";constructor(){super()}getMsgcontent(){return this._msgcontent}setMsgcontent(e){return this._msgcontent=e,this}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../index.cjs");require("url");const t=require("cuid");require("path"),require("fs-extra"),require("os"),require("wechaty-puppet"),require("flash-store");const a=require("../utils/polling.cjs");require("../../map/index.cjs");const s=require("../../cache-manager.cjs"),i=require("../../utils/xml-to-json.cjs"),n=require("../config/index.cjs"),message=require("../../map/message.cjs"),o=require("../../map/response.cjs"),r=require("../../map/RoomMemberList.cjs"),contact=require("../../map/contact.cjs"),d=require("../../map/Label.cjs"),c=(e=>e&&e.__esModule?e:{default:e})(t);var l,m;(m=l||(l={}))[m.THUMB=0]="THUMB",m[m.NORMAL=1]="NORMAL",void(m[m.HD=2]="HD"),exports.Api=class{_cacheMgr;_client;token;uuid;wxid;callback;poll_message_timer;constructor(e){this._client=e}async init(){this._cacheMgr=new s.CacheManager(this.token),await this._cacheMgr.init()}async login(e,t){this.callback=t;let a=this._client.token.split("puppet_padplus_")[1];this.token=a,await this.init();const s=await this._cacheMgr.getUUID(a);this.uuid=s?.uuid,this.wxid=s?.wxid,s?.wxid?this.getSecondLogin():await this.getLoginCodeByFirst()}async requestLoginQRCode(){return await this.getLoginCodeByFirst(),this.uuid?`http://weixin.qq.com/x/${this.uuid}`:void 0}getLoginCodeByFirst=async()=>{try{let e=this.callback,t=await this.getLoginCodeNew(this.token);if(1==t.Code){this.uuid=t.Data.Uuid,e.onOneClickEvent({status:1,imageUrl:`http://weixin.qq.com/x/${t.Data.Uuid}`});const s=new a.Polling;let i=null;s.poll(2e3,(async()=>{let a=await this.checkLoginStatus();if(i||(i=setTimeout((async()=>{s.stop(),e.onQrCodeEvent({status:5})}),1e3*a.Data.expiredTime)),0==a.Code){if(1==a.Data.states&&e.onQrCodeEvent({status:2}),4==a.Data.states&&e.onQrCodeEvent({status:4}),"登录成功"==a.Message){s.stop(),i&&(clearTimeout(i),i=null),e.onQrCodeEvent({status:3}),this._cacheMgr.setUUID(this.token,{uuid:t.Data.Uuid,wxid:a.Data.acctSectResp.userName}),this.wxid=a.Data.acctSectResp.userName;try{let{messageList:t,contactList:a}=await this.getInitMessage();this._client.selfContact=await this.getMyContact(this.wxid),await e.onLoginSuccess(this._client.selfContact),await e.onSync({getContactList:()=>a,getMessageList:()=>t}),this.poll_change_contact(3e3),this.poll_message(),this.poll_heart()}catch(e){}}}else-8==a.Code}))}}catch(e){}};async getSecondLogin(){try{await this.heart();let{messageList:e,contactList:t}=await this.getInitMessage();this._client.selfContact=await this.getMyContact(this.wxid),await this.callback.onLoginSuccess(this._client.selfContact),await this.callback.onSync({getContactList:()=>t,getMessageList:()=>e}),this.poll_message(),this.poll_change_contact(3e3),this.poll_heart()}catch(e){await this.getLoginCodeByFirst()}}poll_message(){const e=new a.Polling;this.poll_message_timer=e,e.poll(1e3,(async()=>{const{messageList:e,contactList:t}=await this.getMessage();e.length>0&&this._client.emit("message",e),t.length>0&&this._client.emit("contact",t)}))}async getLoginCodeNew(t=""){return e.SyyyRequest.post({url:"/Login/LoginGetQR",data:{DeviceID:t,DeviceName:n.DeviceName,Proxy:{ProxyIp:"string",ProxyPassword:"string",ProxyUser:"string"}}})}async checkLoginStatus(){return e.SyyyRequest.post({url:`/Login/LoginCheckQR?uuid=${this.uuid}`,data:{}})}poll_heart(){(new a.Polling).poll(15e4,(async()=>{try{await this.heart()}catch(e){this.poll_message_timer.stop(),await(this._cacheMgr?.close()),this._cacheMgr=void 0,this._client.emit("kickout","")}}))}async heart(t=20){let a=0;for(;a<t;){try{let t=await e.SyyyRequest.post({url:`/Login/HeartBeat?wxid=${this.wxid}`});if("成功"===t.Message||!t)return t}catch(e){}a++}throw new Error("HeartBeat failed after multiple attempts")}poll_change_contact=async e=>{for(;;){try{const e=await(this._cacheMgr?.getRoomIds());if(!e)return;for(const t of e)try{const e=await this.getChatRoomContact(t),a=await(this._cacheMgr?.getRoomMember(t));if(a&&e.getChatroommemberList().length>0){const s=a,i=e.toObject().chatroommemberList;(s.length!==i.length&&Math.abs(s.length-i.length)<3||JSON.stringify(s)!=JSON.stringify(i))&&(this._cacheMgr?.setRoomMember(t,e.toObject().chatroommemberList),console.log("contactcontact",e),this._client.emit("contact",[e]))}else 0!==e.getChatroommemberList().length&&this._cacheMgr?.setRoomMember(t,e.toObject().chatroommemberList)}catch(e){}}catch(e){}await new Promise((t=>setTimeout(t,e)))}};async getInitMessage(){let e=this,t=[],a=[];return await async function s(){let{messageList:i,contactList:n}=await e.getMessage(!0);t.push(...i),a.push(...n),i&&0==i.length&&0==n.length||await s()}(),{messageList:t,contactList:a}}async getMessage(t){let a=await e.SyyyRequest.post({url:"/Msg/Sync",data:{Scene:0,Synckey:"string",Wxid:this.wxid}}),s=[];if(0==a.Code&&a.Data.AddMsgs&&a.Data.AddMsgs.length>0){let e=a.Data.AddMsgs;for(const t of e){let e=(new message.Message).setFromusername(t.FromUserName.string).setTousername(t.ToUserName.string).setId(t.MsgId).setType(t.MsgType).setCreatetime(t.CreateTime);const a=/@chatroom$/.test(t.FromUserName.string),n=/@chatroom$/.test(t.ToUserName.string);let o=[];(a||n)&&(this._cacheMgr?.setRoom(t.FromUserName.string||t.ToUserName.string,!0),o=((await i.xmlToJson(t.MsgSource)).msgsource?.atuserlist?(await i.xmlToJson(t.MsgSource)).msgsource.atuserlist.split(","):[]).filter((e=>""!==e))),e.setContent(t.Content.string).setAtList(o),s.push(e)}}return{messageList:s,contactList:[]}}async send_text(t,a,s=""){return await e.SyyyRequest.post({url:"/Msg/SendTxt",data:{At:s?.join?.(","),Content:a,ToWxid:t,Type:0,Wxid:this.wxid}}),(new o.Response).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()})}async sendImageMessage(t,a,s){return await e.SyyyRequest.post({url:"/Msg/UploadImg",data:{Base64:a,ToWxid:t,Wxid:this.wxid}}),(new o.Response).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()})}async sendVideoMessage(t,a,s){return await e.SyyyRequest.post({url:"/Msg/SendVideo",data:{Base64:a,ImageBase64:`data:image/png;base64,${s}`,PlayLength:0,ToWxid:t,Wxid:this.wxid}}),(new o.Response).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()})}async sendFileMessage(t){return await e.SyyyRequest.post({url:"/Tools/UploadFile",data:{Base64:t,Wxid:this.wxid}}),(new o.Response).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()})}async sendMessageEmoji(t,a,s){return await e.SyyyRequest.post({url:"/Msg/SendEmoji",data:{Md5:a,ToWxid:t,TotalLen:s,Wxid:this.wxid}}),(new o.Response).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()})}async sendMessageLink(t,a,s){let n={appmsg:{$:{appid:"",sdkver:"0"},title:s.title,des:s.description,action:"view",type:"5",showtype:"0",content:"",url:s.url,dataurl:"",lowurl:"",lowdataurl:"",recorditem:"",thumburl:s.thumbURL,messageaction:"",laninfo:"",extinfo:"",sourceusername:"",sourcedisplayname:"",commenturl:"",appattach:{totallen:"0",attachid:"",emoticonmd5:"",fileext:"",aeskey:"",cdnthumburl:"3057020100044b30490201000204cfb2499202032f58b702047366327002046690b731042437376632396432322d386664622d346332352d383735332d3066623162666164313539320204051808030201000405004c4d3700",cdnthumbaeskey:"801f4f18eb05147db6b1a5c0085ef945",cdnthumbmd5:"661e8de94322838210632126fde5094b",cdnthumblength:"10300",cdnthumbwidth:"100",cdnthumbheight:"100"},webviewshared:{publisherId:"msg_8252690270823229747",publisherReqId:"106112608"},weappinfo:{pagepath:"",username:"",appid:"",appservicetype:"0"},websearch:""}},r=await i.jsonToXml(n),d=await i.jsonToXml({msg:n});return await e.SyyyRequest.post({url:"/Msg/SendApp",data:{ToWxid:a,Type:0,Wxid:this.wxid,Xml:r}}),(new o.SendAppMessageResponse).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()}).setMsgcontent(d)}async sendMessageMiniProgram(t,a){const{appid:s,description:n,iconUrl:r,shareId:d,thumbKey:l,thumbUrl:m,username:u,title:g,pagePath:y}=a;let h={appmsg:{appid:s,title:g,action:"view",type:"33",showtype:"0",url:`https://mp.weixin.qq.com/mp/waerrpage?appid=${s}&type=upgrade&upgradetype=3#wechat_redirect`,md5:"45aa6d4173817719325046cd881fa92d",sourcedisplayname:n,appattach:{totallen:"0",fileext:"jpg",filekey:"dbb0e647bd45df3d1bd83d22d51b8073",cdnthumburl:m,aeskey:"5efa5257be70f5fd634676f997e79129",cdnthumbaeskey:l,cdnthumbmd5:"45aa6d4173817719325046cd881fa92d",encryver:"1",cdnthumblength:"65264",cdnthumbheight:"100",cdnthumbwidth:"100"},webviewshared:{publisherReqId:"0"},weappinfo:{pagepath:y,username:u,appid:s,type:"2",weappiconurl:r,appservicetype:"0",shareId:d}}},p=await i.jsonToXml(h),w=await i.jsonToXml({msg:h});return await e.SyyyRequest.post({url:"/Msg/SendApp",data:{ToWxid:t,Type:0,Wxid:this.wxid,Xml:p}}),(new o.SendAppMessageResponse).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()}).setMsgcontent(w)}async forwardMessage(t,a){let s=await i.xmlToJson(a),n=await i.jsonToXml({appmsg:s.msg.appmsg});return await e.SyyyRequest.post({url:"/Msg/SendApp",data:{ToWxid:t,Type:0,Wxid:this.wxid,Xml:n}}),(new o.SendAppMessageResponse).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()}).setMsgcontent(a)}async forwardMessagewenjian(t,a){let s=await i.jsonToXml({msg:{appmsg:{sdkver:"0",title:"新建文本文档 (2).txt",des:"184 B",type:"6",action:"view",appattach:{totallen:"184",fileext:"txt",attachid:"@cdn_3057020100044b30490201000204cfb2499202032f591b02041424e978020466a8b32c042437363061356463352d636435372d346339652d626332322d3430343032396633633637640204051400050201000405004c505700_4dfcfca645d1f21482a9c9eea8140f3e_1",cdnattachurl:"3057020100044b30490201000204cfb2499202032f591b02041424e978020466a8b32c042437363061356463352d636435372d346339652d626332322d3430343032396633633637640204051400050201000405004c505700",aeskey:"4dfcfca645d1f21482a9c9eea8140f3e",encryver:"0",filekey:"wxid_yqw0irrcmoyd12_2764_1722331948",overwrite_newmsgid:"7009346818105138159",fileuploadtoken:"v1_7wKTlnLUYDj/Zspdynmg7opHS3F+nLFWQcFHcnJvZNQCfoFxVMjJr8zu/79izHT2VeBP+4382v9Q7GPuzYCdPvwClLTDHZQ6RggFOpF8kP4x5b2kETRF9bURmKeTyO6vidAQMyHYijyPxmdi+GjkJzr34qhhdGbsFkl8KMIjVgk1sYTPsOjpV/n9TRfEIr056iMnfISvqpWoFoEo8SkgbwX5oZTgfkeB"},md5:"cc2100250f9da1c45beed68d867756bb",webviewshared:{},mpsharetrace:{hasfinderelement:"0"},secretmsg:{isscrectmsg:"0"}},fromusername:"wxid_kxbss8yjkqx122",scene:"1",appinfo:{version:"1"}}});return await e.SyyyRequest.post({url:"/Msg/SendCDNFile",data:{Content:s,ToWxid:t,Wxid:this.wxid}}),(new o.SendAppMessageResponse).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()}).setMsgcontent(a)}async sendVoiceMessage(t,a,s){return await e.SyyyRequest.post({url:"/Msg/SendVoice",data:{Base64:a,ToWxid:t,Type:4,VoiceTime:1,Wxid:this.wxid}}),(new o.Response).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()})}async getAllChatRoomMembers(){let t=await e.SyyyRequest.post({url:"/",data:{type:10114}}),a=[];for(const e of t.data.data.chatrooms){let t=[];for(const a in e.chatroomMembers)t.push((new r.ChatRoomMember).setUsername(e.chatroomMembers[a].userName).setAvatar(e.chatroomMembers[a].smallHeadImgUrl).setNickname(e.chatroomMembers[a].nickName).setInviterusername(e.chatroomMembers[a].inviterUserName).setDisplayname(e.chatroomMembers[a]?.chatroomNickName));const s=(new contact.Contact).setUsername(e.userName).setNickname(e.nickName).setAvatar(e.smallHeadImgUrl).setGender(0).setSignature("").setRemark(e.remark).setChatroommaxcount(e.chatroomMaxCount).setChatroommemberList(t).setChatroomownerusername(e.ownerUserName);a.push(s)}return a}async getChatRoomMembers(t){let a=await e.SyyyRequest.post({url:"/Group/GetChatRoomMemberDetail",data:{QID:t,Wxid:this.wxid}}),s=[];if(a.Data?.NewChatroomData.ChatRoomMember)for(const e of a.Data.NewChatroomData.ChatRoomMember)s.push((new r.ChatRoomMember).setUsername(e.UserName).setAvatar(e.SmallHeadImgUrl).setNickname(e.NickName).setDisplayname(e?.DisplayName||""));return s}async getContact(e,t){let a;return a=/@chatroom$/.test(e)?await this.getChatRoomContact(e):e==this._client.selfContact.getUsername()?this._client.selfContact:await this.getChatContact(e),a}async updateSelfNickName(t){return new Promise((async(a,s)=>{try{a(await e.SyyyRequest.post({url:"/User/UpdateProfile",data:{NickName:t,Wxid:this.wxid}}))}catch(e){s(e)}}))}async updateSelfSignature(t){return new Promise((async(a,s)=>{try{a(await e.SyyyRequest.post({url:"/User/UpdateProfile",data:{Signature:t,Wxid:this.wxid}}))}catch(e){s(e)}}))}async getContactQRCode(t,a){return new Promise((async(t,s)=>{try{t(await e.SyyyRequest.post({url:"/User/GetQRCode",data:{Style:a,Wxid:this.wxid}}))}catch(e){s(e)}}))}async updateContactRemark(t,a){await e.SyyyRequest.post({url:"/Friend/SetRemarks",data:{Remarks:a,ToWxid:t,Wxid:this.wxid}})}async GetFriendRelation(t){return await e.SyyyRequest.post({url:"/Friend/GetFriendRelation",data:{UserName:t,Wxid:this.wxid}})}async addContact(t,a,s){await e.SyyyRequest.post({url:"/Friend/SendRequest",data:{Scene:0,V1:t,V2:a,VerifyContent:s,Wxid:this.wxid}})}async deleteContact(t){await e.SyyyRequest.post({url:"/Friend/Delete",data:{ToWxid:t,Wxid:this.wxid}})}async getChatContact(t){let a=(await e.SyyyRequest.post({url:"/Friend/GetContractDetail",data:{ChatRoom:"string",Towxids:t,Wxid:this.wxid}})).Data.ContactList[0];return(new contact.Contact).setUsername(a.UserName.string).setNickname(a.NickName.string).setAvatar(a.SmallHeadImgUrl).setGender(a.Sex).setSignature(a.Signature).setAntispamticket(a.AntispamTicket).setAlias(a.Alias)}async getMyContact(t){return new Promise((async(t,a)=>{try{let a=(await e.SyyyRequest.post({url:`/User/GetContractProfile?wxid=${this.wxid}`,data:{}})).Data;t((new contact.Contact).setUsername(a.userInfo.UserName.string).setNickname(a.userInfo.NickName.string).setAvatar(a.userInfoExt.SmallHeadImgUrl).setGender(a.userInfo.Sex).setSignature(a.userInfo.Signature).setAntispamticket(a.AntispamTicket||""))}catch(e){a(e)}}))}async getChatRoomContact(t){return new Promise((async(a,s)=>{let i=await e.SyyyRequest.post({url:"Group/GetChatRoomInfo",data:{QID:t,Wxid:this.wxid}});if(0==i.Code&&i.Data.ContactList){let e=i.Data.ContactList[0],s=await this.getChatRoomMembers(t);a((new contact.Contact).setUsername(e.UserName.string).setNickname(e.NickName.string).setAvatar(e.SmallHeadImgUrl).setGender(0).setSignature("").setRemark("").setChatroommaxcount(500).setChatroommemberList(s).setChatroomownerusername(e.ChatRoomOwner).setEncryptusername(e.EncryptUserName))}else s("数据出错")}))}async acceptChatRoomInvitation(t,a){return e.SyyyRequest.post({url:"/Group/ScanIntoGroup",data:{Url:a,Wxid:this.wxid}})}async quitChatRoom(t){return e.SyyyRequest.post({url:"/Group/Quit",data:{QID:t,Wxid:this.wxid}})}async getMessageImage(t,a,s){return new Promise((async(a,n)=>{try{let n=(await i.xmlToJson(t)).msg.img.$,o=await e.SyyyRequest.post({url:"/Tools/CdnDownloadImage",data:{FileAesKey:n.aeskey,FileNo:n.cdnmidimgurl,Wxid:this.wxid}});a({imageType:s,imageData:o.Data.Image})}catch(e){a(e)}}))}async getMessageVoice(t,a,s){let n=(await i.xmlToJson(a)).msg.voicemsg.$;return(await e.SyyyRequest.post({url:"/Tools/DownloadVoice",data:{Bufid:n.clientmsgid,FromUserName:s,Length:Number(n.length),MsgId:t,Wxid:this.wxid}})).Data.data.buffer}async getMessageVideo(t,a,s){let n=(await i.xmlToJson(a)).msg.videomsg.$;return(await e.SyyyRequest.post({url:"/Tools/DownloadVideo",data:{CompressType:0,DataLen:Number(n.length),MsgId:t,Section:{DataLen:Number(n.playlength),StartPos:0},ToWxid:s,Wxid:this.wxid}})).Data.data.buffer}async getMessageAttach(t,a){let s=await i.xmlToJson(t),n=s.msg.appmsg.appattach;return(await e.SyyyRequest.post({url:"/Tools/DownloadFile",data:{AppID:s.msg.appmsg.$.appid,AttachId:n.attachid,DataLen:Number(n.totallen),Section:{DataLen:0,StartPos:0},UserName:a,Wxid:this.wxid}})).Data.data.buffer}async getMessageMiniProgramThumb(t,a){let s=(await i.xmlToJson(t)).msg.appmsg.appattach;return(await e.SyyyRequest.post({url:"/Tools/CdnDownloadImage",data:{FileAesKey:s.aeskey,FileNo:s.cdnattachurl,Wxid:this.wxid}})).Data.Image}async getMessageAttachThumb(t,a){let s=(await i.xmlToJson(t)).msg.appmsg.appattach;return(await e.SyyyRequest.post({url:"/Tools/CdnDownloadImage",data:{FileAesKey:s.aeskey,FileNo:s.cdnthumburl,Wxid:this.wxid}})).Data.Image}async sendContactCardMessage(t,a){return await e.SyyyRequest.post({url:"/Msg/ShareCard",data:{ToWxid:t,CardWxId:a.getUsername(),CardNickName:a.getNickname(),CardAlias:a.getAlias(),Wxid:this.wxid}}),(new o.Response).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()})}async logout(){return await e.SyyyRequest.get({url:`/Login/LogOut?wxid=${this.wxid}`,data:{}}),(new o.Response).setMsgid(c.default()).setMessagerevokeinfo({clientmsgid:c.default(),newclientmsgid:c.default(),createtime:(new Date).getTime()})}async revokeMessage(t,a,s){return e.SyyyRequest.post({url:"/Msg/Revoke",data:{ClientMsgId:a,CreateTime:0,NewMsgId:s,ToUserName:t,Wxid:this.wxid}})}async createChatRoom(t,a){return(await e.SyyyRequest.post({url:"/Group/CreateChatRoom",data:{UserList:t,Wxid:this.wxid}})).Data.chatRoomName.string}async inviteChatroomMembers(t,a){await e.SyyyRequest.post({url:"/Group/AddChatRoomMember",data:{ChatRoomName:t,ToWxids:a,Wxid:this.wxid}})}async deleteChatRoomMember(t,a){await e.SyyyRequest.post({url:"/Group/DelChatRoomMember",data:{ChatRoomName:t,ToWxids:a,Wxid:this.wxid}})}async getChatRoomQrCode(t){return new Promise((async(a,s)=>{try{a(await e.SyyyRequest.post({url:"/Group/GetQRCode",data:{QID:t,Wxid:this.wxid}}))}catch(e){s(e)}}))}async setChatRoomName(t,a){await e.SyyyRequest.post({url:"/Group/SetChatRoomName",data:{Content:a,QID:t,Wxid:this.wxid}})}async getChatRoomAnnouncement(t){await e.SyyyRequest.post({url:"/Group/GetChatRoomInfoDetail",data:{QID:t,Wxid:this.wxid}})}async setChatRoomAnnouncement(t,a){await e.SyyyRequest.post({url:"/Group/SetChatRoomAnnouncement",data:{Content:a,QID:t,Wxid:this.wxid}})}async acceptUser(t,a,s,i){await e.SyyyRequest.post({url:"/Friend/PassVerify",data:{V1:s,V2:a,Wxid:this.wxid,Scene:i}})}async getLabelList(){return new Promise((async(t,a)=>{try{let a=await e.SyyyRequest.post({url:`/Label/GetList?wxid=${this.wxid}`,data:{}}),s=[];if(a.Data.labelPairList)for(const e of a.Data.labelPairList){let t=(new d.Label).setId(e.labelID).setName(e.labelName);s.push(t)}t(s)}catch(e){}}))}async addLabel(t){return await e.SyyyRequest.post({url:"/Label/Add",data:{LabelName:t,wxid:this.wxid}})}async removeLabel(t){return new Promise((async(a,s)=>{try{a(await e.SyyyRequest.post({url:"/Label/Delete",data:{LabelID:String(t),Wxid:this.wxid}}))}catch(e){}}))}async setContactLabel(t,a){return new Promise((async(s,i)=>{let n=a.filter((e=>!isNaN(e)));try{s(await e.SyyyRequest.post({url:"/Label/UpdateList",data:{LabelID:n.join(",")||"",ToWxids:t,wxid:this.wxid}}))}catch(e){}}))}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),(e=>e&&e.__esModule?e:{default:e})(require("dotenv")).default.config();const e=process.env.PUPPET_PADPLUS_BASE_URL,t=process.env.BASE_PORT,o=process.env.DEVICE_NAME||"my-device-name",s=`http://${e}:${t}/api`;exports.BASE_URL="http://localhost:9999/api",exports.BASE_URL_849="http://localhost:8848",exports.BASE_URL_857=s,exports.DeviceName=o,exports.TIME_OUT=3e4;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./request/index.cjs"),s=require("./config/index.cjs");new e.default({baseURL:s.BASE_URL,timeout:s.TIME_OUT,interceptors:{requestSuccessFn:e=>e,responseSuccessFn:e=>e}}),new e.default({baseURL:s.BASE_URL_849,timeout:s.TIME_OUT,interceptors:{requestSuccessFn:e=>e,responseSuccessFn:e=>e}});const t=new e.default({baseURL:s.BASE_URL_857,timeout:s.TIME_OUT,interceptors:{requestSuccessFn:e=>e,responseSuccessFn:e=>e}});exports.SyyyRequest=t;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e=>e&&e.__esModule?e:{default:e})(require("axios"));exports.default=class{instance;constructor(t){this.instance=e.default.create(t),this.instance.interceptors.request.use((e=>e),(e=>e)),this.instance.interceptors.response.use((e=>e.data),(e=>e)),this.instance.interceptors.request.use(t.interceptors?.requestSuccessFn,t.interceptors?.requestFailFn),this.instance.interceptors.response.use(t.interceptors?.responseSuccessFn,t.interceptors?.responseFailFn)}request(e){return e.interceptors?.requestSuccessFn&&(e=e.interceptors.requestSuccessFn(e)),new Promise(((t,s)=>{this.instance.request(e).then((s=>{e.interceptors?.responseSuccessFn&&(s=e.interceptors.responseSuccessFn(s)),t(s)})).catch((e=>{s(e)}))}))}get(e){return this.request({method:"GET",...e})}post(e){return this.request({method:"POST",...e})}patch(e){return this.request({method:"PATCH",...e})}delete(e){return this.request({method:"DELETE",...e})}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.Polling=class{isPolling;constructor(){this.isPolling=!0}async poll(o,i){for(;this.isPolling;){try{await i()}catch(o){console.error(o)}await new Promise((i=>setTimeout(i,o)))}}stop(){this.isPolling=!1}start(){this.isPolling=!0}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.PromiseCallback=class{_resolve;_reject;_timeoutId;constructor(t,e,i){this._resolve=t,this._reject=e,this._timeoutId=i}resolve(t){this._resolve(t),this._invalidateTimeout()}reject(error){this._reject(error),this._invalidateTimeout()}_invalidateTimeout(){void 0!==this._timeoutId&&(clearTimeout(this._timeoutId),this._timeoutId=void 0)}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./PromiseUtils.cjs");class SerialJob{type;func;promiseCallback;constructor(e,t,s){this.func=e,this.promiseCallback=t,this.type=s}}exports.SerialExecutor=class{_jobs;_executing;constructor(){this._jobs=[],this._executing=!1}execute(t,s){return new Promise(((i,c)=>{this._jobs.push(new SerialJob(t,new e.PromiseCallback(i,c),s)),this._executeNextJob()}))}clear(e){this._jobs=this._jobs.filter((t=>!!e&&t.type!==e))}_executeNextJob(){if(this._executing)return;const e=this._jobs.shift();e&&(this._executing=!0,e.func().then((t=>{e.promiseCallback.resolve(t)})).catch((t=>{e.promiseCallback.reject(t)})).finally((()=>{this._executing=!1,this._executeNextJob()})))}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e=>e&&e.__esModule?e:{default:e})(require("cuid"));exports.genIdempotentId=function(){return e.default().replace(/-/g,"")};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("xml2js"),n=require("wechaty-puppet");exports.jsonToXml=async function(n){return(new e.Builder).buildObject(n)},exports.xmlToJson=async function(r){const t=r.indexOf("<");return 0!==t&&(r=r.substring(t,r.length)),new Promise((t=>{e.parseString(r,{explicitArray:!1},((e,r)=>(e&&0!==Object.keys(e).length&&n.log.warn(JSON.stringify(e)),t(r))))}))};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import n from "node-cleanup";
|
|
2
|
+
|
|
3
|
+
const o = [];
|
|
4
|
+
|
|
5
|
+
function e(puppet) {
|
|
6
|
+
o.push(puppet);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function l(puppet) {
|
|
10
|
+
const n = o.indexOf(puppet);
|
|
11
|
+
-1 !== n && delete o[n];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
n(((e, l) => {
|
|
15
|
+
if (null !== e) {
|
|
16
|
+
return !0;
|
|
17
|
+
}
|
|
18
|
+
const s = o.slice();
|
|
19
|
+
return Promise.all(s.map((async puppet => {
|
|
20
|
+
await puppet.stop();
|
|
21
|
+
}))).finally((() => {
|
|
22
|
+
n.uninstall(), process.kill(process.pid, l);
|
|
23
|
+
})).catch(console.error), !1;
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
export { e as addRunningPuppet, l as removeRunningPuppet };
|