@alemonjs/qq-bot 2.1.33 → 2.1.34

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.
Files changed (131) hide show
  1. package/README.md +46 -8
  2. package/dist/assets/index.css +1 -1
  3. package/dist/assets/index.js +12 -5
  4. package/dist/index.html +1 -1
  5. package/lib/config.d.ts +44 -19
  6. package/lib/config.js +39 -35
  7. package/lib/desktop.d.ts +4 -1
  8. package/lib/desktop.js +53 -57
  9. package/lib/format.d.ts +26 -5
  10. package/lib/format.js +84 -101
  11. package/lib/hook.d.ts +82 -65
  12. package/lib/hook.js +35 -32
  13. package/lib/index.d.ts +6 -4
  14. package/lib/index.js +13 -16
  15. package/lib/index.webhook.d.ts +4 -1
  16. package/lib/index.webhook.js +12 -14
  17. package/lib/index.websoket.d.ts +6 -3
  18. package/lib/index.websoket.js +131 -41
  19. package/lib/message/AT_MESSAGE_CREATE.d.ts +36 -33
  20. package/lib/message/AT_MESSAGE_CREATE.js +1 -1
  21. package/lib/message/CHANNEL_CREATE.d.ts +17 -14
  22. package/lib/message/CHANNEL_CREATE.js +1 -1
  23. package/lib/message/CHANNEL_DELETE.d.ts +22 -14
  24. package/lib/message/CHANNEL_DELETE.js +1 -1
  25. package/lib/message/CHANNEL_UPDATE.d.ts +22 -14
  26. package/lib/message/CHANNEL_UPDATE.js +1 -1
  27. package/lib/message/DIRECT_MESSAGE_CREATE.d.ts +35 -27
  28. package/lib/message/DIRECT_MESSAGE_CREATE.js +1 -1
  29. package/lib/message/DIRECT_MESSAGE_DELETE.d.ts +23 -15
  30. package/lib/message/DIRECT_MESSAGE_DELETE.js +1 -1
  31. package/lib/message/ERROR.d.ts +4 -1
  32. package/lib/message/ERROR.js +1 -1
  33. package/lib/message/GUILD_CREATE.d.ts +22 -14
  34. package/lib/message/GUILD_CREATE.js +1 -1
  35. package/lib/message/GUILD_DELETE.d.ts +22 -14
  36. package/lib/message/GUILD_DELETE.js +1 -1
  37. package/lib/message/GUILD_MEMBER_ADD.d.ts +21 -13
  38. package/lib/message/GUILD_MEMBER_ADD.js +1 -1
  39. package/lib/message/GUILD_MEMBER_REMOVE.d.ts +21 -13
  40. package/lib/message/GUILD_MEMBER_REMOVE.js +1 -1
  41. package/lib/message/GUILD_MEMBER_UPDATE.d.ts +21 -13
  42. package/lib/message/GUILD_MEMBER_UPDATE.js +1 -1
  43. package/lib/message/GUILD_UPDATE.d.ts +22 -14
  44. package/lib/message/GUILD_UPDATE.js +1 -1
  45. package/lib/message/INTERACTION_CREATE.d.ts +52 -44
  46. package/lib/message/INTERACTION_CREATE.js +1 -1
  47. package/lib/message/MESSAGE_CREATE.d.ts +12 -1
  48. package/lib/message/MESSAGE_CREATE.js +1 -1
  49. package/lib/message/MESSAGE_DELETE.d.ts +12 -1
  50. package/lib/message/MESSAGE_DELETE.js +1 -1
  51. package/lib/message/MESSAGE_REACTION_ADD.d.ts +15 -12
  52. package/lib/message/MESSAGE_REACTION_ADD.js +1 -1
  53. package/lib/message/MESSAGE_REACTION_REMOVE.d.ts +15 -12
  54. package/lib/message/MESSAGE_REACTION_REMOVE.js +1 -1
  55. package/lib/message/PUBLIC_MESSAGE_DELETE.d.ts +20 -13
  56. package/lib/message/PUBLIC_MESSAGE_DELETE.js +1 -1
  57. package/lib/message/READY.d.ts +11 -5
  58. package/lib/message/READY.js +1 -1
  59. package/lib/message/group/C2C_MESSAGE_CREATE.d.ts +18 -15
  60. package/lib/message/group/C2C_MESSAGE_CREATE.js +1 -1
  61. package/lib/message/group/C2C_MSG_RECEIVE.d.ts +13 -3
  62. package/lib/message/group/C2C_MSG_RECEIVE.js +1 -1
  63. package/lib/message/group/C2C_MSG_REJECT.d.ts +9 -3
  64. package/lib/message/group/C2C_MSG_REJECT.js +1 -1
  65. package/lib/message/group/FRIEND_ADD.d.ts +13 -3
  66. package/lib/message/group/FRIEND_ADD.js +1 -1
  67. package/lib/message/group/FRIEND_DEL.d.ts +9 -3
  68. package/lib/message/group/FRIEND_DEL.js +1 -1
  69. package/lib/message/group/GROUP_ADD_ROBOT.d.ts +23 -4
  70. package/lib/message/group/GROUP_ADD_ROBOT.js +1 -1
  71. package/lib/message/group/GROUP_AT_MESSAGE_CREATE.d.ts +38 -32
  72. package/lib/message/group/GROUP_AT_MESSAGE_CREATE.js +1 -1
  73. package/lib/message/group/GROUP_DEL_ROBOT.d.ts +19 -4
  74. package/lib/message/group/GROUP_DEL_ROBOT.js +1 -1
  75. package/lib/message/group/GROUP_JOIN_REQUEST.d.ts +83 -22
  76. package/lib/message/group/GROUP_JOIN_REQUEST.js +1 -1
  77. package/lib/message/group/GROUP_MEMBER_ADD.d.ts +8 -5
  78. package/lib/message/group/GROUP_MEMBER_ADD.js +1 -1
  79. package/lib/message/group/GROUP_MEMBER_REMOVE.d.ts +8 -5
  80. package/lib/message/group/GROUP_MEMBER_REMOVE.js +1 -1
  81. package/lib/message/group/GROUP_MESSAGE_CREATE.d.ts +38 -32
  82. package/lib/message/group/GROUP_MESSAGE_CREATE.js +1 -1
  83. package/lib/message/group/GROUP_MSG_RECEIVE.d.ts +14 -4
  84. package/lib/message/group/GROUP_MSG_RECEIVE.js +1 -1
  85. package/lib/message/group/GROUP_MSG_REJECT.d.ts +10 -4
  86. package/lib/message/group/GROUP_MSG_REJECT.js +1 -1
  87. package/lib/message/group/MESSAGE_AUDIT_PASS.d.ts +12 -6
  88. package/lib/message/group/MESSAGE_AUDIT_PASS.js +1 -1
  89. package/lib/message/group/MESSAGE_AUDIT_REJECT.d.ts +12 -6
  90. package/lib/message/group/MESSAGE_AUDIT_REJECT.js +1 -1
  91. package/lib/register.d.ts +12 -9
  92. package/lib/register.js +1246 -1404
  93. package/lib/sdk/api.d.ts +937 -306
  94. package/lib/sdk/api.js +1481 -893
  95. package/lib/sdk/client.webhook.d.ts +25 -8
  96. package/lib/sdk/client.webhook.js +185 -189
  97. package/lib/sdk/client.websoket.d.ts +31 -9
  98. package/lib/sdk/client.websoket.js +369 -392
  99. package/lib/sdk/config.d.ts +6 -2
  100. package/lib/sdk/config.js +9 -6
  101. package/lib/sdk/instance.d.ts +11 -3
  102. package/lib/sdk/instance.js +72 -84
  103. package/lib/sdk/intents.d.ts +89 -3
  104. package/lib/sdk/intents.js +116 -33
  105. package/lib/sdk/message.d.ts +7 -4
  106. package/lib/sdk/message.group.d.ts +38 -35
  107. package/lib/sdk/message.group.js +1 -1
  108. package/lib/sdk/message.guild.d.ts +40 -37
  109. package/lib/sdk/message.guild.js +1 -1
  110. package/lib/sdk/message.js +1 -1
  111. package/lib/sdk/message.public.d.ts +8 -5
  112. package/lib/sdk/message.public.js +1 -1
  113. package/lib/sdk/qr-auth.d.ts +55 -0
  114. package/lib/sdk/qr-auth.js +169 -0
  115. package/lib/sdk/registry.d.ts +34 -24
  116. package/lib/sdk/registry.js +134 -114
  117. package/lib/sdk/session.d.ts +19 -15
  118. package/lib/sdk/session.js +51 -54
  119. package/lib/sdk/typing.d.ts +410 -184
  120. package/lib/sdk/typing.js +1 -1
  121. package/lib/sdk/webhook.secret.d.ts +33 -13
  122. package/lib/sdk/webhook.secret.js +50 -36
  123. package/lib/sends.d.ts +42 -25
  124. package/lib/sends.js +519 -541
  125. package/lib/types.d.ts +52 -41
  126. package/lib/types.js +1 -1
  127. package/lib/upload.d.ts +47 -18
  128. package/lib/upload.js +80 -51
  129. package/lib/utils.d.ts +9 -1
  130. package/lib/utils.js +10 -5
  131. package/package.json +9 -6
