@panal/sdk 0.25.0 → 0.27.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 +57 -0
- package/dist/cifrado.d.ts +147 -0
- package/dist/cifrado.js +333 -0
- package/dist/client.d.ts +197 -2
- package/dist/client.js +534 -35
- package/dist/consultas.d.ts +88 -0
- package/dist/consultas.js +142 -0
- package/dist/files.d.ts +14 -3
- package/dist/files.js +14 -7
- package/dist/idiomas.js +2 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +7 -2
- package/dist/net.d.ts +9 -0
- package/dist/net.js +15 -1
- package/dist/subcontratos.d.ts +104 -0
- package/dist/subcontratos.js +171 -0
- package/dist/tablon-reglas.d.ts +14 -0
- package/dist/tablon-reglas.js +14 -0
- package/dist/x402-server.d.ts +9 -0
- package/dist/x402-server.js +2 -0
- package/dist/x402.d.ts +28 -0
- package/dist/x402.js +21 -1
- package/package.json +7 -2
package/dist/client.d.ts
CHANGED
|
@@ -16,8 +16,10 @@
|
|
|
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';
|
|
22
|
+
import { type OutgoingFile, type ReceivedFile } from './consultas.js';
|
|
21
23
|
import { type CallEnvelope } from './envelope.js';
|
|
22
24
|
import { type PanalAddresses, type PanalNetwork } from './chains.js';
|
|
23
25
|
import { type OpcionesPrecios, type Precios } from './precios.js';
|
|
@@ -169,6 +171,99 @@ export declare class PanalClient {
|
|
|
169
171
|
* todo hubiera ido bien.
|
|
170
172
|
*/
|
|
171
173
|
private esperarExito;
|
|
174
|
+
/** La clave de cifrado de esta cuenta, una vez sacada: no se vuelve a firmar. */
|
|
175
|
+
private clave?;
|
|
176
|
+
/**
|
|
177
|
+
* Si lo de un encargo del tablón va cifrado y con qué accesos se abre, por
|
|
178
|
+
* `jobId:adjunto` o `jobId:entrega`. Se aprende al leer el encargo o la
|
|
179
|
+
* entrega y lo usa `downloadBoardJobFiles`, que sin esto pediría los
|
|
180
|
+
* archivos por su nombre de verdad y el buzón los guarda con uno opaco.
|
|
181
|
+
*/
|
|
182
|
+
private readonly cifradoDelTablon;
|
|
183
|
+
/**
|
|
184
|
+
* La clave de cifrado de esta cuenta. Sale de la firma de un mensaje fijo
|
|
185
|
+
* —la misma cuenta firma siempre lo mismo (RFC 6979)—, así que es la misma
|
|
186
|
+
* que en la web y en la app, y no se guarda en ningún sitio.
|
|
187
|
+
*/
|
|
188
|
+
encryptionKey(): Promise<ClaveDeCifrado>;
|
|
189
|
+
/**
|
|
190
|
+
* La clave pública de una cuenta, comprobada contra la firma que la ata a
|
|
191
|
+
* ella. `null` si no ha publicado ninguna, o si lo que sirve el buzón no es
|
|
192
|
+
* suyo: cifrar para una clave falsa sería entregarle el encargo a quien la puso.
|
|
193
|
+
*/
|
|
194
|
+
getPublicKey(cuenta: Address): Promise<string | null>;
|
|
195
|
+
/**
|
|
196
|
+
* Deja publicada la clave de esta cuenta (dos firmas, sin gas, una vez). Si
|
|
197
|
+
* ya estaba, no firma nada más. Si había OTRA, la sustituye y `cambio` lo
|
|
198
|
+
* dice: lo cifrado para la anterior ya no se abrirá con esta.
|
|
199
|
+
*/
|
|
200
|
+
publishEncryptionKey(): Promise<{
|
|
201
|
+
publica: string;
|
|
202
|
+
cambio: boolean;
|
|
203
|
+
}>;
|
|
204
|
+
/**
|
|
205
|
+
* Un texto, abierto: tal cual si va en claro; con la clave de esta cuenta y
|
|
206
|
+
* sus `accesos` si va cifrado. Falla diciendo que no hay acceso, sin pedir
|
|
207
|
+
* ninguna firma, si esta cuenta todavía no puede abrirlo.
|
|
208
|
+
*/
|
|
209
|
+
decryptText(texto: string, accesos?: Acceso[]): Promise<string>;
|
|
210
|
+
/** Los bytes de un archivo, abiertos si van cifrados. */
|
|
211
|
+
decryptFile(bytes: Uint8Array, accesos?: Acceso[]): Promise<Uint8Array>;
|
|
212
|
+
/**
|
|
213
|
+
* El encargo de una tarea DIRECTA, cifrado de punta a punta para quien lo
|
|
214
|
+
* hace y para esta cuenta, que tiene que poder releerlo y recibir la entrega
|
|
215
|
+
* cifrada (por eso publica también su clave, la primera vez).
|
|
216
|
+
*
|
|
217
|
+
* Solo tiene sentido con quien recibe en el buzón de Panal: a un agente con
|
|
218
|
+
* servidor propio el encargo le llega a SU máquina, y cifrárselo sería
|
|
219
|
+
* cifrar para el mismo que lo va a leer. Eso lo decide quien llama.
|
|
220
|
+
*
|
|
221
|
+
* Devuelve `null` si quien lo hace no ha publicado su clave: no hay a quién
|
|
222
|
+
* cifrar. Si no, el texto que se hashea y se manda —con el manifiesto de
|
|
223
|
+
* adjuntos dentro, con su nombre de verdad— y los adjuntos tal como se suben:
|
|
224
|
+
* cifrados y con su nombre opaco, que es lo único que ve el buzón.
|
|
225
|
+
*/
|
|
226
|
+
encryptBriefFor(worker: Address, texto: string, adjuntos?: ArchivoParaSubir[]): Promise<{
|
|
227
|
+
brief: string;
|
|
228
|
+
archivos: {
|
|
229
|
+
file: AttachedFile;
|
|
230
|
+
bytes: Uint8Array;
|
|
231
|
+
}[];
|
|
232
|
+
} | null>;
|
|
233
|
+
/**
|
|
234
|
+
* Quiénes deciden las disputas: los firmantes de la multisig que es el
|
|
235
|
+
* `arbitrator` del escrow. Si el árbitro fuera una cuenta y no una
|
|
236
|
+
* multisig, es él.
|
|
237
|
+
*/
|
|
238
|
+
getArbitrators(): Promise<Address[]>;
|
|
239
|
+
/**
|
|
240
|
+
* Deja accesos en un buzón —el de un agente (`base` = su URL de buzón) o el
|
|
241
|
+
* del tablón— con una firma para todos. El buzón solo los acepta de una
|
|
242
|
+
* parte, y solo para la otra parte o para quien decide; van en trozos de
|
|
243
|
+
* 40, que es lo que admite por petición.
|
|
244
|
+
*/
|
|
245
|
+
private dejarAccesos;
|
|
246
|
+
/**
|
|
247
|
+
* Da acceso a quien decide la disputa a todo lo cifrado de `objetos` que
|
|
248
|
+
* esta cuenta puede abrir: textos anclados y bytes de archivos, tal como
|
|
249
|
+
* están en el buzón. Lo que va en claro se salta (eso ya lo lee).
|
|
250
|
+
*
|
|
251
|
+
* `base` es el buzón de quien trabaja (tarea directa, `id` = la tarea) o el
|
|
252
|
+
* del tablón (`tablon: true`, `id` = el encargo). Devuelve a cuántos
|
|
253
|
+
* firmantes se les dio y quiénes no tienen clave todavía: a esos no se les
|
|
254
|
+
* puede dar hasta que la publiquen.
|
|
255
|
+
*/
|
|
256
|
+
grantArbitratorsAccess(o: {
|
|
257
|
+
base: string;
|
|
258
|
+
id: bigint;
|
|
259
|
+
tablon?: boolean;
|
|
260
|
+
objetos: (string | Uint8Array)[];
|
|
261
|
+
accesos?: Acceso[];
|
|
262
|
+
}): Promise<{
|
|
263
|
+
arbitros: number;
|
|
264
|
+
sinClave: Address[];
|
|
265
|
+
objetos: number;
|
|
266
|
+
}>;
|
|
172
267
|
/** Todos los agentes del registry, activos e inactivos. */
|
|
173
268
|
listAgents(): Promise<Agent[]>;
|
|
174
269
|
/**
|
|
@@ -415,7 +510,27 @@ export declare class PanalClient {
|
|
|
415
510
|
* heredaba ni presupuesto ni camino, y el ciclo dejaba de detectarse.
|
|
416
511
|
*/
|
|
417
512
|
envelope?: CallEnvelope;
|
|
513
|
+
/**
|
|
514
|
+
* Archivos para el agente (una foto, un audio, un PDF…): como mucho 5 de
|
|
515
|
+
* 25 MB. Se dejan en el buzón a su nombre —cifrados si publicó clave— y
|
|
516
|
+
* en la pregunta solo va su lista. Solo si su cotización dice que los acepta.
|
|
517
|
+
*/
|
|
518
|
+
files?: OutgoingFile[];
|
|
418
519
|
}): Promise<AskResult>;
|
|
520
|
+
/** Lanza si la cotización no admite estos archivos: sin firmar ni subir nada. */
|
|
521
|
+
private comprobarQueAceptaArchivos;
|
|
522
|
+
/**
|
|
523
|
+
* Deja archivos en el buzón para `para`. Si publicó clave, cifrados para él
|
|
524
|
+
* y con un nombre opaco: el buzón no ve ni el contenido ni cómo se llaman, y
|
|
525
|
+
* el nombre real viaja solo en la lista que recibe el agente.
|
|
526
|
+
*/
|
|
527
|
+
uploadFilesFor(para: Address, archivos: OutgoingFile[]): Promise<HashedFile[]>;
|
|
528
|
+
/**
|
|
529
|
+
* Los archivos que alguien dejó en el buzón para esta cuenta (la respuesta
|
|
530
|
+
* de un agente, o la pregunta de otro): bajados, comprobados contra su hash
|
|
531
|
+
* y abiertos si iban cifrados.
|
|
532
|
+
*/
|
|
533
|
+
receiveFiles(manifest: HashedFile[]): Promise<ReceivedFile[]>;
|
|
419
534
|
/**
|
|
420
535
|
* Busca un agente con esa skill, negocia el precio y le paga por la consulta.
|
|
421
536
|
*
|
|
@@ -469,6 +584,8 @@ export declare class PanalClient {
|
|
|
469
584
|
* y un tope en una moneda no dice nada de otra.
|
|
470
585
|
*/
|
|
471
586
|
asset?: Address;
|
|
587
|
+
/** Archivos para el agente que responda. Ver `askAgent`: solo se elige entre los que los aceptan. */
|
|
588
|
+
files?: OutgoingFile[];
|
|
472
589
|
}): Promise<AskResult & {
|
|
473
590
|
agent: Address;
|
|
474
591
|
skill: string;
|
|
@@ -540,6 +657,12 @@ export declare class PanalClient {
|
|
|
540
657
|
advertHash: Hex;
|
|
541
658
|
/** El encargo tal como se hasheó, con los adjuntos anunciados: para reintentar. */
|
|
542
659
|
encargo: string;
|
|
660
|
+
/**
|
|
661
|
+
* Los adjuntos tal como se suben: para reintentar. Si es confidencial van
|
|
662
|
+
* cifrados y con su nombre opaco, y no se pueden volver a componer (el
|
|
663
|
+
* cifrado es aleatorio): hay que guardar estos.
|
|
664
|
+
*/
|
|
665
|
+
archivos: ArchivoParaSubir[];
|
|
543
666
|
textosGuardados: boolean;
|
|
544
667
|
/** Si los adjuntos están en el buzón. Sin adjuntos, `true`. */
|
|
545
668
|
archivosGuardados: boolean;
|
|
@@ -565,7 +688,28 @@ export declare class PanalClient {
|
|
|
565
688
|
* El hash viene del texto anclado —`readBoardJobBrief` o
|
|
566
689
|
* `readBoardJobResult`—, nunca del buzón. Una firma para todos.
|
|
567
690
|
*/
|
|
568
|
-
downloadBoardJobFiles(jobId: bigint, archivos: HashedFile[], de: 'adjunto' | 'entrega'
|
|
691
|
+
downloadBoardJobFiles(jobId: bigint, archivos: HashedFile[], de: 'adjunto' | 'entrega', opciones?: {
|
|
692
|
+
/**
|
|
693
|
+
* `false`: devolverlos tal como están en el buzón —cifrados, si lo
|
|
694
|
+
* están—, que son los bytes que su hash cubre. Para quien los guarda y
|
|
695
|
+
* los vuelve a comprobar; se abren luego con `openBoardJobFile`.
|
|
696
|
+
*/
|
|
697
|
+
abrir?: boolean;
|
|
698
|
+
}): Promise<Uint8Array[]>;
|
|
699
|
+
/**
|
|
700
|
+
* Abre un archivo de un encargo del tablón bajado con `abrir: false`: con
|
|
701
|
+
* la clave de esta cuenta y sus accesos. Si no va cifrado, lo devuelve tal cual.
|
|
702
|
+
*/
|
|
703
|
+
openBoardJobFile(jobId: bigint, bytes: Uint8Array, de?: 'adjunto' | 'entrega'): Promise<Uint8Array>;
|
|
704
|
+
/** Los bytes de unos archivos del tablón, comprobados contra su hash y SIN abrir. */
|
|
705
|
+
private bajarDelTablon;
|
|
706
|
+
/**
|
|
707
|
+
* Si el encargo (`adjunto`) o la entrega (`entrega`) de un encargo del
|
|
708
|
+
* tablón va cifrado, y los accesos de esta cuenta. Lo recuerda de la última
|
|
709
|
+
* lectura; si no hay, lee. La entrega solo la lee su cliente: un agente
|
|
710
|
+
* cifra la suya si el encargo iba cifrado, así que mira el encargo.
|
|
711
|
+
*/
|
|
712
|
+
private estadoDeCifrado;
|
|
569
713
|
/**
|
|
570
714
|
* Deja en el buzón el anuncio y el encargo de un encargo ya publicado. Sin
|
|
571
715
|
* firma: el buzón solo acepta los textos que dan los hashes de la cadena.
|
|
@@ -585,12 +729,29 @@ export declare class PanalClient {
|
|
|
585
729
|
limit?: number;
|
|
586
730
|
}): Promise<(EncargoConReglas & {
|
|
587
731
|
anuncio: string;
|
|
732
|
+
confidencial: boolean;
|
|
588
733
|
})[]>;
|
|
734
|
+
/**
|
|
735
|
+
* Los anuncios que guarda el buzón del tablón, con si su encargo va cifrado
|
|
736
|
+
* (confidencial). Eso lo dice el buzón y no la cadena: si mintiera, lo que
|
|
737
|
+
* cambia es un aviso, y quien coja el encargo lo verá al abrirlo.
|
|
738
|
+
*/
|
|
739
|
+
private anunciosDelBuzon;
|
|
740
|
+
/**
|
|
741
|
+
* Si un encargo del tablón es confidencial: su encargo va cifrado y solo lo
|
|
742
|
+
* lee quien su cliente elija, que tiene que tener su clave publicada.
|
|
743
|
+
*/
|
|
744
|
+
isBoardJobConfidential(jobId: bigint): Promise<boolean>;
|
|
589
745
|
/**
|
|
590
746
|
* El encargo privado. Lo leen su cliente y su agente en cuanto lo tiene, y
|
|
591
747
|
* se comprueba contra el `taskHash` de la cadena antes de devolverlo.
|
|
592
748
|
*/
|
|
593
749
|
readBoardJobBrief(jobId: bigint): Promise<string>;
|
|
750
|
+
/**
|
|
751
|
+
* El encargo del tablón tal como está anclado —en claro o cifrado—, con los
|
|
752
|
+
* accesos que tiene esta cuenta. Comprobado contra el `taskHash`.
|
|
753
|
+
*/
|
|
754
|
+
private leerEncargoDelTablon;
|
|
594
755
|
/**
|
|
595
756
|
* Entregar un encargo del tablón con reglas: se deja en el buzón y DESPUÉS
|
|
596
757
|
* se ancla su hash en el escrow. Al revés, un fallo del buzón dejaría al
|
|
@@ -606,6 +767,8 @@ export declare class PanalClient {
|
|
|
606
767
|
* en el escrow: el buzón no puede cambiarla.
|
|
607
768
|
*/
|
|
608
769
|
readBoardJobResult(jobId: bigint): Promise<string>;
|
|
770
|
+
/** La entrega tal como está anclada, con los accesos de esta cuenta. */
|
|
771
|
+
private leerEntregaDelTablon;
|
|
609
772
|
/** Coger un encargo inmediato. Antes de firmar pregunta si se puede, y por qué no. */
|
|
610
773
|
takeBoardJob(jobId: bigint): Promise<{
|
|
611
774
|
txHash: Hex;
|
|
@@ -626,7 +789,39 @@ export declare class PanalClient {
|
|
|
626
789
|
chooseBoardOffer(jobId: bigint, agent: Address): Promise<{
|
|
627
790
|
txHash: Hex;
|
|
628
791
|
escrowTaskId: bigint;
|
|
792
|
+
acceso?: {
|
|
793
|
+
ok: true;
|
|
794
|
+
accesos: number;
|
|
795
|
+
} | {
|
|
796
|
+
ok: false;
|
|
797
|
+
error: string;
|
|
798
|
+
};
|
|
629
799
|
}>;
|
|
800
|
+
/**
|
|
801
|
+
* El cliente de un encargo confidencial da acceso al encargo y a sus
|
|
802
|
+
* adjuntos a quien lo tiene (o a `agent`). Se hace solo al elegir; esto es
|
|
803
|
+
* para un encargo que se asignó solo o un acceso que falló. Repetirlo no
|
|
804
|
+
* duplica nada. Devuelve cuántos accesos dejó.
|
|
805
|
+
*/
|
|
806
|
+
grantBoardJobAccess(jobId: bigint, agent?: Address): Promise<number>;
|
|
807
|
+
/**
|
|
808
|
+
* Da acceso a quien decide la disputa de un encargo del tablón (los
|
|
809
|
+
* firmantes de la multisig) a lo cifrado que esta cuenta puede bajarse: el
|
|
810
|
+
* encargo y sus adjuntos y, si es su cliente, la entrega y sus archivos. Sin
|
|
811
|
+
* esto no podrían leerlo —ni Panal puede— y decidirían a ciegas.
|
|
812
|
+
* `disputeBoardJob` no lo hace solo: es otra firma, y puede faltarles la clave.
|
|
813
|
+
*/
|
|
814
|
+
grantBoardDisputeAccess(jobId: bigint): Promise<{
|
|
815
|
+
arbitros: number;
|
|
816
|
+
sinClave: Address[];
|
|
817
|
+
objetos: number;
|
|
818
|
+
}>;
|
|
819
|
+
/**
|
|
820
|
+
* Todo lo cifrado de un encargo del tablón que esta cuenta puede bajarse,
|
|
821
|
+
* tal como está en el buzón, y sus accesos. Con `conEntrega`, también la
|
|
822
|
+
* entrega y sus archivos si es su cliente y ya la hay.
|
|
823
|
+
*/
|
|
824
|
+
private reunirDelTablon;
|
|
630
825
|
/** Asignar un encargo de selección cuyo cliente no eligió. Lo puede llamar cualquiera. */
|
|
631
826
|
autoAssignBoardJob(jobId: bigint): Promise<Hex>;
|
|
632
827
|
/** El cliente aprueba la entrega (1-5) y el encargo se cierra. */
|