Skip to content

domains

client.domains lets a domain owner share and unshare a key domain, hand off domain ownership, create a sub-domain and manage the recycle bin.

share

share gives a person or group access to the key domain. Only a domain owner can share. A share costs one decision and one access event for the whole key domain. It changes only the key domain’s key material, not any stored object.

share(root: Locator, to: ShareTarget): Promise<Decided<{ escrowVersion: number }>>

Parameters

NameTypeDescription
rootLocatorThe key domain’s root.
toShareTargetA person or a group to share with.

Returns: Decided, and on allow the new escrowVersion.

Records: Share Record.

Who may call it: A domain owner only.

Errors: locked, no-session, trust-failed.

unshare

unshare removes access at once and starts a new epoch. The Owner role may unshare any key domain.

unshare(root: Locator, from: ShareTarget): Promise<Decided<{ epoch: number }>>

Parameters

NameTypeDescription
rootLocatorThe key domain’s root.
fromShareTargetThe person or group to remove.

Returns: Decided, and on allow the new epoch.

Records: One decision and one access event.

Who may call it: A domain owner, or the Owner role for any key domain.

Errors: locked, no-session.

shareRecord

shareRecord shares one record’s versions with a person outside the key domain, as a record recipient. Each version needs its own share. The key domain, not the record, is the unit of sharing.

shareRecord(locator: Locator, to: Person): Promise<Decided<{ versions: number }>>

Parameters

NameTypeDescription
locatorLocatorThe record to share.
toPersonThe person to add as a record recipient.

Returns: Decided, and on allow how many versions were shared.

Records: Share Record.

Errors: locked, no-session.

unshareRecord

unshareRecord removes a record recipient’s access to one record.

unshareRecord(locator: Locator, from: Person): Promise<Decided<{}>>

Parameters

NameTypeDescription
locatorLocatorThe record to stop sharing.
fromPersonThe record recipient to remove.

Returns: Decided<{}>.

Records: One decision and one access event.

Errors: locked, no-session.

makeOwner

makeOwner makes a member a domain owner. A key domain always keeps at least one domain owner with a device.

makeOwner(root: Locator, person: Person): Promise<Decided<{}>>

Parameters

NameTypeDescription
rootLocatorThe key domain.
personPersonThe member to make a domain owner.

Returns: Decided<{}>.

Records: Share Record.

Who may call it: A domain owner.

Errors: locked, no-session.

giveUpOwnership

giveUpOwnership gives up domain ownership while another domain owner remains.

giveUpOwnership(root: Locator): Promise<Decided<{}>>

Parameters

NameTypeDescription
rootLocatorThe key domain.

Returns: Decided<{}>.

Records: One decision and one access event.

Who may call it: A domain owner. The SDK refuses it for the last domain owner.

Errors: locked, no-session.

members

members returns who can see a key domain.

members(root: Locator): Promise<Membership>

Parameters

NameTypeDescription
rootLocatorThe key domain.

Returns: The key domain’s Membership.

Records: Nothing. Not a decision.

Errors: locked, no-session.

create

create turns an empty folder below a dataset’s root into a key domain. A domain owner of the enclosing key domain calls it and becomes the first domain owner.

create(folder: Locator, options?: { members?: ShareTarget[] }): Promise<Decided<{ root: Locator }>>

Parameters

NameTypeDescription
folderLocatorThe empty folder to turn into a key domain’s root.
options{ members?: ShareTarget[] }, optionalMembers to share the new key domain with at once.

Returns: Decided, and on allow the new key domain’s root locator.

Records: Share Record.

Who may call it: A domain owner of the enclosing key domain.

Errors: locked, no-session.

delete

delete retires a whole key domain into the recycle bin.

delete(root: Locator): Promise<Decided<{}>>

Parameters

NameTypeDescription
rootLocatorThe key domain to retire.

Returns: Decided<{}>.

Records: Delete.

Who may call it: A domain owner. The SDK refuses it under a legal hold or the retention floor.

