iso-ucan 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/capability.d.ts +8 -13
- package/dist/src/capability.d.ts.map +1 -1
- package/dist/src/delegation.d.ts +18 -5
- package/dist/src/delegation.d.ts.map +1 -1
- package/dist/src/invocation.d.ts.map +1 -1
- package/dist/src/policy.d.ts +2 -2
- package/dist/src/policy.d.ts.map +1 -1
- package/dist/src/store.d.ts +4 -4
- package/dist/src/store.d.ts.map +1 -1
- package/dist/src/types.d.ts +34 -15
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils.d.ts +2 -2
- package/dist/src/utils.d.ts.map +1 -1
- package/package.json +10 -9
- package/src/capability.js +24 -17
- package/src/delegation.js +34 -3
- package/src/invocation.js +34 -18
- package/src/policy.js +1 -1
- package/src/store.js +15 -6
- package/src/types.ts +44 -18
- package/src/utils.js +3 -3
package/dist/src/capability.d.ts
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @import {StandardSchemaV1} from '@standard-schema/spec'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @template {StandardSchemaV1} Schema
|
|
6
|
-
* @template {string} [Cmd=string]
|
|
7
|
-
* @typedef {Object} CapabilityOptions
|
|
8
|
-
* @prop {Schema} schema
|
|
9
|
-
* @prop {Cmd} cmd
|
|
3
|
+
* @import {CapabilityOptions, CapabilityDelegateOptions} from './types.js'
|
|
10
4
|
*/
|
|
11
5
|
/**
|
|
12
6
|
* @template {StandardSchemaV1} Schema
|
|
@@ -25,6 +19,9 @@ export class Capability<Schema extends StandardSchemaV1, Cmd extends string = st
|
|
|
25
19
|
constructor(options: CapabilityOptions<Schema, Cmd>);
|
|
26
20
|
schema: Schema;
|
|
27
21
|
cmd: Cmd;
|
|
22
|
+
isRevoked: import("./types.js").IsRevoked | undefined;
|
|
23
|
+
didResolver: import("did-resolver").Resolver | undefined;
|
|
24
|
+
verifierResolver: import("iso-signatures/verifiers/resolver.js").Resolver;
|
|
28
25
|
/**
|
|
29
26
|
* @param {StandardSchemaV1.InferInput<Schema>} args
|
|
30
27
|
*/
|
|
@@ -39,16 +36,14 @@ export class Capability<Schema extends StandardSchemaV1, Cmd extends string = st
|
|
|
39
36
|
/**
|
|
40
37
|
* Create a delegation for this capability
|
|
41
38
|
*
|
|
42
|
-
* @param {
|
|
39
|
+
* @param {CapabilityDelegateOptions<Schema>} options
|
|
43
40
|
* @returns {Promise<Delegation>}
|
|
44
41
|
*/
|
|
45
|
-
delegate(options:
|
|
42
|
+
delegate(options: CapabilityDelegateOptions<Schema>): Promise<Delegation>;
|
|
46
43
|
}
|
|
47
|
-
export type CapabilityOptions<Schema extends StandardSchemaV1, Cmd extends string = string> = {
|
|
48
|
-
schema: Schema;
|
|
49
|
-
cmd: Cmd;
|
|
50
|
-
};
|
|
51
44
|
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
52
45
|
import { Invocation } from './invocation.js';
|
|
46
|
+
import type { CapabilityDelegateOptions } from './types.js';
|
|
53
47
|
import { Delegation } from './delegation.js';
|
|
48
|
+
import type { CapabilityOptions } from './types.js';
|
|
54
49
|
//# sourceMappingURL=capability.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/capability.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/capability.js"],"names":[],"mappings":"AAKA;;;GAGG;AAEH;;;GAGG;AACH,wBAHgC,MAAM,SAAzB,gBAAkB,EACR,GAAG,SAAb,MAAQ;IAcnB;;;;OAIG;IACH,6BAJa,gBAAkB,gBAClB,MAAQ,oBACV,kBAAkB,QAAM,EAAE,KAAG,CAAC,+BAIxC;IAlBD;;OAEG;IACH,qBAFW,kBAAkB,MAAM,EAAE,GAAG,CAAC,EAQxC;IALC,eAA4B;IAC5B,SAAsB;IACtB,sDAAkC;IAClC,yDAAsC;IACtC,0EAAgD;IAYlD;;OAEG;IACH,eAFW,4BAA4B,MAAM,CAAC,yCAK7C;IAED;;;;;OAKG;IACH,gBAHW,OAAO,YAAY,EAAE,uBAAuB,CAAC,MAAM,CAAC,GAClD,OAAO,CAAC,UAAU,CAAC,CA4B/B;IAED;;;;;OAKG;IACH,kBAHW,0BAA0B,MAAM,CAAC,GAC/B,OAAO,CAAC,UAAU,CAAC,CAM/B;CACF;sCAlFkC,uBAAuB;2BAH/B,iBAAiB;+CAImB,YAAY;2BALhD,iBAAiB;uCAKmB,YAAY"}
|
package/dist/src/delegation.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @import {DelegationValidateOptions, Policy, DelegationOptions, DelegationPayload, DID, DIDURL} from './types.js'
|
|
2
|
+
* @import {DelegationValidateOptions, Policy, DelegationOptions, DelegationPayload, DID, DIDURL, StandardSchemaV1} from './types.js'
|
|
3
3
|
* @import {CID} from 'multiformats'
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
@@ -7,17 +7,25 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export class Delegation {
|
|
9
9
|
/**
|
|
10
|
+
* Create a delegation from bytes and validate it
|
|
11
|
+
*
|
|
12
|
+
* Does not validate "not before" time, call {@link Delegation.validate} to validate it
|
|
10
13
|
*
|
|
11
14
|
* @param {import("./types.js").DelegationFromOptions} options
|
|
12
15
|
*/
|
|
13
16
|
static from(options: import("./types.js").DelegationFromOptions): Promise<Delegation>;
|
|
17
|
+
/**
|
|
18
|
+
* Create a delegation from a base64 encoded string
|
|
19
|
+
*
|
|
20
|
+
* @param {string} token
|
|
21
|
+
*/
|
|
22
|
+
static fromString(token: string): Promise<Delegation>;
|
|
14
23
|
/**
|
|
15
24
|
*
|
|
16
|
-
* @
|
|
25
|
+
* @template {StandardSchemaV1} Schema
|
|
26
|
+
* @param {DelegationOptions<Schema>} options
|
|
17
27
|
*/
|
|
18
|
-
static create(options: DelegationOptions
|
|
19
|
-
cmd: string;
|
|
20
|
-
}): Promise<Delegation>;
|
|
28
|
+
static create<Schema extends StandardSchemaV1>(options: DelegationOptions<Schema>): Promise<Delegation>;
|
|
21
29
|
/**
|
|
22
30
|
*
|
|
23
31
|
* @param {import("./types.js").DecodedEnvelope<'dlg'>} envelope
|
|
@@ -47,6 +55,10 @@ export class Delegation {
|
|
|
47
55
|
bytes: Uint8Array<ArrayBufferLike>;
|
|
48
56
|
cid: CID<any, number, number, import("multiformats").Version>;
|
|
49
57
|
/**
|
|
58
|
+
* Validate a delegation
|
|
59
|
+
*
|
|
60
|
+
* Checks the structure, "not before" time, signature, and revocation status
|
|
61
|
+
*
|
|
50
62
|
* @param {DelegationValidateOptions} options
|
|
51
63
|
*/
|
|
52
64
|
validate(options: DelegationValidateOptions): Promise<boolean>;
|
|
@@ -79,5 +91,6 @@ import type { DID } from './types.js';
|
|
|
79
91
|
import type { Policy } from './types.js';
|
|
80
92
|
import type { CID } from 'multiformats';
|
|
81
93
|
import type { DelegationValidateOptions } from './types.js';
|
|
94
|
+
import type { StandardSchemaV1 } from './types.js';
|
|
82
95
|
import type { DelegationOptions } from './types.js';
|
|
83
96
|
//# sourceMappingURL=delegation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegation.d.ts","sourceRoot":"","sources":["../../src/delegation.js"],"names":[],"mappings":"AAgBA;;;GAGG;AAEH;;GAEG;AACH;IA0CE
|
|
1
|
+
{"version":3,"file":"delegation.d.ts","sourceRoot":"","sources":["../../src/delegation.js"],"names":[],"mappings":"AAgBA;;;GAGG;AAEH;;GAEG;AACH;IA0CE;;;;;;OAMG;IACH,qBAFW,OAAO,YAAY,EAAE,qBAAqB,uBAuBpD;IAED;;;;OAIG;IACH,yBAFW,MAAM,uBAiBhB;IAED;;;;OAIG;IACH,cAHgC,MAAM,SAAzB,gBAAkB,WACpB,kBAAkB,MAAM,CAAC,uBA6CnC;IA1HD;;;;;OAKG;IACH,sBAJW,OAAO,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC,SAC3C,UAAU,OACV,GAAG,EAgBb;IAvCD,qBAAqB;IACrB,KADW,MAAM,CACd;IACH,kBAAkB;IAClB,KADW,GAAG,CACX;IACH,yBAAyB;IACzB,KADW,GAAG,GAAG,IAAI,CAClB;IACH,qBAAqB;IACrB,KADW,MAAM,CACd;IACH,qBAAqB;IACrB,KADW,MAAM,CACd;IACH,iCAAiC;IACjC,KADW,MAAM,GAAG,SAAS,CAC1B;IACH,yBAAyB;IACzB,OADW,UAAU,CAChB;IACL,kDAAkD;IAClD,MADW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAC1C;IACJ,4BAA4B;IAC5B,KADW,MAAM,GAAG,IAAI,CACrB;IASD,sDAAwB;IACxB,mCAAkB;IAClB,8DAAc;IAmHhB;;;;;;OAMG;IACH,kBAFW,yBAAyB,oBAanC;IAED,mBAEC;IAED;;;;;;;;;;;;;;;;;;;;;MAuBC;CACF;4BAvMwH,YAAY;yBAAZ,YAAY;4BAAZ,YAAY;yBAC/G,cAAc;+CADqF,YAAY;sCAAZ,YAAY;uCAAZ,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invocation.d.ts","sourceRoot":"","sources":["../../src/invocation.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"invocation.d.ts","sourceRoot":"","sources":["../../src/invocation.js"],"names":[],"mappings":"AAoLA;;;;GAIG;AACH,sCAHW,OAAO,YAAY,EAAE,iBAAiB,UACtC,UAAU,EAAE,WA2DtB;AAnOD;;;GAGG;AAEH;;GAEG;AACH;IA0BE;;;OAGG;IACH,qBAFW,OAAO,YAAY,EAAE,qBAAqB,uBA+CpD;IAED;;OAEG;IACH,uBAFW,OAAO,YAAY,EAAE,iBAAiB,uBA0DhD;IA7HD;;;;;;OAMG;IACH,sBALW,OAAO,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC,SAC3C,UAAU,OACV,GAAG,eACH,UAAU,EAAE,EAQtB;IAvBD;;OAEG;IACH,aAFU,UAAU,EAAE,CAEX;IAEX;;OAEG;IACH,KAFU,GAAG,CAEV;IAUD,sDAAwB;IACxB,gDAA+B;IAC/B,mCAAkB;CAoHrB;gCAhJ4B,iBAAiB;yBACxB,cAAc"}
|
package/dist/src/policy.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Validates invocation arguments against a UCAN policy.
|
|
3
3
|
*
|
|
4
|
-
* @template {
|
|
4
|
+
* @template {unknown} Args
|
|
5
5
|
* @param {Args} args The arguments of the eventual invocation.
|
|
6
6
|
* @param {import("./types.js").Policy<Args>} policy An array of policy statements.
|
|
7
7
|
* @returns {boolean} True if the args are valid according to the policy, false otherwise.
|
|
8
8
|
*/
|
|
9
|
-
export function validate<Args extends
|
|
9
|
+
export function validate<Args extends unknown>(args: Args, policy: import("./types.js").Policy<Args>): boolean;
|
|
10
10
|
//# sourceMappingURL=policy.d.ts.map
|
package/dist/src/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/policy.js"],"names":[],"mappings":"AAoQA;;;;;;;GAOG;AACH,
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/policy.js"],"names":[],"mappings":"AAoQA;;;;;;;GAOG;AACH,yBALuB,IAAI,SAAd,OAAS,QACX,IAAI,UACJ,OAAO,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAC/B,OAAO,CAKnB"}
|
package/dist/src/store.d.ts
CHANGED
|
@@ -29,9 +29,9 @@ export class Store {
|
|
|
29
29
|
/**
|
|
30
30
|
* List proofs by sub and aud
|
|
31
31
|
*
|
|
32
|
-
* @param {import('./types.js').StoreProofsOptions} options
|
|
32
|
+
* @param {Omit<import('./types.js').StoreProofsOptions, 'args'>} options
|
|
33
33
|
*/
|
|
34
|
-
proofs(options: import("./types.js").StoreProofsOptions): AsyncGenerator<Delegation, void, unknown>;
|
|
34
|
+
proofs(options: Omit<import("./types.js").StoreProofsOptions, "args">): AsyncGenerator<Delegation, void, unknown>;
|
|
35
35
|
/**
|
|
36
36
|
* Resolve a single chain of proofs ending with a root (subject === issuer).
|
|
37
37
|
* Returns the first such chain found (depth-first).
|
|
@@ -39,11 +39,11 @@ export class Store {
|
|
|
39
39
|
* @param {import('./types.js').StoreProofsOptions} options
|
|
40
40
|
* @returns {Promise<Delegation[]>}
|
|
41
41
|
*/
|
|
42
|
-
chain({ aud, sub, cmd }: import("./types.js").StoreProofsOptions): Promise<Delegation[]>;
|
|
42
|
+
chain({ aud, sub, cmd, args }: import("./types.js").StoreProofsOptions): Promise<Delegation[]>;
|
|
43
43
|
#private;
|
|
44
44
|
}
|
|
45
45
|
import type { Driver } from 'iso-kv';
|
|
46
46
|
import { KV } from 'iso-kv';
|
|
47
|
-
import
|
|
47
|
+
import { Delegation } from './delegation.js';
|
|
48
48
|
import type { CID } from 'multiformats';
|
|
49
49
|
//# sourceMappingURL=store.d.ts.map
|
package/dist/src/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.js"],"names":[],"mappings":"AAaA;;GAEG;AACH;IAOE;;OAEG;IACH,oBAFW,MAAM,EAQhB;IAfD,qBAAqB;IACrB,QADW,MAAM,CACX;IAEN,iBAAiB;IACjB,IADW,EAAE,CACX;IAoCF;;OAEG;IACH,iBAFW,UAAU,EAAE,iBAMtB;IAED;;;;OAIG;IACH,SAFW,MAAM,mCAUhB;IAED;;;;OAIG;IACH,kBAFW,GAAG,uBAQb;IAED;;;;OAIG;IACH,gBAFW,IAAI,CAAC,OAAO,YAAY,EAAE,kBAAkB,EAAE,MAAM,CAAC,6CA8B/D;IAED;;;;;;OAMG;IACH,+BAHW,OAAO,YAAY,EAAE,kBAAkB,GACrC,OAAO,CAAC,UAAU,EAAE,CAAC,CAqCjC;;CACF;4BArKwB,QAAQ;mBANd,QAAQ;2BAEA,iBAAiB;yBAKtB,cAAc"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -30,11 +30,11 @@ export type CborValue = CborPrimitive | CborArray | CborObject;
|
|
|
30
30
|
/**
|
|
31
31
|
* Delegation
|
|
32
32
|
*/
|
|
33
|
-
export interface DelegationOptions<
|
|
33
|
+
export interface DelegationOptions<Schema extends StandardSchemaV1> {
|
|
34
34
|
iss: ISigner;
|
|
35
35
|
aud: DID;
|
|
36
36
|
sub: DID | null;
|
|
37
|
-
pol: Policy<
|
|
37
|
+
pol: Policy<StandardSchemaV1.InferOutput<Schema>>;
|
|
38
38
|
/**
|
|
39
39
|
* Expiration time in seconds or null for no expiration
|
|
40
40
|
*/
|
|
@@ -53,25 +53,21 @@ export interface DelegationOptions<Args = unknown> {
|
|
|
53
53
|
cmd: string;
|
|
54
54
|
meta?: CborObject;
|
|
55
55
|
}
|
|
56
|
-
export interface DelegationFromOptions {
|
|
57
|
-
bytes: Uint8Array;
|
|
58
|
-
isRevoked?: IsRevoked;
|
|
59
|
-
didResolver?: DidResolver;
|
|
60
|
-
verifierResolver: VerifierResolver;
|
|
61
|
-
}
|
|
62
56
|
export interface DelegationValidateOptions {
|
|
63
57
|
isRevoked?: IsRevoked;
|
|
64
58
|
didResolver?: DidResolver;
|
|
65
59
|
verifierResolver: VerifierResolver;
|
|
66
60
|
}
|
|
67
|
-
export
|
|
61
|
+
export interface DelegationFromOptions extends DelegationValidateOptions {
|
|
62
|
+
bytes: Uint8Array;
|
|
63
|
+
}
|
|
68
64
|
/**
|
|
69
65
|
* Invocation
|
|
70
66
|
*/
|
|
71
67
|
/**
|
|
72
68
|
* Invocation options
|
|
73
69
|
*/
|
|
74
|
-
export interface InvocationOptions {
|
|
70
|
+
export interface InvocationOptions extends DelegationValidateOptions {
|
|
75
71
|
iss: ISigner;
|
|
76
72
|
aud?: DID;
|
|
77
73
|
sub: DID;
|
|
@@ -99,16 +95,38 @@ export interface InvocationOptions {
|
|
|
99
95
|
cause?: CID;
|
|
100
96
|
meta?: CborObject;
|
|
101
97
|
}
|
|
102
|
-
export interface InvocationFromOptions {
|
|
98
|
+
export interface InvocationFromOptions extends DelegationValidateOptions {
|
|
103
99
|
bytes: Uint8Array;
|
|
104
100
|
audience: VerifiableDID;
|
|
105
|
-
didResolver?: DidResolver;
|
|
106
|
-
verifierResolver: VerifierResolver;
|
|
107
|
-
isRevoked?: IsRevoked;
|
|
108
101
|
resolveProof: ResolveProof;
|
|
109
102
|
}
|
|
110
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Capability types
|
|
105
|
+
*/
|
|
106
|
+
/**
|
|
107
|
+
* Capability options
|
|
108
|
+
*/
|
|
109
|
+
export interface CapabilityOptions<Schema extends StandardSchemaV1, Cmd extends string = string> extends DelegationValidateOptions {
|
|
110
|
+
schema: Schema;
|
|
111
|
+
cmd: Cmd;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Delegate a capability
|
|
115
|
+
*/
|
|
116
|
+
export interface CapabilityDelegateOptions<Schema extends StandardSchemaV1> extends Omit<DelegationOptions<Schema>, 'cmd'> {
|
|
117
|
+
/**
|
|
118
|
+
* Store to add the delegation to
|
|
119
|
+
*/
|
|
120
|
+
store: Store;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Invoke a capability
|
|
124
|
+
*/
|
|
125
|
+
export interface CapabilityInvokeOptions<Schema extends StandardSchemaV1> extends Omit<InvocationOptions, 'cmd' | 'args' | 'prf' | 'verifierResolver' | 'didResolver' | 'isRevoked'> {
|
|
111
126
|
args: StandardSchemaV1.InferOutput<Schema>;
|
|
127
|
+
/**
|
|
128
|
+
* Store to resolve proofs from
|
|
129
|
+
*/
|
|
112
130
|
store: Store;
|
|
113
131
|
}
|
|
114
132
|
/**
|
|
@@ -121,6 +139,7 @@ export interface StoreProofsOptions {
|
|
|
121
139
|
aud?: DID;
|
|
122
140
|
sub: DID | null;
|
|
123
141
|
cmd: string;
|
|
142
|
+
args: CborObject;
|
|
124
143
|
}
|
|
125
144
|
/**
|
|
126
145
|
* Server types
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC9D,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAE9B,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;AAC9D,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AACtD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAA;AACvC,MAAM,MAAM,WAAW,GAAG,YAAY,CAAA;AAEtC,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,MAAM,GACN,UAAU,GACV,WAAW,CAAA;AACf,MAAM,MAAM,SAAS,GAAG,SAAS,EAAE,GAAG,SAAS,SAAS,EAAE,CAAA;AAC1D,MAAM,MAAM,UAAU,GAClB;KAAG,GAAG,IAAI,MAAM,GAAG,SAAS;CAAE,GAC9B;KAAG,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS;CAAE,CAAA;AAE/C,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,UAAU,CAAA;AAE9D;;GAEG;AAEH,MAAM,WAAW,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/src/utils.d.ts
CHANGED
|
@@ -82,7 +82,7 @@ export function assertIsValidCommand(command: string): void;
|
|
|
82
82
|
*/
|
|
83
83
|
export function assertNonce(nonce: unknown): void;
|
|
84
84
|
/**
|
|
85
|
-
* Assert that args is a
|
|
85
|
+
* Assert that args is a CBOR serializable object.
|
|
86
86
|
*
|
|
87
87
|
* @param {unknown} args
|
|
88
88
|
*/
|
|
@@ -140,5 +140,5 @@ export type Selector = z.infer<typeof selector>;
|
|
|
140
140
|
import type { PayloadSpec } from './types.js';
|
|
141
141
|
import { CID } from 'multiformats/cid';
|
|
142
142
|
import { DID } from 'iso-did';
|
|
143
|
-
import { z } from 'zod';
|
|
143
|
+
import { z } from 'zod/v4';
|
|
144
144
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/src/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.js"],"names":[],"mappings":"AASA;;GAEG;AAEH;;;;;GAKG;AACH,2CAHW,OAAO,YAAY,EAAE,eAAe,CAAC,WAAW,CAAC;;;EAe3D;AAED,uCAEC;AAED;;;GAGG;AACH,8BAFW,OAAO,YAAY,EAAE,eAAe,CAAC,WAAW,CAAC,iCAW3D;AAED;;;;;GAKG;AACH,2CAHW,OAAO,eAAe,EAAE,aAAa,WACrC,OAAO,sBAAsB,EAAE,aAAa,WA+BtD;AAED;;;;GAIG;AACH,sCAFW,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.js"],"names":[],"mappings":"AASA;;GAEG;AAEH;;;;;GAKG;AACH,2CAHW,OAAO,YAAY,EAAE,eAAe,CAAC,WAAW,CAAC;;;EAe3D;AAED,uCAEC;AAED;;;GAGG;AACH,8BAFW,OAAO,YAAY,EAAE,eAAe,CAAC,WAAW,CAAC,iCAW3D;AAED;;;;;GAKG;AACH,2CAHW,OAAO,eAAe,EAAE,aAAa,WACrC,OAAO,sBAAsB,EAAE,aAAa,WA+BtD;AAED;;;;GAIG;AACH,sCAFW,MAAM,GAAG,IAAI,QAevB;AAED;;;;GAIG;AACH,sCAFW,MAAM,QAMhB;AAED;;;;;GAKG;AACH,qDAHW,OAAO,YAAY,EAAE,eAAe,CAAC,WAAW,CAAC,gBACjD,OAAO,SAAS,EAAE,QAAQ,gBAYpC;AAED;;;;;;GAMG;AACH,0CAJW,OAAO,YAAY,EAAE,eAAe,CAAC,WAAW,CAAC,6BACjD,OAAO,sCAAsC,EAAE,QAAQ,gBACvD,OAAO,SAAS,EAAE,QAAQ,oBAoBpC;AAED;;;;;;;;;;;;;GAaG;AACH,8CAJW,MAAM,GAEJ,IAAI,CAuChB;AAED;;;;;;;;;;;;;GAaG;AACH,mCAXW,OAAO,GAEL,IAAI,CAehB;AACD;;;;GAIG;AACH,iCAFW,OAAO,QASjB;AAED;;;;;;GAMG;AACH,iCAJW,OAAO,GAEL,IAAI,CAWhB;AAED;;;;;GAKG;AACH,sCAHW,OAAO,kBAAkB,EAAE,GAAG,gBAC9B,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,iBAQxC;AAED;;;;;;GAMG;AACH,uCAHG;IAAgC,GAAG;IACV,GAAG;CAAC,iBAU/B;AAgED;;GAEG;AACH,qCAFW,OAAO,QASjB;AAED;;;;;;GAMG;AACH,gCAJW,OAAO,GACL,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAKjD;AAnFD,iJAeI;AACJ,4KAAyD;AAEzD,oGAGE;AAEF;;GAEG;AAEH;;GAEG;AACH,mKA4BI;AAEJ,kLAA8C;uBApCjC,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC;iCA5TP,YAAY;oBARtB,kBAAkB;oBADlB,SAAS;kBAGX,QAAQ"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iso-ucan",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"description": "Isomorphic UCAN",
|
|
6
6
|
"author": "Hugo Dias <hugomrdias@gmail.com> (hugodias.me)",
|
|
7
7
|
"license": "MIT",
|
|
@@ -105,20 +105,21 @@
|
|
|
105
105
|
"@ipld/dag-cbor": "^9.2.4",
|
|
106
106
|
"@standard-schema/spec": "^1.0.0",
|
|
107
107
|
"@standard-schema/utils": "^0.3.0",
|
|
108
|
-
"iobuffer": "^6.0.
|
|
108
|
+
"iobuffer": "^6.0.1",
|
|
109
109
|
"iso-kv": "^3.0.3",
|
|
110
110
|
"iso-web": "^1.1.1",
|
|
111
111
|
"it-merge": "^3.0.12",
|
|
112
|
-
"multiformats": "^13.
|
|
112
|
+
"multiformats": "^13.4.0",
|
|
113
|
+
"zod": "^3.25.0",
|
|
113
114
|
"iso-base": "^4.1.0",
|
|
114
|
-
"iso-
|
|
115
|
-
"iso-
|
|
115
|
+
"iso-signatures": "^0.4.0",
|
|
116
|
+
"iso-did": "^2.0.1"
|
|
116
117
|
},
|
|
117
118
|
"devDependencies": {
|
|
118
|
-
"@types/node": "^24.1
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
119
|
+
"@types/node": "^24.2.1",
|
|
120
|
+
"delay": "^6.0.0",
|
|
121
|
+
"playwright-test": "^14.1.12",
|
|
122
|
+
"typescript": "5.8.2"
|
|
122
123
|
},
|
|
123
124
|
"publishConfig": {
|
|
124
125
|
"provenance": true
|
package/src/capability.js
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
import { SchemaError } from '@standard-schema/utils'
|
|
2
|
+
import { parse as didParse } from 'iso-did'
|
|
2
3
|
import { Delegation } from './delegation.js'
|
|
3
4
|
import { Invocation } from './invocation.js'
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* @import {StandardSchemaV1} from '@standard-schema/spec'
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @template {StandardSchemaV1} Schema
|
|
11
|
-
* @template {string} [Cmd=string]
|
|
12
|
-
* @typedef {Object} CapabilityOptions
|
|
13
|
-
* @prop {Schema} schema
|
|
14
|
-
* @prop {Cmd} cmd
|
|
8
|
+
* @import {CapabilityOptions, CapabilityDelegateOptions} from './types.js'
|
|
15
9
|
*/
|
|
16
10
|
|
|
17
11
|
/**
|
|
@@ -25,6 +19,9 @@ export class Capability {
|
|
|
25
19
|
constructor(options) {
|
|
26
20
|
this.schema = options.schema
|
|
27
21
|
this.cmd = options.cmd
|
|
22
|
+
this.isRevoked = options.isRevoked
|
|
23
|
+
this.didResolver = options.didResolver
|
|
24
|
+
this.verifierResolver = options.verifierResolver
|
|
28
25
|
}
|
|
29
26
|
|
|
30
27
|
/**
|
|
@@ -56,27 +53,37 @@ export class Capability {
|
|
|
56
53
|
throw new SchemaError(result.issues)
|
|
57
54
|
}
|
|
58
55
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
/** @type {Delegation[]} */
|
|
57
|
+
let proofs = []
|
|
58
|
+
const iss = didParse(options.iss.did)
|
|
59
|
+
if (iss.did !== options.sub) {
|
|
60
|
+
proofs = await options.store.chain({
|
|
61
|
+
cmd: this.cmd,
|
|
62
|
+
sub: options.sub,
|
|
63
|
+
aud: options.iss.did,
|
|
64
|
+
args: result.value,
|
|
65
|
+
})
|
|
66
|
+
}
|
|
65
67
|
return await Invocation.create({
|
|
66
68
|
...options,
|
|
67
69
|
args: result.value,
|
|
68
70
|
cmd: this.cmd,
|
|
69
71
|
prf: proofs,
|
|
72
|
+
verifierResolver: this.verifierResolver,
|
|
73
|
+
didResolver: this.didResolver,
|
|
74
|
+
isRevoked: this.isRevoked,
|
|
70
75
|
})
|
|
71
76
|
}
|
|
72
77
|
|
|
73
78
|
/**
|
|
74
79
|
* Create a delegation for this capability
|
|
75
80
|
*
|
|
76
|
-
* @param {
|
|
81
|
+
* @param {CapabilityDelegateOptions<Schema>} options
|
|
77
82
|
* @returns {Promise<Delegation>}
|
|
78
83
|
*/
|
|
79
|
-
delegate(options) {
|
|
80
|
-
|
|
84
|
+
async delegate(options) {
|
|
85
|
+
const dlg = await Delegation.create({ ...options, cmd: this.cmd })
|
|
86
|
+
await options.store.add([dlg])
|
|
87
|
+
return dlg
|
|
81
88
|
}
|
|
82
89
|
}
|
package/src/delegation.js
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
} from './utils.js'
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
* @import {DelegationValidateOptions, Policy, DelegationOptions, DelegationPayload, DID, DIDURL} from './types.js'
|
|
18
|
+
* @import {DelegationValidateOptions, Policy, DelegationOptions, DelegationPayload, DID, DIDURL, StandardSchemaV1} from './types.js'
|
|
19
19
|
* @import {CID} from 'multiformats'
|
|
20
20
|
*/
|
|
21
21
|
|
|
@@ -65,6 +65,9 @@ export class Delegation {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
|
+
* Create a delegation from bytes and validate it
|
|
69
|
+
*
|
|
70
|
+
* Does not validate "not before" time, call {@link Delegation.validate} to validate it
|
|
68
71
|
*
|
|
69
72
|
* @param {import("./types.js").DelegationFromOptions} options
|
|
70
73
|
*/
|
|
@@ -91,14 +94,37 @@ export class Delegation {
|
|
|
91
94
|
return new Delegation(envelope, bytes, _cid)
|
|
92
95
|
}
|
|
93
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Create a delegation from a base64 encoded string
|
|
99
|
+
*
|
|
100
|
+
* @param {string} token
|
|
101
|
+
*/
|
|
102
|
+
static async fromString(token) {
|
|
103
|
+
const bytes = base64pad.decode(token)
|
|
104
|
+
const envelope = /** @type {typeof Envelope.decode<"dlg">} */ (
|
|
105
|
+
Envelope.decode
|
|
106
|
+
)({ envelope: bytes })
|
|
107
|
+
|
|
108
|
+
if (envelope.spec !== 'dlg') {
|
|
109
|
+
throw new Error(
|
|
110
|
+
`Invalid envelope type. Expected: Delegation but got: ${envelope.spec}`
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
assertStructure(envelope.payload)
|
|
115
|
+
const _cid = await cid(envelope)
|
|
116
|
+
return new Delegation(envelope, bytes, _cid)
|
|
117
|
+
}
|
|
118
|
+
|
|
94
119
|
/**
|
|
95
120
|
*
|
|
96
|
-
* @
|
|
121
|
+
* @template {StandardSchemaV1} Schema
|
|
122
|
+
* @param {DelegationOptions<Schema>} options
|
|
97
123
|
*/
|
|
98
124
|
static async create(options) {
|
|
99
125
|
const nonce = options.nonce || randomBytes(12)
|
|
100
126
|
|
|
101
|
-
/** @type {DelegationPayload} */
|
|
127
|
+
/** @type {DelegationPayload<StandardSchemaV1.InferOutput<Schema>>} */
|
|
102
128
|
const payload = {
|
|
103
129
|
iss: options.iss.toString(),
|
|
104
130
|
aud: options.aud,
|
|
@@ -141,6 +167,10 @@ export class Delegation {
|
|
|
141
167
|
}
|
|
142
168
|
|
|
143
169
|
/**
|
|
170
|
+
* Validate a delegation
|
|
171
|
+
*
|
|
172
|
+
* Checks the structure, "not before" time, signature, and revocation status
|
|
173
|
+
*
|
|
144
174
|
* @param {DelegationValidateOptions} options
|
|
145
175
|
*/
|
|
146
176
|
async validate(options) {
|
|
@@ -159,6 +189,7 @@ export class Delegation {
|
|
|
159
189
|
toString() {
|
|
160
190
|
return base64pad.encode(this.bytes)
|
|
161
191
|
}
|
|
192
|
+
|
|
162
193
|
toJSON() {
|
|
163
194
|
return {
|
|
164
195
|
token: this.toString(),
|
package/src/invocation.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { parse as didParse } from 'iso-did'
|
|
2
2
|
import { randomBytes } from 'iso-web/crypto'
|
|
3
3
|
import * as Envelope from './envelope.js'
|
|
4
|
+
import { validate } from './policy.js'
|
|
4
5
|
import {
|
|
5
6
|
assertArgs,
|
|
6
7
|
assertExpiration,
|
|
@@ -58,39 +59,41 @@ export class Invocation {
|
|
|
58
59
|
)({ envelope: bytes })
|
|
59
60
|
|
|
60
61
|
if (envelope.spec !== 'inv') {
|
|
61
|
-
throw new
|
|
62
|
-
`Invalid envelope type. Expected
|
|
62
|
+
throw new TypeError(
|
|
63
|
+
`Invalid envelope type. Expected "inv" but got "${envelope.spec}"`
|
|
63
64
|
)
|
|
64
65
|
}
|
|
65
|
-
assertStructure(envelope.payload)
|
|
66
|
-
await verifySignature(
|
|
67
|
-
envelope,
|
|
68
|
-
options.verifierResolver,
|
|
69
|
-
options.didResolver
|
|
70
|
-
)
|
|
71
|
-
|
|
72
66
|
// Audience or subject must match receiver
|
|
73
67
|
if (
|
|
74
68
|
envelope.payload.aud !== audience.did &&
|
|
75
69
|
envelope.payload.sub !== audience.did
|
|
76
70
|
) {
|
|
77
|
-
throw new
|
|
71
|
+
throw new TypeError(
|
|
78
72
|
`UCAN Invocation audience or subject does not match receiver. Expected: ${audience.did} but got: ${envelope.payload.aud ?? envelope.payload.sub ?? 'null'}`
|
|
79
73
|
)
|
|
80
74
|
}
|
|
81
75
|
|
|
82
|
-
|
|
76
|
+
assertStructure(envelope.payload)
|
|
77
|
+
await verifySignature(
|
|
78
|
+
envelope,
|
|
79
|
+
options.verifierResolver,
|
|
80
|
+
options.didResolver
|
|
81
|
+
)
|
|
83
82
|
|
|
83
|
+
// Resolve and validate proofs
|
|
84
84
|
/** @type {Delegation[]} */
|
|
85
85
|
const proofs = []
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
86
|
+
const iss = didParse(envelope.payload.iss)
|
|
87
|
+
if (iss.did !== envelope.payload.sub) {
|
|
88
|
+
for (const proof of envelope.payload.prf) {
|
|
89
|
+
const delegation = await options.resolveProof(proof)
|
|
90
|
+
await delegation.validate(options)
|
|
91
|
+
proofs.push(delegation)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
assertProofs(envelope.payload, proofs)
|
|
90
95
|
}
|
|
91
96
|
|
|
92
|
-
assertProofs(envelope.payload, proofs)
|
|
93
|
-
|
|
94
97
|
const _cid = await cid(envelope)
|
|
95
98
|
return new Invocation(envelope, bytes, _cid, proofs)
|
|
96
99
|
}
|
|
@@ -126,7 +129,14 @@ export class Invocation {
|
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
assertStructure(payload)
|
|
129
|
-
|
|
132
|
+
|
|
133
|
+
if (options.iss.did !== options.sub) {
|
|
134
|
+
for (const proof of options.prf) {
|
|
135
|
+
await proof.validate(options)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
assertProofs(payload, options.prf)
|
|
139
|
+
}
|
|
130
140
|
|
|
131
141
|
const { signature, signaturePayload } = await Envelope.sign({
|
|
132
142
|
spec: 'inv',
|
|
@@ -193,6 +203,12 @@ export function assertProofs(payload, proofs) {
|
|
|
193
203
|
const currentAudience = didParse(current.aud)
|
|
194
204
|
const currentSubject = didParse(current.sub ?? payload.sub)
|
|
195
205
|
|
|
206
|
+
if (!validate(payload.args, current.pol)) {
|
|
207
|
+
throw new Error(
|
|
208
|
+
`UCAN Invocation invalid arguments, expected ${JSON.stringify(payload.args)} to be valid for policy ${JSON.stringify(current.pol)} `
|
|
209
|
+
)
|
|
210
|
+
}
|
|
211
|
+
|
|
196
212
|
const nextProof = proofs[index + 1]
|
|
197
213
|
/** @type {import("./types.js").Payload} */
|
|
198
214
|
let next
|
package/src/policy.js
CHANGED
|
@@ -261,7 +261,7 @@ function evaluateStatement(args, statement) {
|
|
|
261
261
|
/**
|
|
262
262
|
* Validates invocation arguments against a UCAN policy.
|
|
263
263
|
*
|
|
264
|
-
* @template {
|
|
264
|
+
* @template {unknown} Args
|
|
265
265
|
* @param {Args} args The arguments of the eventual invocation.
|
|
266
266
|
* @param {import("./types.js").Policy<Args>} policy An array of policy statements.
|
|
267
267
|
* @returns {boolean} True if the args are valid according to the policy, false otherwise.
|
package/src/store.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { parse as didParse } from 'iso-did'
|
|
2
2
|
import { KV } from 'iso-kv'
|
|
3
3
|
import merge from 'it-merge'
|
|
4
|
+
import { Delegation } from './delegation.js'
|
|
5
|
+
import { validate } from './policy.js'
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
|
-
* @import {Delegation} from './delegation.js'
|
|
7
8
|
* @import {Driver} from 'iso-kv'
|
|
8
9
|
* @import {CID} from 'multiformats'
|
|
9
10
|
*/
|
|
@@ -43,7 +44,7 @@ export class Store {
|
|
|
43
44
|
const cid = delegation.cid.toString()
|
|
44
45
|
|
|
45
46
|
// Index by CID
|
|
46
|
-
await this.kv.set([cid], delegation, options)
|
|
47
|
+
await this.kv.set([cid], delegation.toString(), options)
|
|
47
48
|
|
|
48
49
|
// Index by subject and audience
|
|
49
50
|
/** @type {string | null} */
|
|
@@ -68,8 +69,14 @@ export class Store {
|
|
|
68
69
|
*
|
|
69
70
|
* @param {string} cid
|
|
70
71
|
*/
|
|
71
|
-
get(cid) {
|
|
72
|
-
|
|
72
|
+
async get(cid) {
|
|
73
|
+
const str = await /** @type {typeof this.kv.get<string>} */ (this.kv.get)([
|
|
74
|
+
cid,
|
|
75
|
+
])
|
|
76
|
+
if (!str) {
|
|
77
|
+
return undefined
|
|
78
|
+
}
|
|
79
|
+
return await Delegation.fromString(str)
|
|
73
80
|
}
|
|
74
81
|
|
|
75
82
|
/**
|
|
@@ -88,7 +95,7 @@ export class Store {
|
|
|
88
95
|
/**
|
|
89
96
|
* List proofs by sub and aud
|
|
90
97
|
*
|
|
91
|
-
* @param {import('./types.js').StoreProofsOptions} options
|
|
98
|
+
* @param {Omit<import('./types.js').StoreProofsOptions, 'args'>} options
|
|
92
99
|
*/
|
|
93
100
|
async *proofs(options) {
|
|
94
101
|
/**@type {string | null} */
|
|
@@ -127,7 +134,7 @@ export class Store {
|
|
|
127
134
|
* @param {import('./types.js').StoreProofsOptions} options
|
|
128
135
|
* @returns {Promise<Delegation[]>}
|
|
129
136
|
*/
|
|
130
|
-
async chain({ aud, sub, cmd }) {
|
|
137
|
+
async chain({ aud, sub, cmd, args }) {
|
|
131
138
|
// console.log('🚀 ~ aud', aud, 'sub', sub, 'cmd', cmd)
|
|
132
139
|
const parents = parentCmds(cmd)
|
|
133
140
|
|
|
@@ -138,6 +145,7 @@ export class Store {
|
|
|
138
145
|
|
|
139
146
|
for await (const proof of sources) {
|
|
140
147
|
if (!parents.includes(proof.cmd)) continue
|
|
148
|
+
if (!validate(args, proof.pol)) continue
|
|
141
149
|
|
|
142
150
|
// If root, return this proof as the end of the path
|
|
143
151
|
if (proof.sub === didParse(proof.iss).did) {
|
|
@@ -151,6 +159,7 @@ export class Store {
|
|
|
151
159
|
aud: didParse(proof.iss).did,
|
|
152
160
|
sub: proof.sub ? proof.sub : sub,
|
|
153
161
|
cmd: proof.cmd,
|
|
162
|
+
args,
|
|
154
163
|
})
|
|
155
164
|
if (nextPath?.length) {
|
|
156
165
|
return [proof, ...nextPath]
|
package/src/types.ts
CHANGED
|
@@ -41,11 +41,11 @@ export type CborValue = CborPrimitive | CborArray | CborObject
|
|
|
41
41
|
* Delegation
|
|
42
42
|
*/
|
|
43
43
|
|
|
44
|
-
export interface DelegationOptions<
|
|
44
|
+
export interface DelegationOptions<Schema extends StandardSchemaV1> {
|
|
45
45
|
iss: ISigner
|
|
46
46
|
aud: DID
|
|
47
47
|
sub: DID | null
|
|
48
|
-
pol: Policy<
|
|
48
|
+
pol: Policy<StandardSchemaV1.InferOutput<Schema>>
|
|
49
49
|
/**
|
|
50
50
|
* Expiration time in seconds or null for no expiration
|
|
51
51
|
*/
|
|
@@ -65,23 +65,16 @@ export interface DelegationOptions<Args = unknown> {
|
|
|
65
65
|
meta?: CborObject
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
export interface
|
|
69
|
-
bytes: Uint8Array
|
|
68
|
+
export interface DelegationValidateOptions {
|
|
70
69
|
isRevoked?: IsRevoked
|
|
71
70
|
didResolver?: DidResolver
|
|
72
71
|
verifierResolver: VerifierResolver
|
|
73
72
|
}
|
|
74
73
|
|
|
75
|
-
export interface DelegationValidateOptions {
|
|
76
|
-
|
|
77
|
-
didResolver?: DidResolver
|
|
78
|
-
verifierResolver: VerifierResolver
|
|
74
|
+
export interface DelegationFromOptions extends DelegationValidateOptions {
|
|
75
|
+
bytes: Uint8Array
|
|
79
76
|
}
|
|
80
77
|
|
|
81
|
-
export type CapabilityDelegateOptions<Args = unknown> = Omit<
|
|
82
|
-
DelegationOptions<Args>,
|
|
83
|
-
'cmd'
|
|
84
|
-
>
|
|
85
78
|
/**
|
|
86
79
|
* Invocation
|
|
87
80
|
*/
|
|
@@ -89,7 +82,7 @@ export type CapabilityDelegateOptions<Args = unknown> = Omit<
|
|
|
89
82
|
/**
|
|
90
83
|
* Invocation options
|
|
91
84
|
*/
|
|
92
|
-
export interface InvocationOptions {
|
|
85
|
+
export interface InvocationOptions extends DelegationValidateOptions {
|
|
93
86
|
iss: ISigner
|
|
94
87
|
aud?: DID
|
|
95
88
|
sub: DID
|
|
@@ -118,18 +111,50 @@ export interface InvocationOptions {
|
|
|
118
111
|
meta?: CborObject
|
|
119
112
|
}
|
|
120
113
|
|
|
121
|
-
export interface InvocationFromOptions {
|
|
114
|
+
export interface InvocationFromOptions extends DelegationValidateOptions {
|
|
122
115
|
bytes: Uint8Array
|
|
123
116
|
audience: VerifiableDID
|
|
124
|
-
didResolver?: DidResolver
|
|
125
|
-
verifierResolver: VerifierResolver
|
|
126
|
-
isRevoked?: IsRevoked
|
|
127
117
|
resolveProof: ResolveProof
|
|
128
118
|
}
|
|
129
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Capability types
|
|
122
|
+
*/
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Capability options
|
|
126
|
+
*/
|
|
127
|
+
export interface CapabilityOptions<
|
|
128
|
+
Schema extends StandardSchemaV1,
|
|
129
|
+
Cmd extends string = string,
|
|
130
|
+
> extends DelegationValidateOptions {
|
|
131
|
+
schema: Schema
|
|
132
|
+
cmd: Cmd
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Delegate a capability
|
|
137
|
+
*/
|
|
138
|
+
export interface CapabilityDelegateOptions<Schema extends StandardSchemaV1>
|
|
139
|
+
extends Omit<DelegationOptions<Schema>, 'cmd'> {
|
|
140
|
+
/**
|
|
141
|
+
* Store to add the delegation to
|
|
142
|
+
*/
|
|
143
|
+
store: Store
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Invoke a capability
|
|
148
|
+
*/
|
|
130
149
|
export interface CapabilityInvokeOptions<Schema extends StandardSchemaV1>
|
|
131
|
-
extends Omit<
|
|
150
|
+
extends Omit<
|
|
151
|
+
InvocationOptions,
|
|
152
|
+
'cmd' | 'args' | 'prf' | 'verifierResolver' | 'didResolver' | 'isRevoked'
|
|
153
|
+
> {
|
|
132
154
|
args: StandardSchemaV1.InferOutput<Schema>
|
|
155
|
+
/**
|
|
156
|
+
* Store to resolve proofs from
|
|
157
|
+
*/
|
|
133
158
|
store: Store
|
|
134
159
|
}
|
|
135
160
|
|
|
@@ -144,6 +169,7 @@ export interface StoreProofsOptions {
|
|
|
144
169
|
aud?: DID
|
|
145
170
|
sub: DID | null
|
|
146
171
|
cmd: string
|
|
172
|
+
args: CborObject
|
|
147
173
|
}
|
|
148
174
|
|
|
149
175
|
/**
|
package/src/utils.js
CHANGED
|
@@ -2,7 +2,7 @@ import * as dagCbor from '@ipld/dag-cbor'
|
|
|
2
2
|
import { DID } from 'iso-did'
|
|
3
3
|
import { CID } from 'multiformats/cid'
|
|
4
4
|
import { sha256 } from 'multiformats/hashes/sha2'
|
|
5
|
-
import { z } from 'zod'
|
|
5
|
+
import { z } from 'zod/v4'
|
|
6
6
|
|
|
7
7
|
import * as Envelope from './envelope.js'
|
|
8
8
|
import * as varsig from './varsig.js'
|
|
@@ -94,7 +94,6 @@ export function isSigAndDidCompatible(did, sigType) {
|
|
|
94
94
|
*/
|
|
95
95
|
export function assertExpiration(exp) {
|
|
96
96
|
const now = nowInSeconds()
|
|
97
|
-
|
|
98
97
|
if (exp !== null && !Number.isSafeInteger(exp)) {
|
|
99
98
|
throw new TypeError(
|
|
100
99
|
`UCAN expiration must be null or a safe integer. Received: ${exp}`
|
|
@@ -127,6 +126,7 @@ export function assertNotBefore(nbf) {
|
|
|
127
126
|
*/
|
|
128
127
|
export async function validateIssuerAndSignature(envelope, didResolver) {
|
|
129
128
|
const issuer = await DID.fromString(envelope.payload.iss, didResolver)
|
|
129
|
+
|
|
130
130
|
if (!isSigAndDidCompatible(issuer, envelope.alg)) {
|
|
131
131
|
throw new Error(
|
|
132
132
|
`UCAN issuer type mismatch: DID ${issuer.verifiableDid.type} and Signature ${envelope.alg} are not compatible`
|
|
@@ -238,7 +238,7 @@ export function assertNonce(nonce) {
|
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
240
|
/**
|
|
241
|
-
* Assert that args is a
|
|
241
|
+
* Assert that args is a CBOR serializable object.
|
|
242
242
|
*
|
|
243
243
|
* @param {unknown} args
|
|
244
244
|
*/
|