@builder6/onlyoffice 3.2.3 → 3.2.12

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 CHANGED
@@ -1,12 +1,334 @@
1
- OnlyOffice Module for Builder6
2
- ===
1
+ # Builder6 OnlyOffice Module
3
2
 
4
- This module provides a simple way to integrate OnlyOffice into Builder6.
3
+ Builder6 OnlyOffice 模块为 Builder6 平台提供 OnlyOffice 文档编辑器集成,支持在线协作编辑 Word、Excel、PowerPoint Office 文档。
5
4
 
6
- ## Environment Variables
5
+ ## 功能特性
7
6
 
7
+ - **在线文档编辑**: 支持 Word、Excel、PowerPoint 文档在线编辑
8
+ - **实时协作**: 多用户同时编辑同一文档
9
+ - **文档预览**: 支持各种文档格式的在线预览
10
+ - **水印支持**: 可配置的文档编辑水印
11
+ - **JWT 安全**: 使用 JWT 令牌保护文档编辑会话
12
+ - **回调处理**: 处理文档保存和编辑状态回调
13
+ - **权限控制**: 灵活的文档访问和编辑权限配置
14
+ - **版本管理**: 支持文档版本历史记录
15
+
16
+ ## 安装
17
+
18
+ ```bash
19
+ npm install @builder6/onlyoffice
8
20
  ```
