@cryozerolabs/n8n-nodes-dingtalk 0.3.4 → 0.5.0

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 (88) hide show
  1. package/README.md +49 -34
  2. package/dist/credentials/DingtalkApi.credentials.d.ts +2 -3
  3. package/dist/credentials/DingtalkApi.credentials.js +28 -29
  4. package/dist/credentials/DingtalkApi.credentials.js.map +1 -1
  5. package/dist/credentials/DingtalkRobotApi.credentials.d.ts +9 -0
  6. package/dist/credentials/DingtalkRobotApi.credentials.js +59 -0
  7. package/dist/credentials/DingtalkRobotApi.credentials.js.map +1 -0
  8. package/dist/docs/images/robot-guide.png +0 -0
  9. package/dist/docs/images/stream-push-guide.png +0 -0
  10. package/dist/nodes/DingtalkNode/DingtalkNode.node.js +31 -3
  11. package/dist/nodes/DingtalkNode/DingtalkNode.node.js.map +1 -1
  12. package/dist/nodes/DingtalkNode/DingtalkNode.node.json +2 -2
  13. package/dist/nodes/DingtalkNode/DingtalkNodeTrigger.node.d.ts +5 -0
  14. package/dist/nodes/DingtalkNode/DingtalkNodeTrigger.node.js +65 -0
  15. package/dist/nodes/DingtalkNode/DingtalkNodeTrigger.node.js.map +1 -0
  16. package/dist/nodes/DingtalkNode/DingtalkNodeTrigger.node.json +21 -0
  17. package/dist/nodes/DingtalkNode/resources/doc/index.js +2 -1
  18. package/dist/nodes/DingtalkNode/resources/doc/index.js.map +1 -1
  19. package/dist/nodes/DingtalkNode/resources/doc/uploadAttachment.d.ts +3 -0
  20. package/dist/nodes/DingtalkNode/resources/doc/uploadAttachment.js +85 -0
  21. package/dist/nodes/DingtalkNode/resources/doc/uploadAttachment.js.map +1 -0
  22. package/dist/nodes/DingtalkNode/resources/notable/methods/resourceMapping.js +1 -1
  23. package/dist/nodes/DingtalkNode/resources/notable/methods/resourceMapping.js.map +1 -1
  24. package/dist/nodes/DingtalkNode/resources/notable/parseUrl.js +1 -0
  25. package/dist/nodes/DingtalkNode/resources/notable/parseUrl.js.map +1 -1
  26. package/dist/nodes/DingtalkNode/resources/notable/recordList.js.map +1 -1
  27. package/dist/nodes/DingtalkNode/resources/robot/dingRecall.d.ts +3 -0
  28. package/dist/nodes/DingtalkNode/resources/robot/dingRecall.js +65 -0
  29. package/dist/nodes/DingtalkNode/resources/robot/dingRecall.js.map +1 -0
  30. package/dist/nodes/DingtalkNode/resources/robot/dingSend.d.ts +3 -0
  31. package/dist/nodes/DingtalkNode/resources/robot/dingSend.js +115 -0
  32. package/dist/nodes/DingtalkNode/resources/robot/dingSend.js.map +1 -0
  33. package/dist/nodes/DingtalkNode/resources/robot/index.d.ts +2 -0
  34. package/dist/nodes/DingtalkNode/resources/robot/index.js +15 -0
  35. package/dist/nodes/DingtalkNode/resources/robot/index.js.map +1 -0
  36. package/dist/nodes/DingtalkNode/resources/robot/send.d.ts +3 -0
  37. package/dist/nodes/DingtalkNode/resources/robot/send.js +441 -0
  38. package/dist/nodes/DingtalkNode/resources/robot/send.js.map +1 -0
  39. package/dist/nodes/DingtalkNode/resources/user/getByMobile.d.ts +3 -0
  40. package/dist/nodes/DingtalkNode/resources/user/getByMobile.js +39 -0
  41. package/dist/nodes/DingtalkNode/resources/user/getByMobile.js.map +1 -0
  42. package/dist/nodes/DingtalkNode/resources/user/index.js +3 -1
  43. package/dist/nodes/DingtalkNode/resources/user/index.js.map +1 -1
  44. package/dist/nodes/DingtalkNode/resources/user/search.d.ts +3 -0
  45. package/dist/nodes/DingtalkNode/resources/user/search.js +71 -0
  46. package/dist/nodes/DingtalkNode/resources/user/search.js.map +1 -0
  47. package/dist/nodes/DingtalkNode/resources/workflow/index.d.ts +2 -0
  48. package/dist/nodes/DingtalkNode/resources/workflow/index.js +29 -0
  49. package/dist/nodes/DingtalkNode/resources/workflow/index.js.map +1 -0
  50. package/dist/nodes/DingtalkNode/resources/workflow/methods/index.d.ts +7 -0
  51. package/dist/nodes/DingtalkNode/resources/workflow/methods/index.js +10 -0
  52. package/dist/nodes/DingtalkNode/resources/workflow/methods/index.js.map +1 -0
  53. package/dist/nodes/DingtalkNode/resources/workflow/methods/resourceMapping.d.ts +11 -0
  54. package/dist/nodes/DingtalkNode/resources/workflow/methods/resourceMapping.js +97 -0
  55. package/dist/nodes/DingtalkNode/resources/workflow/methods/resourceMapping.js.map +1 -0
  56. package/dist/nodes/DingtalkNode/resources/workflow/processesInstances.d.ts +3 -0
  57. package/dist/nodes/DingtalkNode/resources/workflow/processesInstances.js +39 -0
  58. package/dist/nodes/DingtalkNode/resources/workflow/processesInstances.js.map +1 -0
  59. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesComments.d.ts +3 -0
  60. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesComments.js +167 -0
  61. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesComments.js.map +1 -0
  62. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesDownload.d.ts +3 -0
  63. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesDownload.js +60 -0
  64. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesDownload.js.map +1 -0
  65. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesIds.d.ts +3 -0
  66. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesIds.js +118 -0
  67. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesIds.js.map +1 -0
  68. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesSpacesInfos.d.ts +3 -0
  69. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesSpacesInfos.js +49 -0
  70. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesSpacesInfos.js.map +1 -0
  71. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesUpdate.d.ts +3 -0
  72. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesUpdate.js +209 -0
  73. package/dist/nodes/DingtalkNode/resources/workflow/processesInstancesUpdate.js.map +1 -0
  74. package/dist/nodes/DingtalkNode/resources/workflow/processesTemplatesUserVisibilities.d.ts +3 -0
  75. package/dist/nodes/DingtalkNode/resources/workflow/processesTemplatesUserVisibilities.js +57 -0
  76. package/dist/nodes/DingtalkNode/resources/workflow/processesTemplatesUserVisibilities.js.map +1 -0
  77. package/dist/nodes/DingtalkNode/triggers/streamPushTrigger.d.ts +3 -0
  78. package/dist/nodes/DingtalkNode/triggers/streamPushTrigger.js +307 -0
  79. package/dist/nodes/DingtalkNode/triggers/streamPushTrigger.js.map +1 -0
  80. package/dist/nodes/shared/properties/commaSeparatedString.js +0 -1
  81. package/dist/nodes/shared/properties/commaSeparatedString.js.map +1 -1
  82. package/dist/nodes/shared/properties/operator.js.map +1 -1
  83. package/dist/nodes/shared/request.d.ts +5 -1
  84. package/dist/nodes/shared/request.js +15 -15
  85. package/dist/nodes/shared/request.js.map +1 -1
  86. package/dist/package.json +12 -5
  87. package/dist/tsconfig.tsbuildinfo +1 -1
  88. package/package.json +12 -5
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  这是一个钉钉(DingTalk)的 n8n 社区节点,让你可以在 n8n 工作流中集成钉钉开放平台的各种 API。
7
7
 
