mirror of
https://github.com/bitwarden/browser
synced 2026-02-21 20:04:02 +00:00
* PM-22661 - Start bringing in code from original PR * PM-22661 - SendTokenService - implement and test hash send password * PM-22661 - Starting to pull in SDK state to SendTokenService * PM-22661 - WIP on default send token service * PM-22661 - Build out TS helpers for TryGetSendAccessTokenError * PM-22661 - WIP * PM-22661 - Decent progress on getting _tryGetSendAccessToken wired up * PM-22661 - Finish service implementation (TODO: test) * PM-22661 - DefaultSendTokenService - clear expired tokens * PM-22661 - SendTokenService - tests for tryGetSendAccessToken$ * PM-22661 - DefaultSendTokenService - more tests. * PM-22661 - Refactor to create domain facing type for send access creds so we can internally map to SDK models instead of exposing them. * PM-22661 - DefaultSendTokenService tests - finish testing error scenarios * PM-22661 - SendAccessToken - add threshold to expired check to prevent tokens from expiring in flight * PM-22661 - clean up docs and add invalidateSendAccessToken * PM-22661 - Add SendAccessToken tests * PM-22661 - Build out barrel files and provide send token service in jslib-services. * PM-22661 - Improve credential validation and test the scenarios * PM-22661 - Add handling for otp_generation_failed * PM-22661 - npm i sdk version 0.2.0-main.298 which has send access client stuff * PM-22661 - Bump to latest sdk changes for send access for testing. * PM-22661 - fix comment to be accurate * PM-22661 - DefaultSendTokenService - hashSendPassword - to fix compile time error with passing a Uint8Array to Utils.fromBufferToB64, add new overloads to Utils.fromBufferToB64 to handle ArrayBuffer and ArrayBufferView (to allow for Uint8Arrays). Then, test new scenarios to ensure feature parity with old fromBufferToB64 method. * PM-22661 - Utils.fromBufferToB64 - remove overloads so ordering doesn't break test spies. * PM-22661 - utils.fromBufferToB64 - re-add overloads to see effects on tests * PM-22661 - revert utils changes as they will be done in a separate PR. * PM-22661 - SendTokenService tests - test invalidateSendAccessToken * PM-22661 - DefaultSendTokenService - add some storage layer tests * PM-22661 - Per PR feedback fix comment * PM-22661 - Per PR feedback, optimize writes to state for send access tokens with shouldUpdate. * PM-22661 - Per PR feedback, update clear to be immutable vs delete (mutation) based. * PM-22661 - Per PR feedback, re-add should update for clear method. * PM-22661 - Update libs/common/src/auth/send-access/services/default-send-token.service.ts Co-authored-by: rr-bw <102181210+rr-bw@users.noreply.github.com> * PM-22661 - Update libs/common/src/auth/send-access/services/default-send-token.service.ts Co-authored-by: rr-bw <102181210+rr-bw@users.noreply.github.com> * PM-22661 - Update libs/common/src/auth/send-access/services/default-send-token.service.ts Co-authored-by: rr-bw <102181210+rr-bw@users.noreply.github.com> --------- Co-authored-by: rr-bw <102181210+rr-bw@users.noreply.github.com>
47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { Jsonify } from "type-fest";
|
|
|
|
import { SendAccessTokenResponse } from "@bitwarden/sdk-internal";
|
|
|
|
export class SendAccessToken {
|
|
constructor(
|
|
/**
|
|
* The access token string
|
|
*/
|
|
readonly token: string,
|
|
/**
|
|
* The time (in milliseconds since the epoch) when the token expires
|
|
*/
|
|
readonly expiresAt: number,
|
|
) {}
|
|
|
|
/** Returns whether the send access token is expired or not
|
|
* Has a 5 second threshold to avoid race conditions with the token
|
|
* expiring in flight
|
|
*/
|
|
isExpired(threshold: number = 5_000): boolean {
|
|
return Date.now() >= this.expiresAt - threshold;
|
|
}
|
|
|
|
/** Returns how many full seconds remain until expiry. Returns 0 if expired. */
|
|
timeUntilExpirySeconds(): number {
|
|
return Math.max(0, Math.floor((this.expiresAt - Date.now()) / 1_000));
|
|
}
|
|
|
|
static fromJson(parsedJson: Jsonify<SendAccessToken>): SendAccessToken {
|
|
return new SendAccessToken(parsedJson.token, parsedJson.expiresAt);
|
|
}
|
|
|
|
/**
|
|
* Creates a SendAccessToken from a SendAccessTokenResponse.
|
|
* @param sendAccessTokenResponse The SDK response object containing the token and expiry information.
|
|
* @returns A new instance of SendAccessToken.
|
|
* note: we need to convert from the SDK response type to our internal type so that we can
|
|
* be sure it will serialize/deserialize correctly in state provider.
|
|
*/
|
|
static fromSendAccessTokenResponse(
|
|
sendAccessTokenResponse: SendAccessTokenResponse,
|
|
): SendAccessToken {
|
|
return new SendAccessToken(sendAccessTokenResponse.token, sendAccessTokenResponse.expiresAt);
|
|
}
|
|
}
|