Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3380204
D10688.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
45 KB
Referenced Files
None
Subscribers
None
D10688.diff
View Options
diff --git a/lib/actions/link-actions.js b/lib/actions/link-actions.js
--- a/lib/actions/link-actions.js
+++ b/lib/actions/link-actions.js
@@ -10,7 +10,7 @@
DisableInviteLinkRequest,
DisableInviteLinkPayload,
} from '../types/link-types.js';
-import type { CallServerEndpoint } from '../utils/call-server-endpoint.js';
+import type { CallSingleKeyserverEndpoint } from '../utils/call-single-keyserver-endpoint.js';
import { useKeyserverCall } from '../utils/keyserver-call.js';
import type { CallKeyserverEndpoint } from '../utils/keyserver-call.js';
@@ -21,12 +21,15 @@
});
const verifyInviteLink =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((
request: InviteLinkVerificationRequest,
) => Promise<InviteLinkVerificationResponse>) =>
async request => {
- const response = await callServerEndpoint('verify_invite_link', request);
+ const response = await callSingleKeyserverEndpoint(
+ 'verify_invite_link',
+ request,
+ );
if (response.status === 'valid' || response.status === 'already_joined') {
return {
status: response.status,
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
@@ -26,7 +26,7 @@
ToggleMessagePinRequest,
ToggleMessagePinResult,
} from '../types/thread-types.js';
-import type { CallServerEndpointResultInfo } from '../utils/call-server-endpoint.js';
+import type { CallSingleKeyserverEndpointResultInfo } from '../utils/call-single-keyserver-endpoint.js';
import { useKeyserverCall } from '../utils/keyserver-call.js';
import type { CallKeyserverEndpoint } from '../utils/keyserver-call.js';
@@ -178,7 +178,9 @@
): ((input: SendTextMessageInput) => Promise<SendMessageResult>) =>
async input => {
let resultInfo;
- const getResultInfo = (passedResultInfo: CallServerEndpointResultInfo) => {
+ const getResultInfo = (
+ passedResultInfo: CallSingleKeyserverEndpointResultInfo,
+ ) => {
resultInfo = passedResultInfo;
};
const { threadID, localID, text, sidebarCreation } = input;
@@ -235,7 +237,9 @@
): ((input: SendMultimediaMessageInput) => Promise<SendMessageResult>) =>
async input => {
let resultInfo;
- const getResultInfo = (passedResultInfo: CallServerEndpointResultInfo) => {
+ const getResultInfo = (
+ passedResultInfo: CallSingleKeyserverEndpointResultInfo,
+ ) => {
resultInfo = passedResultInfo;
};
const { threadID, localID, mediaMessageContents, sidebarCreation } = input;
@@ -285,7 +289,9 @@
) => Promise<SendMessageResult>) =>
async input => {
let resultInfo;
- const getResultInfo = (passedResultInfo: CallServerEndpointResultInfo) => {
+ const getResultInfo = (
+ passedResultInfo: CallSingleKeyserverEndpointResultInfo,
+ ) => {
resultInfo = passedResultInfo;
};
const { threadID, localID, mediaIDs, sidebarCreation } = input;
@@ -331,7 +337,9 @@
): ((input: SendReactionMessageRequest) => Promise<SendMessageResult>) =>
async input => {
let resultInfo;
- const getResultInfo = (passedResultInfo: CallServerEndpointResultInfo) => {
+ const getResultInfo = (
+ passedResultInfo: CallSingleKeyserverEndpointResultInfo,
+ ) => {
resultInfo = passedResultInfo;
};
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,7 +4,7 @@
RelationshipRequest,
RelationshipErrors,
} from '../types/relationship-types.js';
-import type { CallServerEndpoint } from '../utils/call-server-endpoint.js';
+import type { CallSingleKeyserverEndpoint } from '../utils/call-single-keyserver-endpoint.js';
import { ServerError } from '../utils/errors.js';
const updateRelationshipsActionTypes = Object.freeze({
@@ -14,10 +14,13 @@
});
const updateRelationships =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((request: RelationshipRequest) => Promise<RelationshipErrors>) =>
async request => {
- const errors = await callServerEndpoint('update_relationships', request);
+ const errors = await callSingleKeyserverEndpoint(
+ 'update_relationships',
+ request,
+ );
const { invalid_user, already_friends, user_blocked } = errors;
if (invalid_user) {
diff --git a/lib/actions/siwe-actions.js b/lib/actions/siwe-actions.js
--- a/lib/actions/siwe-actions.js
+++ b/lib/actions/siwe-actions.js
@@ -8,9 +8,9 @@
} from '../types/account-types.js';
import type { SIWEAuthServerCall } from '../types/siwe-types.js';
import type {
- CallServerEndpoint,
- CallServerEndpointOptions,
-} from '../utils/call-server-endpoint.js';
+ CallSingleKeyserverEndpoint,
+ CallSingleKeyserverEndpointOptions,
+} from '../utils/call-single-keyserver-endpoint.js';
import { getConfig } from '../utils/config.js';
import { ashoatKeyserverID } from '../utils/validation-utils.js';
@@ -20,9 +20,11 @@
failed: 'GET_SIWE_NONCE_FAILED',
});
const getSIWENonce =
- (callServerEndpoint: CallServerEndpoint): (() => Promise<string>) =>
+ (
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
+ ): (() => Promise<string>) =>
async () => {
- const response = await callServerEndpoint('siwe_nonce');
+ const response = await callSingleKeyserverEndpoint('siwe_nonce');
return response.nonce;
};
@@ -31,20 +33,20 @@
success: 'SIWE_AUTH_SUCCESS',
failed: 'SIWE_AUTH_FAILED',
});
-const siweAuthCallServerEndpointOptions = { timeout: 60000 };
+const siweAuthCallSingleKeyserverEndpointOptions = { timeout: 60000 };
const siweAuth =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((
siweAuthPayload: SIWEAuthServerCall,
- options?: ?CallServerEndpointOptions,
+ options?: ?CallSingleKeyserverEndpointOptions,
) => Promise<LogInResult>) =>
async (siweAuthPayload, options) => {
const watchedIDs = threadWatcher.getWatchedIDs();
const deviceTokenUpdateRequest =
siweAuthPayload.deviceTokenUpdateRequest[ashoatKeyserverID];
- const response = await callServerEndpoint(
+ const response = await callSingleKeyserverEndpoint(
'siwe_auth',
{
...siweAuthPayload,
@@ -53,7 +55,7 @@
platformDetails: getConfig().platformDetails,
},
{
- ...siweAuthCallServerEndpointOptions,
+ ...siweAuthCallSingleKeyserverEndpointOptions,
...options,
},
);
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
@@ -11,7 +11,7 @@
type BlobServiceUploadHandler,
} from '../utils/blob-service-upload.js';
import { makeBlobServiceEndpointURL } from '../utils/blob-service.js';
-import type { CallServerEndpoint } from '../utils/call-server-endpoint.js';
+import type { CallSingleKeyserverEndpoint } from '../utils/call-single-keyserver-endpoint.js';
import { getMessageForException } from '../utils/errors.js';
import { useKeyserverCall } from '../utils/keyserver-call.js';
import type { CallKeyserverEndpoint } from '../utils/keyserver-call.js';
@@ -36,7 +36,7 @@
const uploadMultimedia =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((
multimedia: Object,
extras: MultimediaUploadExtras,
@@ -69,7 +69,7 @@
stringExtras.mimeType = multimedia.type;
}
- const response = await callServerEndpoint(
+ const response = await callSingleKeyserverEndpoint(
'upload_multimedia',
{
...stringExtras,
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
@@ -59,9 +59,9 @@
LoggedOutUserInfo,
} from '../types/user-types.js';
import type {
- CallServerEndpoint,
- CallServerEndpointOptions,
-} from '../utils/call-server-endpoint.js';
+ CallSingleKeyserverEndpoint,
+ CallSingleKeyserverEndpointOptions,
+} from '../utils/call-single-keyserver-endpoint.js';
import { getConfig } from '../utils/config.js';
import type { CallKeyserverEndpoint } from '../utils/keyserver-call';
import { useKeyserverCall } from '../utils/keyserver-call.js';
@@ -128,7 +128,7 @@
success: 'CLAIM_USERNAME_SUCCESS',
failed: 'CLAIM_USERNAME_FAILED',
});
-const claimUsernameCallServerEndpointOptions = { timeout: 500 };
+const claimUsernameCallSingleKeyserverEndpointOptions = { timeout: 500 };
const claimUsername =
(
callKeyserverEndpoint: CallKeyserverEndpoint,
@@ -136,7 +136,7 @@
async () => {
const requests = { [ashoatKeyserverID]: {} };
const responses = await callKeyserverEndpoint('claim_username', requests, {
- ...claimUsernameCallServerEndpointOptions,
+ ...claimUsernameCallSingleKeyserverEndpointOptions,
});
const response = responses[ashoatKeyserverID];
return {
@@ -210,19 +210,19 @@
success: 'KEYSERVER_REGISTER_SUCCESS',
failed: 'KEYSERVER_REGISTER_FAILED',
});
-const registerCallServerEndpointOptions = { timeout: 60000 };
+const registerCallSingleKeyserverEndpointOptions = { timeout: 60000 };
const keyserverRegister =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((
registerInfo: RegisterInfo,
- options?: CallServerEndpointOptions,
+ options?: CallSingleKeyserverEndpointOptions,
) => Promise<RegisterResult>) =>
async (registerInfo, options) => {
const deviceTokenUpdateRequest =
registerInfo.deviceTokenUpdateRequest[ashoatKeyserverID];
- const response = await callServerEndpoint(
+ const response = await callSingleKeyserverEndpoint(
'create_account',
{
...registerInfo,
@@ -230,7 +230,7 @@
platformDetails: getConfig().platformDetails,
},
{
- ...registerCallServerEndpointOptions,
+ ...registerCallSingleKeyserverEndpointOptions,
...options,
},
);
@@ -253,7 +253,7 @@
success: 'KEYSERVER_AUTH_SUCCESS',
failed: 'KEYSERVER_AUTH_FAILED',
});
-const keyserverAuthCallServerEndpointOptions = { timeout: 60000 };
+const keyserverAuthCallSingleKeyserverEndpointOptions = { timeout: 60000 };
const keyserverAuth =
(
callKeyserverEndpoint: CallKeyserverEndpoint,
@@ -298,7 +298,7 @@
await callKeyserverEndpoint(
'keyserver_auth',
requests,
- keyserverAuthCallServerEndpointOptions,
+ keyserverAuthCallSingleKeyserverEndpointOptions,
);
const userInfosArrays = [];
@@ -436,7 +436,7 @@
success: 'LOG_IN_SUCCESS',
failed: 'LOG_IN_FAILED',
});
-const logInCallServerEndpointOptions = { timeout: 60000 };
+const logInCallSingleKeyserverEndpointOptions = { timeout: 60000 };
const logIn =
(
callKeyserverEndpoint: CallKeyserverEndpoint,
@@ -477,7 +477,7 @@
await callKeyserverEndpoint(
'log_in',
requests,
- logInCallServerEndpointOptions,
+ logInCallSingleKeyserverEndpointOptions,
);
const userInfosArrays = [];
@@ -549,10 +549,10 @@
});
const changeKeyserverUserPassword =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((passwordUpdate: PasswordUpdate) => Promise<void>) =>
async passwordUpdate => {
- await callServerEndpoint('update_account', passwordUpdate);
+ await callSingleKeyserverEndpoint('update_account', passwordUpdate);
};
const searchUsersActionTypes = Object.freeze({
@@ -562,10 +562,10 @@
});
const searchUsers =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((usernamePrefix: string) => Promise<UserSearchResult>) =>
async usernamePrefix => {
- const response = await callServerEndpoint('search_users', {
+ const response = await callSingleKeyserverEndpoint('search_users', {
prefix: usernamePrefix,
});
return {
@@ -580,10 +580,10 @@
});
const exactSearchUser =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((username: string) => Promise<ExactUserSearchResult>) =>
async username => {
- const response = await callServerEndpoint('exact_search_user', {
+ const response = await callSingleKeyserverEndpoint('exact_search_user', {
username,
});
return {
@@ -650,10 +650,10 @@
const getSessionPublicKeys =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((data: GetSessionPublicKeysArgs) => Promise<SessionPublicKeys | null>) =>
async data => {
- return await callServerEndpoint('get_session_public_keys', data);
+ return await callSingleKeyserverEndpoint('get_session_public_keys', data);
};
const getOlmSessionInitializationDataActionTypes = Object.freeze({
@@ -664,12 +664,12 @@
const getOlmSessionInitializationData =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((
- options?: ?CallServerEndpointOptions,
+ options?: ?CallSingleKeyserverEndpointOptions,
) => Promise<GetOlmSessionInitializationDataResponse>) =>
async options => {
- return await callServerEndpoint(
+ return await callSingleKeyserverEndpoint(
'get_olm_session_initialization_data',
{},
options,
@@ -683,10 +683,10 @@
});
const policyAcknowledgment =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((policyRequest: PolicyAcknowledgmentRequest) => Promise<void>) =>
async policyRequest => {
- await callServerEndpoint('policy_acknowledgment', policyRequest);
+ await callSingleKeyserverEndpoint('policy_acknowledgment', policyRequest);
};
const updateUserAvatarActionTypes = Object.freeze({
@@ -696,15 +696,13 @@
});
const updateUserAvatar =
(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
): ((
avatarDBContent: UpdateUserAvatarRequest,
) => Promise<UpdateUserAvatarResponse>) =>
async avatarDBContent => {
- const { updates }: UpdateUserAvatarResponse = await callServerEndpoint(
- 'update_user_avatar',
- avatarDBContent,
- );
+ const { updates }: UpdateUserAvatarResponse =
+ await callSingleKeyserverEndpoint('update_user_avatar', avatarDBContent);
return { updates };
};
diff --git a/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js b/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js
--- a/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js
+++ b/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js
@@ -16,14 +16,14 @@
import type { ClientSessionChange } from '../types/session-types.js';
import type { CurrentUserInfo } from '../types/user-types.js';
import type {
- CallServerEndpoint,
- CallServerEndpointOptions,
-} from '../utils/call-server-endpoint.js';
-import callServerEndpoint from '../utils/call-server-endpoint.js';
+ CallSingleKeyserverEndpoint,
+ CallSingleKeyserverEndpointOptions,
+} from '../utils/call-single-keyserver-endpoint.js';
+import callSingleKeyserverEndpoint from '../utils/call-single-keyserver-endpoint.js';
type CreateCallSingleKeyserverEndpointSelector = (
keyserverID: string,
-) => ServerCallSelectorParams => CallServerEndpoint;
+) => ServerCallSelectorParams => CallSingleKeyserverEndpoint;
type CallKeyserverEndpointContextType = {
+createCallSingleKeyserverEndpointSelector: CreateCallSingleKeyserverEndpointSelector,
};
@@ -32,7 +32,9 @@
React.createContext();
type OngoingRecoveryAttempt = {
- +waitingCalls: Array<(callServerEndpoint: ?CallServerEndpoint) => mixed>,
+ +waitingCalls: Array<
+ (callSingleKeyserverEndpoint: ?CallSingleKeyserverEndpoint) => mixed,
+ >,
};
export type ServerCallSelectorParams = {
@@ -57,9 +59,9 @@
Map<string, OngoingRecoveryAttempt>,
>(new Map());
- const bindCookieAndUtilsIntoCallServerEndpoint: (
+ const bindCookieAndUtilsIntoCallSingleKeyserverEndpoint: (
params: BindServerCallsParams,
- ) => CallServerEndpoint = React.useCallback(params => {
+ ) => CallSingleKeyserverEndpoint = React.useCallback(params => {
const {
dispatch,
cookie,
@@ -87,13 +89,13 @@
keyserverID,
);
const canResolveInvalidation = canResolveKeyserverSessionInvalidation();
- // This function gets called before callServerEndpoint sends a request,
- // to make sure that we're not in the middle of trying to recover
+ // This function gets called before callSingleKeyserverEndpoint sends a
+ // request, to make sure that we're not in the middle of trying to recover
// an invalidated cookie
const waitIfCookieInvalidated = () => {
if (!canResolveInvalidation) {
// If there is no way to resolve the session invalidation,
- // just let the caller callServerEndpoint instance continue
+ // just let the caller callSingleKeyserverEndpoint instance continue
return Promise.resolve(null);
}
const ongoingRecoveryAttempt =
@@ -103,7 +105,7 @@
return Promise.resolve(null);
}
// Wait to run until we get our new cookie
- return new Promise<?CallServerEndpoint>(r =>
+ return new Promise<?CallSingleKeyserverEndpoint>(r =>
ongoingRecoveryAttempt.waitingCalls.push(r),
);
};
@@ -125,8 +127,8 @@
ongoingRecoveryAttemptsRef.current.delete(keyserverID);
const currentWaitingCalls = ongoingRecoveryAttempt?.waitingCalls ?? [];
- const newCallServerEndpoint = newSessionChange
- ? bindCookieAndUtilsIntoCallServerEndpoint({
+ const newCallSingleKeyserverEndpoint = newSessionChange
+ ? bindCookieAndUtilsIntoCallSingleKeyserverEndpoint({
...params,
cookie: newSessionChange.cookie,
sessionID: newSessionChange.sessionID,
@@ -134,17 +136,17 @@
})
: null;
for (const func of currentWaitingCalls) {
- func(newCallServerEndpoint);
+ func(newCallSingleKeyserverEndpoint);
}
- return newCallServerEndpoint;
+ return newCallSingleKeyserverEndpoint;
};
- // If this function is called, callServerEndpoint got a response
+ // If this function is called, callSingleKeyserverEndpoint 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 (!canResolveInvalidation) {
// If there is no way to resolve the session invalidation,
- // just let the caller callServerEndpoint instance continue
+ // just let the caller callSingleKeyserverEndpoint instance continue
return Promise.resolve(null);
}
if (!loggedIn) {
@@ -155,7 +157,7 @@
const ongoingRecoveryAttempt =
ongoingRecoveryAttemptsRef.current.get(keyserverID);
if (ongoingRecoveryAttempt) {
- return new Promise<?CallServerEndpoint>(r =>
+ return new Promise<?CallSingleKeyserverEndpoint>(r =>
ongoingRecoveryAttempt.waitingCalls.push(r),
);
}
@@ -166,9 +168,9 @@
return (
endpoint: Endpoint,
data: Object,
- options?: ?CallServerEndpointOptions,
+ options?: ?CallSingleKeyserverEndpointOptions,
) =>
- callServerEndpoint(
+ callSingleKeyserverEndpoint(
cookie,
boundSetNewSession,
waitIfCookieInvalidated,
@@ -188,12 +190,15 @@
}, []);
// For each keyserver, we have a set of params that configure our connection
- // to it. These params get bound into callServerEndpoint before it's passed to
- // an ActionFunc. This helper function lets us create a selector for a given
- // keyserverID that will regenerate the bound callServerEndpoint function only
- // if one of the params changes. This lets us skip some React render cycles.
+ // to it. These params get bound into callSingleKeyserverEndpoint before it's
+ // passed to an ActionFunc. This helper function lets us create a selector for
+ // a given keyserverID that will regenerate the bound
+ // callSingleKeyserverEndpoint function only if one of the params changes.
+ // This lets us skip some React render cycles.
const createCallSingleKeyserverEndpointSelector = React.useCallback(
- (keyserverID: string): (ServerCallSelectorParams => CallServerEndpoint) =>
+ (
+ keyserverID: string,
+ ): (ServerCallSelectorParams => CallSingleKeyserverEndpoint) =>
createSelector(
(params: ServerCallSelectorParams) => params.dispatch,
(params: ServerCallSelectorParams) => params.cookie,
@@ -212,7 +217,7 @@
isSocketConnected: boolean,
lastCommunicatedPlatformDetails: ?PlatformDetails,
) =>
- bindCookieAndUtilsIntoCallServerEndpoint({
+ bindCookieAndUtilsIntoCallSingleKeyserverEndpoint({
dispatch,
cookie,
urlPrefix,
@@ -223,7 +228,7 @@
keyserverID,
}),
),
- [bindCookieAndUtilsIntoCallServerEndpoint],
+ [bindCookieAndUtilsIntoCallSingleKeyserverEndpoint],
);
const value = React.useMemo(
diff --git a/lib/keyserver-conn/recovery-utils.js b/lib/keyserver-conn/recovery-utils.js
--- a/lib/keyserver-conn/recovery-utils.js
+++ b/lib/keyserver-conn/recovery-utils.js
@@ -9,8 +9,8 @@
import type { Endpoint } from '../types/endpoints.js';
import type { Dispatch } from '../types/redux-types.js';
import type { ClientSessionChange } from '../types/session-types.js';
-import callServerEndpoint from '../utils/call-server-endpoint.js';
-import type { CallServerEndpointOptions } from '../utils/call-server-endpoint.js';
+import callSingleKeyServerEndpoint from '../utils/call-single-keyserver-endpoint.js';
+import type { CallSingleKeyserverEndpointOptions } from '../utils/call-single-keyserver-endpoint.js';
import { getConfig } from '../utils/config.js';
import { promiseAll } from '../utils/promises.js';
import { wrapActionPromise } from '../utils/redux-promise-utils.js';
@@ -53,11 +53,11 @@
return null;
}
let newSessionChange = null;
- let callServerEndpointCallback = null;
- const boundCallServerEndpoint = async (
+ let callSingleKeyserverEndpointCallback = null;
+ const boundCallSingleKeyserverEndpoint = async (
endpoint: Endpoint,
data: { +[key: string]: mixed },
- options?: ?CallServerEndpointOptions,
+ options?: ?CallSingleKeyserverEndpointOptions,
) => {
const innerBoundSetNewSession = (
sessionChange: ClientSessionChange,
@@ -74,7 +74,7 @@
);
};
try {
- const result = await callServerEndpoint(
+ const result = await callSingleKeyServerEndpoint(
cookie,
innerBoundSetNewSession,
() => new Promise(r => r(null)),
@@ -91,13 +91,13 @@
false,
keyserverID,
);
- if (callServerEndpointCallback) {
- callServerEndpointCallback(!!newSessionChange);
+ if (callSingleKeyserverEndpointCallback) {
+ callSingleKeyserverEndpointCallback(!!newSessionChange);
}
return result;
} catch (e) {
- if (callServerEndpointCallback) {
- callServerEndpointCallback(!!newSessionChange);
+ if (callSingleKeyserverEndpointCallback) {
+ callSingleKeyserverEndpointCallback(!!newSessionChange);
}
throw e;
}
@@ -106,11 +106,11 @@
const boundCallKeyserverEndpoint = (
endpoint: Endpoint,
requests: { +[keyserverID: string]: ?{ +[string]: mixed } },
- options?: ?CallServerEndpointOptions,
+ options?: ?CallSingleKeyserverEndpointOptions,
) => {
if (requests[keyserverID]) {
const promises = {
- [keyserverID]: boundCallServerEndpoint(
+ [keyserverID]: boundCallSingleKeyserverEndpoint(
endpoint,
requests[keyserverID],
options,
@@ -134,10 +134,10 @@
void dispatch(
wrapActionPromise(actionTypes, promise, null, startingPayload),
);
- return new Promise<boolean>(r => (callServerEndpointCallback = r));
+ return new Promise<boolean>(r => (callSingleKeyserverEndpointCallback = r));
};
await resolveKeyserverSessionInvalidationUsingNativeCredentials(
- boundCallServerEndpoint,
+ boundCallSingleKeyserverEndpoint,
boundCallKeyserverEndpoint,
dispatchRecoveryAttempt,
logInActionSource,
diff --git a/lib/shared/crypto-utils.js b/lib/shared/crypto-utils.js
--- a/lib/shared/crypto-utils.js
+++ b/lib/shared/crypto-utils.js
@@ -1,4 +1,4 @@
-//@flow
+// @flow
import * as React from 'react';
@@ -14,15 +14,15 @@
import type { OlmSessionInitializationInfo } from '../types/request-types';
import { useServerCall } from '../utils/action-utils.js';
import type {
- CallServerEndpointOptions,
- CallServerEndpoint,
-} from '../utils/call-server-endpoint.js';
+ CallSingleKeyserverEndpointOptions,
+ CallSingleKeyserverEndpoint,
+} from '../utils/call-single-keyserver-endpoint.js';
import { values, entries } from '../utils/objects.js';
import { useDispatchActionPromise } from '../utils/redux-promise-utils.js';
export type InitialNotifMessageOptions = {
- +callServerEndpoint?: ?CallServerEndpoint,
- +callServerEndpointOptions?: ?CallServerEndpointOptions,
+ +callSingleKeyserverEndpoint?: ?CallSingleKeyserverEndpoint,
+ +callSingleKeyserverEndpointOptions?: ?CallSingleKeyserverEndpointOptions,
};
const initialEncryptedMessageContent = {
@@ -42,13 +42,16 @@
return React.useCallback(
async options => {
- const callServerEndpoint = options?.callServerEndpoint;
- const callServerEndpointOptions = options?.callServerEndpointOptions;
+ const callSingleKeyserverEndpoint = options?.callSingleKeyserverEndpoint;
+ const callSingleKeyserverEndpointOptions =
+ options?.callSingleKeyserverEndpointOptions;
- const initDataAction = callServerEndpoint
- ? getOlmSessionInitializationData(callServerEndpoint)
+ const initDataAction = callSingleKeyserverEndpoint
+ ? getOlmSessionInitializationData(callSingleKeyserverEndpoint)
: callGetOlmSessionInitializationData;
- const olmSessionDataPromise = initDataAction(callServerEndpointOptions);
+ const olmSessionDataPromise = initDataAction(
+ callSingleKeyserverEndpointOptions,
+ );
void dispatchActionPromise(
getOlmSessionInitializationDataActionTypes,
diff --git a/lib/shared/timeouts.js b/lib/shared/timeouts.js
--- a/lib/shared/timeouts.js
+++ b/lib/shared/timeouts.js
@@ -17,10 +17,10 @@
// unlikely, as the connectivity issue is likely on the client side.
export const clientRequestSocketTimeout = 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
+// Time after which CallSingleKeyserverEndpoint will timeout a request. When
+// using sockets this is preempted by the above timeout, so it really only
+// applies for HTTP requests.
+export const callSingleKeyserverEndpointTimeout = 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
@@ -137,7 +137,7 @@
type UpdateRelationshipMessageInfo,
} from './messages/update-relationship.js';
import { type RelativeUserInfo, type UserInfos } from './user-types.js';
-import type { CallServerEndpointResultInfoInterface } from '../utils/call-server-endpoint.js';
+import type { CallSingleKeyserverEndpointResultInfoInterface } from '../utils/call-single-keyserver-endpoint.js';
import { values } from '../utils/objects.js';
import { tID, tNumber, tShape } from '../utils/validation-utils.js';
@@ -583,7 +583,7 @@
export type SendMessageResult = {
+id: string,
+time: number,
- +interface: CallServerEndpointResultInfoInterface,
+ +interface: CallSingleKeyserverEndpointResultInfoInterface,
};
export type SendMessagePayload = {
@@ -591,7 +591,7 @@
+serverID: string,
+threadID: string,
+time: number,
- +interface: CallServerEndpointResultInfoInterface,
+ +interface: CallSingleKeyserverEndpointResultInfoInterface,
};
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
@@ -3,7 +3,7 @@
import invariant from 'invariant';
import * as React from 'react';
-import type { CallServerEndpoint } from './call-server-endpoint.js';
+import type { CallSingleKeyserverEndpoint } from './call-single-keyserver-endpoint.js';
import { useSelector, useDispatch } from './redux-utils.js';
import { ashoatKeyserverID } from './validation-utils.js';
import {
@@ -12,7 +12,9 @@
} from '../keyserver-conn/call-keyserver-endpoint-provider.react.js';
import { serverCallStateSelector } from '../selectors/server-calls.js';
-type ActionFunc<F> = (callServerEndpoint: CallServerEndpoint) => F;
+type ActionFunc<F> = (
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
+) => F;
function useServerCall<F>(
serverCall: ActionFunc<F>,
@@ -38,14 +40,14 @@
'keyserver missing from keyserverStore',
);
- const callServerEndpoint = selector({
+ const callSingleKeyserverEndpoint = selector({
...serverCallState,
urlPrefix,
isSocketConnected,
dispatch,
...paramOverride,
});
- return serverCall(callServerEndpoint);
+ return serverCall(callSingleKeyserverEndpoint);
}, [serverCall, serverCallState, dispatch, paramOverride, selector]);
}
diff --git a/lib/utils/call-server-endpoint.js b/lib/utils/call-single-keyserver-endpoint.js
rename from lib/utils/call-server-endpoint.js
rename to lib/utils/call-single-keyserver-endpoint.js
--- a/lib/utils/call-server-endpoint.js
+++ b/lib/utils/call-single-keyserver-endpoint.js
@@ -12,7 +12,7 @@
import sleep from './sleep.js';
import { uploadBlob, type UploadBlob } from './upload-blob.js';
import { updateLastCommunicatedPlatformDetailsActionType } from '../actions/device-actions.js';
-import { callServerEndpointTimeout } from '../shared/timeouts.js';
+import { callSingleKeyserverEndpointTimeout } from '../shared/timeouts.js';
import type { PlatformDetails } from '../types/device-types.js';
import {
type Endpoint,
@@ -28,12 +28,12 @@
} from '../types/session-types.js';
import type { CurrentUserInfo } from '../types/user-types.js';
-export type CallServerEndpointOptions = Partial<{
+export type CallSingleKeyserverEndpointOptions = Partial<{
// null timeout means no timeout, which is the default for uploadBlob
+timeout: ?number, // in milliseconds
- // getResultInfo will be called right before callServerEndpoint successfully
- // resolves and includes additional information about the request
- +getResultInfo: (resultInfo: CallServerEndpointResultInfo) => mixed,
+ // getResultInfo will be called right before callSingleKeyserverEndpoint
+ // successfully resolves and includes additional information about the request
+ +getResultInfo: (resultInfo: CallSingleKeyserverEndpointResultInfo) => mixed,
+blobUpload: boolean | UploadBlob,
// the rest (onProgress, abortHandler) only work with blobUpload
+onProgress: (percent: number) => void,
@@ -43,27 +43,27 @@
+urlPrefixOverride: string,
}>;
-export type CallServerEndpointResultInfoInterface = 'socket' | 'REST';
-export type CallServerEndpointResultInfo = {
- +interface: CallServerEndpointResultInfoInterface,
+export type CallSingleKeyserverEndpointResultInfoInterface = 'socket' | 'REST';
+export type CallSingleKeyserverEndpointResultInfo = {
+ +interface: CallSingleKeyserverEndpointResultInfoInterface,
};
-export type CallServerEndpointResponse = Partial<{
+export type CallSingleKeyserverEndpointResponse = Partial<{
+cookieChange: ServerSessionChange,
+currentUserInfo: CurrentUserInfo,
+error: string,
+payload: Object,
}>;
-// You'll notice that this is not the type of the callServerEndpoint
+// You'll notice that this is not the type of the callSingleKeyserverEndpoint
// 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 = (
+// This type represents the form of the callSingleKeyserverEndpoint function
+// that gets passed to the action function in lib/actions.
+export type CallSingleKeyserverEndpoint = (
endpoint: Endpoint,
input: Object,
- options?: ?CallServerEndpointOptions,
+ options?: ?CallSingleKeyserverEndpointOptions,
) => Promise<Object>;
type RequestData = {
@@ -73,13 +73,13 @@
platformDetails?: PlatformDetails,
};
-async function callServerEndpoint(
+async function callSingleKeyserverEndpoint(
cookie: ?string,
setNewSession: (sessionChange: ClientSessionChange, error: ?string) => void,
- waitIfCookieInvalidated: () => Promise<?CallServerEndpoint>,
+ waitIfCookieInvalidated: () => Promise<?CallSingleKeyserverEndpoint>,
cookieInvalidationRecovery: (
sessionChange: ClientSessionChange,
- ) => Promise<?CallServerEndpoint>,
+ ) => Promise<?CallSingleKeyserverEndpoint>,
urlPrefix: string,
sessionID: ?string,
isSocketConnected: boolean,
@@ -88,7 +88,7 @@
endpoint: Endpoint,
input: { +[key: string]: mixed },
dispatch: Dispatch,
- options?: ?CallServerEndpointOptions,
+ options?: ?CallSingleKeyserverEndpointOptions,
loggedIn: boolean,
keyserverID: string,
): Promise<Object> {
@@ -153,7 +153,7 @@
mergedData.platformDetails = getConfig().platformDetails;
}
const callEndpointPromise =
- (async (): Promise<CallServerEndpointResponse> => {
+ (async (): Promise<CallSingleKeyserverEndpointResponse> => {
const response = await fetch(url, {
method: 'POST',
// This is necessary to allow cookie headers to get passed down to us
@@ -174,14 +174,16 @@
})();
const timeout =
- options && options.timeout ? options.timeout : callServerEndpointTimeout;
+ options && options.timeout
+ ? options.timeout
+ : callSingleKeyserverEndpointTimeout;
if (!timeout) {
json = await callEndpointPromise;
} else {
const rejectPromise = (async () => {
await sleep(timeout);
throw new FetchTimeout(
- `callServerEndpoint timed out call to ${endpoint}`,
+ `callSingleKeyserverEndpoint timed out call to ${endpoint}`,
endpoint,
);
})();
@@ -226,4 +228,4 @@
return json;
}
-export default callServerEndpoint;
+export default callSingleKeyserverEndpoint;
diff --git a/lib/utils/config.js b/lib/utils/config.js
--- a/lib/utils/config.js
+++ b/lib/utils/config.js
@@ -2,7 +2,7 @@
import invariant from 'invariant';
-import type { CallServerEndpoint } from './call-server-endpoint.js';
+import type { CallSingleKeyserverEndpoint } from './call-single-keyserver-endpoint.js';
import type { CallKeyserverEndpoint } from './keyserver-call.js';
import type { DispatchRecoveryAttempt } from '../keyserver-conn/keyserver-conn-types.js';
import type { LogInActionSource } from '../types/account-types.js';
@@ -10,7 +10,7 @@
export type Config = {
+resolveKeyserverSessionInvalidationUsingNativeCredentials: ?(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
callKeyserverEndpoint: CallKeyserverEndpoint,
dispatchRecoveryAttempt: DispatchRecoveryAttempt,
logInActionSource: LogInActionSource,
diff --git a/lib/utils/keyserver-call.js b/lib/utils/keyserver-call.js
--- a/lib/utils/keyserver-call.js
+++ b/lib/utils/keyserver-call.js
@@ -3,7 +3,7 @@
import _memoize from 'lodash/memoize.js';
import * as React from 'react';
-import type { CallServerEndpointOptions } from './call-server-endpoint.js';
+import type { CallSingleKeyserverEndpointOptions } from './call-single-keyserver-endpoint.js';
import { promiseAll } from './promises.js';
import { useSelector, useDispatch } from './redux-utils.js';
import { useCallKeyserverEndpointContext } from '../keyserver-conn/call-keyserver-endpoint-provider.react.js';
@@ -18,11 +18,11 @@
export type CallKeyserverEndpoint = (
endpoint: Endpoint,
requests: { +[keyserverID: string]: ?{ +[string]: mixed } },
- options?: ?CallServerEndpointOptions,
+ options?: ?CallSingleKeyserverEndpointOptions,
) => Promise<{ +[keyserverID: string]: any }>;
type ActionFunc<Args: mixed, Return> = (
- callServerEndpoint: CallKeyserverEndpoint,
+ callSingleKeyserverEndpoint: CallKeyserverEndpoint,
// The second argument is only used in actions that call all keyservers,
// and the request to all keyservers are exactly the same.
// An example of such action is fetchEntries.
@@ -71,7 +71,7 @@
const callKeyserverEndpoint = (
endpoint: Endpoint,
requests: { +[keyserverID: string]: ?{ +[string]: mixed } },
- options?: ?CallServerEndpointOptions,
+ options?: ?CallSingleKeyserverEndpointOptions,
) => {
const makeCallToSingleKeyserver = (keyserverID: string) => {
const {
@@ -82,19 +82,18 @@
lastCommunicatedPlatformDetails,
} = keyserverCallInfos[keyserverID];
- const boundCallServerEndpoint = getCallSingleKeyserverEndpointSelector(
- keyserverID,
- )({
- dispatch,
- currentUserInfo,
- cookie,
- urlPrefix,
- sessionID,
- isSocketConnected,
- lastCommunicatedPlatformDetails,
- });
+ const boundCallSingleKeyserverEndpoint =
+ getCallSingleKeyserverEndpointSelector(keyserverID)({
+ dispatch,
+ currentUserInfo,
+ cookie,
+ urlPrefix,
+ sessionID,
+ isSocketConnected,
+ lastCommunicatedPlatformDetails,
+ });
- return boundCallServerEndpoint(
+ return boundCallSingleKeyserverEndpoint(
endpoint,
requests[keyserverID],
options,
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
@@ -4,9 +4,9 @@
import _throttle from 'lodash/throttle.js';
import type {
- CallServerEndpointOptions,
- CallServerEndpointResponse,
-} from './call-server-endpoint.js';
+ CallSingleKeyserverEndpointOptions,
+ CallSingleKeyserverEndpointResponse,
+} from './call-single-keyserver-endpoint.js';
import { getConfig } from './config.js';
function uploadBlob(
@@ -14,8 +14,8 @@
cookie: ?string,
sessionID: ?string,
input: { +[key: string]: mixed },
- options?: ?CallServerEndpointOptions,
-): Promise<CallServerEndpointResponse> {
+ options?: ?CallSingleKeyserverEndpointOptions,
+): Promise<CallSingleKeyserverEndpointResponse> {
const formData = new FormData();
formData.append('cookie', cookie ? cookie : '');
@@ -66,7 +66,7 @@
}
let failed = false;
- const responsePromise = new Promise<CallServerEndpointResponse>(
+ const responsePromise = new Promise<CallSingleKeyserverEndpointResponse>(
(resolve, reject) => {
xhr.onload = () => {
if (failed) {
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
@@ -4,7 +4,7 @@
import type { DispatchRecoveryAttempt } from 'lib/keyserver-conn/keyserver-conn-types.js';
import type { InitialNotifMessageOptions } from 'lib/shared/crypto-utils.js';
import type { LogInActionSource } from 'lib/types/account-types.js';
-import type { CallServerEndpoint } from 'lib/utils/call-server-endpoint.js';
+import type { CallSingleKeyserverEndpoint } from 'lib/utils/call-single-keyserver-endpoint.js';
import type { CallKeyserverEndpoint } from 'lib/utils/keyserver-call.js';
import { fetchNativeKeychainCredentials } from './native-credentials.js';
@@ -12,7 +12,7 @@
import { nativeLogInExtraInfoSelector } from '../selectors/account-selectors.js';
async function resolveKeyserverSessionInvalidationUsingNativeCredentials(
- callServerEndpoint: CallServerEndpoint,
+ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint,
callKeyserverEndpoint: CallKeyserverEndpoint,
dispatchRecoveryAttempt: DispatchRecoveryAttempt,
logInActionSource: LogInActionSource,
@@ -29,7 +29,9 @@
if (getInitialNotificationsEncryptedMessage) {
const initialNotificationsEncryptedMessage =
- await getInitialNotificationsEncryptedMessage({ callServerEndpoint });
+ await getInitialNotificationsEncryptedMessage({
+ callSingleKeyserverEndpoint,
+ });
extraInfo = { ...extraInfo, initialNotificationsEncryptedMessage };
}
diff --git a/native/account/siwe-hooks.js b/native/account/siwe-hooks.js
--- a/native/account/siwe-hooks.js
+++ b/native/account/siwe-hooks.js
@@ -9,7 +9,7 @@
LogInExtraInfo,
} from 'lib/types/account-types.js';
import { useServerCall } from 'lib/utils/action-utils.js';
-import type { CallServerEndpointOptions } from 'lib/utils/call-server-endpoint.js';
+import type { CallSingleKeyserverEndpointOptions } from 'lib/utils/call-single-keyserver-endpoint.js';
import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js';
import { useSelector } from '../redux/redux-utils.js';
@@ -24,7 +24,7 @@
};
function useSIWEServerCall(): (
SIWEServerCallParams,
- ?CallServerEndpointOptions,
+ ?CallSingleKeyserverEndpointOptions,
) => Promise<void> {
const siweAuthCall = useServerCall(siweAuth);
@@ -33,7 +33,7 @@
message: string,
signature: string,
extraInfo: $ReadOnly<{ ...LogInExtraInfo, +doNotRegister?: boolean }>,
- callServerEndpointOptions: ?CallServerEndpointOptions,
+ callSingleKeyserverEndpointOptions: ?CallSingleKeyserverEndpointOptions,
) =>
siweAuthCall(
{
@@ -41,7 +41,7 @@
signature,
...extraInfo,
},
- callServerEndpointOptions,
+ callSingleKeyserverEndpointOptions,
),
[siweAuthCall],
);
@@ -55,12 +55,12 @@
return React.useCallback(
async (
{ message, signature, doNotRegister },
- callServerEndpointOptions,
+ callSingleKeyserverEndpointOptions,
) => {
const extraInfo = await logInExtraInfo();
const initialNotificationsEncryptedMessage =
await getInitialNotificationsEncryptedMessage({
- callServerEndpointOptions,
+ callSingleKeyserverEndpointOptions,
});
const siwePromise = callSIWE(
@@ -71,7 +71,7 @@
initialNotificationsEncryptedMessage,
doNotRegister,
},
- callServerEndpointOptions,
+ callSingleKeyserverEndpointOptions,
);
void dispatchActionPromise(
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
@@ -85,9 +85,9 @@
} from 'lib/types/thread-types.js';
import { useServerCall } from 'lib/utils/action-utils.js';
import type {
- CallServerEndpointOptions,
- CallServerEndpointResponse,
-} from 'lib/utils/call-server-endpoint.js';
+ CallSingleKeyserverEndpointOptions,
+ CallSingleKeyserverEndpointResponse,
+} from 'lib/utils/call-single-keyserver-endpoint.js';
import { getConfig } from 'lib/utils/config.js';
import { getMessageForException, cloneError } from 'lib/utils/errors.js';
import { values } from 'lib/utils/objects.js';
@@ -1180,8 +1180,8 @@
cookie: ?string,
sessionID: ?string,
input: { +[key: string]: mixed },
- options?: ?CallServerEndpointOptions,
- ): Promise<CallServerEndpointResponse> => {
+ options?: ?CallSingleKeyserverEndpointOptions,
+ ): Promise<CallSingleKeyserverEndpointResponse> => {
invariant(
cookie &&
input.multimedia &&
diff --git a/web/chat/reaction-message-utils.js b/web/chat/reaction-message-utils.js
--- a/web/chat/reaction-message-utils.js
+++ b/web/chat/reaction-message-utils.js
@@ -11,7 +11,7 @@
import type { ReactionInfo } from 'lib/selectors/chat-selectors';
import { messageTypes } from 'lib/types/message-types-enum.js';
import type { RawReactionMessageInfo } from 'lib/types/messages/reaction.js';
-import type { CallServerEndpointResultInfoInterface } from 'lib/utils/call-server-endpoint.js';
+import type { CallSingleKeyserverEndpointResultInfoInterface } from 'lib/utils/call-single-keyserver-endpoint.js';
import { cloneError } from 'lib/utils/errors.js';
import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js';
@@ -62,7 +62,7 @@
});
const serverID: string = result.id;
const time: number = result.time;
- const interfaceInfo: CallServerEndpointResultInfoInterface =
+ const interfaceInfo: CallSingleKeyserverEndpointResultInfoInterface =
result.interface;
return {
localID,
diff --git a/web/redux/action-types.js b/web/redux/action-types.js
--- a/web/redux/action-types.js
+++ b/web/redux/action-types.js
@@ -20,7 +20,9 @@
export const updateWindowActiveActionType = 'UPDATE_WINDOW_ACTIVE';
export const setInitialReduxState = 'SET_INITIAL_REDUX_STATE';
-const getInitialReduxStateCallServerEndpointOptions = { timeout: 300000 };
+const getInitialReduxStateCallSingleKeyserverEndpointOptions = {
+ timeout: 300000,
+};
type GetInitialReduxStateInput = {
+urlInfo: URLInfo,
@@ -76,7 +78,7 @@
await callKeyserverEndpoint(
'get_initial_redux_state',
requests,
- getInitialReduxStateCallServerEndpointOptions,
+ getInitialReduxStateCallSingleKeyserverEndpointOptions,
);
const {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 28, 9:52 PM (19 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2594997
Default Alt Text
D10688.diff (45 KB)
Attached To
Mode
D10688: [lib][web][native] Rename callServerEndpoint to callSingleKeyserverEndpoint
Attached
Detach File
Event Timeline
Log In to Comment