Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3369269
D5247.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
42 KB
Referenced Files
None
Subscribers
None
D5247.id.diff
View Options
diff --git a/lib/actions/activity-actions.js b/lib/actions/activity-actions.js
--- a/lib/actions/activity-actions.js
+++ b/lib/actions/activity-actions.js
@@ -7,7 +7,7 @@
SetThreadUnreadStatusRequest,
SetThreadUnreadStatusResult,
} from '../types/activity-types';
-import type { FetchJSON } from '../utils/fetch-json';
+import type { CallServerEndpoint } from '../utils/call-server-endpoint';
const updateActivityActionTypes = Object.freeze({
started: 'UPDATE_ACTIVITY_STARTED',
@@ -15,11 +15,11 @@
failed: 'UPDATE_ACTIVITY_FAILED',
});
const updateActivity = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
activityUpdates: $ReadOnlyArray<ActivityUpdate>,
) => Promise<ActivityUpdateSuccessPayload>) => async activityUpdates => {
- const response = await fetchJSON('update_activity', {
+ const response = await callServerEndpoint('update_activity', {
updates: activityUpdates,
});
return {
@@ -36,11 +36,11 @@
failed: 'SET_THREAD_UNREAD_STATUS_FAILED',
});
const setThreadUnreadStatus = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
request: SetThreadUnreadStatusRequest,
) => Promise<SetThreadUnreadStatusPayload>) => async request => {
- const response: SetThreadUnreadStatusResult = await fetchJSON(
+ const response: SetThreadUnreadStatusResult = await callServerEndpoint(
'set_thread_unread_status',
request,
);
diff --git a/lib/actions/device-actions.js b/lib/actions/device-actions.js
--- a/lib/actions/device-actions.js
+++ b/lib/actions/device-actions.js
@@ -1,7 +1,7 @@
// @flow
+import type { CallServerEndpoint } from '../utils/call-server-endpoint';
import { getConfig } from '../utils/config';
-import type { FetchJSON } from '../utils/fetch-json';
const setDeviceTokenActionTypes = Object.freeze({
started: 'SET_DEVICE_TOKEN_STARTED',
@@ -9,9 +9,9 @@
failed: 'SET_DEVICE_TOKEN_FAILED',
});
const setDeviceToken = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((deviceToken: ?string) => Promise<?string>) => async deviceToken => {
- await fetchJSON('update_device_token', {
+ await callServerEndpoint('update_device_token', {
deviceToken,
platformDetails: getConfig().platformDetails,
});
diff --git a/lib/actions/entry-actions.js b/lib/actions/entry-actions.js
--- a/lib/actions/entry-actions.js
+++ b/lib/actions/entry-actions.js
@@ -16,8 +16,8 @@
CalendarQueryUpdateResult,
} from '../types/entry-types';
import type { HistoryRevisionInfo } from '../types/history-types';
+import type { CallServerEndpoint } from '../utils/call-server-endpoint';
import { dateFromString } from '../utils/date-utils';
-import type { FetchJSON } from '../utils/fetch-json';
const fetchEntriesActionTypes = Object.freeze({
started: 'FETCH_ENTRIES_STARTED',
@@ -25,11 +25,11 @@
failed: 'FETCH_ENTRIES_FAILED',
});
const fetchEntries = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
calendarQuery: CalendarQuery,
) => Promise<FetchEntryInfosResult>) => async calendarQuery => {
- const response = await fetchJSON('fetch_entries', calendarQuery);
+ const response = await callServerEndpoint('fetch_entries', calendarQuery);
return {
rawEntryInfos: response.rawEntryInfos,
};
@@ -41,7 +41,7 @@
failed: 'UPDATE_CALENDAR_QUERY_FAILED',
});
const updateCalendarQuery = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
calendarQuery: CalendarQuery,
reduxAlreadyUpdated?: boolean,
@@ -49,7 +49,10 @@
calendarQuery,
reduxAlreadyUpdated = false,
) => {
- const response = await fetchJSON('update_calendar_query', calendarQuery);
+ const response = await callServerEndpoint(
+ 'update_calendar_query',
+ calendarQuery,
+ );
const { rawEntryInfos, deletedEntryIDs } = response;
return {
rawEntryInfos,
@@ -87,11 +90,11 @@
failed: 'CREATE_ENTRY_FAILED',
});
const createEntry = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
request: CreateEntryInfo,
) => Promise<CreateEntryPayload>) => async request => {
- const result = await fetchJSON('create_entry', request);
+ const result = await callServerEndpoint('create_entry', request);
return {
entryID: result.entryID,
newMessageInfos: result.newMessageInfos,
@@ -108,9 +111,9 @@
});
const concurrentModificationResetActionType = 'CONCURRENT_MODIFICATION_RESET';
const saveEntry = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((request: SaveEntryInfo) => Promise<SaveEntryResult>) => async request => {
- const result = await fetchJSON('update_entry', request);
+ const result = await callServerEndpoint('update_entry', request);
return {
entryID: result.entryID,
newMessageInfos: result.newMessageInfos,
@@ -124,9 +127,9 @@
failed: 'DELETE_ENTRY_FAILED',
});
const deleteEntry = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((info: DeleteEntryInfo) => Promise<DeleteEntryResult>) => async info => {
- const response = await fetchJSON('delete_entry', {
+ const response = await callServerEndpoint('delete_entry', {
...info,
timestamp: Date.now(),
});
@@ -143,11 +146,13 @@
failed: 'FETCH_REVISIONS_FOR_ENTRY_FAILED',
});
const fetchRevisionsForEntry = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
entryID: string,
) => Promise<$ReadOnlyArray<HistoryRevisionInfo>>) => async entryID => {
- const response = await fetchJSON('fetch_entry_revisions', { id: entryID });
+ const response = await callServerEndpoint('fetch_entry_revisions', {
+ id: entryID,
+ });
return response.result;
};
@@ -157,9 +162,9 @@
failed: 'RESTORE_ENTRY_FAILED',
});
const restoreEntry = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((info: RestoreEntryInfo) => Promise<RestoreEntryResult>) => async info => {
- const response = await fetchJSON('restore_entry', {
+ const response = await callServerEndpoint('restore_entry', {
...info,
timestamp: Date.now(),
});
diff --git a/lib/actions/message-actions.js b/lib/actions/message-actions.js
--- a/lib/actions/message-actions.js
+++ b/lib/actions/message-actions.js
@@ -8,7 +8,10 @@
SimpleMessagesPayload,
} from '../types/message-types';
import type { MediaMessageServerDBContent } from '../types/messages/media.js';
-import type { FetchJSON, FetchResultInfo } from '../utils/fetch-json';
+import type {
+ CallServerEndpoint,
+ CallServerEndpointResultInfo,
+} from '../utils/call-server-endpoint';
const fetchMessagesBeforeCursorActionTypes = Object.freeze({
started: 'FETCH_MESSAGES_BEFORE_CURSOR_STARTED',
@@ -16,7 +19,7 @@
failed: 'FETCH_MESSAGES_BEFORE_CURSOR_FAILED',
});
const fetchMessagesBeforeCursor = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
threadID: string,
beforeMessageID: string,
@@ -24,7 +27,7 @@
threadID,
beforeMessageID,
) => {
- const response = await fetchJSON('fetch_messages', {
+ const response = await callServerEndpoint('fetch_messages', {
cursors: {
[threadID]: beforeMessageID,
},
@@ -42,11 +45,11 @@
failed: 'FETCH_MOST_RECENT_MESSAGES_FAILED',
});
const fetchMostRecentMessages = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
threadID: string,
) => Promise<FetchMessageInfosPayload>) => async threadID => {
- const response = await fetchJSON('fetch_messages', {
+ const response = await callServerEndpoint('fetch_messages', {
cursors: {
[threadID]: null,
},
@@ -64,14 +67,14 @@
failed: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_FAILED',
});
const fetchSingleMostRecentMessagesFromThreads = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
threadIDs: $ReadOnlyArray<string>,
) => Promise<SimpleMessagesPayload>) => async threadIDs => {
const cursors = Object.fromEntries(
threadIDs.map(threadID => [threadID, null]),
);
- const response = await fetchJSON('fetch_messages', {
+ const response = await callServerEndpoint('fetch_messages', {
cursors,
numberPerThread: 1,
});
@@ -87,17 +90,17 @@
failed: 'SEND_TEXT_MESSAGE_FAILED',
});
const sendTextMessage = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
threadID: string,
localID: string,
text: string,
) => Promise<SendMessageResult>) => async (threadID, localID, text) => {
let resultInfo;
- const getResultInfo = (passedResultInfo: FetchResultInfo) => {
+ const getResultInfo = (passedResultInfo: CallServerEndpointResultInfo) => {
resultInfo = passedResultInfo;
};
- const response = await fetchJSON(
+ const response = await callServerEndpoint(
'create_text_message',
{
threadID,
@@ -109,7 +112,7 @@
const resultInterface = resultInfo?.interface;
invariant(
resultInterface,
- 'getResultInfo not called before fetchJSON resolves',
+ 'getResultInfo not called before callServerEndpoint resolves',
);
return {
id: response.newMessageInfo.id,
@@ -126,7 +129,7 @@
failed: 'SEND_MULTIMEDIA_MESSAGE_FAILED',
});
const sendMultimediaMessage = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
threadID: string,
localID: string,
@@ -137,10 +140,10 @@
mediaMessageContents,
) => {
let resultInfo;
- const getResultInfo = (passedResultInfo: FetchResultInfo) => {
+ const getResultInfo = (passedResultInfo: CallServerEndpointResultInfo) => {
resultInfo = passedResultInfo;
};
- const response = await fetchJSON(
+ const response = await callServerEndpoint(
'create_multimedia_message',
{
threadID,
@@ -152,7 +155,7 @@
const resultInterface = resultInfo?.interface;
invariant(
resultInterface,
- 'getResultInfo not called before fetchJSON resolves',
+ 'getResultInfo not called before callServerEndpoint resolves',
);
return {
id: response.newMessageInfo.id,
@@ -162,17 +165,17 @@
};
const legacySendMultimediaMessage = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
threadID: string,
localID: string,
mediaIDs: $ReadOnlyArray<string>,
) => Promise<SendMessageResult>) => async (threadID, localID, mediaIDs) => {
let resultInfo;
- const getResultInfo = (passedResultInfo: FetchResultInfo) => {
+ const getResultInfo = (passedResultInfo: CallServerEndpointResultInfo) => {
resultInfo = passedResultInfo;
};
- const response = await fetchJSON(
+ const response = await callServerEndpoint(
'create_multimedia_message',
{
threadID,
@@ -184,7 +187,7 @@
const resultInterface = resultInfo?.interface;
invariant(
resultInterface,
- 'getResultInfo not called before fetchJSON resolves',
+ 'getResultInfo not called before callServerEndpoint resolves',
);
return {
id: response.newMessageInfo.id,
diff --git a/lib/actions/relationship-actions.js b/lib/actions/relationship-actions.js
--- a/lib/actions/relationship-actions.js
+++ b/lib/actions/relationship-actions.js
@@ -4,8 +4,8 @@
RelationshipRequest,
RelationshipErrors,
} from '../types/relationship-types';
+import type { CallServerEndpoint } from '../utils/call-server-endpoint';
import { ServerError } from '../utils/errors';
-import type { FetchJSON } from '../utils/fetch-json';
const updateRelationshipsActionTypes = Object.freeze({
started: 'UPDATE_RELATIONSHIPS_STARTED',
@@ -13,11 +13,11 @@
failed: 'UPDATE_RELATIONSHIPS_FAILED',
});
const updateRelationships = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
request: RelationshipRequest,
) => Promise<RelationshipErrors>) => async request => {
- const errors = await fetchJSON('update_relationships', request);
+ const errors = await callServerEndpoint('update_relationships', request);
const { invalid_user, already_friends, user_blocked } = errors;
if (invalid_user) {
diff --git a/lib/actions/report-actions.js b/lib/actions/report-actions.js
--- a/lib/actions/report-actions.js
+++ b/lib/actions/report-actions.js
@@ -4,20 +4,24 @@
ClientReportCreationRequest,
ReportCreationResponse,
} from '../types/report-types';
-import type { FetchJSON } from '../utils/fetch-json';
+import type { CallServerEndpoint } from '../utils/call-server-endpoint';
const sendReportActionTypes = Object.freeze({
started: 'SEND_REPORT_STARTED',
success: 'SEND_REPORT_SUCCESS',
failed: 'SEND_REPORT_FAILED',
});
-const fetchJSONOptions = { timeout: 60000 };
+const callServerEndpointOptions = { timeout: 60000 };
const sendReport = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
request: ClientReportCreationRequest,
) => Promise<ReportCreationResponse>) => async request => {
- const response = await fetchJSON('create_report', request, fetchJSONOptions);
+ const response = await callServerEndpoint(
+ 'create_report',
+ request,
+ callServerEndpointOptions,
+ );
return { id: response.id };
};
@@ -27,11 +31,15 @@
failed: 'SEND_REPORTS_FAILED',
});
const sendReports = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
reports: $ReadOnlyArray<ClientReportCreationRequest>,
) => Promise<void>) => async reports => {
- await fetchJSON('create_reports', { reports }, fetchJSONOptions);
+ await callServerEndpoint(
+ 'create_reports',
+ { reports },
+ callServerEndpointOptions,
+ );
};
const queueReportsActionType = 'QUEUE_REPORTS';
diff --git a/lib/actions/thread-actions.js b/lib/actions/thread-actions.js
--- a/lib/actions/thread-actions.js
+++ b/lib/actions/thread-actions.js
@@ -11,7 +11,7 @@
ClientThreadJoinRequest,
ThreadJoinPayload,
} from '../types/thread-types';
-import type { FetchJSON } from '../utils/fetch-json';
+import type { CallServerEndpoint } from '../utils/call-server-endpoint';
import { values } from '../utils/objects';
const deleteThreadActionTypes = Object.freeze({
@@ -20,7 +20,7 @@
failed: 'DELETE_THREAD_FAILED',
});
const deleteThread = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
threadID: string,
currentAccountPassword: string,
@@ -28,7 +28,7 @@
threadID,
currentAccountPassword,
) => {
- const response = await fetchJSON('delete_thread', {
+ const response = await callServerEndpoint('delete_thread', {
threadID,
accountPassword: currentAccountPassword,
});
@@ -43,11 +43,11 @@
failed: 'CHANGE_THREAD_SETTINGS_FAILED',
});
const changeThreadSettings = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
request: UpdateThreadRequest,
) => Promise<ChangeThreadSettingsPayload>) => async request => {
- const response = await fetchJSON('update_thread', request);
+ const response = await callServerEndpoint('update_thread', request);
invariant(
Object.keys(request.changes).length > 0,
'No changes provided to changeThreadSettings!',
@@ -65,12 +65,12 @@
failed: 'REMOVE_USERS_FROM_THREAD_FAILED',
});
const removeUsersFromThread = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
threadID: string,
memberIDs: $ReadOnlyArray<string>,
) => Promise<ChangeThreadSettingsPayload>) => async (threadID, memberIDs) => {
- const response = await fetchJSON('remove_members', {
+ const response = await callServerEndpoint('remove_members', {
threadID,
memberIDs,
});
@@ -87,7 +87,7 @@
failed: 'CHANGE_THREAD_MEMBER_ROLES_FAILED',
});
const changeThreadMemberRoles = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
threadID: string,
memberIDs: $ReadOnlyArray<string>,
@@ -97,7 +97,7 @@
memberIDs,
newRole,
) => {
- const response = await fetchJSON('update_role', {
+ const response = await callServerEndpoint('update_role', {
threadID,
memberIDs,
role: newRole,
@@ -115,11 +115,11 @@
failed: 'NEW_THREAD_FAILED',
});
const newThread = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
request: ClientNewThreadRequest,
) => Promise<NewThreadResult>) => async request => {
- const response = await fetchJSON('create_thread', request);
+ const response = await callServerEndpoint('create_thread', request);
return {
newThreadID: response.newThreadID,
updatesResult: response.updatesResult,
@@ -134,11 +134,11 @@
failed: 'JOIN_THREAD_FAILED',
});
const joinThread = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
request: ClientThreadJoinRequest,
) => Promise<ThreadJoinPayload>) => async request => {
- const response = await fetchJSON('join_thread', request);
+ const response = await callServerEndpoint('join_thread', request);
const userInfos = values(response.userInfos);
return {
updatesResult: response.updatesResult,
@@ -154,9 +154,9 @@
failed: 'LEAVE_THREAD_FAILED',
});
const leaveThread = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((threadID: string) => Promise<LeaveThreadPayload>) => async threadID => {
- const response = await fetchJSON('leave_thread', { threadID });
+ const response = await callServerEndpoint('leave_thread', { threadID });
return {
updatesResult: response.updatesResult,
};
diff --git a/lib/actions/upload-actions.js b/lib/actions/upload-actions.js
--- a/lib/actions/upload-actions.js
+++ b/lib/actions/upload-actions.js
@@ -2,7 +2,7 @@
import type { Shape } from '../types/core';
import type { UploadMultimediaResult, Dimensions } from '../types/media-types';
-import type { FetchJSON } from '../utils/fetch-json';
+import type { CallServerEndpoint } from '../utils/call-server-endpoint';
import type { UploadBlob } from '../utils/upload-blob';
export type MultimediaUploadCallbacks = Shape<{
@@ -13,7 +13,7 @@
export type MultimediaUploadExtras = Shape<{ ...Dimensions, loop: boolean }>;
const uploadMultimedia = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
multimedia: Object,
extras: MultimediaUploadExtras,
@@ -38,7 +38,7 @@
stringExtras.loop = '1';
}
- const response = await fetchJSON(
+ const response = await callServerEndpoint(
'upload_multimedia',
{
multimedia: [multimedia],
@@ -64,9 +64,9 @@
'UPDATE_MULTIMEDIA_MESSAGE_MEDIA';
const deleteUpload = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((id: string) => Promise<void>) => async id => {
- await fetchJSON('delete_upload', { id });
+ await callServerEndpoint('delete_upload', { id });
};
export {
diff --git a/lib/actions/user-actions.js b/lib/actions/user-actions.js
--- a/lib/actions/user-actions.js
+++ b/lib/actions/user-actions.js
@@ -20,8 +20,8 @@
SubscriptionUpdateResult,
} from '../types/subscription-types';
import type { UserInfo, PasswordUpdate } from '../types/user-types';
+import type { CallServerEndpoint } from '../utils/call-server-endpoint';
import { getConfig } from '../utils/config';
-import type { FetchJSON } from '../utils/fetch-json';
import sleep from '../utils/sleep';
const logOutActionTypes = Object.freeze({
@@ -30,14 +30,14 @@
failed: 'LOG_OUT_FAILED',
});
const logOut = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
preRequestUserState: PreRequestUserState,
) => Promise<LogOutResult>) => async preRequestUserState => {
let response = null;
try {
response = await Promise.race([
- fetchJSON('log_out', {}),
+ callServerEndpoint('log_out', {}),
(async () => {
await sleep(500);
throw new Error('log_out took more than 500ms');
@@ -54,12 +54,12 @@
failed: 'DELETE_ACCOUNT_FAILED',
});
const deleteAccount = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
password: string,
preRequestUserState: PreRequestUserState,
) => Promise<LogOutResult>) => async (password, preRequestUserState) => {
- const response = await fetchJSON('delete_account', { password });
+ const response = await callServerEndpoint('delete_account', { password });
return { currentUserInfo: response.currentUserInfo, preRequestUserState };
};
@@ -68,19 +68,19 @@
success: 'REGISTER_SUCCESS',
failed: 'REGISTER_FAILED',
});
-const registerFetchJSONOptions = { timeout: 60000 };
+const registerCallServerEndpointOptions = { timeout: 60000 };
const register = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
registerInfo: RegisterInfo,
) => Promise<RegisterResult>) => async registerInfo => {
- const response = await fetchJSON(
+ const response = await callServerEndpoint(
'create_account',
{
...registerInfo,
platformDetails: getConfig().platformDetails,
},
- registerFetchJSONOptions,
+ registerCallServerEndpointOptions,
);
return {
currentUserInfo: response.currentUserInfo,
@@ -110,19 +110,19 @@
success: 'LOG_IN_SUCCESS',
failed: 'LOG_IN_FAILED',
});
-const logInFetchJSONOptions = { timeout: 60000 };
+const logInCallServerEndpointOptions = { timeout: 60000 };
const logIn = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((logInInfo: LogInInfo) => Promise<LogInResult>) => async logInInfo => {
const watchedIDs = threadWatcher.getWatchedIDs();
- const response = await fetchJSON(
+ const response = await callServerEndpoint(
'log_in',
{
...logInInfo,
watchedIDs,
platformDetails: getConfig().platformDetails,
},
- logInFetchJSONOptions,
+ logInCallServerEndpointOptions,
);
const userInfos = mergeUserInfos(
response.userInfos,
@@ -153,11 +153,11 @@
failed: 'CHANGE_USER_PASSWORD_FAILED',
});
const changeUserPassword = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
passwordUpdate: PasswordUpdate,
) => Promise<void>) => async passwordUpdate => {
- await fetchJSON('update_account', passwordUpdate);
+ await callServerEndpoint('update_account', passwordUpdate);
};
const searchUsersActionTypes = Object.freeze({
@@ -166,11 +166,13 @@
failed: 'SEARCH_USERS_FAILED',
});
const searchUsers = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
usernamePrefix: string,
) => Promise<UserSearchResult>) => async usernamePrefix => {
- const response = await fetchJSON('search_users', { prefix: usernamePrefix });
+ const response = await callServerEndpoint('search_users', {
+ prefix: usernamePrefix,
+ });
return {
userInfos: response.userInfos,
};
@@ -182,11 +184,11 @@
failed: 'UPDATE_SUBSCRIPTION_FAILED',
});
const updateSubscription = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
subscriptionUpdate: SubscriptionUpdateRequest,
) => Promise<SubscriptionUpdateResult>) => async subscriptionUpdate => {
- const response = await fetchJSON(
+ const response = await callServerEndpoint(
'update_user_subscription',
subscriptionUpdate,
);
@@ -203,19 +205,19 @@
});
const setUserSettings = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
userSettingsRequest: UpdateUserSettingsRequest,
) => Promise<void>) => async userSettingsRequest => {
- await fetchJSON('update_user_settings', userSettingsRequest);
+ await callServerEndpoint('update_user_settings', userSettingsRequest);
};
const getSessionPublicKeys = (
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
): ((
data: GetSessionPublicKeysArgs,
) => Promise<SessionPublicKeys | null>) => async data => {
- return await fetchJSON('get_session_public_keys', data);
+ return await callServerEndpoint('get_session_public_keys', data);
};
export {
diff --git a/lib/shared/timeouts.js b/lib/shared/timeouts.js
--- a/lib/shared/timeouts.js
+++ b/lib/shared/timeouts.js
@@ -17,9 +17,10 @@
// unlikely, as the connectivity issue is likely on the client side.
export const clientRequestSocketTimeout = 10000; // in milliseconds
-// Time after which FetchJSON will timeout a request. When using sockets this is
-// preempted by the above timeout, so it really only applies for HTTP requests.
-export const fetchJSONTimeout = 10000; // in milliseconds
+// Time after which CallServerEndpoint will timeout a request. When using
+// sockets this is preempted by the above timeout, so it really only applies
+// for HTTP requests.
+export const callServerEndpointTimeout = 10000; // in milliseconds
// The server expects to get a request at least every three
// seconds from the client. If server doesn't get a request
diff --git a/lib/types/message-types.js b/lib/types/message-types.js
--- a/lib/types/message-types.js
+++ b/lib/types/message-types.js
@@ -2,7 +2,7 @@
import invariant from 'invariant';
-import type { FetchResultInfoInterface } from '../utils/fetch-json';
+import type { CallServerEndpointResultInfoInterface } from '../utils/call-server-endpoint';
import { type ClientDBMediaInfo } from './media-types';
import type {
AddMembersMessageData,
@@ -485,14 +485,14 @@
export type SendMessageResult = {
+id: string,
+time: number,
- +interface: FetchResultInfoInterface,
+ +interface: CallServerEndpointResultInfoInterface,
};
export type SendMessagePayload = {
+localID: string,
+serverID: string,
+threadID: string,
+time: number,
- +interface: FetchResultInfoInterface,
+ +interface: CallServerEndpointResultInfoInterface,
};
export type SendTextMessageRequest = {
diff --git a/lib/utils/action-utils.js b/lib/utils/action-utils.js
--- a/lib/utils/action-utils.js
+++ b/lib/utils/action-utils.js
@@ -26,9 +26,12 @@
} from '../types/session-types';
import type { ConnectionStatus } from '../types/socket-types';
import type { CurrentUserInfo } from '../types/user-types';
+import callServerEndpoint from './call-server-endpoint';
+import type {
+ CallServerEndpoint,
+ CallServerEndpointOptions,
+} from './call-server-endpoint';
import { getConfig } from './config';
-import fetchJSON from './fetch-json';
-import type { FetchJSON, FetchJSONOptions } from './fetch-json';
let nextPromiseIndex = 0;
@@ -142,7 +145,9 @@
};
let currentlyWaitingForNewCookie = false;
-let fetchJSONCallsWaitingForNewCookie: ((fetchJSON: ?FetchJSON) => void)[] = [];
+let serverEndpointCallsWaitingForNewCookie: ((
+ callServerEndpoint: ?CallServerEndpoint,
+) => void)[] = [];
export type DispatchRecoveryAttempt = (
actionTypes: ActionTypes<'LOG_IN_STARTED', 'LOG_IN_SUCCESS', 'LOG_IN_FAILED'>,
@@ -180,11 +185,11 @@
return null;
}
let newSessionChange = null;
- let fetchJSONCallback = null;
- const boundFetchJSON = async (
+ let callServerEndpointCallback = null;
+ const boundCallServerEndpoint = async (
endpoint: Endpoint,
data: { [key: string]: mixed },
- options?: ?FetchJSONOptions,
+ options?: ?CallServerEndpointOptions,
) => {
const innerBoundSetNewSession = (
sessionChange: ClientSessionChange,
@@ -194,7 +199,7 @@
setNewSession(dispatch, sessionChange, null, error, source);
};
try {
- const result = await fetchJSON(
+ const result = await callServerEndpoint(
cookie,
innerBoundSetNewSession,
() => new Promise(r => r(null)),
@@ -207,13 +212,13 @@
data,
options,
);
- if (fetchJSONCallback) {
- fetchJSONCallback(!!newSessionChange);
+ if (callServerEndpointCallback) {
+ callServerEndpointCallback(!!newSessionChange);
}
return result;
} catch (e) {
- if (fetchJSONCallback) {
- fetchJSONCallback(!!newSessionChange);
+ if (callServerEndpointCallback) {
+ callServerEndpointCallback(!!newSessionChange);
}
throw e;
}
@@ -229,10 +234,10 @@
) => {
const startingPayload = { ...inputStartingPayload, source };
dispatch(wrapActionPromise(actionTypes, promise, null, startingPayload));
- return new Promise(r => (fetchJSONCallback = r));
+ return new Promise(r => (callServerEndpointCallback = r));
};
await resolveInvalidatedCookie(
- boundFetchJSON,
+ boundCallServerEndpoint,
dispatchRecoveryAttempt,
source,
);
@@ -241,9 +246,9 @@
// Third param is optional and gets called with newCookie if we get a new cookie
// Necessary to propagate cookie in cookieInvalidationRecovery below
-function bindCookieAndUtilsIntoFetchJSON(
+function bindCookieAndUtilsIntoCallServerEndpoint(
params: BindServerCallsParams,
-): FetchJSON {
+): CallServerEndpoint {
const {
dispatch,
cookie,
@@ -264,12 +269,13 @@
error,
undefined,
);
- // This function gets called before fetchJSON sends a request, to make sure
- // that we're not in the middle of trying to recover an invalidated cookie
+ // This function gets called before callServerEndpoint sends a request,
+ // to make sure that we're not in the middle of trying to recover
+ // an invalidated cookie
const waitIfCookieInvalidated = () => {
if (!getConfig().resolveInvalidatedCookie) {
// If there is no resolveInvalidatedCookie function, just let the caller
- // fetchJSON instance continue
+ // callServerEndpoint instance continue
return Promise.resolve(null);
}
if (!currentlyWaitingForNewCookie) {
@@ -277,7 +283,7 @@
return Promise.resolve(null);
}
// Wait to run until we get our new cookie
- return new Promise(r => fetchJSONCallsWaitingForNewCookie.push(r));
+ return new Promise(r => serverEndpointCallsWaitingForNewCookie.push(r));
};
// This function is a helper for the next function defined below
const attemptToResolveInvalidation = async (
@@ -292,11 +298,11 @@
);
currentlyWaitingForNewCookie = false;
- const currentWaitingCalls = fetchJSONCallsWaitingForNewCookie;
- fetchJSONCallsWaitingForNewCookie = [];
+ const currentWaitingCalls = serverEndpointCallsWaitingForNewCookie;
+ serverEndpointCallsWaitingForNewCookie = [];
- const newFetchJSON = newSessionChange
- ? bindCookieAndUtilsIntoFetchJSON({
+ const newCallServerEndpoint = newSessionChange
+ ? bindCookieAndUtilsIntoCallServerEndpoint({
...params,
cookie: newSessionChange.cookie,
sessionID: newSessionChange.sessionID,
@@ -304,17 +310,17 @@
})
: null;
for (const func of currentWaitingCalls) {
- func(newFetchJSON);
+ func(newCallServerEndpoint);
}
- return newFetchJSON;
+ return newCallServerEndpoint;
};
- // If this function is called, fetchJSON got a response invalidating its
- // cookie, and is wondering if it should just like... give up? Or if there's
- // a chance at redemption
+ // If this function is called, callServerEndpoint got a response invalidating
+ // its cookie, and is wondering if it should just like... give up?
+ // Or if there's a chance at redemption
const cookieInvalidationRecovery = (sessionChange: ClientSessionChange) => {
if (!getConfig().resolveInvalidatedCookie) {
// If there is no resolveInvalidatedCookie function, just let the caller
- // fetchJSON instance continue
+ // callServerEndpoint instance continue
return Promise.resolve(null);
}
if (!loggedIn) {
@@ -323,14 +329,18 @@
return Promise.resolve(null);
}
if (currentlyWaitingForNewCookie) {
- return new Promise(r => fetchJSONCallsWaitingForNewCookie.push(r));
+ return new Promise(r => serverEndpointCallsWaitingForNewCookie.push(r));
}
currentlyWaitingForNewCookie = true;
return attemptToResolveInvalidation(sessionChange);
};
- return (endpoint: Endpoint, data: Object, options?: ?FetchJSONOptions) =>
- fetchJSON(
+ return (
+ endpoint: Endpoint,
+ data: Object,
+ options?: ?CallServerEndpointOptions,
+ ) =>
+ callServerEndpoint(
cookie,
boundSetNewSession,
waitIfCookieInvalidated,
@@ -345,7 +355,7 @@
);
}
-export type ActionFunc<F> = (fetchJSON: FetchJSON) => F;
+export type ActionFunc<F> = (callServerEndpoint: CallServerEndpoint) => F;
type BindServerCallsParams = {
dispatch: Dispatch,
cookie: ?string,
@@ -357,12 +367,13 @@
// All server calls needs to include some information from the Redux state
// (namely, the cookie). This information is used deep in the server call,
-// at the point where fetchJSON is called. We don't want to bother propagating
-// the cookie (and any future config info that fetchJSON needs) through to the
-// server calls so they can pass it to fetchJSON. Instead, we "curry" the cookie
-// onto fetchJSON within react-redux's connect's mapStateToProps function, and
-// then pass that "bound" fetchJSON that no longer needs the cookie as a
-// parameter on to the server call.
+// at the point where callServerEndpoint is called. We don't want to bother
+// propagating the cookie (and any future config info that callServerEndpoint
+// needs) through to the server calls so they can pass it to callServerEndpoint.
+// Instead, we "curry" the cookie onto callServerEndpoint within react-redux's
+// connect's mapStateToProps function, and then pass that "bound"
+// callServerEndpoint that no longer needs the cookie as a parameter on to
+// the server call.
const baseCreateBoundServerCallsSelector = <F>(
actionFunc: ActionFunc<F>,
): (BindServerCallsParams => F) =>
@@ -381,7 +392,7 @@
currentUserInfo: ?CurrentUserInfo,
connectionStatus: ConnectionStatus,
) => {
- const boundFetchJSON = bindCookieAndUtilsIntoFetchJSON({
+ const boundCallServerEndpoint = bindCookieAndUtilsIntoCallServerEndpoint({
dispatch,
cookie,
urlPrefix,
@@ -389,7 +400,7 @@
currentUserInfo,
connectionStatus,
});
- return actionFunc(boundFetchJSON);
+ return actionFunc(boundCallServerEndpoint);
},
);
diff --git a/lib/utils/fetch-json.js b/lib/utils/call-server-endpoint.js
rename from lib/utils/fetch-json.js
rename to lib/utils/call-server-endpoint.js
--- a/lib/utils/fetch-json.js
+++ b/lib/utils/call-server-endpoint.js
@@ -1,6 +1,6 @@
// @flow
-import { fetchJSONTimeout } from '../shared/timeouts';
+import { callServerEndpointTimeout } from '../shared/timeouts';
import { SocketOffline, SocketTimeout } from '../socket/inflight-requests';
import type { Shape } from '../types/core';
import {
@@ -20,12 +20,12 @@
import sleep from './sleep';
import { uploadBlob, type UploadBlob } from './upload-blob';
-export type FetchJSONOptions = Shape<{
+export type CallServerEndpointOptions = Shape<{
// null timeout means no timeout, which is the default for uploadBlob
+timeout: ?number, // in milliseconds
- // getResultInfo will be called right before fetchJSON successfully resolves
- // and includes additional information about the request
- +getResultInfo: (resultInfo: FetchResultInfo) => mixed,
+ // getResultInfo will be called right before callServerEndpoint successfully
+ // resolves and includes additional information about the request
+ +getResultInfo: (resultInfo: CallServerEndpointResultInfo) => mixed,
+blobUpload: boolean | UploadBlob,
// the rest (onProgress, abortHandler) only work with blobUpload
+onProgress: (percent: number) => void,
@@ -33,26 +33,27 @@
+abortHandler: (abort: () => void) => void,
}>;
-export type FetchResultInfoInterface = 'socket' | 'REST';
-export type FetchResultInfo = {
- +interface: FetchResultInfoInterface,
+export type CallServerEndpointResultInfoInterface = 'socket' | 'REST';
+export type CallServerEndpointResultInfo = {
+ +interface: CallServerEndpointResultInfoInterface,
};
-export type FetchJSONServerResponse = Shape<{
+export type CallServerEndpointResponse = Shape<{
+cookieChange: ServerSessionChange,
+currentUserInfo: CurrentUserInfo,
+error: string,
+payload: Object,
}>;
-// You'll notice that this is not the type of the fetchJSON function below. This
-// is because the first several parameters to that functon get bound in by the
-// helpers in lib/utils/action-utils.js. This type represents the form of the
-// fetchJSON function that gets passed to the action function in lib/actions.
-export type FetchJSON = (
+// You'll notice that this is not the type of the callServerEndpoint
+// function below. This is because the first several parameters to that
+// function get bound in by the helpers in lib/utils/action-utils.js.
+// This type represents the form of the callServerEndpoint function that
+// gets passed to the action function in lib/actions.
+export type CallServerEndpoint = (
endpoint: Endpoint,
input: Object,
- options?: ?FetchJSONOptions,
+ options?: ?CallServerEndpointOptions,
) => Promise<Object>;
type RequestData = {
@@ -68,20 +69,20 @@
// underlying implementations and prefer for things to be explicit, and XSS
// isn't a thing on native. Note that for native, cookie might be null
// (indicating we don't have one), and we will then set an empty Cookie header.
-async function fetchJSON(
+async function callServerEndpoint(
cookie: ?string,
setNewSession: (sessionChange: ClientSessionChange, error: ?string) => void,
- waitIfCookieInvalidated: () => Promise<?FetchJSON>,
+ waitIfCookieInvalidated: () => Promise<?CallServerEndpoint>,
cookieInvalidationRecovery: (
sessionChange: ClientSessionChange,
- ) => Promise<?FetchJSON>,
+ ) => Promise<?CallServerEndpoint>,
urlPrefix: string,
sessionID: ?string,
connectionStatus: ConnectionStatus,
socketAPIHandler: ?SocketAPIHandler,
endpoint: Endpoint,
input: { [key: string]: mixed },
- options?: ?FetchJSONOptions,
+ options?: ?CallServerEndpointOptions,
): Promise<Object> {
const possibleReplacement = await waitIfCookieInvalidated();
if (possibleReplacement) {
@@ -140,7 +141,7 @@
// is not logged in on web.
mergedData.sessionID = sessionID ? sessionID : null;
}
- const fetchPromise = (async (): Promise<FetchJSONServerResponse> => {
+ const callEndpointPromise = (async (): Promise<CallServerEndpointResponse> => {
const response = await fetch(url, {
method: 'POST',
// This is necessary to allow cookie headers to get passed down to us
@@ -161,18 +162,18 @@
})();
const timeout =
- options && options.timeout ? options.timeout : fetchJSONTimeout;
+ options && options.timeout ? options.timeout : callServerEndpointTimeout;
if (!timeout) {
- json = await fetchPromise;
+ json = await callEndpointPromise;
} else {
const rejectPromise = (async () => {
await sleep(timeout);
throw new FetchTimeout(
- `fetchJSON timed out call to ${endpoint}`,
+ `callServerEndpoint timed out call to ${endpoint}`,
endpoint,
);
})();
- json = await Promise.race([fetchPromise, rejectPromise]);
+ json = await Promise.race([callEndpointPromise, rejectPromise]);
}
}
@@ -201,4 +202,4 @@
return json;
}
-export default fetchJSON;
+export default callServerEndpoint;
diff --git a/lib/utils/config.js b/lib/utils/config.js
--- a/lib/utils/config.js
+++ b/lib/utils/config.js
@@ -5,11 +5,11 @@
import type { LogInActionSource } from '../types/account-types';
import type { PlatformDetails } from '../types/device-types';
import type { DispatchRecoveryAttempt } from './action-utils';
-import type { FetchJSON } from './fetch-json';
+import type { CallServerEndpoint } from './call-server-endpoint';
export type Config = {
+resolveInvalidatedCookie: ?(
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
dispatchRecoveryAttempt: DispatchRecoveryAttempt,
source?: LogInActionSource,
) => Promise<void>,
diff --git a/lib/utils/upload-blob.js b/lib/utils/upload-blob.js
--- a/lib/utils/upload-blob.js
+++ b/lib/utils/upload-blob.js
@@ -3,16 +3,19 @@
import invariant from 'invariant';
import _throttle from 'lodash/throttle';
+import type {
+ CallServerEndpointOptions,
+ CallServerEndpointResponse,
+} from './call-server-endpoint';
import { getConfig } from './config';
-import type { FetchJSONOptions, FetchJSONServerResponse } from './fetch-json';
function uploadBlob(
url: string,
cookie: ?string,
sessionID: ?string,
input: { [key: string]: mixed },
- options?: ?FetchJSONOptions,
-): Promise<FetchJSONServerResponse> {
+ options?: ?CallServerEndpointOptions,
+): Promise<CallServerEndpointResponse> {
const formData = new FormData();
if (getConfig().setCookieOnRequest) {
// We make sure that if setCookieOnRequest is true, we never set cookie to
diff --git a/native/account/resolve-invalidated-cookie.js b/native/account/resolve-invalidated-cookie.js
--- a/native/account/resolve-invalidated-cookie.js
+++ b/native/account/resolve-invalidated-cookie.js
@@ -3,7 +3,7 @@
import { logInActionTypes, logIn } from 'lib/actions/user-actions';
import type { LogInActionSource } from 'lib/types/account-types';
import type { DispatchRecoveryAttempt } from 'lib/utils/action-utils';
-import type { FetchJSON } from 'lib/utils/fetch-json';
+import type { CallServerEndpoint } from 'lib/utils/call-server-endpoint';
import { getGlobalNavContext } from '../navigation/icky-global';
import { store } from '../redux/redux-setup';
@@ -11,7 +11,7 @@
import { fetchNativeKeychainCredentials } from './native-credentials';
async function resolveInvalidatedCookie(
- fetchJSON: FetchJSON,
+ callServerEndpoint: CallServerEndpoint,
dispatchRecoveryAttempt: DispatchRecoveryAttempt,
source?: LogInActionSource,
) {
@@ -26,7 +26,7 @@
const { calendarQuery } = extraInfo;
await dispatchRecoveryAttempt(
logInActionTypes,
- logIn(fetchJSON)({
+ logIn(callServerEndpoint)({
...keychainCredentials,
...extraInfo,
source,
diff --git a/native/input/input-state-container.react.js b/native/input/input-state-container.react.js
--- a/native/input/input-state-container.react.js
+++ b/native/input/input-state-container.react.js
@@ -75,12 +75,12 @@
useServerCall,
useDispatchActionPromise,
} from 'lib/utils/action-utils';
+import type {
+ CallServerEndpointOptions,
+ CallServerEndpointResponse,
+} from 'lib/utils/call-server-endpoint';
import { getConfig } from 'lib/utils/config';
import { getMessageForException, cloneError } from 'lib/utils/errors';
-import type {
- FetchJSONOptions,
- FetchJSONServerResponse,
-} from 'lib/utils/fetch-json';
import { values } from 'lib/utils/objects';
import { useIsReportEnabled } from 'lib/utils/report-utils';
@@ -897,8 +897,8 @@
cookie: ?string,
sessionID: ?string,
input: { [key: string]: mixed },
- options?: ?FetchJSONOptions,
- ): Promise<FetchJSONServerResponse> => {
+ options?: ?CallServerEndpointOptions,
+ ): Promise<CallServerEndpointResponse> => {
invariant(
cookie &&
input.multimedia &&
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Nov 26, 10:22 PM (19 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2585975
Default Alt Text
D5247.id.diff (42 KB)
Attached To
Mode
D5247: [lib/ native] Rename fetchJSON to callServerEndpoint
Attached
Detach File
Event Timeline
Log In to Comment