
Research
/Security News
Weaponizing Discord for Command and Control Across npm, PyPI, and RubyGems.org
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.
@perceived/optimistic-state
Advanced tools
Micro library for optimistic state with rollbacks and race condition handling.
Micro library for optimistic state with rollbacks and race condition handling.
Optimistic UI and Optimistic States
npm install @perceived/optimistic-state
import optimisticState from '@perceived/optimistic-state';
function routine(state) {
// async routine which should return promise
return syncCounterToServer(state);
}
let count;
const updateState = optimisticState({
initialState: 0,
routine,
handleState: (state) => {
count = state;
// handle optimistic state
document.querySelector('.current-count').innerHTML = state;
},
handleResult: (result) => {
document.querySelector('.result').innerHTML = result;
},
handleError: (err) => {
// handle error, may be display error as toast/notification message
message.error(err);
},
});
document.querySelector('#increment-btn').addEventListener('click', () => {
updateState(count + 1);
});
TState
The initialState of optimistic state, before any action is fired.
(state: TState, ...args[]) => Promise
Async routine (mostly an api call which sync client state to server). This routine must return a promise.
(state: TState) => void;
A callback to handle the optimistic state, this is fired when a routine is called, and also on rollbacks with the state.
(result: TResult) => void;
The handleResult is called when the last action is resolved with the resolved data. In case of error on last action it is called with the last resolved data of action where it is rolled back.
For example if if there is series of action X, Y, Z. If Z is resolved (irrespective of X, Y failed or passed), handleResult will be called with Z data. But in case if Y, Z fails, handleResult will be called with X data.
(err: TError) => void;
The handleError will be called with reject reason, if the last action in series of action fails.
Note: If last action is passed and there is failure on previous actions, it will not call handleError
(state: TState, ...args[] ) => void
optimisticState return a updater function, which accepts new state as first argument, followed by any number of arguments. All of the arguments are passed to routine function.
Try simulating all the cases in this example. https://codesandbox.io/s/optimistic-state-rc9m5
FAQs
Micro library for optimistic state with rollbacks and race condition handling.
We found that @perceived/optimistic-state demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.
Security News
Socket now integrates with Bun 1.3’s Security Scanner API to block risky packages at install time and enforce your organization’s policies in local dev and CI.
Research
The Socket Threat Research Team is tracking weekly intrusions into the npm registry that follow a repeatable adversarial playbook used by North Korean state-sponsored actors.