Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,8 @@
"sdk/web/wallet-sdk/ecosystem/hooks/useOpenConnectModal",
"sdk/web/wallet-sdk/ecosystem/hooks/useChain",
"sdk/web/wallet-sdk/ecosystem/hooks/useFeeOptions",
"sdk/web/wallet-sdk/ecosystem/hooks/useHasPermission",
"sdk/web/wallet-sdk/ecosystem/hooks/useSendWalletTransaction",
"sdk/web/wallet-sdk/ecosystem/hooks/useExplicitSessions",
"sdk/web/wallet-sdk/ecosystem/hooks/useListAccounts",
"sdk/web/wallet-sdk/ecosystem/hooks/useSignInEmail",
Expand Down Expand Up @@ -1288,6 +1290,8 @@
"ja/sdk/web/wallet-sdk/ecosystem/hooks/useOpenConnectModal",
"ja/sdk/web/wallet-sdk/ecosystem/hooks/useChain",
"ja/sdk/web/wallet-sdk/ecosystem/hooks/useFeeOptions",
"ja/sdk/web/wallet-sdk/ecosystem/hooks/useHasPermission",
"ja/sdk/web/wallet-sdk/ecosystem/hooks/useSendWalletTransaction",
"ja/sdk/web/wallet-sdk/ecosystem/hooks/useExplicitSessions",
"ja/sdk/web/wallet-sdk/ecosystem/hooks/useListAccounts",
"ja/sdk/web/wallet-sdk/ecosystem/hooks/useSignInEmail",
Expand Down Expand Up @@ -2268,6 +2272,8 @@
"es/sdk/web/wallet-sdk/ecosystem/hooks/useOpenConnectModal",
"es/sdk/web/wallet-sdk/ecosystem/hooks/useChain",
"es/sdk/web/wallet-sdk/ecosystem/hooks/useFeeOptions",
"es/sdk/web/wallet-sdk/ecosystem/hooks/useHasPermission",
"es/sdk/web/wallet-sdk/ecosystem/hooks/useSendWalletTransaction",
"es/sdk/web/wallet-sdk/ecosystem/hooks/useExplicitSessions",
"es/sdk/web/wallet-sdk/ecosystem/hooks/useListAccounts",
"es/sdk/web/wallet-sdk/ecosystem/hooks/useSignInEmail",
Expand Down
48 changes: 42 additions & 6 deletions es/sdk/web/wallet-sdk/ecosystem/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -26,23 +26,39 @@ Primero, asegúrese de haber creado una cuenta de Sequence Project. Si aún no t
<Step title="Cree su configuración de Wallet">
A continuación, cree la configuración de Ecosystem Wallet.

**Requerido para Ecosystem Wallet**

- `projectAccessKey`
- `walletUrl`

**Opcional**

- `dappOrigin`
- `signIn.projectName`, `appName`
- `chainIds`, `defaultChainId`
- `explicitSessionParams` (opcional; `nativeTokenSpending` por defecto es `valueLimit: 0`)
- `includeFeeOptionPermissions`, `enableImplicitSession`
- `nodesUrl`, `relayerUrl`
- `walletConnect`

```typescript [config.ts]
import { createConfig } from "@0xsequence/connect";

export const config: any = createConfig({
projectAccessKey: "AQAAAAAAAABtDHG1It7lxRF_9bbxw4diip8",
signIn: {
projectName: 'Sequence Web SDK Demo',
},
walletUrl: 'https://next-acme-wallet.sequence-dev.app',
// Optional
dappOrigin: window.location.origin,
signIn: {
projectName: 'Sequence Web SDK Demo'
},
appName: 'Sequence Web SDK Demo',
chainIds: [42161],
defaultChainId: 42161,
google: true,
apple: true,
email: true,
explicitSessionParams: {...}
explicitSessionParams: { ... }
});
```

