@unilogin/sdk
Version:
SDK is a JS library, that communicates with relayer. SDK allows managing contract, by creating basic contract-calling messages.
18 lines (14 loc) • 603 B
text/typescript
import {Callback, Property, State, withEffect} from 'reactive-properties';
type MaybePromise<T> = T | Promise<T>;
export function propertyFromSubscription<T>(subscribe: (cb: (value: T) => void) => MaybePromise<Callback>, initialValue: T): Property<T> {
const state = new State(initialValue);
return state.pipe(
withEffect(() => unpromiseCallback(subscribe(value => state.set(value)))),
);
}
function unpromiseCallback(callback: MaybePromise<Callback>): Callback {
if (!(callback instanceof Promise)) {
return callback;
}
return () => setTimeout(async () => (await callback)());
}