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 @@ -30,6 +30,7 @@ UpdateUserAvatarResponse, } from '../types/avatar-types.js'; import type { RawEntryInfo, CalendarQuery } from '../types/entry-types.js'; +import type { IdentityRegisterResult } from '../types/identity-service-types.js'; import type { RawMessageInfo, MessageTruncationStatuses, @@ -372,6 +373,31 @@ ); } +const identityRegisterActionTypes = Object.freeze({ + started: 'IDENTITY_REGISTER_STARTED', + success: 'IDENTITY_REGISTER_SUCCESS', + failed: 'IDENTITY_REGISTER_FAILED', +}); +function useIdentityRegister(): ( + username: string, + password: string, +) => Promise { + const client = React.useContext(IdentityClientContext); + const identityClient = client?.identityClient; + return React.useCallback( + (username, password) => { + if (!identityClient) { + throw new Error('Identity service client is not initialized'); + } + if (!identityClient.registerUser) { + throw new Error('Register user method unimplemented'); + } + return identityClient.registerUser(username, password); + }, + [identityClient], + ); +} + function mergeUserInfos( ...userInfoArrays: Array<$ReadOnlyArray> ): UserInfo[] { @@ -723,4 +749,6 @@ useDeleteIdentityAccount, keyserverAuthActionTypes, useKeyserverAuth, + identityRegisterActionTypes, + useIdentityRegister, }; diff --git a/lib/types/identity-service-types.js b/lib/types/identity-service-types.js --- a/lib/types/identity-service-types.js +++ b/lib/types/identity-service-types.js @@ -22,6 +22,10 @@ export interface IdentityServiceClient { +deleteUser: () => Promise; +getKeyserverKeys: string => Promise; + +registerUser?: ( + username: string, + password: string, + ) => Promise; } export type IdentityServiceAuthLayer = { @@ -43,3 +47,9 @@ +username?: ?string, +walletAddress?: ?string, }; + +export type IdentityRegisterResult = { + +userID: string, + +accessToken: string, + +username: string, +};