import { Cryptide, Models, Clients, Tools, Contracts } from "@tideorg/js"; const TideMemory = Tools.TideMemory; const BaseTideRequest = Models.BaseTideRequest; const Policy = Models.Policy; const GenericResourceAccessThresholdRoleContract = Contracts.GenericResourceAccessThresholdRoleContract const forsetiType = "forseti"; const forsetiEntryType = "Contract"; export default class PolicySignRequest extends BaseTideRequest { private new_policy: Models.Policy; constructor(name: string, version: string, authFlow: string, draft: Uint8Array, dyanmicData: Uint8Array) { super(name, version, authFlow, draft, dyanmicData); } static New(policy: Models.Policy) : PolicySignRequest{ const p = new PolicySignRequest( "Policy", "1", "Policy:1", TideMemory.CreateFromArray([policy.toBytes()]), new TideMemory() ); p.new_policy = policy; return p; } addForsetiContractToUpload(source: Uint8Array | string){ const te = new TextEncoder(); const s = typeof source === "string" ? te.encode(source) : source; const innerPayload = TideMemory.CreateFromArray([s, te.encode(forsetiEntryType)]); const forsetiData = TideMemory.CreateFromArray([new Uint8Array(0), innerPayload]); const contractTransport = TideMemory.CreateFromArray([te.encode(forsetiType), forsetiData]); const draft = TideMemory.CreateFromArray([this.new_policy.toBytes(), contractTransport]); this.draft = draft; return this; } getRequestedPolicy(){ return Policy.from(this.draft.GetValue(0)); } }