From e9450e95eef63f44f881b411ef00fcbd3ad196d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Kr=C3=BCger?= Date: Mon, 13 Dec 2021 20:09:10 +0100 Subject: [PATCH] Remove toCapability & rename parse -> tryParsing --- src/attenuation.ts | 5 ++--- src/capability/wnfs.ts | 25 ++----------------------- tests/emailCapabilities.ts | 9 +-------- 3 files changed, 5 insertions(+), 34 deletions(-) diff --git a/src/attenuation.ts b/src/attenuation.ts index a383821..fa4db83 100644 --- a/src/attenuation.ts +++ b/src/attenuation.ts @@ -5,8 +5,7 @@ import * as util from "./util" export interface CapabilitySemantics { - parse(cap: Capability): A | null - toCapability(parsedCap: A): Capability + tryParsing(cap: Capability): A | null /** * This figures out whether a given `childCap` can be delegated from `parentCap`. * There are three possible results with three return types respectively: @@ -51,7 +50,7 @@ export function capabilities( function* findParsingCaps(ucan: Ucan): Iterable { const capInfo = parseCapabilityInfo(ucan) for (const cap of ucan.payload.att) { - const parsedCap = capability.parse(cap) + const parsedCap = capability.tryParsing(cap) if (parsedCap != null) yield { ...parsedCap, ...capInfo } } } diff --git a/src/capability/wnfs.ts b/src/capability/wnfs.ts index 964d421..5714a45 100644 --- a/src/capability/wnfs.ts +++ b/src/capability/wnfs.ts @@ -41,7 +41,7 @@ export const wnfsPublicSemantics: CapabilitySemantics = { * } * ``` */ - parse(cap: Capability): WnfsPublicCapability | null { + tryParsing(cap: Capability): WnfsPublicCapability | null { if (typeof cap.wnfs !== "string" || !isWnfsCap(cap.cap)) return null // remove trailing slash @@ -57,13 +57,6 @@ export const wnfsPublicSemantics: CapabilitySemantics = { } }, - toCapability(parsed: WnfsPublicCapability): Capability { - return { - wnfs: `${parsed.user}/public/${parsed.publicPath.join("/")}`, - cap: parsed.cap, - } - }, - tryDelegating(parentCap: T, childCap: T): T | null | CapabilityEscalation { // need to delegate the same user's file system if (childCap.user !== parentCap.user) return null @@ -118,7 +111,7 @@ const wnfsPrivateSemantics: CapabilitySemantics = { * } * ``` */ - parse(cap: Capability): WnfsPrivateCapability | null { + tryParsing(cap: Capability): WnfsPrivateCapability | null { if (typeof cap.wnfs !== "string" || !isWnfsCap(cap.cap)) return null // split up "boris.fission.name/private/fccXmZ8HYmpwxkvPSjwW9A" into "/private/" @@ -135,20 +128,6 @@ const wnfsPrivateSemantics: CapabilitySemantics = { } }, - toCapability(parsed: WnfsPrivateCapability): Capability { - const inumbers = Array.from(parsed.requiredINumbers.values()) - const [inumber] = inumbers - if (inumbers.length !== 1 || inumber == null) { - // Private wnfs capabilities will only have an encoding with a single inumber. - // Multiple inumbers are the result of delegations with multiple private capabilities interacting. - throw new Error(`Can only construct a private capability with exactly one inumber.`) - } - return { - wnfs: `${parsed.user}/private/${inumber}`, - cap: parsed.cap, - } - }, - tryDelegating(parentCap: T, childCap: T): T | null | CapabilityEscalation { // If the users don't match, these capabilities are unrelated. if (childCap.user !== parentCap.user) return null diff --git a/tests/emailCapabilities.ts b/tests/emailCapabilities.ts index 910ff4c..087bbdb 100644 --- a/tests/emailCapabilities.ts +++ b/tests/emailCapabilities.ts @@ -11,7 +11,7 @@ export interface EmailCapability { export const emailSemantics: CapabilitySemantics = { - parse(cap: Capability): EmailCapability | null { + tryParsing(cap: Capability): EmailCapability | null { if (typeof cap.email === "string" && cap.cap === "SEND") { return { email: cap.email, @@ -21,13 +21,6 @@ export const emailSemantics: CapabilitySemantics = { return null }, - toCapability(parsed: EmailCapability): Capability { - return { - email: parsed.email, - cap: parsed.cap, - } - }, - tryDelegating(parentCap: T, childCap: T): T | null | CapabilityEscalation { // potency is always "SEND" anyway, so doesn't need to be checked return childCap.email === parentCap.email ? childCap : null