Research
Security News
Threat Actor Exposes Playbook for Exploiting npm to Build Blockchain-Powered Botnets
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
The history package is a JavaScript library that lets you manage session history anywhere JavaScript runs. It provides a minimal API that lets you manage the history stack, navigate, and persist state between sessions. It is commonly used in conjunction with libraries like React Router but can be used standalone as well.
Manage session history
This feature allows you to create a history object and manipulate the browser's session history by pushing new entries onto the history stack.
const { createBrowserHistory } = require('history');
const history = createBrowserHistory();
history.push('/home', { some: 'state' });
Navigate programmatically
This feature enables you to navigate through the history stack programmatically, either going back or forward.
history.go(-1); // Go back one entry in the history stack
history.goForward(); // Go forward one entry in the history stack
Listen for changes to the current location
This feature allows you to listen for changes in the current location, which is useful for reacting to navigation events.
const unlisten = history.listen((location, action) => {
console.log(action, location.pathname, location.state);
});
// To stop listening
unlisten();
Persist state between sessions
This feature allows you to push state onto the history stack and access it later, which is useful for persisting information across sessions without using local storage or cookies.
history.push('/location', { user: '12345' });
// The state can be accessed later
const location = history.location;
const state = location.state; // { user: '12345' }
React Router is a collection of navigational components that compose declaratively with your application. It provides bindings to the history library, making it easier to use with React applications. It is more feature-rich and tailored specifically for React, compared to the more general-purpose history package.
Vue Router is the official router for Vue.js. It deeply integrates with Vue.js core to make building Single Page Applications with Vue.js a breeze. It provides similar functionalities for managing navigation and history in Vue applications, analogous to what history does for more general JavaScript applications.
Reach Router is a small, simple router for React that borrows from the ideas of the history package. It provides easy route definition and navigation but has been officially replaced by React Router as of version 6.
Navigo is a simple vanilla JavaScript router with a similar API to history. It provides a powerful router with a small footprint that does not necessarily rely on the history API provided by the browser.
history
is a JavaScript library that lets you easily manage session history anywhere JavaScript runs. history
abstracts away the differences in various environments and provides a minimal API that lets you manage the history stack, navigate, confirm navigation, and persist state between sessions.
Using npm:
$ npm install --save history
Then with a module bundler like webpack, use as you would anything else:
// using an ES6 transpiler, like babel
import { createHistory } from 'history'
// not using an ES6 transpiler
var createHistory = require('history').createHistory
The UMD build is also available on unpkg:
<script src="https://unpkg.com/history/umd/history.min.js"></script>
You can find the library on window.History
.
A "history" encapsulates navigation between different screens in your app, and notifies listeners when the current screen changes.
import { createHistory } from 'history'
const history = createHistory()
// Get the current location
const location = history.getCurrentLocation()
// Listen for changes to the current location
const unlisten = history.listen(location => {
console.log(location.pathname)
})
// Push a new entry onto the history stack
history.push({
pathname: '/the/path',
search: '?a=query',
// Extra location-specific state may be kept in session
// storage instead of in the URL query string!
state: { the: 'state' }
})
// When you're finished, stop the listener
unlisten()
You can find many more examples in the documentation!
A big thank-you to Dan Shaw for letting us use the history
npm package name! Thanks Dan!
Also, thanks to BrowserStack for providing the infrastructure that allows us to run our build in real browsers.
FAQs
Manage session history with JavaScript
The npm package history receives a total of 4,298,675 weekly downloads. As such, history popularity was classified as popular.
We found that history 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
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
Security News
NVD’s backlog surpasses 20,000 CVEs as analysis slows and NIST announces new system updates to address ongoing delays.
Security News
Research
A malicious npm package disguised as a WhatsApp client is exploiting authentication flows with a remote kill switch to exfiltrate data and destroy files.