Expand All @@ -53,6 +69,8 @@ Primero, asegúrese de haber creado una cuenta de Sequence Project. Si aún no t
El objeto `explicitSessionParams` permite que su dapp solicite permisos específicos al usuario al conectarse.
Estos permisos pueden autorizar a su dapp a realizar ciertas acciones en nombre del usuario durante un período definido, creando una experiencia más fluida sin solicitudes de transacción o permitiendo automatizaciones.

`nativeTokenSpending` es opcional. Si se omite, la sesión tendrá por defecto un `valueLimit` de token nativo de `0`.

Por ejemplo, creemos una sesión explícita que permita a su dapp `depositar 100 USDC en el pool de AAVE V3 en Arbitrum, en nombre del usuario durante las próximas 24 horas`

```typescript [config.ts]
Expand All @@ -64,11 +82,12 @@ Primero, asegúrese de haber creado una cuenta de Sequence Project. Si aún no t

export const config: any = createConfig({
projectAccessKey: "AQAAAAAAAABtDHG1It7lxRF_9bbxw4diip8",
walletUrl: 'https://next-acme-wallet.sequence-dev.app',
// Optional
dappOrigin: window.location.origin,
signIn: {
projectName: 'Sequence Web SDK Demo',
},
walletUrl: 'https://next-acme-wallet.sequence-dev.app',
dappOrigin: window.location.origin,
appName: 'Sequence Web SDK Demo',
chainIds: [42161],
defaultChainId: 42161,
Expand Down Expand Up @@ -184,6 +203,21 @@ Primero, asegúrese de haber creado una cuenta de Sequence Project. Si aún no t
<Step title="Cree su configuración de Wallet">
A continuación, cree la configuración de Ecosystem Wallet.

**Requerido para Ecosystem Wallet**

- `projectAccessKey`
- `walletUrl`

**Opcional**

- `dappOrigin`
- `signIn.projectName`, `appName`
- `chainIds`, `defaultChainId`
- `explicitSessionParams` (opcional; `nativeTokenSpending` por defecto es `valueLimit: 0`)
- `includeFeeOptionPermissions`, `enableImplicitSession`
- `nodesUrl`, `relayerUrl`
- `walletConnect`

```typescript [config.ts]
import { createConfig } from "@0xsequence/connect";

Expand Down Expand Up @@ -211,6 +245,8 @@ Primero, asegúrese de haber creado una cuenta de Sequence Project. Si aún no t
El objeto `explicitSessionParams` permite que su dapp solicite permisos específicos al usuario al conectarse.
Estos permisos pueden autorizar a su dapp a realizar ciertas acciones en nombre del usuario durante un período definido, creando una experiencia más fluida sin solicitudes de transacción.

`nativeTokenSpending` es opcional. Si se omite, la sesión tendrá por defecto un `valueLimit` de token nativo de `0`.

Por ejemplo, creemos una sesión explícita que permita a su dapp `depositar 100 USDC en el pool de AAVE V3 en Arbitrum, en nombre del usuario durante las próximas 24 horas`

```typescript [config.ts]
Expand Down
40 changes: 15 additions & 25 deletions es/sdk/web/wallet-sdk/ecosystem/hooks/useExplicitSessions.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { useExplicitSessions } from '@0xsequence/connect'
## Uso

```tsx
import { createContractPermission, createExplicitSession, useExplicitSessions, type Permission, type Session } from '@0xsequence/connect'
import { createContractPermission, useExplicitSessions, type ExplicitSessionParams, type ExplicitSession } from '@0xsequence/connect'
import { useEffect, useState } from 'react'
import { parseUnits } from 'viem'

Expand All @@ -22,10 +22,11 @@ function App() {
isLoading,
error,
addExplicitSession,
modifyExplicitSession,
getExplicitSessions
} = useExplicitSessions()

const [sessions, setSessions] = useState<Session[]>([])
const [sessions, setSessions] = useState<ExplicitSession[]>([])

