mirror of
https://github.com/bitwarden/browser
synced 2026-02-06 19:53:59 +00:00
PM-20532 - SendTokenService - per Tools request, use observable interface.
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import { Observable } from "rxjs";
|
||||
|
||||
import { SendHashedPassword } from "../../../key-management/sends/send-password.service";
|
||||
import { SendAccessToken } from "../models/send-access-token";
|
||||
import {
|
||||
@@ -29,7 +31,6 @@ export type SendAccessCredentials =
|
||||
| SendEmailOtpCredentials;
|
||||
|
||||
export abstract class SendTokenService {
|
||||
// TODO: consider converting to observable.
|
||||
/**
|
||||
* Attempts to retrieve a SendAccessToken for the given sendId.
|
||||
* If the access token is found in session storage and is not expired, then it returns the token.
|
||||
@@ -39,11 +40,11 @@ export abstract class SendTokenService {
|
||||
* If an access token cannot be granted b/c the send requires credentials, then it returns a SendTokenRetrievalError indicating which credentials are required.
|
||||
* Any submissions of credentials will be handled by the getSendAccessTokenWithCredentials method.
|
||||
* @param sendId The ID of the send to retrieve the access token for.
|
||||
* @returns A promise that resolves to a SendAccessToken if found and valid, or a SendTokenRetrievalError if not.
|
||||
* @returns An observable that emits a SendAccessToken if successful, or a TryGetSendAccessTokenError if not.
|
||||
*/
|
||||
abstract tryGetSendAccessToken: (
|
||||
abstract tryGetSendAccessToken$: (
|
||||
sendId: string,
|
||||
) => Promise<SendAccessToken | TryGetSendAccessTokenError>;
|
||||
) => Observable<SendAccessToken | TryGetSendAccessTokenError>;
|
||||
|
||||
/**
|
||||
* Retrieves a SendAccessToken for the given sendId using the provided credentials.
|
||||
@@ -51,12 +52,12 @@ export abstract class SendTokenService {
|
||||
* If the access token cannot be granted due to invalid credentials, it returns a GetSendAcccessTokenError.
|
||||
* @param sendId The ID of the send to retrieve the access token for.
|
||||
* @param sendAccessCredentials The credentials to use for accessing the send.
|
||||
* @returns A promise that resolves to a SendAccessToken if found and valid, or a GetSendAcccessTokenError if not.
|
||||
* @returns An observable that emits a SendAccessToken if successful, or a GetSendAcccessTokenError if not.
|
||||
*/
|
||||
abstract getSendAccessToken: (
|
||||
abstract getSendAccessToken$: (
|
||||
sendId: string,
|
||||
sendAccessCredentials: SendAccessCredentials,
|
||||
) => Promise<SendAccessToken | GetSendAcccessTokenError>;
|
||||
) => Observable<SendAccessToken | GetSendAcccessTokenError>;
|
||||
|
||||
/**
|
||||
* Hashes a password for send access.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { firstValueFrom } from "rxjs";
|
||||
import { defer, firstValueFrom, from, Observable } from "rxjs";
|
||||
import { Jsonify } from "type-fest";
|
||||
|
||||
import {
|
||||
@@ -76,7 +76,12 @@ export class SendTokenService implements SendTokenServiceAbstraction {
|
||||
this.sendAccessTokenDictGlobalState = this.globalStateProvider.get(SEND_ACCESS_TOKEN_DICT);
|
||||
}
|
||||
|
||||
async tryGetSendAccessToken(
|
||||
tryGetSendAccessToken$(sendId: string): Observable<SendAccessToken | TryGetSendAccessTokenError> {
|
||||
// Defer the execution to ensure that a cold observable is returned.
|
||||
return defer(() => from(this._tryGetSendAccessToken(sendId)));
|
||||
}
|
||||
|
||||
private async _tryGetSendAccessToken(
|
||||
sendId: string,
|
||||
): Promise<SendAccessToken | TryGetSendAccessTokenError> {
|
||||
// Validate the sendId is a non-empty string.
|
||||
@@ -116,7 +121,15 @@ export class SendTokenService implements SendTokenServiceAbstraction {
|
||||
throw new Error(`Unexpected and unhandled API error retrieving send access token: ${result}`);
|
||||
}
|
||||
|
||||
async getSendAccessToken(
|
||||
getSendAccessToken$(
|
||||
sendId: string,
|
||||
sendCredentials: SendAccessCredentials,
|
||||
): Observable<SendAccessToken | GetSendAcccessTokenError> {
|
||||
// Defer the execution to ensure that a cold observable is returned.
|
||||
return defer(() => from(this._getSendAccessToken(sendId, sendCredentials)));
|
||||
}
|
||||
|
||||
private async _getSendAccessToken(
|
||||
sendId: string,
|
||||
sendCredentials: SendAccessCredentials,
|
||||
): Promise<SendAccessToken | GetSendAcccessTokenError> {
|
||||
|
||||
Reference in New Issue
Block a user