@panal/sdk 0.25.0 → 0.26.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 +49 -0
- package/dist/cifrado.d.ts +147 -0
- package/dist/cifrado.js +333 -0
- package/dist/client.d.ts +174 -2
- package/dist/client.js +451 -33
- package/dist/idiomas.js +2 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +5 -2
- package/dist/net.d.ts +9 -0
- package/dist/net.js +15 -1
- package/dist/tablon-reglas.d.ts +14 -0
- package/dist/tablon-reglas.js +14 -0
- package/package.json +7 -2
package/dist/client.d.ts
CHANGED
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
* y en uso: el caso de "quiero probar esto ahora" no debería exigir un .env.
|
|
17
17
|
*/
|
|
18
18
|
import type { Account, Address, Hex, PublicClient, WalletClient } from 'viem';
|
|
19
|
-
import { type HashedFile } from './files.js';
|
|
19
|
+
import { type AttachedFile, type HashedFile } from './files.js';
|
|
20
|
+
import { type Acceso, type ClaveDeCifrado } from './cifrado.js';
|
|
20
21
|
import { type AskResult, type X402Accept } from './x402.js';
|
|
21
22
|
import { type CallEnvelope } from './envelope.js';
|
|
22
23
|
import { type PanalAddresses, type PanalNetwork } from './chains.js';
|
|
@@ -169,6 +170,99 @@ export declare class PanalClient {
|
|
|
169
170
|
* todo hubiera ido bien.
|
|
170
171
|
*/
|
|
171
172
|
private esperarExito;
|
|
173
|
+
/** La clave de cifrado de esta cuenta, una vez sacada: no se vuelve a firmar. */
|
|
174
|
+
private clave?;
|
|
175
|
+
/**
|
|
176
|
+
* Si lo de un encargo del tablón va cifrado y con qué accesos se abre, por
|
|
177
|
+
* `jobId:adjunto` o `jobId:entrega`. Se aprende al leer el encargo o la
|
|
178
|
+
* entrega y lo usa `downloadBoardJobFiles`, que sin esto pediría los
|
|
179
|
+
* archivos por su nombre de verdad y el buzón los guarda con uno opaco.
|
|
180
|
+
*/
|
|
181
|
+
private readonly cifradoDelTablon;
|
|
182
|
+
/**
|
|
183
|
+
* La clave de cifrado de esta cuenta. Sale de la firma de un mensaje fijo
|
|
184
|
+
* —la misma cuenta firma siempre lo mismo (RFC 6979)—, así que es la misma
|
|
185
|
+
* que en la web y en la app, y no se guarda en ningún sitio.
|
|
186
|
+
*/
|
|
187
|
+
encryptionKey(): Promise<ClaveDeCifrado>;
|
|
188
|
+
/**
|
|
189
|
+
* La clave pública de una cuenta, comprobada contra la firma que la ata a
|
|
190
|
+
* ella. `null` si no ha publicado ninguna, o si lo que sirve el buzón no es
|
|
191
|
+
* suyo: cifrar para una clave falsa sería entregarle el encargo a quien la puso.
|
|
192
|
+
*/
|
|
193
|
+
getPublicKey(cuenta: Address): Promise<string | null>;
|
|
194
|
+
/**
|
|
195
|
+
* Deja publicada la clave de esta cuenta (dos firmas, sin gas, una vez). Si
|
|
196
|
+
* ya estaba, no firma nada más. Si había OTRA, la sustituye y `cambio` lo
|
|
197
|
+
* dice: lo cifrado para la anterior ya no se abrirá con esta.
|
|
198
|
+
*/
|
|
199
|
+
publishEncryptionKey(): Promise<{
|
|
200
|
+
publica: string;
|
|
201
|
+
cambio: boolean;
|
|
202
|
+
}>;
|
|
203
|
+
/**
|
|
204
|
+
* Un texto, abierto: tal cual si va en claro; con la clave de esta cuenta y
|
|
205
|
+
* sus `accesos` si va cifrado. Falla diciendo que no hay acceso, sin pedir
|
|
206
|
+
* ninguna firma, si esta cuenta todavía no puede abrirlo.
|
|
207
|
+
*/
|
|
208
|
+
decryptText(texto: string, accesos?: Acceso[]): Promise<string>;
|
|
209
|
+
/** Los bytes de un archivo, abiertos si van cifrados. */
|
|
210
|
+
decryptFile(bytes: Uint8Array, accesos?: Acceso[]): Promise<Uint8Array>;
|
|
211
|
+
/**
|
|
212
|
+
* El encargo de una tarea DIRECTA, cifrado de punta a punta para quien lo
|
|
213
|
+
* hace y para esta cuenta, que tiene que poder releerlo y recibir la entrega
|
|
214
|
+
* cifrada (por eso publica también su clave, la primera vez).
|
|
215
|
+
*
|
|
216
|
+
* Solo tiene sentido con quien recibe en el buzón de Panal: a un agente con
|
|
217
|
+
* servidor propio el encargo le llega a SU máquina, y cifrárselo sería
|
|
218
|
+
* cifrar para el mismo que lo va a leer. Eso lo decide quien llama.
|
|
219
|
+
*
|
|
220
|
+
* Devuelve `null` si quien lo hace no ha publicado su clave: no hay a quién
|
|
221
|
+
* cifrar. Si no, el texto que se hashea y se manda —con el manifiesto de
|
|
222
|
+
* adjuntos dentro, con su nombre de verdad— y los adjuntos tal como se suben:
|
|
223
|
+
* cifrados y con su nombre opaco, que es lo único que ve el buzón.
|
|
224
|
+
*/
|
|
225
|
+
encryptBriefFor(worker: Address, texto: string, adjuntos?: ArchivoParaSubir[]): Promise<{
|
|
226
|
+
brief: string;
|
|
227
|
+
archivos: {
|
|
228
|
+
file: AttachedFile;
|
|
229
|
+
bytes: Uint8Array;
|
|
230
|
+
}[];
|
|
231
|
+
} | null>;
|
|
232
|
+
/**
|
|
233
|
+
* Quiénes deciden las disputas: los firmantes de la multisig que es el
|
|
234
|
+
* `arbitrator` del escrow. Si el árbitro fuera una cuenta y no una
|
|
235
|
+
* multisig, es él.
|
|
236
|
+
*/
|
|
237
|
+
getArbitrators(): Promise<Address[]>;
|
|
238
|
+
/**
|
|
239
|
+
* Deja accesos en un buzón —el de un agente (`base` = su URL de buzón) o el
|
|
240
|
+
* del tablón— con una firma para todos. El buzón solo los acepta de una
|
|
241
|
+
* parte, y solo para la otra parte o para quien decide; van en trozos de
|
|
242
|
+
* 40, que es lo que admite por petición.
|
|
243
|
+
*/
|
|
244
|
+
private dejarAccesos;
|
|
245
|
+
/**
|
|
246
|
+
* Da acceso a quien decide la disputa a todo lo cifrado de `objetos` que
|
|
247
|
+
* esta cuenta puede abrir: textos anclados y bytes de archivos, tal como
|
|
248
|
+
* están en el buzón. Lo que va en claro se salta (eso ya lo lee).
|
|
249
|
+
*
|
|
250
|
+
* `base` es el buzón de quien trabaja (tarea directa, `id` = la tarea) o el
|
|
251
|
+
* del tablón (`tablon: true`, `id` = el encargo). Devuelve a cuántos
|
|
252
|
+
* firmantes se les dio y quiénes no tienen clave todavía: a esos no se les
|
|
253
|
+
* puede dar hasta que la publiquen.
|
|
254
|
+
*/
|
|
255
|
+
grantArbitratorsAccess(o: {
|
|
256
|
+
base: string;
|
|
257
|
+
id: bigint;
|
|
258
|
+
tablon?: boolean;
|
|
259
|
+
objetos: (string | Uint8Array)[];
|
|
260
|
+
accesos?: Acceso[];
|
|
261
|
+
}): Promise<{
|
|
262
|
+
arbitros: number;
|
|
263
|
+
sinClave: Address[];
|
|
264
|
+
objetos: number;
|
|
265
|
+
}>;
|
|
172
266
|
/** Todos los agentes del registry, activos e inactivos. */
|
|
173
267
|
listAgents(): Promise<Agent[]>;
|
|
174
268
|
/**
|
|
@@ -540,6 +634,12 @@ export declare class PanalClient {
|
|
|
540
634
|
advertHash: Hex;
|
|
541
635
|
/** El encargo tal como se hasheó, con los adjuntos anunciados: para reintentar. */
|
|
542
636
|
encargo: string;
|
|
637
|
+
/**
|
|
638
|
+
* Los adjuntos tal como se suben: para reintentar. Si es confidencial van
|
|
639
|
+
* cifrados y con su nombre opaco, y no se pueden volver a componer (el
|
|
640
|
+
* cifrado es aleatorio): hay que guardar estos.
|
|
641
|
+
*/
|
|
642
|
+
archivos: ArchivoParaSubir[];
|
|
543
643
|
textosGuardados: boolean;
|
|
544
644
|
/** Si los adjuntos están en el buzón. Sin adjuntos, `true`. */
|
|
545
645
|
archivosGuardados: boolean;
|
|
@@ -565,7 +665,28 @@ export declare class PanalClient {
|
|
|
565
665
|
* El hash viene del texto anclado —`readBoardJobBrief` o
|
|
566
666
|
* `readBoardJobResult`—, nunca del buzón. Una firma para todos.
|
|
567
667
|
*/
|
|
568
|
-
downloadBoardJobFiles(jobId: bigint, archivos: HashedFile[], de: 'adjunto' | 'entrega'
|
|
668
|
+
downloadBoardJobFiles(jobId: bigint, archivos: HashedFile[], de: 'adjunto' | 'entrega', opciones?: {
|
|
669
|
+
/**
|
|
670
|
+
* `false`: devolverlos tal como están en el buzón —cifrados, si lo
|
|
671
|
+
* están—, que son los bytes que su hash cubre. Para quien los guarda y
|
|
672
|
+
* los vuelve a comprobar; se abren luego con `openBoardJobFile`.
|
|
673
|
+
*/
|
|
674
|
+
abrir?: boolean;
|
|
675
|
+
}): Promise<Uint8Array[]>;
|
|
676
|
+
/**
|
|
677
|
+
* Abre un archivo de un encargo del tablón bajado con `abrir: false`: con
|
|
678
|
+
* la clave de esta cuenta y sus accesos. Si no va cifrado, lo devuelve tal cual.
|
|
679
|
+
*/
|
|
680
|
+
openBoardJobFile(jobId: bigint, bytes: Uint8Array, de?: 'adjunto' | 'entrega'): Promise<Uint8Array>;
|
|
681
|
+
/** Los bytes de unos archivos del tablón, comprobados contra su hash y SIN abrir. */
|
|
682
|
+
private bajarDelTablon;
|
|
683
|
+
/**
|
|
684
|
+
* Si el encargo (`adjunto`) o la entrega (`entrega`) de un encargo del
|
|
685
|
+
* tablón va cifrado, y los accesos de esta cuenta. Lo recuerda de la última
|
|
686
|
+
* lectura; si no hay, lee. La entrega solo la lee su cliente: un agente
|
|
687
|
+
* cifra la suya si el encargo iba cifrado, así que mira el encargo.
|
|
688
|
+
*/
|
|
689
|
+
private estadoDeCifrado;
|
|
569
690
|
/**
|
|
570
691
|
* Deja en el buzón el anuncio y el encargo de un encargo ya publicado. Sin
|
|
571
692
|
* firma: el buzón solo acepta los textos que dan los hashes de la cadena.
|
|
@@ -585,12 +706,29 @@ export declare class PanalClient {
|
|
|
585
706
|
limit?: number;
|
|
586
707
|
}): Promise<(EncargoConReglas & {
|
|
587
708
|
anuncio: string;
|
|
709
|
+
confidencial: boolean;
|
|
588
710
|
})[]>;
|
|
711
|
+
/**
|
|
712
|
+
* Los anuncios que guarda el buzón del tablón, con si su encargo va cifrado
|
|
713
|
+
* (confidencial). Eso lo dice el buzón y no la cadena: si mintiera, lo que
|
|
714
|
+
* cambia es un aviso, y quien coja el encargo lo verá al abrirlo.
|
|
715
|
+
*/
|
|
716
|
+
private anunciosDelBuzon;
|
|
717
|
+
/**
|
|
718
|
+
* Si un encargo del tablón es confidencial: su encargo va cifrado y solo lo
|
|
719
|
+
* lee quien su cliente elija, que tiene que tener su clave publicada.
|
|
720
|
+
*/
|
|
721
|
+
isBoardJobConfidential(jobId: bigint): Promise<boolean>;
|
|
589
722
|
/**
|
|
590
723
|
* El encargo privado. Lo leen su cliente y su agente en cuanto lo tiene, y
|
|
591
724
|
* se comprueba contra el `taskHash` de la cadena antes de devolverlo.
|
|
592
725
|
*/
|
|
593
726
|
readBoardJobBrief(jobId: bigint): Promise<string>;
|
|
727
|
+
/**
|
|
728
|
+
* El encargo del tablón tal como está anclado —en claro o cifrado—, con los
|
|
729
|
+
* accesos que tiene esta cuenta. Comprobado contra el `taskHash`.
|
|
730
|
+
*/
|
|
731
|
+
private leerEncargoDelTablon;
|
|
594
732
|
/**
|
|
595
733
|
* Entregar un encargo del tablón con reglas: se deja en el buzón y DESPUÉS
|
|
596
734
|
* se ancla su hash en el escrow. Al revés, un fallo del buzón dejaría al
|
|
@@ -606,6 +744,8 @@ export declare class PanalClient {
|
|
|
606
744
|
* en el escrow: el buzón no puede cambiarla.
|
|
607
745
|
*/
|
|
608
746
|
readBoardJobResult(jobId: bigint): Promise<string>;
|
|
747
|
+
/** La entrega tal como está anclada, con los accesos de esta cuenta. */
|
|
748
|
+
private leerEntregaDelTablon;
|
|
609
749
|
/** Coger un encargo inmediato. Antes de firmar pregunta si se puede, y por qué no. */
|
|
610
750
|
takeBoardJob(jobId: bigint): Promise<{
|
|
611
751
|
txHash: Hex;
|
|
@@ -626,7 +766,39 @@ export declare class PanalClient {
|
|
|
626
766
|
chooseBoardOffer(jobId: bigint, agent: Address): Promise<{
|
|
627
767
|
txHash: Hex;
|
|
628
768
|
escrowTaskId: bigint;
|
|
769
|
+
acceso?: {
|
|
770
|
+
ok: true;
|
|
771
|
+
accesos: number;
|
|
772
|
+
} | {
|
|
773
|
+
ok: false;
|
|
774
|
+
error: string;
|
|
775
|
+
};
|
|
776
|
+
}>;
|
|
777
|
+
/**
|
|
778
|
+
* El cliente de un encargo confidencial da acceso al encargo y a sus
|
|
779
|
+
* adjuntos a quien lo tiene (o a `agent`). Se hace solo al elegir; esto es
|
|
780
|
+
* para un encargo que se asignó solo o un acceso que falló. Repetirlo no
|
|
781
|
+
* duplica nada. Devuelve cuántos accesos dejó.
|
|
782
|
+
*/
|
|
783
|
+
grantBoardJobAccess(jobId: bigint, agent?: Address): Promise<number>;
|
|
784
|
+
/**
|
|
785
|
+
* Da acceso a quien decide la disputa de un encargo del tablón (los
|
|
786
|
+
* firmantes de la multisig) a lo cifrado que esta cuenta puede bajarse: el
|
|
787
|
+
* encargo y sus adjuntos y, si es su cliente, la entrega y sus archivos. Sin
|
|
788
|
+
* esto no podrían leerlo —ni Panal puede— y decidirían a ciegas.
|
|
789
|
+
* `disputeBoardJob` no lo hace solo: es otra firma, y puede faltarles la clave.
|
|
790
|
+
*/
|
|
791
|
+
grantBoardDisputeAccess(jobId: bigint): Promise<{
|
|
792
|
+
arbitros: number;
|
|
793
|
+
sinClave: Address[];
|
|
794
|
+
objetos: number;
|
|
629
795
|
}>;
|
|
796
|
+
/**
|
|
797
|
+
* Todo lo cifrado de un encargo del tablón que esta cuenta puede bajarse,
|
|
798
|
+
* tal como está en el buzón, y sus accesos. Con `conEntrega`, también la
|
|
799
|
+
* entrega y sus archivos si es su cliente y ya la hay.
|
|
800
|
+
*/
|
|
801
|
+
private reunirDelTablon;
|
|
630
802
|
/** Asignar un encargo de selección cuyo cliente no eligió. Lo puede llamar cualquiera. */
|
|
631
803
|
autoAssignBoardJob(jobId: bigint): Promise<Hex>;
|
|
632
804
|
/** El cliente aprueba la entrega (1-5) y el encargo se cierra. */
|