@panal/sdk 0.19.1 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -4
- package/dist/agent-card.d.ts +11 -2
- package/dist/chains.d.ts +7 -0
- package/dist/chains.js +2 -0
- package/dist/client.d.ts +141 -0
- package/dist/client.js +417 -1
- package/dist/ejemplos.d.ts +97 -0
- package/dist/ejemplos.js +160 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +11 -0
- package/dist/precios.d.ts +110 -0
- package/dist/precios.js +247 -0
- package/dist/tablon-abi.d.ts +1271 -0
- package/dist/tablon-abi.js +1629 -0
- package/dist/tablon-reglas.d.ts +163 -0
- package/dist/tablon-reglas.js +188 -0
- package/dist/types.js +5 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -67,7 +67,7 @@ const panal = createPanalClient({
|
|
|
67
67
|
});
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
**Lectura** — `listAgents()` · `getAgent(address)` · `searchAgents(query?, { includeInactive })` · `getTask(id)` · `getTaskCount()` · `getPendingWithdrawal(account, currency?)`
|
|
70
|
+
**Lectura** — `listAgents()` · `getAgent(address)` · `searchAgents(query?, { includeInactive })` · `getTask(id)` · `getTaskCount()` · `getPendingWithdrawal(account, currency?)` · `precios()` · `valorDeVentaPanal(cantidad)`
|
|
71
71
|
|
|
72
72
|
**Escritura** — `hire({ agent, brief, amount?, deadline? })` · `approveTask(id, rating)` · `withdraw(currency?)`
|
|
73
73
|
|
|
@@ -98,11 +98,12 @@ LexPanal · Resúmenes legales y traducción EN<->ES · legal, traducción · bo
|
|
|
98
98
|
| `logo:` `web:` `github:` `x:` `telegram:` | la marca del creador, toda opcional |
|
|
99
99
|
| `nivel:<precio>\|<nombre>\|<desc>\|<maxBrief>\|<maxAdj>\|<maxAdjTotal>` | uno por cada tamaño del mismo trabajo |
|
|
100
100
|
| `tipo:persona` | quién hay al otro lado. Sin este token se asume un programa |
|
|
101
|
+
| `ejemplo:<texto>` | un encargo de ejemplo que se propone al contratar. Hasta tres, de 140 caracteres. La clave va en minúsculas y pegada al texto: «Ejemplo: …» en una descripción sigue siendo descripción |
|
|
101
102
|
|
|
102
|
-
**Quien lee la cadena tiene que reconocer todos los tokens, aunque no los use.** No es una recomendación de estilo: los tres primeros campos van por posición, así que un lector que no conozca `tipo:` lo cuenta como un segmento más — y entonces la descripción aparece donde iba el nombre y `tipo:persona` se anuncia como una skill de esa persona. `parseAgentMetadata` los aparta todos aunque solo devuelva los campos de texto; los niveles se leen con `leerNivelesDeMetadata
|
|
103
|
+
**Quien lee la cadena tiene que reconocer todos los tokens, aunque no los use.** No es una recomendación de estilo: los tres primeros campos van por posición, así que un lector que no conozca `tipo:` lo cuenta como un segmento más — y entonces la descripción aparece donde iba el nombre y `tipo:persona` se anuncia como una skill de esa persona. `parseAgentMetadata` los aparta todos aunque solo devuelva los campos de texto; los niveles se leen con `leerNivelesDeMetadata`, quién hay detrás con `leerTipo` y los ejemplos con `leerEjemplosDeMetadata`.
|
|
103
104
|
|
|
104
105
|
```ts
|
|
105
|
-
import { formatAgentMetadata, leerNivelesDeMetadata, leerTipo } from '@panal/sdk';
|
|
106
|
+
import { formatAgentMetadata, leerEjemplosDeMetadata, leerNivelesDeMetadata, leerTipo } from '@panal/sdk';
|
|
106
107
|
|
|
107
108
|
const uri = formatAgentMetadata({
|
|
108
109
|
name: 'MiAgente',
|
|
@@ -114,11 +115,14 @@ const uri = formatAgentMetadata({
|
|
|
114
115
|
|
|
115
116
|
leerTipo(uri); // 'bot' | 'persona'
|
|
116
117
|
leerNivelesDeMetadata(uri); // los tamaños que vende, o []
|
|
118
|
+
leerEjemplosDeMetadata(uri); // los encargos de ejemplo que propone, o []
|
|
117
119
|
```
|
|
118
120
|
|
|
121
|
+
La ficha que sirve el agente en `/agent.json` repite los ejemplos en `examples`, traducidos si se pidió `?lang=`. `conEjemplosDeLaFicha(deLaCadena, leerEjemplos(ficha))` se queda con los traducidos solo si cuadran en número con los de la cadena, que son los vigentes.
|
|
122
|
+
|
|
119
123
|
`formatAgentMetadata` neutraliza los `·` que lleve tu texto, que si no desplazarían las skills a otro segmento y dejarían la ficha descuadrada sin ningún error visible.
|
|
120
124
|
|
|
121
|
-
**Cuidado al recomponer una ficha que ya existía.** El formateador escribe nombre, descripción, skills, `bot:` y la marca — y nada más. Si editas el perfil de un agente que tenía niveles
|
|
125
|
+
**Cuidado al recomponer una ficha que ya existía.** El formateador escribe nombre, descripción, skills, `bot:` y la marca — y nada más. Si editas el perfil de un agente que tenía niveles, `tipo:persona` o ejemplos y guardas solo lo que devuelve, esos tokens desaparecen sin un error: sus precios vuelven a uno, una persona se muda al mercado de los programas y sus ejemplos dejan de salir. Vuelve a añadirlos con `componerNivel`, `tokenDeTipo` y `componerEjemplo`.
|
|
122
126
|
|
|
123
127
|
### Dónde recibe un agente, y el buzón
|
|
124
128
|
|
|
@@ -212,6 +216,67 @@ El nombre y los decimales salen de la lista, nunca de lo que diga la cotización
|
|
|
212
216
|
- `verifyNativePayment` comprueba en la cadena que llegó *esa* transferencia: de quien dice, a ti, por el importe exacto y dentro de plazo.
|
|
213
217
|
- Cada transacción se acepta una sola vez.
|
|
214
218
|
|
|
219
|
+
### El tablón con reglas
|
|
220
|
+
|
|
221
|
+
`PanalTablon` es un contrato delante del escrow que reparte los encargos del
|
|
222
|
+
tablón con reglas: nivel según la reputación, cupo diario, hasta tres
|
|
223
|
+
categorías, ofertas con precio y plazo, y sanciones a quien coge y no entrega
|
|
224
|
+
([especificación](../contracts/BOARD.md)). **Todavía no está desplegado**:
|
|
225
|
+
hasta entonces `boardJobsAvailable` es `false` y los métodos lo dicen; para
|
|
226
|
+
probarlo se pasa su dirección en `addresses.tablon`.
|
|
227
|
+
|
|
228
|
+
```ts
|
|
229
|
+
import { ModoTablon } from '@panal/sdk';
|
|
230
|
+
|
|
231
|
+
// Cliente
|
|
232
|
+
const { jobId } = await panal.postBoardJob({
|
|
233
|
+
encargo, anuncio, categoria: 2, importe: parseEther('2'),
|
|
234
|
+
plazoEntregaS: 3600, caducaEnS: 2 * 86400,
|
|
235
|
+
modo: ModoTablon.Seleccion, ventanaOfertasS: 2 * 3600, ventanaEleccionS: 86400,
|
|
236
|
+
});
|
|
237
|
+
await panal.chooseBoardOffer(jobId, agente); // pone la diferencia si pide más
|
|
238
|
+
await panal.approveBoardJob(jobId, 5);
|
|
239
|
+
await panal.claimBoardRefund(); // lo que sobró de una oferta más barata
|
|
240
|
+
|
|
241
|
+
// Agente
|
|
242
|
+
await panal.setBoardCategories([2]);
|
|
243
|
+
const { ok, motivo } = await panal.canTakeBoardJob(yo, jobId); // antes de gastar gas
|
|
244
|
+
await panal.offerOnBoardJob(jobId, parseEther('1.5'), 1800); // o takeBoardJob en inmediato
|
|
245
|
+
const situacion = await panal.boardStanding(yo); // nivel, cupo, suspensión
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Todo lo que firma comprueba antes si se puede, y si el contrato lo rechazaría
|
|
249
|
+
el error sale por su nombre (`NotAllowed: daily quota used`, `OverTotalCap`…)
|
|
250
|
+
sin enviar nada. `settleBoardJob` lo puede llamar cualquiera: cierra las
|
|
251
|
+
cuentas y, si toca, cancela en el escrow lo no entregado.
|
|
252
|
+
|
|
253
|
+
Los textos viven en el buzón, bajo la dirección del tablón y por número de
|
|
254
|
+
encargo, y se comprueban contra la cadena: `postBoardJob` deja el anuncio y el
|
|
255
|
+
encargo después de publicar (sin firma: solo entran si dan el `advertHash` y el
|
|
256
|
+
`taskHash`), `listBoardJobAdverts` devuelve los anuncios comprobados,
|
|
257
|
+
`readBoardJobBrief` lo leen el cliente y el agente que lo tenga,
|
|
258
|
+
`deliverBoardJob` deja la entrega y después ancla su hash, y
|
|
259
|
+
`readBoardJobResult` se la da al cliente de verdad —en el escrow, el cliente de
|
|
260
|
+
estas tareas es el contrato, que no puede firmar—.
|
|
261
|
+
|
|
262
|
+
### Cuánto es en dólares
|
|
263
|
+
|
|
264
|
+
```ts
|
|
265
|
+
import { enDolares, formatearDolares } from '@panal/sdk';
|
|
266
|
+
|
|
267
|
+
const precios = await panal.precios(); // MON y $PANAL, cada uno con su fecha
|
|
268
|
+
const d = enDolares(100_000n * 10n ** 18n, '$PANAL', precios);
|
|
269
|
+
if (d) console.log(formatearDolares(d.usd)); // «$0.60»
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
MON sale de **Pyth en Monad** y $PANAL de **la curva de nad.fun**, los dos leídos
|
|
273
|
+
en la cadena con el mismo RPC, sin claves; CoinGecko y la API de nad.fun son el
|
|
274
|
+
respaldo. `enDolares` devuelve `null` si el precio tiene más de cinco minutos:
|
|
275
|
+
mejor no enseñar nada que un número viejo. Para decidir si un encargo compensa,
|
|
276
|
+
`valorDeVentaPanal(cantidad)` da lo que de verdad saldría al vender esos $PANAL,
|
|
277
|
+
con la comisión de la curva y el impacto en el precio. Los contratos no leen
|
|
278
|
+
ningún precio: lo que se bloquea es lo que cobra el agente.
|
|
279
|
+
|
|
215
280
|
### El modelo, libre
|
|
216
281
|
|
|
217
282
|
Un agente cobra y entrega on-chain; qué modelo piensa por dentro es asunto suyo. No hay SDK de ningún proveedor: son tres formatos de red, y con esos tres se habla con todos.
|
package/dist/agent-card.d.ts
CHANGED
|
@@ -117,8 +117,8 @@ export interface AgentCard {
|
|
|
117
117
|
name?: string;
|
|
118
118
|
description?: string;
|
|
119
119
|
/**
|
|
120
|
-
* El idioma en el que
|
|
121
|
-
* `?lang=` y el agente pudo traducirlos.
|
|
120
|
+
* El idioma en el que van este `description`, estos `tiers` y estos
|
|
121
|
+
* `examples`, si se pidió con `?lang=` y el agente pudo traducirlos.
|
|
122
122
|
*
|
|
123
123
|
* AUSENTE NO ES «está en inglés»: es que va en el idioma en que su dueño lo
|
|
124
124
|
* escribió, aunque hayas pedido otro. Hay que mirarlo antes de guardar una
|
|
@@ -170,6 +170,15 @@ export interface AgentCard {
|
|
|
170
170
|
/** Alias ANTIGUO de `endpoints.x402Ask`. Se lee; no se escribe. */
|
|
171
171
|
x402Ask?: FichaX402;
|
|
172
172
|
howToHire?: string[];
|
|
173
|
+
/**
|
|
174
|
+
* Encargos de ejemplo, para proponerlos debajo de la caja al contratar.
|
|
175
|
+
* Hasta tres, en el idioma de `lang` si se pidió traducida.
|
|
176
|
+
*
|
|
177
|
+
* La fuente son los `ejemplo:` de la ficha on-chain (ver `ejemplos.ts`);
|
|
178
|
+
* aquí se repiten para poder servirlos traducidos. Léelos con
|
|
179
|
+
* `leerEjemplos`, que los sanea: esta ficha la escribe un servidor ajeno.
|
|
180
|
+
*/
|
|
181
|
+
examples?: string[];
|
|
173
182
|
}
|
|
174
183
|
/** La dirección que la ficha declara suya, mirando también el alias viejo. */
|
|
175
184
|
export declare function leerDireccion(card: unknown): string | null;
|
package/dist/chains.d.ts
CHANGED
|
@@ -130,6 +130,13 @@ export interface PanalAddresses {
|
|
|
130
130
|
* nada esté levantado.
|
|
131
131
|
*/
|
|
132
132
|
names: Address;
|
|
133
|
+
/**
|
|
134
|
+
* PanalTablon: el tablón con reglas delante del escrow (contracts/BOARD.md).
|
|
135
|
+
* Cero mientras no esté desplegado: los métodos `…BoardJob` lo dicen en vez
|
|
136
|
+
* de mandar nada a la dirección cero. Para probarlo antes, se pasa en
|
|
137
|
+
* `addresses`.
|
|
138
|
+
*/
|
|
139
|
+
tablon: Address;
|
|
133
140
|
}
|
|
134
141
|
/** Desplegados en Monad mainnet el 2026-07-29 (escrow v2 auditado). */
|
|
135
142
|
export declare const MAINNET_ADDRESSES: PanalAddresses;
|
package/dist/chains.js
CHANGED
|
@@ -33,6 +33,7 @@ export const MAINNET_ADDRESSES = {
|
|
|
33
33
|
panalToken: '0x2e2e44e7fa6178822d4397299f719e89d1a67777',
|
|
34
34
|
arbitrator: '0xc384C1F5D6716571DA84329BeAaE6F064C6b1Fe0',
|
|
35
35
|
names: '0xc94a8107C87859cAd2E472e71BbE25c15cdD614A',
|
|
36
|
+
tablon: '0x0000000000000000000000000000000000000000',
|
|
36
37
|
};
|
|
37
38
|
/**
|
|
38
39
|
* En testnet solo hay registry y escrow desplegados. El resto queda a cero: el
|
|
@@ -45,6 +46,7 @@ export const TESTNET_ADDRESSES = {
|
|
|
45
46
|
panalToken: '0x0000000000000000000000000000000000000000',
|
|
46
47
|
arbitrator: '0x0000000000000000000000000000000000000000',
|
|
47
48
|
names: '0x0000000000000000000000000000000000000000',
|
|
49
|
+
tablon: '0x0000000000000000000000000000000000000000',
|
|
48
50
|
};
|
|
49
51
|
/** `address(0)` significa MON nativo en todo el protocolo. */
|
|
50
52
|
export const NATIVE_CURRENCY = '0x0000000000000000000000000000000000000000';
|
package/dist/client.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ import type { Account, Address, Hex, PublicClient, WalletClient } from 'viem';
|
|
|
19
19
|
import { type AskResult, type X402Accept } from './x402.js';
|
|
20
20
|
import { type CallEnvelope } from './envelope.js';
|
|
21
21
|
import { type PanalAddresses, type PanalNetwork } from './chains.js';
|
|
22
|
+
import { type OpcionesPrecios, type Precios } from './precios.js';
|
|
23
|
+
import { EstadoTablon, type EncargoConReglas, type OfertaConReglas, type PublicarEnElTablon, type SituacionEnElTablon } from './tablon-reglas.js';
|
|
22
24
|
import { type EncargoDelTablon } from './tablon.js';
|
|
23
25
|
import { TaskStatus, type Agent, type AgentMetadata, type Task } from './types.js';
|
|
24
26
|
export interface PanalClientOptions {
|
|
@@ -222,6 +224,18 @@ export declare class PanalClient {
|
|
|
222
224
|
getTaskCount(): Promise<bigint>;
|
|
223
225
|
/** Saldo acreditado y pendiente de retirar, por moneda. */
|
|
224
226
|
getPendingWithdrawal(account: Address, currency?: Address): Promise<bigint>;
|
|
227
|
+
/**
|
|
228
|
+
* Cuánto valen hoy MON y $PANAL en dólares, cada precio con su fecha.
|
|
229
|
+
* Solo en mainnet: en testnet no hay precios que valgan.
|
|
230
|
+
* Ver precios.ts; para convertir una cantidad, `enDolares`.
|
|
231
|
+
*/
|
|
232
|
+
precios(opciones?: OpcionesPrecios): Promise<Precios>;
|
|
233
|
+
/**
|
|
234
|
+
* Lo que daría vender `cantidad` $PANAL ahora en la curva de nad.fun, en MON
|
|
235
|
+
* (wei), con comisión e impacto. Es lo que de verdad cobraría un agente que
|
|
236
|
+
* los vendiera; `null` si la curva no responde.
|
|
237
|
+
*/
|
|
238
|
+
valorDeVentaPanal(cantidad: bigint): Promise<bigint | null>;
|
|
225
239
|
/**
|
|
226
240
|
* Contrata a un agente: bloquea el pago en el escrow y crea la tarea.
|
|
227
241
|
*
|
|
@@ -480,6 +494,133 @@ export declare class PanalClient {
|
|
|
480
494
|
*/
|
|
481
495
|
withdraw(currency?: Address): Promise<Hex>;
|
|
482
496
|
/** Comprueba el saldo antes de firmar, para fallar con un mensaje legible. */
|
|
497
|
+
/** Si PanalTablon existe en esta red. Hasta que se despliegue, no. */
|
|
498
|
+
get boardJobsAvailable(): boolean;
|
|
499
|
+
/** La dirección de PanalTablon, o un error que dice que aún no existe. */
|
|
500
|
+
private tablon;
|
|
501
|
+
private leerTablon;
|
|
502
|
+
getBoardJob(jobId: bigint): Promise<EncargoConReglas>;
|
|
503
|
+
getBoardJobCount(): Promise<bigint>;
|
|
504
|
+
/**
|
|
505
|
+
* Los últimos encargos, del más nuevo al más viejo; por defecto solo los
|
|
506
|
+
* publicados. Se leen de diez en diez: el RPC público limita.
|
|
507
|
+
*/
|
|
508
|
+
listBoardJobs(opciones?: {
|
|
509
|
+
limit?: number;
|
|
510
|
+
estado?: EstadoTablon | 'todos';
|
|
511
|
+
}): Promise<EncargoConReglas[]>;
|
|
512
|
+
getBoardOffers(jobId: bigint): Promise<OfertaConReglas[]>;
|
|
513
|
+
/** Si un agente puede coger (inmediato) u ofertar (selección) ahora, y por qué no. */
|
|
514
|
+
canTakeBoardJob(agent: Address, jobId: bigint): Promise<{
|
|
515
|
+
ok: boolean;
|
|
516
|
+
motivo: string;
|
|
517
|
+
}>;
|
|
518
|
+
/** Su nivel, lo que le queda hoy, si está suspendido y sus categorías. */
|
|
519
|
+
boardStanding(agent: Address): Promise<SituacionEnElTablon>;
|
|
520
|
+
/** Lo que PanalTablon le debe a un cliente en una moneda: se cobra con `claimBoardRefund`. */
|
|
521
|
+
getBoardRefund(client: Address, currency?: Address): Promise<bigint>;
|
|
522
|
+
/**
|
|
523
|
+
* Firma en PanalTablon con el gas fijado y espera a que salga bien. Si el
|
|
524
|
+
* contrato lo rechazaría, la estimación ya falla con el error por su nombre
|
|
525
|
+
* (`NotAllowed`, `OverTotalCap`…) y no se envía nada.
|
|
526
|
+
*/
|
|
527
|
+
private firmarEnTablon;
|
|
528
|
+
/** `approve` exacto a PanalTablon para un pago en token. Nunca infinito. */
|
|
529
|
+
private aprobarAlTablon;
|
|
530
|
+
/**
|
|
531
|
+
* Publica un encargo en el tablón con reglas. El encargo y el anuncio NO se
|
|
532
|
+
* suben aquí: a la cadena va su keccak256, y los textos se dejan en el
|
|
533
|
+
* buzón, que los comprueba contra esos hashes.
|
|
534
|
+
*/
|
|
535
|
+
postBoardJob(p: PublicarEnElTablon): Promise<{
|
|
536
|
+
jobId: bigint;
|
|
537
|
+
txHash: Hex;
|
|
538
|
+
taskHash: Hex;
|
|
539
|
+
advertHash: Hex;
|
|
540
|
+
textosGuardados: boolean;
|
|
541
|
+
error?: string;
|
|
542
|
+
}>;
|
|
543
|
+
/**
|
|
544
|
+
* Deja en el buzón el anuncio y el encargo de un encargo ya publicado. Sin
|
|
545
|
+
* firma: el buzón solo acepta los textos que dan los hashes de la cadena.
|
|
546
|
+
* Repetirlo no molesta.
|
|
547
|
+
*/
|
|
548
|
+
publishBoardJobTexts(jobId: bigint, textos: {
|
|
549
|
+
anuncio: string;
|
|
550
|
+
encargo: string;
|
|
551
|
+
}): Promise<void>;
|
|
552
|
+
/** Lo que se firma para leer del buzón: dirección, firma y caducidad. */
|
|
553
|
+
private credencialesDeBuzon;
|
|
554
|
+
/**
|
|
555
|
+
* El anuncio de cada encargo publicado, comprobado contra su `advertHash`.
|
|
556
|
+
* Un anuncio que no cuadre no se devuelve: el buzón no puede inventarse uno.
|
|
557
|
+
*/
|
|
558
|
+
listBoardJobAdverts(opciones?: {
|
|
559
|
+
limit?: number;
|
|
560
|
+
}): Promise<(EncargoConReglas & {
|
|
561
|
+
anuncio: string;
|
|
562
|
+
})[]>;
|
|
563
|
+
/**
|
|
564
|
+
* El encargo privado. Lo leen su cliente y su agente en cuanto lo tiene, y
|
|
565
|
+
* se comprueba contra el `taskHash` de la cadena antes de devolverlo.
|
|
566
|
+
*/
|
|
567
|
+
readBoardJobBrief(jobId: bigint): Promise<string>;
|
|
568
|
+
/**
|
|
569
|
+
* Entregar un encargo del tablón con reglas: se deja en el buzón y DESPUÉS
|
|
570
|
+
* se ancla su hash en el escrow. Al revés, un fallo del buzón dejaría al
|
|
571
|
+
* cliente con una entrega anclada que no puede descargar.
|
|
572
|
+
*/
|
|
573
|
+
deliverBoardJob(jobId: bigint, texto: string): Promise<{
|
|
574
|
+
txHash: Hex;
|
|
575
|
+
resultHash: Hex;
|
|
576
|
+
}>;
|
|
577
|
+
/**
|
|
578
|
+
* La entrega, para su cliente. Se comprueba contra el `resultHash` anclado
|
|
579
|
+
* en el escrow: el buzón no puede cambiarla.
|
|
580
|
+
*/
|
|
581
|
+
readBoardJobResult(jobId: bigint): Promise<string>;
|
|
582
|
+
/** Coger un encargo inmediato. Antes de firmar pregunta si se puede, y por qué no. */
|
|
583
|
+
takeBoardJob(jobId: bigint): Promise<{
|
|
584
|
+
txHash: Hex;
|
|
585
|
+
escrowTaskId: bigint;
|
|
586
|
+
}>;
|
|
587
|
+
/**
|
|
588
|
+
* Ofertar en un encargo de selección: precio y plazo (0 = el del encargo).
|
|
589
|
+
* Volver a llamar cambia la oferta. Un precio por encima del presupuesto vale:
|
|
590
|
+
* solo lo puede elegir el cliente, poniendo la diferencia.
|
|
591
|
+
*/
|
|
592
|
+
offerOnBoardJob(jobId: bigint, precio: bigint, plazoEntregaS?: number): Promise<Hex>;
|
|
593
|
+
withdrawBoardOffer(jobId: bigint): Promise<Hex>;
|
|
594
|
+
/**
|
|
595
|
+
* El cliente elige una oferta. Si pide más que el presupuesto, se manda la
|
|
596
|
+
* diferencia exacta (en $PANAL, con su `approve` exacto); si pide menos, la
|
|
597
|
+
* diferencia queda para cobrar con `claimBoardRefund`.
|
|
598
|
+
*/
|
|
599
|
+
chooseBoardOffer(jobId: bigint, agent: Address): Promise<{
|
|
600
|
+
txHash: Hex;
|
|
601
|
+
escrowTaskId: bigint;
|
|
602
|
+
}>;
|
|
603
|
+
/** Asignar un encargo de selección cuyo cliente no eligió. Lo puede llamar cualquiera. */
|
|
604
|
+
autoAssignBoardJob(jobId: bigint): Promise<Hex>;
|
|
605
|
+
/** El cliente aprueba la entrega (1-5) y el encargo se cierra. */
|
|
606
|
+
approveBoardJob(jobId: bigint, rating: number): Promise<Hex>;
|
|
607
|
+
disputeBoardJob(jobId: bigint): Promise<Hex>;
|
|
608
|
+
/**
|
|
609
|
+
* Cerrar las cuentas de un encargo. Si el escrow se puede adelantar
|
|
610
|
+
* —cancelar sin entrega pasado el plazo, liberar a las 72 h, devolver una
|
|
611
|
+
* disputa atascada— lo hace primero. Lo puede llamar cualquiera.
|
|
612
|
+
*/
|
|
613
|
+
settleBoardJob(jobId: bigint): Promise<Hex>;
|
|
614
|
+
/** El cliente retira un encargo que nadie tiene todavía. */
|
|
615
|
+
withdrawBoardJob(jobId: bigint): Promise<Hex>;
|
|
616
|
+
expireBoardJob(jobId: bigint): Promise<Hex>;
|
|
617
|
+
/** Cobrar lo que PanalTablon le debe a esta cuenta en una moneda. */
|
|
618
|
+
claimBoardRefund(currency?: Address): Promise<{
|
|
619
|
+
txHash: Hex;
|
|
620
|
+
importe: bigint;
|
|
621
|
+
}>;
|
|
622
|
+
/** Las categorías del agente en el tablón: hasta tres, sin repetir. */
|
|
623
|
+
setBoardCategories(categorias: number[]): Promise<Hex>;
|
|
483
624
|
private assertFunds;
|
|
484
625
|
}
|
|
485
626
|
/** Atajo: `createPanalClient()` sin argumentos ya habla con mainnet. */
|