diff --git a/libs/common/src/auth/enums/grant-type.enum.ts b/libs/common/src/auth/enums/grant-type.enum.ts new file mode 100644 index 00000000000..9e18b616c73 --- /dev/null +++ b/libs/common/src/auth/enums/grant-type.enum.ts @@ -0,0 +1,6 @@ +export const GrantTypes = { + SendAccess: "send_access", + // TODO: migrate other grant types to this object +}; + +export type GrantType = (typeof GrantTypes)[keyof typeof GrantTypes]; diff --git a/libs/common/src/auth/enums/scopes.enum.ts b/libs/common/src/auth/enums/scopes.enum.ts new file mode 100644 index 00000000000..037f8170438 --- /dev/null +++ b/libs/common/src/auth/enums/scopes.enum.ts @@ -0,0 +1,6 @@ +export const Scopes = { + Send: "api.send", + // TODO: migrate other scopes to this object +}; + +export type Scope = (typeof Scopes)[keyof typeof Scopes]; diff --git a/libs/common/src/auth/models/request/identity-token/send-access-token.request.ts b/libs/common/src/auth/models/request/identity-token/send-access-token.request.ts new file mode 100644 index 00000000000..92a18564d74 --- /dev/null +++ b/libs/common/src/auth/models/request/identity-token/send-access-token.request.ts @@ -0,0 +1,43 @@ +import { ClientType } from "../../../../enums"; +import { GrantTypes } from "../../../enums/grant-type.enum"; +import { Scopes } from "../../../enums/scopes.enum"; + +import { DeviceRequest } from "./device.request"; +import { TokenRequest } from "./token.request"; + +export class SendAccessTokenRequest extends TokenRequest { + constructor( + public sendId: string, + public device: DeviceRequest, + + public password?: string, + + public email?: string, + public oneTimePassword?: string, + ) { + super(undefined, device); + } + + toIdentityToken(clientId: ClientType) { + // Super call handles setting up client id and device properties + const obj = super.toIdentityToken(clientId); + + obj.grant_type = GrantTypes.SendAccess; + + // override base scopes + obj.scope = [Scopes.Send].join(" "); + + // Add required and optional properties + obj.sendId = this.sendId; + + if (this.password) { + obj.password = this.password; + } + if (this.email && this.oneTimePassword) { + obj.email = this.email; + obj.oneTimePassword = this.oneTimePassword; + } + + return obj; + } +} diff --git a/libs/common/src/auth/send-access/services/send-token-api.service.ts b/libs/common/src/auth/send-access/services/send-token-api.service.ts index e69de29bb2d..73e47997be5 100644 --- a/libs/common/src/auth/send-access/services/send-token-api.service.ts +++ b/libs/common/src/auth/send-access/services/send-token-api.service.ts @@ -0,0 +1,3 @@ +export abstract class SendTokenApiService { + // requestSendAccessToken: () => Promise<>; +} diff --git a/libs/common/src/enums/client-type.enum.ts b/libs/common/src/enums/client-type.enum.ts index 25e9d6f3371..be9dddfc953 100644 --- a/libs/common/src/enums/client-type.enum.ts +++ b/libs/common/src/enums/client-type.enum.ts @@ -7,4 +7,5 @@ export enum ClientType { // Mobile = "mobile", Cli = "cli", // DirectoryConnector = "connector", + Send = "send", }