@sovrano-io/auth-sdk
Version:
Sovrano wallet auth sdk for koinos dapps
190 lines (129 loc) • 5.95 kB
Markdown
# Sovrano auth-sdk Documentation
The `auth-sdk` is designed to facilitate dApp integration with Sovrano, supporting authentication and authorization through redirects.
## Installation
To install the package, use:
```bash
npm install -io/auth-sdk
```
## Main Functionalities
### 1. Signup
**Purpose:** Starts the account creation process on Sovrano.
#### Request Example
```typescript
import { Signup } from "@sovrano-io/auth-sdk";
const signupUrl = Signup.getRequestUrl({
redirectUrl: "https://example.com/callback",
});
// Redirect the user to `signupUrl` to initiate registration
```
#### Handling Signup Response
Once the user completes the signup, they are redirected to the specified `redirectUrl` with the response.
```typescript
import { Signup } from "@sovrano-io/auth-sdk";
const responseUrl = "https://example.com/callback?data=encodedResponseData";
const signupResponse = Signup.getResponse(responseUrl);
if (signupResponse.type === "success") {
console.log("Signup successful!");
console.log("Address:", signupResponse.address);
console.log("Nickname:", signupResponse.nickname);
} else {
console.error("Error:", signupResponse.errorMessage);
console.error("Error Code:", signupResponse.errorCode);
}
```
### 2. Connector
**Purpose:** Initiates the login process to connect the user's Sovrano account to the dApp.
#### Request Example
```typescript
import { Connector } from "@sovrano-io/auth-sdk";
const connectUrl = Connector.getRequestUrl({
appName: "MyDApp",
redirectUrl: "https://example.com/callback",
});
// Redirect the user to `connectUrl` for login
```
#### Handling Connector Response
Upon successful login, Sovrano redirects the user to `redirectUrl` with their account data.
```typescript
import { Connector } from "@sovrano-io/auth-sdk";
const responseUrl = "https://example.com/callback?data=encodedResponseData";
const connectResponse = Connector.getResponse(responseUrl);
if (connectResponse.type === "success") {
console.log("Login successful!");
console.log("Address:", connectResponse.address);
console.log("Nickname:", connectResponse.nickname);
} else {
console.error("Error:", connectResponse.errorMessage);
console.error("Error Code:", connectResponse.errorCode);
}
```
### 3. Authorizer
**Purpose:** Sends an unsigned transaction to the user for authorization.
---
### Understanding Operation Authorization
To authorize an operation in Sovrano, a transaction is created with **two key operations**:
1. **Pre-authorization (Allowance)**: This operation records the pre-authorization details, presenting the operation for the user to review and sign.
2. **Execution**: This operation executes the authorized action if it has been pre-approved.
Both **validator modules** (for pre-authorization) and **executor modules** (for carrying out the operation) are installed within specific *scopes* in the user’s account. These scopes define when and under what conditions each module is activated. Validators are responsible for defining and enforcing rules on whether a particular transaction should proceed, while executor modules carry out the approved actions.
> For more details on modules, visit the official documentation:
> [Veive Core Modules - Allowance](https://docs.veive.io/veive-docs/framework/core-modules/mod-allowance)
After constructing the transaction, it is signed by the user and redirected back to the dApp, which then decodes and broadcasts it on the blockchain.
---
### Example: Creating a Transaction with `koilib`
To authorize a transaction, first create an unsigned transaction with `koilib`.
1. Install `koilib` if not already installed:
```bash
npm install koilib
```
2. Create an unsigned transaction:
```typescript
import { Provider, Transaction, OperationJson, Contract } from "koilib";
import { Authorizer, Account } from "@sovrano-io/auth-sdk";
const provider = new Provider("https://api.koinos.io");
const account = new Account({
address: 'my-user-address',
provider,
})
const transaction = new Transaction({ provider });
// Step 1: Prepare the allowance operation
const { operation } = await koin.transfer({
from: account.address,
to: "172AB1FgCsYrRAW5cwQ8KjadgxofvgPFd6",
value: "1012345678", // 10.12345678 KOIN
});
const allow_operation = await account.allow({ operation });
transaction.pushOperation(allow_operation);
// Step 2: Prepare the execution operation
const exec_operation = await account.execute({ operation });
transaction.pushOperation(exec_operation);
await transaction.prepare();
// Request Authorization with the unsigned transaction:
const authorizeUrl = Authorizer.getRequestUrl({
transactionJson: transaction.transaction,
redirectUrl: "https://example.com/callback",
address: "user-address",
});
// Redirect the user to `authorizeUrl` to authorize the transaction
window.location.href = authorizeUrl;
```
#### Handling Authorizer Response
After signing, Sovrano redirects the user with the signed transaction in the response.
```typescript
import { Authorizer } from "@sovrano-io/auth-sdk";
const responseUrl = "https://example.com/callback?data=encodedResponseData";
const authorizeResponse = Authorizer.getResponse(responseUrl);
if (authorizeResponse.type === "success") {
console.log("Transaction authorized:", authorizeResponse.transactionJson);
// Send the signed transaction to the blockchain using `koilib`
const signedTransaction = new Transaction({
provider,
transactionJson: authorizeResponse.transactionJson,
});
signedTransaction.send()
.then(receipt => console.log("Transaction successfully sent:", receipt))
.catch(error => console.error("Error sending transaction:", error));
} else {
console.error("Authorization Error:", authorizeResponse.errorMessage);
console.error("Error Code:", authorizeResponse.errorCode);
}
```