41 lines
1.7 KiB
TypeScript
41 lines
1.7 KiB
TypeScript
|
// moduleQuery defines a query that can be sent to a module. The method is used
|
||
|
// to tell the module what query is being made. The domain is set by the
|
||
|
// kernel, and is guaranteed to match the domain of the caller. The module can
|
||
|
// use the 'domain' to enforce access control policies. The 'data' can be any
|
||
|
// arbitrary object, and will depend on the method. The module developer is
|
||
|
// ultimately the one who decides what data should be provided as input to each
|
||
|
// method call.
|
||
|
//
|
||
|
// NOTE: While the kernel does do verification for the method and domain, the
|
||
|
// kernel does not do any verification for the data field. The module itself is
|
||
|
// responsible for verifying all inputs provided in the data field.
|
||
|
interface moduleQuery {
|
||
|
method: string;
|
||
|
domain: string;
|
||
|
data: any;
|
||
|
}
|
||
|
|
||
|
// presentKeyData contains the data that gets sent in a 'presentKey' call
|
||
|
// from the kernel. 'presentKey' is called on the module immediately after the
|
||
|
// module starts up.
|
||
|
//
|
||
|
// The 'key' is a unique key dervied by the kernel for the module based on
|
||
|
// the module's domain and the key of the user. Modules in different domains
|
||
|
// will have different keys, and have no way to guess what the keys of other
|
||
|
// modules are.
|
||
|
//
|
||
|
// It is safe to use the 'key' for things like blockchain wallets.
|
||
|
//
|
||
|
// If the module has been given access to the root private key,
|
||
|
// presentKeyData will include the rootPrivateKey. If the module does not
|
||
|
// have access to the root private key, the field will not be included. A
|
||
|
// module that receives the root private key has full read and write access
|
||
|
// to all of the user's data.
|
||
|
//
|
||
|
interface presentKeyData {
|
||
|
key: Uint8Array;
|
||
|
rootPrivateKey?: Uint8Array;
|
||
|
}
|
||
|
|
||
|
export { moduleQuery, presentKeyData };
|