Errors: locked, no-session.

recycleBin

recycleBin lists what a key domain’s domain owners see of its retired versions, objects and key domains. Nothing leaves the recycle bin on its own.

recycleBin(root?: Locator): Promise<RecycleBinItem[]>

Parameters

NameTypeDescription
rootLocator, optionalRestricts the listing to this key domain. Otherwise lists every key domain the person owns.

Returns: The matching RecycleBinItem list.

Records: Nothing. Not a decision.

Who may call it: A domain owner.

Errors: locked, no-session.

restore

restore returns a retired item from the recycle bin.

restore(item: RecycleBinItem): Promise<Decided<{}>>

Parameters

NameTypeDescription
itemRecycleBinItemThe item to restore, from recycleBin().

Returns: Decided<{}>.

Records: Restore.

Who may call it: A domain owner.

Errors: locked, no-session.

shred

shred destroys items for good. Break-glass recovery cannot reverse it. The tombstone keeps the locator, the version and their access events.

shred(items: RecycleBinItem[]): Promise<Decided<{}>>

Parameters

NameTypeDescription
itemsRecycleBinItem[]The items to shred. The SDK refuses any item under a legal hold.

Returns: Decided<{}>.

Records: Delete.

Who may call it: A domain owner.

Errors: locked, no-session.

Types

ShareTarget

type ShareTarget = { person: Person } | { group: Group };

Who a share, unshare or new key domain membership names: a Person, or a group by name. In Swift: ShareTarget.person(p) or .group("x"). In Kotlin: ShareTarget.ToPerson(p) or ShareTarget.ToGroup("x").

Membership

interface Membership {
root: Locator;
dataset: string;
owners: Person[];
members: { person: Person; through?: Group[] }[];
groups: Group[];
recordRecipients: { locator: Locator; person: Person }[];
epoch: number;
escrowVersion: number;
}
FieldTypeDescription
rootLocatorThe key domain’s root.
datasetstringThe dataset this key domain belongs to.
ownersPerson[]The key domain’s current domain owners.
members{ person, through? }[]Every member, and the group they joined through, where they joined through one.
groupsGroup[]The groups mapped into this key domain.
recordRecipients{ locator, person }[]The one-record shares made with shareRecord.
epochnumberThe key domain’s current epoch.
escrowVersionnumberThe current version of the key domain’s key material.

RecycleBinItem

interface RecycleBinItem {
kind: 'version' | 'object' | 'domain';
locator: Locator;
version?: number;
retiredAt: Date;
retiredBy: RecipientId;
held: boolean;
}
FieldTypeDescription
kind'version' | 'object' | 'domain'What was retired.
locatorLocatorThe retired item’s locator.
versionnumber, optionalThe retired version, for kind: 'version'.
retiredAtDateWhen it was retired.
retiredByRecipientIdThe device that retired it.
heldbooleanTrue while a legal hold keeps it in the bin.

Domains

interface Domains {
share(root: Locator, to: ShareTarget): Promise<Decided<{ escrowVersion: number }>>;
unshare(root: Locator, from: ShareTarget): Promise<Decided<{ epoch: number }>>;
shareRecord(locator: Locator, to: Person): Promise<Decided<{ versions: number }>>;
unshareRecord(locator: Locator, from: Person): Promise<Decided<{}>>;
makeOwner(root: Locator, person: Person): Promise<Decided<{}>>;
giveUpOwnership(root: Locator): Promise<Decided<{}>>;
members(root: Locator): Promise<Membership>;
create(folder: Locator, options?: { members?: ShareTarget[] }): Promise<Decided<{ root: Locator }>>;
delete(root: Locator): Promise<Decided<{}>>;
recycleBin(root?: Locator): Promise<RecycleBinItem[]>;
restore(item: RecycleBinItem): Promise<Decided<{}>>;
shred(items: RecycleBinItem[]): Promise<Decided<{}>>;
}

Domains groups the twelve methods above into the namespace client.domains.