2024-09-19 14:14:47 -07:00
..
2024-09-11 17:55:53 -07:00
2024-09-11 18:02:49 -07:00
2024-09-19 14:14:47 -07:00
2024-09-10 22:06:47 -07:00
2024-09-03 12:47:36 -07:00
2024-07-03 16:55:20 -07:00
2024-09-10 22:06:47 -07:00

d!!! still a work in progress !!!

DatabagClientSDK provides a typescript interface for communication over the decentralized databag network. The SDK has minimal dependencies and contains reference applications for react-js, react-native, and node.

The API is provided through a set of interfaces; each interface groups methods by their functionality and are only allocated as needed. The platform specific implementations of storage and cryptography are defined externally and are also provided to the SDK through interfaces.

Initialization

The SDK must first be allocated

    The crypto and log params are provided by implementing the Crypto and Logging interface respectively.

    DatabagClientSDK(crypto?: Crypto, log?: Logging)


Account communcation is provided through the Session interface

    Login provides a Session through an account login

    DatabacgClientSDK::login(handle: string, password: string, node: string, secure: boolean, mfaCode: string | null, params: SessionParams): Promise<Session>

    Access provides a Session through token access to an account when password is forgotten

    DatabacgClientSDK::access(node: string, secure: boolean, token: string, params: SessionParams): Promise<Session>

    Create provides a Session to a newly created account

    DatabacgClientSDK::create(handle: string, password: string, node: string, secure: boolean, token: string | null, params: SessionParams): Promise<Session>

    Available returns the number of accounts that can be publically created

    DatabacgClientSDK::available(node: string, secure: boolean): Promise<number>

    Username returns whether the username is available for account creation

    DatabacgClientSDK::username(name: string, token: string, node: string, secure: boolean): Promise<boolean>

    Logout releases the Session interface

    DatabacgClientSDK::logout(session: Session, all: boolean): Promise<void>

    Storage can then be provided to the SDK to persist sessions

    Mobile apps typically use the offline store where most of the relational data is saved. The sql param is provided by implementing the SqlStore interface.

    DatabacgClientSDK::initOfflineStore(sql: SqlStore): Promise<Session | null>

    Browser apps typically use the online store where minimal session data is saved. The web param is provided by implementing the WebStore interface.

    DatabacgClientSDK::initOnlineStore(web: WebStore): Promise<Session | null>


Admin communcation is provided through the Node interface

    Configure allocates the Node interface for the server

    DatabacgClientSDK::configure(node: string, secure: boolean, token: string, mfaCode: string | null): Promise<Node>


Bot communication is provided through the Bot interface

    Automate allocates the Bot interface for ia specific communication channel

    DatabacgClientSDK::automate(node: string, secure: boolean, token: string): Promise<Bot>


Account Communication

Session provides the core functionality and provides access to all user interface modules

    Account Settings are managed through the Settings interface

    Session::getSettings(): Settings

    Account Profile is managed through the Identity interface

    Session::getIdentity(): Identity

    Account Contacts are managed through the Contact Inferface

    Session::getContact(): Contact

    Contact groupings are managed through the Alias Interface

    Session::getAlias(): Alias

    Account attribute data is managed through the Attribute Interface

    Session::getAttribute(): Attribute

    Account content channels are managed through the Content Interface

    Session::getContent(): Content

    An aggregation of content channels provided by contacts is managed through the Stream Interface

    Session::getStream(): Stream

    WebRTC calling is managed through the Ring Interface

    Session::getRing(): Ring

    Management of an active content channel is provided through the Focus Interface

    Session::addFocus(cardId: string | null, channelId: string): Focus
    Session::removeFocus(focus: Focus): void

    The connectivity status is provided through a status lisenter

    Session::addStatusListener(ev: (status: string) => void): void
    Session::removeStatusListener(ev: (status: string) => void): void


Settings interface module manages the account access settings

    The login and password for the account can be changed through the setLogin method

    Settings::setLogin(username: string, password: string): Promise<void>

    Check if the specified username is available

    Settings::getUsernameStatus(username: string): Promise<boolean>

    Push notifications to the user's device can be enabled through enableNotifications

    Settings::enableNotifications(): Promise<void>

    Push notifications to the user's device can be disabled through disableNotifications

    Settings::disableNotifications(): Promise<void>

    The account will be visible in the server registry when enabled through enableRegistry

    Settings::enableRegistry(): Promise<void>

    The account will not be visible in the server registry when disabled through disableRegistry

    Settings::disableRegistry(): Promise<void>

    Multi-Factor authentication is enabled through enableMFA

    Settings::enableMFA(): Promise<{ secretImage: string, secretText: string }>

    Multi-Factor authentication is disabled with disableMFA

    Settings::disableMFA(): Promise<void>

    Once enabled the Mutli-Factor authentication must be confirmed before it will be required for login

    Settings::confirmMFA(code: string): Promise<void>

    End-to-End encryption is enabled by setting up a client key with setSeal

    Settings::setSeal(password: string): Promise<void>

    End-to-End encryption is disabled and the key deleted with clearSeal

    Settings::clearSeal(): Promise<void>

    End-to-End encryption can be enabled of other devices by unlocking the key with unlockSeal

    Settings::unlockSeal(password: string): Promise<void>

    End-to-End encryption is disabled, but the key remains locked with forgetSeal

    Settings::forgetSeal(): Promise<void>

    The current configuration can be accessed through a Config listener

    Settings::addConfigListener(ev: (config: Cofnig) => void): void
    Settings::removeConfigListener(ev: (config: Config) => void): void


Identity interface module manages the account profile

    The text details of the profile are set with setProfileData

    Identity::setProfileData(name: string, location: string, description: string): Promise<void>

    The profile image is set with setProfileImage

    Identity::setProfileImage(image: string): Promise<void>

    A direct url to retrieve the profile image is provided with getProfileImageUrl

    Identity:::getProfileImageUrl(): string

    The current profile can be access with a Profile listener

    Identity::addProfileListener(ev: (profile: Profile) => void): void
    Identity::removeProfileListener(ev: (profile: Profile) => void): void


Admin Communication

Bot Communication