8
- 钉钉是阿里巴巴集团打造的企业级智能移动办公平台,为全球企业组织提供一站式的数字化办公解决方案。本节点基于钉钉开放平台 API 开发,支持 AI 表格、用户管理、身份验证等核心功能。
8
+ 钉钉是阿里巴巴集团打造的企业级智能移动办公平台,为全球企业组织提供一站式的数字化办公解决方案。本节点基于钉钉开放平台 API 开发,支持 Stream模式监听事件订阅、AI 表格、用户管理、身份验证等核心功能。
9
9
 
10
10
  > ⚡ 使用教程、最佳实践等详尽说明请访问项目 Wiki:<https://github.com/cryozerolabs/n8n-nodes-dingtalk/wiki>
11
11
 
@@ -52,6 +52,26 @@
52
52
 
53
53
  ### 👥 用户管理 (User)
54
54
  - **获取用户详情** - 根据 userId 获取用户信息(unionId)
55
+ - **根据手机号查询用户** - 根据手机号获取用户的userId
56
+ - **搜索用户userId** - 获取指定用户的详细信息
57
+
58
+ ### 💼 OA审批(workflow)
59
+ - 获取单个审批实例详情
60
+ - 添加审批评论
61
+ - 下载审批附件
62
+ - 获取审批实例ID列表
63
+ - 获取审批钉盘空间信息
64
+ - 获取指定用户可见的审批表单列表
65
+ - [钉钉专业版💎]更新流程表单审批实例
66
+
67
+ ### 🤖 机器人(robot)
68
+ - [钉钉专业版💎]发送DING消息
69
+ - [钉钉专业版💎]撤回已经发送的DING消息
70
+ - 自定义机器人发送群消息
71
+
72
+ ### ⚡️ 事件订阅
73
+ ![Stream Push](docs/images/stream-push-guide.png)
74
+ - **Stream模式推送** - 触发器,监听事件订阅回调,Stream 模式不需要公网服务器、IP、域名等资源。
55
75
 
56
76
 
57
77
  ## 🚀 安装指南
@@ -117,37 +137,16 @@
117
137
 
118
138
  本节点目前已实现钉钉开放平台的核心功能。对于尚未开发的 API 接口,你可以通过以下方式扩展使用:
119
139
 