// Load existing sessions
useEffect(() => {
Expand All @@ -47,15 +48,15 @@ function App() {
address: '0x...',
functionSignature: 'function testContract() public'
})
const currentSession = sessions[0];
const currentSession = sessions[0]
const modifiedSession = { ...currentSession, permissions: [...currentSession.permissions!, newPermission] }
modifyExplicitSession(modifiedSession)
}

// Handle creating a new explicit session
const handleCreateSession = async () => {
try {
const tokenSpendingSession = createExplicitSession({
const tokenSpendingSession: ExplicitSessionParams = {
chainId: 42161,
nativeTokenSpending: {
valueLimit: 0n,
Expand All @@ -78,9 +79,9 @@ function App() {
]
})
]
})
}

await addExplicitSession(42161, tokenSpendingSession)
await addExplicitSession(tokenSpendingSession)

// Refresh sessions after creating a new one
const updatedSessions = await getExplicitSessions()
Expand Down Expand Up @@ -113,10 +114,9 @@ function App() {
<h3>Existing Sessions ({sessions.length})</h3>
{sessions.map((session, index) => (
<div key={index}>
<p>Session Address: {session.address}</p>
<p>Session Address: {session.sessionAddress}</p>
<p>Chain ID: {session.chainId}</p>
<p>Is Implicit: {session.isImplicit ? 'Yes' : 'No'}</p>
<p>Permissions: {session.permissions?.permissions?.map((permission: Permission) => permission.target).join(', ')}</p>
<p>Permissions: {session.permissions?.map(permission => permission.target).join(', ')}</p>
</div>
))}
</div>
Expand All @@ -132,8 +132,9 @@ El hook retorna un objeto con las siguientes propiedades:
type UseExplicitSessionsReturnType = {
isLoading: boolean
error: Error | null
addExplicitSession: (chainId: ChainId, explicitSession: ExplicitSession) => Promise<void>
getExplicitSessions: () => Promise<Session[]>
addExplicitSession: (params: ExplicitSessionParams, includeFeeOptionPermissions?: boolean) => Promise<void>
modifyExplicitSession: (explicitSession: ExplicitSession) => Promise<void>
getExplicitSessions: () => Promise<ExplicitSession[]>
}
```

Expand All @@ -150,7 +151,7 @@ Un booleano que indica si la operación de solicitud de sesión está en curso.
Un objeto de error si la última operación falló, de lo contrario `null`.

#### addExplicitSession
`(chainId: ChainId, explicitSession: ExplicitSession) => Promise<void>`
`(params: ExplicitSessionParams, includeFeeOptionPermissions?: boolean) => Promise<void>`

```typescript
type ExplicitSession = {
Expand Down Expand Up @@ -182,20 +183,9 @@ type ExplicitSession = {
Función para modificar una sesión explícita existente.

#### getExplicitSessions
`() => Promise<Session[]>`

```typescript
type Session = {
type: 'explicit' | 'implicit'
sessionAddress: Address.Address
valueLimit?: bigint
deadline?: bigint
permissions?: Permission.Permission[]
chainId?: number
}
```
`() => Promise<ExplicitSession[]>`

Función para obtener todas las sesiones de la wallet conectada.
Función para obtener todas las sesiones explícitas de la wallet conectada.

## Notas
Este hook proporciona funcionalidad para gestionar sesiones explícitas en conexiones de wallet Sequence V3.
Expand Down
15 changes: 8 additions & 7 deletions es/sdk/web/wallet-sdk/ecosystem/hooks/useFeeOptions.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ sidebarTitle: useFeeOptions

```tsx
import { useFeeOptions } from '@0xsequence/connect'
import { zeroAddress } from 'viem'
```

## Uso
Expand Down Expand Up @@ -69,8 +70,8 @@ function App() {
<input
type="radio"
name="feeOption"
checked={selectedFeeOptionTokenAddress === (option.token.contractAddress || '')}
onChange={() => setSelectedFeeOptionTokenAddress(option.token.contractAddress || '')}
checked={selectedFeeOptionTokenAddress === (option.token.contractAddress || zeroAddress)}
onChange={() => setSelectedFeeOptionTokenAddress(option.token.contractAddress || zeroAddress)}
/>
<label>
{option.token.symbol} - {option.token.contractAddress || 'Native Token'}
Expand All @@ -85,7 +86,7 @@ function App() {
</div>
<div>
<button
onClick={() => handleConfirmFee(selectedFeeOptionTokenAddress || '')}
onClick={() => handleConfirmFee(selectedFeeOptionTokenAddress || zeroAddress)}
disabled={!selectedFeeOptionTokenAddress}
>
Confirm
Expand All @@ -109,7 +110,7 @@ interface FeeOptionsConfig {
}
```

| Parámetro | Type | Description |
| Parámetro | Tipo | Descripción |
| --------------------- | --------- | ------------------------------------------------------------------------------- |
| `skipFeeBalanceCheck` | `boolean` | Indica si se omite la verificación de balances de tokens (por defecto: `false`) |

Expand Down Expand Up @@ -154,17 +155,17 @@ type FeeOptionExtended = Relayer.FeeOption & {

Función para confirmar la opción de tarifa seleccionada.

| Parámetro | Type | Description |
| Parámetro | Tipo | Descripción |
| ----------------- | -------- | ------------------------------------------------------------------------------------------------- |
| `id` | `string` | El ID de confirmación de tarifa |
| `feeTokenAddress` | `string` | La dirección del token a usar para el pago de la comisión (use cadena vacía para el token nativo) |
| `feeTokenAddress` | `string` | La dirección del token a usar para el pago de comisiones (use `zeroAddress` para el token nativo) |

#### rejectPendingFeeOption
`(id: string) => void`

Función para rechazar la selección de la opción de tarifa actual.

| Parámetro | Type | Description |
| Parámetro | Tipo | Descripción |
| --------- | -------- | ------------------------------------------ |
| `id` | `string` | El ID de confirmación de tarifa a rechazar |

Expand Down
79 changes: 79 additions & 0 deletions es/sdk/web/wallet-sdk/ecosystem/hooks/useHasPermission.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
title: useHasPermission
description: Hook para verificar si la sesión actual de Sequence V3 puede ejecutar un conjunto de transacciones
sidebarTitle: useHasPermission
---

## Importar

```tsx
import { useHasPermission } from '@0xsequence/connect'
```

## Uso

```tsx
import { useHasPermission } from '@0xsequence/connect'
import { encodeFunctionData, type TransactionRequest } from 'viem'

function App() {
const { checkPermission, isLoading, error, data } = useHasPermission()

const check = async () => {
const txs: TransactionRequest[] = [
{
to: '0x0000000000000000000000000000000000000000',
data: encodeFunctionData({
abi: [
{
type: 'function',
name: 'foo',
stateMutability: 'nonpayable',
inputs: [],
outputs: []
}
],
functionName: 'foo'
})
}
]

const allowed = await checkPermission({ chainId: 42161, transactions: txs })
console.log('Allowed:', allowed)
}

return (
<div>
<button onClick={check}>Check permission</button>
{isLoading && <div>Checking...</div>}
{error && <div>Error: {error.message}</div>}
{data !== undefined && <div>Allowed: {data ? 'Yes' : 'No'}</div>}
</div>
)
}
```

## Parámetros

```tsx
type HasPermissionParams = {
chainId: number
transactions: TransactionRequest[]
}
```

## Tipo de retorno

```tsx
type UseHasPermissionReturnType = {
isLoading: boolean
error: Error | null
data: boolean | undefined
checkPermission: (params: HasPermissionParams) => Promise<boolean>
}
```

## Notas

- Este hook utiliza internamente el conector de Sequence V3.
- Cada transacción debe incluir una dirección `to`.
Loading