{
  "version": 3,
  "sources": ["../src/capability.ts"],
  "sourcesContent": ["import type { StandardSchemaV1 } from '@standard-schema/spec'\nimport { SchemaError } from '@standard-schema/utils'\nimport { parse as didParse } from 'iso-did'\nimport { Delegation } from './delegation.js'\nimport { Invocation } from './invocation.js'\nimport type { CapabilityOptions, CapabilityDelegateOptions, CapabilityInvokeOptions, IsRevoked, DidResolver, VerifierResolver, CborObject } from './types.js'\n\nexport class Capability<\n  Schema extends StandardSchemaV1 = StandardSchemaV1,\n  Cmd extends string = string\n> {\n    schema:Schema\n    cmd:Cmd\n    isRevoked?:IsRevoked\n    didResolver?:DidResolver\n    verifierResolver:VerifierResolver\n\n    constructor (options:CapabilityOptions<Schema, Cmd>) {\n        this.schema = options.schema\n        this.cmd = options.cmd\n        this.isRevoked = options.isRevoked\n        this.didResolver = options.didResolver\n        this.verifierResolver = options.verifierResolver\n    }\n\n    static from<Schema extends StandardSchemaV1, Cmd extends string = string> (\n        options:CapabilityOptions<Schema, Cmd>\n    ):Capability<Schema, Cmd> {\n        return new Capability(options)\n    }\n\n    async validate (args:StandardSchemaV1.InferInput<Schema>) {\n        const result = await this.schema['~standard'].validate(args)\n        return result\n    }\n\n    /**\n     * Invoke this capability\n     */\n    async invoke (options:CapabilityInvokeOptions<Schema>):Promise<Invocation> {\n        const result = await this.schema['~standard'].validate(options.args)\n        if (result.issues) {\n            throw new SchemaError(result.issues)\n        }\n\n        let proofs:Delegation[] = []\n        const iss = didParse(options.iss.did)\n        if (iss.did !== options.sub) {\n            proofs = await options.store.chain({\n                cmd: this.cmd,\n                sub: options.sub,\n                aud: options.iss.did,\n                args: result.value as CborObject,\n            })\n        }\n        return await Invocation.create({\n            ...options,\n            args: result.value as CborObject,\n            cmd: this.cmd,\n            prf: proofs,\n            verifierResolver: this.verifierResolver,\n            didResolver: this.didResolver,\n            isRevoked: this.isRevoked,\n        })\n    }\n\n    /**\n     * Create a delegation for this capability\n     */\n    async delegate (options:CapabilityDelegateOptions<Schema>):Promise<Delegation> {\n        const dlg = await Delegation.create({ ...options, cmd: this.cmd })\n        await options.store.add([dlg])\n        return dlg\n    }\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAA4B;AAC5B,qBAAkC;AAClC,wBAA2B;AAC3B,wBAA2B;AAGpB,MAAM,WAGX;AAAA,EAVF,OAUE;AAAA;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAa,SAAwC;AACjD,SAAK,SAAS,QAAQ;AACtB,SAAK,MAAM,QAAQ;AACnB,SAAK,YAAY,QAAQ;AACzB,SAAK,cAAc,QAAQ;AAC3B,SAAK,mBAAmB,QAAQ;AAAA,EACpC;AAAA,EAEA,OAAO,KACH,SACsB;AACtB,WAAO,IAAI,WAAW,OAAO;AAAA,EACjC;AAAA,EAEA,MAAM,SAAU,MAA0C;AACtD,UAAM,SAAS,MAAM,KAAK,OAAO,WAAW,EAAE,SAAS,IAAI;AAC3D,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAQ,SAA6D;AACvE,UAAM,SAAS,MAAM,KAAK,OAAO,WAAW,EAAE,SAAS,QAAQ,IAAI;AACnE,QAAI,OAAO,QAAQ;AACf,YAAM,IAAI,yBAAY,OAAO,MAAM;AAAA,IACvC;AAEA,QAAI,SAAsB,CAAC;AAC3B,UAAM,UAAM,eAAAA,OAAS,QAAQ,IAAI,GAAG;AACpC,QAAI,IAAI,QAAQ,QAAQ,KAAK;AACzB,eAAS,MAAM,QAAQ,MAAM,MAAM;AAAA,QAC/B,KAAK,KAAK;AAAA,QACV,KAAK,QAAQ;AAAA,QACb,KAAK,QAAQ,IAAI;AAAA,QACjB,MAAM,OAAO;AAAA,MACjB,CAAC;AAAA,IACL;AACA,WAAO,MAAM,6BAAW,OAAO;AAAA,MAC3B,GAAG;AAAA,MACH,MAAM,OAAO;AAAA,MACb,KAAK,KAAK;AAAA,MACV,KAAK;AAAA,MACL,kBAAkB,KAAK;AAAA,MACvB,aAAa,KAAK;AAAA,MAClB,WAAW,KAAK;AAAA,IACpB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAU,SAA+D;AAC3E,UAAM,MAAM,MAAM,6BAAW,OAAO,EAAE,GAAG,SAAS,KAAK,KAAK,IAAI,CAAC;AACjE,UAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,CAAC;AAC7B,WAAO;AAAA,EACX;AACJ;",
  "names": ["didParse"]
}