package/lib/types.d.ts CHANGED
@@ -1,48 +1,59 @@
1
- export type DataArkListTip = {
2
- type: 'Ark.listTip';
3
- value: {
4
- desc: string;
5
- prompt: string;
6
- };
1
+ //#region src/types.d.ts
2
+ /**
3
+ * QQ-Bot 平台专用类型定义
4
+ * 这些类型仅在 QQ-Bot 平台使用,不属于框架标准格式
5
+ */
6
+ type DataArkListTip = {
7
+ type: 'Ark.listTip';
8
+ value: {
9
+ desc: string;
10
+ prompt: string;
11
+ };
7
12
  };
8
- export type DataArkListItem = {
9
- type: 'Ark.listItem';
10
- value: string | {
11
- title: string;
12
- link: string;
13
- };
13
+ type DataArkListItem = {
14
+ type: 'Ark.listItem';
15
+ value: string | {
16
+ title: string;
17
+ link: string;
18
+ };
14
19
  };
15
- export type DataArkListContent = {
16
- type: 'Ark.listContent';
17
- value: DataArkListItem[];
20
+ type DataArkListContent = {
21
+ type: 'Ark.listContent';
22
+ value: DataArkListItem[];
18
23
  };
19
- export type DataArkList = {
20
- type: 'Ark.list';
21
- value: [DataArkListTip, DataArkListContent];
24
+ type DataArkList = {
25
+ type: 'Ark.list';
26
+ value: [DataArkListTip, DataArkListContent];
22
27
  };
23
- export type DataArkCard = {
24
- type: 'Ark.Card';
25
- value: {
26
- title: string;
27
- cover: string;
28
- link: string;
29
- subtitle: string;
30
- decs: string;
31
- prompt: string;
32
- metadecs: string;
33
- };
28
+ type DataArkCard = {
29
+ type: 'Ark.Card';
30
+ value: {
31
+ title: string;
32
+ cover: string;
33
+ link: string;
34
+ subtitle: string;
35
+ decs: string;
36
+ prompt: string;
37
+ metadecs: string;
38
+ };
34
39
  };
35
- export type DataArkBigCard = {
36
- type: 'Ark.BigCard';
37
- value: {
38
- title: string;
39
- subtitle: string;
40
- cover: string;
41
- link: string;
42
- prompt: string;
43
- };
40
+ type DataArkBigCard = {
41
+ type: 'Ark.BigCard';
42
+ value: {
43
+ title: string;
44
+ subtitle: string;
45
+ cover: string;
46
+ link: string;
47
+ prompt: string;
48
+ };
44
49
  };
45
- export type DataButtonTemplate = {
46
- type: 'ButtonTemplate';
47
- value: string;
50
+ /**
51
+ * 按钮模板数据
52
+ * value 为 QQ Bot 平台侧的模板 ID
53
+ */
54
+ type DataButtonTemplate = {
55
+ type: 'ButtonTemplate';
56
+ value: string;
48
57
  };
58
+ //#endregion
59
+ export { DataArkBigCard, DataArkCard, DataArkList, DataArkListContent, DataArkListItem, DataArkListTip, DataButtonTemplate };
package/lib/types.js CHANGED
@@ -1 +1 @@
1
-
1
+ export { };
package/lib/upload.d.ts CHANGED
@@ -1,21 +1,50 @@
1
- import type { QQBotAPI } from './sdk/api';
2
- import { FileType } from './sdk/typing';
3
- export declare const CHUNK_THRESHOLD = 10002432;
4
- export declare const fileDataToBuffer: (fileData: any) => Buffer | null;
5
- export declare const computeFileDigests: (filePath: string) => {
6
- buffer: NonSharedBuffer;
7
- md5: string;
8
- sha1: string;
9
- md5_10m: string;
1
+ import { FileType } from "./sdk/typing.js";
2
+ import { QQBotAPI } from "./sdk/api.js";
3
+ //#region src/upload.d.ts
4
+ /**
5
+ * 分片上传辅助
6
+ * 流程:upload_prepare 拿 upload_id 与每片 presigned_url
7
+ * → 分片字节 PUT 直传 COS 预签名地址
8
+ * → 每片成功后 upload_part_finish 上报
9
+ * → 全部完成后 postRichMediaByUser/ByGroup 携带 upload_id 合并,得到 file_info
10
+ */
11
+ /**
12
+ * 大文件分片上传阈值(字节),即 md5_10m 计算区间大小(约 10MB)
13
+ */
14
+ declare const CHUNK_THRESHOLD = 10002432;
15
+ /**
16
+ * 将 file_data(base64 字符串或 Buffer)转为 Buffer
17
+ * @param fileData 文件数据
18
+ */
19
+ declare const fileDataToBuffer: (fileData: any) => Buffer | null;
20
+ /**
21
+ * 计算文件摘要
22
+ * @param filePath 本地文件路径
23
+ */
24
+ declare const computeFileDigests: (filePath: string) => {
25
+ buffer: NonSharedBuffer;
26
+ md5: string;
27
+ sha1: string;
28
+ md5_10m: string;
10
29
  };
11
- export declare const chunkedUpload: (client: QQBotAPI, scope: "user" | "group", openId: string, file: string | Buffer, options: {
12
- file_type: FileType;
13
- file_name?: string;
14
- srv_send_msg?: boolean;
30
+ /**
31
+ * 分片上传完整流程
32
+ * @param client QQBot API 客户端
33
+ * @param scope user 单聊 / group 群聊
34
+ * @param openId 用户或群的 OpenID
35
+ * @param file 本地文件路径或文件内容
36
+ * @param options 上传选项
37
+ */
38
+ declare const chunkedUpload: (client: QQBotAPI, scope: 'user' | 'group', openId: string, file: string | Buffer, options: {
39
+ file_type: FileType;
40
+ file_name?: string;
41
+ srv_send_msg?: boolean;
15
42
  }) => Promise<{
16
- file_uuid: string;
17
- file_info: string;
18
- ttl: number;
19
- id?: string;
20
- raw_url?: string;
43
+ file_uuid: string;
44
+ file_info: string;
45
+ ttl: number;
46
+ id?: string;
47
+ raw_url?: string;
21
48
  }>;
49
+ //#endregion
50
+ export { CHUNK_THRESHOLD, chunkedUpload, computeFileDigests, fileDataToBuffer };
package/lib/upload.js CHANGED
@@ -1,60 +1,89 @@
1
- import { createHash } from 'crypto';
2
- import { readFileSync } from 'fs';
1
+ import { readFileSync } from "fs";
2
+ import { createHash } from "crypto";
3
3
 
4
+ //#region src/upload.ts
5
+ /**
6
+ * 分片上传辅助
7
+ * 流程:upload_prepare 拿 upload_id 与每片 presigned_url
8
+ * → 分片字节 PUT 直传 COS 预签名地址
9
+ * → 每片成功后 upload_part_finish 上报
10
+ * → 全部完成后 postRichMediaByUser/ByGroup 携带 upload_id 合并,得到 file_info
11
+ */
12
+ /**
13
+ * 大文件分片上传阈值(字节),即 md5_10m 计算区间大小(约 10MB)
14
+ */
4
15
  const CHUNK_THRESHOLD = 10002432;
16
+ /**
17
+ * 将 file_data(base64 字符串或 Buffer)转为 Buffer
18
+ * @param fileData 文件数据
19
+ */
5
20
  const fileDataToBuffer = (fileData) => {
6
- if (!fileData) {
7
- return null;
8
- }
9
- if (Buffer.isBuffer(fileData)) {
10
- return fileData;
11
- }
12
- if (typeof fileData === 'string') {
13
- if (fileData.indexOf('base64://') === 0) {
14
- return Buffer.from(fileData.replace('base64://', ''), 'base64');
15
- }
16
- return Buffer.from(fileData, 'base64');
17
- }
18
- return null;
21
+ if (!fileData) return null;
22
+ if (Buffer.isBuffer(fileData)) return fileData;
23
+ if (typeof fileData === "string") {
24
+ if (fileData.indexOf("base64://") === 0) return Buffer.from(fileData.replace("base64://", ""), "base64");
25
+ return Buffer.from(fileData, "base64");
26
+ }
27
+ return null;
19
28
  };
29
+ /**
30
+ * 计算文件摘要
31
+ * @param filePath 本地文件路径
32
+ */
20
33
  const computeFileDigests = (filePath) => {
21
- const buffer = readFileSync(filePath);
22
- const md5 = createHash('md5').update(buffer).digest('hex');
23
- const sha1 = createHash('sha1').update(buffer).digest('hex');
24
- const md5_10m = createHash('md5').update(buffer.subarray(0, CHUNK_THRESHOLD)).digest('hex');
25
- return { buffer, md5, sha1, md5_10m };
34
+ const buffer = readFileSync(filePath);
35
+ return {
36
+ buffer,
37
+ md5: createHash("md5").update(buffer).digest("hex"),
38
+ sha1: createHash("sha1").update(buffer).digest("hex"),
39
+ md5_10m: createHash("md5").update(buffer.subarray(0, CHUNK_THRESHOLD)).digest("hex")
40
+ };
26
41
  };
42
+ /**
43
+ * 分片上传完整流程
44
+ * @param client QQBot API 客户端
45
+ * @param scope user 单聊 / group 群聊
46
+ * @param openId 用户或群的 OpenID
47
+ * @param file 本地文件路径或文件内容
48
+ * @param options 上传选项
49
+ */
27
50
  const chunkedUpload = async (client, scope, openId, file, options) => {
28
- const buffer = typeof file === 'string' ? readFileSync(file) : file;
29
- const md5 = createHash('md5').update(buffer).digest('hex');
30
- const sha1 = createHash('sha1').update(buffer).digest('hex');
31
- const md5_10m = createHash('md5').update(buffer.subarray(0, CHUNK_THRESHOLD)).digest('hex');
32
- const file_name = options.file_name ?? (typeof file === 'string' ? (file.split(/[\\/]/).pop() ?? 'file') : 'file');
33
- const prepareData = {
34
- file_type: options.file_type,
35
- file_name,
36
- file_size: String(buffer.byteLength),
37
- md5,
38
- sha1,
39
- md5_10m
40
- };
41
- const prepare = await (scope === 'user' ? client.usersUploadPrepare(openId, prepareData) : client.groupUploadPrepare(openId, prepareData));
42
- const blockSize = Number(prepare.block_size);
43
- for (const part of prepare.parts) {
44
- const start = part.index * blockSize;
45
- const chunk = Buffer.from(buffer.subarray(start, start + Number(part.block_size)));
46
- const partMd5 = createHash('md5').update(chunk).digest('hex');
47
- await client.uploadPartDirect(part.presigned_url, chunk);
48
- const finishData = {
49
- upload_id: prepare.upload_id,
50
- part_index: part.index,
51
- block_size: part.block_size,
52
- md5: partMd5
53
- };
54
- await (scope === 'user' ? client.usersUploadPartFinish(openId, finishData) : client.groupUploadPartFinish(openId, finishData));
55
- }
56
- const merge = { file_type: options.file_type, upload_id: prepare.upload_id, file_name, srv_send_msg: options.srv_send_msg };
57
- return scope === 'user' ? client.postRichMediaByUser(openId, merge) : client.postRichMediaByGroup(openId, merge);
51
+ const buffer = typeof file === "string" ? readFileSync(file) : file;
52
+ const md5 = createHash("md5").update(buffer).digest("hex");
53
+ const sha1 = createHash("sha1").update(buffer).digest("hex");
54
+ const md5_10m = createHash("md5").update(buffer.subarray(0, CHUNK_THRESHOLD)).digest("hex");
55
+ const file_name = options.file_name ?? (typeof file === "string" ? file.split(/[\\/]/).pop() ?? "file" : "file");
56
+ const prepareData = {
57
+ file_type: options.file_type,
58
+ file_name,
59
+ file_size: String(buffer.byteLength),
60
+ md5,
61
+ sha1,
62
+ md5_10m
63
+ };
64
+ const prepare = await (scope === "user" ? client.usersUploadPrepare(openId, prepareData) : client.groupUploadPrepare(openId, prepareData));
65
+ const blockSize = Number(prepare.block_size);
66
+ for (const part of prepare.parts) {
67
+ const start = part.index * blockSize;
68
+ const chunk = Buffer.from(buffer.subarray(start, start + Number(part.block_size)));
69
+ const partMd5 = createHash("md5").update(chunk).digest("hex");
70
+ await client.uploadPartDirect(part.presigned_url, chunk);
71
+ const finishData = {
72
+ upload_id: prepare.upload_id,
73
+ part_index: part.index,
74
+ block_size: part.block_size,
75
+ md5: partMd5
76
+ };
77
+ await (scope === "user" ? client.usersUploadPartFinish(openId, finishData) : client.groupUploadPartFinish(openId, finishData));
78
+ }
79
+ const merge = {
80
+ file_type: options.file_type,
81
+ upload_id: prepare.upload_id,
82
+ file_name,
83
+ srv_send_msg: options.srv_send_msg
84
+ };
85
+ return scope === "user" ? client.postRichMediaByUser(openId, merge) : client.postRichMediaByGroup(openId, merge);
58
86
  };
59
87
 
60
- export { CHUNK_THRESHOLD, chunkedUpload, computeFileDigests, fileDataToBuffer };
88
+ //#endregion
89
+ export { CHUNK_THRESHOLD, chunkedUpload, computeFileDigests, fileDataToBuffer };
package/lib/utils.d.ts CHANGED
@@ -1 +1,9 @@
1
- export declare const isGuild: (str: string) => boolean;
1
+ //#region src/utils.d.ts
2
+ /**
3
+ *
4
+ * @param str
5
+ * @returns
6
+ */
7
+ declare const isGuild: (str: string) => boolean;
8
+ //#endregion
9
+ export { isGuild };
package/lib/utils.js CHANGED
@@ -1,8 +1,13 @@
1
+ //#region src/utils.ts
2
+ /**
3
+ *
4
+ * @param str
5
+ * @returns
6
+ */
1
7
  const isGuild = (str) => {
2
- if (isNaN(Number(str.substring(0, 6)))) {
3
- return false;
4
- }
5
- return true;
8
+ if (isNaN(Number(str.substring(0, 6)))) return false;
9
+ return true;
6
10
  };
7
11
 
8
- export { isGuild };
12
+ //#endregion
13
+ export { isGuild };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alemonjs/qq-bot",
3
- "version": "2.1.33",
3
+ "version": "2.1.34",
4
4
  "description": "QQ官方平台",
5
5
  "author": "lemonade",
6
6
  "license": "MIT",
@@ -8,7 +8,9 @@
8
8
  "main": "lib/index.js",
9
9
  "scripts": {
10
10
  "build": "lvy build",
11
- "test:ws": "yarn build && node tests/websocket.integration.mjs"
11
+ "test:ws": "yarn build && node tests/websocket.integration.mjs",
12
+ "test:send": "yarn build && node tests/use-send.notice.mjs",
13
+ "test:qr": "yarn build && node tests/qr-auth.mjs"
12
14
  },
13
15
  "dependencies": {
14
16
  "@noble/curves": "^1.7.0",
@@ -24,7 +26,8 @@
24
26
  "public-ip": "^6.0.1",
25
27
  "qrcode": "^1.5.3",
26
28
  "uuid": "^14.0.1",
27
- "ws": "^8.13.0"
29
+ "ws": "^8.13.0",
30
+ "yaml": "^2.5.1"
28
31
  },
29
32
  "peerDependencies": {
30
33
  "alemonjs": "^2.1.0-alpha.15"
@@ -44,13 +47,13 @@
44
47
  {
45
48
  "name": "app_id",
46
49
  "type": "string",
47
- "required": true,
50
+ "required": false,
48
51
  "description": "app_id"
49
52
  },
50
53
  {
51
54
  "name": "secret",
52
55
  "type": "string",
53
- "required": true,
56
+ "required": false,
54
57
  "description": "secret"
55
58
  }
56
59
  ],
@@ -94,5 +97,5 @@
94
97
  "type": "git",
95
98
  "url": "https://github.com/lemonade-lab/alemonjs.git"
96
99
  },
97
- "gitHead": "6c93b0455b8db78ffa1a83becc1c2de19ba544db"
100
+ "gitHead": "8e6c0d91889ff7926fc7bc58ac8dc664c8f721ea"
98
101
  }