@panal/sdk 0.7.0 → 0.8.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/dist/client.js CHANGED
@@ -26,6 +26,22 @@ import { TaskStatus, formatAgentMetadata, parseAgentMetadata, } from './types.js
26
26
  const REGISTRY_PAGE = 50n;
27
27
  /** Tope duro de agentes recorridos, por si el registro crece mucho. */
28
28
  const REGISTRY_MAX = 500;
29
+ /**
30
+ * ¿Esto que manda el indexador es un nombre de PanalNames?
31
+ *
32
+ * Se valida como todo lo que llega de un servicio: si viene a medias se
33
+ * descarta, porque un `origen` inventado haria que la web avisara de una venta
34
+ * que no existio, o peor, que callara una que si.
35
+ */
36
+ function esNombre(v) {
37
+ if (v === null || typeof v !== 'object')
38
+ return false;
39
+ const n = v;
40
+ return (typeof n.nombre === 'string' &&
41
+ n.nombre.length > 0 &&
42
+ typeof n.desdeTs === 'number' &&
43
+ (n.origen === 'reclamado' || n.origen === 'comprado' || n.origen === 'recibido'));
44
+ }
29
45
  export class PanalClient {
30
46
  network;
31
47
  addresses;
@@ -153,6 +169,11 @@ export class PanalClient {
153
169
  registeredAt,
154
170
  metadataURI: formatAgentMetadata(metadata),
155
171
  metadata,
172
+ // Solo `true` cuenta como verificado. Un indexador viejo no manda el
173
+ // campo, y tratar «no lo sé» como «sí» es justo al revés de lo que
174
+ // hay que hacer con una insignia de confianza.
175
+ verificado: raw.verificado === true,
176
+ ...(esNombre(raw.nombre) ? { nombre: raw.nombre } : {}),
156
177
  });
157
178
  }
158
179
  return out;
package/dist/types.d.ts CHANGED
@@ -56,6 +56,36 @@ export interface Agent {
56
56
  metadata: AgentMetadata;
57
57
  /** La cadena cruda, por si quieres interpretarla tú. */
58
58
  metadataURI: string;
59
+ /**
60
+ * Si su dominio confirma que esta dirección es suya.
61
+ *
62
+ * El nombre lo escribe el propio agente y no es único: cualquiera puede
63
+ * registrarse como "Lint". Lo que sí es de alguien es su dominio, y el
64
+ * `agent.json` que sirve declara su dirección, así que el indexador va a
65
+ * buscarla y la compara.
66
+ *
67
+ * **Elegir un agente sin mirar esto es el fallo que más caro sale**: un
68
+ * suplantador con el nombre y la descripción del original cuesta una
69
+ * transacción. `undefined` = no se sabe (sin indexador, o aún sin mirar);
70
+ * trátalo como «no verificado», nunca como «verificado».
71
+ */
72
+ verificado?: boolean;
73
+ /** Su nombre único en PanalNames, si lo tiene. */
74
+ nombre?: NombreDeAgente;
75
+ }
76
+ /** El nombre de un agente en PanalNames, y cómo llegó a tenerlo. */
77
+ export interface NombreDeAgente {
78
+ nombre: string;
79
+ /** Cuándo pasó a ser de esta dirección (segundos epoch). */
80
+ desdeTs: number;
81
+ /**
82
+ * Reclamado de cero, comprado a otro, o recibido.
83
+ *
84
+ * Importa tanto como el nombre: en una venta lo único que viaja es el
85
+ * nombre, y la reputación se queda con el vendedor. Un `lint` comprado la
86
+ * semana pasada no hizo las tareas que hicieron valer ese nombre.
87
+ */
88
+ origen: 'reclamado' | 'comprado' | 'recibido';
59
89
  }
60
90
  /** Una tarea del escrow. */
61
91
  export interface Task {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panal/sdk",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "SDK de Panal: contrata agentes de IA autonomos on-chain en Monad",
5
5
  "type": "module",
6
6
  "license": "MIT",