120
- #### 1. 获取统一访问令牌
121
-
122
- 使用本节点的 **身份验证** → **获取访问令牌** 操作来获取 `access_token`:
123
-
124
- ```json
125
- {
126
- "resource": "auth",
127
- "operation": "auth.tokenGet"
128
- }
129
- ```
130
-
131
- #### 2. 使用 HTTP Request 节点
132
-
133
- 将获取的 `access_token` 用于 n8n 的 **HTTP Request** 节点来调用任何钉钉 API:
140
+ #### 使用 HTTP Request 节点
141
+ 使用 n8n 的 **HTTP Request** 节点来调用任何钉钉 API:
134
142
 
135
143
  **基本配置示例:**
136
- - **方法**: POST/GET(根据 API 要求)
144
+ - **方法**: POST/GET/PUT(根据 API 要求)
137
145
  - **URL**: `https://api.dingtalk.com/v1.0/[API路径]`
138
- - **Headers**:
139
- ```json
140
- {
141
- "x-acs-dingtalk-access-token": "{{ $json.accessToken }} }}",
142
- "Content-Type": "application/json"
143
- }
144
- ```
145
- - **Body**: 根据具体 API 要求配置
146
-
147
- **实际应用示例:**
148
- 1. 先运行 "获取访问令牌" 节点
149
- 2. 在 HTTP Request 节点中引用上一步的 token
150
- 3. 调用你需要的钉钉 API
146
+ - **Authentication**: `Predefined Credential Type`
147
+ - **Credential Type**: `Dingtalk API`、`Dingtalk Robot API`
148
+ - **Send Query Parameters**: 根据具体 API 要求配置
149
+ - **Send Body**: 根据具体 API 要求配置
151
150
 
152
151
  这种方式让你可以使用钉钉开放平台的任何 API,而不受本节点当前功能的限制。所有的身份验证和令牌管理都由本节点自动处理。
153
152
 
