mirror of
https://github.com/alexgo-io/stacks.js.git
synced 2026-01-12 22:52:34 +08:00
3.6 KiB
3.6 KiB
blockstack.js to Stacks.js migration guide
This guide will help migrate your Blockstack app from blockstack.js to the new Stacks.js packages and Connect.
Auth
The main change for auth is that the Stacks Connect library has replaced the redirectToSignIn function from blockstack.js.
Instead of redirecting to the now deprecated Blockstack Browser, the authentication flow is completed within a popup window using
the new authenticator app.
You can still use the API in @stacks/auth to create custom auth requests manually if desired.
Using blockstack.js
import { UserSession, AppConfig } from 'blockstack';
// Configuring your app
const appConfig = new AppConfig()
const userSession = new UserSession({ appConfig })
// Initiating auth flow
if(!userSession.isUserSignedIn()) {
userSession.redirectToSignIn();
}
// Handling sign in
if (userSession.isSignInPending()) {
userSession.handlePendingSignIn().then((userData) => {
window.history.replaceState({}, document.title, "/");
this.setState({ userData: userData});
});
}
Using Blockstack Connect
See full tutorial here
// Configuring your app
const authOptions = {
redirectTo: '/',
finished: ({ userSession }) => {
console.log(userSession.loadUserData());
},
appDetails: {
name: 'My Cool App',
icon: 'https://example.com/icon.png',
},
};
import { showBlockstackConnect } from '@stacks/connect';
import { UserSession, AppConfig } from '@stacks/auth';
import { Connect } from '@stacks/connect';
// Initiating auth flow - using the Connect component
const App = () => <Connect authOptions={authOptions}>// the rest of your app's components</Connect>;
// Initiating auth flow - alternatively
showBlockstackConnect(authOptions);
// Handling sign in
const appConfig = new AppConfig()
const userSession = new UserSession({ appConfig });
// ... call this code on page load
if (userSession.isSignInPending()) {
const userData = await userSession.handlePendingSignIn();
// your user is now logged in.
}
Storage
In Stacks.js, storage is now a separate package.
Using blockstack.js
import { UserSession, AppConfig } from 'blockstack';
const appConfig = new AppConfig();
const userSession = new UserSession({ appConfig });
userSession.putFile('my_file.json', my_content);
userSession.getFile('my_file.json').then((file) => {
});
Using @stacks/storage
import { UserSession } from '@stacks/auth';
import { Storage } from '@stacks/storage';
const appConfig = new AppConfig();
const userSession = new UserSession({ appConfig });
const storage = new Storage({userSession});
storage.putFile('my_file.json', my_content));
storage.getFile('my_file.json').then((file) => {
});
Encryption
Encryption/Decryption functions have been moved into a separate @stacks/encryption library.
Using blockstack.js
import { encryptContent, decryptContent } from 'blockstack';
encryptContent(userSession, content, options);
decryptContent(userSession, encryptedContent, options);
Using @stacks/encryption or @stacks/auth
import { encryptContent, decryptContent } from '@stacks/encryption'
import { UserSession } from '@stacks/auth'
encryptContent(content, { privateKey })
decryptContent(encryptedContent, { privateKey })
// Using userSession
const appConfig = new AppConfig();
const userSession = new UserSession({ appConfig });
const storage = new Storage(userSession);
userSession.encryptContent(content);
userSession.decryptContent(encryptedContent);