[feature] Update dependencies; Migrate to esm; Create build

This commit is contained in:
Pavel Ostrovskij
2025-05-12 19:17:23 +03:00
parent 66becad2b5
commit e9b531af24
49 changed files with 2618 additions and 1305 deletions

5
.gitignore vendored
View File

@ -10,4 +10,7 @@ node_modules
/Gruntfile.js.out
local-development-*.json
*.pyc
run-develop-local.py
run-develop-local.py
bundle/node_modules
bundle/*.js
bundle/*.exe

View File

@ -3,6 +3,7 @@
"version": "1.0.1",
"homepage": "https://www.onlyoffice.com",
"private": true,
"type": "module",
"dependencies": {
"@aws-sdk/client-s3": "3.797.0",
"@aws-sdk/s3-request-presigner": "3.797.0",

View File

@ -31,10 +31,9 @@
*/
'use strict';
var config = require('config');
var container = require('rhea');
var logger = require('./logger');
const operationContext = require('./operationContext');
import config from 'config';
import container from 'rhea';
import * as operationContext from './operationContext.js';
const cfgRabbitSocketOptions = config.util.cloneDeep(config.get('activemq.connectOptions'));
@ -97,8 +96,10 @@ function closePromise(conn) {
});
}
module.exports.connetPromise = connetPromise;
module.exports.openSenderPromise = openSenderPromise;
module.exports.openReceiverPromise = openReceiverPromise;
module.exports.closePromise = closePromise;
module.exports.RECONNECT_TIMEOUT = RECONNECT_TIMEOUT;
export {
connetPromise,
openSenderPromise,
openReceiverPromise,
closePromise,
RECONNECT_TIMEOUT
};

View File

