Skip to content

Commit

Permalink
chore: clean
Browse files Browse the repository at this point in the history
  • Loading branch information
jkoenig134 committed Jan 30, 2025
1 parent 756f524 commit dcef04b
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 28 deletions.
8 changes: 4 additions & 4 deletions src/ConnectorTUI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ export class ConnectorTUI extends ConnectorTUIBaseWithMixins {

// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, no-constant-condition
while (true) {
const identityDeletionProcess = this.isDebugMode() ? await this.getIdentityDeletionProcesses() : undefined
const activeIdentityDeletionProcess = this.isDebugMode() ? await this.identityDeletionProcessEndpoint.getActiveIdentityDeletionProcess() : undefined

if (identityDeletionProcess?.status === 200) {
const gracePeriodEndsAtDateTime = DateTime.fromISO(identityDeletionProcess.data.result.gracePeriodEndsAt)
if (activeIdentityDeletionProcess?.isSuccess && activeIdentityDeletionProcess.result.status === "Approved") {
const gracePeriodEndsAtDateTime = DateTime.fromISO(activeIdentityDeletionProcess.result.gracePeriodEndsAt!)

if (gracePeriodEndsAtDateTime.diffNow().milliseconds < 0) {
console.log(chalk.red("Grace period has ended. Identity is deleted."))
Expand All @@ -38,7 +38,7 @@ export class ConnectorTUI extends ConnectorTUIBaseWithMixins {
type: "select",
name: "action",
message: "What do you want to do?",
choices: identityDeletionProcess?.status === 200 ? this.choicesInDeletion : this.choices,
choices: activeIdentityDeletionProcess?.isSuccess ? this.choicesInDeletion : this.choices,
})

if (!result.action) break
Expand Down
10 changes: 3 additions & 7 deletions src/ConnectorTUIBase.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ConnectorClient, ConnectorFile, ConnectorRelationship, ConnectorRelationshipStatus } from "@nmshd/connector-sdk"
import { ConnectorSupportInformation } from "@nmshd/connector-sdk/dist/types/monitoring"
import { DisplayNameJSON, GivenNameJSON, SurnameJSON } from "@nmshd/content"
import { AxiosInstance } from "axios"
import prompts from "prompts"
import { IdentityDeletionProcessEndpoint } from "./IdentityDeletionProcessEndpoint"

export type ConnectorTUIBaseConstructor = new (...args: any[]) => ConnectorTUIBase

Expand All @@ -13,14 +13,14 @@ export interface ConnectorTUIChoice extends prompts.Choice {
export class ConnectorTUIBase {
protected choices: ConnectorTUIChoice[] = []
protected choicesInDeletion: ConnectorTUIChoice[] = []
protected plainHttpClient: AxiosInstance
protected identityDeletionProcessEndpoint: IdentityDeletionProcessEndpoint

public constructor(
protected connectorClient: ConnectorClient,
protected connectorAddress: string,
protected support: ConnectorSupportInformation
) {
this.plainHttpClient = this.connectorClient.account["httpClient"]
this.identityDeletionProcessEndpoint = new IdentityDeletionProcessEndpoint(this.connectorClient.account["httpClient"])
}

protected async selectRelationship(prompt: string, ...status: ConnectorRelationshipStatus[]): Promise<ConnectorRelationship | undefined> {
Expand Down Expand Up @@ -120,10 +120,6 @@ export class ConnectorTUIBase {
return { title: file.title, value: file }
}

protected async getIdentityDeletionProcesses() {
return await this.plainHttpClient.get("/api/v2/IdentityDeletionProcess")
}

protected isDebugMode() {
return this.support.configuration.debug as boolean | undefined
}
Expand Down
37 changes: 37 additions & 0 deletions src/IdentityDeletionProcessEndpoint.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { ConnectorHttpResponse } from "@nmshd/connector-sdk"
import { Endpoint } from "@nmshd/connector-sdk/dist/endpoints/Endpoint"

export enum IdentityDeletionProcessStatus {
WaitingForApproval = "WaitingForApproval",
Rejected = "Rejected",
Approved = "Approved",
Cancelled = "Cancelled",
}
export interface IdentityDeletionProcess {
id: string
status: IdentityDeletionProcessStatus
createdAt?: string
createdByDevice?: string
approvalPeriodEndsAt?: string
rejectedAt?: string
rejectedByDevice?: string
approvedAt?: string
approvedByDevice?: string
gracePeriodEndsAt?: string
cancelledAt?: string
cancelledByDevice?: string
}

export class IdentityDeletionProcessEndpoint extends Endpoint {
public async initiateIdentityDeletionProcess(lengthOfGracePeriodInDays?: number): Promise<ConnectorHttpResponse<IdentityDeletionProcess>> {
return await this.post("/api/v2/IdentityDeletionProcess", undefined, 200, { lengthOfGracePeriodInDays })
}

public async getActiveIdentityDeletionProcess(): Promise<ConnectorHttpResponse<IdentityDeletionProcess>> {
return await this.get("/api/v2/IdentityDeletionProcess")
}

public async cancelIdentityDeletionProcess(): Promise<ConnectorHttpResponse<IdentityDeletionProcess>> {
return await this.delete("/api/v2/IdentityDeletionProcess", undefined, 200)
}
}
35 changes: 18 additions & 17 deletions src/mixins/AddIdentityDeletionProcess.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,29 @@ import chalk from "chalk"
import { DateTime } from "luxon"
import prompts from "prompts"
import { ConnectorTUIBaseConstructor } from "../ConnectorTUIBase.js"
import { IdentityDeletionProcess } from "../IdentityDeletionProcessEndpoint.js"

export function AddIdentityDeletionProcess<TBase extends ConnectorTUIBaseConstructor>(Base: TBase) {
return class IdentityDeletionProcess extends Base {
return class IdentityDeletionProcessHandler extends Base {
public constructor(...args: any[]) {
super(...args)
if (this.isDebugMode()) {
const identityDeletionProcessChoices = { title: "IdentityDeletionProcess", value: this.identityDeletionProcess }
if (!this.isDebugMode()) return

this.choices.push(identityDeletionProcessChoices)
const identityDeletionProcessChoices = { title: "IdentityDeletionProcess", value: this.identityDeletionProcess }

this.choicesInDeletion.push(identityDeletionProcessChoices)
}
this.choices.push(identityDeletionProcessChoices)
this.choicesInDeletion.push(identityDeletionProcessChoices)
}

protected async identityDeletionProcess() {
const choices = []

const identityDeletionProcess = await this.getIdentityDeletionProcesses()
const activeIdentityDeletionProcess = await this.identityDeletionProcessEndpoint.getActiveIdentityDeletionProcess()

if (identityDeletionProcess.status === 200) {
if (activeIdentityDeletionProcess.isSuccess) {
choices.push({ title: "Show IdentityDeletionProcess", value: "Show" })

if (identityDeletionProcess.data.result.status === "Approved") {
if (activeIdentityDeletionProcess.result.status === "Approved") {
choices.push({ title: "Cancel IdentityDeletionProcess", value: "Cancel" })
}
} else {
Expand All @@ -40,7 +40,7 @@ export function AddIdentityDeletionProcess<TBase extends ConnectorTUIBaseConstru

switch (result["Identity Deletion Process"]) {
case "Show":
this.showIdentityDeletionProcesses(identityDeletionProcess.data)
this.showIdentityDeletionProcesses(activeIdentityDeletionProcess.result)
break
case "Init":
await this.initIdentityDeletionProcess()
Expand All @@ -59,25 +59,26 @@ export function AddIdentityDeletionProcess<TBase extends ConnectorTUIBaseConstru
})

const oneSecondInDays = 1 / (24 * 60 * 60)
const query = confirmation["IdentityDeletionProcess grace period"] ? `?lengthOfGracePeriodInDays=${oneSecondInDays}` : ""
const identityDeletionProcess = (await this.plainHttpClient.post(`/api/v2/IdentityDeletionProcess${query}`)).data
const lengthOfGracePeriodInDays = confirmation["IdentityDeletionProcess grace period"] ? oneSecondInDays : undefined
const identityDeletionProcess = (await this.identityDeletionProcessEndpoint.initiateIdentityDeletionProcess(lengthOfGracePeriodInDays)).result

console.log("Identity Deletion Process initiated.")

this.showIdentityDeletionProcesses(identityDeletionProcess)
}

protected async cancelIdentityDeletionProcess() {
const identityDeletionProcess = (await this.plainHttpClient.delete("/api/v2/IdentityDeletionProcess")).data
const identityDeletionProcess = (await this.identityDeletionProcessEndpoint.cancelIdentityDeletionProcess()).result
console.log("Identity Deletion Process canceled.")

this.showIdentityDeletionProcesses(identityDeletionProcess)
}
protected showIdentityDeletionProcesses(identityDeletionProcess: any) {
console.log(`Identity deletion status: ${chalk.yellow(identityDeletionProcess.result.status)}`)

if (identityDeletionProcess.result.status === "Approved") {
console.log(`End of grace period: ${chalk.yellow(DateTime.fromISO(identityDeletionProcess.result.gracePeriodEndsAt).toLocaleString())}`)
protected showIdentityDeletionProcesses(identityDeletionProcess: IdentityDeletionProcess) {
console.log(`Identity deletion status: ${chalk.yellow(identityDeletionProcess.status)}`)

if (identityDeletionProcess.status === "Approved") {
console.log(`End of grace period: ${chalk.yellow(DateTime.fromISO(identityDeletionProcess.gracePeriodEndsAt!).toLocaleString())}`)
}
}
}
Expand Down

0 comments on commit dcef04b

Please sign in to comment.