forked from Ivasoft/mattermost-mobile
Compare commits
17 Commits
release-1.
...
v1.55.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cbee2449e2 | ||
|
|
5bbf11ce33 | ||
|
|
8e26b4b2b5 | ||
|
|
19be35c343 | ||
|
|
5c79b5152e | ||
|
|
8e4f19f3ea | ||
|
|
7ccae88e6f | ||
|
|
2234988b72 | ||
|
|
94cfd0a74b | ||
|
|
9c2b5133ab | ||
|
|
c1ce9260b7 | ||
|
|
b0f6968d5c | ||
|
|
64a1a6838e | ||
|
|
a917d116b5 | ||
|
|
4deaf8cb21 | ||
|
|
580c653704 | ||
|
|
ed6daffa0c |
@@ -1,3 +1,6 @@
|
||||
# Note: development on this repository has primarily moved to the `gekidou` branch
|
||||
This `master` branch is mostly in maintenance mode while we're working to getting our "v2" (code named "gekidou") to the GA stage. To contribute check out the [gekidou](https://github.com/mattermost/mattermost-mobile/tree/gekidou) branch in this repository.
|
||||
|
||||
# Mattermost Mobile App
|
||||
[](https://mattermost.com)
|
||||
|
||||
|
||||
@@ -131,8 +131,8 @@ android {
|
||||
applicationId "com.mattermost.rnbeta"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 404
|
||||
versionName "1.53.0"
|
||||
versionCode 418
|
||||
versionName "1.55.0"
|
||||
multiDexEnabled = true
|
||||
testBuildType System.getProperty('testBuildType', 'debug')
|
||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
||||
|
||||
@@ -167,6 +167,11 @@ public class ShareModule extends ReactContextBaseJavaModule {
|
||||
map.putString("type", type);
|
||||
map.putBoolean("isString", false);
|
||||
items.pushMap(map);
|
||||
|
||||
map = Arguments.createMap();
|
||||
map.putString("value", extra);
|
||||
map.putBoolean("isString", true);
|
||||
items.pushMap(map);
|
||||
}
|
||||
} else if (Intent.ACTION_SEND_MULTIPLE.equals(action)) {
|
||||
ArrayList<Uri> uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
|
||||
|
||||
@@ -140,18 +140,16 @@ export function componentDidDisappearListener({componentId}) {
|
||||
|
||||
if (componentId === 'MainSidebar') {
|
||||
EventEmitter.emit(NavigationTypes.MAIN_SIDEBAR_DID_CLOSE);
|
||||
}
|
||||
|
||||
if (componentId === THREAD) {
|
||||
if (EphemeralStore.hasModalsOpened()) {
|
||||
for (const modal of EphemeralStore.navigationModalStack) {
|
||||
const enableSwipe = {
|
||||
modal: {
|
||||
swipeToDismiss: true,
|
||||
},
|
||||
};
|
||||
Navigation.mergeOptions(modal, enableSwipe);
|
||||
}
|
||||
} else if (componentId === 'SettingsSidebar') {
|
||||
EventEmitter.emit(NavigationTypes.CLOSE_SETTINGS_SIDEBAR);
|
||||
} else if (componentId === THREAD && EphemeralStore.hasModalsOpened()) {
|
||||
for (const modal of EphemeralStore.navigationModalStack) {
|
||||
const enableSwipe = {
|
||||
modal: {
|
||||
swipeToDismiss: true,
|
||||
},
|
||||
};
|
||||
Navigation.mergeOptions(modal, enableSwipe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,13 @@ const ClientCalls = (superclass: any) => class extends superclass {
|
||||
{method: 'post'},
|
||||
);
|
||||
};
|
||||
|
||||
genTURNCredentials = async () => {
|
||||
return this.doFetch(
|
||||
`${this.getCallsRoute()}/turn-credentials`,
|
||||
{method: 'get'},
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
export default ClientCalls;
|
||||
|
||||
@@ -17,7 +17,7 @@ import {WebsocketEvents} from '@constants';
|
||||
import {ICEServersConfigs} from '@mmproducts/calls/store/types/calls';
|
||||
|
||||
import Peer from './simple-peer';
|
||||
import WebSocketClient from './websocket';
|
||||
import {WebSocketClient, wsReconnectionTimeoutErr} from './websocket';
|
||||
|
||||
export let client: any = null;
|
||||
|
||||
@@ -47,10 +47,14 @@ export async function newClient(channelID: string, iceServers: ICEServersConfigs
|
||||
const ws = new WebSocketClient(Client4.getWebSocketUrl(), Client4.getToken());
|
||||
|
||||
const disconnect = () => {
|
||||
if (!isClosed) {
|
||||
ws.close();
|
||||
if (isClosed) {
|
||||
return;
|
||||
}
|
||||
|
||||
isClosed = true;
|
||||
ws.send('leave');
|
||||
ws.close();
|
||||
|
||||
if (onCallEnd) {
|
||||
onCallEnd.remove();
|
||||
onCallEnd = null;
|
||||
@@ -81,12 +85,19 @@ export async function newClient(channelID: string, iceServers: ICEServersConfigs
|
||||
});
|
||||
|
||||
const mute = () => {
|
||||
if (!peer) {
|
||||
if (!peer || peer.destroyed) {
|
||||
return;
|
||||
}
|
||||
if (voiceTrackAdded && voiceTrack) {
|
||||
peer.replaceTrack(voiceTrack, null, stream);
|
||||
|
||||
try {
|
||||
if (voiceTrackAdded && voiceTrack) {
|
||||
peer.replaceTrack(voiceTrack, null, stream);
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('Error from simple-peer:', e); //eslint-disable-line no-console
|
||||
return;
|
||||
}
|
||||
|
||||
if (voiceTrack) {
|
||||
voiceTrack.enabled = false;
|
||||
}
|
||||
@@ -96,15 +107,22 @@ export async function newClient(channelID: string, iceServers: ICEServersConfigs
|
||||
};
|
||||
|
||||
const unmute = () => {
|
||||
if (!peer || !voiceTrack) {
|
||||
if (!peer || !voiceTrack || peer.destroyed) {
|
||||
return;
|
||||
}
|
||||
if (voiceTrackAdded) {
|
||||
peer.replaceTrack(voiceTrack, voiceTrack, stream);
|
||||
} else {
|
||||
peer.addStream(stream);
|
||||
voiceTrackAdded = true;
|
||||
|
||||
try {
|
||||
if (voiceTrackAdded) {
|
||||
peer.replaceTrack(voiceTrack, voiceTrack, stream);
|
||||
} else {
|
||||
peer.addStream(stream);
|
||||
voiceTrackAdded = true;
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('Error from simple-peer:', e); //eslint-disable-line no-console
|
||||
return;
|
||||
}
|
||||
|
||||
voiceTrack.enabled = true;
|
||||
if (ws) {
|
||||
ws.send('unmute');
|
||||
@@ -124,13 +142,14 @@ export async function newClient(channelID: string, iceServers: ICEServersConfigs
|
||||
};
|
||||
|
||||
ws.on('error', (err) => {
|
||||
console.log('WS (CALLS) ERROR', err); // eslint-disable-line no-console
|
||||
ws.close();
|
||||
console.log('calls: ws error', err); // eslint-disable-line no-console
|
||||
if (err === wsReconnectionTimeoutErr) {
|
||||
disconnect();
|
||||
}
|
||||
});
|
||||
|
||||
ws.on('close', () => {
|
||||
isClosed = true;
|
||||
disconnect();
|
||||
console.log('calls: ws close'); // eslint-disable-line no-console
|
||||
});
|
||||
|
||||
ws.on('join', async () => {
|
||||
@@ -156,14 +175,30 @@ export async function newClient(channelID: string, iceServers: ICEServersConfigs
|
||||
});
|
||||
|
||||
peer.on('error', (err: any) => {
|
||||
console.log('PEER ERROR', err); // eslint-disable-line no-console
|
||||
console.log('calls: peer error', err); // eslint-disable-line no-console
|
||||
});
|
||||
|
||||
peer.on('close', () => {
|
||||
console.log('calls: peer closed'); // eslint-disable-line no-console
|
||||
if (!isClosed) {
|
||||
disconnect();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
ws.on('open', async () => {
|
||||
ws.send('join', {
|
||||
channelID,
|
||||
});
|
||||
ws.on('open', (originalConnID: string, prevConnID: string, isReconnect: boolean) => {
|
||||
if (isReconnect) {
|
||||
console.log('calls: ws reconnect, sending reconnect msg'); // eslint-disable-line no-console
|
||||
ws.send('reconnect', {
|
||||
channelID,
|
||||
originalConnID,
|
||||
prevConnID,
|
||||
});
|
||||
} else {
|
||||
ws.send('join', {
|
||||
channelID,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
ws.on('message', ({data}) => {
|
||||
|
||||
@@ -202,7 +202,13 @@ export function joinCall(channelId: string, intl: typeof intlShape): ActionFunc
|
||||
dispatch(setSpeakerphoneOn(false));
|
||||
|
||||
try {
|
||||
ws = await newClient(channelId, getICEServersConfigs(getState()), () => {
|
||||
const state = getState();
|
||||
const iceConfigs = [...getICEServersConfigs(state)];
|
||||
if (getConfig(state).NeedsTURNCredentials) {
|
||||
iceConfigs.push(...await Client4.genTURNCredentials());
|
||||
}
|
||||
|
||||
ws = await newClient(channelId, iceConfigs, () => {
|
||||
dispatch(setSpeakerphoneOn(false));
|
||||
dispatch({type: CallsTypes.RECEIVED_MYSELF_LEFT_CALL});
|
||||
}, setScreenShareURL);
|
||||
|
||||
@@ -66,6 +66,7 @@ export type ServerConfig = {
|
||||
AllowEnableCalls: boolean;
|
||||
DefaultEnabled: boolean;
|
||||
MaxCallParticipants: number;
|
||||
NeedsTURNCredentials: boolean;
|
||||
sku_short_name: string;
|
||||
last_retrieved_at: number;
|
||||
}
|
||||
@@ -76,8 +77,9 @@ export const DefaultServerConfig = {
|
||||
AllowEnableCalls: false,
|
||||
DefaultEnabled: false,
|
||||
MaxCallParticipants: 0,
|
||||
NeedsTURNCredentials: false,
|
||||
sku_short_name: '',
|
||||
last_retrieved_at: 0,
|
||||
} as ServerConfig;
|
||||
|
||||
export type ICEServersConfigs = ConfigurationParamWithUrls[] | ConfigurationParamWithUrl[];
|
||||
export type ICEServersConfigs = Array<ConfigurationParamWithUrls | ConfigurationParamWithUrl>;
|
||||
|
||||
@@ -5,26 +5,55 @@ import {EventEmitter} from 'events';
|
||||
import Calls from '@constants/calls';
|
||||
import {encode} from '@msgpack/msgpack/dist';
|
||||
|
||||
export default class WebSocketClient extends EventEmitter {
|
||||
private ws: WebSocket | null;
|
||||
const wsMinReconnectRetryTimeMs = 1000; // 1 second
|
||||
const wsReconnectionTimeout = 30000; // 30 seconds
|
||||
const wsReconnectTimeIncrement = 500; // 0.5 seconds
|
||||
export const wsReconnectionTimeoutErr = new Error('max disconnected time reached');
|
||||
|
||||
export class WebSocketClient extends EventEmitter {
|
||||
private ws: WebSocket | null = null;
|
||||
private wsURL: string;
|
||||
private authToken: string;
|
||||
private seqNo = 1;
|
||||
private serverSeqNo = 0;
|
||||
private connID = '';
|
||||
private originalConnID = '';
|
||||
private eventPrefix = `custom_${Calls.PluginId}`;
|
||||
private lastDisconnect = 0;
|
||||
private reconnectRetryTime = wsMinReconnectRetryTimeMs;
|
||||
private closed = false;
|
||||
|
||||
constructor(connURL: string, authToken: string) {
|
||||
constructor(wsURL: string, authToken: string) {
|
||||
super();
|
||||
this.wsURL = wsURL;
|
||||
this.authToken = authToken;
|
||||
this.init(false);
|
||||
}
|
||||
|
||||
this.ws = new WebSocket(connURL, [], {headers: {authorization: `Bearer ${authToken}`}});
|
||||
private init(isReconnect: boolean) {
|
||||
if (this.closed) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.ws = new WebSocket(`${this.wsURL}?connection_id=${this.connID}&sequence_number=${this.serverSeqNo}`, [], {headers: {authorization: `Bearer ${this.authToken}`}});
|
||||
|
||||
if (isReconnect) {
|
||||
this.ws.onopen = () => {
|
||||
this.lastDisconnect = 0;
|
||||
this.reconnectRetryTime = wsMinReconnectRetryTimeMs;
|
||||
this.emit('open', this.originalConnID, this.connID, true);
|
||||
};
|
||||
}
|
||||
|
||||
this.ws.onerror = (err) => {
|
||||
this.emit('error', err);
|
||||
this.ws = null;
|
||||
this.close();
|
||||
};
|
||||
|
||||
this.ws.onclose = () => {
|
||||
this.ws = null;
|
||||
this.close();
|
||||
if (!this.closed) {
|
||||
this.close();
|
||||
}
|
||||
};
|
||||
|
||||
this.ws.onmessage = ({data}) => {
|
||||
@@ -35,7 +64,12 @@ export default class WebSocketClient extends EventEmitter {
|
||||
try {
|
||||
msg = JSON.parse(data);
|
||||
} catch (err) {
|
||||
console.log(err); // eslint-disable-line no-console
|
||||
console.log('calls: ws msg parse error', err); // eslint-disable-line no-console
|
||||
return;
|
||||
}
|
||||
|
||||
if (msg) {
|
||||
this.serverSeqNo = msg.seq + 1;
|
||||
}
|
||||
|
||||
if (!msg || !msg.event || !msg.data) {
|
||||
@@ -43,14 +77,22 @@ export default class WebSocketClient extends EventEmitter {
|
||||
}
|
||||
|
||||
if (msg.event === 'hello') {
|
||||
this.connID = msg.data.connection_id;
|
||||
this.emit('open');
|
||||
if (msg.data.connection_id !== this.connID) {
|
||||
this.connID = msg.data.connection_id;
|
||||
this.serverSeqNo = 0;
|
||||
if (this.originalConnID === '') {
|
||||
this.originalConnID = this.connID;
|
||||
}
|
||||
}
|
||||
if (!isReconnect) {
|
||||
this.emit('open', this.originalConnID, this.connID, false);
|
||||
}
|
||||
return;
|
||||
} else if (!this.connID) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (msg.data.connID !== this.connID) {
|
||||
if (msg.data.connID !== this.connID && msg.data.connID !== this.originalConnID) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -74,7 +116,6 @@ export default class WebSocketClient extends EventEmitter {
|
||||
seq: this.seqNo++,
|
||||
data,
|
||||
};
|
||||
|
||||
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
||||
if (binary) {
|
||||
this.ws.send(encode(msg));
|
||||
@@ -86,12 +127,35 @@ export default class WebSocketClient extends EventEmitter {
|
||||
|
||||
close() {
|
||||
if (this.ws) {
|
||||
this.closed = true;
|
||||
this.ws.close();
|
||||
this.ws = null;
|
||||
this.seqNo = 1;
|
||||
this.serverSeqNo = 0;
|
||||
this.connID = '';
|
||||
this.originalConnID = '';
|
||||
} else {
|
||||
this.emit('close');
|
||||
|
||||
const now = Date.now();
|
||||
if (this.lastDisconnect === 0) {
|
||||
this.lastDisconnect = now;
|
||||
}
|
||||
|
||||
if ((now - this.lastDisconnect) >= wsReconnectionTimeout) {
|
||||
this.closed = true;
|
||||
this.emit('error', wsReconnectionTimeoutErr);
|
||||
return;
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
if (!this.ws && !this.closed) {
|
||||
this.init(true);
|
||||
}
|
||||
}, this.reconnectRetryTime);
|
||||
|
||||
this.reconnectRetryTime += wsReconnectTimeIncrement;
|
||||
}
|
||||
this.seqNo = 1;
|
||||
this.connID = '';
|
||||
this.emit('close');
|
||||
}
|
||||
|
||||
state() {
|
||||
|
||||
@@ -52,7 +52,34 @@ export default class AppsFormField extends React.PureComponent<Props, State> {
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
|
||||
this.state = {};
|
||||
let selected;
|
||||
switch (props.field.type) {
|
||||
case AppFieldTypes.STATIC_SELECT:
|
||||
case AppFieldTypes.DYNAMIC_SELECT:
|
||||
case AppFieldTypes.USER:
|
||||
case AppFieldTypes.CHANNEL: {
|
||||
const value = props.value as AppSelectOption[] | AppSelectOption | null;
|
||||
if (value) {
|
||||
if (Array.isArray(value)) {
|
||||
selected = value.map((option) => {
|
||||
return {
|
||||
text: option.label,
|
||||
value: option.value,
|
||||
};
|
||||
});
|
||||
} else {
|
||||
selected = {
|
||||
text: value.label,
|
||||
value: value.value,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.state = {
|
||||
selected,
|
||||
};
|
||||
}
|
||||
|
||||
handleAutocompleteSelect = (selected: DialogOption) => {
|
||||
|
||||
@@ -41,7 +41,7 @@ class EphemeralStore {
|
||||
|
||||
addToNavigationComponentIdStack = (componentId) => {
|
||||
const index = this.navigationComponentIdStack.indexOf(componentId);
|
||||
if (index > 0) {
|
||||
if (index >= 0) {
|
||||
this.navigationComponentIdStack.slice(index, 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
"apps.error.parser.missing_list_end": "Marqeur de fin de liste attendu.",
|
||||
"apps.error.parser.missing_quote": "Les doubles guillemets doivent être fermés avant la fin du champ de saisie.",
|
||||
"apps.error.parser.missing_source": "Le formulaire n'a ni `submit` ni `source`.",
|
||||
"apps.error.parser.missing_submit": "Aucun appel dans le lien ou le formulaire.",
|
||||
"apps.error.parser.missing_tick": "Une marqueur de citation correspondant est attendu avant la fin du champ de saisie.",
|
||||
"apps.error.parser.multiple_equal": "Les signes `=` multiples ne sont pas autorisés.",
|
||||
"apps.error.parser.no_argument_pos_x": "Impossible d'identifier l'argument.",
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
"gallery.open_file": "File megnyitása",
|
||||
"gallery.unsuppored": "Az előnézet nem elérhető ennél a file típusnál",
|
||||
"get_post_link_modal.title": "Link másolása",
|
||||
"global_threads.allThreads": "Összes üzenetszálad",
|
||||
"global_threads.allThreads": "Összes üzenetszál",
|
||||
"global_threads.emptyThreads.message": "Minden olyan üzenetszál, amiben részt vettél vagy említésre kerültél fel lesz itt tüntetve azokkal együtt, amiket követsz.",
|
||||
"global_threads.emptyThreads.title": "Nincsen követett üzenetszál",
|
||||
"global_threads.emptyUnreads.message": "Úgy néz ki, mindent elolvastál.",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
12
detox/package-lock.json
generated
12
detox/package-lock.json
generated
@@ -7698,9 +7698,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/shell-quote": {
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
|
||||
"integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
|
||||
"version": "1.7.3",
|
||||
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
|
||||
"integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/signal-exit": {
|
||||
@@ -14258,9 +14258,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"shell-quote": {
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
|
||||
"integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
|
||||
"version": "1.7.3",
|
||||
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
|
||||
"integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
|
||||
"dev": true
|
||||
},
|
||||
"signal-exit": {
|
||||
|
||||
@@ -8,20 +8,20 @@ GEM
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.590.0)
|
||||
aws-sdk-core (3.131.1)
|
||||
aws-partitions (1.614.0)
|
||||
aws-sdk-core (3.131.5)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.525.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.57.0)
|
||||
aws-sdk-kms (1.58.0)
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.114.0)
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
aws-sigv4 (1.5.0)
|
||||
aws-sigv4 (1.5.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
claide (1.1.0)
|
||||
@@ -34,9 +34,9 @@ GEM
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.7.6)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.92.3)
|
||||
excon (0.92.4)
|
||||
faraday (1.10.0)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
@@ -56,8 +56,8 @@ GEM
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.0.3)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
faraday-multipart (1.0.4)
|
||||
multipart-post (~> 2)
|
||||
faraday-net_http (1.0.1)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
@@ -66,7 +66,7 @@ GEM
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.6)
|
||||
fastlane (2.206.1)
|
||||
fastlane (2.208.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -111,9 +111,9 @@ GEM
|
||||
fastlane-plugin-find_replace_string (0.1.0)
|
||||
fastlane-plugin-versioning_android (0.1.0)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.21.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-core (0.5.0)
|
||||
google-apis-androidpublisher_v3 (0.25.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-core (0.7.0)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
@@ -122,27 +122,27 @@ GEM
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
webrick
|
||||
google-apis-iamcredentials_v1 (0.10.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.7.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-storage_v1 (0.14.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-iamcredentials_v1 (0.13.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.10.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-apis-storage_v1 (0.17.0)
|
||||
google-apis-core (>= 0.7, < 2.a)
|
||||
google-cloud-core (1.6.0)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.2.0)
|
||||
google-cloud-storage (1.36.2)
|
||||
google-cloud-storage (1.38.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.17.0)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.1.3)
|
||||
googleauth (1.2.0)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
@@ -150,12 +150,12 @@ GEM
|
||||
os (>= 0.9, < 2.0)
|
||||
signet (>= 0.16, < 2.a)
|
||||
highline (2.0.3)
|
||||
http-cookie (1.0.4)
|
||||
http-cookie (1.0.5)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
jmespath (1.6.1)
|
||||
json (2.6.2)
|
||||
jwt (2.3.0)
|
||||
jwt (2.4.1)
|
||||
memoist (0.16.2)
|
||||
mini_magick (4.11.0)
|
||||
mini_mime (1.1.2)
|
||||
@@ -164,7 +164,7 @@ GEM
|
||||
multipart-post (2.0.0)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.1)
|
||||
nokogiri (1.13.6)
|
||||
nokogiri (1.13.8)
|
||||
mini_portile2 (~> 2.8.0)
|
||||
racc (~> 1.4)
|
||||
optparse (0.1.1)
|
||||
@@ -183,9 +183,9 @@ GEM
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
security (0.1.3)
|
||||
signet (0.16.1)
|
||||
signet (0.17.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.5, < 3.0)
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.8)
|
||||
@@ -203,11 +203,11 @@ GEM
|
||||
uber (0.1.0)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.8.1)
|
||||
unf_ext (0.0.8.2)
|
||||
unicode-display_width (1.8.0)
|
||||
webrick (1.7.0)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.21.0)
|
||||
xcodeproj (1.22.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
|
||||
@@ -911,7 +911,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 404;
|
||||
CURRENT_PROJECT_VERSION = 418;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
@@ -953,7 +953,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 404;
|
||||
CURRENT_PROJECT_VERSION = 418;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.53.0</string>
|
||||
<string>1.55.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
@@ -37,7 +37,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>404</string>
|
||||
<string>418</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.53.0</string>
|
||||
<string>1.55.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>404</string>
|
||||
<string>418</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.53.0</string>
|
||||
<string>1.55.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>404</string>
|
||||
<string>418</string>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
|
||||
2
package-lock.json
generated
2
package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mattermost-mobile",
|
||||
"version": "1.53.0",
|
||||
"version": "1.55.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mattermost-mobile",
|
||||
"version": "1.53.0",
|
||||
"version": "1.55.0",
|
||||
"description": "Mattermost Mobile with React Native",
|
||||
"repository": "git@github.com:mattermost/mattermost-mobile.git",
|
||||
"author": "Mattermost, Inc.",
|
||||
|
||||
2
types/modules/react-native-webrtc.d.ts
vendored
2
types/modules/react-native-webrtc.d.ts
vendored
@@ -168,7 +168,7 @@ declare module 'react-native-webrtc' {
|
||||
}
|
||||
|
||||
export interface RTCPeerConnectionConfiguration {
|
||||
iceServers: ConfigurationParamWithUrls[] | ConfigurationParamWithUrl[];
|
||||
iceServers: Array<ConfigurationParamWithUrls | ConfigurationParamWithUrl>;
|
||||
iceTransportPolicy?: 'all' | 'relay' | 'nohost' | 'none' | undefined;
|
||||
bundlePolicy?: 'balanced' | 'max-compat' | 'max-bundle' | undefined;
|
||||
rtcpMuxPolicy?: 'negotiate' | 'require' | undefined;
|
||||
|
||||
Reference in New Issue
Block a user