Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@internxt/sdk",
"author": "Internxt <[email protected]>",
"version": "1.9.18",
"version": "1.9.19",
"description": "An sdk for interacting with Internxt's services",
"repository": {
"type": "git",
Expand Down
108 changes: 99 additions & 9 deletions src/auth/index.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import { ApiSecurity, ApiUrl, AppDetails } from '../shared';
import { basicHeaders, headersWithToken } from '../shared/headers';
import { HttpClient } from '../shared/http/client';
import { TeamsSettings } from '../shared/types/teams';
import { UserSettings, UUID } from '../shared/types/userSettings';
import {
Token,
CryptoProvider,
Keys,
LoginDetails,
PrivateKeys,
RegisterDetails,
SecurityDetails,
TwoFactorAuthQR,
RegisterPreCreatedUser,
RegisterPreCreatedUserResponse,
PrivateKeys,
SecurityDetails,
Token,
TwoFactorAuthQR,
} from './types';
import { UserSettings, UUID } from '../shared/types/userSettings';
import { TeamsSettings } from '../shared/types/teams';
import { basicHeaders, headersWithToken } from '../shared/headers';
import { ApiSecurity, ApiUrl, AppDetails } from '../shared';
import { HttpClient } from '../shared/http/client';

export * from './types';

Expand Down Expand Up @@ -77,6 +77,29 @@ export class Auth {
);
}

/**
* Tries to register a new user without sending keys
* @param registerDetails
*/
public registerWithoutKeys(registerDetails: Omit<RegisterDetails, 'keys'>): Promise<{
token: Token;
user: Omit<UserSettings, 'bucket'> & { referralCode: string };
uuid: UUID;
}> {
const body = {
name: registerDetails.name,
captcha: registerDetails.captcha,
lastname: registerDetails.lastname,
email: registerDetails.email,
password: registerDetails.password,
mnemonic: registerDetails.mnemonic,
salt: registerDetails.salt,
referral: registerDetails.referral,
referrer: registerDetails.referrer,
};
return this.client.post('/users', body, this.basicHeaders());
}

/**
* Registers a precreated user
* @param registerDetails
Expand Down Expand Up @@ -117,6 +140,32 @@ export class Auth {
);
}

/**
* Registers a precreated user without sending keys
* @param registerDetails
* @returns {Promise<RegisterPreCreatedUserResponse>} Returns sign in token, user data and uuid.
*/
public registerPreCreatedUserWithoutKeys(
registerDetails: RegisterPreCreatedUser,
): Promise<RegisterPreCreatedUserResponse> {
return this.client.post(
'users/pre-created-users/register',
{
name: registerDetails.name,
captcha: registerDetails.captcha,
lastname: registerDetails.lastname,
email: registerDetails.email,
password: registerDetails.password,
mnemonic: registerDetails.mnemonic,
salt: registerDetails.salt,
referral: registerDetails.referral,
referrer: registerDetails.referrer,
invitationId: registerDetails.invitationId,
},
this.basicHeaders(),
);
}

/**
* Requests account unblock email
*
Expand Down Expand Up @@ -201,6 +250,47 @@ export class Auth {
});
}

/**
* Tries to log in a user given its login details without sending keys
* @param details
* @param cryptoProvider
*/
public async loginWithoutKeys(
details: LoginDetails,
cryptoProvider: CryptoProvider,
): Promise<{
token: Token;
newToken: Token;
user: UserSettings;
userTeam: TeamsSettings | null;
}> {
const securityDetails = await this.securityDetails(details.email);
const encryptedSalt = securityDetails.encryptedSalt;
const encryptedPasswordHash = cryptoProvider.encryptPasswordHash(details.password, encryptedSalt);

return this.client
.post<{
token: Token;
newToken: Token;
user: UserSettings;
userTeam: TeamsSettings | null;
}>(
'/auth/login/access',
{
email: details.email,
password: encryptedPasswordHash,
tfa: details.tfaCode,
},
this.basicHeaders(),
)
.then((data) => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
data.user.revocationKey = data.user.revocateKey; // TODO : remove when all projects use SDK
return data;
});
}

/**
* Updates the asymmetric keys
* @param keys
Expand Down
Loading