@@ -203,6 +202,20 @@
203
202
  - [功能请求](https://github.com/cryozerolabs/n8n-nodes-dingtalk/discussions)
204
203
 
205
204
  ## 📋 版本历史
205
+ ## v0.5.0
206
+ - 新增:部分常用的审批操作
207
+ - 新增:钉钉机器人发送、撤回DING消息(钉钉专业版)
208
+ - 新增:钉钉Stream推送+工作流+AI案例
209
+ - 新增:AI表格(文档)文件上传,详情见案例
210
+ - 修复:AI表格附件字段类型错误,应该是Array
211
+ - 修复:将常用的eslint统一管理
212
+ - 修复:Http Request中Predefined Credential Type不能选择Dingtalk API、Dingtalk Robot API的问题
213
+
214
+ ## v0.4.0
215
+ - 新增:根据手机号查询用户、搜索用户userId,简化用户获取unionId的步骤
216
+ - 新增:⚡️Stream模式事件订阅触发器
217
+ - 修改:凭证获取access_token使用企业内部api(钉钉新版本获取的统一access_token的api存在不兼容)
218
+
206
219
  ### v0.3.4
207
220
  - 增强http请求,钉钉应用申请权限后,需要使用新的access_token才会生效,对于`应用尚未开通所需的权限:[XXX.XXX.XXX]`错误,尝试刷新access_token(即使用户没有去修改权限)
208
221
 
@@ -210,7 +223,7 @@
210
223
  - 修复了AccessToken过期后无法自动刷新的问题
211
224
 
212
225
  ### v0.3.0
213
- ## ⚠️ 升级提示
226
+ #### ⚠️ 升级提示
214
227
 
215
228
  v0.3.0 重构了 AI 表格记录操作的参数模型,请在升级后逐一检查旧工作流中的相关节点:
216
229
 
@@ -269,21 +282,23 @@ cd n8n-nodes-dingtalk
269
282
  npm install
270
283
 
271
284
  # 3. 安装 n8n-node 开发工具(如果尚未安装)
272
- npm install -g n8n-node
285
+ npm install --global @n8n/node-cli
273
286
 
274
287
  # 4. 构建项目
275
- n8n-node build
288
+ npm run build
276
289
 
277
290
  # 5. 设置开发环境变量(可选,用于调试)
278
- export NODE_ENV=development
279
291
  export N8N_LOG_LEVEL=debug
280
292
 
281
293
  # 6. 启动 n8n 开发服务器(自动加载当前节点)
282
- n8n-node dev
294
+ npm run dev
283
295
 
284
296
  # 7. 代码格式化和检查
285
297
  npm run format
286
298
  npm run lint
299
+
300
+ # 8. 发布
301
+ npm run release
287
302
  ```
288
303
 
289
304
  **开发提示:**
@@ -1,5 +1,4 @@
1
- import type { ICredentialDataDecryptedObject, ICredentialTestRequest, ICredentialType, IHttpRequestHelper, INodeProperties } from 'n8n-workflow';
2
- import { IHttpRequestOptions } from 'n8n-workflow/dist/Interfaces';
1
+ import type { IAuthenticate, ICredentialDataDecryptedObject, ICredentialTestRequest, ICredentialType, IHttpRequestHelper, INodeProperties } from 'n8n-workflow';
3
2
  export declare class DingtalkApi implements ICredentialType {
4
3
  name: string;
5
4
  displayName: string;
@@ -9,6 +8,6 @@ export declare class DingtalkApi implements ICredentialType {
9
8
  preAuthentication(this: IHttpRequestHelper, credentials: ICredentialDataDecryptedObject): Promise<{
10
9
  accessToken: any;
11
10
  }>;
12
- authenticate(credentials: ICredentialDataDecryptedObject, requestOptions: IHttpRequestOptions): Promise<IHttpRequestOptions>;
11
+ authenticate: IAuthenticate;
13
12
  test: ICredentialTestRequest;
14
13
  }
@@ -52,15 +52,33 @@ class DingtalkApi {
52
52
  hint: '如果你已经获取了操作人Union ID,可以在这里填写,否则需要通过[用户管理 查询用户详情]获取后,再填写',
53
53
  },
54
54
  ];
55
+ this.authenticate = async (credentials, requestOptions) => {
56
+ var _a, _b, _c, _d;
57
+ const baseURL = (_a = requestOptions.baseURL) !== null && _a !== void 0 ? _a : '';
58
+ const url = (_b = requestOptions.url) !== null && _b !== void 0 ? _b : '';
59
+ const full = url.startsWith('http') ? url : `${baseURL}${url}`;
60
+ if (full.includes('oapi.dingtalk.com')) {
61
+ requestOptions.qs = {
62
+ ...((_c = requestOptions.qs) !== null && _c !== void 0 ? _c : {}),
63
+ access_token: credentials.accessToken,
64
+ };
65
+ }
66
+ else {
67
+ requestOptions.headers = {
68
+ ...((_d = requestOptions.headers) !== null && _d !== void 0 ? _d : {}),
69
+ 'x-acs-dingtalk-access-token': credentials.accessToken,
70
+ };
71
+ }
72
+ return requestOptions;
73
+ };
55
74
  this.test = {
56
75
  request: {
57
76
  baseURL: 'https://api.dingtalk.com/v1.0',
58
- url: '=/oauth2/{{$credentials.corpId}}/token',
77
+ url: '=/oauth2/accessToken',
59
78
  method: 'POST',
60
79
  body: {
61
- client_id: '={{$credentials.clientId}}',
62
- client_secret: '={{$credentials.clientSecret}}',
63
- grant_type: 'client_credentials',
80
+ appKey: '={{$credentials.clientId}}',
81
+ appSecret: '={{$credentials.clientSecret}}',
64
82
  },
65
83
  },
66
84
  };
@@ -68,36 +86,17 @@ class DingtalkApi {
68
86
  async preAuthentication(credentials) {
69
87
  const res = await this.helpers.httpRequest({
70
88
  method: 'POST',
71
- url: `https://api.dingtalk.com/v1.0/oauth2/${credentials.corpId}/token`,
89
+ url: `https://api.dingtalk.com/v1.0/oauth2/accessToken`,
72
90
  body: {
73
- client_id: credentials.clientId,
74
- client_secret: credentials.clientSecret,
75
- grant_type: 'client_credentials',
91
+ appKey: credentials.clientId,
92
+ appSecret: credentials.clientSecret,
76
93
  },
77
94
  });
78
- if (res.code || !res.access_token) {
95
+ const accessToken = res.accessToken || res.access_token;
96
+ if (res.code || !accessToken) {
79
97
  throw new Error(`授权失败: ${res.message}`);
80
98
  }
81
- return { accessToken: res.access_token };
82
- }
83
- async authenticate(credentials, requestOptions) {
84
- var _a, _b, _c, _d;
85
- const baseURL = (_a = requestOptions.baseURL) !== null && _a !== void 0 ? _a : '';
86
- const url = (_b = requestOptions.url) !== null && _b !== void 0 ? _b : '';
87
- const full = url.startsWith('http') ? url : `${baseURL}${url}`;
88
- if (full.includes('oapi.dingtalk.com')) {
89
- requestOptions.qs = {
90
- ...((_c = requestOptions.qs) !== null && _c !== void 0 ? _c : {}),
91
- access_token: credentials.accessToken,
92
- };
93
- }
94
- else {
95
- requestOptions.headers = {
96
- ...((_d = requestOptions.headers) !== null && _d !== void 0 ? _d : {}),
97
- 'x-acs-dingtalk-access-token': credentials.accessToken,
98
- };
99
- }
100
- return requestOptions;
99
+ return { accessToken };
101
100
  }
102
101
  }
103
102
  exports.DingtalkApi = DingtalkApi;
