Skip to content
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
7d61c6a
Update imports for rocketchat.js, create sdk.ts and dehydrate getUser…
gerzonc Jan 27, 2022
f753daa
move methods to rocketchat/methods
gerzonc Jan 27, 2022
e73d72f
update rocketchat.js imports
gerzonc Jan 27, 2022
1308354
update sdk.ts
gerzonc Jan 27, 2022
58704fe
fix rocketchat imports
gerzonc Jan 27, 2022
46e637d
Fix rocketchat.js imports
gerzonc Jan 27, 2022
0f958ad
undo changes to methods folder
gerzonc Jan 28, 2022
15ccc45
Dehydrate some non-server methods, update interfaces and refactor new…
gerzonc Jan 28, 2022
e6f39bc
remove dehydrated functions from rocketchat/index.js
gerzonc Jan 28, 2022
9d6719c
minor tweak
gerzonc Jan 28, 2022
7cf8944
fix imports
gerzonc Jan 28, 2022
1eda41a
remove changes from rocketchat.js
gerzonc Jan 28, 2022
40e667b
update structure
gerzonc Jan 31, 2022
700c667
update imports for rocketchat.js
gerzonc Jan 31, 2022
b859c1c
Merge branch 'develop' into chore.migrate-rocketchatjs-to-ts-poc
diegolmello Feb 1, 2022
9277f55
Few fixes
diegolmello Feb 1, 2022
7d15747
Fix sdk
gerzonc Feb 8, 2022
8a3655f
Create sdk.initialize
diegolmello Feb 8, 2022
fde84e2
Clean up
diegolmello Feb 8, 2022
1a5ee33
Add sdk.disconnect()
diegolmello Feb 8, 2022
fa7611d
Remove unnecessary `public`
diegolmello Feb 8, 2022
d8b44ba
post and methodCall
diegolmello Feb 8, 2022
fb56b1c
Add methodCallWrapper
diegolmello Feb 8, 2022
50acb15
Actually use isGroupChat refactor
diegolmello Feb 9, 2022
a385866
Merge branch 'develop' into chore.migrate-rocketchatjs-to-ts-poc
diegolmello Feb 9, 2022
7fc0948
Lint
diegolmello Feb 9, 2022
36fe961
Remove unnecessary return types
diegolmello Feb 9, 2022
a5404f0
Merge branch 'develop' into chore.migrate-rocketchatjs-to-ts-poc
dnlsilva Feb 9, 2022
ea427ed
Merge branch 'develop' into chore.migrate-rocketchatjs-to-ts-poc
diegolmello Feb 10, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/definitions/IServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export interface IServer {
useRealName: boolean;
FileUpload_MediaTypeWhiteList: string;
FileUpload_MaxFileSize: number;
roomsUpdatedAt: Date;
roomsUpdatedAt: Date | null;
version: string;
lastLocalAuthenticatedSession: Date;
autoLock: boolean;
Expand Down
8 changes: 4 additions & 4 deletions app/definitions/ITeam.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// https://github.com/RocketChat/Rocket.Chat/blob/develop/definition/ITeam.ts
exports.TEAM_TYPE = {
PUBLIC: 0,
PRIVATE: 1
};
export enum TEAM_TYPE {
PUBLIC = 0,
PRIVATE = 1
}
4 changes: 4 additions & 0 deletions app/lib/rocketchat/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import RocketChat, { THEME_PREFERENCES_KEY, CRASH_REPORT_KEY, ANALYTICS_EVENTS_KEY } from './rocketchat';

export { THEME_PREFERENCES_KEY, CRASH_REPORT_KEY, ANALYTICS_EVENTS_KEY };
export default RocketChat;
23 changes: 23 additions & 0 deletions app/lib/rocketchat/methods/clearCache.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import database from '../../database';

export default async function clearCache({ server }: { server: string }): Promise<void> {
try {
const serversDB = database.servers;
await serversDB.write(async () => {
const serverCollection = serversDB.get('servers');
const serverRecord = await serverCollection.find(server);
await serverRecord.update(s => {
s.roomsUpdatedAt = null;
});
});
} catch (e) {
// Do nothing
}

try {
const db = database.active;
await db.write(() => db.unsafeResetDatabase());
} catch (e) {
// Do nothing
}
}
24 changes: 24 additions & 0 deletions app/lib/rocketchat/methods/getPermalinkMessage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import log from '../../../utils/log';
import { TMessageModel, TSubscriptionModel } from '../../../definitions';
import reduxStore from '../../createStore';
import getRoom from './getRoom';
import isGroupChat from './isGroupChat';

type TRoomType = 'p' | 'c' | 'd';

export default async function getPermalinkMessage(message: TMessageModel): Promise<string | null> {
let room: TSubscriptionModel;
try {
room = await getRoom(message.subscription.id);
} catch (e) {
log(e);
return null;
}
const { server } = reduxStore.getState().server;
const roomType = {
p: 'group',
c: 'channel',
d: 'direct'
}[room.t as TRoomType];
return `${server}/${roomType}/${isGroupChat(room) ? room.rid : room.name}?msg=${message.id}`;
}
12 changes: 12 additions & 0 deletions app/lib/rocketchat/methods/getRoom.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { TSubscriptionModel } from '../../../definitions';
import database from '../../database';

export default async function getRoom(rid: string): Promise<TSubscriptionModel> {
try {
const db = database.active;
const room = await db.get('subscriptions').find(rid);
return Promise.resolve(room);
} catch (error) {
return Promise.reject(new Error('Room not found'));
}
}
5 changes: 5 additions & 0 deletions app/lib/rocketchat/methods/isGroupChat.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { ISubscription } from '../../../definitions';

export default function isGroupChat(room: ISubscription): boolean | undefined {
return (room.uids && room.uids.length > 2) || (room.usernames && room.usernames.length > 2);
}
152 changes: 55 additions & 97 deletions app/lib/rocketchat.js → app/lib/rocketchat/rocketchat.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,58 +7,62 @@ import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
import RNFetchBlob from 'rn-fetch-blob';
import isEmpty from 'lodash/isEmpty';

import defaultSettings from '../constants/settings';
import log from '../utils/log';
import { getBundleId, isIOS } from '../utils/deviceInfo';
import fetch from '../utils/fetch';
import SSLPinning from '../utils/sslPinning';
import { encryptionInit } from '../actions/encryption';
import { loginRequest, setLoginServices, setUser } from '../actions/login';
import { connectRequest, connectSuccess, disconnect } from '../actions/connect';
import { shareSelectServer, shareSetSettings, shareSetUser } from '../actions/share';
import { getDeviceToken } from '../notifications/push';
import { setActiveUsers } from '../actions/activeUsers';
import I18n from '../i18n';
import { twoFactor } from '../utils/twoFactor';
import { selectServerFailure } from '../actions/server';
import { useSsl } from '../utils/url';
import EventEmitter from '../utils/events';
import { updatePermission } from '../actions/permissions';
import { TEAM_TYPE } from '../definitions/ITeam';
import { updateSettings } from '../actions/settings';
import { compareServerVersion, methods } from './utils';
import reduxStore from './createStore';
import database from './database';
import subscribeRooms from './methods/subscriptions/rooms';
import getUsersPresence, { getUserPresence, subscribeUsersPresence } from './methods/getUsersPresence';
import protectedFunction from './methods/helpers/protectedFunction';
import readMessages from './methods/readMessages';
import getSettings, { getLoginSettings, setSettings, subscribeSettings } from './methods/getSettings';
import getRooms from './methods/getRooms';
import { getPermissions, setPermissions } from './methods/getPermissions';
import { getCustomEmojis, setCustomEmojis } from './methods/getCustomEmojis';
import defaultSettings from '../../constants/settings';
import log from '../../utils/log';
import { getBundleId, isIOS } from '../../utils/deviceInfo';
import fetch from '../../utils/fetch';
import SSLPinning from '../../utils/sslPinning';
import { encryptionInit } from '../../actions/encryption';
import { loginRequest, setLoginServices, setUser } from '../../actions/login';
import { connectRequest, connectSuccess, disconnect } from '../../actions/connect';
import { shareSelectServer, shareSetSettings, shareSetUser } from '../../actions/share';
import { getDeviceToken } from '../../notifications/push';
import { setActiveUsers } from '../../actions/activeUsers';
import I18n from '../../i18n';
import { twoFactor } from '../../utils/twoFactor';
import { selectServerFailure } from '../../actions/server';
import { useSsl } from '../../utils/url';
import EventEmitter from '../../utils/events';
import { updatePermission } from '../../actions/permissions';
import { TEAM_TYPE } from '../../definitions/ITeam';
import { updateSettings } from '../../actions/settings';
import { compareServerVersion, methods } from '../utils';
import reduxStore from '../createStore';
import database from '../database';
import subscribeRooms from '../methods/subscriptions/rooms';
import getUsersPresence, { getUserPresence, subscribeUsersPresence } from '../methods/getUsersPresence';
import protectedFunction from '../methods/helpers/protectedFunction';
import readMessages from '../methods/readMessages';
import getSettings, { getLoginSettings, setSettings, subscribeSettings } from '../methods/getSettings';
import getRooms from '../methods/getRooms';
import { getPermissions, setPermissions } from '../methods/getPermissions';
import { getCustomEmojis, setCustomEmojis } from '../methods/getCustomEmojis';
import {
getEnterpriseModules,
hasLicense,
isOmnichannelModuleAvailable,
setEnterpriseModules
} from './methods/enterpriseModules';
import getSlashCommands from './methods/getSlashCommands';
import { getRoles, onRolesChanged, setRoles } from './methods/getRoles';
import canOpenRoom from './methods/canOpenRoom';
import triggerBlockAction, { triggerCancel, triggerSubmitView } from './methods/actions';
import loadMessagesForRoom from './methods/loadMessagesForRoom';
import loadSurroundingMessages from './methods/loadSurroundingMessages';
import loadNextMessages from './methods/loadNextMessages';
import loadMissedMessages from './methods/loadMissedMessages';
import loadThreadMessages from './methods/loadThreadMessages';
import sendMessage, { resendMessage } from './methods/sendMessage';
import { cancelUpload, isUploadActive, sendFileMessage } from './methods/sendFileMessage';
import callJitsi, { callJitsiWithoutServer } from './methods/callJitsi';
import logout, { removeServer } from './methods/logout';
import UserPreferences from './userPreferences';
import { Encryption } from './encryption';
import { sanitizeLikeString } from './database/utils';
} from '../methods/enterpriseModules';
import getSlashCommands from '../methods/getSlashCommands';
import { getRoles, onRolesChanged, setRoles } from '../methods/getRoles';
import canOpenRoom from '../methods/canOpenRoom';
import triggerBlockAction, { triggerCancel, triggerSubmitView } from '../methods/actions';
import loadMessagesForRoom from '../methods/loadMessagesForRoom';
import loadSurroundingMessages from '../methods/loadSurroundingMessages';
import loadNextMessages from '../methods/loadNextMessages';
import loadMissedMessages from '../methods/loadMissedMessages';
import loadThreadMessages from '../methods/loadThreadMessages';
import sendMessage, { resendMessage } from '../methods/sendMessage';
import { cancelUpload, isUploadActive, sendFileMessage } from '../methods/sendFileMessage';
import callJitsi, { callJitsiWithoutServer } from '../methods/callJitsi';
import logout, { removeServer } from '../methods/logout';
import UserPreferences from '../userPreferences';
import { Encryption } from '../encryption';
import { sanitizeLikeString } from '../database/utils';
import getUserInfo from './services/getUserInfo';
import clearCache from './methods/clearCache';
import getPermalinkMessage from './methods/getPermalinkMessage';
import getRoom from './methods/getRoom';

