diff --git a/.gitignore b/.gitignore index e7a33fb0..a09e9862 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,7 @@ node_modules /Gruntfile.js.out local-development-*.json *.pyc -run-develop-local.py \ No newline at end of file +run-develop-local.py +bundle/node_modules +bundle/*.js +bundle/*.exe diff --git a/Common/package.json b/Common/package.json index 388935d9..5687556d 100644 --- a/Common/package.json +++ b/Common/package.json @@ -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", diff --git a/Common/sources/activeMQCore.js b/Common/sources/activeMQCore.js index 101b5b65..e4ae318e 100644 --- a/Common/sources/activeMQCore.js +++ b/Common/sources/activeMQCore.js @@ -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 +}; diff --git a/Common/sources/commondefines.js b/Common/sources/commondefines.js index 8a5cb663..41062fb6 100644 --- a/Common/sources/commondefines.js +++ b/Common/sources/commondefines.js @@ -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 +}; diff --git a/Common/sources/constants.js b/Common/sources/constants.js index 4fc0d807..cf1cc7af 100644 --- a/Common/sources/constants.js +++ b/Common/sources/constants.js @@ -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', diff --git a/Common/sources/formatchecker.js b/Common/sources/formatchecker.js index 654391b2..4d479940 100644 --- a/Common/sources/formatchecker.js +++ b/Common/sources/formatchecker.js @@ -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 +} diff --git a/Common/sources/license.js b/Common/sources/license.js index d43ee210..b8986d42 100644 --- a/Common/sources/license.js +++ b/Common/sources/license.js @@ -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; diff --git a/Common/sources/logger.js b/Common/sources/logger.js index 5e71c95b..05dc41b6 100644 --- a/Common/sources/logger.js +++ b/Common/sources/logger.js @@ -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); -}; +} diff --git a/Common/sources/mailService.js b/Common/sources/mailService.js index 574022c2..0834740d 100644 --- a/Common/sources/mailService.js +++ b/Common/sources/mailService.js @@ -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, diff --git a/Common/sources/notificationService.js b/Common/sources/notificationService.js index 5ba2f481..2397d903 100644 --- a/Common/sources/notificationService.js +++ b/Common/sources/notificationService.js @@ -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 }; diff --git a/Common/sources/operationContext.js b/Common/sources/operationContext.js index 78fe402f..c2bdd861 100644 --- a/Common/sources/operationContext.js +++ b/Common/sources/operationContext.js @@ -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(); diff --git a/Common/sources/rabbitMQCore.js b/Common/sources/rabbitMQCore.js index 2d720990..76eaf501 100644 --- a/Common/sources/rabbitMQCore.js +++ b/Common/sources/rabbitMQCore.js @@ -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 +}; diff --git a/Common/sources/statsdclient.js b/Common/sources/statsdclient.js index f5bbb3bb..a411e434 100644 --- a/Common/sources/statsdclient.js +++ b/Common/sources/statsdclient.js @@ -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; -}; +} diff --git a/Common/sources/storage/storage-az.js b/Common/sources/storage/storage-az.js index 98457dd7..50512437 100644 --- a/Common/sources/storage/storage-az.js +++ b/Common/sources/storage/storage-az.js @@ -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, }; diff --git a/Common/sources/storage/storage-base.js b/Common/sources/storage/storage-base.js index 01e78324..00b4826e 100644 --- a/Common/sources/storage/storage-base.js +++ b/Common/sources/storage/storage-base.js @@ -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, diff --git a/Common/sources/storage/storage-fs.js b/Common/sources/storage/storage-fs.js index de367831..b63720ae 100644 --- a/Common/sources/storage/storage-fs.js +++ b/Common/sources/storage/storage-fs.js @@ -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, diff --git a/Common/sources/storage/storage-s3.js b/Common/sources/storage/storage-s3.js index 8a454c1e..10885c95 100644 --- a/Common/sources/storage/storage-s3.js +++ b/Common/sources/storage/storage-s3.js @@ -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, }; diff --git a/Common/sources/taskqueueRabbitMQ.js b/Common/sources/taskqueueRabbitMQ.js index 632bb8c0..be6ba688 100644 --- a/Common/sources/taskqueueRabbitMQ.js +++ b/Common/sources/taskqueueRabbitMQ.js @@ -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; diff --git a/Common/sources/tenantManager.js b/Common/sources/tenantManager.js index 0d8fd3aa..8bfe20fa 100644 --- a/Common/sources/tenantManager.js +++ b/Common/sources/tenantManager.js @@ -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 +}; diff --git a/Common/sources/utils.js b/Common/sources/utils.js index 14c5c497..b863967f 100644 --- a/Common/sources/utils.js +++ b/Common/sources/utils.js @@ -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 '<'; @@ -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 = ''; if (undefined != val.error) { - xml += '' + exports.encodeXml(val.error.toString()) + ''; + xml += '' + encodeXml(val.error.toString()) + ''; } else { if (val.fileUrl) { - xml += '' + exports.encodeXml(val.fileUrl) + ''; + xml += '' + encodeXml(val.fileUrl) + ''; } else { xml += ''; } if (val.fileType) { - xml += '' + exports.encodeXml(val.fileType) + ''; + xml += '' + encodeXml(val.fileType) + ''; } else { xml += ''; } @@ -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; diff --git a/DocService/package.json b/DocService/package.json index 6ef9f7e3..bfeaab8b 100644 --- a/DocService/package.json +++ b/DocService/package.json @@ -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", diff --git a/DocService/sources/DocsCoServer.js b/DocService/sources/DocsCoServer.js index 4991b746..6513958d 100644 --- a/DocService/sources/DocsCoServer.js +++ b/DocService/sources/DocsCoServer.js @@ -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 { diff --git a/DocService/sources/canvasservice.js b/DocService/sources/canvasservice.js index 3d7d3f25..4a8d65aa 100644 --- a/DocService/sources/canvasservice.js +++ b/DocService/sources/canvasservice.js @@ -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 +} diff --git a/DocService/sources/changes2forgotten.js b/DocService/sources/changes2forgotten.js index 5ef58744..a5f6b29b 100644 --- a/DocService/sources/changes2forgotten.js +++ b/DocService/sources/changes2forgotten.js @@ -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 +} diff --git a/DocService/sources/converterservice.js b/DocService/sources/converterservice.js index 5c4bf2ba..956ec573 100644 --- a/DocService/sources/converterservice.js +++ b/DocService/sources/converterservice.js @@ -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 +}; diff --git a/DocService/sources/database.js b/DocService/sources/database.js deleted file mode 100644 index 71b108ec..00000000 --- a/DocService/sources/database.js +++ /dev/null @@ -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(); - }); - }); - }); -}; \ No newline at end of file diff --git a/DocService/sources/databaseConnectors/baseConnector.js b/DocService/sources/databaseConnectors/baseConnector.js index 28cbecc7..f72dcdad 100644 --- a/DocService/sources/databaseConnectors/baseConnector.js +++ b/DocService/sources/databaseConnectors/baseConnector.js @@ -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 -}; \ No newline at end of file + _getDateTime2 as getDateTime, + dbInstance +}; +export const UserCallback = connectorUtilities.UserCallback; +export const DocumentPassword = connectorUtilities.DocumentPassword; +export const DocumentAdditional = connectorUtilities.DocumentAdditional; \ No newline at end of file diff --git a/DocService/sources/databaseConnectors/connectorUtilities.js b/DocService/sources/databaseConnectors/connectorUtilities.js index 3d4a259c..6c9185c1 100644 --- a/DocService/sources/databaseConnectors/connectorUtilities.js +++ b/DocService/sources/databaseConnectors/connectorUtilities.js @@ -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 diff --git a/DocService/sources/databaseConnectors/damengConnector.js b/DocService/sources/databaseConnectors/damengConnector.js index bedd1be4..0f48bd5f 100644 --- a/DocService/sources/databaseConnectors/damengConnector.js +++ b/DocService/sources/databaseConnectors/damengConnector.js @@ -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, diff --git a/DocService/sources/databaseConnectors/mssqlConnector.js b/DocService/sources/databaseConnectors/mssqlConnector.js index 4ec872b4..144a0af0 100644 --- a/DocService/sources/databaseConnectors/mssqlConnector.js +++ b/DocService/sources/databaseConnectors/mssqlConnector.js @@ -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, diff --git a/DocService/sources/databaseConnectors/mysqlConnector.js b/DocService/sources/databaseConnectors/mysqlConnector.js index d22a0b27..e2abf276 100644 --- a/DocService/sources/databaseConnectors/mysqlConnector.js +++ b/DocService/sources/databaseConnectors/mysqlConnector.js @@ -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 +}; diff --git a/DocService/sources/databaseConnectors/oracleConnector.js b/DocService/sources/databaseConnectors/oracleConnector.js index 09813971..585826a8 100644 --- a/DocService/sources/databaseConnectors/oracleConnector.js +++ b/DocService/sources/databaseConnectors/oracleConnector.js @@ -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, diff --git a/DocService/sources/databaseConnectors/postgreConnector.js b/DocService/sources/databaseConnectors/postgreConnector.js index 17fb18d6..cb8072f4 100644 --- a/DocService/sources/databaseConnectors/postgreConnector.js +++ b/DocService/sources/databaseConnectors/postgreConnector.js @@ -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, diff --git a/DocService/sources/editorDataMemory.js b/DocService/sources/editorDataMemory.js index 19c5adec..bc8c2097 100644 --- a/DocService/sources/editorDataMemory.js +++ b/DocService/sources/editorDataMemory.js @@ -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 } diff --git a/DocService/sources/editorDataRedis.js b/DocService/sources/editorDataRedis.js new file mode 100644 index 00000000..4b0f9fb3 --- /dev/null +++ b/DocService/sources/editorDataRedis.js @@ -0,0 +1 @@ +export default null; \ No newline at end of file diff --git a/DocService/sources/fileuploaderservice.js b/DocService/sources/fileuploaderservice.js index 71cc11bb..73131a98 100644 --- a/DocService/sources/fileuploaderservice.js +++ b/DocService/sources/fileuploaderservice.js @@ -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'; diff --git a/DocService/sources/gc.js b/DocService/sources/gc.js index 39b2bd00..4c3694a2 100644 --- a/DocService/sources/gc.js +++ b/DocService/sources/gc.js @@ -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; +}; \ No newline at end of file diff --git a/DocService/sources/pubsubRabbitMQ.js b/DocService/sources/pubsubRabbitMQ.js index c23718bb..45be74ce 100644 --- a/DocService/sources/pubsubRabbitMQ.js +++ b/DocService/sources/pubsubRabbitMQ.js @@ -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; diff --git a/DocService/sources/routes/static.js b/DocService/sources/routes/static.js index 73bb6987..ff126043 100644 --- a/DocService/sources/routes/static.js +++ b/DocService/sources/routes/static.js @@ -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; diff --git a/DocService/sources/server.js b/DocService/sources/server.js index 7fb34ace..cc41e52b 100644 --- a/DocService/sources/server.js +++ b/DocService/sources/server.js @@ -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); }); -}); +}); \ No newline at end of file diff --git a/DocService/sources/shutdown.js b/DocService/sources/shutdown.js index 273889f6..667ff3e3 100644 --- a/DocService/sources/shutdown.js +++ b/DocService/sources/shutdown.js @@ -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 { diff --git a/DocService/sources/taskresult.js b/DocService/sources/taskresult.js index 4a5fd6be..ae22d9c4 100644 --- a/DocService/sources/taskresult.js +++ b/DocService/sources/taskresult.js @@ -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 diff --git a/DocService/sources/utilsDocService.js b/DocService/sources/utilsDocService.js index 17ccb61d..824f1560 100644 --- a/DocService/sources/utilsDocService.js +++ b/DocService/sources/utilsDocService.js @@ -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, +} diff --git a/DocService/sources/wopiClient.js b/DocService/sources/wopiClient.js index 5ba8b400..3f70457d 100644 --- a/DocService/sources/wopiClient.js +++ b/DocService/sources/wopiClient.js @@ -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, +} diff --git a/FileConverter/package.json b/FileConverter/package.json index 23781d46..cd6355a6 100644 --- a/FileConverter/package.json +++ b/FileConverter/package.json @@ -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", diff --git a/FileConverter/sources/converter.js b/FileConverter/sources/converter.js index f63de192..767915a2 100644 --- a/FileConverter/sources/converter.js +++ b/FileConverter/sources/converter.js @@ -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 +}; diff --git a/FileConverter/sources/convertermaster.js b/FileConverter/sources/convertermaster.js index 2209e8c9..f5f3b69d 100644 --- a/FileConverter/sources/convertermaster.js +++ b/FileConverter/sources/convertermaster.js @@ -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(); } diff --git a/bundle/package-lock.json b/bundle/package-lock.json new file mode 100644 index 00000000..8dfe0d62 --- /dev/null +++ b/bundle/package-lock.json @@ -0,0 +1,1420 @@ +{ + "name": "your-project", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "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" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/app-configuration": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/app-configuration/-/app-configuration-1.9.0.tgz", + "integrity": "sha512-X0AVDQygL4AGLtplLYW+W0QakJpJ417sQldOacqwcBQ882tAPdUVs6V3mZ4jUjwVsgr+dV1v9zMmijvsp6XBxA==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.5.0", + "@azure/core-http-compat": "^2.0.0", + "@azure/core-lro": "^2.5.1", + "@azure/core-paging": "^1.4.0", + "@azure/core-rest-pipeline": "^1.6.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", + "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.4.tgz", + "integrity": "sha512-f7IxTD15Qdux30s2qFARH+JxgwxWLG2Rlr4oSkPGuLWm+1p5y1+C04XGLA0vmX6EtqfutmjvpNmAfgwVIS5hpw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.20.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-http-compat": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.0.tgz", + "integrity": "sha512-qLQujmUypBBG0gxHd0j6/Jdmul6ttl24c8WGiLXIk7IHXdBlfoBqW27hyz3Xn6xbfdyVSarl1Ttbk0AwnZBYCw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-client": "^1.3.0", + "@azure/core-rest-pipeline": "^1.20.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-lro": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", + "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.2.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-paging": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", + "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.20.0.tgz", + "integrity": "sha512-ASoP8uqZBS3H/8N8at/XwFr6vYrRP3syTK0EUjDXQy0Y1/AUS+QeIRThKmTNJO2RggvBBxaXDPM7YoIwDGeA0g==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.8.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@typespec/ts-http-runtime": "^0.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", + "integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.12.0.tgz", + "integrity": "sha512-13IyjTQgABPARvG90+N2dXpC+hwp466XCdQXPCRlbWHgd3SJd5Q1VvaBGv6k1BIa4MQm6hAF1UBU1m8QUxV8sQ==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@typespec/ts-http-runtime": "^0.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-xml": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.4.5.tgz", + "integrity": "sha512-gT4H8mTaSXRz7eGTuQyq1aIJnJqeXzpOe9Ay7Z3FrCouer14CbV3VzjnJrNrQfbBpGBLO9oy8BmrY75A0p53cA==", + "license": "MIT", + "dependencies": { + "fast-xml-parser": "^5.0.7", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/identity": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.9.1.tgz", + "integrity": "sha512-986D7Cf1AOwYqSDtO/FnMAyk/Jc8qpftkGsxuehoh4F85MhQ4fICBGX/44+X1y78lN4Sqib3Bsoaoh/FvOGgmg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^4.2.0", + "@azure/msal-node": "^3.5.0", + "open": "^10.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/keyvault-common": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@azure/keyvault-common/-/keyvault-common-2.0.0.tgz", + "integrity": "sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.5.0", + "@azure/core-rest-pipeline": "^1.8.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.10.0", + "@azure/logger": "^1.1.4", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/keyvault-secrets": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@azure/keyvault-secrets/-/keyvault-secrets-4.9.0.tgz", + "integrity": "sha512-XkLsuzxFdhVIOVcELhso8OhQgY2lSWZcZn6fqjE848FwP9lJemJhu7nxYy8Q1nns6XqPB0WsTPmEkR8eu852vA==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.5.0", + "@azure/core-http-compat": "^2.0.1", + "@azure/core-lro": "^2.2.0", + "@azure/core-paging": "^1.1.1", + "@azure/core-rest-pipeline": "^1.8.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.0.0", + "@azure/keyvault-common": "^2.0.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.2.0.tgz", + "integrity": "sha512-0hKEzLhpw+ZTAfNJyRrn6s+V0nDWzXk9OjBr2TiGIu0OfMr5s2V4FpKLTAK3Ca5r5OKLbf4hkOGDPyiRjie/jA==", + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.11.1.tgz", + "integrity": "sha512-jPxASelqmP/0R1jZuYW8cboba95M9jpUi2ZqzgftddlAIRZA9KL/YaESuT55zu9+BIPS5Eo2kuhy3q2jjU3whg==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.5.2" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.5.2.tgz", + "integrity": "sha512-+G85T6oA6i4ubzjOw4BpWd8QCG2FunYN4jaz96gw3SUd8+89vwuiqLg6mtnm/lkPC95bayD+CwuwFn9wvhQGow==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.5.2.tgz", + "integrity": "sha512-mt97ieL+IpD/7Hj7Q6pGTPk3dBgvhkOV1HYyH+PkOakhbOOCEb9flAteDgBfADRXBsYJZT+ZlEbPJa4IDn9HZw==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.5.2", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@azure/storage-blob": { + "version": "12.27.0", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.27.0.tgz", + "integrity": "sha512-IQjj9RIzAKatmNca3D6bT0qJ+Pkox1WZGOg2esJF2YLHb45pQKOwGPIAV+w3rfgkj7zV3RMxpn/c6iftzSOZJQ==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.4.0", + "@azure/core-client": "^1.6.2", + "@azure/core-http-compat": "^2.0.0", + "@azure/core-lro": "^2.2.0", + "@azure/core-paging": "^1.1.1", + "@azure/core-rest-pipeline": "^1.10.1", + "@azure/core-tracing": "^1.1.2", + "@azure/core-util": "^1.6.1", + "@azure/core-xml": "^1.4.3", + "@azure/logger": "^1.0.0", + "events": "^3.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@napi-rs/snappy-android-arm-eabi": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm-eabi/-/snappy-android-arm-eabi-7.2.2.tgz", + "integrity": "sha512-H7DuVkPCK5BlAr1NfSU8bDEN7gYs+R78pSHhDng83QxRnCLmVIZk33ymmIwurmoA1HrdTxbkbuNl+lMvNqnytw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-android-arm64": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm64/-/snappy-android-arm64-7.2.2.tgz", + "integrity": "sha512-2R/A3qok+nGtpVK8oUMcrIi5OMDckGYNoBLFyli3zp8w6IArPRfg1yOfVUcHvpUDTo9T7LOS1fXgMOoC796eQw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-darwin-arm64": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-arm64/-/snappy-darwin-arm64-7.2.2.tgz", + "integrity": "sha512-USgArHbfrmdbuq33bD5ssbkPIoT7YCXCRLmZpDS6dMDrx+iM7eD2BecNbOOo7/v1eu6TRmQ0xOzeQ6I/9FIi5g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-darwin-x64": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-x64/-/snappy-darwin-x64-7.2.2.tgz", + "integrity": "sha512-0APDu8iO5iT0IJKblk2lH0VpWSl9zOZndZKnBYIc+ei1npw2L5QvuErFOTeTdHBtzvUHASB+9bvgaWnQo4PvTQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-freebsd-x64": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-freebsd-x64/-/snappy-freebsd-x64-7.2.2.tgz", + "integrity": "sha512-mRTCJsuzy0o/B0Hnp9CwNB5V6cOJ4wedDTWEthsdKHSsQlO7WU9W1yP7H3Qv3Ccp/ZfMyrmG98Ad7u7lG58WXA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm-gnueabihf": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm-gnueabihf/-/snappy-linux-arm-gnueabihf-7.2.2.tgz", + "integrity": "sha512-v1uzm8+6uYjasBPcFkv90VLZ+WhLzr/tnfkZ/iD9mHYiULqkqpRuC8zvc3FZaJy5wLQE9zTDkTJN1IvUcZ+Vcg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm64-gnu": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-gnu/-/snappy-linux-arm64-gnu-7.2.2.tgz", + "integrity": "sha512-LrEMa5pBScs4GXWOn6ZYXfQ72IzoolZw5txqUHVGs8eK4g1HR9HTHhb2oY5ySNaKakG5sOgMsb1rwaEnjhChmQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm64-musl": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-musl/-/snappy-linux-arm64-musl-7.2.2.tgz", + "integrity": "sha512-3orWZo9hUpGQcB+3aTLW7UFDqNCQfbr0+MvV67x8nMNYj5eAeUtMmUE/HxLznHO4eZ1qSqiTwLbVx05/Socdlw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-x64-gnu": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-gnu/-/snappy-linux-x64-gnu-7.2.2.tgz", + "integrity": "sha512-jZt8Jit/HHDcavt80zxEkDpH+R1Ic0ssiVCoueASzMXa7vwPJeF4ZxZyqUw4qeSy7n8UUExomu8G8ZbP6VKhgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-x64-musl": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-musl/-/snappy-linux-x64-musl-7.2.2.tgz", + "integrity": "sha512-Dh96IXgcZrV39a+Tej/owcd9vr5ihiZ3KRix11rr1v0MWtVb61+H1GXXlz6+Zcx9y8jM1NmOuiIuJwkV4vZ4WA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-arm64-msvc": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-arm64-msvc/-/snappy-win32-arm64-msvc-7.2.2.tgz", + "integrity": "sha512-9No0b3xGbHSWv2wtLEn3MO76Yopn1U2TdemZpCaEgOGccz1V+a/1d16Piz3ofSmnA13HGFz3h9NwZH9EOaIgYA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-ia32-msvc": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-ia32-msvc/-/snappy-win32-ia32-msvc-7.2.2.tgz", + "integrity": "sha512-QiGe+0G86J74Qz1JcHtBwM3OYdTni1hX1PFyLRo3HhQUSpmi13Bzc1En7APn+6Pvo7gkrcy81dObGLDSxFAkQQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-x64-msvc": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-x64-msvc/-/snappy-win32-x64-msvc-7.2.2.tgz", + "integrity": "sha512-a43cyx1nK0daw6BZxVcvDEXxKMFLSBSDTAhsFD0VqSKcC7MGUBMaqyoWUcMiI7LBSz4bxUmxDWKfCYzpEmeb3w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/isomorphic-fetch": { + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz", + "integrity": "sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw==", + "license": "MIT" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-mM4TkDpA9oixqg1Fv2vVpOFyIVLJjm5x4k0V+K/rEsizfjD7Tk7LKk3GTtbB7KCfP0FEHQtsZqFxYA0+sijNVg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jssha": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/jssha/-/jssha-2.0.0.tgz", + "integrity": "sha512-oBnY3csYnXfqZXDRBJwP1nDDJCW/+VMJ88UHT4DCy0deSXpJIQvMCwYlnmdW4M+u7PiSfQc44LmiFcUbJ8hLEw==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.15.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.9.tgz", + "integrity": "sha512-l6QaCgJSJQ0HngL1TjvEY2DlefKggyGeXP1KYvYLBX41ZDPM1FsgDMAr5c+T673NMy7VCptMOzXOuJqf5uB0bA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/opossum": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@types/opossum/-/opossum-4.1.1.tgz", + "integrity": "sha512-9TMnd8AWRVtnZMqBbbzceQoJdafErgUViogFaQ3eetsbeLtiFFZ695mepNaLtlfJi4uRP3GmHfe3CJ2DZKaxYA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/sshpk": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@types/sshpk/-/sshpk-1.10.3.tgz", + "integrity": "sha512-cru1waDhHZnZuB18E6Dgf2UXf8U93mdOEDcKYe5jTri+fpucidSs7DLmGICpLxN+95aYkwtgeyny9fBFzQVdmA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.2.tgz", + "integrity": "sha512-Gz/Sm64+Sq/vklJu1tt9t+4R2lvnud8NbTD/ZfpZtMiUX7YeVpCA8j6NSW8ptwcoLL+NmYANwqP8DV0q/bwl2w==", + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/await-semaphore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz", + "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==", + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-xml-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.3.tgz", + "integrity": "sha512-OdCYfRqfpuLUFonTNjvd30rCBZUneHpSQkCqfaeWQ9qrKcl6XlWeDBNVwGb+INAIxRshuN2jF+BE0L6gbBO2mw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-signature": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.1.tgz", + "integrity": "sha512-Y29YKEc8MQsjch/VzkUVJ+2MXd9WcR42fK5u36CZf4G8bXw2DXMTWuESiB0R6m59JAWxlPPw5/Fri/t/AyyueA==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==", + "license": "MIT" + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jssha": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jssha/-/jssha-2.4.1.tgz", + "integrity": "sha512-77DN1YurYgh+7FPCTJ2CQ6hVDHgIWiHxm4Y5/mAdnpETKYagX22pVWMz4xfKF5fcpNfMaztgVj+/B1bt2k23Eg==", + "deprecated": "jsSHA versions < 3.0.0 will no longer receive feature updates", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/oci-common": { + "version": "2.107.3", + "resolved": "https://registry.npmjs.org/oci-common/-/oci-common-2.107.3.tgz", + "integrity": "sha512-uIpynjTCkEwPBgqrQtFrjkCedKUH1ulyfQmVCMancM5V1rh+LFJ0+1KR6fmZKVd6483Bee0adZRDFMIO72d9JA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "@types/isomorphic-fetch": "0.0.35", + "@types/jsonwebtoken": "9.0.0", + "@types/jssha": "2.0.0", + "@types/opossum": "4.1.1", + "@types/sshpk": "1.10.3", + "es6-promise": "4.2.6", + "http-signature": "1.3.1", + "isomorphic-fetch": "3.0.0", + "jsonwebtoken": "9.0.0", + "jssha": "2.4.1", + "opossum": "5.0.1", + "sshpk": "1.16.1", + "uuid": "3.3.3" + } + }, + "node_modules/oci-common/node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/oci-common/node_modules/uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/oci-objectstorage": { + "version": "2.107.3", + "resolved": "https://registry.npmjs.org/oci-objectstorage/-/oci-objectstorage-2.107.3.tgz", + "integrity": "sha512-DdNCf5/sGIEtkECzwLqAhwKnFNjQ/0VSbqa2bGoRhRx+2zJkQOfyFHu2CkSzmgZmeL5DBLO6e0mjtfK47Um5ew==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "await-semaphore": "^0.1.3", + "oci-common": "2.107.3", + "oci-workrequests": "2.107.3" + } + }, + "node_modules/oci-secrets": { + "version": "2.107.3", + "resolved": "https://registry.npmjs.org/oci-secrets/-/oci-secrets-2.107.3.tgz", + "integrity": "sha512-VthFwqZtOkifAiHYQ6M69k3D62D8I5ZO7yO3U2e0rqmtk5fR1KFR5dzhkZ+2PVGasCSxS5Bwe+ZFetec1yDsSg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.107.3", + "oci-workrequests": "2.107.3" + } + }, + "node_modules/oci-workrequests": { + "version": "2.107.3", + "resolved": "https://registry.npmjs.org/oci-workrequests/-/oci-workrequests-2.107.3.tgz", + "integrity": "sha512-d5nzZB+7QtxO0r68Qgt1wwVp0dhB/GT5ireEl5gNaM8z/UJHPn8RbU1nfOti9eVxXK36xwD+lz49UPIVoV3Eng==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.107.3", + "oci-workrequests": "2.107.3" + } + }, + "node_modules/open": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opossum": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/opossum/-/opossum-5.0.1.tgz", + "integrity": "sha512-iUDUQmFl3RanaBVLMDTZ6WtXj/Hk84pwJ5JWoJaQd1lXGifdApHhszI3biZvdBDdpTERCmB6x+7+uNvzhzVZIg==", + "license": "Apache-2.0", + "engines": { + "node": ">= 10" + } + }, + "node_modules/oracledb": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/oracledb/-/oracledb-6.8.0.tgz", + "integrity": "sha512-A4ds4n4xtjPTzk1gwrHWuMeWsEcrScF0GFgVebGrhNpHSAzn6eDwMKcSbakZODKfFcI099iqhmqWsgko8D+7Ww==", + "hasInstallScript": true, + "license": "(Apache-2.0 OR UPL-1.0)", + "engines": { + "node": ">=14.6" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/snappy": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/snappy/-/snappy-7.2.2.tgz", + "integrity": "sha512-iADMq1kY0v3vJmGTuKcFWSXt15qYUz7wFkArOrsSg0IFfI3nJqIJvK2/ZbEIndg7erIJLtAVX2nSOqPz7DcwbA==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/snappy-android-arm-eabi": "7.2.2", + "@napi-rs/snappy-android-arm64": "7.2.2", + "@napi-rs/snappy-darwin-arm64": "7.2.2", + "@napi-rs/snappy-darwin-x64": "7.2.2", + "@napi-rs/snappy-freebsd-x64": "7.2.2", + "@napi-rs/snappy-linux-arm-gnueabihf": "7.2.2", + "@napi-rs/snappy-linux-arm64-gnu": "7.2.2", + "@napi-rs/snappy-linux-arm64-musl": "7.2.2", + "@napi-rs/snappy-linux-x64-gnu": "7.2.2", + "@napi-rs/snappy-linux-x64-musl": "7.2.2", + "@napi-rs/snappy-win32-arm64-msvc": "7.2.2", + "@napi-rs/snappy-win32-ia32-msvc": "7.2.2", + "@napi-rs/snappy-win32-x64-msvc": "7.2.2" + } + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strnum": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.0.tgz", + "integrity": "sha512-w0S//9BqZZGw0L0Y8uLSelFGnDJgTyyNQLmSlPnVz43zPAiqu3w4t8J8sDqqANOGeZIZ/9jWuPguYcEnsoHv4A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/win-ca": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/win-ca/-/win-ca-3.5.1.tgz", + "integrity": "sha512-RNy9gpBS6cxWHjfbqwBA7odaHyT+YQNhtdpJZwYCFoxB/Dq22oeOZ9YCXMwjhLytKpo7JJMnKdJ/ve7N12zzfQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "is-electron": "^2.2.0", + "make-dir": "^1.3.0", + "node-forge": "^1.2.1", + "split": "^1.0.1" + } + } + } +} diff --git a/bundle/package.json b/bundle/package.json new file mode 100644 index 00000000..c009ba82 --- /dev/null +++ b/bundle/package.json @@ -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" + } +}