9
- B6_ONLYOFFICE_ENABLED=false
21
+
22
+
23
+
24
+ ```bash
25
+ yarn add @builder6/onlyoffice
26
+ ```
27
+
28
+ ## 环境变量
29
+
30
+ ### 基本配置
31
+
32
+ ```bash
33
+ # 启用 OnlyOffice 集成
34
+ B6_ONLYOFFICE_ENABLED=true
35
+
36
+ # OnlyOffice Document Server URL
10
37
  B6_ONLYOFFICE_URL=https://onlyoffice.steedos.cn
11
- B6_ONLYOFFICE_JWT_SECRET=your_secret
12
- ```
38
+
39
+ # JWT 密钥(用于安全通信)
40
+ B6_ONLYOFFICE_JWT_SECRET=your-secret-key
41
+ ```
42
+
43
+ ### 高级配置
44
+
45
+ ```bash
46
+ # 启用默认编辑水印
47
+ B6_ONLYOFFICE_WATERMARK_ENABLED=true
48
+
49
+ # 水印文本
50
+ B6_ONLYOFFICE_WATERMARK_TEXT=Confidential
51
+
52
+ # 水印透明度 (0-1)
53
+ B6_ONLYOFFICE_WATERMARK_OPACITY=0.5
54
+
55
+ # 允许的文档类型(逗号分隔)
56
+ B6_ONLYOFFICE_ALLOWED_TYPES=docx,xlsx,pptx,doc,xls,ppt
57
+
58
+ # 文档保存超时(秒)
59
+ B6_ONLYOFFICE_SAVE_TIMEOUT=60
60
+
61
+ # 回调 URL 前缀
62
+ B6_ONLYOFFICE_CALLBACK_URL_PREFIX=https://your-domain.com
63
+ ```
64
+
65
+ ## 使用示例
66
+
67
+ ### 在 NestJS 应用中集成
68
+
69
+ ```typescript
70
+ import { Module } from '@nestjs/common';
71
+ import { OnlyOfficeModule } from '@builder6/onlyoffice';
72
+
73
+ @Module({
74
+ imports: [OnlyOfficeModule],
75
+ })
76
+ export class AppModule {}
77
+ ```
78
+
79
+ ### 打开文档编辑器
80
+
81
+ ```typescript
82
+ import { OnlyOfficeService } from '@builder6/onlyoffice';
83
+
84
+ constructor(private onlyOfficeService: OnlyOfficeService) {}
85
+
86
+ async openDocument(fileId: string, userId: string) {
87
+ const config = await this.onlyOfficeService.getEditorConfig({
88
+ fileId,
89
+ userId,
90
+ mode: 'edit', // 'edit' 或 'view'
91
+ title: 'Document.docx',
92
+ fileType: 'docx',
93
+ callbackUrl: `https://your-domain.com/api/callback/${fileId}`
94
+ });
95
+
96
+ return config;
97
+ }
98
+ ```
99
+
100
+ ### 前端集成示例
101
+
102
+ ```html
103
+ <!DOCTYPE html>
104
+ <html>
105
+ <head>
106
+ <title>OnlyOffice Editor</title>
107
+ <script type="text/javascript" src="https://onlyoffice.steedos.cn/web-apps/apps/api/documents/api.js"></script>
108
+ </head>
109
+ <body>
110
+ <div id="placeholder"></div>
111
+ <script type="text/javascript">
112
+ // 从后端获取配置
113
+ fetch('/api/v6/onlyoffice/config?fileId=123')
114
+ .then(res => res.json())
115
+ .then(config => {
116
+ new DocsAPI.DocEditor("placeholder", config);
117
+ });
118
+ </script>
119
+ </body>
120
+ </html>
121
+ ```
122
+
123
+ ### 处理文档保存回调
124
+
125
+ ```typescript
126
+ @Post('callback/:fileId')
127
+ async handleCallback(
128
+ @Param('fileId') fileId: string,
129
+ @Body() callbackData: any
130
+ ) {
131
+ // status: 1-编辑中, 2-准备保存, 3-保存错误, 4-关闭无变化, 6-正在编辑, 7-强制保存错误
132
+ const { status, url, users, key } = callbackData;
133
+
134
+ if (status === 2) {
135
+ // 文档已保存,下载新版本
136
+ await this.onlyOfficeService.downloadDocument(url, fileId);
137
+ return { error: 0 };
138
+ }
139
+
140
+ return { error: 0 };
141
+ }
142
+ ```
143
+
144
+ ## API 端点
145
+
146
+ 模块提供以下主要 API 端点:
147
+
148
+ - **GET `/api/v6/onlyoffice/config`**: 获取编辑器配置
149
+ - 查询参数: `fileId`, `mode` (edit/view)
150
+ - **GET `/api/v6/onlyoffice/download/:fileId`**: 下载文档
151
+ - **POST `/api/v6/onlyoffice/callback/:fileId`**: 接收 OnlyOffice 回调
152
+ - **POST `/api/v6/onlyoffice/create`**: 创建新文档
153
+
154
+ ## 支持的文档格式
155
+
156
+ ### 文字处理(Word)
157
+ - `.docx`, `.doc`, `.odt`, `.rtf`, `.txt`, `.html`, `.htm`, `.mht`, `.pdf`
158
+
159
+ ### 电子表格(Excel)
160
+ - `.xlsx`, `.xls`, `.ods`, `.csv`
161
+
162
+ ### 演示文稿(PowerPoint)
163
+ - `.pptx`, `.ppt`, `.odp`
164
+
165
+ ## 编辑器模式
166
+
167
+ ### 编辑模式 (edit)
168
+
169
+ 允许用户编辑文档:
170
+
171
+ ```typescript
172
+ const config = {
173
+ mode: 'edit',
174
+ permissions: {
175
+ edit: true,
176
+ download: true,
177
+ print: true,
178
+ review: true,
179
+ comment: true
180
+ }
181
+ };
182
+ ```
183
+
184
+ ### 查看模式 (view)
185
+
186
+ 只读模式,不允许编辑:
187
+
188
+ ```typescript
189
+ const config = {
190
+ mode: 'view',
191
+ permissions: {
192
+ edit: false,
193
+ download: true,
194
+ print: true
195
+ }
196
+ };
197
+ ```
198
+
199
+ ## 水印配置
200
+
201
+ 启用水印保护文档:
202
+
203
+ ```typescript
204
+ const config = {
205
+ watermark: {
206
+ enabled: true,
207
+ text: 'Confidential',
208
+ diagonal: true,
209
+ opacity: 0.5,
210
+ color: '#FF0000'
211
+ }
212
+ };
213
+ ```
214
+
215
+ ## 协作功能
216
+
217
+ ### 实时协作
218
+
219
+ 多用户同时编辑:
220
+
221
+ ```typescript
222
+ const config = {
223
+ coEditing: {
224
+ mode: 'fast', // 'fast' 或 'strict'
225
+ change: true
226
+ },
227
+ user: {
228
+ id: userId,
229
+ name: userName,
230
+ group: 'team-1'
231
+ }
232
+ };
233
+ ```
234
+
235
+ ### 评论和审阅
236
+
237
+ ```typescript
238
+ const config = {
239
+ permissions: {
240
+ comment: true, // 允许评论
241
+ review: true, // 允许审阅
242
+ reviewGroups: ['editor', 'reviewer']
243
+ }
244
+ };
245
+ ```
246
+
247
+ ## 安全性
248
+
249
+ ### JWT 令牌
250
+
251
+ 所有与 OnlyOffice Document Server 的通信都使用 JWT 签名:
252
+
253
+ ```bash
254
+ B6_ONLYOFFICE_JWT_SECRET=your-very-secret-key
255
+ ```
256
+
257
+ ### 回调验证
258
+
259
+ 模块自动验证来自 OnlyOffice 的回调请求的 JWT 签名。
260
+
261
+ ## 使用场景
262
+
263
+ - **文档协作**: 团队协作编辑 Office 文档
264
+ - **在线办公**: 无需安装 Office 即可编辑文档
265
+ - **文档审阅**: 支持评论、修订和审阅流程
266
+ - **文档预览**: 在线预览各种格式的文档
267
+ - **版本控制**: 管理文档版本历史
268
+
269
+ ## OnlyOffice Document Server 部署
270
+
271
+ ### Docker 部署
272
+
273
+ ```bash
274
+ docker run -i -t -d -p 80:80 \
275
+ -e JWT_ENABLED=true \
276
+ -e JWT_SECRET=your-secret-key \
277
+ onlyoffice/documentserver
278
+ ```
279
+
280
+ ### 配置连接
281
+
282
+ ```bash
283
+ B6_ONLYOFFICE_URL=http://your-server:80
284
+ B6_ONLYOFFICE_JWT_SECRET=your-secret-key
285
+ ```
286
+
287
+ ## 依赖项
288
+
289
+ ### Peer Dependencies
290
+
291
+ - `@builder6/core`: ^3.0.10 - 核心功能模块
292
+ - `@builder6/files`: ^3.0.10 - 文件管理模块
293
+ - `@nestjs/common`: ^11.0.0 - NestJS 核心
294
+ - `@nestjs/core`: ^11.0.0 - NestJS 核心
295
+ - `@nestjs/swagger`: ^11.0.7 - API 文档
296
+
297
+ ## 开发
298
+
299
+ ### 构建
300
+
301
+ ```bash
302
+ npm run build
303
+ ```
304
+
305
+ ### 监听模式
306
+
307
+ ```bash
308
+ npm run build:watch
309
+ ```
310
+
311
+ ### 格式化代码
312
+
313
+ ```bash
314
+ npm run format
315
+ ```
316
+
317
+ ## 故障排查
318
+
319
+ ### 常见问题
320
+
321
+ 1. **编辑器无法加载**: 检查 `B6_ONLYOFFICE_URL` 是否可访问
322
+ 2. **保存失败**: 确保回调 URL 可以从 OnlyOffice 服务器访问
323
+ 3. **JWT 验证失败**: 确保密钥配置一致
324
+ 4. **文档打不开**: 检查文件格式是否支持
325
+
326
+ ## 参考资源
327
+
328
+ - [OnlyOffice API 文档](https://api.onlyoffice.com/editors/basic)
329
+ - [OnlyOffice Document Server](https://github.com/ONLYOFFICE/DocumentServer)
330
+ - [编辑器配置](https://api.onlyoffice.com/editors/config/)
331
+
332
+ ## License
333
+
334
+ MIT
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const testing_1 = require("@nestjs/testing");
4
- const OnlyOffice_controller_1 = require("./OnlyOffice.controller");
4
+ const onlyoffice_controller_1 = require("./onlyoffice.controller");
5
5
  describe('OnlyOfficeController', () => {
6
6
  let controller;
7
7
  beforeEach(async () => {
8
8
  const module = await testing_1.Test.createTestingModule({
9
- controllers: [OnlyOffice_controller_1.OnlyOfficeController],
9
+ controllers: [onlyoffice_controller_1.OnlyOfficeController],
10
10
  }).compile();
11
- controller = module.get(OnlyOffice_controller_1.OnlyOfficeController);
11
+ controller = module.get(onlyoffice_controller_1.OnlyOfficeController);
12
12
  });
13
13
  it('should be defined', () => {
14
14
  expect(controller).toBeDefined();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builder6/onlyoffice",
3
- "version": "3.2.3",
3
+ "version": "3.2.12",
4
4
  "main": "dist/plugin.module.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -26,5 +26,5 @@
26
26
  "publishConfig": {
27
27
  "access": "public"
28
28
  },
29
- "gitHead": "544e8b41e82e41a3a7534cd30219c00d60285c63"
29
+ "gitHead": "6d6e13fed8d4b3c6de14f84dcb6287c5661ea6f6"
30
30
  }