const TOKEN_KEY = 'reactnativemeteor_usertoken';
const CURRENT_SERVER = 'currentServer';
Expand Down Expand Up @@ -636,27 +640,7 @@ const RocketChat = {
return this.sdk.post('users.removeOtherTokens', { userId });
},
removeServer,
async clearCache({ server }) {
try {
const serversDB = database.servers;
await serversDB.action(async () => {
const serverCollection = serversDB.get('servers');
const serverRecord = await serverCollection.find(server);
await serverRecord.update(s => {
s.roomsUpdatedAt = null;
});
});
} catch (e) {
// Do nothing
}

try {
const db = database.active;
await db.action(() => db.unsafeResetDatabase());
} catch (e) {
// Do nothing
}
},
clearCache,
registerPushToken() {
return new Promise(async resolve => {
const token = getDeviceToken();
Expand Down Expand Up @@ -966,31 +950,8 @@ const RocketChat = {
reportMessage(messageId) {
return this.post('chat.reportMessage', { messageId, description: 'Message reported by user' });
},
async getRoom(rid) {
try {
const db = database.active;
const room = await db.get('subscriptions').find(rid);
return Promise.resolve(room);
} catch (error) {
return Promise.reject(new Error('Room not found'));
}
},
async getPermalinkMessage(message) {
let room;
try {
room = await RocketChat.getRoom(message.subscription.id);
} catch (e) {
log(e);
return null;
}
const { server } = reduxStore.getState().server;
const roomType = {
p: 'group',
c: 'channel',
d: 'direct'
}[room.t];
return `${server}/${roomType}/${this.isGroupChat(room) ? room.rid : room.name}?msg=${message.id}`;
},
getRoom,
getPermalinkMessage,
getPermalinkChannel(channel) {
const { server } = reduxStore.getState().server;
const roomType = {
Expand Down Expand Up @@ -1095,10 +1056,7 @@ const RocketChat = {
// RC 0.48.0
return this.sdk.get('channels.info', { roomId });
},
getUserInfo(userId) {
// RC 0.48.0
return this.sdk.get('users.info', { userId });
},
getUserInfo,
getUserPreferences(userId) {
// RC 0.62.0
return this.sdk.get('users.getPreferences', { userId });
Expand Down
6 changes: 6 additions & 0 deletions app/lib/rocketchat/services/getUserInfo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import sdk from './sdk';

export default function getUserInfo(userId: string): Promise<unknown> {
// RC 0.48.0
return sdk.get('users.info', { userId });
Comment thread
dnlsilva marked this conversation as resolved.
}
28 changes: 28 additions & 0 deletions app/lib/rocketchat/services/sdk.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Rocketchat } from '@rocket.chat/sdk';

import store from '../../createStore';
import { useSsl } from '../../../utils/url';

class Sdk {
public get(...args: any[]): Promise<unknown> {
const { server } = store.getState().server;
const sdk = new Rocketchat({ host: server, protocol: 'ddp', useSsl: useSsl(server) });
return sdk.get(...args);
}

public post(...args: any[]): Promise<unknown> {
const { server } = store.getState().server;
const sdk = new Rocketchat({ host: server, protocol: 'ddp', useSsl: useSsl(server) });
return sdk.post(...args);
}

public methodCallWrapper(...args: any[]): Promise<unknown> {
const { server } = store.getState().server;
const sdk = new Rocketchat({ host: server, protocol: 'ddp', useSsl: useSsl(server) });
return sdk.methodCall(...args);
}
}

const sdk = new Sdk();

export default sdk;