Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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.16",
"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