@@ -1 +1 @@
1
- {"version":3,"file":"DingtalkApi.credentials.js","sourceRoot":"","sources":["../../credentials/DingtalkApi.credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DingtalkApi.credentials.js","sourceRoot":"","sources":["../../credentials/DingtalkApi.credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { IAuthenticate, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class DingtalkRobotApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ icon: "file:icon.png";
6
+ documentationUrl: string;
7
+ properties: INodeProperties[];
8
+ authenticate: IAuthenticate;
9
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DingtalkRobotApi = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ class DingtalkRobotApi {
6
+ constructor() {
7
+ this.name = 'dingtalkRobotApi';
8
+ this.displayName = 'DingTalk Robot API';
9
+ this.icon = 'file:icon.png';
10
+ this.documentationUrl = 'https://open.dingtalk.com/document/development/custom-robots-send-group-messages';
11
+ this.properties = [
12
+ {
13
+ displayName: 'AccessToken',
14
+ name: 'accessToken',
15
+ type: 'string',
16
+ required: true,
17
+ default: '',
18
+ placeholder: 'https://oapi.dingtalk.com/robot/send?access_token=<TOKEN>',
19
+ typeOptions: {
20
+ password: true,
21
+ },
22
+ description: '自定义机器人安装后webhook地址中的access_token值。详情参考<a href="https://open.dingtalk.com/document/development/custom-robots-send-group-messages" target="_blank">获取自定义机器人 Webhook 地址</a>。',
23
+ },
24
+ {
25
+ displayName: '签名密钥(可选)',
26
+ name: 'secret',
27
+ type: 'string',
28
+ default: '',
29
+ placeholder: 'SECxxx',
30
+ typeOptions: {
31
+ password: true,
32
+ },
33
+ description: '如果启用了加签校验,请填写密钥,n8n 会自动生成 sign 与 timestamp 参数。<a href="https://open.dingtalk.com/document/robots/customize-robot-security-settings" target="_blank">查看官方API文档</a>',
34
+ },
35
+ ];
36
+ this.authenticate = async (credentials, requestOptions) => {
37
+ var _a;
38
+ const qs = {
39
+ access_token: credentials.accessToken,
40
+ };
41
+ if (credentials.secret) {
42
+ const timestamp = Date.now();
43
+ const base64Sign = (0, node_crypto_1.createHmac)('sha256', credentials.secret)
44
+ .update(`${timestamp}\n${credentials.secret}`)
45
+ .digest('base64');
46
+ const sign = encodeURIComponent(base64Sign);
47
+ qs.timestamp = timestamp;
48
+ qs.sign = sign;
49
+ }
50
+ requestOptions.qs = {
51
+ ...((_a = requestOptions.qs) !== null && _a !== void 0 ? _a : {}),
52
+ ...qs,
53
+ };
54
+ return requestOptions;
55
+ };
56
+ }
57
+ }
58
+ exports.DingtalkRobotApi = DingtalkRobotApi;
59
+ //# sourceMappingURL=DingtalkRobotApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DingtalkRobotApi.credentials.js","sourceRoot":"","sources":["../../credentials/DingtalkRobotApi.credentials.ts"],"names":[],"mappings":";;;AAQA,6CAAyC;AAEzC,MAAa,gBAAgB;IAA7B;QACE,SAAI,GAAG,kBAAkB,CAAC;QAE1B,gBAAW,GAAG,oBAAoB,CAAC;QAEnC,SAAI,GAAG,eAAwB,CAAC;QAEhC,qBAAgB,GACd,kFAAkF,CAAC;QAErF,eAAU,GAAsB;YAC9B;gBACE,WAAW,EAAE,aAAa;gBAC1B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,2DAA2D;gBACxE,WAAW,EAAE;oBACX,QAAQ,EAAE,IAAI;iBACf;gBACD,WAAW,EACT,2KAA2K;aAC9K;YACD;gBACE,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,QAAQ;gBACrB,WAAW,EAAE;oBACX,QAAQ,EAAE,IAAI;iBACf;gBACD,WAAW,EACT,mKAAmK;aACtK;SACF,CAAC;QAEF,iBAAY,GAAkB,KAAK,EACjC,WAA2C,EAC3C,cAAmC,EACnC,EAAE;;YACF,MAAM,EAAE,GAAgB;gBACtB,YAAY,EAAE,WAAW,CAAC,WAAW;aACtC,CAAC;YAEF,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;gBAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE7B,MAAM,UAAU,GAAG,IAAA,wBAAU,EAAC,QAAQ,EAAE,WAAW,CAAC,MAAgB,CAAC;qBAClE,MAAM,CAAC,GAAG,SAAS,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;qBAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAEpB,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBAE5C,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;gBACzB,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,CAAC;YAED,cAAc,CAAC,EAAE,GAAG;gBAClB,GAAG,CAAC,MAAA,cAAc,CAAC,EAAE,mCAAI,EAAE,CAAC;gBAC5B,GAAG,EAAE;aACN,CAAC;YAEF,OAAO,cAAc,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC;CAAA;AAnED,4CAmEC"}
Binary file
@@ -7,10 +7,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.DingtalkNode = void 0;
8
8
  const n8n_workflow_1 = require("n8n-workflow");
9
9
  const auth_1 = __importDefault(require("./resources/auth"));
10
+ const doc_1 = __importDefault(require("./resources/doc"));
10
11
  const notable_1 = __importDefault(require("./resources/notable"));
12
+ const robot_1 = __importDefault(require("./resources/robot"));
11
13
  const user_1 = __importDefault(require("./resources/user"));
12
- const doc_1 = __importDefault(require("./resources/doc"));
13
- const bundles = [auth_1.default, notable_1.default, user_1.default, doc_1.default];
14
+ const workflow_1 = __importDefault(require("./resources/workflow"));
15
+ const bundles = [
16
+ auth_1.default,
17
+ doc_1.default,
18
+ notable_1.default,
19
+ robot_1.default,
20
+ user_1.default,
21
+ workflow_1.default,
22
+ ];
14
23
  const seen = {};
15
24
  for (const b of bundles)
16
25
  seen[b.value] = ((_a = seen[b.value]) !== null && _a !== void 0 ? _a : 0) + 1;
@@ -67,7 +76,26 @@ class DingtalkNode {
67
76
  usableAsTool: true,
68
77
  inputs: ["main"],
69
78
  outputs: ["main"],
70
- credentials: [{ name: 'dingtalkApi', required: true }],
79
+ credentials: [
80
+ {
81
+ name: 'dingtalkApi',
82
+ required: true,
83
+ displayOptions: {
84
+ hide: {
85
+ operation: ['robot.send', 'notable.parseUrl'],
86
+ },
87
+ },
88
+ },
89
+ {
90
+ name: 'dingtalkRobotApi',
91
+ required: true,
92
+ displayOptions: {
93
+ show: {
94
+ operation: ['robot.send'],
95
+ },
96
+ },
97
+ },
98
+ ],
71
99
  properties: [resourceProperty, ...resourceOperationProps, ...aggregatedParams],
72
100
  };
73
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DingtalkNode.node.js","sourceRoot":"","sources":["../../../nodes/DingtalkNode/DingtalkNode.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DingtalkNode.node.js","sourceRoot":"","sources":["../../../nodes/DingtalkNode/DingtalkNode.node.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "node": "@cryozerolabs/n8n-nodes-dingtalk",
3
- "nodeVersion": "0.3.1",
4
- "codexVersion": "0.3.1",
3
+ "nodeVersion": "0.5.0",
4
+ "codexVersion": "0.5.0",
5
5
  "categories": ["Productivity", "Communication"],
6
6
  "resources": {
7
7
  "credentialDocumentation": [
@@ -0,0 +1,5 @@
1
+ import { type INodeType, type INodeTypeDescription, type ITriggerFunctions, type ITriggerResponse } from 'n8n-workflow';
2
+ export declare class DingtalkNodeTrigger implements INodeType {
3
+ description: INodeTypeDescription;
4
+ trigger(this: ITriggerFunctions): Promise<ITriggerResponse | undefined>;
5
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DingtalkNodeTrigger = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const streamPushTrigger_1 = require("./triggers/streamPushTrigger");
6
+ const triggerDefinitions = [
7
+ {
8
+ value: 'stream.push',
9
+ name: 'Stream模式事件订阅',
10
+ description: '当钉钉通过 Stream 模式推送事件时触发。',
11
+ properties: streamPushTrigger_1.streamPushTriggerOptions,
12
+ run: streamPushTrigger_1.runStreamPushTrigger,
13
+ },
14
+ ];
15
+ const triggerMap = new Map(triggerDefinitions.map((def) => [def.value, def]));
16
+ class DingtalkNodeTrigger {
17
+ constructor() {
18
+ this.description = {
19
+ displayName: 'Dingtalk Node Trigger',
20
+ name: 'dingtalkNodeTrigger',
21
+ icon: 'file:icon.png',
22
+ group: ['trigger'],
23
+ version: 1,
24
+ description: 'Dingtalk Node Trigger',
25
+ subtitle: '={{($parameter["event"])}}',
26
+ defaults: {
27
+ name: 'Dingtalk Node Trigger',
28
+ },
29
+ inputs: [],
30
+ outputs: ["main"],
31
+ credentials: [
32
+ {
33
+ name: 'dingtalkApi',
34
+ required: true,
35
+ },
36
+ ],
37
+ properties: [
38
+ {
39
+ displayName: 'Event',
40
+ name: 'event',
41
+ type: 'options',
42
+ default: 'stream.push',
43
+ options: triggerDefinitions.map((def) => ({
44
+ name: def.name,
45
+ value: def.value,
46
+ description: def.description,
47
+ })),
48
+ },
49
+ ...triggerDefinitions.flatMap((def) => def.properties),
50
+ ],
51
+ };
52
+ }
53
+ async trigger() {
54
+ const event = this.getNodeParameter('event', 0);
55
+ const definition = triggerMap.get(event);
56
+ if (!definition) {
57
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unsupported trigger event "${event}"`, {
58
+ description: '请选择一个可用的触发类型。',
59
+ });
60
+ }
61
+ return definition.run.call(this);
62
+ }
63
+ }
64
+ exports.DingtalkNodeTrigger = DingtalkNodeTrigger;
65
+ //# sourceMappingURL=DingtalkNodeTrigger.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DingtalkNodeTrigger.node.js","sourceRoot":"","sources":["../../../nodes/DingtalkNode/DingtalkNodeTrigger.node.ts"],"names":[],"mappings":";;;AAAA,+CAQsB;AACtB,oEAA8F;AAU9F,MAAM,kBAAkB,GAAwB;IAC9C;QACE,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,yBAAyB;QACtC,UAAU,EAAE,4CAAwB;QACpC,GAAG,EAAE,wCAAoB;KAC1B;CACF,CAAC;AAEF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAE9E,MAAa,mBAAmB;IAAhC;QACE,gBAAW,GAAyB;YAClC,WAAW,EAAE,uBAAuB;YACpC,IAAI,EAAE,qBAAqB;YAC3B,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,CAAC,SAAS,CAAC;YAClB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,uBAAuB;YACpC,QAAQ,EAAE,4BAA4B;YACtC,QAAQ,EAAE;gBACR,IAAI,EAAE,uBAAuB;aAC9B;YACD,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,QAAyB;YAClC,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,UAAU,EAAE;gBACV;oBACE,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,SAAS;oBAEf,OAAO,EAAE,aAAa;oBACtB,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACxC,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,WAAW,EAAE,GAAG,CAAC,WAAW;qBAC7B,CAAC,CAAC;iBACJ;gBACD,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;aACvD;SACF,CAAC;IAaJ,CAAC;IAXC,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAW,CAAC;QAC1D,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,8BAA8B,KAAK,GAAG,EAAE;gBACnF,WAAW,EAAE,eAAe;aAC7B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AAhDD,kDAgDC"}
@@ -0,0 +1,21 @@
1
+ {
2
+ "node": "@cryozerolabs/n8n-nodes-dingtalk",
3
+ "nodeVersion": "0.5.0",
4
+ "codexVersion": "0.5.0",
5
+ "categories": ["Productivity", "Communication"],
6
+ "resources": {
7
+ "credentialDocumentation": [
8
+ {
9
+ "url": "https://github.com/cryozerolabs/n8n-nodes-dingtalk?tab=readme-ov-file#-%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E9%85%8D%E7%BD%AE"
10
+ }
11
+ ],
12
+ "primaryDocumentation": [
13
+ {
14
+ "url": "https://github.com/cryozerolabs/n8n-nodes-dingtalk?tab=readme-ov-file"
15
+ },
16
+ {
17
+ "url": "https://open.dingtalk.com/document/development/develop-stream-mode-push-server"
18
+ }
19
+ ]
20
+ }
21
+ }
@@ -5,9 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const resource_1 = require("../../../shared/resource");
7
7
  const resourceGetUploadinfo_1 = __importDefault(require("./resourceGetUploadinfo"));
8
+ const uploadAttachment_1 = __importDefault(require("./uploadAttachment"));
8
9
  exports.default = (0, resource_1.makeResourceBundle)({
9
10
  value: 'doc',
10
11
  name: '文档',
11
- operations: [resourceGetUploadinfo_1.default],
12
+ operations: [resourceGetUploadinfo_1.default, uploadAttachment_1.default],
12
13
  });
13
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../nodes/DingtalkNode/resources/doc/index.ts"],"names":[],"mappings":";;;;;AAAA,uDAA8D;AAC9D,oFAA4D;AAE5D,kBAAe,IAAA,6BAAkB,EAAC;IAChC,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,CAAC,+BAAqB,CAAC;CACpC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../nodes/DingtalkNode/resources/doc/index.ts"],"names":[],"mappings":";;;;;AAAA,uDAA8D;AAC9D,oFAA4D;AAC5D,0EAAkD;AAElD,kBAAe,IAAA,6BAAkB,EAAC;IAChC,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,CAAC,+BAAqB,EAAE,0BAAgB,CAAC;CACtD,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { OperationDef } from '../../../shared/operation';
2
+ declare const op: OperationDef;
3
+ export default op;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const n8n_workflow_1 = require("n8n-workflow");
4
+ const request_1 = require("../../../shared/request");
5
+ const operator_1 = require("../../../shared/properties/operator");
6
+ const OP = 'doc.resource.upload';
7
+ const showOnly = { show: { operation: [OP] } };
8
+ const properties = [
9
+ ...(0, operator_1.operatorProps)(showOnly),
10
+ {
11
+ displayName: '文档ID',
12
+ name: 'docId',
13
+ type: 'string',
14
+ default: '',
15
+ required: true,
16
+ hint: 'dentryUuid/documentId/workbookId/baseId',
17
+ displayOptions: showOnly,
18
+ },
19
+ {
20
+ displayName: '二进制文件字段',
21
+ name: 'inputDataFieldName',
22
+ type: 'string',
23
+ default: 'data',
24
+ required: true,
25
+ description: '要处理的二进制文件数据所对应的传入字段名称,例如 data',
26
+ displayOptions: showOnly,
27
+ },
28
+ ];
29
+ const op = {
30
+ value: OP,
31
+ name: '获取资源上传信息并上传',
32
+ description: '获取文档指定资源的上传地址,并上传附件到该资源',
33
+ properties,
34
+ async run(itemIndex) {
35
+ var _a;
36
+ const operatorId = await (0, operator_1.getOperatorId)(this, itemIndex);
37
+ const docId = this.getNodeParameter('docId', itemIndex);
38
+ const inputDataFieldName = this.getNodeParameter('inputDataFieldName', itemIndex);
39
+ const binaryData = this.helpers.assertBinaryData(itemIndex, inputDataFieldName);
40
+ const uploadBuffer = await this.helpers.getBinaryDataBuffer(itemIndex, inputDataFieldName);
41
+ if (!binaryData) {
42
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), '未找到需要上传的文件数据', { itemIndex });
43
+ }
44
+ const fileInfo = {
45
+ filename: (_a = binaryData.fileName) !== null && _a !== void 0 ? _a : 'file',
46
+ size: uploadBuffer.length || 0,
47
+ type: binaryData.mimeType,
48
+ };
49
+ const uploadInfoResp = (await request_1.request.call(this, {
50
+ method: 'POST',
51
+ url: `/doc/docs/resources/${docId}/uploadInfos/query?operatorId=${operatorId}`,
52
+ body: {
53
+ size: fileInfo.size,
54
+ mediaType: fileInfo.type,
55
+ resourceName: fileInfo.filename,
56
+ },
57
+ }));
58
+ this.logger.debug('uploadInfoResp', uploadInfoResp);
59
+ const result = uploadInfoResp === null || uploadInfoResp === void 0 ? void 0 : uploadInfoResp.result;
60
+ const { resourceId, resourceUrl, uploadUrl } = result;
61
+ if (!uploadUrl) {
62
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), '未获取到上传地址', { itemIndex });
63
+ }
64
+ await request_1.request.call(this, {
65
+ method: 'PUT',
66
+ url: uploadUrl,
67
+ headers: {
68
+ 'Content-Type': fileInfo.type,
69
+ },
70
+ body: uploadBuffer,
71
+ json: false,
72
+ encoding: null,
73
+ });
74
+ return {
75
+ json: {
76
+ ...fileInfo,
77
+ resourceId,
78
+ url: resourceUrl,
79
+ },
80
+ pairedItem: { item: itemIndex },
81
+ };
82
+ },
83
+ };
84
+ exports.default = op;
85
+ //# sourceMappingURL=uploadAttachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploadAttachment.js","sourceRoot":"","sources":["../../../../../nodes/DingtalkNode/resources/doc/uploadAttachment.ts"],"names":[],"mappings":";;AAAA,+CAMsB;AAEtB,qDAAkD;AAClD,kEAAmF;AAEnF,MAAM,EAAE,GAAG,qBAAqB,CAAC;AACjC,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAE/C,MAAM,UAAU,GAAsB;IACpC,GAAG,IAAA,wBAAa,EAAC,QAAQ,CAAC;IAC1B;QACE,WAAW,EAAE,MAAM;QACnB,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,yCAAyC;QAC/C,cAAc,EAAE,QAAQ;KACzB;IACD;QACE,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,+BAA+B;QAC5C,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC;AAEF,MAAM,EAAE,GAAiB;IACvB,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,yBAAyB;IACtC,UAAU;IAEV,KAAK,CAAC,GAAG,CAA0B,SAAiB;;QAClD,MAAM,UAAU,GAAG,MAAM,IAAA,wBAAa,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAW,CAAC;QAGlE,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,SAAS,CAAW,CAAC;QAC5F,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAChF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAE3F,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,QAAQ,GAAG;YACf,QAAQ,EAAE,MAAA,UAAU,CAAC,QAAQ,mCAAI,MAAM;YACvC,IAAI,EAAE,YAAY,CAAC,MAAM,IAAI,CAAC;YAC9B,IAAI,EAAE,UAAU,CAAC,QAAQ;SAC1B,CAAC;QAGF,MAAM,cAAc,GAAG,CAAC,MAAM,iBAAO,CAAC,IAAI,CAAC,IAAI,EAAE;YAC/C,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,uBAAuB,KAAK,iCAAiC,UAAU,EAAE;YAC9E,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,SAAS,EAAE,QAAQ,CAAC,IAAI;gBACxB,YAAY,EAAE,QAAQ,CAAC,QAAQ;aAChC;SACF,CAAC,CAAgB,CAAC;QAEnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,MAI9B,CAAC;QACF,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAEtD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,iBAAO,CAAC,IAAI,CAAC,IAAI,EAAE;YACvB,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,SAAS;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,QAAQ,CAAC,IAAI;aAC9B;YACD,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE;gBACJ,GAAG,QAAQ;gBACX,UAAU;gBACV,GAAG,EAAE,WAAW;aACjB;YACD,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAChC,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,kBAAe,EAAE,CAAC"}
@@ -25,7 +25,7 @@ async function notableGetColumns() {
25
25
  date: 'dateTime',
26
26
  user: 'object',
27
27
  department: 'object',
28
- attachment: 'object',
28
+ attachment: 'array',
29
29
  unidirectionalLink: 'object',
30
30
  bidirectionalLink: 'object',
31
31
  url: 'object',