Merge remote-tracking branch 'upstream/v2.6.x-release' into v2.6-tests-fixes
This commit is contained in:
commit
282a81b0e9
@ -11,7 +11,7 @@ stages:
|
||||
|
||||
# define which docker image to use for builds
|
||||
default:
|
||||
image: gitlab.senfcall.de:5050/senfcall-public/docker-bbb-build:v2022-07-12
|
||||
image: gitlab.senfcall.de:5050/senfcall-public/docker-bbb-build:v2022-12-08-meteor-290
|
||||
|
||||
# This stage uses git to find out since when each package has been unmodified.
|
||||
# it then checks an API endpoint on the package server to find out for which of
|
||||
|
@ -47,6 +47,7 @@ import org.bigbluebutton.api.domain.BreakoutRoomsParams;
|
||||
import org.bigbluebutton.api.domain.LockSettingsParams;
|
||||
import org.bigbluebutton.api.domain.Meeting;
|
||||
import org.bigbluebutton.api.domain.Group;
|
||||
import org.bigbluebutton.api.service.ServiceUtils;
|
||||
import org.bigbluebutton.api.util.ParamsUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -685,7 +686,7 @@ public class ParamsProcessorUtil {
|
||||
String parentMeetingId = "";
|
||||
if (isBreakout) {
|
||||
internalMeetingId = params.get(ApiParams.MEETING_ID);
|
||||
parentMeetingId = params.get(ApiParams.PARENT_MEETING_ID);
|
||||
parentMeetingId = ServiceUtils.findMeetingFromMeetingID(params.get(ApiParams.PARENT_MEETING_ID)).getInternalId();
|
||||
// We rebuild the the external meeting using the has of the parent
|
||||
// meeting, the shared timestamp and the sequence number
|
||||
String timeStamp = StringUtils.substringAfter(internalMeetingId, "-");
|
||||
|
@ -1 +1 @@
|
||||
BIGBLUEBUTTON_RELEASE=2.6.0-beta.2
|
||||
BIGBLUEBUTTON_RELEASE=2.6.0-beta.3
|
||||
|
@ -5,20 +5,20 @@
|
||||
|
||||
meteor-base@1.5.1
|
||||
mobile-experience@1.1.0
|
||||
mongo@1.15.0
|
||||
reactive-var@1.0.11
|
||||
mongo@1.16.3
|
||||
reactive-var@1.0.12
|
||||
|
||||
standard-minifier-css@1.8.1
|
||||
standard-minifier-js@2.8.0
|
||||
standard-minifier-css@1.8.3
|
||||
standard-minifier-js@2.8.1
|
||||
es5-shim@4.8.0
|
||||
ecmascript@0.16.2
|
||||
ecmascript@0.16.4
|
||||
shell-server@0.5.0
|
||||
|
||||
static-html@1.3.2
|
||||
react-meteor-data
|
||||
session@1.2.0
|
||||
tracker@1.2.0
|
||||
check@1.3.1
|
||||
session@1.2.1
|
||||
tracker@1.2.1
|
||||
check@1.3.2
|
||||
|
||||
rocketchat:streamer
|
||||
meteortesting:mocha
|
||||
|
@ -1 +1 @@
|
||||
METEOR@2.7.3
|
||||
METEOR@2.9.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
allow-deny@1.1.1
|
||||
autoupdate@1.8.0
|
||||
babel-compiler@7.9.0
|
||||
babel-compiler@7.10.1
|
||||
babel-runtime@1.5.1
|
||||
base64@1.0.12
|
||||
binary-heap@1.0.11
|
||||
@ -9,21 +9,21 @@ boilerplate-generator@1.7.1
|
||||
caching-compiler@1.2.2
|
||||
caching-html-compiler@1.2.1
|
||||
callback-hook@1.4.0
|
||||
check@1.3.1
|
||||
ddp@1.4.0
|
||||
ddp-client@2.5.0
|
||||
check@1.3.2
|
||||
ddp@1.4.1
|
||||
ddp-client@2.6.1
|
||||
ddp-common@1.4.0
|
||||
ddp-server@2.5.0
|
||||
diff-sequence@1.1.1
|
||||
ddp-server@2.6.0
|
||||
diff-sequence@1.1.2
|
||||
dynamic-import@0.7.2
|
||||
ecmascript@0.16.2
|
||||
ecmascript@0.16.4
|
||||
ecmascript-runtime@0.8.0
|
||||
ecmascript-runtime-client@0.12.1
|
||||
ecmascript-runtime-server@0.11.0
|
||||
ejson@1.1.2
|
||||
ejson@1.1.3
|
||||
es5-shim@4.8.0
|
||||
fetch@0.1.1
|
||||
geojson-utils@1.0.10
|
||||
fetch@0.1.2
|
||||
geojson-utils@1.0.11
|
||||
hot-code-push@1.0.4
|
||||
html-tools@1.1.3
|
||||
htmljs@1.1.1
|
||||
@ -33,46 +33,46 @@ inter-process-messaging@0.1.1
|
||||
launch-screen@1.3.0
|
||||
lmieulet:meteor-coverage@4.1.0
|
||||
logging@1.3.1
|
||||
meteor@1.10.0
|
||||
meteor@1.10.3
|
||||
meteor-base@1.5.1
|
||||
meteortesting:browser-tests@1.3.5
|
||||
meteortesting:mocha@2.0.3
|
||||
meteortesting:mocha-core@8.1.2
|
||||
minifier-css@1.6.0
|
||||
minifier-js@2.7.4
|
||||
minimongo@1.8.0
|
||||
minifier-css@1.6.2
|
||||
minifier-js@2.7.5
|
||||
minimongo@1.9.1
|
||||
mobile-experience@1.1.0
|
||||
mobile-status-bar@1.1.0
|
||||
modern-browsers@0.1.8
|
||||
modules@0.18.0
|
||||
modules-runtime@0.13.0
|
||||
mongo@1.15.0
|
||||
modern-browsers@0.1.9
|
||||
modules@0.19.0
|
||||
modules-runtime@0.13.1
|
||||
mongo@1.16.3
|
||||
mongo-decimal@0.1.3
|
||||
mongo-dev-server@1.1.0
|
||||
mongo-id@1.0.8
|
||||
npm-mongo@4.3.1
|
||||
npm-mongo@4.12.1
|
||||
ordered-dict@1.1.0
|
||||
promise@0.12.0
|
||||
random@1.2.0
|
||||
promise@0.12.2
|
||||
random@1.2.1
|
||||
react-fast-refresh@0.2.3
|
||||
react-meteor-data@2.5.1
|
||||
reactive-dict@1.3.0
|
||||
reactive-var@1.0.11
|
||||
reactive-dict@1.3.1
|
||||
reactive-var@1.0.12
|
||||
reload@1.3.1
|
||||
retry@1.1.0
|
||||
rocketchat:streamer@1.1.0
|
||||
routepolicy@1.1.1
|
||||
session@1.2.0
|
||||
session@1.2.1
|
||||
shell-server@0.5.0
|
||||
socket-stream-client@0.5.0
|
||||
spacebars-compiler@1.3.1
|
||||
standard-minifier-css@1.8.1
|
||||
standard-minifier-js@2.8.0
|
||||
standard-minifier-css@1.8.3
|
||||
standard-minifier-js@2.8.1
|
||||
static-html@1.3.2
|
||||
templating-tools@1.2.2
|
||||
tracker@1.2.0
|
||||
typescript@4.5.4
|
||||
underscore@1.0.10
|
||||
tracker@1.2.1
|
||||
typescript@4.6.4
|
||||
underscore@1.0.11
|
||||
url@1.3.2
|
||||
webapp@1.13.1
|
||||
webapp-hashing@1.1.0
|
||||
webapp@1.13.2
|
||||
webapp-hashing@1.1.1
|
||||
|
@ -27,74 +27,52 @@ import Users, { CurrentUser } from '/imports/api/users';
|
||||
import { Slides, SlidePositions } from '/imports/api/slides';
|
||||
|
||||
// Custom Publishers
|
||||
export const localCurrentPollSync = new AbstractCollection(CurrentPoll, CurrentPoll);
|
||||
export const localCurrentUserSync = new AbstractCollection(CurrentUser, CurrentUser);
|
||||
export const localSlidesSync = new AbstractCollection(Slides, Slides);
|
||||
export const localSlidePositionsSync = new AbstractCollection(SlidePositions, SlidePositions);
|
||||
export const localPollsSync = new AbstractCollection(Polls, Polls);
|
||||
export const localPresentationsSync = new AbstractCollection(Presentations, Presentations);
|
||||
export const localPresentationPodsSync = new AbstractCollection(PresentationPods, PresentationPods);
|
||||
export const localPresentationUploadTokenSync = new AbstractCollection(PresentationUploadToken, PresentationUploadToken);
|
||||
export const localScreenshareSync = new AbstractCollection(Screenshare, Screenshare);
|
||||
export const localUserInfosSync = new AbstractCollection(UserInfos, UserInfos);
|
||||
export const localUsersPersistentDataSync = new AbstractCollection(UsersPersistentData, UsersPersistentData);
|
||||
export const localUserSettingsSync = new AbstractCollection(UserSettings, UserSettings);
|
||||
export const localVideoStreamsSync = new AbstractCollection(VideoStreams, VideoStreams);
|
||||
export const localVoiceUsersSync = new AbstractCollection(VoiceUsers, VoiceUsers);
|
||||
export const localWhiteboardMultiUserSync = new AbstractCollection(WhiteboardMultiUser, WhiteboardMultiUser);
|
||||
export const localGroupChatSync = new AbstractCollection(GroupChat, GroupChat);
|
||||
export const localConnectionStatusSync = new AbstractCollection(ConnectionStatus, ConnectionStatus);
|
||||
export const localCaptionsSync = new AbstractCollection(Captions, Captions);
|
||||
export const localPadsSync = new AbstractCollection(Pads, Pads);
|
||||
export const localPadsSessionsSync = new AbstractCollection(PadsSessions, PadsSessions);
|
||||
export const localPadsUpdatesSync = new AbstractCollection(PadsUpdates, PadsUpdates);
|
||||
export const localAuthTokenValidationSync = new AbstractCollection(AuthTokenValidation, AuthTokenValidation);
|
||||
export const localAnnotationsSync = new AbstractCollection(Annotations, Annotations);
|
||||
export const localRecordMeetingsSync = new AbstractCollection(RecordMeetings, RecordMeetings);
|
||||
export const localExternalVideoMeetingsSync = new AbstractCollection(ExternalVideoMeetings, ExternalVideoMeetings);
|
||||
export const localMeetingTimeRemainingSync = new AbstractCollection(MeetingTimeRemaining, MeetingTimeRemaining);
|
||||
export const localUsersTypingSync = new AbstractCollection(UsersTyping, UsersTyping);
|
||||
export const localBreakoutsSync = new AbstractCollection(Breakouts, Breakouts);
|
||||
export const localBreakoutsHistorySync = new AbstractCollection(BreakoutsHistory, BreakoutsHistory);
|
||||
export const localGuestUsersSync = new AbstractCollection(guestUsers, guestUsers);
|
||||
export const localMeetingsSync = new AbstractCollection(Meetings, Meetings);
|
||||
export const localUsersSync = new AbstractCollection(Users, Users);
|
||||
export const localNotificationsSync = new AbstractCollection(Notifications, Notifications);
|
||||
export const localCollectionRegistry = {
|
||||
localCurrentPollSync: new AbstractCollection(CurrentPoll, CurrentPoll),
|
||||
localCurrentUserSync: new AbstractCollection(CurrentUser, CurrentUser),
|
||||
localSlidesSync: new AbstractCollection(Slides, Slides),
|
||||
localSlidePositionsSync: new AbstractCollection(SlidePositions, SlidePositions),
|
||||
localPollsSync: new AbstractCollection(Polls, Polls),
|
||||
localPresentationsSync: new AbstractCollection(Presentations, Presentations),
|
||||
localPresentationPodsSync: new AbstractCollection(PresentationPods, PresentationPods),
|
||||
localPresentationUploadTokenSync: new AbstractCollection(
|
||||
PresentationUploadToken,
|
||||
PresentationUploadToken,
|
||||
),
|
||||
localScreenshareSync: new AbstractCollection(Screenshare, Screenshare),
|
||||
localUserInfosSync: new AbstractCollection(UserInfos, UserInfos),
|
||||
localUsersPersistentDataSync: new AbstractCollection(UsersPersistentData, UsersPersistentData),
|
||||
localUserSettingsSync: new AbstractCollection(UserSettings, UserSettings),
|
||||
localVideoStreamsSync: new AbstractCollection(VideoStreams, VideoStreams),
|
||||
localVoiceUsersSync: new AbstractCollection(VoiceUsers, VoiceUsers),
|
||||
localWhiteboardMultiUserSync: new AbstractCollection(WhiteboardMultiUser, WhiteboardMultiUser),
|
||||
localGroupChatSync: new AbstractCollection(GroupChat, GroupChat),
|
||||
localConnectionStatusSync: new AbstractCollection(ConnectionStatus, ConnectionStatus),
|
||||
localCaptionsSync: new AbstractCollection(Captions, Captions),
|
||||
localPadsSync: new AbstractCollection(Pads, Pads),
|
||||
localPadsSessionsSync: new AbstractCollection(PadsSessions, PadsSessions),
|
||||
localPadsUpdatesSync: new AbstractCollection(PadsUpdates, PadsUpdates),
|
||||
localAuthTokenValidationSync: new AbstractCollection(AuthTokenValidation, AuthTokenValidation),
|
||||
localAnnotationsSync: new AbstractCollection(Annotations, Annotations),
|
||||
localRecordMeetingsSync: new AbstractCollection(RecordMeetings, RecordMeetings),
|
||||
localExternalVideoMeetingsSync: new AbstractCollection(
|
||||
ExternalVideoMeetings,
|
||||
ExternalVideoMeetings,
|
||||
),
|
||||
localMeetingTimeRemainingSync: new AbstractCollection(MeetingTimeRemaining, MeetingTimeRemaining),
|
||||
localUsersTypingSync: new AbstractCollection(UsersTyping, UsersTyping),
|
||||
localBreakoutsSync: new AbstractCollection(Breakouts, Breakouts),
|
||||
localBreakoutsHistorySync: new AbstractCollection(BreakoutsHistory, BreakoutsHistory),
|
||||
localGuestUsersSync: new AbstractCollection(guestUsers, guestUsers),
|
||||
localMeetingsSync: new AbstractCollection(Meetings, Meetings),
|
||||
localUsersSync: new AbstractCollection(Users, Users),
|
||||
localNotificationsSync: new AbstractCollection(Notifications, Notifications),
|
||||
};
|
||||
|
||||
const collectionMirrorInitializer = () => {
|
||||
localCurrentPollSync.setupListeners();
|
||||
localCurrentUserSync.setupListeners();
|
||||
localSlidesSync.setupListeners();
|
||||
localSlidePositionsSync.setupListeners();
|
||||
localPollsSync.setupListeners();
|
||||
localPresentationsSync.setupListeners();
|
||||
localPresentationPodsSync.setupListeners();
|
||||
localPresentationUploadTokenSync.setupListeners();
|
||||
localScreenshareSync.setupListeners();
|
||||
localUserInfosSync.setupListeners();
|
||||
localUsersPersistentDataSync.setupListeners();
|
||||
localUserSettingsSync.setupListeners();
|
||||
localVideoStreamsSync.setupListeners();
|
||||
localVoiceUsersSync.setupListeners();
|
||||
localWhiteboardMultiUserSync.setupListeners();
|
||||
localGroupChatSync.setupListeners();
|
||||
localConnectionStatusSync.setupListeners();
|
||||
localCaptionsSync.setupListeners();
|
||||
localPadsSync.setupListeners();
|
||||
localPadsSessionsSync.setupListeners();
|
||||
localPadsUpdatesSync.setupListeners();
|
||||
localAuthTokenValidationSync.setupListeners();
|
||||
localAnnotationsSync.setupListeners();
|
||||
localRecordMeetingsSync.setupListeners();
|
||||
localExternalVideoMeetingsSync.setupListeners();
|
||||
localMeetingTimeRemainingSync.setupListeners();
|
||||
localUsersTypingSync.setupListeners();
|
||||
localBreakoutsSync.setupListeners();
|
||||
localBreakoutsHistorySync.setupListeners();
|
||||
localGuestUsersSync.setupListeners();
|
||||
localMeetingsSync.setupListeners();
|
||||
localUsersSync.setupListeners();
|
||||
localNotificationsSync.setupListeners();
|
||||
Object.values(localCollectionRegistry).forEach((localCollection) => {
|
||||
localCollection.setupListeners();
|
||||
});
|
||||
};
|
||||
|
||||
export default collectionMirrorInitializer;
|
||||
|
@ -228,6 +228,7 @@ class App extends Component {
|
||||
layoutContextDispatch,
|
||||
numCameras,
|
||||
presentationIsOpen,
|
||||
ignorePollNotifications,
|
||||
} = this.props;
|
||||
|
||||
this.renderDarkMode();
|
||||
|
@ -311,5 +311,6 @@ export default injectIntl(withModalMounter(withTracker(({ intl, baseControls })
|
||||
hidePresentation: getFromUserSettings('bbb_hide_presentation', LAYOUT_CONFIG.hidePresentation),
|
||||
hideActionsBar: getFromUserSettings('bbb_hide_actions_bar', false),
|
||||
isModalOpen: !!getModal(),
|
||||
ignorePollNotifications: Session.get('ignorePollNotifications'),
|
||||
};
|
||||
})(AppContainer)));
|
||||
|
@ -10,6 +10,7 @@ import { stripTags, unescapeHtml } from '/imports/utils/string-utils';
|
||||
import Service from '../service';
|
||||
import Styled from './styles';
|
||||
import { usePreviousValue } from '/imports/ui/components/utils/hooks';
|
||||
import { Session } from 'meteor/session';
|
||||
|
||||
const CHAT_CONFIG = Meteor.settings.public.chat;
|
||||
const PUBLIC_CHAT_CLEAR = CHAT_CONFIG.chat_clear;
|
||||
@ -193,9 +194,11 @@ const ChatAlert = (props) => {
|
||||
const mappedMessage = Service.mapGroupMessage(timeWindow);
|
||||
|
||||
let content = null;
|
||||
let isPollResult = false;
|
||||
if (mappedMessage) {
|
||||
if (mappedMessage.id.includes(POLL_RESULT_KEY)) {
|
||||
content = createPollMessage();
|
||||
isPollResult = true;
|
||||
} else {
|
||||
content = createMessage(mappedMessage.sender.name, mappedMessage.content.slice(-5));
|
||||
}
|
||||
@ -218,10 +221,22 @@ const ChatAlert = (props) => {
|
||||
: <span>{intl.formatMessage(intlMessages.appToastChatPrivate)}</span>
|
||||
}
|
||||
onOpen={
|
||||
() => setUnreadMessages(newUnreadMessages)
|
||||
() => {
|
||||
if (isPollResult) {
|
||||
Session.set('ignorePollNotifications', true);
|
||||
}
|
||||
|
||||
setUnreadMessages(newUnreadMessages);
|
||||
}
|
||||
}
|
||||
onClose={
|
||||
() => setUnreadMessages(newUnreadMessages)
|
||||
() => {
|
||||
if (isPollResult) {
|
||||
Session.set('ignorePollNotifications', false);
|
||||
}
|
||||
|
||||
setUnreadMessages(newUnreadMessages);
|
||||
}
|
||||
}
|
||||
alertDuration={timeWindow.durationDiff}
|
||||
layoutContextDispatch={layoutContextDispatch}
|
||||
|
@ -8,11 +8,7 @@ import Users from '/imports/api/users';
|
||||
import AnnotationsTextService from '/imports/ui/components/whiteboard/annotations/text/service';
|
||||
import { Annotations as AnnotationsLocal } from '/imports/ui/components/whiteboard/service';
|
||||
import {
|
||||
localBreakoutsSync,
|
||||
localBreakoutsHistorySync,
|
||||
localGuestUsersSync,
|
||||
localMeetingsSync,
|
||||
localUsersSync,
|
||||
localCollectionRegistry,
|
||||
} from '/client/collection-mirror-initializer';
|
||||
import SubscriptionRegistry, { subscriptionReactivity } from '../../services/subscription-registry/subscriptionRegistry';
|
||||
import { isChatEnabled } from '/imports/ui/services/features';
|
||||
@ -30,6 +26,13 @@ const SUBSCRIPTIONS = [
|
||||
'pads', 'pads-sessions', 'pads-updates', 'notifications', 'audio-captions',
|
||||
'layout-meetings',
|
||||
];
|
||||
const {
|
||||
localBreakoutsSync,
|
||||
localBreakoutsHistorySync,
|
||||
localGuestUsersSync,
|
||||
localMeetingsSync,
|
||||
localUsersSync,
|
||||
} = localCollectionRegistry;
|
||||
|
||||
const EVENT_NAME = 'bbb-group-chat-messages-subscription-has-stoppped';
|
||||
const EVENT_NAME_SUBSCRIPTION_READY = 'bbb-group-chat-messages-subscriptions-ready';
|
||||
@ -165,6 +168,10 @@ export default withTracker(() => {
|
||||
},
|
||||
...subscriptionErrorHandler,
|
||||
});
|
||||
|
||||
Object.values(localCollectionRegistry).forEach(
|
||||
(localCollection) => localCollection.checkForStaleData(),
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
|
@ -25,13 +25,17 @@ const intlMessages = defineMessages({
|
||||
|
||||
let annotationsStreamListener = null;
|
||||
|
||||
export function addAnnotationToDiscardedList(annotation) {
|
||||
if (!discardedList.includes(annotation)) discardedList.push(annotation);
|
||||
}
|
||||
|
||||
const clearPreview = (annotation) => {
|
||||
UnsentAnnotations.remove({ id: annotation });
|
||||
};
|
||||
|
||||
const clearFakeAnnotations = () => {
|
||||
UnsentAnnotations.remove({});
|
||||
Annotations.remove({ id: /-fake/g, annotationType: { $ne: 'text' } });
|
||||
Annotations.remove({ id: /-fake/g });
|
||||
}
|
||||
|
||||
function handleAddedAnnotation({
|
||||
|
@ -238,6 +238,8 @@ export default class WhiteboardOverlay extends Component {
|
||||
setTextShapeActiveId,
|
||||
contextMenuHandler,
|
||||
clearPreview,
|
||||
addAnnotationToDiscardedList,
|
||||
undoAnnotation,
|
||||
updateCursor,
|
||||
} = this.props;
|
||||
|
||||
@ -255,6 +257,8 @@ export default class WhiteboardOverlay extends Component {
|
||||
setTextShapeActiveId,
|
||||
contextMenuHandler,
|
||||
clearPreview,
|
||||
addAnnotationToDiscardedList,
|
||||
undoAnnotation,
|
||||
};
|
||||
|
||||
return (
|
||||
@ -319,4 +323,6 @@ WhiteboardOverlay.propTypes = {
|
||||
setTextShapeActiveId: PropTypes.func.isRequired,
|
||||
// Defines a handler to publish cursor position to the server
|
||||
updateCursor: PropTypes.func.isRequired,
|
||||
addAnnotationToDiscardedList: PropTypes.func.isRequired,
|
||||
undoAnnotation: PropTypes.func.isRequired,
|
||||
};
|
||||
|
@ -2,6 +2,7 @@ import React from 'react';
|
||||
import { withTracker } from 'meteor/react-meteor-data';
|
||||
import PropTypes from 'prop-types';
|
||||
import WhiteboardOverlayService from './service';
|
||||
import WhiteboardToolbarService from '../whiteboard-toolbar/service';
|
||||
import WhiteboardOverlay from './component';
|
||||
|
||||
const WhiteboardOverlayContainer = (props) => {
|
||||
@ -15,10 +16,12 @@ const WhiteboardOverlayContainer = (props) => {
|
||||
};
|
||||
|
||||
export default withTracker(() => ({
|
||||
undoAnnotation: WhiteboardToolbarService.undoAnnotation,
|
||||
clearPreview: WhiteboardOverlayService.clearPreview,
|
||||
contextMenuHandler: WhiteboardOverlayService.contextMenuHandler,
|
||||
sendAnnotation: WhiteboardOverlayService.sendAnnotation,
|
||||
sendLiveSyncPreviewAnnotation: WhiteboardOverlayService.sendLiveSyncPreviewAnnotation,
|
||||
addAnnotationToDiscardedList: WhiteboardOverlayService.addAnnotationToDiscardedList,
|
||||
setTextShapeActiveId: WhiteboardOverlayService.setTextShapeActiveId,
|
||||
resetTextShapeSession: WhiteboardOverlayService.resetTextShapeSession,
|
||||
drawSettings: WhiteboardOverlayService.getWhiteboardToolbarValues(),
|
||||
|
@ -1,6 +1,6 @@
|
||||
import Storage from '/imports/ui/services/storage/session';
|
||||
import Auth from '/imports/ui/services/auth';
|
||||
import { sendAnnotation, sendLiveSyncPreviewAnnotation, clearPreview } from '/imports/ui/components/whiteboard/service';
|
||||
import { sendAnnotation, sendLiveSyncPreviewAnnotation, clearPreview, addAnnotationToDiscardedList } from '/imports/ui/components/whiteboard/service';
|
||||
import { publishCursorUpdate } from '/imports/ui/components/cursor/service';
|
||||
|
||||
const DRAW_SETTINGS = 'drawSettings';
|
||||
@ -55,6 +55,7 @@ const updateCursor = (payload) => {
|
||||
};
|
||||
|
||||
export default {
|
||||
addAnnotationToDiscardedList,
|
||||
sendAnnotation,
|
||||
sendLiveSyncPreviewAnnotation,
|
||||
getWhiteboardToolbarValues,
|
||||
|
@ -218,11 +218,12 @@ export default class TextDrawListener extends Component {
|
||||
}
|
||||
|
||||
// second case is when a user finished writing the text and publishes the final result
|
||||
} else if (isRightClick) {
|
||||
this.discardAnnotation();
|
||||
} else {
|
||||
// publishing the final shape and resetting the state
|
||||
this.sendLastMessage();
|
||||
if (isRightClick) {
|
||||
this.discardAnnotation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -485,15 +486,18 @@ export default class TextDrawListener extends Component {
|
||||
discardAnnotation() {
|
||||
const {
|
||||
actions,
|
||||
whiteboardId,
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
getCurrentShapeId,
|
||||
clearPreview,
|
||||
undoAnnotation,
|
||||
addAnnotationToDiscardedList,
|
||||
} = actions;
|
||||
|
||||
this.resetState();
|
||||
clearPreview(getCurrentShapeId());
|
||||
undoAnnotation(whiteboardId);
|
||||
addAnnotationToDiscardedList(getCurrentShapeId());
|
||||
}
|
||||
|
||||
render() {
|
||||
@ -598,5 +602,7 @@ TextDrawListener.propTypes = {
|
||||
resetTextShapeSession: PropTypes.func.isRequired,
|
||||
// Defines a function that sets a session value for the current active text shape
|
||||
setTextShapeActiveId: PropTypes.func.isRequired,
|
||||
undoAnnotation: PropTypes.func.isRequired,
|
||||
addAnnotationToDiscardedList: PropTypes.func.isRequired,
|
||||
}).isRequired,
|
||||
};
|
||||
|
@ -2,7 +2,7 @@ import SubscriptionRegistry from '/imports/ui/services/subscription-registry/sub
|
||||
import CollectionEventsBroker from '/imports/ui/services/LiveDataEventBroker/LiveDataEventBroker';
|
||||
|
||||
/*
|
||||
This class connects a local collection with the LiveDataEventBroker, propagating the changes of a server-side published cursor to a local collection.
|
||||
This class connects a local collection with the LiveDataEventBroker, propagating the changes of a server-side published cursor to a local collection.
|
||||
|
||||
It also guarantee that in case of a reconnection or a re-subscription, the data is only removed after subscription is ready, avoiding the situation of missing data during re-synchronization.
|
||||
*/
|
||||
@ -15,6 +15,7 @@ class LocalCollectionSynchronizer {
|
||||
this.lastSubscriptionId = '';
|
||||
this.options = options;
|
||||
this.ignoreDeletes = false;
|
||||
this.checkForStaleData = this.checkForStaleData.bind(this);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -31,26 +32,12 @@ class LocalCollectionSynchronizer {
|
||||
const self = this;
|
||||
|
||||
const addedCallback = function (item) {
|
||||
const subscription = SubscriptionRegistry
|
||||
.getSubscription(self.serverCollection._name);
|
||||
if (item.id === 'publication-stop-marker' && item.stopped) {
|
||||
self.ignoreDeletes = true;
|
||||
return;
|
||||
}
|
||||
// If the subscriptionId changes means the subscriptions was redone
|
||||
// or theres more than one subscription per collection
|
||||
if (subscription && (self.lastSubscriptionId !== subscription.subscriptionId)) {
|
||||
const wasEmpty = self.lastSubscriptionId === '';
|
||||
self.lastSubscriptionId = subscription.subscriptionId;
|
||||
if (!wasEmpty) {
|
||||
self.callWhenSubscriptionReady(() => {
|
||||
self.ignoreDeletes = false;
|
||||
Session.set('globalIgnoreDeletes', false);
|
||||
self.removeOldSubscriptionData();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
self.checkForStaleData();
|
||||
const selector = { referenceId: item.referenceId };
|
||||
const itemExistInCollection = self.localCollection.findOne(selector);
|
||||
|
||||
@ -117,6 +104,24 @@ class LocalCollectionSynchronizer {
|
||||
return tempPromise;
|
||||
}
|
||||
|
||||
checkForStaleData() {
|
||||
const subscription = SubscriptionRegistry.getSubscription(this.serverCollection._name);
|
||||
|
||||
// If the subscriptionId changes means the subscriptions was redone
|
||||
// or theres more than one subscription per collection
|
||||
if (subscription && (this.lastSubscriptionId !== subscription.subscriptionId)) {
|
||||
const wasEmpty = this.lastSubscriptionId === '';
|
||||
this.lastSubscriptionId = subscription.subscriptionId;
|
||||
if (!wasEmpty) {
|
||||
this.callWhenSubscriptionReady(() => {
|
||||
this.ignoreDeletes = false;
|
||||
Session.set('globalIgnoreDeletes', false);
|
||||
this.removeOldSubscriptionData();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
This method removes data from previous subscriptions after the current one is ready.
|
||||
*/
|
||||
|
@ -16,7 +16,7 @@ const SETTINGS = [
|
||||
];
|
||||
|
||||
const CHANGED_SETTINGS = 'changed_settings';
|
||||
const DEFAULT_SETTINGS = 'dafault_settings';
|
||||
const DEFAULT_SETTINGS = 'default_settings';
|
||||
|
||||
class Settings {
|
||||
constructor(defaultValues = {}) {
|
||||
|
360
bigbluebutton-html5/package-lock.json
generated
360
bigbluebutton-html5/package-lock.json
generated
@ -1677,6 +1677,7 @@
|
||||
"version": "6.12.6",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
@ -1739,11 +1740,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"any-promise": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
|
||||
"integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
|
||||
},
|
||||
"argparse": {
|
||||
"version": "1.0.10",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
||||
@ -2027,19 +2023,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"asn1": {
|
||||
"version": "0.2.4",
|
||||
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
|
||||
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
|
||||
"requires": {
|
||||
"safer-buffer": "~2.1.0"
|
||||
}
|
||||
},
|
||||
"assert-plus": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
|
||||
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
|
||||
},
|
||||
"assertion-error": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
||||
@ -2063,11 +2046,6 @@
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
|
||||
"integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"attr-accept": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.3.tgz",
|
||||
@ -2101,16 +2079,6 @@
|
||||
"resolved": "https://registry.npmjs.org/autosize/-/autosize-4.0.4.tgz",
|
||||
"integrity": "sha512-5yxLQ22O0fCRGoxGfeLSNt3J8LB1v+umtpMnPW6XjkTWXKoN0AmXAIhelJcDtFT/Y/wYWmfE+oqU10Q0b8FhaQ=="
|
||||
},
|
||||
"aws-sign2": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
|
||||
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
|
||||
},
|
||||
"aws4": {
|
||||
"version": "1.11.0",
|
||||
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
|
||||
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
|
||||
},
|
||||
"axe-core": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
|
||||
@ -2169,14 +2137,6 @@
|
||||
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
|
||||
"dev": true
|
||||
},
|
||||
"bcrypt-pbkdf": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
|
||||
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
|
||||
"requires": {
|
||||
"tweetnacl": "^0.14.3"
|
||||
}
|
||||
},
|
||||
"bintrees": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.1.tgz",
|
||||
@ -2286,11 +2246,6 @@
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz",
|
||||
"integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw=="
|
||||
},
|
||||
"caseless": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
|
||||
},
|
||||
"chai": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
|
||||
@ -2421,14 +2376,6 @@
|
||||
"text-hex": "1.0.x"
|
||||
}
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"commander": {
|
||||
"version": "8.3.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
|
||||
@ -2463,11 +2410,6 @@
|
||||
"integrity": "sha512-Lb+/XT4WC4PaCWWtZpNPaXmjiNDUe5CJuUtbkMrIM1kb1T/jJoAIp+bkVP/r5lHzMr+ZAAF8XHp7+my6Ol0ysQ==",
|
||||
"dev": true
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"cosmiconfig": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
|
||||
@ -2575,14 +2517,6 @@
|
||||
"resolved": "https://registry.npmjs.org/darkreader/-/darkreader-4.9.46.tgz",
|
||||
"integrity": "sha512-K+MG74C8mGXvrsY47geAQdAbKU2mw8zVCa/WT4vtW3UDgzYCmthCcLnY0+FR3RQRMOyY2fULxqREZhfVQ346AA=="
|
||||
},
|
||||
"dashdash": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
@ -2620,11 +2554,6 @@
|
||||
"object-keys": "^1.0.12"
|
||||
}
|
||||
},
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||
},
|
||||
"denque": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
|
||||
@ -2695,15 +2624,6 @@
|
||||
"domhandler": "^4.2.0"
|
||||
}
|
||||
},
|
||||
"ecc-jsbn": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
|
||||
"requires": {
|
||||
"jsbn": "~0.1.0",
|
||||
"safer-buffer": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.4.117",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.117.tgz",
|
||||
@ -3392,25 +3312,17 @@
|
||||
"resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
|
||||
"integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50="
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
||||
},
|
||||
"extsprintf": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
|
||||
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
||||
"dev": true
|
||||
},
|
||||
"fast-json-stable-stringify": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
|
||||
"dev": true
|
||||
},
|
||||
"fast-levenshtein": {
|
||||
"version": "2.0.6",
|
||||
@ -3536,21 +3448,6 @@
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
|
||||
"integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w=="
|
||||
},
|
||||
"forever-agent": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
|
||||
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
|
||||
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.6",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"fraction.js": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
|
||||
@ -3627,14 +3524,6 @@
|
||||
"get-intrinsic": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"getpass": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
|
||||
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.1.7",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
|
||||
@ -3675,20 +3564,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"har-schema": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
|
||||
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
|
||||
},
|
||||
"har-validator": {
|
||||
"version": "5.1.5",
|
||||
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
|
||||
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
|
||||
"requires": {
|
||||
"ajv": "^6.12.3",
|
||||
"har-schema": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"hark": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/hark/-/hark-1.2.3.tgz",
|
||||
@ -3767,16 +3642,6 @@
|
||||
"entities": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"http-signature": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
|
||||
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0",
|
||||
"jsprim": "^1.2.2",
|
||||
"sshpk": "^1.7.0"
|
||||
}
|
||||
},
|
||||
"human-signals": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
|
||||
@ -3859,6 +3724,14 @@
|
||||
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
|
||||
"integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
|
||||
},
|
||||
"iconv-lite": {
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||
"requires": {
|
||||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
}
|
||||
},
|
||||
"idb-keyval": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.0.tgz",
|
||||
@ -4111,11 +3984,6 @@
|
||||
"has-symbols": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"is-typedarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
|
||||
},
|
||||
"is-weakref": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
|
||||
@ -4131,11 +3999,6 @@
|
||||
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
|
||||
"dev": true
|
||||
},
|
||||
"isstream": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
|
||||
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
@ -4151,11 +4014,6 @@
|
||||
"esprima": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"jsbn": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
||||
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
|
||||
},
|
||||
"jsesc": {
|
||||
"version": "2.5.2",
|
||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
|
||||
@ -4173,15 +4031,11 @@
|
||||
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
|
||||
"dev": true
|
||||
},
|
||||
"json-schema": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
|
||||
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
},
|
||||
"json-stable-stringify-without-jsonify": {
|
||||
"version": "1.0.1",
|
||||
@ -4189,11 +4043,6 @@
|
||||
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
|
||||
"dev": true
|
||||
},
|
||||
"json-stringify-safe": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
|
||||
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
|
||||
},
|
||||
"json5": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
||||
@ -4203,17 +4052,6 @@
|
||||
"minimist": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"jsprim": {
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
|
||||
"integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
|
||||
"requires": {
|
||||
"assert-plus": "1.0.0",
|
||||
"extsprintf": "1.3.0",
|
||||
"json-schema": "0.4.0",
|
||||
"verror": "1.10.0"
|
||||
}
|
||||
},
|
||||
"jss": {
|
||||
"version": "10.9.0",
|
||||
"resolved": "https://registry.npmjs.org/jss/-/jss-10.9.0.tgz",
|
||||
@ -4521,8 +4359,7 @@
|
||||
"lodash.merge": {
|
||||
"version": "4.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
|
||||
},
|
||||
"lodash.truncate": {
|
||||
"version": "4.4.2",
|
||||
@ -5402,19 +5239,6 @@
|
||||
"picomatch": "^2.2.3"
|
||||
}
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.48.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
|
||||
"integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ=="
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.31",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
|
||||
"integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
|
||||
"requires": {
|
||||
"mime-db": "1.48.0"
|
||||
}
|
||||
},
|
||||
"mimic-fn": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
|
||||
@ -5457,10 +5281,30 @@
|
||||
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
|
||||
"dev": true
|
||||
},
|
||||
"next-tick": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
|
||||
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
|
||||
"needle": {
|
||||
"version": "2.9.1",
|
||||
"resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz",
|
||||
"integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==",
|
||||
"requires": {
|
||||
"debug": "^3.2.6",
|
||||
"iconv-lite": "^0.4.4",
|
||||
"sax": "^1.2.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
|
||||
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"nice-try": {
|
||||
"version": "1.0.5",
|
||||
@ -5513,11 +5357,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"oauth-sign": {
|
||||
"version": "0.9.0",
|
||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
@ -5955,11 +5794,6 @@
|
||||
"resolved": "https://registry.npmjs.org/perfect-freehand/-/perfect-freehand-1.2.0.tgz",
|
||||
"integrity": "sha512-h/0ikF1M3phW7CwpZ5MMvKnfpHficWoOEyr//KVNTxV4F6deRK1eYMtHyBKEAKFK0aXIEUK9oBvlF6PNXMDsAw=="
|
||||
},
|
||||
"performance-now": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
|
||||
},
|
||||
"picocolors": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||
@ -6024,15 +5858,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"probe-image-size": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-4.1.1.tgz",
|
||||
"integrity": "sha512-42LqKZqTLxH/UvAZ2/cKhAsR4G/Y6B7i7fI2qtQu9hRBK4YjS6gqO+QRtwTjvojUx4+/+JuOMzLoFyRecT9qRw==",
|
||||
"version": "7.2.3",
|
||||
"resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz",
|
||||
"integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==",
|
||||
"requires": {
|
||||
"any-promise": "^1.3.0",
|
||||
"deepmerge": "^4.0.0",
|
||||
"inherits": "^2.0.3",
|
||||
"next-tick": "^1.0.0",
|
||||
"request": "^2.83.0",
|
||||
"lodash.merge": "^4.6.2",
|
||||
"needle": "^2.5.2",
|
||||
"stream-parser": "~0.3.1"
|
||||
}
|
||||
},
|
||||
@ -6060,11 +5891,6 @@
|
||||
"react-is": "^16.13.1"
|
||||
}
|
||||
},
|
||||
"psl": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
|
||||
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
|
||||
},
|
||||
"pump": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
||||
@ -6078,12 +5904,8 @@
|
||||
"punycode": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
||||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
|
||||
},
|
||||
"qs": {
|
||||
"version": "6.5.2",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
|
||||
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
|
||||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
|
||||
"dev": true
|
||||
},
|
||||
"queue": {
|
||||
"version": "6.0.2",
|
||||
@ -6408,33 +6230,6 @@
|
||||
"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
|
||||
"dev": true
|
||||
},
|
||||
"request": {
|
||||
"version": "2.88.2",
|
||||
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
|
||||
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
|
||||
"requires": {
|
||||
"aws-sign2": "~0.7.0",
|
||||
"aws4": "^1.8.0",
|
||||
"caseless": "~0.12.0",
|
||||
"combined-stream": "~1.0.6",
|
||||
"extend": "~3.0.2",
|
||||
"forever-agent": "~0.6.1",
|
||||
"form-data": "~2.3.2",
|
||||
"har-validator": "~5.1.3",
|
||||
"http-signature": "~1.2.0",
|
||||
"is-typedarray": "~1.0.0",
|
||||
"isstream": "~0.1.2",
|
||||
"json-stringify-safe": "~5.0.1",
|
||||
"mime-types": "~2.1.19",
|
||||
"oauth-sign": "~0.9.0",
|
||||
"performance-now": "^2.1.0",
|
||||
"qs": "~6.5.2",
|
||||
"safe-buffer": "^5.1.2",
|
||||
"tough-cookie": "~2.5.0",
|
||||
"tunnel-agent": "^0.6.0",
|
||||
"uuid": "^3.3.2"
|
||||
}
|
||||
},
|
||||
"require-from-string": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
||||
@ -6538,6 +6333,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"scheduler": {
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
|
||||
@ -6728,22 +6528,6 @@
|
||||
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
|
||||
"dev": true
|
||||
},
|
||||
"sshpk": {
|
||||
"version": "1.16.1",
|
||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
|
||||
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
|
||||
"requires": {
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"stack-trace": {
|
||||
"version": "0.0.10",
|
||||
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
|
||||
@ -6752,7 +6536,7 @@
|
||||
"stream-parser": {
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
|
||||
"integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
|
||||
"integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==",
|
||||
"requires": {
|
||||
"debug": "2"
|
||||
}
|
||||
@ -7090,15 +6874,6 @@
|
||||
"is-number": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"tough-cookie": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
||||
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
|
||||
"requires": {
|
||||
"psl": "^1.1.28",
|
||||
"punycode": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"triple-beam": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
|
||||
@ -7121,19 +6896,6 @@
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
||||
},
|
||||
"tunnel-agent": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
||||
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
|
||||
"requires": {
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"tweetnacl": {
|
||||
"version": "0.14.5",
|
||||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
||||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
|
||||
},
|
||||
"type-check": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
||||
@ -7165,6 +6927,7 @@
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
|
||||
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
@ -7206,11 +6969,6 @@
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
|
||||
},
|
||||
"v8-compile-cache": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
|
||||
@ -7227,16 +6985,6 @@
|
||||
"spdx-expression-parse": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"verror": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
|
||||
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0",
|
||||
"core-util-is": "1.0.2",
|
||||
"extsprintf": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
|
||||
|
@ -56,7 +56,7 @@
|
||||
"meteor-node-stubs": "^1.2.1",
|
||||
"postcss-nested": "^5.0.6",
|
||||
"mobx": "6.4.2",
|
||||
"probe-image-size": "^4.1.1",
|
||||
"probe-image-size": "^7.2.3",
|
||||
"prom-client": "^13.2.0",
|
||||
"prop-types": "^15.8.1",
|
||||
"queue": "^6.0.2",
|
||||
|
@ -654,7 +654,7 @@
|
||||
"app.toast.meetingMuteOn.label": "Alle Teilnehmer wurden stummgeschaltet",
|
||||
"app.toast.meetingMuteOff.label": "Konferenz-Stummschaltung ausgeschaltet",
|
||||
"app.toast.setEmoji.raiseHand": "Sie haben Ihre Hand gehoben",
|
||||
"app.toast.setEmoji.lowerHand": "Habe meine Hand gesenkt",
|
||||
"app.toast.setEmoji.lowerHand": "Ihre Hand wurde gesenkt",
|
||||
"app.toast.promotedLabel": "Zur Moderation ernannt worden",
|
||||
"app.toast.demotedLabel": "Nun wieder in der Rolle eine:r Teilnehmer:in",
|
||||
"app.notification.recordingStart": "Diese Konferenz wird jetzt aufgezeichnet",
|
||||
|
@ -1112,7 +1112,7 @@
|
||||
"app.layout.modal.confirm": "Confirm",
|
||||
"app.layout.modal.cancel": "Cancel",
|
||||
"app.layout.modal.layoutLabel": "Select your layout",
|
||||
"app.layout.modal.keepPushingLayoutLabel": "Keep pushing to everyone",
|
||||
"app.layout.modal.keepPushingLayoutLabel": "Push layout to all",
|
||||
"app.layout.modal.pushLayoutLabel": "Push to everyone",
|
||||
"app.layout.modal.layoutToastLabel": "Layout settings changed",
|
||||
"app.layout.modal.layoutSingular": "Layout",
|
||||
|
@ -92,3 +92,18 @@ sudo systemctl reload nginx
|
||||
Meteor messages for Big Blue Button sessions will now be recorded for later review.
|
||||
|
||||
It doesn't seem necessary to relay cookies, but that could be done by giving a `--ws-relay-header=Cookie` argument to `websockify`.
|
||||
|
||||
You can print the browser console log to standard output by setting the environment variable `CONSOLE`:
|
||||
```
|
||||
$ CONSOLE= npm test chat -- --project=firefox
|
||||
```
|
||||
|
||||
`CONSOLE` can be blank (as in the example), or can be a comma-separated list of the following options:
|
||||
|
||||
| Option | Meaning |
|
||||
| ------ | ------- |
|
||||
| color | (or "colour") colorize the output |
|
||||
| label | label each line with the BigBlueButton user |
|
||||
| norefs | remove JavaScript reference URLs |
|
||||
| nots | remove timestamps |
|
||||
| nocl | remove "clientLogger:" strings |
|
||||
|
125
bigbluebutton-tests/playwright/api/api.js
Normal file
125
bigbluebutton-tests/playwright/api/api.js
Normal file
@ -0,0 +1,125 @@
|
||||
// const util = require('node:util');
|
||||
|
||||
const { expect } = require("@playwright/test");
|
||||
|
||||
const Page = require('../core/page');
|
||||
const parameters = require('../core/parameters');
|
||||
const { apiCall, createMeeting } = require('../core/helpers');
|
||||
const e = require('../core/elements');
|
||||
|
||||
function getMeetings() {
|
||||
return apiCall('getMeetings', {});
|
||||
}
|
||||
|
||||
function getMeetingInfo(meetingID) {
|
||||
return apiCall('getMeetingInfo', {meetingID: meetingID});
|
||||
}
|
||||
|
||||
class API {
|
||||
|
||||
constructor(browser, context, page) {
|
||||
this.modPage = new Page(browser, page);
|
||||
this.browser = browser;
|
||||
this.context = context;
|
||||
this.userPages = [];
|
||||
}
|
||||
|
||||
async getNewPageTab() {
|
||||
return this.browser.newPage();
|
||||
}
|
||||
|
||||
async testGetMeetings() {
|
||||
const meetingId = await createMeeting(parameters);
|
||||
const modPage = new Page(this.browser, await this.getNewPageTab());
|
||||
const userPage = new Page(this.browser, await this.getNewPageTab());
|
||||
await Promise.all([
|
||||
modPage.init(true, false, { meetingId, fullName: 'Moderator' }),
|
||||
userPage.init(false, false, { meetingId, fullName: 'Attendee' }),
|
||||
]);
|
||||
await Promise.all([
|
||||
modPage.joinMicrophone(),
|
||||
userPage.joinMicrophone()
|
||||
]);
|
||||
|
||||
/* hasJoinedVoice: ['true'] is not part of these expectedUser patterns because it isn't consistently true
|
||||
* in the API's returned data structures. Is there something we can await on the browser page that
|
||||
* should ensure that the API will report hasJoinedVoice?
|
||||
*/
|
||||
|
||||
const expectedUsers = [expect.objectContaining({fullName: ['Moderator'],
|
||||
role: ['MODERATOR'],
|
||||
isPresenter: ['true'],
|
||||
}),
|
||||
expect.objectContaining({fullName: ['Attendee'],
|
||||
role: ['VIEWER'],
|
||||
isPresenter: ['false'],
|
||||
})
|
||||
];
|
||||
const expectedMeeting = {meetingName : [meetingId],
|
||||
running : ['true'],
|
||||
participantCount : ['2'],
|
||||
moderatorCount : ['1'],
|
||||
isBreakout: ['false'],
|
||||
attendees: [{ attendee: expect.arrayContaining(expectedUsers) }]
|
||||
};
|
||||
|
||||
/* check that this meeting is in the server's list of all meetings */
|
||||
const response = await getMeetings();
|
||||
expect(response.response.returncode).toEqual(['SUCCESS']);
|
||||
expect(response.response.meetings[0].meeting).toContainEqual(expect.objectContaining(expectedMeeting));
|
||||
|
||||
await modPage.page.close();
|
||||
await userPage.page.close();
|
||||
}
|
||||
|
||||
async testGetMeetingInfo() {
|
||||
const meetingId = await createMeeting(parameters);
|
||||
const modPage = new Page(this.browser, await this.getNewPageTab());
|
||||
const userPage = new Page(this.browser, await this.getNewPageTab());
|
||||
await Promise.all([
|
||||
modPage.init(true, false, { meetingId, fullName: 'Moderator' }),
|
||||
userPage.init(false, false, { meetingId, fullName: 'Attendee' }),
|
||||
]);
|
||||
await Promise.all([
|
||||
modPage.joinMicrophone(),
|
||||
userPage.joinMicrophone()
|
||||
]);
|
||||
|
||||
/* hasJoinedVoice: ['true'] is not part of these expectedUser patterns because it isn't consistently true
|
||||
* in the API's returned data structures. Is there something we can await on the browser page that
|
||||
* should ensure that the API will report hasJoinedVoice?
|
||||
*/
|
||||
|
||||
const expectedUsers = [expect.objectContaining({fullName: ['Moderator'],
|
||||
role: ['MODERATOR'],
|
||||
isPresenter: ['true'],
|
||||
}),
|
||||
expect.objectContaining({fullName: ['Attendee'],
|
||||
role: ['VIEWER'],
|
||||
isPresenter: ['false'],
|
||||
})
|
||||
];
|
||||
const expectedMeeting = {meetingName : [meetingId],
|
||||
running : ['true'],
|
||||
participantCount : ['2'],
|
||||
moderatorCount : ['1'],
|
||||
isBreakout: ['false'],
|
||||
attendees: [{ attendee: expect.arrayContaining(expectedUsers) }]
|
||||
};
|
||||
|
||||
/* check that we can retrieve this meeting by its meetingId */
|
||||
const response2 = await getMeetingInfo(meetingId);
|
||||
expect(response2.response.returncode).toEqual(['SUCCESS']);
|
||||
expect(response2.response).toMatchObject(expectedMeeting);
|
||||
|
||||
/* check that we can retrieve this meeting by its internal meeting ID */
|
||||
const response3 = await getMeetingInfo(response2.response.internalMeetingID[0]);
|
||||
expect(response3.response.returncode).toEqual(['SUCCESS']);
|
||||
expect(response3.response).toMatchObject(expectedMeeting);
|
||||
|
||||
await modPage.page.close();
|
||||
await userPage.page.close();
|
||||
}
|
||||
}
|
||||
|
||||
exports.API = API;
|
16
bigbluebutton-tests/playwright/api/api.spec.js
Normal file
16
bigbluebutton-tests/playwright/api/api.spec.js
Normal file
@ -0,0 +1,16 @@
|
||||
const { test } = require('@playwright/test');
|
||||
const { API } = require('./api.js');
|
||||
|
||||
test.describe.parallel('API', () => {
|
||||
|
||||
test('getMeetings', async ({ browser, context, page }) => {
|
||||
const api = new API(browser, context, page);
|
||||
await api.testGetMeetings();
|
||||
});
|
||||
|
||||
test('getMeetingInfo', async ({ browser, context, page }) => {
|
||||
const api = new API(browser, context, page);
|
||||
await api.testGetMeetingInfo();
|
||||
});
|
||||
|
||||
});
|
@ -2,6 +2,11 @@ require('dotenv').config();
|
||||
const sha1 = require('sha1');
|
||||
const axios = require('axios');
|
||||
const { test } = require('@playwright/test');
|
||||
const xml2js = require('xml2js');
|
||||
|
||||
const { expect } = require("@playwright/test");
|
||||
|
||||
const parameters = require('./parameters');
|
||||
|
||||
function getRandomInt(min, max) {
|
||||
min = Math.ceil(min);
|
||||
@ -9,8 +14,21 @@ function getRandomInt(min, max) {
|
||||
return Math.floor(Math.random() * (max - min)) + min;
|
||||
}
|
||||
|
||||
async function createMeeting(params, customParameter, customMeetingId) {
|
||||
const meetingID = (customMeetingId) ? customMeetingId : `random-${getRandomInt(1000000, 10000000).toString()}`;
|
||||
function apiCallUrl(name, callParams) {
|
||||
const query = new URLSearchParams(callParams).toString();
|
||||
const apicall = `${name}${query}${parameters.secret}`;
|
||||
const checksum = sha1(apicall);
|
||||
const url = `${parameters.server}/${name}?${query}&checksum=${checksum}`;
|
||||
return url;
|
||||
}
|
||||
|
||||
function apiCall(name, callParams) {
|
||||
const url = apiCallUrl(name, callParams);
|
||||
return axios.get(url, { adapter: 'http' }).then(response => xml2js.parseStringPromise(response.data));
|
||||
}
|
||||
|
||||
function createMeetingUrl(params, customParameter) {
|
||||
const meetingID = `random-${getRandomInt(1000000, 10000000).toString()}`;
|
||||
const mp = params.moderatorPW;
|
||||
const ap = params.attendeePW;
|
||||
const query = customParameter !== undefined ? `name=${meetingID}&meetingID=${meetingID}&attendeePW=${ap}&moderatorPW=${mp}`
|
||||
@ -20,8 +38,20 @@ async function createMeeting(params, customParameter, customMeetingId) {
|
||||
const apicall = `create${query}${params.secret}`;
|
||||
const checksum = sha1(apicall);
|
||||
const url = `${params.server}/create?${query}&checksum=${checksum}`;
|
||||
await axios.get(url, { adapter: 'http' });
|
||||
return meetingID;
|
||||
return url;
|
||||
}
|
||||
|
||||
function createMeetingPromise(params, customParameter) {
|
||||
const url = createMeetingUrl(params, customParameter);
|
||||
return axios.get(url, { adapter: 'http' });
|
||||
}
|
||||
|
||||
async function createMeeting(params, customParameter) {
|
||||
const promise = createMeetingPromise(params, customParameter);
|
||||
const response = await promise;
|
||||
expect(response.status).toEqual(200);
|
||||
const xmlresponse = await xml2js.parseStringPromise(response.data);
|
||||
return xmlresponse.response.meetingID[0];
|
||||
}
|
||||
|
||||
function getJoinURL(meetingID, params, moderator, customParameter) {
|
||||
@ -47,6 +77,10 @@ function sleep(time) {
|
||||
}
|
||||
|
||||
exports.getRandomInt = getRandomInt;
|
||||
exports.apiCallUrl = apiCallUrl;
|
||||
exports.apiCall = apiCall;
|
||||
exports.createMeetingUrl = createMeetingUrl;
|
||||
exports.createMeetingPromise = createMeetingPromise;
|
||||
exports.createMeeting = createMeeting;
|
||||
exports.getJoinURL = getJoinURL;
|
||||
exports.linkIssue = linkIssue;
|
||||
|
@ -1,13 +1,86 @@
|
||||
require('dotenv').config();
|
||||
const { expect, default: test } = require('@playwright/test');
|
||||
const { readFileSync } = require('fs');
|
||||
const { format } = require('node:util');
|
||||
|
||||
// This is version 4 of chalk, not version 5, which uses ESM
|
||||
const chalk = require('chalk');
|
||||
|
||||
const parameters = require('./parameters');
|
||||
const helpers = require('./helpers');
|
||||
const e = require('./elements');
|
||||
const { env } = require('node:process');
|
||||
const { ELEMENT_WAIT_TIME, ELEMENT_WAIT_LONGER_TIME, VIDEO_LOADING_WAIT_TIME } = require('./constants');
|
||||
const { checkElement, checkElementLengthEqualTo } = require('./util');
|
||||
const { generateSettingsData, getSettings } = require('./settings');
|
||||
|
||||
function formatWithCss(CONSOLE_options, ...args) {
|
||||
// For Chrome, args[0] is a format string that we will process using
|
||||
// node.js's util.format, but that function discards css style
|
||||
// information from "%c" format specifiers. So first loop over the
|
||||
// format string, replacing every "%c" with "%s" and replacing the
|
||||
// corresponding css style with an ANSI color sequence.
|
||||
//
|
||||
// See https://console.spec.whatwg.org/ sections 2.2.1 and 2.3.4
|
||||
|
||||
let split_arg0 = args[0].split("%");
|
||||
for (let i=1, j=1; i<split_arg0.length; i++, j++) {
|
||||
if (split_arg0[i].startsWith('c')) {
|
||||
split_arg0[i] = 's' + split_arg0[i].substr(1);
|
||||
const styles = args[j].split(';');
|
||||
args[j] = '';
|
||||
for (const style of styles) {
|
||||
const stdStyle = style.trim().toLowerCase();
|
||||
if (stdStyle.startsWith('color:') && CONSOLE_options.colorize) {
|
||||
const color = stdStyle.substr(6).trim();
|
||||
args[j] = chalk.keyword(color)._styler.open;
|
||||
} else if (stdStyle.startsWith('font-size:') && CONSOLE_options.drop_references) {
|
||||
// For Chrome, we "drop references" by discarding everything after a font size change
|
||||
split_arg0.length = i;
|
||||
args.length = j;
|
||||
}
|
||||
}
|
||||
} else if (split_arg0[i] == "") {
|
||||
// format is "%%", so don't do special processing for
|
||||
// split_arg0[i+1], and only increment i, not j
|
||||
i ++; // NOSONAR
|
||||
}
|
||||
}
|
||||
args[0] = split_arg0.join('%');
|
||||
return format(...args);
|
||||
}
|
||||
|
||||
async function console_format(msg, CONSOLE_options) {
|
||||
// see playwright consoleMessage class documentation
|
||||
const args = await Promise.all(msg.args().map(itm => itm.jsonValue()));
|
||||
let result = formatWithCss(CONSOLE_options, ...args);
|
||||
|
||||
if (CONSOLE_options.drop_references) {
|
||||
// For Firefox, we "drop references" by discarding a URL at the end of the line
|
||||
result = result.replace(/https:\/\/\S*$/, '');
|
||||
}
|
||||
|
||||
if (CONSOLE_options.noClientLogger) {
|
||||
result = result.replace(/clientLogger: /, '');
|
||||
}
|
||||
|
||||
if (CONSOLE_options.drop_timestamps) {
|
||||
// timestamp formatting is a bit complicated, with four "%s" fields and corresponding arguments,
|
||||
// so just filter them out (if requested) after all the other formatting is done
|
||||
result = result.replace(/\[\d\d:\d\d:\d\d:\d\d\d\d\] /, '');
|
||||
}
|
||||
|
||||
if (CONSOLE_options.line_label) {
|
||||
if (CONSOLE_options.colorize) {
|
||||
result = chalk.keyword('green')(CONSOLE_options.line_label) + result;
|
||||
} else {
|
||||
result = CONSOLE_options.line_label + result;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
class Page {
|
||||
constructor(browser, page) {
|
||||
this.browser = browser;
|
||||
@ -31,7 +104,19 @@ class Page {
|
||||
if (fullName) this.initParameters.fullName = fullName;
|
||||
this.username = this.initParameters.fullName;
|
||||
|
||||
this.meetingId = (meetingId) ? meetingId : await helpers.createMeeting(parameters, customParameter, customMeetingId);
|
||||
if (env.CONSOLE !== undefined) {
|
||||
const CONSOLE_strings = env.CONSOLE.split(',').map(opt => opt.trim().toLowerCase());
|
||||
const CONSOLE_options = {
|
||||
colorize: CONSOLE_strings.includes('color') || CONSOLE_strings.includes('colour'),
|
||||
drop_references: CONSOLE_strings.includes('norefs'),
|
||||
drop_timestamps: CONSOLE_strings.includes('nots'),
|
||||
line_label: CONSOLE_strings.includes('label') ? this.username + " " : undefined,
|
||||
noClientLogger: CONSOLE_strings.includes('nocl') || CONSOLE_strings.includes('noclientlogger'),
|
||||
};
|
||||
this.page.on('console', async (msg) => console.log(await console_format(msg, CONSOLE_options)));
|
||||
}
|
||||
|
||||
this.meetingId = (meetingId) ? meetingId : await helpers.createMeeting(parameters, customParameter);
|
||||
const joinUrl = helpers.getJoinURL(this.meetingId, this.initParameters, isModerator, customParameter);
|
||||
const response = await this.page.goto(joinUrl);
|
||||
await expect(response.ok()).toBeTruthy();
|
||||
|
179
bigbluebutton-tests/playwright/package-lock.json
generated
179
bigbluebutton-tests/playwright/package-lock.json
generated
@ -7,9 +7,11 @@
|
||||
"dependencies": {
|
||||
"@playwright/test": "^1.28.1",
|
||||
"axios": "^1.2.0",
|
||||
"chalk": "^4.1.2",
|
||||
"dotenv": "^16.0.0",
|
||||
"playwright": "^1.28.1",
|
||||
"sha1": "^1.1.1"
|
||||
"sha1": "^1.1.1",
|
||||
"xml2js": "^0.4.23"
|
||||
}
|
||||
},
|
||||
"node_modules/@playwright/test": {
|
||||
@ -28,9 +30,23 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "18.11.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz",
|
||||
"integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg=="
|
||||
"version": "18.11.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.15.tgz",
|
||||
"integrity": "sha512-VkhBbVo2+2oozlkdHXLrb3zjsRkpdnaU2bXmX8Wgle3PUi569eLRaHGlgETQHR7lLL1w7GiG3h9SnePhxNDecw=="
|
||||
},
|
||||
"node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
@ -38,15 +54,30 @@
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.0.tgz",
|
||||
"integrity": "sha512-zT7wZyNYu3N5Bu0wuZ6QccIf93Qk1eV8LOewxgjOZFd2DenOs98cJ7+Y6703d0wkaXGY6/nZd4EweJaHz9uzQw==",
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz",
|
||||
"integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.0",
|
||||
"form-data": "^4.0.0",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||
"dependencies": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/charenc": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
|
||||
@ -55,6 +86,22 @@
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dependencies": {
|
||||
"color-name": "~1.1.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
@ -122,6 +169,14 @@
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.52.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||
@ -172,6 +227,11 @@
|
||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
||||
},
|
||||
"node_modules/sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"node_modules/sha1": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz",
|
||||
@ -183,6 +243,37 @@
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"dependencies": {
|
||||
"has-flag": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/xml2js": {
|
||||
"version": "0.4.23",
|
||||
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
|
||||
"integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
|
||||
"dependencies": {
|
||||
"sax": ">=0.6.0",
|
||||
"xmlbuilder": "~11.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/xmlbuilder": {
|
||||
"version": "11.0.1",
|
||||
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
|
||||
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
@ -196,9 +287,17 @@
|
||||
}
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "18.11.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz",
|
||||
"integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg=="
|
||||
"version": "18.11.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.15.tgz",
|
||||
"integrity": "sha512-VkhBbVo2+2oozlkdHXLrb3zjsRkpdnaU2bXmX8Wgle3PUi569eLRaHGlgETQHR7lLL1w7GiG3h9SnePhxNDecw=="
|
||||
},
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
@ -206,20 +305,42 @@
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||
},
|
||||
"axios": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.0.tgz",
|
||||
"integrity": "sha512-zT7wZyNYu3N5Bu0wuZ6QccIf93Qk1eV8LOewxgjOZFd2DenOs98cJ7+Y6703d0wkaXGY6/nZd4EweJaHz9uzQw==",
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz",
|
||||
"integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==",
|
||||
"requires": {
|
||||
"follow-redirects": "^1.15.0",
|
||||
"form-data": "^4.0.0",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"charenc": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
|
||||
"integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
@ -258,6 +379,11 @@
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.52.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||
@ -289,6 +415,11 @@
|
||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
||||
},
|
||||
"sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"sha1": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz",
|
||||
@ -297,6 +428,28 @@
|
||||
"charenc": ">= 0.0.1",
|
||||
"crypt": ">= 0.0.1"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"requires": {
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"xml2js": {
|
||||
"version": "0.4.23",
|
||||
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
|
||||
"integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
|
||||
"requires": {
|
||||
"sax": ">=0.6.0",
|
||||
"xmlbuilder": "~11.0.0"
|
||||
}
|
||||
},
|
||||
"xmlbuilder": {
|
||||
"version": "11.0.1",
|
||||
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
|
||||
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,8 @@
|
||||
"axios": "^1.2.0",
|
||||
"dotenv": "^16.0.0",
|
||||
"playwright": "^1.28.1",
|
||||
"sha1": "^1.1.1"
|
||||
"chalk": "^4.1.2",
|
||||
"sha1": "^1.1.1",
|
||||
"xml2js": "^0.4.23"
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
. ./opts-global.sh
|
||||
|
||||
AKKA_APPS="bbb-fsesl-akka,bbb-apps-akka"
|
||||
OPTS="$OPTS -t deb -d netcat-openbsd,bbb-html5,bbb-playback-presentation,bbb-playback,bbb-freeswitch-core,$AKKA_APPS"
|
||||
OPTS="$OPTS -t deb -d netcat-openbsd,stun-client,bbb-html5,bbb-playback-presentation,bbb-playback,bbb-freeswitch-core,$AKKA_APPS"
|
||||
|
@ -7,7 +7,7 @@ PACKAGE=$(echo $TARGET | cut -d'_' -f1)
|
||||
VERSION=$(echo $TARGET | cut -d'_' -f2)
|
||||
DISTRO=$(echo $TARGET | cut -d'_' -f3)
|
||||
|
||||
NODE_VERSION="14.19.3"
|
||||
NODE_VERSION="14.21.1"
|
||||
NODE_DIRNAME="node-v${NODE_VERSION}-linux-x64"
|
||||
|
||||
#
|
||||
|
Loading…
Reference in New Issue
Block a user