databag/app/sdk/README.md
2024-08-28 14:16:07 -07:00

3.2 KiB

!!! 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 typescript 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.

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

Persistent storage can then be provided to the SDK

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

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

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

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

User communcation is provided through the Session interface

login provides a Session through an account login

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

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

create provides a Session to a newly created account

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

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

username returns whether the username is available for account creation

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

logout releases the Session interface

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

Admin communcation is provided through the Node interface

configure allocates the Node interface for the server

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

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