UNPKG

heimdall-tide

Version:

SDK for communicating with a Tide Enclave

52 lines (47 loc) 1.76 kB
import {Heimdall, HiddenInit, windowType} from "../heimdall"; import { TideMemory } from "asgard-tide"; import { RequestEnclave } from "./RequestEnclave"; export class ApprovalEnclaveNew extends RequestEnclave{ name: string = "approvalNew"; _windowType: windowType = windowType.Popup; init(data: HiddenInit): ApprovalEnclaveNew { return super.init(data) as ApprovalEnclaveNew; } async approve(requestsToApprove: RequestToApprove[]) : Promise<OperatorApprovalResponse[]>{ // return fully serialized approved requests this.checkEnclaveOpen(); await this.initDone; const pre_resp = this.recieve("approvals"); this.send({ type: "approvalRequests", message:{ requests: requestsToApprove, } }) const resp = await pre_resp; if(!Array.isArray(resp)) throw 'Expecting request completed data to be an array, not' + resp; if(!resp.every((d: any) => OperatorApprovalResponse.isOperatorApprovalResponse(d))) throw 'Expecting all entries in response to be OperatorApprovalResponse'; this.close(); return resp; } } class RequestToApprove{ id: string; request: TideMemory; } class OperatorApprovalResponse extends RequestToApprove{ status: Status; static isOperatorApprovalResponse(object: any): object is OperatorApprovalResponse { return ( object != null && typeof object.id === 'string' && (object.request instanceof Uint8Array || object.request == null) && Object.values(Status).includes(object.status) ); } } enum Status{ Approved = "approved", Denied = "denied", Pending = "pending" }