@ -32,8 +32,8 @@
'use strict';
const config = require('config');
const constants = require('./constants');
import config from 'config';
import * as constants from './constants.js';
function InputCommand(data, copyExplicit) {
//must be set explicitly to prevent vulnerability(downloadAs(with url) creates request to integrator with authorization)
@ -1163,28 +1163,30 @@ const FileStatus = {
const buildVersion = '4.1.2';
const buildNumber = 37;
exports.TaskQueueData = TaskQueueData;
exports.CMailMergeSendData = CMailMergeSendData;
exports.CThumbnailData = CThumbnailData;
exports.CTextParams = CTextParams;
exports.CForceSaveData = CForceSaveData;
exports.InputCommand = InputCommand;
exports.OutputSfcData = OutputSfcData;
exports.OutputMailMerge = OutputMailMerge;
exports.OutputAction = OutputAction;
exports.ConvertStatus = ConvertStatus;
exports.c_oPublishType = c_oPublishType;
exports.c_oAscCsvDelimiter = c_oAscCsvDelimiter;
exports.c_oAscEncodings = c_oAscEncodings;
exports.c_oAscEncodingsMap = c_oAscEncodingsMap;
exports.c_oAscCodePageUtf8 = c_oAscCodePageUtf8;
exports.c_oAscUserAction = c_oAscUserAction;
exports.c_oAscServerCommandErrors = c_oAscServerCommandErrors;
exports.c_oAscForceSaveTypes = c_oAscForceSaveTypes;
exports.c_oAscUrlTypes = c_oAscUrlTypes;
exports.c_oAscSecretType = c_oAscSecretType;
exports.c_oAscQueueType = c_oAscQueueType;
exports.c_oAscUnlockRes = c_oAscUnlockRes;
exports.FileStatus = FileStatus;
exports.buildVersion = buildVersion;
exports.buildNumber = buildNumber;
export {
TaskQueueData,
CMailMergeSendData,
CThumbnailData,
CTextParams,
CForceSaveData,
InputCommand,
OutputSfcData,
OutputMailMerge,
OutputAction,
ConvertStatus,
c_oPublishType,
c_oAscCsvDelimiter,
c_oAscEncodings,
c_oAscEncodingsMap,
c_oAscCodePageUtf8,
c_oAscUserAction,
c_oAscServerCommandErrors,
c_oAscForceSaveTypes,
c_oAscUrlTypes,
c_oAscSecretType,
c_oAscQueueType,
c_oAscUnlockRes,
FileStatus,
buildVersion,
buildNumber
};

View File

@ -32,28 +32,28 @@
'use strict';
exports.DOC_ID_PATTERN = '0-9-.a-zA-Z_=';
exports.DOC_ID_REGEX = new RegExp("^[" + exports.DOC_ID_PATTERN + "]*$", 'i');
exports.DOC_ID_REPLACE_REGEX = new RegExp("[^" + exports.DOC_ID_PATTERN + "]", 'g');
exports.DOC_ID_SOCKET_PATTERN = new RegExp("^/doc/([" + exports.DOC_ID_PATTERN + "]*)/c.+", 'i');
exports.DOC_ID_MAX_LENGTH = 240;
exports.USER_ID_MAX_LENGTH = 240;//255-240=15 symbols to make user id unique
exports.USER_NAME_MAX_LENGTH = 255;
exports.PASSWORD_MAX_LENGTH = 255;//set password limit for DoS protection with long password
exports.EXTENTION_REGEX = /^[a-zA-Z0-9]*$/;
exports.CHAR_DELIMITER = String.fromCharCode(5);
exports.OUTPUT_NAME = 'output';
exports.ONLY_OFFICE_URL_PARAM = 'ooname';
exports.DISPLAY_PREFIX = 'display';
exports.CHANGES_NAME = 'changes';
exports.VIEWER_ONLY = /^(?:(pdf|djvu|xps|oxps))$/;
exports.DEFAULT_DOC_ID = 'docId';
exports.DEFAULT_USER_ID = 'userId';
exports.ALLOWED_PROTO = /^https?$/i;
exports.SHARD_KEY_WOPI_NAME = 'WOPISrc';
exports.SHARD_KEY_API_NAME = 'shardkey';
export const DOC_ID_PATTERN = '0-9-.a-zA-Z_=';
export const DOC_ID_REGEX = new RegExp("^[" + DOC_ID_PATTERN + "]*$", 'i');
export const DOC_ID_REPLACE_REGEX = new RegExp("[^" + DOC_ID_PATTERN + "]", 'g');
export const DOC_ID_SOCKET_PATTERN = new RegExp("^/doc/([" + DOC_ID_PATTERN + "]*)/c.+", 'i');
export const DOC_ID_MAX_LENGTH = 240;
export const USER_ID_MAX_LENGTH = 240;//255-240=15 symbols to make user id unique
export const USER_NAME_MAX_LENGTH = 255;
export const PASSWORD_MAX_LENGTH = 255;//set password limit for DoS protection with long password
export const EXTENTION_REGEX = /^[a-zA-Z0-9]*$/;
export const CHAR_DELIMITER = String.fromCharCode(5);
export const OUTPUT_NAME = 'output';
export const ONLY_OFFICE_URL_PARAM = 'ooname';
export const DISPLAY_PREFIX = 'display';
export const CHANGES_NAME = 'changes';
export const VIEWER_ONLY = /^(?:(pdf|djvu|xps|oxps))$/;
export const DEFAULT_DOC_ID = 'docId';
export const DEFAULT_USER_ID = 'userId';
export const ALLOWED_PROTO = /^https?$/i;
export const SHARD_KEY_WOPI_NAME = 'WOPISrc';
export const SHARD_KEY_API_NAME = 'shardkey';
exports.RIGHTS = {
export const RIGHTS = {
None : 0,
Edit : 1,
Review : 2,
@ -61,14 +61,14 @@ exports.RIGHTS = {
View : 4
};
exports.LICENSE_MODE = {
export const LICENSE_MODE = {
None: 0,
Trial: 1,
Developer: 2,
Limited: 4
};
exports.LICENSE_RESULT = {
export const LICENSE_RESULT = {
Error : 1,
Expired : 2,
Success : 3,
@ -87,231 +87,232 @@ exports.LICENSE_RESULT = {
NotBefore: 16
};
exports.LICENSE_CONNECTIONS = 20;
exports.LICENSE_USERS = 3;
exports.LICENSE_EXPIRE_USERS_ONE_DAY = 24 * 60 * 60; // day in seconds
export const LICENSE_CONNECTIONS = 20;
export const LICENSE_USERS = 3;
export const LICENSE_EXPIRE_USERS_ONE_DAY = 24 * 60 * 60; // day in seconds
exports.AVS_OFFICESTUDIO_FILE_UNKNOWN = 0x0000;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT = 0x0040;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0001;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0002;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0003;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0004;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0005;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0006;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0007;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0008;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2 = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0009;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000a;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCM = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000b;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTX = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000c;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTM = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000d;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT_FLAT = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000e;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_OTT = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000f;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC_FLAT = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0010;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX_FLAT = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0011;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML_IN_CONTAINER = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0012;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX_PACKAGE = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0014;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_OFORM = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0015;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0016;
exports.AVS_OFFICESTUDIO_FILE_DOCUMENT_OFORM_PDF = exports.AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0017;
export const AVS_OFFICESTUDIO_FILE_UNKNOWN = 0x0000;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT = 0x0040;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0001;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0002;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0003;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0004;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0005;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0006;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0007;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0008;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2 = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0009;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000a;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCM = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000b;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTX = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000c;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTM = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000d;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT_FLAT = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000e;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_OTT = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000f;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC_FLAT = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0010;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX_FLAT = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0011;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML_IN_CONTAINER = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0012;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX_PACKAGE = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0014;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_OFORM = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0015;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0016;
export const AVS_OFFICESTUDIO_FILE_DOCUMENT_OFORM_PDF = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0017;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION = 0x0080;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0001;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0002;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0003;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0004;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTM = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0005;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSM = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0006;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_POTX = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0007;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_POTM = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0008;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP_FLAT = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0009;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_OTP = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x000a;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX_PACKAGE = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x000b;
exports.AVS_OFFICESTUDIO_FILE_PRESENTATION_ODG = exports.AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x000c;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION = 0x0080;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0001;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0002;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0003;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0004;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTM = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0005;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSM = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0006;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_POTX = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0007;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_POTM = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0008;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP_FLAT = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0009;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_OTP = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x000a;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX_PACKAGE = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x000b;
export const AVS_OFFICESTUDIO_FILE_PRESENTATION_ODG = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x000c;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET = 0x0100;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0001;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0002;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0003;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0004;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSM = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0005;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTX = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0006;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0007;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSB = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0008;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS_FLAT = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0009;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_OTS = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x000a;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX_FLAT = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x000b;
exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX_PACKAGE = exports.AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x000c;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET = 0x0100;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0001;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0002;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0003;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0004;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSM = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0005;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTX = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0006;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0007;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSB = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0008;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS_FLAT = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0009;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_OTS = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x000a;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX_FLAT = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x000b;
export const AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX_PACKAGE = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x000c;
exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM = 0x0200;
exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF = exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0001;
exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF = exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0002;
exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU = exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0003;
exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS = exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0004;
exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG = exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0005;
exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR = exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0006;
exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR_MENU = exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0007;
exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR_CANVAS = exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0008;
exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDFA = exports.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0009;
export const AVS_OFFICESTUDIO_FILE_CROSSPLATFORM = 0x0200;
export const AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0001;
export const AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0002;
export const AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0003;
export const AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0004;
export const AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0005;
export const AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0006;
export const AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR_MENU = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0007;
export const AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR_CANVAS = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0008;
export const AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDFA = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0009;
exports.AVS_OFFICESTUDIO_FILE_IMAGE = 0x0400;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_JPG = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x0001;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_TIFF = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x0002;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_TGA = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x0003;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_GIF = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x0004;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_PNG = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x0005;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_EMF = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x0006;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_WMF = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x0007;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_BMP = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x0008;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_CR2 = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x0009;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_PCX = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x000a;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_RAS = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x000b;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_PSD = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x000c;
exports.AVS_OFFICESTUDIO_FILE_IMAGE_ICO = exports.AVS_OFFICESTUDIO_FILE_IMAGE + 0x000d;
export const AVS_OFFICESTUDIO_FILE_IMAGE = 0x0400;
export const AVS_OFFICESTUDIO_FILE_IMAGE_JPG = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0001;
export const AVS_OFFICESTUDIO_FILE_IMAGE_TIFF = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0002;
export const AVS_OFFICESTUDIO_FILE_IMAGE_TGA = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0003;
export const AVS_OFFICESTUDIO_FILE_IMAGE_GIF = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0004;
export const AVS_OFFICESTUDIO_FILE_IMAGE_PNG = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0005;
export const AVS_OFFICESTUDIO_FILE_IMAGE_EMF = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0006;
export const AVS_OFFICESTUDIO_FILE_IMAGE_WMF = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0007;
export const AVS_OFFICESTUDIO_FILE_IMAGE_BMP = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0008;
export const AVS_OFFICESTUDIO_FILE_IMAGE_CR2 = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0009;
export const AVS_OFFICESTUDIO_FILE_IMAGE_PCX = AVS_OFFICESTUDIO_FILE_IMAGE + 0x000a;
export const AVS_OFFICESTUDIO_FILE_IMAGE_RAS = AVS_OFFICESTUDIO_FILE_IMAGE + 0x000b;
export const AVS_OFFICESTUDIO_FILE_IMAGE_PSD = AVS_OFFICESTUDIO_FILE_IMAGE + 0x000c;
export const AVS_OFFICESTUDIO_FILE_IMAGE_ICO = AVS_OFFICESTUDIO_FILE_IMAGE + 0x000d;
exports.AVS_OFFICESTUDIO_FILE_OTHER = 0x0800;
exports.AVS_OFFICESTUDIO_FILE_OTHER_EXTRACT_IMAGE = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x0001;
exports.AVS_OFFICESTUDIO_FILE_OTHER_MS_OFFCRYPTO = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x0002;
exports.AVS_OFFICESTUDIO_FILE_OTHER_HTMLZIP = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x0003;
exports.AVS_OFFICESTUDIO_FILE_OTHER_OLD_DOCUMENT = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x0004;
exports.AVS_OFFICESTUDIO_FILE_OTHER_OLD_PRESENTATION = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x0005;
exports.AVS_OFFICESTUDIO_FILE_OTHER_OLD_DRAWING = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x0006;
exports.AVS_OFFICESTUDIO_FILE_OTHER_OOXML = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x0007;
exports.AVS_OFFICESTUDIO_FILE_OTHER_JSON = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x0008; // Для mail-merge
exports.AVS_OFFICESTUDIO_FILE_OTHER_ODF = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x000a;
exports.AVS_OFFICESTUDIO_FILE_OTHER_MS_MITCRYPTO = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x000b;
exports.AVS_OFFICESTUDIO_FILE_OTHER_MS_VBAPROJECT = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x000c;
exports.AVS_OFFICESTUDIO_FILE_OTHER_PACKAGE_IN_OLE = exports.AVS_OFFICESTUDIO_FILE_OTHER + 0x000d;
export const AVS_OFFICESTUDIO_FILE_OTHER = 0x0800;
export const AVS_OFFICESTUDIO_FILE_OTHER_EXTRACT_IMAGE = AVS_OFFICESTUDIO_FILE_OTHER + 0x0001;
export const AVS_OFFICESTUDIO_FILE_OTHER_MS_OFFCRYPTO = AVS_OFFICESTUDIO_FILE_OTHER + 0x0002;
export const AVS_OFFICESTUDIO_FILE_OTHER_HTMLZIP = AVS_OFFICESTUDIO_FILE_OTHER + 0x0003;
export const AVS_OFFICESTUDIO_FILE_OTHER_OLD_DOCUMENT = AVS_OFFICESTUDIO_FILE_OTHER + 0x0004;
export const AVS_OFFICESTUDIO_FILE_OTHER_OLD_PRESENTATION = AVS_OFFICESTUDIO_FILE_OTHER + 0x0005;
export const AVS_OFFICESTUDIO_FILE_OTHER_OLD_DRAWING = AVS_OFFICESTUDIO_FILE_OTHER + 0x0006;
export const AVS_OFFICESTUDIO_FILE_OTHER_OOXML = AVS_OFFICESTUDIO_FILE_OTHER + 0x0007;
export const AVS_OFFICESTUDIO_FILE_OTHER_JSON = AVS_OFFICESTUDIO_FILE_OTHER + 0x0008; // Для mail-merge
export const AVS_OFFICESTUDIO_FILE_OTHER_ODF = AVS_OFFICESTUDIO_FILE_OTHER + 0x000a;
export const AVS_OFFICESTUDIO_FILE_OTHER_MS_MITCRYPTO = AVS_OFFICESTUDIO_FILE_OTHER + 0x000b;
export const AVS_OFFICESTUDIO_FILE_OTHER_MS_VBAPROJECT = AVS_OFFICESTUDIO_FILE_OTHER + 0x000c;
export const AVS_OFFICESTUDIO_FILE_OTHER_PACKAGE_IN_OLE = AVS_OFFICESTUDIO_FILE_OTHER + 0x000d;
exports.AVS_OFFICESTUDIO_FILE_TEAMLAB = 0x1000;
exports.AVS_OFFICESTUDIO_FILE_TEAMLAB_DOCY = exports.AVS_OFFICESTUDIO_FILE_TEAMLAB + 0x0001;
exports.AVS_OFFICESTUDIO_FILE_TEAMLAB_XLSY = exports.AVS_OFFICESTUDIO_FILE_TEAMLAB + 0x0002;
exports.AVS_OFFICESTUDIO_FILE_TEAMLAB_PPTY = exports.AVS_OFFICESTUDIO_FILE_TEAMLAB + 0x0003;
export const AVS_OFFICESTUDIO_FILE_TEAMLAB = 0x1000;
export const AVS_OFFICESTUDIO_FILE_TEAMLAB_DOCY = AVS_OFFICESTUDIO_FILE_TEAMLAB + 0x0001;
export const AVS_OFFICESTUDIO_FILE_TEAMLAB_XLSY = AVS_OFFICESTUDIO_FILE_TEAMLAB + 0x0002;
export const AVS_OFFICESTUDIO_FILE_TEAMLAB_PPTY = AVS_OFFICESTUDIO_FILE_TEAMLAB + 0x0003;
exports.AVS_OFFICESTUDIO_FILE_CANVAS = 0x2000;
exports.AVS_OFFICESTUDIO_FILE_CANVAS_WORD = exports.AVS_OFFICESTUDIO_FILE_CANVAS + 0x0001;
exports.AVS_OFFICESTUDIO_FILE_CANVAS_SPREADSHEET = exports.AVS_OFFICESTUDIO_FILE_CANVAS + 0x0002;
exports.AVS_OFFICESTUDIO_FILE_CANVAS_PRESENTATION = exports.AVS_OFFICESTUDIO_FILE_CANVAS + 0x0003;
exports.AVS_OFFICESTUDIO_FILE_CANVAS_PDF = exports.AVS_OFFICESTUDIO_FILE_CANVAS + 0x0004;
export const AVS_OFFICESTUDIO_FILE_CANVAS = 0x2000;
export const AVS_OFFICESTUDIO_FILE_CANVAS_WORD = AVS_OFFICESTUDIO_FILE_CANVAS + 0x0001;
export const AVS_OFFICESTUDIO_FILE_CANVAS_SPREADSHEET = AVS_OFFICESTUDIO_FILE_CANVAS + 0x0002;
export const AVS_OFFICESTUDIO_FILE_CANVAS_PRESENTATION = AVS_OFFICESTUDIO_FILE_CANVAS + 0x0003;
export const AVS_OFFICESTUDIO_FILE_CANVAS_PDF = AVS_OFFICESTUDIO_FILE_CANVAS + 0x0004;
exports.AVS_OFFICESTUDIO_FILE_DRAW = 0x4000;
exports.AVS_OFFICESTUDIO_FILE_DRAW_VSDX = exports.AVS_OFFICESTUDIO_FILE_DRAW + 0x0001;
exports.AVS_OFFICESTUDIO_FILE_DRAW_VSSX = exports.AVS_OFFICESTUDIO_FILE_DRAW + 0x0002;
exports.AVS_OFFICESTUDIO_FILE_DRAW_VSTX = exports.AVS_OFFICESTUDIO_FILE_DRAW + 0x0003;
exports.AVS_OFFICESTUDIO_FILE_DRAW_VSDM = exports.AVS_OFFICESTUDIO_FILE_DRAW + 0x0004;
exports.AVS_OFFICESTUDIO_FILE_DRAW_VSSM = exports.AVS_OFFICESTUDIO_FILE_DRAW + 0x0005;
exports.AVS_OFFICESTUDIO_FILE_DRAW_VSTM = exports.AVS_OFFICESTUDIO_FILE_DRAW + 0x0006;
export const AVS_OFFICESTUDIO_FILE_DRAW = 0x4000;
export const AVS_OFFICESTUDIO_FILE_DRAW_VSDX = AVS_OFFICESTUDIO_FILE_DRAW + 0x0001;
export const AVS_OFFICESTUDIO_FILE_DRAW_VSSX = AVS_OFFICESTUDIO_FILE_DRAW + 0x0002;
export const AVS_OFFICESTUDIO_FILE_DRAW_VSTX = AVS_OFFICESTUDIO_FILE_DRAW + 0x0003;
export const AVS_OFFICESTUDIO_FILE_DRAW_VSDM = AVS_OFFICESTUDIO_FILE_DRAW + 0x0004;
export const AVS_OFFICESTUDIO_FILE_DRAW_VSSM = AVS_OFFICESTUDIO_FILE_DRAW + 0x0005;
export const AVS_OFFICESTUDIO_FILE_DRAW_VSTM = AVS_OFFICESTUDIO_FILE_DRAW + 0x0006;
exports.NO_ERROR = 0;
exports.UNKNOWN = -1;
exports.READ_REQUEST_STREAM = -3;
exports.WEB_REQUEST = -4;
exports.CHANGE_DOC_INFO = -5;
exports.TASK_QUEUE = -20;
exports.TASK_RESULT = -40;
exports.STORAGE = -60;
exports.STORAGE_FILE_NO_FOUND = -61;
exports.STORAGE_READ = -62;
exports.STORAGE_WRITE = -63;
exports.STORAGE_REMOVE_DIR = -64;
exports.STORAGE_CREATE_DIR = -65;
exports.STORAGE_GET_INFO = -66;
exports.CONVERT = -80;
exports.CONVERT_DOWNLOAD = -81;
exports.CONVERT_UNKNOWN_FORMAT = -82;
exports.CONVERT_TIMEOUT = -83;
exports.CONVERT_READ_FILE = -84;
exports.CONVERT_DRM_UNSUPPORTED = -85;
exports.CONVERT_CORRUPTED = -86;
exports.CONVERT_LIBREOFFICE = -87;
exports.CONVERT_PARAMS = -88;
exports.CONVERT_NEED_PARAMS = -89;
exports.CONVERT_DRM = -90;
exports.CONVERT_PASSWORD = -91;
exports.CONVERT_ICU = -92;
exports.CONVERT_LIMITS = -93;
exports.CONVERT_TEMPORARY = -94;
exports.CONVERT_DETECT = -95;
exports.CONVERT_CELLLIMITS = -96;
exports.CONVERT_DEAD_LETTER = -99;
exports.UPLOAD = -100;
exports.UPLOAD_CONTENT_LENGTH = -101;
exports.UPLOAD_EXTENSION = -102;
exports.UPLOAD_COUNT_FILES = -103;
exports.UPLOAD_URL = -104;
exports.VKEY = -120;
exports.VKEY_ENCRYPT = -121;
exports.VKEY_KEY_EXPIRE = -122;
exports.VKEY_USER_COUNT_EXCEED = -123;
exports.VKEY_TIME_EXPIRE = -124;
exports.VKEY_TIME_INCORRECT = -125;
exports.EDITOR_CHANGES = -160;
exports.PASSWORD = -180;
export const NO_ERROR = 0;
export const UNKNOWN = -1;
export const READ_REQUEST_STREAM = -3;
export const WEB_REQUEST = -4;
export const CHANGE_DOC_INFO = -5;
export const TASK_QUEUE = -20;
export const TASK_RESULT = -40;
export const STORAGE = -60;
export const STORAGE_FILE_NO_FOUND = -61;
export const STORAGE_READ = -62;
export const STORAGE_WRITE = -63;
export const STORAGE_REMOVE_DIR = -64;
export const STORAGE_CREATE_DIR = -65;
export const STORAGE_GET_INFO = -66;
export const CONVERT = -80;
export const CONVERT_DOWNLOAD = -81;
export const CONVERT_UNKNOWN_FORMAT = -82;
export const CONVERT_TIMEOUT = -83;
export const CONVERT_READ_FILE = -84;
export const CONVERT_DRM_UNSUPPORTED = -85;
export const CONVERT_CORRUPTED = -86;
export const CONVERT_LIBREOFFICE = -87;
export const CONVERT_PARAMS = -88;
export const CONVERT_NEED_PARAMS = -89;
export const CONVERT_DRM = -90;
export const CONVERT_PASSWORD = -91;
export const CONVERT_ICU = -92;
export const CONVERT_LIMITS = -93;
export const CONVERT_TEMPORARY = -94;
export const CONVERT_DETECT = -95;
export const CONVERT_CELLLIMITS = -96;
export const CONVERT_DEAD_LETTER = -99;
export const UPLOAD = -100;
export const UPLOAD_CONTENT_LENGTH = -101;
export const UPLOAD_EXTENSION = -102;
export const UPLOAD_COUNT_FILES = -103;
export const UPLOAD_URL = -104;
export const VKEY = -120;
export const VKEY_ENCRYPT = -121;
export const VKEY_KEY_EXPIRE = -122;
export const VKEY_USER_COUNT_EXCEED = -123;
export const VKEY_TIME_EXPIRE = -124;
export const VKEY_TIME_INCORRECT = -125;
export const EDITOR_CHANGES = -160;
export const PASSWORD = -180;
//Quorum queues internally only support two priorities: high and normal.
//Messages without a priority set will be mapped to normal as will priorities 0 - 4.
//Messages with a priority higher than 4 will be mapped to high.
exports.QUEUE_PRIORITY_VERY_LOW = 2;
exports.QUEUE_PRIORITY_LOW = 3;
exports.QUEUE_PRIORITY_NORMAL = 4;
exports.QUEUE_PRIORITY_HIGH = 5;
exports.QUEUE_PRIORITY_VERY_HIGH = 6;
export const QUEUE_PRIORITY_VERY_LOW = 2;
export const QUEUE_PRIORITY_LOW = 3;
export const QUEUE_PRIORITY_NORMAL = 4;
export const QUEUE_PRIORITY_HIGH = 5;
export const QUEUE_PRIORITY_VERY_HIGH = 6;
exports.EDITOR_TYPE_WORD = 0;
exports.EDITOR_TYPE_SPREADSHEET = 1;
exports.EDITOR_TYPE_PRESENTATION = 2;
exports.EDITOR_TYPE_CONVERTATION = 3;
export const EDITOR_TYPE_WORD = 0;
export const EDITOR_TYPE_SPREADSHEET = 1;
export const EDITOR_TYPE_PRESENTATION = 2;
export const EDITOR_TYPE_CONVERTATION = 3;
exports.PACKAGE_TYPE_OS = 0;
exports.PACKAGE_TYPE_I = 1;
exports.PACKAGE_TYPE_D = 2;
export const PACKAGE_TYPE_OS = 0;
export const PACKAGE_TYPE_I = 1;
export const PACKAGE_TYPE_D = 2;
exports.REDIS_KEY_SHUTDOWN = 'shutdown';
exports.REDIS_KEY_LICENSE = 'license';
exports.REDIS_KEY_LICENSE_T = 'licenseT';
export const REDIS_KEY_SHUTDOWN = 'shutdown';
export const REDIS_KEY_LICENSE = 'license';
export const REDIS_KEY_LICENSE_T = 'licenseT';
exports.SHUTDOWN_CODE = 4001;
exports.SHUTDOWN_REASON = 'server shutdown';
exports.SESSION_IDLE_CODE = 4002;
exports.SESSION_IDLE_REASON = 'idle session expires';
exports.SESSION_ABSOLUTE_CODE = 4003;
exports.SESSION_ABSOLUTE_REASON = 'absolute session expires';
exports.ACCESS_DENIED_CODE = 4004;
exports.ACCESS_DENIED_REASON = 'access deny';
exports.JWT_EXPIRED_CODE = 4005;
exports.JWT_EXPIRED_REASON = 'token:';
exports.JWT_ERROR_CODE = 4006;
exports.JWT_ERROR_REASON = 'token:';
exports.DROP_CODE = 4007;
exports.DROP_REASON = 'drop';
exports.UPDATE_VERSION_CODE = 4008;
exports.UPDATE_VERSION = 'update version';
exports.NO_CACHE_CODE = 4009;
exports.NO_CACHE = 'no cache';
exports.RESTORE_CODE = 4010;
exports.RESTORE = 'no cache';
export const SHUTDOWN_CODE = 4001;
export const SHUTDOWN_REASON = 'server shutdown';
export const SESSION_IDLE_CODE = 4002;
export const SESSION_IDLE_REASON = 'idle session expires';
export const SESSION_ABSOLUTE_CODE = 4003;
export const SESSION_ABSOLUTE_REASON = 'absolute session expires';
export const ACCESS_DENIED_CODE = 4004;
export const ACCESS_DENIED_REASON = 'access deny';
export const JWT_EXPIRED_CODE = 4005;
export const JWT_EXPIRED_REASON = 'token:';
export const JWT_ERROR_CODE = 4006;
export const JWT_ERROR_REASON = 'token:';
export const DROP_CODE = 4007;
export const DROP_REASON = 'drop';
export const UPDATE_VERSION_CODE = 4008;
export const UPDATE_VERSION = 'update version';
export const NO_CACHE_CODE = 4009;
export const NO_CACHE = 'no cache';
export const RESTORE_CODE = 4010;
export const RESTORE = 'no cache';
exports.CONTENT_DISPOSITION_INLINE = 'inline';
exports.CONTENT_DISPOSITION_ATTACHMENT = 'attachment';
export const CONTENT_DISPOSITION_INLINE = 'inline';
export const CONTENT_DISPOSITION_ATTACHMENT = 'attachment';
exports.CONN_CLOSED = "closed";
export const CONN_CLOSED = "closed";
exports.FILE_STATUS_OK = 'ok';
exports.FILE_STATUS_UPDATE_VERSION = 'updateversion';
export const FILE_STATUS_OK = 'ok';
export const FILE_STATUS_UPDATE_VERSION = 'updateversion';
exports.ACTIVEMQ_QUEUE_PREFIX = 'queue://';
exports.ACTIVEMQ_TOPIC_PREFIX = 'topic://';
export const ACTIVEMQ_QUEUE_PREFIX = 'queue://';
export const ACTIVEMQ_TOPIC_PREFIX = 'topic://';
exports.TEMPLATES_DEFAULT_LOCALE = 'en-US';
exports.TEMPLATES_FOLDER_LOCALE_COLLISON_MAP = {
export const TEMPLATES_DEFAULT_LOCALE = 'en-US';
export const TEMPLATES_FOLDER_LOCALE_COLLISON_MAP = {
'en': 'en-US',
'pt': 'pt-BR',
'zh': 'zh-CH',
'pt-PT': 'pt-PT',
'zh-TW': 'zh-TW'
};
exports.TABLE_RESULT_SCHEMA = [
export const TABLE_RESULT_SCHEMA = [
'tenant',
'id',
'status',
@ -325,7 +326,8 @@ exports.TABLE_RESULT_SCHEMA = [
'password',
'additional'
];
exports.TABLE_CHANGES_SCHEMA = [
export const TABLE_CHANGES_SCHEMA = [
'tenant',
'id',
'change_id',

View File

@ -32,9 +32,9 @@
'use strict';
var path = require('path');
var constants = require('./constants');
const {open} = require("node:fs/promises");
import path from 'path';
import * as constants from './constants.js';
import { open } from 'node:fs/promises';
function getImageFormatBySignature(buffer) {
var length = buffer.length;
@ -196,7 +196,8 @@ function getImageFormatBySignature(buffer) {
return constants.AVS_OFFICESTUDIO_FILE_UNKNOWN;
}
exports.getFormatFromString = function(ext) {
export function getFormatFromString(ext) {
if (!ext) {
return constants.AVS_OFFICESTUDIO_FILE_UNKNOWN;
}
@ -356,8 +357,9 @@ exports.getFormatFromString = function(ext) {
default:
return constants.AVS_OFFICESTUDIO_FILE_UNKNOWN;
}
};
exports.getStringFromFormat = function(format) {
}
export function getStringFromFormat(format) {
switch (format) {
case constants.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX:
return 'docx';
@ -535,8 +537,9 @@ exports.getStringFromFormat = function(format) {
default:
return '';
}
};
exports.getImageFormat = function(ctx, buffer) {
}
export function getImageFormat(ctx, buffer) {
var format = constants.AVS_OFFICESTUDIO_FILE_UNKNOWN;
try {
//signature
@ -546,23 +549,27 @@ exports.getImageFormat = function(ctx, buffer) {
ctx.logger.error('error getImageFormat: %s', e.stack);
}
return format;
};
exports.isDocumentFormat = function(format) {
}
export function isDocumentFormat(format) {
return 0 !== (format & constants.AVS_OFFICESTUDIO_FILE_DOCUMENT) ||
format === constants.AVS_OFFICESTUDIO_FILE_CANVAS_WORD ||
format === constants.AVS_OFFICESTUDIO_FILE_TEAMLAB_DOCY;
};
exports.isSpreadsheetFormat = function(format) {
}
export function isSpreadsheetFormat(format) {
return 0 !== (format & constants.AVS_OFFICESTUDIO_FILE_SPREADSHEET) ||
format === constants.AVS_OFFICESTUDIO_FILE_CANVAS_SPREADSHEET ||
format === constants.AVS_OFFICESTUDIO_FILE_TEAMLAB_XLSY;
};
exports.isPresentationFormat = function(format) {
}
export function isPresentationFormat(format) {
return 0 !== (format & constants.AVS_OFFICESTUDIO_FILE_PRESENTATION) ||
format === constants.AVS_OFFICESTUDIO_FILE_CANVAS_PRESENTATION ||
format === constants.AVS_OFFICESTUDIO_FILE_TEAMLAB_PPTY;
};
exports.isOOXFormat = function(format) {
}
export function isOOXFormat(format) {
return constants.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX === format
|| constants.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCM === format
|| constants.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTX === format
@ -580,14 +587,16 @@ exports.isOOXFormat = function(format) {
|| constants.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSM === format
|| constants.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTX === format
|| constants.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM === format;
};
exports.isBrowserEditorFormat = function(format) {
}
export function isBrowserEditorFormat(format) {
return constants.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF === format ||
constants.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDFA === format ||
constants.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU === format ||
constants.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS === format;
};
function getDocumentFormatBySignature(buffer) {
}
export function getDocumentFormatBySignature(buffer) {
if (!buffer) {
return constants.AVS_OFFICESTUDIO_FILE_UNKNOWN;
}
@ -609,8 +618,9 @@ function getDocumentFormatBySignature(buffer) {
// Unknown format
return constants.AVS_OFFICESTUDIO_FILE_UNKNOWN;
};
async function getDocumentFormatByFile(file) {
}
export async function getDocumentFormatByFile(file) {
let firstBytesLen = 100;
let buffer;
let fd;
@ -626,6 +636,4 @@ async function getDocumentFormatByFile(file) {
await fd?.close();
}
return getDocumentFormatBySignature(buffer);
};
exports.getDocumentFormatBySignature = getDocumentFormatBySignature;
exports.getDocumentFormatByFile = getDocumentFormatByFile
}

View File

@ -32,12 +32,12 @@
'use strict';
const constants = require('./constants');
import * as constants from './constants.js';
const buildDate = '6/29/2016';
const oBuildDate = new Date(buildDate);
exports.readLicense = async function () {
export async function readLicense() {
const c_LR = constants.LICENSE_RESULT;
var now = new Date();
var startDate = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), 1));//first day of current month
@ -62,6 +62,6 @@ exports.readLicense = async function () {
alias: "",
multitenancy: false
}, null];
};
}
exports.packageType = constants.PACKAGE_TYPE_OS;
export const packageType = constants.PACKAGE_TYPE_OS;

View File

@ -32,10 +32,9 @@
'use strict';
var config = require('config');
var util = require('util');
var log4js = require('log4js');
import config from 'config';
import util from 'util';
import log4js from 'log4js';
// https://stackoverflow.com/a/36643588
var dateToJSONWithTZ = function (d) {
@ -73,27 +72,35 @@ if (config.get('log.options.replaceConsole')) {
console.error = logger.error.bind(logger);
console.debug = logger.debug.bind(logger);
}
exports.getLogger = function (){
export function getLogger() {
return log4js.getLogger.apply(log4js, Array.prototype.slice.call(arguments));
};
exports.trace = function (){
}
export function trace() {
return logger.trace.apply(logger, Array.prototype.slice.call(arguments));
};
exports.debug = function (){
}
export function debug() {
return logger.debug.apply(logger, Array.prototype.slice.call(arguments));
};
exports.info = function (){
}
export function info() {
return logger.info.apply(logger, Array.prototype.slice.call(arguments));
};
exports.warn = function (){
}
export function warn() {
return logger.warn.apply(logger, Array.prototype.slice.call(arguments));
};
exports.error = function (){
}
export function error() {
return logger.error.apply(logger, Array.prototype.slice.call(arguments));
};
exports.fatal = function (){
}
export function fatal() {
return logger.fatal.apply(logger, Array.prototype.slice.call(arguments));
};
exports.shutdown = function (callback) {
}
export function shutdown(callback) {
return log4js.shutdown(callback);
};
}

View File

@ -32,8 +32,8 @@
'use strict';
const config = require('config');
const nodemailer = require('nodemailer');
import config from 'config';
import nodemailer from 'nodemailer';
const cfgConnection = config.util.cloneDeep(config.get('email.connectionConfiguration'));
@ -93,7 +93,7 @@ function transportersRelease() {
smtpTransporters.clear();
}
module.exports = {
export {
createTransporter,
send,
deleteTransporter,

View File

@ -31,19 +31,20 @@
*/
'use strict';
const util = require('util');
const config = require('config');
const ms = require('ms');
const mailService = require('./mailService');
import util from 'util';
import config from 'config';
import ms from 'ms';
import * as mailService from './mailService.js';
import * as cfgEditorDataStorageModule from './../../DocService/sources/editorDataMemory.js';
import * as cfgEditorStatStorageModule from './../../DocService/sources/editorDataRedis.js';
const cfgMailServer = config.util.cloneDeep(config.get('email.smtpServerConfiguration'));
const cfgMailMessageDefaults = config.util.cloneDeep(config.get('email.contactDefaults'));
const cfgEditorDataStorage = config.get('services.CoAuthoring.server.editorDataStorage');
const cfgEditorStatStorage = config.get('services.CoAuthoring.server.editorStatStorage');
const editorStatStorage = require('./../../DocService/sources/' + (cfgEditorStatStorage || cfgEditorDataStorage));
const editorStat = editorStatStorage.EditorStat ? new editorStatStorage.EditorStat() : new editorStatStorage();
const editorStatStorage = cfgEditorStatStorage? cfgEditorStatStorageModule: cfgEditorDataStorage ? cfgEditorDataStorageModule: null;
const editorStat = editorStatStorage.EditorStat ? new editorStatStorage.EditorStat() : new editorStatStorage.default();
const notificationTypes = {
LICENSE_EXPIRATION_WARNING: 'licenseExpirationWarning',
LICENSE_EXPIRATION_ERROR: 'licenseExpirationError',
@ -144,7 +145,7 @@ async function notifyRule(ctx, tenRule, title, message) {
}
}
module.exports = {
export {
notificationTypes,
notify
};

View File

@ -32,10 +32,10 @@
'use strict';
const utils = require('./utils');
const logger = require('./logger');
const constants = require('./constants');
const tenantManager = require('./tenantManager');
import * as utils from './utils.js';
import * as logger from './logger.js';
import * as constants from './constants.js';
import * as tenantManager from './tenantManager.js';
function Context(){
this.logger = logger.getLogger('nodeJS');
@ -148,5 +148,5 @@ function getImpl(object, property) {
return getImpl(value, elems.slice(1));
};
exports.Context = Context;
exports.global = new Context();
export { Context };
export const global = new Context();

View File

@ -31,15 +31,15 @@
*/
'use strict';
var config = require('config');
var amqp = require('amqplib/callback_api');
var logger = require('./logger');
const operationContext = require('./operationContext');
import config from 'config';
import amqp from 'amqplib/callback_api.js';
import * as logger from './logger.js';
import * as operationContext from './operationContext.js';
var cfgRabbitUrl = config.get('rabbitmq.url');
var cfgRabbitSocketOptions = config.util.cloneDeep(config.get('rabbitmq.socketOptions'));
const cfgRabbitUrl = config.get('rabbitmq.url');
const cfgRabbitSocketOptions = config.util.cloneDeep(config.get('rabbitmq.socketOptions'));
var RECONNECT_TIMEOUT = 1000;
const RECONNECT_TIMEOUT = 1000;
function connetPromise(closeCallback) {
return new Promise(function(resolve, reject) {
@ -134,11 +134,13 @@ function closePromise(conn) {
});
}
module.exports.connetPromise = connetPromise;
module.exports.createChannelPromise = createChannelPromise;
module.exports.createConfirmChannelPromise = createConfirmChannelPromise;
module.exports.assertExchangePromise = assertExchangePromise;
module.exports.assertQueuePromise = assertQueuePromise;
module.exports.consumePromise = consumePromise;
module.exports.closePromise = closePromise;
module.exports.RECONNECT_TIMEOUT = RECONNECT_TIMEOUT;
export {
connetPromise,
createChannelPromise,
createConfirmChannelPromise,
assertExchangePromise,
assertQueuePromise,
consumePromise,
closePromise,
RECONNECT_TIMEOUT
};

View File

@ -32,19 +32,21 @@
'use strict';
var statsD = require('node-statsd');
var configStatsD = require('config').get('statsd');
import statsD from 'node-statsd';
import config from 'config';
var cfgStatsDUseMetrics = configStatsD.get('useMetrics');
var cfgStatsDHost = configStatsD.get('host');
var cfgStatsDPort = configStatsD.get('port');
var cfgStatsDPrefix = configStatsD.get('prefix');
const configStatsD = config.get('statsd');
var clientStatsD = null;
const cfgStatsDUseMetrics = configStatsD.get('useMetrics');
const cfgStatsDHost = configStatsD.get('host');
const cfgStatsDPort = configStatsD.get('port');
const cfgStatsDPrefix = configStatsD.get('prefix');
let clientStatsD = null;
if(cfgStatsDUseMetrics) {
clientStatsD = new statsD({host: cfgStatsDHost, port:cfgStatsDPort, prefix: cfgStatsDPrefix});
}
exports.getClient = function() {
export function getClient() {
return clientStatsD;
};
}

View File

@ -1,16 +1,13 @@
'use strict';
const fs = require('fs');
const path = require('path');
const { BlobServiceClient, StorageSharedKeyCredential, generateBlobSASQueryParameters, BlobSASPermissions } = require('@azure/storage-blob');
let mime;
import('mime').then(module => {
mime = module.default;
})
const config = require('config');
const { Readable } = require('stream');
const utils = require('../utils');
const ms = require('ms');
const commonDefines = require('../commondefines');
import fs from 'fs';
import path from 'path';
import { BlobServiceClient, StorageSharedKeyCredential, generateBlobSASQueryParameters, BlobSASPermissions } from '@azure/storage-blob';
import config from 'config';
import { Readable } from 'stream';
import * as utils from '../utils.js';
import ms from 'ms';
import * as commonDefines from '../commondefines.js';
import mime from 'mime';
const cfgExpSessionAbsolute = ms(config.get('services.CoAuthoring.expire.sessionabsolute'));
const MAX_DELETE_OBJECTS = 1000;
@ -218,7 +215,7 @@ function needServeStatic() {
return false;
}
module.exports = {
export {
headObject,
getObject,
createReadStream,
@ -228,6 +225,6 @@ module.exports = {
listObjects,
deleteObject,
deletePath,
getSignedUrl: getSignedUrlWrapper,
needServeStatic
getSignedUrlWrapper as getSignedUrl,
needServeStatic,
};

View File

@ -31,17 +31,24 @@
*/
'use strict';
const os = require('os');
const cluster = require('cluster');
var config = require('config');
var utils = require('../utils');
import os from 'os';
import cluster from 'cluster';
import config from 'config';
import * as utils from '../utils.js';
import * as storageFs from './storage-fs.js';
import * as storageAz from './storage-az.js';
import * as storageS3 from './storage-s3.js';
import * as tenantManager from '../tenantManager.js';
const cfgCacheStorage = config.get('storage');
const cfgPersistentStorage = utils.deepMergeObjects({}, cfgCacheStorage, config.get('persistentStorage'));
const cacheStorage = require('./' + cfgCacheStorage.name);
const persistentStorage = require('./' + cfgPersistentStorage.name);
const tenantManager = require('../tenantManager');
const cacheStorage = cfgCacheStorage.name === 'storage-fs' ? storageFs : cfgCacheStorage.name === 'storage-az' ? storageAz : cfgCacheStorage.name === 'storage-s3' ? storageS3 : null;
const persistentStorage = cfgPersistentStorage.name === 'storage-fs' ? storageFs : cfgPersistentStorage.name === 'storage-az' ? storageAz : cfgPersistentStorage.name === 'storage-s3' ? storageS3 : null;
// export { init };
// export { cacheStorage, persistentStorage, tenantManager };
const HEALTH_CHECK_KEY_MAX = 10000;
@ -193,7 +200,7 @@ function needServeStatic(opt_specialDir) {
return storage.needServeStatic();
}
module.exports = {
export {
headObject,
getObject,
createReadStream,

View File

@ -32,15 +32,14 @@
'use strict';
const { cp, rm, mkdir } = require('fs/promises');
const { stat, readFile, writeFile } = require('fs/promises');
var path = require('path');
var utils = require("../utils");
var crypto = require('crypto');
const ms = require('ms');
const config = require('config');
const commonDefines = require('../commondefines');
const constants = require('../constants');
import { cp, rm, mkdir, stat, readFile, writeFile } from 'fs/promises';
import path from 'path';
import * as utils from '../utils.js';
import crypto from 'crypto';
import ms from 'ms';
import config from 'config';
import * as commonDefines from '../commondefines.js';
import * as constants from '../constants.js';
const cfgExpSessionAbsolute = ms(config.get('services.CoAuthoring.expire.sessionabsolute'));
@ -168,7 +167,7 @@ function needServeStatic() {
return true;
}
module.exports = {
export {
headObject,
getObject,
createReadStream,

View File

@ -31,24 +31,21 @@
*/
'use strict';
const fs = require('fs');
const url = require('url');
const { Agent: HttpsAgent } = require('https');
const { Agent: HttpAgent } = require('http');
const path = require('path');
const { S3Client, ListObjectsCommand, HeadObjectCommand} = require("@aws-sdk/client-s3");
const { GetObjectCommand, PutObjectCommand, CopyObjectCommand} = require("@aws-sdk/client-s3");
const { DeleteObjectsCommand, DeleteObjectCommand } = require("@aws-sdk/client-s3");
const { getSignedUrl } = require("@aws-sdk/s3-request-presigner");
const { NodeHttpHandler } = require("@smithy/node-http-handler");
let mime;
import('mime').then(module => {
mime = module.default;
})
const config = require('config');
const utils = require('../utils');
const ms = require('ms');
const commonDefines = require('../commondefines');
import fs from 'fs';
import url from 'url';
import { Agent as HttpsAgent } from 'https';
import { Agent as HttpAgent } from 'http';
import path from 'path';
import { S3Client, ListObjectsCommand, HeadObjectCommand } from '@aws-sdk/client-s3';
import { GetObjectCommand, PutObjectCommand, CopyObjectCommand } from '@aws-sdk/client-s3';
import { DeleteObjectsCommand, DeleteObjectCommand } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
import { NodeHttpHandler } from '@smithy/node-http-handler';
import mime from 'mime';
import config from 'config';
import * as utils from '../utils.js';
import ms from 'ms';
import * as commonDefines from '../commondefines.js';
const cfgExpSessionAbsolute = ms(config.get('services.CoAuthoring.expire.sessionabsolute'));
const cfgRequestDefaults = config.util.cloneDeep(config.get('services.CoAuthoring.requestDefaults'));
@ -256,16 +253,16 @@ function needServeStatic() {
return false;
}
module.exports = {
headObject,
getObject,
createReadStream,
putObject,
uploadObject,
copyObject,
listObjects,
deleteObject,
deletePath,
getSignedUrl: getSignedUrlWrapper,
needServeStatic
export {
headObject,
getObject,
createReadStream,
putObject,
uploadObject,
copyObject,
listObjects,
deleteObject,
deletePath,
getSignedUrlWrapper as getSignedUrl,
needServeStatic,
};

View File

@ -31,16 +31,16 @@
*/
'use strict';
var config = require('config');
var events = require('events');
var util = require('util');
var co = require('co');
var utils = require('./utils');
var constants = require('./constants');
var rabbitMQCore = require('./rabbitMQCore');
var activeMQCore = require('./activeMQCore');
const commonDefines = require('./commondefines');
const operationContext = require('./operationContext');
import config from 'config';
import { EventEmitter } from 'events';
import util from 'util';
import co from 'co';
import * as utils from './utils.js';
import * as constants from './constants.js';
import * as rabbitMQCore from './rabbitMQCore.js';
import * as activeMQCore from './activeMQCore.js';
import * as commonDefines from './commondefines.js';
import * as operationContext from './operationContext.js';
const cfgMaxRedeliveredCount = config.get('FileConverter.converter.maxRedeliveredCount');
const cfgQueueType = config.get('queue.type');
@ -496,115 +496,125 @@ if (commonDefines.c_oAscQueueType.rabbitmq === cfgQueueType) {
healthCheck = healthCheckActive;
}
function TaskQueueRabbitMQ(simulateErrorResponse) {
this.isClose = false;
this.connection = null;
this.channelConvertTask = null;
this.channelConvertTaskReceive = null;
this.channelConvertDead = null;
this.channelConvertResponse = null;
this.channelConvertResponseReceive = null;
this.channelDelayed = null;
this.addTaskStore = [];
this.addDelayedStore = [];
this.channelConvertTaskData = {};
this.channelConvertResponseData = {};
this.channelDelayedData = {};
this.simulateErrorResponse = simulateErrorResponse;
}
util.inherits(TaskQueueRabbitMQ, events.EventEmitter);
TaskQueueRabbitMQ.prototype.init = function (isAddTask, isAddResponse, isAddTaskReceive, isAddResponseReceive, isEmitDead, isAddDelayed, callback) {
init(this, isAddTask, isAddResponse, isAddTaskReceive, isAddResponseReceive, isEmitDead, isAddDelayed, callback);
};
TaskQueueRabbitMQ.prototype.initPromise = function(isAddTask, isAddResponse, isAddTaskReceive, isAddResponseReceive, isEmitDead, isAddDelayed) {
var t = this;
return new Promise(function(resolve, reject) {
init(t, isAddTask, isAddResponse, isAddTaskReceive, isAddResponseReceive, isEmitDead, isAddDelayed, function(err) {
if (err) {
reject(err);
class TaskQueueRabbitMQ extends EventEmitter {
constructor(simulateErrorResponse) {
super();
this.isClose = false;
this.connection = null;
this.channelConvertTask = null;
this.channelConvertTaskReceive = null;
this.channelConvertDead = null;
this.channelConvertResponse = null;
this.channelConvertResponseReceive = null;
this.channelDelayed = null;
this.addTaskStore = [];
this.addDelayedStore = [];
this.channelConvertTaskData = {};
this.channelConvertResponseData = {};
this.channelDelayedData = {};
this.simulateErrorResponse = simulateErrorResponse;
}
init(isAddTask, isAddResponse, isAddTaskReceive, isAddResponseReceive, isEmitDead, isAddDelayed, callback) {
init(this, isAddTask, isAddResponse, isAddTaskReceive, isAddResponseReceive, isEmitDead, isAddDelayed, callback);
}
initPromise(isAddTask, isAddResponse, isAddTaskReceive, isAddResponseReceive, isEmitDead, isAddDelayed) {
var t = this;
return new Promise(function(resolve, reject) {
init(t, isAddTask, isAddResponse, isAddTaskReceive, isAddResponseReceive, isEmitDead, isAddDelayed, function(err) {
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
addTask(task, priority, opt_expiration, opt_headers) {
task.setVisibilityTimeout(cfgVisibilityTimeout);
return addTaskString(this, JSON.stringify(task), priority, opt_expiration);
}
addResponse(task) {
var t = this;
return new Promise(function (resolve, reject) {
var content = Buffer.from(JSON.stringify(task));
if (null != t.channelConvertResponse) {
addResponse(t, content, function (err, ok) {
if (null != err) {
reject(err);
} else {
resolve();
}
});
} else {
resolve();
}
});
});
};
TaskQueueRabbitMQ.prototype.addTask = function (task, priority, opt_expiration, opt_headers) {
task.setVisibilityTimeout(cfgVisibilityTimeout);
return addTaskString(this, JSON.stringify(task), priority, opt_expiration);
};
TaskQueueRabbitMQ.prototype.addResponse = function (task) {
var t = this;
return new Promise(function (resolve, reject) {
var content = Buffer.from(JSON.stringify(task));
if (null != t.channelConvertResponse) {
addResponse(t, content, function (err, ok) {
if (null != err) {
reject(err);
} else {
resolve();
}
});
} else {
resolve();
}
});
};
TaskQueueRabbitMQ.prototype.addDelayed = function (task, ttl) {
var t = this;
return new Promise(function (resolve, reject) {
var content = new Buffer(JSON.stringify(task));
if (null != t.channelDelayed) {
addDelayed(t, content, ttl, function (err, ok) {
if (null != err) {
reject(err);
} else {
resolve();
}
});
} else {
t.addDelayedStore.push({task: content, ttl: ttl});
resolve();
}
});
};
TaskQueueRabbitMQ.prototype.close = function () {
let t = this;
return co(function* () {
t.isClose = true;
if (t.channelConvertTask) {
yield close(t.channelConvertTask);
}
if (t.channelConvertTaskReceive) {
yield close(t.channelConvertTaskReceive);
}
if (t.channelConvertDead) {
yield close(t.channelConvertDead);
}
if (t.channelConvertResponse) {
yield close(t.channelConvertResponse);
}
if (t.channelConvertResponseReceive) {
yield close(t.channelConvertResponseReceive);
}
if (t.channelDelayed) {
yield close(t.channelDelayed);
}
yield close(t.connection);
});
};
TaskQueueRabbitMQ.prototype.closeOrWait = function() {
if (commonDefines.c_oAscQueueType.rabbitmq === cfgQueueType) {
return this.close();
} else {
//todo remove sleep
//sleep to wait acknowledge
return this.close().then(() => {
return utils.sleep(1000);
}
addDelayed(task, ttl) {
var t = this;
return new Promise(function (resolve, reject) {
var content = new Buffer(JSON.stringify(task));
if (null != t.channelDelayed) {
addDelayed(t, content, ttl, function (err, ok) {
if (null != err) {
reject(err);
} else {
resolve();
}
});
} else {
t.addDelayedStore.push({task: content, ttl: ttl});
resolve();
}
});
}
};
TaskQueueRabbitMQ.prototype.healthCheck = function() {
return healthCheck(this);
};
module.exports = TaskQueueRabbitMQ;
async close() {
let t = this;
return co(function* () {
t.isClose = true;
if (t.channelConvertTask) {
yield close(t.channelConvertTask);
}
if (t.channelConvertTaskReceive) {
yield close(t.channelConvertTaskReceive);
}
if (t.channelConvertDead) {
yield close(t.channelConvertDead);
}
if (t.channelConvertResponse) {
yield close(t.channelConvertResponse);
}
if (t.channelConvertResponseReceive) {
yield close(t.channelConvertResponseReceive);
}
if (t.channelDelayed) {
yield close(t.channelDelayed);
}
yield close(t.connection);
});
}
closeOrWait() {
if (commonDefines.c_oAscQueueType.rabbitmq === cfgQueueType) {
return this.close();
} else {
//todo remove sleep
//sleep to wait acknowledge
return this.close().then(() => {
return utils.sleep(1000);
});
}
}
healthCheck() {
return healthCheck(this);
}
}
export default TaskQueueRabbitMQ;

View File

@ -32,15 +32,15 @@
'use strict';
const config = require('config');
const co = require('co');
const NodeCache = require( "node-cache" );
const license = require('./../../Common/sources/license');
const constants = require('./../../Common/sources/constants');
const commonDefines = require('./../../Common/sources/commondefines');
const utils = require('./../../Common/sources/utils');
const { readFile, readdir } = require('fs/promises');
const path = require('path');
import config from 'config';
import co from 'co';
import NodeCache from 'node-cache';
import * as license from './license.js';
import * as constants from './constants.js';
import * as commonDefines from './commondefines.js';
import * as utils from './utils.js';
import { readFile, readdir } from 'fs/promises';
import path from 'path';
const cfgTenantsBaseDomain = config.get('tenants.baseDomain');
const cfgTenantsBaseDir = config.get('tenants.baseDir');
@ -413,16 +413,18 @@ async function readLicenseTenant(ctx, licenseFile, baseVerifiedLicense) {
return [res, oLicense];
}
exports.getAllTenants = getAllTenants;
exports.getDefautTenant = getDefautTenant;
exports.getTenantByConnection = getTenantByConnection;
exports.getTenantByRequest = getTenantByRequest;
exports.getTenantPathPrefix = getTenantPathPrefix;
exports.getTenantConfig = getTenantConfig;
exports.getTenantSecret = getTenantSecret;
exports.getTenantLicense = getTenantLicense;
exports.getServerLicense = getServerLicense;
exports.setDefLicense = setDefLicense;
exports.isMultitenantMode = isMultitenantMode;
exports.setMultitenantMode = setMultitenantMode;
exports.isDefaultTenant = isDefaultTenant;
export {
getAllTenants,
getDefautTenant,
getTenantByConnection,
getTenantByRequest,
getTenantPathPrefix,
getTenantConfig,
getTenantSecret,
getTenantLicense,
getServerLicense,
setDefLicense,
isMultitenantMode,
setMultitenantMode,
isDefaultTenant
};

View File

@ -33,39 +33,36 @@
'use strict';
//Fix EPROTO error in node 8.x at some web sites(https://github.com/nodejs/node/issues/21513)
require("tls").DEFAULT_ECDH_CURVE = "auto";
import { DEFAULT_ECDH_CURVE } from 'tls';
// DEFAULT_ECDH_CURVE = "auto";
const { pipeline } = require('node:stream/promises');
const { buffer } = require('node:stream/consumers');
const { Transform } = require('stream');
var config = require('config');
var fs = require('fs');
var path = require('path');
const crypto = require('crypto');
var url = require('url');
var axios = require('../node_modules/axios/dist/node/axios.cjs');
var co = require('co');
var URI = require("uri-js-replace");
let escapeStringRegexp;
import('escape-string-regexp').then(module => {
escapeStringRegexp = module.default;
})
const ipaddr = require('ipaddr.js');
const getDnsCache = require('dnscache');
const jwt = require('jsonwebtoken');
const NodeCache = require( "node-cache" );
const ms = require('ms');
const constants = require('./constants');
const commonDefines = require('./commondefines');
const forwarded = require('forwarded');
const { RequestFilteringHttpAgent, RequestFilteringHttpsAgent } = require("request-filtering-agent");
const https = require('https');
const http = require('http');
const ca = require('win-ca/api');
const util = require('util');
const contentDisposition = require('content-disposition');
const operationContext = require("./operationContext");
import { pipeline } from 'node:stream/promises';
import { buffer } from 'node:stream/consumers';
import { Transform } from 'stream';
import config from 'config';
import fs from 'fs';
import path from 'path';
import crypto from 'crypto';
import url from 'url';
import axios from 'axios';
import co from 'co';
import URI from 'uri-js-replace';
import ipaddr from 'ipaddr.js';
import getDnsCache from 'dnscache';
import jwt from 'jsonwebtoken';
import NodeCache from 'node-cache';
import ms from 'ms';
import * as constants from './constants.js';
import * as commonDefines from './commondefines.js';
import forwarded from 'forwarded';
import { RequestFilteringHttpAgent, RequestFilteringHttpsAgent } from 'request-filtering-agent';
import https from 'https';
import http from 'http';
import ca from 'win-ca/api/index.js';
import util from 'util';
import contentDisposition from 'content-disposition';
import * as operationContext from './operationContext.js';
import escapeStringRegexp from 'escape-string-regexp';
//Clone sealed config objects before passing to external libraries using config.util.cloneDeep
const cfgDnsCache = config.util.cloneDeep(config.get('dnscache'));
@ -93,6 +90,7 @@ const cfgWinCa = config.util.cloneDeep(config.get('win-ca'));
ca(cfgWinCa);
const minimumIterationsByteLength = 4;
const dnscache = getDnsCache(cfgDnsCache);
@ -113,7 +111,7 @@ function getIpFilterRule(address) {
}
const pemfileCache = new NodeCache({stdTTL: ms(cfgExpPemStdTtl) / 1000, checkperiod: ms(cfgExpPemCheckPeriod) / 1000, errorOnMissing: false, useClones: true});
exports.getConvertionTimeout = function(opt_ctx) {
export function getConvertionTimeout(opt_ctx) {
if (opt_ctx) {
const tenVisibilityTimeout = opt_ctx.getCfg('queue.visibilityTimeout', cfgVisibilityTimeout);
const tenQueueRetentionPeriod = opt_ctx.getCfg('queue.retentionPeriod', cfgQueueRetentionPeriod);
@ -123,13 +121,13 @@ exports.getConvertionTimeout = function(opt_ctx) {
}
}
exports.addSeconds = function(date, sec) {
export function addSeconds(date, sec) {
date.setSeconds(date.getSeconds() + sec);
};
exports.getMillisecondsOfHour = function(date) {
export function getMillisecondsOfHour(date) {
return (date.getUTCMinutes() * 60 + date.getUTCSeconds()) * 1000 + date.getUTCMilliseconds();
};
exports.encodeXml = function(value) {
export function encodeXml(value) {
return value.replace(/[<>&'"\r\n\t\xA0]/g, function (c) {
switch (c) {
case '<': return '&lt;';
@ -144,7 +142,7 @@ exports.encodeXml = function(value) {
}
});
};
function fsStat(fsPath) {
export function fsStat(fsPath) {
return new Promise(function(resolve, reject) {
fs.stat(fsPath, function(err, stats) {
if (err) {
@ -155,7 +153,6 @@ function fsStat(fsPath) {
});
});
}
exports.fsStat = fsStat;
function fsReadDir(fsPath) {
return new Promise(function(resolve, reject) {
fs.readdir(fsPath, function(err, list) {
@ -192,7 +189,7 @@ function* walkDir(fsPath, results, optNoSubDir, optOnlyFolders) {
}
}
}
exports.listFolders = function(fsPath, optNoSubDir) {
export function listFolders(fsPath, optNoSubDir) {
return co(function* () {
let stats, list = [];
try {
@ -207,7 +204,7 @@ exports.listFolders = function(fsPath, optNoSubDir) {
return list;
});
};
exports.listObjects = function(fsPath, optNoSubDir) {
export function listObjects(fsPath, optNoSubDir) {
return co(function* () {
let stats, list = [];
try {
@ -226,12 +223,12 @@ exports.listObjects = function(fsPath, optNoSubDir) {
return list;
});
};
exports.sleep = function(ms) {
export function sleep(ms) {
return new Promise(function(resolve) {
setTimeout(resolve, ms);
});
};
exports.readFile = function(file) {
export function readFile(file) {
return new Promise(function(resolve, reject) {
fs.readFile(file, function(err, data) {
if (err) {
@ -242,12 +239,10 @@ exports.readFile = function(file) {
});
});
};
function getContentDisposition (opt_filename, opt_useragent, opt_type) {
export function getContentDisposition (opt_filename, opt_useragent, opt_type) {
let type = opt_type || constants.CONTENT_DISPOSITION_ATTACHMENT;
return contentDisposition(opt_filename, {type: type});
}
exports.getContentDisposition = getContentDisposition;
function isAllowDirectRequest(ctx, uri, isInJwtToken) {
let res = false;
const tenExternalRequestDirectIfIn = ctx.getCfg('externalRequest.directIfIn', cfgExternalRequestDirectIfIn);
@ -335,7 +330,7 @@ function changeOptionsForCompatibilityWithRequest(options, httpAgentOptions, htt
* @param {boolean} opt_returnStream - Optional flag to return stream.
* @returns {Promise<{response: axios.AxiosResponse, sha256: string|null, body: Buffer|null, stream: NodeJS.ReadableStream|null}>} - A promise that resolves to object containing response, sha256 hash, and body (null if opt_streamWriter is provided).
*/
async function downloadUrlPromise(ctx, uri, optTimeout, optLimit, opt_Authorization, opt_filterPrivate, opt_headers, opt_returnStream) {
export async function downloadUrlPromise(ctx, uri, optTimeout, optLimit, opt_Authorization, opt_filterPrivate, opt_headers, opt_returnStream) {
const tenTenantRequestDefaults = ctx.getCfg('services.CoAuthoring.requestDefaults', cfgRequestDefaults);
const tenTokenOutboxHeader = ctx.getCfg('services.CoAuthoring.token.outbox.header', cfgTokenOutboxHeader);
const tenTokenOutboxPrefix = ctx.getCfg('services.CoAuthoring.token.outbox.prefix', cfgTokenOutboxPrefix);
@ -415,7 +410,7 @@ async function downloadUrlPromise(ctx, uri, optTimeout, optLimit, opt_Authorizat
}
}
async function postRequestPromise(ctx, uri, postData, postDataStream, postDataSize, optTimeout, opt_Authorization, opt_isInJwtToken, opt_headers) {
export async function postRequestPromise(ctx, uri, postData, postDataStream, postDataSize, optTimeout, opt_Authorization, opt_isInJwtToken, opt_headers) {
const tenTenantRequestDefaults = ctx.getCfg('services.CoAuthoring.requestDefaults', cfgRequestDefaults);
const tenTokenOutboxHeader = ctx.getCfg('services.CoAuthoring.token.outbox.header', cfgTokenOutboxHeader);
const tenTokenOutboxPrefix = ctx.getCfg('services.CoAuthoring.token.outbox.prefix', cfgTokenOutboxPrefix);
@ -497,9 +492,7 @@ async function postRequestPromise(ctx, uri, postData, postDataStream, postDataSi
throw err;
}
}
exports.postRequestPromise = postRequestPromise;
exports.downloadUrlPromise = downloadUrlPromise;
exports.mapAscServerErrorToOldError = function(error) {
export const mapAscServerErrorToOldError = function(error) {
var res = -1;
switch (error) {
case constants.NO_ERROR :
@ -564,15 +557,15 @@ exports.mapAscServerErrorToOldError = function(error) {
function fillXmlResponse(val) {
var xml = '<?xml version="1.0" encoding="utf-8"?><FileResult>';
if (undefined != val.error) {
xml += '<Error>' + exports.encodeXml(val.error.toString()) + '</Error>';
xml += '<Error>' + encodeXml(val.error.toString()) + '</Error>';
} else {
if (val.fileUrl) {
xml += '<FileUrl>' + exports.encodeXml(val.fileUrl) + '</FileUrl>';
xml += '<FileUrl>' + encodeXml(val.fileUrl) + '</FileUrl>';
} else {
xml += '<FileUrl/>';
}
if (val.fileType) {
xml += '<FileType>' + exports.encodeXml(val.fileType) + '</FileType>';
xml += '<FileType>' + encodeXml(val.fileType) + '</FileType>';
} else {
xml += '<FileType/>';
}
@ -583,7 +576,7 @@ function fillXmlResponse(val) {
return xml;
}
function fillResponseSimple(res, str, contentType) {
export function fillResponseSimple(res, str, contentType) {
let body = Buffer.from(str, 'utf-8');
res.setHeader('Content-Type', contentType + '; charset=UTF-8');
res.setHeader('Content-Length', body.length);
@ -602,10 +595,10 @@ function _fillResponse(res, output, isJSON) {
fillResponseSimple(res, data, contentType);
}
function fillResponse(req, res, convertStatus, isJSON) {
export function fillResponse(req, res, convertStatus, isJSON) {
let output;
if (constants.NO_ERROR != convertStatus.err) {
output = {error: exports.mapAscServerErrorToOldError(convertStatus.err)};
output = {error: mapAscServerErrorToOldError(convertStatus.err)};
} else {
output = {fileUrl: convertStatus.url, fileType: convertStatus.filetype, percent: (convertStatus.end ? 100 : 0), endConvert: convertStatus.end};
}
@ -621,22 +614,17 @@ function fillResponse(req, res, convertStatus, isJSON) {
_fillResponse(res, output, isJSON);
}
exports.fillResponseSimple = fillResponseSimple;
exports.fillResponse = fillResponse;
function fillResponseBuilder(res, key, urls, end, error) {
export function fillResponseBuilder(res, key, urls, end, error) {
let output;
if (constants.NO_ERROR != error) {
output = {error: exports.mapAscServerErrorToOldError(error)};
output = {error: mapAscServerErrorToOldError(error)};
} else {
output = {key: key, urls: urls, end: end};
}
_fillResponse(res, output, true);
}
exports.fillResponseBuilder = fillResponseBuilder;
function promiseCreateWriteStream(strPath, optOptions) {
export function promiseCreateWriteStream(strPath, optOptions) {
return new Promise(function(resolve, reject) {
var file = fs.createWriteStream(strPath, optOptions);
var errorCallback = function(e) {
@ -649,23 +637,20 @@ function promiseCreateWriteStream(strPath, optOptions) {
});
});
};
exports.promiseCreateWriteStream = promiseCreateWriteStream;
function promiseWaitDrain(stream) {
export function promiseWaitDrain(stream) {
return new Promise(function(resolve, reject) {
stream.once('drain', resolve);
});
}
exports.promiseWaitDrain = promiseWaitDrain;
function promiseWaitClose(stream) {
export function promiseWaitClose(stream) {
return new Promise(function(resolve, reject) {
stream.once('close', resolve);
});
}
exports.promiseWaitClose = promiseWaitClose;
function promiseCreateReadStream(strPath) {
export function promiseCreateReadStream(strPath) {
return new Promise(function(resolve, reject) {
var file = fs.createReadStream(strPath);
var errorCallback = function(e) {
@ -678,8 +663,7 @@ function promiseCreateReadStream(strPath) {
});
});
};
exports.promiseCreateReadStream = promiseCreateReadStream;
exports.compareStringByLength = function(x, y) {
export const compareStringByLength = function(x, y) {
if (x && y) {
if (x.length == y.length) {
return x.localeCompare(y);
@ -695,7 +679,7 @@ exports.compareStringByLength = function(x, y) {
}
return 0;
};
exports.promiseRedis = function(client, func) {
export const promiseRedis = function(client, func) {
var newArguments = Array.prototype.slice.call(arguments, 2);
return new Promise(function(resolve, reject) {
newArguments.push(function(err, data) {
@ -708,13 +692,12 @@ exports.promiseRedis = function(client, func) {
func.apply(client, newArguments);
});
};
exports.containsAllAscii = function(str) {
export const containsAllAscii = function(str) {
return /^[\000-\177]*$/.test(str);
};
function containsAllAsciiNP(str) {
export function containsAllAsciiNP(str) {
return /^[\040-\176]*$/.test(str);//non-printing characters
}
exports.containsAllAsciiNP = containsAllAsciiNP;
function getDomain(hostHeader, forwardedHostHeader) {
return forwardedHostHeader || hostHeader || 'localhost';
};
@ -734,7 +717,7 @@ function getBaseUrl(protocol, hostHeader, forwardedProtoHeader, forwardedHostHea
}
return url;
}
function getBaseUrlByConnection(ctx, conn) {
export function getBaseUrlByConnection(ctx, conn) {
conn = conn.request;
//Header names are lower-cased. https://nodejs.org/api/http.html#messageheaders
let cloudfrontForwardedProto = conn.headers['cloudfront-forwarded-proto'];
@ -747,7 +730,7 @@ function getBaseUrlByConnection(ctx, conn) {
host, forwardedHost, forwardedProto, forwardedPrefix, cloudfrontForwardedProto);
return getBaseUrl('', host, proto, forwardedHost, forwardedPrefix);
}
function getBaseUrlByRequest(ctx, req) {
export function getBaseUrlByRequest(ctx, req) {
//case-insensitive match. https://expressjs.com/en/api.html#req.get
let cloudfrontForwardedProto = req.get('cloudfront-forwarded-proto');
let forwardedProto = req.get('x-forwarded-proto');
@ -760,40 +743,32 @@ function getBaseUrlByRequest(ctx, req) {
protocol, host, forwardedHost, forwardedProto, forwardedPrefix, cloudfrontForwardedProto);
return getBaseUrl(protocol, host, proto, forwardedHost, forwardedPrefix);
}
exports.getBaseUrlByConnection = getBaseUrlByConnection;
exports.getBaseUrlByRequest = getBaseUrlByRequest;
function getDomainByConnection(ctx, conn) {
export function getDomainByConnection(ctx, conn) {
let incomingMessage = conn.request;
let host = incomingMessage.headers['host'];
let forwardedHost = incomingMessage.headers['x-forwarded-host'];
ctx.logger.debug("getDomainByConnection headers['host']=%s headers['x-forwarded-host']=%s", host, forwardedHost);
return getDomain(host, forwardedHost);
}
function getDomainByRequest(ctx, req) {
export function getDomainByRequest(ctx, req) {
let host = req.get('host');
let forwardedHost = req.get('x-forwarded-host');
ctx.logger.debug("getDomainByRequest headers['host']=%s headers['x-forwarded-host']=%s", host, forwardedHost);
return getDomain(req.get('host'), req.get('x-forwarded-host'));
}
exports.getDomainByConnection = getDomainByConnection;
exports.getDomainByRequest = getDomainByRequest;
function getShardKeyByConnection(ctx, conn) {
export function getShardKeyByConnection(ctx, conn) {
return conn?.handshake?.query?.[constants.SHARD_KEY_API_NAME];
}
function getWopiSrcByConnection(ctx, conn) {
export function getWopiSrcByConnection(ctx, conn) {
return conn?.handshake?.query?.[constants.SHARD_KEY_WOPI_NAME];
}
function getShardKeyByRequest(ctx, req) {
export function getShardKeyByRequest(ctx, req) {
return req.query?.[constants.SHARD_KEY_API_NAME];
}
function getWopiSrcByRequest(ctx, req) {
export function getWopiSrcByRequest(ctx, req) {
return req.query?.[constants.SHARD_KEY_WOPI_NAME];
}
exports.getShardKeyByConnection = getShardKeyByConnection;
exports.getWopiSrcByConnection = getWopiSrcByConnection;
exports.getShardKeyByRequest = getShardKeyByRequest;
exports.getWopiSrcByRequest = getWopiSrcByRequest;
function stream2Buffer(stream) {
export function stream2Buffer(stream) {
return new Promise(function(resolve, reject) {
if (!stream.readable) {
resolve(Buffer.alloc(0));
@ -813,8 +788,7 @@ function stream2Buffer(stream) {
stream.on('error', onEnd);
});
}
exports.stream2Buffer = stream2Buffer;
function changeOnlyOfficeUrl(inputUrl, strPath, optFilename) {
export function changeOnlyOfficeUrl(inputUrl, strPath, optFilename) {
//onlyoffice file server expects url end with file extension
if (-1 == inputUrl.indexOf('?')) {
inputUrl += '?';
@ -823,8 +797,7 @@ function changeOnlyOfficeUrl(inputUrl, strPath, optFilename) {
}
return inputUrl + constants.ONLY_OFFICE_URL_PARAM + '=' + constants.OUTPUT_NAME + path.extname(optFilename || strPath);
}
exports.changeOnlyOfficeUrl = changeOnlyOfficeUrl;
function pipeStreams(from, to, isEnd) {
export function pipeStreams(from, to, isEnd) {
return new Promise(function(resolve, reject) {
from.pipe(to, {end: isEnd});
from.on('end', function() {
@ -835,14 +808,12 @@ function pipeStreams(from, to, isEnd) {
});
});
}
exports.pipeStreams = pipeStreams;
function* pipeFiles(from, to) {
export function* pipeFiles(from, to) {
var fromStream = yield promiseCreateReadStream(from);
var toStream = yield promiseCreateWriteStream(to);
yield pipeStreams(fromStream, toStream, true);
}
exports.pipeFiles = co.wrap(pipeFiles);
function checkIpFilter(ctx, ipString, opt_hostname) {
export function checkIpFilter(ctx, ipString, opt_hostname) {
const tenIpFilterRules = ctx.getCfg('services.CoAuthoring.ipfilter.rules', cfgIpFilterRules);
var status = 0;
@ -874,8 +845,7 @@ function checkIpFilter(ctx, ipString, opt_hostname) {
}
return status;
}
exports.checkIpFilter = checkIpFilter;
function* checkHostFilter(ctx, hostname) {
export function* checkHostFilter(ctx, hostname) {
let status = 0;
let hostIp;
try {
@ -890,8 +860,7 @@ function* checkHostFilter(ctx, hostname) {
}
return status;
}
exports.checkHostFilter = checkHostFilter;
function checkClientIp(req, res, next) {
export function checkClientIp(req, res, next) {
let ctx = new operationContext.Context();
ctx.initFromRequest(req);
const tenIpFilterUseForRequest = ctx.getCfg('services.CoAuthoring.ipfilter.useforrequest', cfgIpFilterUseForRequest);
@ -907,8 +876,7 @@ function checkClientIp(req, res, next) {
next();
}
}
exports.checkClientIp = checkClientIp;
function lowercaseQueryString(req, res, next) {
export function lowercaseQueryString(req, res, next) {
for (var key in req.query) {
if (req.query.hasOwnProperty(key) && key.toLowerCase() !== key) {
req.query[key.toLowerCase()] = req.query[key];
@ -917,8 +885,7 @@ function lowercaseQueryString(req, res, next) {
}
next();
}
exports.lowercaseQueryString = lowercaseQueryString;
function dnsLookup(hostname, options) {
export function dnsLookup(hostname, options) {
return new Promise(function(resolve, reject) {
dnscache.lookup(hostname, options, function(err, addresses){
if (err) {
@ -929,12 +896,10 @@ function dnsLookup(hostname, options) {
});
});
}
exports.dnsLookup = dnsLookup;
function isEmptyObject(val) {
export function isEmptyObject(val) {
return !(val && Object.keys(val).length);
}
exports.isEmptyObject = isEmptyObject;
function getSecretByElem(secretElem) {
export function getSecretByElem(secretElem) {
let secret;
if (secretElem) {
if (secretElem.string) {
@ -949,8 +914,7 @@ function getSecretByElem(secretElem) {
}
return secret;
}
exports.getSecretByElem = getSecretByElem;
function fillJwtForRequest(ctx, payload, secret, opt_inBody) {
export function fillJwtForRequest(ctx, payload, secret, opt_inBody) {
const tenTokenOutboxAlgorithm = ctx.getCfg('services.CoAuthoring.token.outbox.algorithm', cfgTokenOutboxAlgorithm);
const tenTokenOutboxExpires = ctx.getCfg('services.CoAuthoring.token.outbox.expires', cfgTokenOutboxExpires);
//todo refuse prototypes in payload(they are simple getter/setter).
@ -966,12 +930,11 @@ function fillJwtForRequest(ctx, payload, secret, opt_inBody) {
let options = {algorithm: tenTokenOutboxAlgorithm, expiresIn: tenTokenOutboxExpires};
return jwt.sign(data, secret, options);
}
exports.fillJwtForRequest = fillJwtForRequest;
exports.forwarded = forwarded;
exports.getIndexFromUserId = function(userId, userIdOriginal){
export {forwarded};
export const getIndexFromUserId = function(userId, userIdOriginal){
return parseInt(userId.substring(userIdOriginal.length));
};
exports.checkPathTraversal = function(ctx, docId, rootDirectory, filename) {
export const checkPathTraversal = function(ctx, docId, rootDirectory, filename) {
if (filename.indexOf('\0') !== -1) {
ctx.logger.warn('checkPathTraversal Poison Null Bytes filename=%s', filename);
return false;
@ -982,7 +945,7 @@ exports.checkPathTraversal = function(ctx, docId, rootDirectory, filename) {
}
return true;
};
exports.getConnectionInfo = function(conn){
export const getConnectionInfo = function(conn){
var user = conn.user;
var data = {
id: user.id,
@ -992,21 +955,21 @@ exports.getConnectionInfo = function(conn){
view: user.view,
connectionId: conn.id,
isCloseCoAuthoring: conn.isCloseCoAuthoring,
isLiveViewer: exports.isLiveViewer(conn),
isLiveViewer: isLiveViewer(conn),
encrypted: conn.encrypted
};
return data;
};
exports.getConnectionInfoStr = function(conn){
return JSON.stringify(exports.getConnectionInfo(conn));
export const getConnectionInfoStr = function(conn){
return JSON.stringify(getConnectionInfo(conn));
};
exports.isLiveViewer = function(conn){
export const isLiveViewer = function(conn){
return conn.user?.view && "fast" === conn.coEditingMode;
};
exports.isLiveViewerSupport = function(licenseInfo){
export const isLiveViewerSupport = function(licenseInfo){
return licenseInfo.connectionsView > 0 || licenseInfo.usersViewCount > 0;
};
exports.canIncludeOutboxAuthorization = function (ctx, url) {
export const canIncludeOutboxAuthorization = function (ctx, url) {
const tenTokenEnableRequestOutbox = ctx.getCfg('services.CoAuthoring.token.enable.request.outbox', cfgTokenEnableRequestOutbox);
const tenTokenOutboxUrlExclusionRegex = ctx.getCfg('services.CoAuthoring.token.outbox.urlExclusionRegex', cfgTokenOutboxUrlExclusionRegex);
if (tenTokenEnableRequestOutbox) {
@ -1023,7 +986,7 @@ exports.canIncludeOutboxAuthorization = function (ctx, url) {
/*
Code samples taken from here: https://gist.github.com/btxtiger/e8eaee70d6e46729d127f1e384e755d6
*/
exports.encryptPassword = async function (ctx, password) {
export const encryptPassword = async function (ctx, password) {
const pbkdf2Promise = util.promisify(crypto.pbkdf2);
const tenSecret = ctx.getCfg('aesEncrypt.secret', cfgSecret);
const tenAESConfig = ctx.getCfg('aesEncrypt.config', cfgAESConfig) ?? {};
@ -1053,7 +1016,7 @@ exports.encryptPassword = async function (ctx, password) {
return `${predicate}:${data}`;
};
exports.decryptPassword = async function (ctx, password) {
export const decryptPassword = async function (ctx, password) {
const pbkdf2Promise = util.promisify(crypto.pbkdf2);
const tenSecret = ctx.getCfg('aesEncrypt.secret', cfgSecret);
const tenAESConfig = ctx.getCfg('aesEncrypt.config', cfgAESConfig) ?? {};
@ -1092,10 +1055,10 @@ exports.decryptPassword = async function (ctx, password) {
return Buffer.concat([decipher.update(encryptedData, 'binary'), decipher.final()]).toString();
};
exports.getDateTimeTicks = function(date) {
export const getDateTimeTicks = function(date) {
return BigInt(date.getTime() * 10000) + 621355968000000000n;
};
exports.convertLicenseInfoToFileParams = function(licenseInfo) {
export const convertLicenseInfoToFileParams = function(licenseInfo) {
// todo
// {
// user_quota = 0;
@ -1123,7 +1086,7 @@ exports.convertLicenseInfoToFileParams = function(licenseInfo) {
license.multitenancy = licenseInfo.multitenancy;
return license;
};
exports.convertLicenseInfoToServerParams = function(licenseInfo) {
export const convertLicenseInfoToServerParams = function(licenseInfo) {
let license = {};
license.workersCount = licenseInfo.count;
license.resultType = licenseInfo.type;
@ -1133,12 +1096,12 @@ exports.convertLicenseInfoToServerParams = function(licenseInfo) {
license.buildNumber = commonDefines.buildNumber;
return license;
};
exports.checkBaseUrl = function(ctx, baseUrl, opt_storageCfg) {
export const checkBaseUrl = function(ctx, baseUrl, opt_storageCfg) {
let storageExternalHost = opt_storageCfg ? opt_storageCfg.externalHost : cfgStorageExternalHost
const tenStorageExternalHost = ctx.getCfg('storage.externalHost', storageExternalHost);
return tenStorageExternalHost ? tenStorageExternalHost : baseUrl;
};
exports.resolvePath = function(object, path, defaultValue) {
export const resolvePath = function(object, path, defaultValue) {
return path.split('.').reduce((o, p) => o ? o[p] : defaultValue, object);
};
Date.isLeapYear = function (year) {
@ -1164,14 +1127,13 @@ Date.prototype.addMonths = function (value) {
this.setUTCDate(Math.min(n, this.getDaysInMonth()));
return this;
};
function getMonthDiff(d1, d2) {
export function getMonthDiff(d1, d2) {
var months;
months = (d2.getUTCFullYear() - d1.getUTCFullYear()) * 12;
months -= d1.getUTCMonth();
months += d2.getUTCMonth();
return months;
}
exports.getMonthDiff = getMonthDiff;
/**
* A Transform stream that limits the size of data passing through it.
@ -1213,7 +1175,7 @@ class SizeLimitStream extends Transform {
callback(null, chunk);
}
}
exports.getLicensePeriod = function(startDate, now) {
export const getLicensePeriod = function(startDate, now) {
startDate = new Date(startDate.getTime());//clone
startDate.addMonths(getMonthDiff(startDate, now));
if (startDate > now) {
@ -1223,10 +1185,10 @@ exports.getLicensePeriod = function(startDate, now) {
return startDate.getTime();
};
exports.removeIllegalCharacters = function(filename) {
export const removeIllegalCharacters = function(filename) {
return filename?.replace(/[/\\?%*:|"<>]/g, '-') || filename;
}
exports.getFunctionArguments = function(func) {
export const getFunctionArguments = function(func) {
return func.toString().
replace(/[\r\n\s]+/g, ' ').
match(/(?:function\s*\w*)?\s*(?:\((.*?)\)|([^\s]+))/).
@ -1234,13 +1196,13 @@ exports.getFunctionArguments = function(func) {
join('').
split(/\s*,\s*/);
};
exports.isUselesSfc = function(row, cmd) {
export const isUselesSfc = function(row, cmd) {
return !(row && commonDefines.FileStatus.SaveVersion === row.status && cmd.getStatusInfoIn() === row.status_info);
};
exports.getChangesFileHeader = function() {
export const getChangesFileHeader = function() {
return `CHANGES\t${commonDefines.buildVersion}\n`;
};
exports.checksumFile = function(hashName, path) {
export const checksumFile = function(hashName, path) {
//https://stackoverflow.com/a/44643479
return new Promise((resolve, reject) => {
const hash = crypto.createHash(hashName);
@ -1251,11 +1213,11 @@ exports.checksumFile = function(hashName, path) {
});
};
function isObject(item) {
export function isObject(item) {
return (item && typeof item === 'object' && !Array.isArray(item));
}
function deepMergeObjects(target, ...sources) {
export function deepMergeObjects(target, ...sources) {
if (!sources.length) {
return target;
}
@ -1277,5 +1239,3 @@ function deepMergeObjects(target, ...sources) {
return deepMergeObjects(target, ...sources);
}
exports.isObject = isObject;
exports.deepMergeObjects = deepMergeObjects;

View File

@ -3,6 +3,7 @@
"version": "1.0.1",
"homepage": "https://www.onlyoffice.com",
"private": true,
"type": "module",
"bin": {
"docservice": "sources/server.js",
"gc": "sources/gc.js",

View File

@ -72,43 +72,46 @@
'use strict';
const { Server } = require("socket.io");
const _ = require('underscore');
const url = require('url');
const os = require('os');
const cluster = require('cluster');
const crypto = require('crypto');
const pathModule = require('path');
const { isDeepStrictEqual } = require('util');
const co = require('co');
const jwt = require('jsonwebtoken');
const ms = require('ms');
const bytes = require('bytes');
const storage = require('./../../Common/sources/storage/storage-base');
const constants = require('./../../Common/sources/constants');
const utils = require('./../../Common/sources/utils');
const utilsDocService = require('./utilsDocService');
const commonDefines = require('./../../Common/sources/commondefines');
const statsDClient = require('./../../Common/sources/statsdclient');
const config = require('config');
const sqlBase = require('./databaseConnectors/baseConnector');
const canvasService = require('./canvasservice');
const converterService = require('./converterservice');
const taskResult = require('./taskresult');
const gc = require('./gc');
const shutdown = require('./shutdown');
const pubsubService = require('./pubsubRabbitMQ');
const wopiClient = require('./wopiClient');
const queueService = require('./../../Common/sources/taskqueueRabbitMQ');
const operationContext = require('./../../Common/sources/operationContext');
const tenantManager = require('./../../Common/sources/tenantManager');
const { notificationTypes, ...notificationService } = require('../../Common/sources/notificationService');
import { Server } from "socket.io";
import _ from 'underscore';
import url from 'url';
import os from 'os';
import cluster from 'cluster';
import crypto from 'crypto';
import pathModule from 'path';
import { isDeepStrictEqual } from 'util';
import co from 'co';
import jwt from 'jsonwebtoken';
import ms from 'ms';
import bytes from 'bytes';
import * as storage from '../../Common/sources/storage/storage-base.js';
import * as constants from '../../Common/sources/constants.js';
import * as utils from '../../Common/sources/utils.js';
import * as utilsDocService from './utilsDocService.js';
import * as commonDefines from '../../Common/sources/commondefines.js';
import * as statsDClient from '../../Common/sources/statsdclient.js';
import config from 'config';
import * as sqlBase from './databaseConnectors/baseConnector.js';
import * as canvasService from './canvasservice.js';
import * as converterService from './converterservice.js';
import * as taskResult from './taskresult.js';
import * as gc from './gc.js';
import * as shutdownModule from './shutdown.js';
import pubsubService from './pubsubRabbitMQ.js';
import * as wopiClient from './wopiClient.js';
import queueService from '../../Common/sources/taskqueueRabbitMQ.js';
import * as operationContext from '../../Common/sources/operationContext.js';
import * as tenantManager from '../../Common/sources/tenantManager.js';
import * as notificationModule from '../../Common/sources/notificationService.js';
import * as editorDataStorage from './editorDataMemory.js';
import * as cfgEditorStatStorageModule from './editorDataRedis.js';
const { notificationTypes, ...notificationService } = notificationModule;
const cfgEditorDataStorage = config.get('services.CoAuthoring.server.editorDataStorage');
const cfgEditorStatStorage = config.get('services.CoAuthoring.server.editorStatStorage');
const editorDataStorage = require('./' + cfgEditorDataStorage);
const editorStatStorage = require('./' + (cfgEditorStatStorage || cfgEditorDataStorage));
const util = require("util");
let editorStatStorage = cfgEditorStatStorage? cfgEditorStatStorageModule: cfgEditorDataStorage ? editorDataStorage: null;
import util from "util";
const cfgEditSingleton = config.get('services.CoAuthoring.server.edit_singleton');
const cfgEditor = config.get('services.CoAuthoring.editor');
@ -163,8 +166,8 @@ const EditorTypes = {
const defaultHttpPort = 80, defaultHttpsPort = 443; // Default ports (for http and https)
//todo remove editorDataStorage constructor usage after 8.1
const editorData = editorDataStorage.EditorData ? new editorDataStorage.EditorData() : new editorDataStorage();
const editorStat = editorStatStorage.EditorStat ? new editorStatStorage.EditorStat() : new editorDataStorage();
export const editorData = new editorDataStorage.EditorData();
export const editorStat = new editorStatStorage.EditorStat();
const clientStatsD = statsDClient.getClient();
let connections = []; // Active connections
let lockDocumentsTimerId = {};//to drop connection that can't unlockDocument
@ -181,7 +184,7 @@ const PRECISION = [{name: 'hour', val: ms('1h')}, {name: 'day', val: ms('1d')},
{name: 'month', val: ms('31d')},
];
function getIsShutdown() {
export function getIsShutdown() {
return shutdownFlag;
}
@ -222,7 +225,7 @@ DocumentChanges.prototype.concat = function(item) {
this.arrChanges = this.arrChanges.concat(item);
};
const c_oAscServerStatus = {
export const c_oAscServerStatus = {
NotFound: 0,
Editing: 1,
MustSave: 2,
@ -498,14 +501,14 @@ function removePresence(ctx, conn) {
});
}
let changeConnectionInfo = co.wrap(function*(ctx, conn, cmd) {
export let changeConnectionInfo = co.wrap(function*(ctx, conn, cmd) {
if (!conn.denyChangeName && conn.user) {
yield publish(ctx, {type: commonDefines.c_oPublishType.changeConnecitonInfo, ctx: ctx, docId: conn.docId, useridoriginal: conn.user.idOriginal, cmd: cmd});
return true;
}
return false;
});
function signToken(ctx, payload, algorithm, expiresIn, secretElem) {
export function signToken(ctx, payload, algorithm, expiresIn, secretElem) {
return co(function*() {
var options = {algorithm: algorithm, expiresIn: expiresIn};
let secret = yield tenantManager.getTenantSecret(ctx, secretElem);
@ -548,7 +551,7 @@ function fillJwtByConnection(ctx, conn) {
});
}
function sendData(ctx, conn, data) {
export function sendData(ctx, conn, data) {
conn.emit('message', data);
const type = data ? data.type : null;
ctx.logger.debug('sendData: type = %s', type);
@ -595,7 +598,7 @@ function sendReleaseLock(ctx, conn, userLocks) {
};
})});
}
function modifyConnectionForPassword(ctx, conn, isEnterCorrectPassword) {
export function modifyConnectionForPassword(ctx, conn, isEnterCorrectPassword) {
return co(function*() {
const tenTokenEnableBrowser = ctx.getCfg('services.CoAuthoring.token.enable.browser', cfgTokenEnableBrowser);
if (isEnterCorrectPassword) {
@ -659,7 +662,7 @@ function* getEditorsCount(ctx, docId, opt_hvals) {
}
return editorsCount;
}
function* hasEditors(ctx, docId, opt_hvals) {
export function* hasEditors(ctx, docId, opt_hvals) {
let editorsCount = yield* getEditorsCount(ctx, docId, opt_hvals);
return editorsCount > 0;
}
@ -676,7 +679,7 @@ function* isUserReconnect(ctx, docId, userId, connectionId) {
}
let pubsubOnMessage = null;//todo move function
async function publish(ctx, data, optDocId, optUserId, opt_pubsub) {
export async function publish(ctx, data, optDocId, optUserId, opt_pubsub) {
var needPublish = true;
let hvals;
if (optDocId && optUserId) {
@ -704,7 +707,7 @@ async function publish(ctx, data, optDocId, optUserId, opt_pubsub) {
}
return needPublish;
}
function* addTask(data, priority, opt_queue, opt_expiration) {
export function* addTask(data, priority, opt_queue, opt_expiration) {
var realQueue = opt_queue ? opt_queue : queue;
yield realQueue.addTask(data, priority, opt_expiration);
}
@ -712,11 +715,11 @@ function* addResponse(data, opt_queue) {
var realQueue = opt_queue ? opt_queue : queue;
yield realQueue.addResponse(data);
}
function* addDelayed(data, ttl, opt_queue) {
export function* addDelayed(data, ttl, opt_queue) {
var realQueue = opt_queue ? opt_queue : queue;
yield realQueue.addDelayed(data, ttl);
}
function* removeResponse(data) {
export function* removeResponse(data) {
yield queue.removeResponse(data);
}
@ -735,7 +738,7 @@ async function getOriginalParticipantsId(ctx, docId) {
return result;
}
async function sendServerRequest(ctx, uri, dataObject, opt_checkAndFixAuthorizationLength) {
export async function sendServerRequest(ctx, uri, dataObject, opt_checkAndFixAuthorizationLength) {
const tenCallbackRequestTimeout = ctx.getCfg('services.CoAuthoring.server.callbackRequestTimeout', cfgCallbackRequestTimeout);
const tenTokenEnableRequestInbox = ctx.getCfg('services.CoAuthoring.token.enable.request.inbox', cfgTokenEnableRequestInbox);
@ -759,7 +762,7 @@ async function sendServerRequest(ctx, uri, dataObject, opt_checkAndFixAuthorizat
return postRes.body;
}
function parseUrl(ctx, callbackUrl) {
export function parseUrl(ctx, callbackUrl) {
var result = null;
try {
//no need to do decodeURIComponent http://expressjs.com/en/4x/api.html#app.settings.table
@ -786,7 +789,7 @@ function parseUrl(ctx, callbackUrl) {
return result;
}
async function getCallback(ctx, id, opt_userIndex) {
export async function getCallback(ctx, id, opt_userIndex) {
var callbackUrl = null;
var baseUrl = null;
let wopiParams = null;
@ -816,7 +819,7 @@ function* getChangesIndex(ctx, docId) {
return res;
}
const hasChanges = co.wrap(function*(ctx, docId) {
export const hasChanges = co.wrap(function*(ctx, docId) {
//todo check editorData.getForceSave in case of "undo all changes"
let puckerIndex = yield* getChangesIndex(ctx, docId);
if (0 === puckerIndex) {
@ -828,7 +831,7 @@ const hasChanges = co.wrap(function*(ctx, docId) {
}
return true;
});
function* setForceSave(ctx, docId, forceSave, cmd, success, url) {
export function* setForceSave(ctx, docId, forceSave, cmd, success, url) {
let forceSaveType = forceSave.getType();
let end = success;
if (commonDefines.c_oAscForceSaveTypes.Form === forceSaveType || commonDefines.c_oAscForceSaveTypes.Internal === forceSaveType) {
@ -933,7 +936,7 @@ async function applyForceSaveCache(ctx, docId, forceSave, type, opt_userConnecti
}
return res;
}
async function startForceSave(ctx, docId, type, opt_userdata, opt_formdata, opt_userId, opt_userConnectionId,
export async function startForceSave(ctx, docId, type, opt_userdata, opt_formdata, opt_userId, opt_userConnectionId,
opt_userConnectionDocId, opt_userIndex, opt_responseKey, opt_baseUrl,
opt_queue, opt_pubsub, opt_conn, opt_initShardKey, opt_jsonParams, opt_changeInfo,
opt_prevTime) {
@ -1019,10 +1022,10 @@ async function startForceSave(ctx, docId, type, opt_userdata, opt_formdata, opt_
ctx.logger.debug('startForceSave end');
return res;
}
function getExternalChangeInfo(user, date, lang) {
export function getExternalChangeInfo(user, date, lang) {
return {user_id: user.id, user_id_original: user.idOriginal, user_name: user.username, lang, change_date: date};
}
let resetForceSaveAfterChanges = co.wrap(function*(ctx, docId, newChangesLastTime, puckerIndex, baseUrl, changeInfo) {
export let resetForceSaveAfterChanges = co.wrap(function*(ctx, docId, newChangesLastTime, puckerIndex, baseUrl, changeInfo) {
const tenForceSaveEnable = ctx.getCfg('services.CoAuthoring.autoAssembly.enable', cfgForceSaveEnable);
const tenForceSaveInterval = ms(ctx.getCfg('services.CoAuthoring.autoAssembly.interval', cfgForceSaveInterval));
//last save
@ -1233,7 +1236,7 @@ async function sendStatusDocument(ctx, docId, bChangeBase, opt_userAction, opt_u
await onReplySendStatusDocument(ctx, docId, replyData);
return sendData;
}
function parseReplyData(ctx, replyData) {
export function parseReplyData(ctx, replyData) {
var res = null;
if (replyData) {
try {
@ -1331,7 +1334,7 @@ function* bindEvents(ctx, docId, callback, baseUrl, opt_userAction, opt_userData
}
return null;
}
let unlockWopiDoc = co.wrap(function*(ctx, docId, opt_userIndex) {
export let unlockWopiDoc = co.wrap(function*(ctx, docId, opt_userIndex) {
//wopi unlock
var getRes = yield getCallback(ctx, docId, opt_userIndex);
if (getRes && getRes.wopiParams && getRes.wopiParams.userAuth && 'view' !== getRes.wopiParams.userAuth.mode) {
@ -1365,7 +1368,7 @@ function* cleanDocumentOnExitNoChanges(ctx, docId, opt_userId, opt_userIndex, op
yield* cleanDocumentOnExit(ctx, docId, false, opt_userIndex);
}
function createSaveTimer(ctx, docId, opt_userId, opt_userIndex, opt_userLcid, opt_queue, opt_noDelay, opt_initShardKey) {
export function createSaveTimer(ctx, docId, opt_userId, opt_userIndex, opt_userLcid, opt_queue, opt_noDelay, opt_initShardKey) {
return co(function*(){
const tenAscSaveTimeOutDelay = ctx.getCfg('services.CoAuthoring.server.savetimeoutdelay', cfgAscSaveTimeOutDelay);
@ -1396,7 +1399,7 @@ function createSaveTimer(ctx, docId, opt_userId, opt_userIndex, opt_userLcid, op
});
}
function checkJwt(ctx, token, type) {
export function checkJwt(ctx, token, type) {
return co(function*() {
const tenTokenVerifyOptions = ctx.getCfg('services.CoAuthoring.token.verifyOptions', cfgTokenVerifyOptions);
@ -1421,7 +1424,7 @@ function checkJwt(ctx, token, type) {
return res;
});
}
function checkJwtHeader(ctx, req, opt_header, opt_prefix, opt_secretType) {
export function checkJwtHeader(ctx, req, opt_header, opt_prefix, opt_secretType) {
return co(function*() {
const tenTokenInboxHeader = ctx.getCfg('services.CoAuthoring.token.inbox.header', cfgTokenInboxHeader);
const tenTokenInboxPrefix = ctx.getCfg('services.CoAuthoring.token.inbox.prefix', cfgTokenInboxPrefix);
@ -1437,7 +1440,7 @@ function checkJwtHeader(ctx, req, opt_header, opt_prefix, opt_secretType) {
return null;
});
}
function getRequestParams(ctx, req, opt_isNotInBody) {
export function getRequestParams(ctx, req, opt_isNotInBody) {
return co(function*(){
const tenTokenEnableRequestInbox = ctx.getCfg('services.CoAuthoring.token.enable.request.inbox', cfgTokenEnableRequestInbox);
const tenTokenRequiredParams = ctx.getCfg('services.CoAuthoring.server.tokenRequiredParams', cfgTokenRequiredParams);
@ -1507,7 +1510,7 @@ let getParticipantMap = co.wrap(function*(ctx, docId, opt_hvals) {
return participantsMap;
});
function getOpenFormatByEditor(editorType) {
export function getOpenFormatByEditor(editorType) {
let res;
switch (editorType) {
case EditorTypes.spreadsheet:
@ -1546,38 +1549,11 @@ async function isSchemaCompatible([tableName, tableSchema]) {
return true;
}
exports.c_oAscServerStatus = c_oAscServerStatus;
exports.editorData = editorData;
exports.editorStat = editorStat;
exports.sendData = sendData;
exports.modifyConnectionForPassword = modifyConnectionForPassword;
exports.parseUrl = parseUrl;
exports.parseReplyData = parseReplyData;
exports.sendServerRequest = sendServerRequest;
exports.createSaveTimer = createSaveTimer;
exports.changeConnectionInfo = changeConnectionInfo;
exports.signToken = signToken;
exports.publish = publish;
exports.addTask = addTask;
exports.addDelayed = addDelayed;
exports.removeResponse = removeResponse;
exports.hasEditors = hasEditors;
exports.getEditorsCountPromise = co.wrap(getEditorsCount);
exports.getCallback = getCallback;
exports.getIsShutdown = getIsShutdown;
exports.hasChanges = hasChanges;
exports.cleanDocumentOnExitPromise = co.wrap(cleanDocumentOnExit);
exports.cleanDocumentOnExitNoChangesPromise = co.wrap(cleanDocumentOnExitNoChanges);
exports.unlockWopiDoc = unlockWopiDoc;
exports.setForceSave = setForceSave;
exports.startForceSave = startForceSave;
exports.resetForceSaveAfterChanges = resetForceSaveAfterChanges;
exports.getExternalChangeInfo = getExternalChangeInfo;
exports.checkJwt = checkJwt;
exports.getRequestParams = getRequestParams;
exports.checkJwtHeader = checkJwtHeader;
export const getEditorsCountPromise = co.wrap(getEditorsCount);
export const cleanDocumentOnExitPromise = co.wrap(cleanDocumentOnExit);
export const cleanDocumentOnExitNoChangesPromise = co.wrap(cleanDocumentOnExitNoChanges);
async function encryptPasswordParams(ctx, data) {
export async function encryptPasswordParams(ctx, data) {
let dataWithPassword;
if (data.type === 'openDocument' && data.message) {
dataWithPassword = data.message;
@ -1603,9 +1579,7 @@ async function encryptPasswordParams(ctx, data) {
}
}
}
exports.encryptPasswordParams = encryptPasswordParams;
exports.getOpenFormatByEditor = getOpenFormatByEditor;
exports.install = function(server, callbackFunction) {
export const install = function(server, callbackFunction) {
const io = new Server(server, cfgSocketIoConnection);
io.use((socket, next) => {
@ -2583,11 +2557,11 @@ exports.install = function(server, callbackFunction) {
//todo update additional in commandOpenStartPromise
if ((upsertRes.isInsert || (wopiParams && 2 === curIndexUser)) && (undefined !== data.timezoneOffset || data.headingsColor || ctx.shardKey || ctx.wopiSrc)) {
//todo insert in commandOpenStartPromise. insert here for database compatibility
if (false === canvasService.hasAdditionalCol) {
if (false === canvasService.hasAdditionalCol()) {
let selectRes = yield taskResult.select(ctx, docId);
canvasService.hasAdditionalCol = selectRes.length > 0 && undefined !== selectRes[0].additional;
canvasService.setHasAdditionalCol(selectRes.length > 0 && undefined !== selectRes[0].additional);
}
if (canvasService.hasAdditionalCol) {
if (canvasService.hasAdditionalCol()) {
let task = new taskResult.TaskResultData();
task.tenant = ctx.tenant;
task.key = docId;
@ -3935,7 +3909,7 @@ exports.install = function(server, callbackFunction) {
});
});
};
exports.setLicenseInfo = async function(globalCtx, data, original) {
export const setLicenseInfo = async function(globalCtx, data, original) {
tenantManager.setDefLicense(data, original);
await utilsDocService.notifyLicenseExpiration(globalCtx, data.endDate);
@ -3950,7 +3924,7 @@ exports.setLicenseInfo = async function(globalCtx, data, original) {
await utilsDocService.notifyLicenseExpiration(ctx, licenseInfo.endDate);
}
};
exports.healthCheck = function(req, res) {
export const healthCheck = function(req, res) {
return co(function*() {
let output = false;
let ctx = new operationContext.Context();
@ -4005,7 +3979,7 @@ exports.healthCheck = function(req, res) {
}
});
};
exports.licenseInfo = function(req, res) {
export const licenseInfo = function(req, res) {
return co(function*() {
let isError = false;
let serverDate = new Date();
@ -4355,7 +4329,7 @@ function* commandHandle(ctx, params, req, output) {
}
// Command from the server (specifically teamlab)
exports.commandFromServer = function (req, res) {
export const commandFromServer = function (req, res) {
return co(function* () {
const output = { key: 'commandFromServer', error: commonDefines.c_oAscServerCommandErrors.NoError, version: undefined, users: undefined};
const ctx = new operationContext.Context();
@ -4395,7 +4369,7 @@ exports.commandFromServer = function (req, res) {
});
};
exports.shutdown = function(req, res) {
export function shutdown(req, res) {
return co(function*() {
let output = false;
let ctx = new operationContext.Context();
@ -4403,7 +4377,7 @@ exports.shutdown = function(req, res) {
ctx.initFromRequest(req);
yield ctx.initTenantCache();
ctx.logger.info('shutdown start');
output = yield shutdown.shutdown(ctx, editorStat, req.method === 'PUT');
output = yield shutdownModule.shutdown(ctx, editorStat, req.method === 'PUT');
} catch (err) {
ctx.logger.error('shutdown error %s', err.stack);
} finally {
@ -4413,7 +4387,7 @@ exports.shutdown = function(req, res) {
}
});
};
exports.getEditorConnectionsCount = function (req, res) {
export const getEditorConnectionsCount = function (req, res) {
let ctx = new operationContext.Context();
let count = 0;
try {

View File

@ -31,31 +31,31 @@
*/
'use strict';
const crypto = require('crypto');
var pathModule = require('path');
var urlModule = require('url');
const { pipeline } = require('node:stream/promises');
const { buffer } = require('node:stream/consumers');
var co = require('co');
const ms = require('ms');
const retry = require('retry');
const MultiRange = require('multi-integer-range').MultiRange;
var sqlBase = require('./databaseConnectors/baseConnector');
const utilsDocService = require('./utilsDocService');
var docsCoServer = require('./DocsCoServer');
var taskResult = require('./taskresult');
var wopiClient = require('./wopiClient');
var logger = require('./../../Common/sources/logger');
var utils = require('./../../Common/sources/utils');
var constants = require('./../../Common/sources/constants');
var commonDefines = require('./../../Common/sources/commondefines');
var storage = require('./../../Common/sources/storage/storage-base');
var formatChecker = require('./../../Common/sources/formatchecker');
var statsDClient = require('./../../Common/sources/statsdclient');
var operationContext = require('./../../Common/sources/operationContext');
var tenantManager = require('./../../Common/sources/tenantManager');
var config = require('config');
const path = require("path");
import crypto from 'crypto';
import pathModule from 'path';
import urlModule from 'url';
import { pipeline } from 'node:stream/promises';
import { buffer } from 'node:stream/consumers';
import co from 'co';
import ms from 'ms';
import retry from 'retry';
import * as MultiRange from 'multi-integer-range';
import * as sqlBase from './databaseConnectors/baseConnector.js';
import * as utilsDocService from './utilsDocService.js';
import * as docsCoServer from './DocsCoServer.js';
import * as taskResult from './taskresult.js';
import * as wopiClient from './wopiClient.js';
import * as logger from './../../Common/sources/logger.js';
import * as utils from './../../Common/sources/utils.js';
import * as constants from './../../Common/sources/constants.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as storage from './../../Common/sources/storage/storage-base.js';
import * as formatChecker from './../../Common/sources/formatchecker.js';
import * as statsDClient from './../../Common/sources/statsdclient.js';
import * as operationContext from './../../Common/sources/operationContext.js';
import * as tenantManager from './../../Common/sources/tenantManager.js';
import config from 'config';
import path from 'path';
const cfgTypesUpload = config.get('services.CoAuthoring.utils.limits_image_types_upload');
const cfgImageSize = config.get('services.CoAuthoring.server.limits_image_size');
@ -83,7 +83,11 @@ var SAVE_TYPE_COMPLETE_ALL = 3;
var clientStatsD = statsDClient.getClient();
var redisKeyShutdown = cfgRedisPrefix + constants.REDIS_KEY_SHUTDOWN;
let hasPasswordCol = false;//stub on upgradev630.sql update failure
exports.hasAdditionalCol = false;//stub on upgradev710.sql update failure
let _hasAdditionalCol = false;//stub on upgradev710.sql update failure
export const hasAdditionalCol = () => _hasAdditionalCol;
export const setHasAdditionalCol = (value) => {
_hasAdditionalCol = value;
};
function OutputDataWrap(type, data) {
this['type'] = type;
@ -1179,7 +1183,7 @@ const commandSfcCallback = co.wrap(function*(ctx, cmd, isSfcm, isEncrypted) {
}
} catch (err) {
ctx.logger.error('sendServerRequest error: url = %s;data = %j %s', uri, outputSfc, err.stack);
const retryHttpStatus = new MultiRange(tenCallbackBackoffOptions.httpStatus);
const retryHttpStatus = new MultiRange.MultiRange(tenCallbackBackoffOptions.httpStatus);
if (!isEncrypted && !docsCoServer.getIsShutdown() && (!err.statusCode || retryHttpStatus.has(err.statusCode.toString()))) {
let attempt = cmd.getAttempt() || 0;
if (attempt < tenCallbackBackoffOptions.retries) {
@ -1359,7 +1363,7 @@ function* commandSendMMCallback(ctx, cmd) {
ctx.logger.debug('End commandSendMMCallback');
}
exports.openDocument = function(ctx, conn, cmd, opt_upsertRes, opt_bIsRestore) {
export const openDocument = function(ctx, conn, cmd, opt_upsertRes, opt_bIsRestore) {
return co(function* () {
var outputData;
try {
@ -1421,7 +1425,7 @@ exports.openDocument = function(ctx, conn, cmd, opt_upsertRes, opt_bIsRestore) {
}
});
};
exports.downloadAs = function(req, res) {
export const downloadAs = function(req, res) {
return co(function* () {
var docId = 'null';
let ctx = new operationContext.Context();
@ -1511,7 +1515,7 @@ exports.downloadAs = function(req, res) {
}
});
};
exports.saveFile = function(req, res) {
export const saveFile = function(req, res) {
return co(function*() {
let docId = 'null';
let ctx = new operationContext.Context();
@ -1598,8 +1602,8 @@ function getPrintFileUrl(ctx, docId, baseUrl, filename) {
return res;
});
}
exports.getPrintFileUrl = getPrintFileUrl;
exports.printFile = function(req, res) {
export { getPrintFileUrl };
export const printFile = function(req, res) {
return co(function*() {
let docId = 'null';
let ctx = new operationContext.Context();
@ -1652,7 +1656,7 @@ exports.printFile = function(req, res) {
}
});
};
exports.downloadFile = function(req, res) {
export const downloadFile = function(req, res) {
return co(function*() {
let ctx = new operationContext.Context();
try {
@ -1790,7 +1794,7 @@ exports.downloadFile = function(req, res) {
}
});
};
exports.saveFromChanges = function(ctx, docId, statusInfo, optFormat, opt_userId, opt_userIndex, opt_userLcid, opt_queue, opt_initShardKey) {
export const saveFromChanges = function(ctx, docId, statusInfo, optFormat, opt_userId, opt_userIndex, opt_userLcid, opt_queue, opt_initShardKey) {
return co(function* () {
try {
var startDate = null;
@ -1860,7 +1864,7 @@ async function processWopiSaveAs(ctx, cmd) {
}
return {res: res, wopiParams: info?.wopiParams};
}
exports.receiveTask = function(data, ack) {
export const receiveTask = function(data, ack) {
return co(function* () {
let ctx = new operationContext.Context();
try {
@ -1939,13 +1943,15 @@ exports.receiveTask = function(data, ack) {
});
};
exports.cleanupCache = cleanupCache;
exports.cleanupCacheIf = cleanupCacheIf;
exports.cleanupErrToReload = cleanupErrToReload;
exports.getOpenedAt = getOpenedAt;
exports.commandSfctByCmd = commandSfctByCmd;
exports.commandOpenStartPromise = commandOpenStartPromise;
exports.commandPathUrls = commandPathUrls;
exports.commandSfcCallback = commandSfcCallback;
exports.OutputDataWrap = OutputDataWrap;
exports.OutputData = OutputData;
export {
cleanupCache,
cleanupCacheIf,
cleanupErrToReload,
getOpenedAt,
commandSfctByCmd,
commandOpenStartPromise,
commandPathUrls,
commandSfcCallback,
OutputDataWrap,
OutputData
}

View File

@ -31,22 +31,25 @@
*/
'use strict';
var config = require('config');
var configCoAuthoring = config.get('services.CoAuthoring');
var co = require('co');
var pubsubService = require('./pubsubRabbitMQ');
var commonDefines = require('./../../Common/sources/commondefines');
var constants = require('./../../Common/sources/constants');
var utils = require('./../../Common/sources/utils');
const storage = require('./../../Common/sources/storage/storage-base');
const queueService = require('./../../Common/sources/taskqueueRabbitMQ');
const operationContext = require('./../../Common/sources/operationContext');
const sqlBase = require('./databaseConnectors/baseConnector');
const docsCoServer = require('./DocsCoServer');
const taskResult = require('./taskresult');
import config from 'config';
import co from 'co';
import pubsubService from './pubsubRabbitMQ.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as constants from './../../Common/sources/constants.js';
import * as utils from './../../Common/sources/utils.js';
import * as storage from './../../Common/sources/storage/storage-base.js';
import queueService from './../../Common/sources/taskqueueRabbitMQ.js';
import * as operationContext from './../../Common/sources/operationContext.js';
import * as sqlBase from './databaseConnectors/baseConnector.js';
import * as docsCoServer from './DocsCoServer.js';
import * as taskResult from './taskresult.js';
import cfgEditorDataStorageModule from './editorDataMemory.js';
import cfgEditorStatStorageModule from './editorDataRedis.js';
const configCoAuthoring = config.get('services.CoAuthoring');
const cfgEditorDataStorage = config.get('services.CoAuthoring.server.editorDataStorage');
const cfgEditorStatStorage = config.get('services.CoAuthoring.server.editorStatStorage');
const editorStatStorage = require('./' + (cfgEditorStatStorage || cfgEditorDataStorage));
const editorStatStorage = cfgEditorStatStorage? cfgEditorStatStorageModule: cfgEditorDataStorage ? cfgEditorDataStorageModule: null;
const cfgForgottenFiles = config.get('services.CoAuthoring.server.forgottenfiles');
const cfgTableResult = config.get('services.CoAuthoring.sql.tableResult');
@ -58,7 +61,7 @@ var WAIT_TIMEOUT = 30000;
var LOOP_TIMEOUT = 1000;
var EXEC_TIMEOUT = WAIT_TIMEOUT + utils.getConvertionTimeout(undefined);
let addSqlParam = sqlBase.addSqlParameter;
let addSqlParam = sqlBase.dbInstance.addSqlParameter;
function updateDoc(ctx, docId, status, callback) {
return new Promise(function(resolve, reject) {
@ -68,7 +71,7 @@ function updateDoc(ctx, docId, status, callback) {
let p3 = addSqlParam(ctx.tenant, values);
let p4 = addSqlParam(docId, values);
let sqlCommand = `UPDATE ${cfgTableResult} SET status=${p1},callback=${p2} WHERE tenant=${p3} AND id=${p4};`;
sqlBase.sqlQuery(ctx, sqlCommand, function(error, result) {
sqlBase.dbInstance.sqlQuery(ctx, sqlCommand, function(error, result) {
if (error) {
reject(error);
} else {
@ -184,5 +187,6 @@ function shutdown() {
return res;
});
};
exports.shutdown = shutdown;
shutdown();
export {
shutdown
}

View File

@ -32,27 +32,24 @@
'use strict';
const path = require('path');
var config = require('config');
var co = require('co');
let mime;
import('mime').then(module => {
mime = module.default;
})
var taskResult = require('./taskresult');
var utils = require('./../../Common/sources/utils');
var constants = require('./../../Common/sources/constants');
var commonDefines = require('./../../Common/sources/commondefines');
var docsCoServer = require('./DocsCoServer');
var canvasService = require('./canvasservice');
var wopiClient = require('./wopiClient');
var storage = require('./../../Common/sources/storage/storage-base');
var formatChecker = require('./../../Common/sources/formatchecker');
var statsDClient = require('./../../Common/sources/statsdclient');
var storageBase = require('./../../Common/sources/storage/storage-base');
var operationContext = require('./../../Common/sources/operationContext');
const sqlBase = require('./databaseConnectors/baseConnector');
const utilsDocService = require("./utilsDocService");
import path from 'path';
import config from 'config';
import co from 'co';
import * as taskResult from './taskresult.js';
import * as utils from './../../Common/sources/utils.js';
import * as constants from './../../Common/sources/constants.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as docsCoServer from './DocsCoServer.js';
import * as canvasService from './canvasservice.js';
import * as wopiClient from './wopiClient.js';
import * as storage from './../../Common/sources/storage/storage-base.js';
import * as formatChecker from './../../Common/sources/formatchecker.js';
import * as statsDClient from './../../Common/sources/statsdclient.js';
import * as storageBase from './../../Common/sources/storage/storage-base.js';
import * as operationContext from './../../Common/sources/operationContext.js';
import * as sqlBase from './databaseConnectors/baseConnector.js';
import * as utilsDocService from './utilsDocService.js';
import mime from 'mime';
const cfgTokenEnableBrowser = config.get('services.CoAuthoring.token.enable.browser');
@ -720,10 +717,12 @@ function getConverterHtmlHandler(req, res) {
}
});
}
exports.convertFromChanges = convertFromChanges;
exports.convertJson = convertRequestJson;
exports.convertXml = convertRequestXml;
exports.convertTo = convertTo;
exports.convertAndEdit = convertAndEdit;
exports.getConverterHtmlHandler = getConverterHtmlHandler;
exports.builder = builderRequest;
export {
convertFromChanges,
convertRequestJson as convertJson,
convertRequestXml as convertXml,
convertTo,
convertAndEdit,
getConverterHtmlHandler,
builderRequest as builder
};

View File

@ -1,127 +0,0 @@
/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
'use strict';
var mongoDB = require('mongodb');
var config = require('./config.json');
var _errorConnection = true;
var logger = require('./../../Common/sources/logger');
function CreateDbClient(){
return new mongoDB.Db(config['mongodb']['database'], new mongoDB.Server(config['mongodb']['host'], config['mongodb']['port'], {auto_reconnect: true}), {safe:false});
}
exports.insert = function (_collectionName, _newElement) {
var _db = CreateDbClient();
if (!_db) {
logger.error ("Error _db");
return;
}
_db.open (function (err, db) {
if (!err) {
// open collection. If it doesn't exist, it will be created
db.collection(_collectionName, function(err, collection) {
if (!err) {
collection.insert (_newElement);
} else {
logger.error ("Error collection");
return;
}
db.close();
});
} else {
logger.error ("Error open database");
}
});
};
exports.remove = function (_collectionName, _removeElements) {
var _db = CreateDbClient();
if (!_db) {
logger.error ("Error _db");
return;
}
// Opening the database
_db.open (function (err, db) {
if (!err) {
// open collection. If it doesn't exist, it will be created
db.collection(_collectionName, function(err, collection) {
if (!err) {
collection.remove (_removeElements, function(err, collection) {
logger.info ("All elements remove");
});
} else {
logger.error ("Error collection");
return;
}
db.close();
});
} else {
logger.error ("Error open database");
}
});
};
exports.load = function (_collectionName, callbackFunction) {
var _db = CreateDbClient();
if (!_db) {
logger.error ("Error _db");
return callbackFunction (null);
}
var result = [];
// opening database
_db.open (function (err, db) {
// open collection. If it doesn't exist, it will be created
db.collection(_collectionName, function(err, collection) {
// Get all elements of a collection with find()
collection.find(function(err, cursor) {
cursor.each(function(err, item) {
// Null denotes the last element
if (item != null) {
if (!result.hasOwnProperty (item.docid))
result[item.docid] = [item];
else
result[item.docid].push(item);
} else
callbackFunction (result);
});
db.close();
});
});
});
};

View File

@ -41,10 +41,15 @@ const sqlDataBaseType = {
oracle : 'oracle'
};
const connectorUtilities = require('./connectorUtilities');
const utils = require('../../../Common/sources/utils');
const bottleneck = require('bottleneck');
const config = require('config');
import * as connectorUtilities from './connectorUtilities.js';
import * as utils from '../../../Common/sources/utils.js';
import bottleneck from 'bottleneck';
import config from 'config';
import * as mysqlConnector from './mysqlConnector.js';
import * as mssqlConnector from './mssqlConnector.js';
import * as damengConnector from './damengConnector.js';
import * as oracleConnector from './oracleConnector.js';
import * as postgreConnector from './postgreConnector.js';
const configSql = config.get('services.CoAuthoring.sql');
const cfgTableResult = configSql.get('tableResult');
@ -61,24 +66,24 @@ let dbInstance;
switch (dbType) {
case sqlDataBaseType.mySql:
case sqlDataBaseType.mariaDB:
dbInstance = require('./mysqlConnector');
dbInstance = mysqlConnector;
break;
case sqlDataBaseType.msSql:
dbInstance = require('./mssqlConnector');
dbInstance = mssqlConnector;
break;
case sqlDataBaseType.dameng:
dbInstance = require('./damengConnector');
dbInstance = damengConnector;
break;
case sqlDataBaseType.oracle:
dbInstance = require('./oracleConnector');
dbInstance = oracleConnector;
break;
default:
dbInstance = require('./postgreConnector');
dbInstance = postgreConnector;
break;
}
let isSupportFastInsert = !!dbInstance.insertChanges;
const addSqlParameter = dbInstance.addSqlParameter;
let addSqlParameter = dbInstance.addSqlParameter;
function getChangesSize(changes) {
return changes.reduce((accumulator, currentValue) => accumulator + currentValue.change_data.length, 0);
@ -383,7 +388,7 @@ function getTableColumns(ctx, tableName) {
});
}
module.exports = {
export {
insertChangesPromise,
deleteChangesPromise,
deleteChanges,
@ -396,7 +401,9 @@ module.exports = {
healthCheck,
getEmptyCallbacks,
getTableColumns,
getDateTime: _getDateTime2,
...connectorUtilities,
...dbInstance
};
_getDateTime2 as getDateTime,
dbInstance
};
export const UserCallback = connectorUtilities.UserCallback;
export const DocumentPassword = connectorUtilities.DocumentPassword;
export const DocumentAdditional = connectorUtilities.DocumentAdditional;

View File

@ -30,7 +30,7 @@
*
*/
const constants = require('../../../Common/sources/constants');
import * as constants from '../../../Common/sources/constants.js';
function UserCallback() {
this.userIndex = undefined;
@ -228,7 +228,7 @@ DocumentAdditional.prototype.getWopiSrc = function(str) {
return res;
};
module.exports = {
export {
UserCallback,
DocumentPassword,
DocumentAdditional

View File

@ -32,9 +32,9 @@
'use strict';
const connectorUtilities = require('./connectorUtilities');
const db = require('dmdb');
const config = require('config');
import * as connectorUtilities from './connectorUtilities.js';
import db from 'dmdb';
import config from 'config';
const configSql = config.get('services.CoAuthoring.sql');
const cfgDbHost = configSql.get('dbHost');
@ -215,7 +215,7 @@ async function upsert(ctx, task) {
return out;
}
module.exports = {
export {
sqlQuery,
closePool,
addSqlParameter,

View File

@ -32,10 +32,10 @@
'use strict';
const sql = require('mssql');
const config = require('config');
const connectorUtilities = require('./connectorUtilities');
const utils = require('../../../Common/sources/utils');
import sql from 'mssql';
import config from 'config';
import * as connectorUtilities from './connectorUtilities.js';
import * as utils from '../../../Common/sources/utils.js';
const configSql = config.get('services.CoAuthoring.sql');
const cfgTableResult = configSql.get('tableResult');
@ -333,7 +333,7 @@ async function insertChangesAsync(ctx, tableChanges, startIndex, objChanges, doc
return result;
}
module.exports = {
export {
sqlQuery,
closePool,
addSqlParameter,

View File

@ -32,9 +32,9 @@
'use strict';
const mysql = require('mysql2/promise');
const connectorUtilities = require('./connectorUtilities');
const config = require('config');
import mysql from 'mysql2/promise';
import * as connectorUtilities from './connectorUtilities.js';
import config from 'config';
const configSql = config.get('services.CoAuthoring.sql');
const cfgTableResult = configSql.get('tableResult');
@ -166,8 +166,10 @@ async function upsert(ctx, task) {
return { isInsert, insertId };
}
module.exports.sqlQuery = sqlQuery;
module.exports.closePool = closePool;
module.exports.addSqlParameter = addSqlParameter;
module.exports.concatParams = concatParams;
module.exports.upsert = upsert;
export {
sqlQuery,
closePool,
addSqlParameter,
concatParams,
upsert
};

View File

@ -32,10 +32,10 @@
'use strict';
const oracledb = require('oracledb');
const config = require('config');
const connectorUtilities = require('./connectorUtilities');
const utils = require('../../../Common/sources/utils');
import oracledb from 'oracledb';
import config from 'config';
import * as connectorUtilities from './connectorUtilities.js';
import * as utils from '../../../Common/sources/utils.js';
const configSql = config.get('services.CoAuthoring.sql');
const cfgTableResult = configSql.get('tableResult');
@ -346,7 +346,7 @@ async function insertChangesAsync(ctx, tableChanges, startIndex, objChanges, doc
return result;
}
module.exports = {
export {
sqlQuery,
closePool,
healthCheck,

View File

@ -32,12 +32,12 @@
'use strict';
var pg = require('pg');
var co = require('co');
var types = require('pg').types;
const connectorUtilities = require('./connectorUtilities');
const operationContext = require('../../../Common/sources/operationContext');
const config = require('config');
import pg from 'pg';
import co from 'co';
import {types} from 'pg';
import * as connectorUtilities from './connectorUtilities.js';
import * as operationContext from '../../../Common/sources/operationContext.js';
import config from 'config';
var configSql = config.get('services.CoAuthoring.sql');
const cfgTableResult = config.get('services.CoAuthoring.sql.tableResult');
var pgPoolExtraOptions = config.util.cloneDeep(configSql.get('pgPoolExtraOptions'));
@ -236,7 +236,7 @@ function insertChanges(ctx, tableChanges, startIndex, objChanges, docId, index,
}, undefined, undefined, values);
}
module.exports = {
export {
sqlQuery,
closePool,
addSqlParameter,

View File

@ -31,11 +31,11 @@
*/
'use strict';
const config = require('config');
const ms = require('ms');
const utils = require('./../../Common/sources/utils');
const commonDefines = require('./../../Common/sources/commondefines');
const tenantManager = require('./../../Common/sources/tenantManager');
import config from 'config';
import ms from 'ms';
import * as utils from './../../Common/sources/utils.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as tenantManager from './../../Common/sources/tenantManager.js';
const cfgExpMonthUniqueUsers = ms(config.get('services.CoAuthoring.expire.monthUniqueUsers'));
@ -502,7 +502,7 @@ EditorStat.prototype.lockNotification = async function(ctx, notificationType, tt
return this._checkAndLock(ctx, notificationType, notificationType, NaN, ttl);
};
module.exports = {
export {
EditorData,
EditorStat
}

View File

@ -0,0 +1 @@
export default null;

View File

@ -31,18 +31,18 @@
*/
'use strict';
const crypto = require('crypto');
var multiparty = require('multiparty');
var co = require('co');
const utilsDocService = require('./utilsDocService');
var docsCoServer = require('./DocsCoServer');
var utils = require('./../../Common/sources/utils');
var constants = require('./../../Common/sources/constants');
var storageBase = require('./../../Common/sources/storage/storage-base');
var formatChecker = require('./../../Common/sources/formatchecker');
const commonDefines = require('./../../Common/sources/commondefines');
const operationContext = require('./../../Common/sources/operationContext');
var config = require('config');
import crypto from 'crypto';
import multiparty from 'multiparty';
import co from 'co';
import * as utilsDocService from './utilsDocService.js';
import * as docsCoServer from './DocsCoServer.js';
import * as utils from './../../Common/sources/utils.js';
import * as constants from './../../Common/sources/constants.js';
import * as storageBase from './../../Common/sources/storage/storage-base.js';
import * as formatChecker from './../../Common/sources/formatchecker.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as operationContext from './../../Common/sources/operationContext.js';
import config from 'config';
const cfgImageSize = config.get('services.CoAuthoring.server.limits_image_size');
const cfgTypesUpload = config.get('services.CoAuthoring.utils.limits_image_types_upload');
@ -75,7 +75,7 @@ function checkJwtUploadTransformRes(ctx, errorName, checkJwtRes){
}
return res;
}
exports.uploadImageFile = function(req, res) {
export const uploadImageFile = function(req, res) {
return co(function* () {
let httpStatus = 200;
var docId = 'null';

View File

@ -32,22 +32,22 @@
'use strict';
const config = require('config');
var co = require('co');
var cron = require('cron');
var ms = require('ms');
var taskResult = require('./taskresult');
var docsCoServer = require('./DocsCoServer');
var canvasService = require('./canvasservice');
var storage = require('./../../Common/sources/storage/storage-base');
var utils = require('./../../Common/sources/utils');
var logger = require('./../../Common/sources/logger');
var constants = require('./../../Common/sources/constants');
var commondefines = require('./../../Common/sources/commondefines');
var queueService = require('./../../Common/sources/taskqueueRabbitMQ');
var operationContext = require('./../../Common/sources/operationContext');
var pubsubService = require('./pubsubRabbitMQ');
const sqlBase = require("./databaseConnectors/baseConnector");
import config from 'config';
import co from 'co';
import cron from 'cron';
import ms from 'ms';
import * as taskResult from './taskresult.js';
import * as docsCoServer from './DocsCoServer.js';
import * as canvasService from './canvasservice.js';
import * as storage from './../../Common/sources/storage/storage-base.js';
import * as utils from './../../Common/sources/utils.js';
import * as logger from './../../Common/sources/logger.js';
import * as constants from './../../Common/sources/constants.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import queueService from './../../Common/sources/taskqueueRabbitMQ.js';
import * as operationContext from './../../Common/sources/operationContext.js';
import pubsubService from './pubsubRabbitMQ.js';
import * as sqlBase from "./databaseConnectors/baseConnector.js";
var cfgExpFilesCron = config.get('services.CoAuthoring.expire.filesCron');
var cfgExpDocumentsCron = config.get('services.CoAuthoring.expire.documentsCron');
@ -55,7 +55,7 @@ var cfgExpFiles = config.get('services.CoAuthoring.expire.files');
var cfgExpFilesRemovedAtOnce = config.get('services.CoAuthoring.expire.filesremovedatonce');
var cfgForceSaveStep = ms(config.get('services.CoAuthoring.autoAssembly.step'));
function getCronStep(cronTime){
export function getCronStep(cronTime){
let cronJob = new cron.CronJob(cronTime, function(){});
let dates = cronJob.nextDates(2);
return dates[1] - dates[0];
@ -63,7 +63,7 @@ function getCronStep(cronTime){
let expFilesStep = getCronStep(cfgExpFilesCron);
let expDocumentsStep = getCronStep(cfgExpDocumentsCron);
var checkFileExpire = function(expireSeconds) {
export var checkFileExpire = function(expireSeconds) {
return co(function* () {
let ctx = new operationContext.Context();
try {
@ -203,10 +203,8 @@ let forceSaveTimeout = function() {
});
};
exports.startGC = function() {
export const startGC = function() {
setTimeout(checkDocumentExpire, expDocumentsStep);
setTimeout(checkFileExpire, expFilesStep);
setTimeout(forceSaveTimeout, cfgForceSaveStep);
};
exports.getCronStep = getCronStep;
exports.checkFileExpire = checkFileExpire;
};

View File

@ -31,15 +31,15 @@
*/
'use strict';
var config = require('config');
var events = require('events');
var util = require('util');
var co = require('co');
var constants = require('./../../Common/sources/constants');
const commonDefines = require('./../../Common/sources/commondefines');
var utils = require('./../../Common/sources/utils');
var rabbitMQCore = require('./../../Common/sources/rabbitMQCore');
var activeMQCore = require('./../../Common/sources/activeMQCore');
import config from 'config';
import events from 'events';
import util from 'util';
import co from 'co';
import * as constants from './../../Common/sources/constants.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as utils from './../../Common/sources/utils.js';
import * as rabbitMQCore from './../../Common/sources/rabbitMQCore.js';
import * as activeMQCore from './../../Common/sources/activeMQCore.js';
const cfgQueueType = config.get('queue.type');
const cfgRabbitExchangePubSub = config.util.cloneDeep(config.get('rabbitmq.exchangepubsub'));
@ -260,4 +260,4 @@ PubsubRabbitMQ.prototype.healthCheck = function() {
return healthCheck(this);
};
module.exports = PubsubRabbitMQ;
export default PubsubRabbitMQ;

View File

@ -31,17 +31,14 @@
*/
'use strict';
const express = require('express');
const config = require('config');
const operationContext = require('./../../../Common/sources/operationContext');
const utils = require('./../../../Common/sources/utils');
const storage = require('./../../../Common/sources/storage/storage-base');
const urlModule = require("url");
const path = require("path");
let mime;
import('mime').then(module => {
mime = module.default;
})
import express from 'express';
import config from 'config';
import * as operationContext from './../../../Common/sources/operationContext.js';
import * as utils from './../../../Common/sources/utils.js';
import * as storage from './../../../Common/sources/storage/storage-base.js';
import urlModule from 'url';
import path from 'path';
import mime from 'mime';
const cfgStaticContent = config.has('services.CoAuthoring.server.static_content') ? config.util.cloneDeep(config.get('services.CoAuthoring.server.static_content')) : {};
const cfgCacheStorage = config.get('storage');
@ -104,4 +101,4 @@ if (storage.needServeStatic(cfgForgottenFiles)) {
}
}
module.exports = router;
export default router;

View File

@ -32,32 +32,33 @@
'use strict';
const config = require('config');
import config from 'config';
//process.env.NODE_ENV = config.get('services.CoAuthoring.server.mode');
const logger = require('./../../Common/sources/logger');
const co = require('co');
const license = require('./../../Common/sources/license');
const fs = require('fs');
import * as logger from './../../Common/sources/logger.js';
import co from 'co';
import * as license from './../../Common/sources/license.js';
import fs from 'fs';
const express = require('express');
const http = require('http');
const urlModule = require('url');
const path = require('path');
const bodyParser = require("body-parser");
const multer = require('multer');
const apicache = require('apicache');
const docsCoServer = require('./DocsCoServer');
const canvasService = require('./canvasservice');
const converterService = require('./converterservice');
const fileUploaderService = require('./fileuploaderservice');
const wopiClient = require('./wopiClient');
const constants = require('./../../Common/sources/constants');
const utils = require('./../../Common/sources/utils');
const commonDefines = require('./../../Common/sources/commondefines');
const operationContext = require('./../../Common/sources/operationContext');
const tenantManager = require('./../../Common/sources/tenantManager');
const staticRouter = require('./routes/static');
const ms = require('ms');
import express from 'express';
import http from 'http';
import urlModule from 'url';
import path from 'path';
import bodyParser from "body-parser";
import multer from 'multer';
import mime from 'mime';
import apicache from 'apicache';
import * as docsCoServer from './DocsCoServer.js';
import * as canvasService from './canvasservice.js';
import * as converterService from './converterservice.js';
import * as fileUploaderService from './fileuploaderservice.js';
import * as wopiClient from './wopiClient.js';
import * as constants from './../../Common/sources/constants.js';
import * as utils from './../../Common/sources/utils.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as operationContext from './../../Common/sources/operationContext.js';
import * as tenantManager from './../../Common/sources/tenantManager.js';
import staticRouter from './routes/static.js';
import ms from 'ms';
const cfgWopiEnable = config.get('wopi.enable');
const cfgWopiDummyEnable = config.get('wopi.dummy.enable');
@ -68,24 +69,24 @@ const cfgTokenEnableRequestOutbox = config.get('services.CoAuthoring.token.enabl
const cfgLicenseFile = config.get('license.license_file');
const cfgDownloadMaxBytes = config.get('FileConverter.converter.maxDownloadBytes');
if (false) {
var cluster = require('cluster');
cluster.schedulingPolicy = cluster.SCHED_RR
if (cluster.isMaster) {
let workersCount = 2;
logger.warn('start cluster with %s workers %s', workersCount, cluster.schedulingPolicy);
for (let nIndexWorker = 0; nIndexWorker < workersCount; ++nIndexWorker) {
var worker = cluster.fork().process;
logger.warn('worker %s started.', worker.pid);
}
// if (false) {
// var cluster = require('cluster');
// cluster.schedulingPolicy = cluster.SCHED_RR
// if (cluster.isMaster) {
// let workersCount = 2;
// logger.warn('start cluster with %s workers %s', workersCount, cluster.schedulingPolicy);
// for (let nIndexWorker = 0; nIndexWorker < workersCount; ++nIndexWorker) {
// var worker = cluster.fork().process;
// logger.warn('worker %s started.', worker.pid);
// }
cluster.on('exit', function (worker) {
logger.warn('worker %s died. restart...', worker.process.pid);
cluster.fork();
});
return;
}
}
// cluster.on('exit', function (worker) {
// logger.warn('worker %s died. restart...', worker.process.pid);
// cluster.fork();
// });
// return;
// }
// }
const app = express();
app.disable('x-powered-by');
@ -414,4 +415,4 @@ process.on('uncaughtException', (err) => {
logger.shutdown(() => {
process.exit(1);
});
});
});

View File

@ -31,16 +31,16 @@
*/
'use strict';
var config = require('config');
var configCoAuthoring = config.get('services.CoAuthoring');
var co = require('co');
var logger = require('./../../Common/sources/logger');
var pubsubService = require('./pubsubRabbitMQ');
const sqlBase = require('./databaseConnectors/baseConnector');
var commonDefines = require('./../../Common/sources/commondefines');
var constants = require('./../../Common/sources/constants');
var utils = require('./../../Common/sources/utils');
import config from 'config';
import co from 'co';
import * as logger from './../../Common/sources/logger.js';
import pubsubService from './pubsubRabbitMQ.js';
import * as sqlBase from './databaseConnectors/baseConnector.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as constants from './../../Common/sources/constants.js';
import * as utils from './../../Common/sources/utils.js';
var configCoAuthoring = config.get('services.CoAuthoring');
var cfgRedisPrefix = configCoAuthoring.get('redis.prefix');
var redisKeyShutdown = cfgRedisPrefix + constants.REDIS_KEY_SHUTDOWN;
@ -48,7 +48,7 @@ var WAIT_TIMEOUT = 30000;
var LOOP_TIMEOUT = 1000;
var EXEC_TIMEOUT = WAIT_TIMEOUT + utils.getConvertionTimeout(undefined);
exports.shutdown = function(ctx, editorStat, status) {
export const shutdown = function(ctx, editorStat, status) {
return co(function*() {
var res = true;
try {

View File

@ -32,17 +32,17 @@
'use strict';
const crypto = require('crypto');
var sqlBase = require('./databaseConnectors/baseConnector');
var constants = require('./../../Common/sources/constants');
var commonDefines = require('./../../Common/sources/commondefines');
var tenantManager = require('./../../Common/sources/tenantManager');
var config = require('config');
import crypto from 'crypto';
import * as sqlBase from './databaseConnectors/baseConnector.js';
import * as constants from './../../Common/sources/constants.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as tenantManager from './../../Common/sources/tenantManager.js';
import config from 'config';
const cfgTableResult = config.get('services.CoAuthoring.sql.tableResult');
let addSqlParam = sqlBase.addSqlParameter;
let concatParams = sqlBase.concatParams;
let addSqlParam = sqlBase.dbInstance.addSqlParameter;
let concatParams = sqlBase.dbInstance.concatParams;
var RANDOM_KEY_MAX = 10000;
@ -96,7 +96,7 @@ TaskResultData.prototype.completeDefaults = function() {
};
function upsert(ctx, task) {
return sqlBase.upsert(ctx, task);
return sqlBase.dbInstance.upsert(ctx, task);
}
function select(ctx, docId) {
@ -105,7 +105,7 @@ function select(ctx, docId) {
let p1 = addSqlParam(ctx.tenant, values);
let p2 = addSqlParam(docId, values);
let sqlCommand = `SELECT * FROM ${cfgTableResult} WHERE tenant=${p1} AND id=${p2};`;
sqlBase.sqlQuery(ctx, sqlCommand, function(error, result) {
sqlBase.dbInstance.sqlQuery(ctx, sqlCommand, function(error, result) {
if (error) {
reject(error);
} else {
@ -174,7 +174,7 @@ function update(ctx, task, setPassword) {
let p1 = addSqlParam(task.tenant, values);
let p2 = addSqlParam(task.key, values);
let sqlCommand = `UPDATE ${cfgTableResult} SET ${sqlSet} WHERE tenant=${p1} AND id=${p2};`;
sqlBase.sqlQuery(ctx, sqlCommand, function(error, result) {
sqlBase.dbInstance.sqlQuery(ctx, sqlCommand, function(error, result) {
if (error) {
reject(error);
} else {
@ -194,7 +194,7 @@ function updateIf(ctx, task, mask) {
let sqlSet = commandArg.join(', ');
let sqlWhere = commandArgMask.join(' AND ');
let sqlCommand = `UPDATE ${cfgTableResult} SET ${sqlSet} WHERE ${sqlWhere};`;
sqlBase.sqlQuery(ctx, sqlCommand, function(error, result) {
sqlBase.dbInstance.sqlQuery(ctx, sqlCommand, function(error, result) {
if (error) {
reject(error);
} else {
@ -245,7 +245,7 @@ function addRandomKey(ctx, task, key, opt_prefix, opt_size) {
let p8 = addSqlParam(task.baseurl, values);
let sqlCommand = `INSERT INTO ${cfgTableResult} (tenant, id, status, status_info, last_open_date, user_index, change_id, callback, baseurl)` +
` VALUES (${p0}, ${p1}, ${p2}, ${p3}, ${p4}, ${p5}, ${p6}, ${p7}, ${p8});`;
sqlBase.sqlQuery(ctx, sqlCommand, function(error, result) {
sqlBase.dbInstance.sqlQuery(ctx, sqlCommand, function(error, result) {
if (error) {
reject(error);
} else {
@ -286,7 +286,7 @@ function remove(ctx, docId) {
let p1 = addSqlParam(ctx.tenant, values);
let p2 = addSqlParam(docId, values);
const sqlCommand = `DELETE FROM ${cfgTableResult} WHERE tenant=${p1} AND id=${p2};`;
sqlBase.sqlQuery(ctx, sqlCommand, function(error, result) {
sqlBase.dbInstance.sqlQuery(ctx, sqlCommand, function(error, result) {
if (error) {
reject(error);
} else {
@ -303,7 +303,7 @@ function removeIf(ctx, mask) {
commandArgMask.push('id=' + addSqlParam(mask.key, values));
let sqlWhere = commandArgMask.join(' AND ');
const sqlCommand = `DELETE FROM ${cfgTableResult} WHERE ${sqlWhere};`;
sqlBase.sqlQuery(ctx, sqlCommand, function(error, result) {
sqlBase.dbInstance.sqlQuery(ctx, sqlCommand, function(error, result) {
if (error) {
reject(error);
} else {
@ -313,13 +313,16 @@ function removeIf(ctx, mask) {
});
}
exports.TaskResultData = TaskResultData;
exports.upsert = upsert;
exports.select = select;
exports.update = update;
exports.updateIf = updateIf;
exports.restoreInitialPassword = restoreInitialPassword;
exports.addRandomKeyTask = addRandomKeyTask;
exports.remove = remove;
exports.removeIf = removeIf;
exports.getExpired = sqlBase.getExpired;
export {
TaskResultData,
upsert,
select,
update,
updateIf,
restoreInitialPassword,
addRandomKeyTask,
remove,
removeIf,
}
export const getExpired = sqlBase.getExpired

View File

@ -32,19 +32,20 @@
'use strict';
const util = require("util");
const config = require('config');
const exifParser = require('exif-parser');
import util from 'util';
import config from 'config';
import exifParser from 'exif-parser';
//set global window to fix issue https://github.com/photopea/UTIF.js/issues/130
if (!global.window) {
global.window = global;
}
const Jimp = require('jimp');
const locale = require('windows-locale');
const ms = require('ms');
import * as Jimp from 'jimp';
import locale from 'windows-locale' with { type: "json" };
import ms from 'ms';
const tenantManager = require('../../Common/sources/tenantManager');
const { notificationTypes, ...notificationService } = require('../../Common/sources/notificationService');
import * as tenantManager from './../../Common/sources/tenantManager.js';
import * as notificationModule from './../../Common/sources/notificationService.js';
const { notificationTypes, ...notificationService } = notificationModule;
const cfgStartNotifyFrom = ms(config.get('license.warning_license_expiration'));
const cfgNotificationRuleLicenseExpirationWarning = config.get('notification.rules.licenseExpirationWarning.template');
@ -151,7 +152,9 @@ async function notifyLicenseExpiration(ctx, endDate) {
}
}
module.exports.fixImageExifRotation = fixImageExifRotation;
module.exports.convertImageToPng = convertImageToPng;
module.exports.localeToLCID = localeToLCID;
module.exports.notifyLicenseExpiration = notifyLicenseExpiration;
export {
fixImageExifRotation,
convertImageToPng,
localeToLCID,
notifyLicenseExpiration,
}

View File

@ -32,35 +32,32 @@
'use strict';
const path = require('path');
const { pipeline } = require('node:stream/promises');
const crypto = require('crypto');
let util = require('util');
const {URL} = require('url');
const co = require('co');
const jwt = require('jsonwebtoken');
const config = require('config');
const { createReadStream } = require('fs');
const { stat, lstat, readdir } = require('fs/promises');
const utf7 = require('utf7');
const mimeDB = require('mime-db');
const xmlbuilder2 = require('xmlbuilder2');
const logger = require('./../../Common/sources/logger');
const utils = require('./../../Common/sources/utils');
const constants = require('./../../Common/sources/constants');
const commonDefines = require('./../../Common/sources/commondefines');
const formatChecker = require('./../../Common/sources/formatchecker');
const operationContext = require('./../../Common/sources/operationContext');
const tenantManager = require('./../../Common/sources/tenantManager');
const sqlBase = require('./databaseConnectors/baseConnector');
const taskResult = require('./taskresult');
const canvasService = require('./canvasservice');
const converterService = require('./converterservice');
let mime;
import('mime').then(module => {
mime = module.default;
})
const license = require('./../../Common/sources/license');
import path from 'path';
import { pipeline } from 'node:stream/promises';
import crypto from 'crypto';
import util from 'util';
import {URL} from 'url';
import co from 'co';
import jwt from 'jsonwebtoken';
import config from 'config';
import { createReadStream } from 'fs';
import { stat, lstat, readdir } from 'fs/promises';
import utf7 from 'utf7';
import mimeDB from 'mime-db';
import xmlbuilder2 from 'xmlbuilder2';
import * as logger from './../../Common/sources/logger.js';
import * as utils from './../../Common/sources/utils.js';
import * as constants from './../../Common/sources/constants.js';
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as formatChecker from './../../Common/sources/formatchecker.js';
import * as operationContext from './../../Common/sources/operationContext.js';
import * as tenantManager from './../../Common/sources/tenantManager.js';
import * as sqlBase from './databaseConnectors/baseConnector.js';
import * as taskResult from './taskresult.js';
import * as canvasService from './canvasservice.js';
import * as converterService from './converterservice.js';
import mime from 'mime';
import * as license from './../../Common/sources/license.js';
const cfgTokenOutboxAlgorithm = config.get('services.CoAuthoring.token.outbox.algorithm');
const cfgTokenOutboxExpires = config.get('services.CoAuthoring.token.outbox.expires');
@ -1159,26 +1156,28 @@ function dummyOk(req, res) {
res.sendStatus(200);
}
exports.checkIpFilter = checkIpFilter;
exports.discovery = discovery;
exports.collaboraCapabilities = collaboraCapabilities;
exports.parseWopiCallback = parseWopiCallback;
exports.getEditorHtml = getEditorHtml;
exports.getConverterHtml = getConverterHtml;
exports.putFile = putFile;
exports.parsePutFileResponse = parsePutFileResponse;
exports.putRelativeFile = putRelativeFile;
exports.renameFile = renameFile;
exports.refreshFile = refreshFile;
exports.lock = lock;
exports.unlock = unlock;
exports.fillStandardHeaders = fillStandardHeaders;
exports.getWopiUnlockMarker = getWopiUnlockMarker;
exports.getWopiModifiedMarker = getWopiModifiedMarker;
exports.getFileTypeByInfo = getFileTypeByInfo;
exports.getWopiFileUrl = getWopiFileUrl;
exports.isWopiJwtToken = isWopiJwtToken;
exports.setIsShutdown = setIsShutdown;
exports.dummyCheckFileInfo = dummyCheckFileInfo;
exports.dummyGetFile = dummyGetFile;
exports.dummyOk = dummyOk;
export {
checkIpFilter,
discovery,
collaboraCapabilities,
parseWopiCallback,
getEditorHtml,
getConverterHtml,
putFile,
parsePutFileResponse,
putRelativeFile,
renameFile,
refreshFile,
lock,
unlock,
fillStandardHeaders,
getWopiUnlockMarker,
getWopiModifiedMarker,
getFileTypeByInfo,
getWopiFileUrl,
isWopiJwtToken,
setIsShutdown,
dummyCheckFileInfo,
dummyGetFile,
dummyOk,
}

View File

@ -4,6 +4,7 @@
"homepage": "https://www.onlyoffice.com",
"private": true,
"bin": "sources/convertermaster.js",
"type": "module",
"dependencies": {
"@expo/spawn-async": "1.7.2",
"bytes": "3.1.2",

View File

@ -31,32 +31,29 @@
*/
'use strict';
var os = require('os');
var path = require('path');
var fs = require('fs');
var url = require('url');
var co = require('co');
var config = require('config');
var spawnAsync = require('@expo/spawn-async');
const bytes = require('bytes');
let lcid;
import('lcid').then(module => {
lcid = module.default;
})
const ms = require('ms');
import os from 'os';
import path from 'path';
import fs from 'fs';
import url from 'url';
import co from 'co';
import config from 'config';
import spawnAsync from '@expo/spawn-async';
import bytes from 'bytes';
import ms from 'ms';
import lcid from 'lcid';
var commonDefines = require('./../../Common/sources/commondefines');
var storage = require('./../../Common/sources/storage/storage-base');
var utils = require('./../../Common/sources/utils');
var constants = require('./../../Common/sources/constants');
var baseConnector = require('../../DocService/sources/databaseConnectors/baseConnector');
const wopiClient = require('./../../DocService/sources/wopiClient');
const taskResult = require('./../../DocService/sources/taskresult');
var statsDClient = require('./../../Common/sources/statsdclient');
var queueService = require('./../../Common/sources/taskqueueRabbitMQ');
const formatChecker = require('./../../Common/sources/formatchecker');
const operationContext = require('./../../Common/sources/operationContext');
const tenantManager = require('./../../Common/sources/tenantManager');
import * as commonDefines from './../../Common/sources/commondefines.js';
import * as storage from './../../Common/sources/storage/storage-base.js';
import * as utils from './../../Common/sources/utils.js';
import * as constants from './../../Common/sources/constants.js';
import * as baseConnector from '../../DocService/sources/databaseConnectors/baseConnector.js';
import * as wopiClient from './../../DocService/sources/wopiClient.js';
import * as taskResult from './../../DocService/sources/taskresult.js';
import * as statsDClient from './../../Common/sources/statsdclient.js';
import queueService from './../../Common/sources/taskqueueRabbitMQ.js';
import * as formatChecker from './../../Common/sources/formatchecker.js';
import * as operationContext from './../../Common/sources/operationContext.js';
import * as tenantManager from './../../Common/sources/tenantManager.js';
const cfgMaxDownloadBytes = config.get('FileConverter.converter.maxDownloadBytes');
const cfgDownloadTimeout = config.get('FileConverter.converter.downloadTimeout');
@ -1250,4 +1247,15 @@ function run() {
}
});
}
exports.run = run;
export {
TaskQueueDataConvert,
getTempDir,
changeFormatToExtendedPdf,
writeProcessOutputToLog,
ackTask,
receiveTaskSetTimeout,
receiveTask,
createErrorResponse,
simulateErrorResponse,
run
};

View File

@ -32,21 +32,21 @@
'use strict';
const cluster = require('cluster');
const logger = require('./../../Common/sources/logger');
const operationContext = require('./../../Common/sources/operationContext');
import cluster from 'cluster';
import * as logger from './../../Common/sources/logger.js';
import * as operationContext from './../../Common/sources/operationContext.js';
import fs from 'fs';
import co from 'co';
import os from 'os';
import config from 'config';
import * as license from './../../Common/sources/license.js';
import * as converter from './converter.js';
if (cluster.isMaster) {
const fs = require('fs');
const co = require('co');
const os = require('os');
const config = require('config');
const license = require('./../../Common/sources/license');
const cfgLicenseFile = config.get('license.license_file');
const cfgMaxProcessCount = config.get('FileConverter.converter.maxprocesscount');
var workersCount = 0;
let workersCount = 0;
const readLicense = async function () {
const numCPUs = os.cpus().length;
const availableParallelism = os.availableParallelism?.();
@ -57,7 +57,7 @@ if (cluster.isMaster) {
//todo send license to workers for multi-tenancy
};
const updateWorkers = () => {
var i;
let i;
const arrKeyWorkers = Object.keys(cluster.workers);
if (arrKeyWorkers.length < workersCount) {
for (i = arrKeyWorkers.length; i < workersCount; ++i) {
@ -93,7 +93,6 @@ if (cluster.isMaster) {
fs.watchFile(cfgLicenseFile, updateLicense);
setInterval(updateLicense, 86400000);
} else {
const converter = require('./converter');
converter.run();
}

1420
bundle/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

16
bundle/package.json Normal file
View File

@ -0,0 +1,16 @@
{
"name": "your-project",
"version": "1.0.0",
"dependencies": {
"@azure/app-configuration": "^1.9.0",
"@azure/identity": "^4.9.1",
"@azure/keyvault-secrets": "^4.9.0",
"@azure/storage-blob": "12.27.0",
"oci-common": "^2.107.2",
"oci-objectstorage": "^2.107.2",
"oci-secrets": "^2.107.2",
"oracledb": "^6.8.0",
"snappy": "^7.2.2",
"win-ca": "^3.5.1"
}
}