@interop/wallet-core 0.101.1 → 0.103.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/README.md +33 -17
- package/dist/audiences/audienceGrant.d.ts +49 -0
- package/dist/audiences/audienceGrant.d.ts.map +1 -0
- package/dist/audiences/audienceGrant.js +46 -0
- package/dist/audiences/audienceGrant.js.map +1 -0
- package/dist/audiences/index.d.ts +10 -0
- package/dist/audiences/index.d.ts.map +1 -0
- package/dist/audiences/index.js +10 -0
- package/dist/audiences/index.js.map +1 -0
- package/dist/clientAnnex/grantRevocation.d.ts +0 -10
- package/dist/clientAnnex/grantRevocation.d.ts.map +1 -1
- package/dist/clientAnnex/grantRevocation.js +1 -23
- package/dist/clientAnnex/grantRevocation.js.map +1 -1
- package/dist/clientAnnex/index.d.ts +1 -1
- package/dist/clientAnnex/index.d.ts.map +1 -1
- package/dist/clientAnnex/index.js +1 -1
- package/dist/clientAnnex/index.js.map +1 -1
- package/dist/clientAnnex/log.d.ts +2 -1
- package/dist/clientAnnex/log.d.ts.map +1 -1
- package/dist/clientAnnex/log.js +5 -2
- package/dist/clientAnnex/log.js.map +1 -1
- package/dist/clients/rosterPolicy.d.ts.map +1 -1
- package/dist/clients/rosterPolicy.js +3 -1
- package/dist/clients/rosterPolicy.js.map +1 -1
- package/dist/connections/didKey.d.ts +27 -0
- package/dist/connections/didKey.d.ts.map +1 -1
- package/dist/connections/didKey.js +42 -6
- package/dist/connections/didKey.js.map +1 -1
- package/dist/connections/entry.d.ts +95 -13
- package/dist/connections/entry.d.ts.map +1 -1
- package/dist/connections/entry.js +102 -16
- package/dist/connections/entry.js.map +1 -1
- package/dist/connections/grants.d.ts +225 -3
- package/dist/connections/grants.d.ts.map +1 -1
- package/dist/connections/grants.js +293 -8
- package/dist/connections/grants.js.map +1 -1
- package/dist/connections/index.d.ts +15 -8
- package/dist/connections/index.d.ts.map +1 -1
- package/dist/connections/index.js +13 -6
- package/dist/connections/index.js.map +1 -1
- package/dist/connections/read.d.ts.map +1 -1
- package/dist/connections/read.js +2 -1
- package/dist/connections/read.js.map +1 -1
- package/dist/connections/resourceId.d.ts +33 -0
- package/dist/connections/resourceId.d.ts.map +1 -1
- package/dist/connections/resourceId.js +88 -8
- package/dist/connections/resourceId.js.map +1 -1
- package/dist/connections/upsert.d.ts +219 -7
- package/dist/connections/upsert.d.ts.map +1 -1
- package/dist/connections/upsert.js +628 -41
- package/dist/connections/upsert.js.map +1 -1
- package/dist/connections/writers.js +2 -1
- package/dist/connections/writers.js.map +1 -1
- package/dist/descriptors/index.d.ts +5 -0
- package/dist/descriptors/index.d.ts.map +1 -1
- package/dist/descriptors/index.js +5 -0
- package/dist/descriptors/index.js.map +1 -1
- package/dist/descriptors/logSource.d.ts +9 -4
- package/dist/descriptors/logSource.d.ts.map +1 -1
- package/dist/descriptors/logSource.js +13 -6
- package/dist/descriptors/logSource.js.map +1 -1
- package/dist/jsonObject.d.ts +16 -0
- package/dist/jsonObject.d.ts.map +1 -0
- package/dist/jsonObject.js +18 -0
- package/dist/jsonObject.js.map +1 -0
- package/dist/keys/index.d.ts +13 -9
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +11 -7
- package/dist/keys/index.js.map +1 -1
- package/dist/keys/userKeyCascade.d.ts +46 -0
- package/dist/keys/userKeyCascade.d.ts.map +1 -1
- package/dist/keys/userKeyCascade.js +153 -65
- package/dist/keys/userKeyCascade.js.map +1 -1
- package/dist/keys/userKeyRoster.d.ts +60 -7
- package/dist/keys/userKeyRoster.d.ts.map +1 -1
- package/dist/keys/userKeyRoster.js +165 -47
- package/dist/keys/userKeyRoster.js.map +1 -1
- package/dist/keys/userKeyRosterCascade.d.ts.map +1 -1
- package/dist/keys/userKeyRosterCascade.js +1 -0
- package/dist/keys/userKeyRosterCascade.js.map +1 -1
- package/dist/menders/ids.d.ts +1 -1
- package/dist/menders/ids.d.ts.map +1 -1
- package/dist/menders/ids.js +20 -4
- package/dist/menders/ids.js.map +1 -1
- package/dist/space/collections.d.ts +23 -3
- package/dist/space/collections.d.ts.map +1 -1
- package/dist/space/collections.js +26 -2
- package/dist/space/collections.js.map +1 -1
- package/dist/space/inboxMessage.d.ts +47 -0
- package/dist/space/inboxMessage.d.ts.map +1 -0
- package/dist/space/inboxMessage.js +86 -0
- package/dist/space/inboxMessage.js.map +1 -0
- package/dist/space/index.d.ts +6 -1
- package/dist/space/index.d.ts.map +1 -1
- package/dist/space/index.js +5 -1
- package/dist/space/index.js.map +1 -1
- package/dist/sync/contactsConflict.d.ts +23 -10
- package/dist/sync/contactsConflict.d.ts.map +1 -1
- package/dist/sync/contactsConflict.js +40 -21
- package/dist/sync/contactsConflict.js.map +1 -1
- package/dist/webvh/didWebProjection.d.ts +38 -5
- package/dist/webvh/didWebProjection.d.ts.map +1 -1
- package/dist/webvh/didWebProjection.js +35 -22
- package/dist/webvh/didWebProjection.js.map +1 -1
- package/dist/webvh/index.d.ts +4 -3
- package/dist/webvh/index.d.ts.map +1 -1
- package/dist/webvh/index.js +4 -3
- package/dist/webvh/index.js.map +1 -1
- package/dist/webvh/standingZcap.d.ts +19 -2
- package/dist/webvh/standingZcap.d.ts.map +1 -1
- package/dist/webvh/standingZcap.js +31 -3
- package/dist/webvh/standingZcap.js.map +1 -1
- package/package.json +11 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connections/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connections/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EACX,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACpB,6BAA6B,EAC7B,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,SAAS,EACT,iBAAiB,EAClB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3D,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -16,9 +16,16 @@
|
|
|
16
16
|
* - The grant index the revocation orchestrators share
|
|
17
17
|
* (`connectionGrants`, `grantTargets`, `splitGrantsByExpiry`,
|
|
18
18
|
* `grantRecipientKid`), with the reader checks every reader applies.
|
|
19
|
+
* - The agent-connection readers: the received list (`receivedGrants`,
|
|
20
|
+
* `receivedGrantLapsed`, `liveInboxChannel`), the latest grant per scope
|
|
21
|
+
* (`latestGrantsPerScope`), a consent's renewal scope
|
|
22
|
+
* (`renewalScopeGrants`), the renewal predicate (`agentGrantDue`,
|
|
23
|
+
* `AGENT_GRANT_RENEWAL_WINDOW_MS`), and `agentConnectionsSignedBy`.
|
|
19
24
|
* - The upsert helpers (`recordGrants`, `removeGrants`, `retireConnection`,
|
|
20
25
|
* `unretireConnection`, `setConnectionLabel`) and their kind refusal
|
|
21
|
-
* (`ConnectionKindMismatchError`)
|
|
26
|
+
* (`ConnectionKindMismatchError`), and the agent-connection helpers
|
|
27
|
+
* (`recordReceivedGrants`, `recordRenewedGrants`, `settleOutboxItem`,
|
|
28
|
+
* `pruneSupersededGrants`, `clearReceivedGrants`, `markDeclined`).
|
|
22
29
|
* - The writer arm: lazy registration (`registerConnectionWriter`), the
|
|
23
30
|
* pull-path touch (`touchConnectionWriter`), the per-entry sweep
|
|
24
31
|
* (`sweepConnectionWriters`), and `resolveWriter` for history views.
|
|
@@ -26,14 +33,14 @@
|
|
|
26
33
|
* and the account document, and `normalizeDisplayName`, the one name rule
|
|
27
34
|
* every producer writes `name` through.
|
|
28
35
|
*/
|
|
29
|
-
export { CONNECTION_ENTRY_VERSION, CONNECTION_KINDS, CONNECTION_WRITER_POLICY, GRANT_KINDS, connectionKindOf, connectionWriterPolicy, grantKindOf, isWritableConnectionEntry, parseConnectionEntry } from './entry.js';
|
|
30
|
-
export { CONNECTIONS_ID_PREFIX, connectionResourceId } from './resourceId.js';
|
|
36
|
+
export { CONNECTION_ENTRY_VERSION, CONNECTION_KINDS, CONNECTION_SEED_BYTES, CONNECTION_WRITER_POLICY, GRANT_KINDS, RECEIVED_GRANT_KINDS, connectionKindOf, decodeConnectionSeed, connectionWriterPolicy, grantKindOf, isWritableConnectionEntry, parseConnectionEntry } from './entry.js';
|
|
37
|
+
export { CONNECTIONS_ID_PREFIX, connectionResourceId, connectionSeedTag, verifyConnectionSeedTag } from './resourceId.js';
|
|
31
38
|
export { wasConnectionsStore } from './store.js';
|
|
32
39
|
export { findConnection, readConnections } from './read.js';
|
|
33
|
-
export { collectionIdInSpace, connectionGrants, grantRecipientKid, grantTargets, isTargetInSpace, splitGrantsByExpiry } from './grants.js';
|
|
34
|
-
export { connectionRecipientKid, signingKeyMultibaseOfDid } from './didKey.js';
|
|
40
|
+
export { AGENT_GRANT_RENEWAL_WINDOW_MS, agentConnectionsSignedBy, agentGrantDue, collectionIdInSpace, connectionGrants, grantRecipientKid, grantTargets, isTargetInSpace, grantScopeKey, latestGrantsPerScope, latestIndexPerScope, liveInboxChannel, receivedGrantLapsed, receivedGrants, renewalScopeGrants, splitGrantsByExpiry } from './grants.js';
|
|
41
|
+
export { connectionDidKey, connectionRecipientKid, signingKeyMultibaseOfDid } from './didKey.js';
|
|
35
42
|
export { ConnectionKindMismatchError } from './errors.js';
|
|
36
|
-
export { recordGrants, removeGrants, retireConnection, setConnectionLabel, unretireConnection } from './upsert.js';
|
|
43
|
+
export { clearReceivedGrants, markDeclined, pruneSupersededGrants, recordGrants, recordReceivedGrants, recordRenewedGrants, removeGrants, retireConnection, setConnectionLabel, settleOutboxItem, unretireConnection } from './upsert.js';
|
|
37
44
|
export { registerConnectionWriter, resolveWriter, sweepConnectionWriters, touchConnectionWriter } from './writers.js';
|
|
38
45
|
export { normalizeDisplayName } from '../labelText.js';
|
|
39
46
|
export { CONNECTIONS_COLLECTION } from '../space/collections.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connections/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connections/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EACX,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAanB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3D,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,cAAc,CAAA;AASrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/connections/read.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/connections/read.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,KAAK,EAAE,eAAe,CAAA;IACtB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB;;;OAGG;IACH,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;OAGG;IACH,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,EACtC,IAAI,EACJ,OAAO,EACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,eAAe,CAAA;CACzB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAe9B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,EACpC,KAAK,EACL,OAAO,EACR,EAAE;IACD,KAAK,EAAE,gBAAgB,CAAA;IACvB,OAAO,EAAE,eAAe,CAAA;CACzB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAwCrC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,GAAG,EACJ,EAAE;IACD,OAAO,EAAE,kBAAkB,CAAA;IAC3B,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,cAAc,GAAG,SAAS,CAE7B"}
|
package/dist/connections/read.js
CHANGED
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* derives to just to look the party up, since the host would then learn which
|
|
11
11
|
* id belongs to which DID and whether that DID has an entry.
|
|
12
12
|
*/
|
|
13
|
-
import { isJsonObject
|
|
13
|
+
import { isJsonObject } from '../jsonObject.js';
|
|
14
|
+
import { parseConnectionEntry } from './entry.js';
|
|
14
15
|
import { connectionResourceId } from './resourceId.js';
|
|
15
16
|
/**
|
|
16
17
|
* The resource id a stored body claims by its own members: its `id`, or its
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/connections/read.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;GAQG;AACH,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/connections/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,4 +33,37 @@ export declare function connectionResourceId(options: {
|
|
|
33
33
|
writerId: string;
|
|
34
34
|
did?: undefined;
|
|
35
35
|
}): Promise<string>;
|
|
36
|
+
/**
|
|
37
|
+
* The tag an entry stores beside its pairwise `seed`: {@link seedTagBytes}
|
|
38
|
+
* in the seed's own encoding. A seed that is not 32 bytes of base64url is
|
|
39
|
+
* refused with a `TypeError`.
|
|
40
|
+
*
|
|
41
|
+
* @param options {object}
|
|
42
|
+
* @param options.hmacKey {ConnectionIdKey} the collection's blinded-index
|
|
43
|
+
* key
|
|
44
|
+
* @param options.seed {string} the seed, base64url with no padding
|
|
45
|
+
* @returns {Promise<string>}
|
|
46
|
+
*/
|
|
47
|
+
export declare function connectionSeedTag({ hmacKey, seed }: {
|
|
48
|
+
hmacKey: ConnectionIdKey;
|
|
49
|
+
seed: string;
|
|
50
|
+
}): Promise<string>;
|
|
51
|
+
/**
|
|
52
|
+
* Whether a stored `seedTag` is the tag of a stored `seed` under this
|
|
53
|
+
* directory's blinded-index key. A malformed seed or tag reads as `false`.
|
|
54
|
+
* Every site that turns a seed into a key asks this first and fails closed
|
|
55
|
+
* on `false`.
|
|
56
|
+
*
|
|
57
|
+
* @param options {object}
|
|
58
|
+
* @param options.hmacKey {ConnectionIdKey} the collection's blinded-index
|
|
59
|
+
* key
|
|
60
|
+
* @param options.seed {string} the stored seed
|
|
61
|
+
* @param options.seedTag {string} the stored tag
|
|
62
|
+
* @returns {Promise<boolean>}
|
|
63
|
+
*/
|
|
64
|
+
export declare function verifyConnectionSeedTag({ hmacKey, seed, seedTag }: {
|
|
65
|
+
hmacKey: ConnectionIdKey;
|
|
66
|
+
seed: string;
|
|
67
|
+
seedTag: string;
|
|
68
|
+
}): Promise<boolean>;
|
|
36
69
|
//# sourceMappingURL=resourceId.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceId.d.ts","sourceRoot":"","sources":["../../src/connections/resourceId.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resourceId.d.ts","sourceRoot":"","sources":["../../src/connections/resourceId.ts"],"names":[],"mappings":"AAmCA;;GAEG;AACH,eAAO,MAAM,qBAAqB,mBAAmB,CAAA;AAErD;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GACzB,UAAU,GAAG;IAAE,IAAI,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAAE,CAAA;AAsB3E;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EACH;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,GAC/D;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GAClE,OAAO,CAAC,MAAM,CAAC,CAWjB;AAyBD;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,IAAI,EACL,EAAE;IACD,OAAO,EAAE,eAAe,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CASlB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAAC,EAC5C,OAAO,EACP,IAAI,EACJ,OAAO,EACR,EAAE;IACD,OAAO,EAAE,eAAe,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnB"}
|
|
@@ -2,14 +2,24 @@
|
|
|
2
2
|
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* The directory's resource id
|
|
5
|
+
* The directory's two keyed values: the resource id where one party's entry
|
|
6
|
+
* lives, and the tag over an entry's pairwise seed. Both are HMAC-SHA-256
|
|
7
|
+
* under the collection's blinded-index key, domain-separated by the
|
|
8
|
+
* `connections/v1` prefix and an arm name, so one key signs no two kinds of
|
|
9
|
+
* input under the same bytes.
|
|
6
10
|
*
|
|
7
11
|
* The id is the first 16 bytes of
|
|
8
12
|
* `HMAC-SHA-256(hmacKey, utf8('connections/v1' + '|' + armInput))`, formatted
|
|
9
|
-
* with was-client's `edvIdFromBytes`. `
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
+
* with was-client's `edvIdFromBytes`. `armInput` is `'did:' + did` for a
|
|
14
|
+
* party with a DID and `'writer:' + writerId` for a keyless writer. The
|
|
15
|
+
* account DID is not an input.
|
|
16
|
+
*
|
|
17
|
+
* The seed tag is the full 32 bytes of
|
|
18
|
+
* `HMAC-SHA-256(hmacKey, utf8('connections/v1' + '|' + 'seed:') || seedBytes)`,
|
|
19
|
+
* base64url with no padding. The blinded-index key is wrapped to the user
|
|
20
|
+
* key's KAK in the descriptor and the descriptor is log-governed, so the host
|
|
21
|
+
* lacks it: a seed the host planted on an entry carries no tag that verifies,
|
|
22
|
+
* and every site that turns a seed into a key checks the tag first.
|
|
13
23
|
*
|
|
14
24
|
* Keying the id stops the storage host from computing the id of a guessed
|
|
15
25
|
* DID and probing for it. The protection lasts only while reads keep it: a
|
|
@@ -18,11 +28,27 @@
|
|
|
18
28
|
*/
|
|
19
29
|
import { hmac } from '@noble/hashes/hmac.js';
|
|
20
30
|
import { sha256 } from '@noble/hashes/sha2.js';
|
|
31
|
+
import { equalBytes } from '@noble/ciphers/utils.js';
|
|
32
|
+
import { base64urlnopad } from '@scure/base';
|
|
21
33
|
import { edvIdFromBytes } from '@interop/was-client/edv/cipher';
|
|
34
|
+
import { decodeConnectionSeed } from './entry.js';
|
|
22
35
|
/**
|
|
23
36
|
* The domain prefix of every directory resource id.
|
|
24
37
|
*/
|
|
25
38
|
export const CONNECTIONS_ID_PREFIX = 'connections/v1';
|
|
39
|
+
/**
|
|
40
|
+
* HMAC-SHA-256 under the blinded-index key, in either form.
|
|
41
|
+
*
|
|
42
|
+
* @param options {object}
|
|
43
|
+
* @param options.hmacKey {ConnectionIdKey}
|
|
44
|
+
* @param options.data {Uint8Array}
|
|
45
|
+
* @returns {Promise<Uint8Array>}
|
|
46
|
+
*/
|
|
47
|
+
async function keyedMac({ hmacKey, data }) {
|
|
48
|
+
return hmacKey instanceof Uint8Array
|
|
49
|
+
? hmac(sha256, hmacKey, data)
|
|
50
|
+
: hmacKey.sign({ data });
|
|
51
|
+
}
|
|
26
52
|
/**
|
|
27
53
|
* The resource id of a party's entry (`did`) or of a keyless writer's entry
|
|
28
54
|
* (`writerId`). Exactly one of the two is given.
|
|
@@ -41,9 +67,63 @@ export async function connectionResourceId(options) {
|
|
|
41
67
|
}
|
|
42
68
|
const armInput = did !== undefined ? `did:${did}` : `writer:${writerId}`;
|
|
43
69
|
const data = new TextEncoder().encode(`${CONNECTIONS_ID_PREFIX}|${armInput}`);
|
|
44
|
-
const mac = hmacKey
|
|
45
|
-
? hmac(sha256, hmacKey, data)
|
|
46
|
-
: await hmacKey.sign({ data });
|
|
70
|
+
const mac = await keyedMac({ hmacKey, data });
|
|
47
71
|
return edvIdFromBytes(mac.subarray(0, 16));
|
|
48
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* The tag bytes over a seed: the full MAC over the `seed:` arm's prefix
|
|
75
|
+
* followed by the raw seed bytes.
|
|
76
|
+
*
|
|
77
|
+
* @param options {object}
|
|
78
|
+
* @param options.hmacKey {ConnectionIdKey}
|
|
79
|
+
* @param options.seedBytes {Uint8Array}
|
|
80
|
+
* @returns {Promise<Uint8Array>}
|
|
81
|
+
*/
|
|
82
|
+
async function seedTagBytes({ hmacKey, seedBytes }) {
|
|
83
|
+
const prefix = new TextEncoder().encode(`${CONNECTIONS_ID_PREFIX}|seed:`);
|
|
84
|
+
const data = new Uint8Array(prefix.length + seedBytes.length);
|
|
85
|
+
data.set(prefix);
|
|
86
|
+
data.set(seedBytes, prefix.length);
|
|
87
|
+
return keyedMac({ hmacKey, data });
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The tag an entry stores beside its pairwise `seed`: {@link seedTagBytes}
|
|
91
|
+
* in the seed's own encoding. A seed that is not 32 bytes of base64url is
|
|
92
|
+
* refused with a `TypeError`.
|
|
93
|
+
*
|
|
94
|
+
* @param options {object}
|
|
95
|
+
* @param options.hmacKey {ConnectionIdKey} the collection's blinded-index
|
|
96
|
+
* key
|
|
97
|
+
* @param options.seed {string} the seed, base64url with no padding
|
|
98
|
+
* @returns {Promise<string>}
|
|
99
|
+
*/
|
|
100
|
+
export async function connectionSeedTag({ hmacKey, seed }) {
|
|
101
|
+
const seedBytes = decodeConnectionSeed(seed);
|
|
102
|
+
if (seedBytes === undefined) {
|
|
103
|
+
throw new TypeError('A connection seed is 43 characters of base64url with no padding, ' +
|
|
104
|
+
'decoding to 32 bytes.');
|
|
105
|
+
}
|
|
106
|
+
return base64urlnopad.encode(await seedTagBytes({ hmacKey, seedBytes }));
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Whether a stored `seedTag` is the tag of a stored `seed` under this
|
|
110
|
+
* directory's blinded-index key. A malformed seed or tag reads as `false`.
|
|
111
|
+
* Every site that turns a seed into a key asks this first and fails closed
|
|
112
|
+
* on `false`.
|
|
113
|
+
*
|
|
114
|
+
* @param options {object}
|
|
115
|
+
* @param options.hmacKey {ConnectionIdKey} the collection's blinded-index
|
|
116
|
+
* key
|
|
117
|
+
* @param options.seed {string} the stored seed
|
|
118
|
+
* @param options.seedTag {string} the stored tag
|
|
119
|
+
* @returns {Promise<boolean>}
|
|
120
|
+
*/
|
|
121
|
+
export async function verifyConnectionSeedTag({ hmacKey, seed, seedTag }) {
|
|
122
|
+
const seedBytes = decodeConnectionSeed(seed);
|
|
123
|
+
const tagBytes = decodeConnectionSeed(seedTag);
|
|
124
|
+
if (seedBytes === undefined || tagBytes === undefined) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
return equalBytes(await seedTagBytes({ hmacKey, seedBytes }), tagBytes);
|
|
128
|
+
}
|
|
49
129
|
//# sourceMappingURL=resourceId.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceId.js","sourceRoot":"","sources":["../../src/connections/resourceId.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"resourceId.js","sourceRoot":"","sources":["../../src/connections/resourceId.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAA;AAWrD;;;;;;;GAOG;AACH,KAAK,UAAU,QAAQ,CAAC,EACtB,OAAO,EACP,IAAI,EAIL;IACC,OAAO,OAAO,YAAY,UAAU;QAClC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;QAC7B,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;AAC5B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAEmE;IAEnE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC1C,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,SAAS,CACjB,qEAAqE,CACtE,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAA;IACxE,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,qBAAqB,IAAI,QAAQ,EAAE,CAAC,CAAA;IAC7E,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,YAAY,CAAC,EAC1B,OAAO,EACP,SAAS,EAIV;IACC,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,qBAAqB,QAAQ,CAAC,CAAA;IACzE,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;IAC7D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAChB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAClC,OAAO,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,OAAO,EACP,IAAI,EAIL;IACC,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CACjB,mEAAmE;YACjE,uBAAuB,CAC1B,CAAA;IACH,CAAC;IACD,OAAO,cAAc,CAAC,MAAM,CAAC,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,EAC5C,OAAO,EACP,IAAI,EACJ,OAAO,EAKR;IACC,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAC9C,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;AACzE,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import type { ConnectionEntry, ConnectionKind, GrantKind, ReceivedGrantKind } from './entry.js';
|
|
2
5
|
import type { ConnectionIdKey } from './resourceId.js';
|
|
3
6
|
import type { ConnectionsStore } from './store.js';
|
|
4
7
|
/**
|
|
@@ -83,9 +86,26 @@ export declare function writeConnection<Stop>({ store, hmacKey, resourceId, chan
|
|
|
83
86
|
* it. Each new grant is added by its capability id (one already recorded is
|
|
84
87
|
* left as stored), `name` is set when it passes the display-name rule (left
|
|
85
88
|
* as it was otherwise), `origin`, `url`, and `appKey` are set when given,
|
|
86
|
-
* `retired`
|
|
87
|
-
* only on create, and `label` is never touched.
|
|
88
|
-
*
|
|
89
|
+
* `retired` and `declined` are cleared, and `lastSeen` moves to `now`.
|
|
90
|
+
* `firstSeen` is set only on create, and `label` is never touched. Every
|
|
91
|
+
* grant of one call carries the same `grantedAt`. A zero-grant consent
|
|
92
|
+
* writes too, so an App Connect app with no grants is indexed by its key.
|
|
93
|
+
*
|
|
94
|
+
* A `message` (an envelope carrying exactly the grants of this call) is
|
|
95
|
+
* queued on `outbox` in the same write, stamped `now`, so a restore that
|
|
96
|
+
* records fresh grants and owes the party their envelope has no tear between
|
|
97
|
+
* the two. Each zcap of this call is first removed from every pending
|
|
98
|
+
* envelope that carries it (an envelope left with none is dropped), so no
|
|
99
|
+
* two pending envelopes name one zcap id. A consent torn after its write
|
|
100
|
+
* lands and re-run therefore leaves one pending envelope, the re-run's, and
|
|
101
|
+
* a grant recorded earlier with no envelope is told on the first call that
|
|
102
|
+
* brings one.
|
|
103
|
+
*
|
|
104
|
+
* A `seed` and its `seedTag` (both or neither) are written when the entry
|
|
105
|
+
* carries no seed, and left as stored when it carries the same one. An entry
|
|
106
|
+
* carrying a different seed is refused with an `Error`, since the seed is
|
|
107
|
+
* written once. A tag that does not verify under `hmacKey` is refused with a
|
|
108
|
+
* `TypeError` before anything is read.
|
|
89
109
|
*
|
|
90
110
|
* Refuses an entry of another kind with {@link ConnectionKindMismatchError},
|
|
91
111
|
* and a grant delegated to another party or targeting another Space with a
|
|
@@ -105,10 +125,15 @@ export declare function writeConnection<Stop>({ store, hmacKey, resourceId, chan
|
|
|
105
125
|
* @param [options.origin] {string} the attested Web origin (App Connect)
|
|
106
126
|
* @param [options.url] {string} the canonical app URL (App Connect)
|
|
107
127
|
* @param [options.appKey] {string} the app-key Resource id (App Connect)
|
|
128
|
+
* @param [options.seed] {string} the wallet's pairwise seed toward the
|
|
129
|
+
* party, base64url with no padding
|
|
130
|
+
* @param [options.seedTag] {string} the seed's tag (`connectionSeedTag`)
|
|
131
|
+
* @param [options.message] {object} an envelope to queue on `outbox` with
|
|
132
|
+
* the consent, carrying exactly the grants of this call
|
|
108
133
|
* @param [options.now] {Date}
|
|
109
134
|
* @returns {Promise<ConnectionWriteResult>}
|
|
110
135
|
*/
|
|
111
|
-
export declare function recordGrants({ store, hmacKey, did, kind, spaceUrl, grants, name, origin, url, appKey, now }: {
|
|
136
|
+
export declare function recordGrants({ store, hmacKey, did, kind, spaceUrl, grants, name, origin, url, appKey, seed, seedTag, message, now }: {
|
|
112
137
|
store: ConnectionsStore;
|
|
113
138
|
hmacKey: ConnectionIdKey;
|
|
114
139
|
did: string;
|
|
@@ -122,6 +147,9 @@ export declare function recordGrants({ store, hmacKey, did, kind, spaceUrl, gran
|
|
|
122
147
|
origin?: string;
|
|
123
148
|
url?: string;
|
|
124
149
|
appKey?: string;
|
|
150
|
+
seed?: string;
|
|
151
|
+
seedTag?: string;
|
|
152
|
+
message?: Record<string, unknown>;
|
|
125
153
|
now?: Date;
|
|
126
154
|
}): Promise<ConnectionWriteResult>;
|
|
127
155
|
/**
|
|
@@ -145,8 +173,9 @@ export declare function removeGrants({ store, hmacKey, did, zcapIds }: {
|
|
|
145
173
|
}): Promise<ConnectionWriteResult>;
|
|
146
174
|
/**
|
|
147
175
|
* Retires the party's entry, of any kind, once a revocation has handled its
|
|
148
|
-
* grants: empties `grants`,
|
|
149
|
-
* `label`, `origin`, `url`, `firstSeen`,
|
|
176
|
+
* grants: empties `grants`, `grantsReceived`, and `outbox`, drops `appKey`,
|
|
177
|
+
* and stamps `retired`. `name`, `label`, `origin`, `url`, `firstSeen`,
|
|
178
|
+
* `lastSeen`, `writers`, `seed`, `seedTag`, and `declined` stay, so a
|
|
150
179
|
* departed party keeps resolving. An entry already retired with nothing left
|
|
151
180
|
* to empty writes nothing, and an absent entry writes nothing.
|
|
152
181
|
*
|
|
@@ -241,4 +270,187 @@ export declare function setConnectionLabel({ store, hmacKey, did, kind, label, n
|
|
|
241
270
|
enrolledSigningKeys?: ReadonlySet<string>;
|
|
242
271
|
now?: Date;
|
|
243
272
|
}): Promise<ConnectionWriteResult>;
|
|
273
|
+
/**
|
|
274
|
+
* Records the capabilities a party handed the wallet on its entry's
|
|
275
|
+
* `grantsReceived`. Each new record is merged in turn: one whose capability
|
|
276
|
+
* id is already held is left as stored, so the drain's re-run is a no-op;
|
|
277
|
+
* one with the `grantKind` and `invocationTarget` of a held record replaces
|
|
278
|
+
* it when its `expires` is strictly later or when the held record has
|
|
279
|
+
* lapsed as of `now` (at the earlier of its `expires` and `receivedAt` plus
|
|
280
|
+
* `channelMaxLifetimeMs`), and leaves the held record otherwise; any other
|
|
281
|
+
* is appended. Every record whose `expires`
|
|
282
|
+
* is past by more than the revocation clock skew is then dropped. A new
|
|
283
|
+
* record carries `receivedAt: now`.
|
|
284
|
+
*
|
|
285
|
+
* Each grant is checked strictly before anything is read, refused with a
|
|
286
|
+
* `TypeError`: its known members well-formed, its `controller` the wallet's
|
|
287
|
+
* pairwise DID toward the party, its `invocationTarget` outside this Space,
|
|
288
|
+
* its kind one of `RECEIVED_GRANT_KINDS`, an `'inbox'` grant allowing POST,
|
|
289
|
+
* and an `expires` in strict ISO 8601 form, with any number of fractional
|
|
290
|
+
* second digits (a format one engine's `Date.parse` accepts and another's
|
|
291
|
+
* refuses would make the entry unparseable there). A retired entry is refused
|
|
292
|
+
* with an `Error`, and an absent entry writes nothing.
|
|
293
|
+
*
|
|
294
|
+
* @param options {object}
|
|
295
|
+
* @param options.store {ConnectionsStore}
|
|
296
|
+
* @param options.hmacKey {ConnectionIdKey}
|
|
297
|
+
* @param options.did {string} the party's DID
|
|
298
|
+
* @param options.pairwiseDid {string} the wallet's pairwise did:key toward
|
|
299
|
+
* the party, every received grant's controller
|
|
300
|
+
* @param options.spaceUrl {string} this Space's container URL, which no
|
|
301
|
+
* received grant may target
|
|
302
|
+
* @param options.grants {Array<object>} `{ zcap, grantKind }` per grant
|
|
303
|
+
* @param options.channelMaxLifetimeMs {number} how long after `receivedAt`
|
|
304
|
+
* a received record lapses at the latest
|
|
305
|
+
* @param [options.now] {Date}
|
|
306
|
+
* @returns {Promise<ConnectionWriteResult>}
|
|
307
|
+
*/
|
|
308
|
+
export declare function recordReceivedGrants({ store, hmacKey, did, pairwiseDid, spaceUrl, grants, channelMaxLifetimeMs, now }: {
|
|
309
|
+
store: ConnectionsStore;
|
|
310
|
+
hmacKey: ConnectionIdKey;
|
|
311
|
+
did: string;
|
|
312
|
+
pairwiseDid: string;
|
|
313
|
+
spaceUrl: string;
|
|
314
|
+
grants: Array<{
|
|
315
|
+
zcap: object;
|
|
316
|
+
grantKind: ReceivedGrantKind;
|
|
317
|
+
}>;
|
|
318
|
+
channelMaxLifetimeMs: number;
|
|
319
|
+
now?: Date;
|
|
320
|
+
}): Promise<ConnectionWriteResult>;
|
|
321
|
+
/**
|
|
322
|
+
* The renewal's pivot: appends the renewed grant records and queues the
|
|
323
|
+
* envelope that carries them to the party, in one compare-and-swap. Each
|
|
324
|
+
* renewed record keeps its source's `grantKind` and `grantedAt` and carries
|
|
325
|
+
* `renewedAt: now`; the source record stays as stored. On `outbox`, every
|
|
326
|
+
* zcap sharing a renewed zcap's scope is removed from the envelopes already
|
|
327
|
+
* pending, an envelope left with none is dropped, and `message` is appended
|
|
328
|
+
* with `createdAt: now`.
|
|
329
|
+
*
|
|
330
|
+
* A renewed zcap must copy its source's `invocationTarget` as stored, since
|
|
331
|
+
* the scope compares it verbatim (a trailing `*` marker included).
|
|
332
|
+
*
|
|
333
|
+
* Refuses with an `Error`, writing nothing: a retired entry (whose `retired`
|
|
334
|
+
* stays), an entry with no live inbox channel (`receivedGrants`, then
|
|
335
|
+
* `liveInboxChannel`), a renewal whose source record is gone, a renewal
|
|
336
|
+
* whose source is no longer the latest record of its scope (a concurrent
|
|
337
|
+
* renewal ran), and a renewal whose `expires` is not strictly later than its
|
|
338
|
+
* source's. The last is what keeps a renewal minted under a short-lived parent from
|
|
339
|
+
* being appended at every login. A renewed zcap not delegated to the party,
|
|
340
|
+
* not targeting this Space, or of another scope than its source, and a
|
|
341
|
+
* `message` whose zcap ids are not exactly the renewed zcap ids, are refused
|
|
342
|
+
* with a `TypeError`. An absent entry writes nothing.
|
|
343
|
+
*
|
|
344
|
+
* @param options {object}
|
|
345
|
+
* @param options.store {ConnectionsStore}
|
|
346
|
+
* @param options.hmacKey {ConnectionIdKey}
|
|
347
|
+
* @param options.did {string} the party's DID, every renewed grant's
|
|
348
|
+
* controller
|
|
349
|
+
* @param options.pairwiseDid {string} the wallet's pairwise did:key toward
|
|
350
|
+
* the party, the inbox channel's controller
|
|
351
|
+
* @param options.spaceUrl {string} this Space's container URL
|
|
352
|
+
* @param options.renewals {Array<object>} `{ zcap, sourceZcapId }` per
|
|
353
|
+
* renewed grant: the new capability and the id of the record it renews
|
|
354
|
+
* @param options.message {object} the envelope to queue, verbatim
|
|
355
|
+
* @param options.channelMaxLifetimeMs {number} how long after `receivedAt`
|
|
356
|
+
* an inbox record lapses at the latest
|
|
357
|
+
* @param [options.now] {Date}
|
|
358
|
+
* @returns {Promise<ConnectionWriteResult>}
|
|
359
|
+
*/
|
|
360
|
+
export declare function recordRenewedGrants({ store, hmacKey, did, pairwiseDid, spaceUrl, renewals, message, channelMaxLifetimeMs, now }: {
|
|
361
|
+
store: ConnectionsStore;
|
|
362
|
+
hmacKey: ConnectionIdKey;
|
|
363
|
+
did: string;
|
|
364
|
+
pairwiseDid: string;
|
|
365
|
+
spaceUrl: string;
|
|
366
|
+
renewals: Array<{
|
|
367
|
+
zcap: object;
|
|
368
|
+
sourceZcapId: string;
|
|
369
|
+
}>;
|
|
370
|
+
message: Record<string, unknown>;
|
|
371
|
+
channelMaxLifetimeMs: number;
|
|
372
|
+
now?: Date;
|
|
373
|
+
}): Promise<ConnectionWriteResult>;
|
|
374
|
+
/**
|
|
375
|
+
* Removes the outbox item(s) queued at `createdAt`, once a push delivered
|
|
376
|
+
* them. None queued then writes nothing, and an absent entry writes nothing.
|
|
377
|
+
*
|
|
378
|
+
* @param options {object}
|
|
379
|
+
* @param options.store {ConnectionsStore}
|
|
380
|
+
* @param options.hmacKey {ConnectionIdKey}
|
|
381
|
+
* @param options.did {string} the party's DID
|
|
382
|
+
* @param options.createdAt {string} the delivered item's `createdAt`
|
|
383
|
+
* @returns {Promise<ConnectionWriteResult>}
|
|
384
|
+
*/
|
|
385
|
+
export declare function settleOutboxItem({ store, hmacKey, did, createdAt }: {
|
|
386
|
+
store: ConnectionsStore;
|
|
387
|
+
hmacKey: ConnectionIdKey;
|
|
388
|
+
did: string;
|
|
389
|
+
createdAt: string;
|
|
390
|
+
}): Promise<ConnectionWriteResult>;
|
|
391
|
+
/**
|
|
392
|
+
* Drops the grant records renewal superseded, and the outbox items no push
|
|
393
|
+
* can still deliver. In each scope holding more than one record, every
|
|
394
|
+
* record but the latest is dropped when its `expires` is past by more than
|
|
395
|
+
* the revocation clock skew, or when its capability id is among
|
|
396
|
+
* `deadChainZcapIds`. The latest record of a scope always stays. An outbox
|
|
397
|
+
* item is discarded when every zcap its envelope carries is past `expires` by
|
|
398
|
+
* more than the skew; an item carrying a zcap this build cannot read stays.
|
|
399
|
+
* Nothing to drop writes nothing, and an absent
|
|
400
|
+
* entry writes nothing.
|
|
401
|
+
*
|
|
402
|
+
* @param options {object}
|
|
403
|
+
* @param options.store {ConnectionsStore}
|
|
404
|
+
* @param options.hmacKey {ConnectionIdKey}
|
|
405
|
+
* @param options.did {string} the party's DID
|
|
406
|
+
* @param [options.deadChainZcapIds] {Iterable<string>} ids of superseded
|
|
407
|
+
* records whose chain revocation reads as dead (the signer gone from the
|
|
408
|
+
* account document, or the parent naming another annex generation) and
|
|
409
|
+
* whose successor's outbox item was settled. A grant `agentGrantDue` reads
|
|
410
|
+
* as due by replacement does not qualify on that alone: a grant under an
|
|
411
|
+
* in-place-renewed delegation stays live until that delegation expires.
|
|
412
|
+
* @param [options.now] {Date}
|
|
413
|
+
* @returns {Promise<ConnectionWriteResult>}
|
|
414
|
+
*/
|
|
415
|
+
export declare function pruneSupersededGrants({ store, hmacKey, did, deadChainZcapIds, now }: {
|
|
416
|
+
store: ConnectionsStore;
|
|
417
|
+
hmacKey: ConnectionIdKey;
|
|
418
|
+
did: string;
|
|
419
|
+
deadChainZcapIds?: Iterable<string>;
|
|
420
|
+
now?: Date;
|
|
421
|
+
}): Promise<ConnectionWriteResult>;
|
|
422
|
+
/**
|
|
423
|
+
* Empties the party's `grantsReceived` and `outbox`: the agent revoke's
|
|
424
|
+
* first write, so no client pushes to the party once it starts. Both already
|
|
425
|
+
* empty writes nothing, and an absent entry writes nothing.
|
|
426
|
+
*
|
|
427
|
+
* @param options {object}
|
|
428
|
+
* @param options.store {ConnectionsStore}
|
|
429
|
+
* @param options.hmacKey {ConnectionIdKey}
|
|
430
|
+
* @param options.did {string} the party's DID
|
|
431
|
+
* @returns {Promise<ConnectionWriteResult>}
|
|
432
|
+
*/
|
|
433
|
+
export declare function clearReceivedGrants({ store, hmacKey, did }: {
|
|
434
|
+
store: ConnectionsStore;
|
|
435
|
+
hmacKey: ConnectionIdKey;
|
|
436
|
+
did: string;
|
|
437
|
+
}): Promise<ConnectionWriteResult>;
|
|
438
|
+
/**
|
|
439
|
+
* Records the owner's decline of the party's offer: sets `declined` to
|
|
440
|
+
* `now`. An entry already declined keeps its time and writes nothing, and an
|
|
441
|
+
* absent entry writes nothing. A later consent (`recordGrants`) clears it.
|
|
442
|
+
*
|
|
443
|
+
* @param options {object}
|
|
444
|
+
* @param options.store {ConnectionsStore}
|
|
445
|
+
* @param options.hmacKey {ConnectionIdKey}
|
|
446
|
+
* @param options.did {string} the party's DID
|
|
447
|
+
* @param [options.now] {Date}
|
|
448
|
+
* @returns {Promise<ConnectionWriteResult>}
|
|
449
|
+
*/
|
|
450
|
+
export declare function markDeclined({ store, hmacKey, did, now }: {
|
|
451
|
+
store: ConnectionsStore;
|
|
452
|
+
hmacKey: ConnectionIdKey;
|
|
453
|
+
did: string;
|
|
454
|
+
now?: Date;
|
|
455
|
+
}): Promise<ConnectionWriteResult>;
|
|
244
456
|
//# sourceMappingURL=upsert.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upsert.d.ts","sourceRoot":"","sources":["../../src/connections/upsert.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upsert.d.ts","sourceRoot":"","sources":["../../src/connections/upsert.ts"],"names":[],"mappings":"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"}
|