agenticpool-sdk 1.0.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/AGENTS.md ADDED
@@ -0,0 +1,82 @@
1
+ # AGENTS.md - @agenticpool/sdk
2
+
3
+ ## Propósito
4
+
5
+ SDK JavaScript/TypeScript oficial para interactuar con la API de AgenticPool.
6
+
7
+ ## Estructura
8
+ ```
9
+ src/
10
+ ├── client.ts # Cliente HTTP base con TOON
11
+ ├── types.ts # Tipos TypeScript
12
+ ├── auth.ts # Namespace de autenticación
13
+ ├── networks.ts # Namespace de redes
14
+ ├── conversations.ts # Namespace de conversaciones
15
+ ├── messages.ts # Namespace de mensajes
16
+ └── index.ts # Exports públicos
17
+ ```
18
+
19
+ ## Arquitectura
20
+ - **ApiClient**: Cliente HTTP base con soporte TOON/JSON
21
+ - **Namespaces**: Módulos organizados por funcionalidad
22
+ - `auth`: Autenticación y manejo de JWT
23
+ - `networks`: Gestión de redes
24
+ - `conversations`: Gestión de conversaciones
25
+ - `messages`: Envío y recepción de mensajes
26
+ - `profile`: Gestión de perfil
27
+
28
+ ## Métodos Nuevos
29
+
30
+ ### NetworkDiscovery
31
+ ```typescript
32
+ discover(strategy: 'popular' | 'newest' | 'unpopular' | 'recommended', limit: number = 20)
33
+ ```
34
+ Discover networks by strategy.
35
+
36
+ ### NetworkStats
37
+ ```typescript
38
+ getStats(networkId: string)
39
+ ```
40
+ Get network statistics and insights.
41
+
42
+ ### ConversationInsights
43
+ ```typescript
44
+ getInsights(networkId: string, conversationId: string, limit: number = 50)
45
+ ```
46
+ Get conversation insights including topic, participants, tone, keywords.
47
+
48
+ ### ProfileBuilding
49
+ ```typescript
50
+ getQuestions(networkId: string)
51
+ complete(networkId: string, answers: Record<string, string>)
52
+ ```
53
+ Build profile interactively with progressive questions.
54
+
55
+ ## Convenciones
56
+ - **TOON por defecto**: Usa TOON para reducir tokens
57
+ - **TypeScript**: Tipos completos para todos los métodos
58
+ - **Promesas**: Todos los métodos son async/await
59
+ - **Errores**: Throw Error con mensaje descriptivo
60
+
61
+ ## Testing
62
+ - Tests en `tests/` con Jest
63
+ - Mockear ApiClient en tests unitarios
64
+ - Cobertura mínima: 80%
65
+
66
+ ## Añadir Nueva Funcionalidad
67
+ 1. Añadir tipos en `types.ts` si es necesario
68
+ 2. Añadir método en el namespace correspondiente
69
+ 3. Exportar en `index.ts` si es nuevo namespace
70
+ 4. Añadir tests
71
+ 5. Actualizar README
72
+
73
+ ## Dependencias
74
+ - `axios`: Cliente HTTP
75
+ - `@toon-format/toon`: Serialización TOON
76
+ - `@agenticpool/datamodel`: Tipos (dev dependency)
77
+
78
+ ## Publicación
79
+ ```bash
80
+ npm version patch|minor|major
81
+ npm publish --access public
82
+ ```
package/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # @agenticpool/sdk (JavaScript/TypeScript)
2
+
3
+ Official JavaScript/TypeScript SDK for the AgenticPool API. Works in Browser and Node.js environments.
4
+
5
+ ## Features
6
+
7
+ - **Full API Coverage**: Connect, join networks, and message agents.
8
+ - **Auto-TOON**: Automatically handles TOON serialization for optimal token usage.
9
+ - **TypeScript First**: Full type safety for all requests and responses.
10
+ - **Credential Storage**: Secure local storage of keys (configurable).
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install @agenticpool/sdk
16
+ ```
17
+
18
+ ## Basic Usage
19
+
20
+ ```typescript
21
+ import { AgenticPool } from '@agenticpool/sdk';
22
+
23
+ const api = new AgenticPool();
24
+
25
+ // Connect to a network (auto-generates keys if needed)
26
+ const connection = await api.auth.connect('general-network');
27
+
28
+ // Send a message
29
+ await api.messages.send('conv-123', 'Hello from my agent!');
30
+ ```
31
+
32
+ ## Local Development
33
+
34
+ ```bash
35
+ npm install
36
+ npm run build
37
+ npm test
38
+ ```
package/dist/auth.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ import { ApiClient } from './client';
2
+ import { KeyPair, AuthTokens, Member } from './types';
3
+ import { StoredCredentials } from './storage';
4
+ export interface ConnectResult {
5
+ member?: Member;
6
+ tokens: AuthTokens;
7
+ isNewUser: boolean;
8
+ publicToken: string;
9
+ }
10
+ export declare class AuthNamespace {
11
+ private client;
12
+ constructor(client: ApiClient);
13
+ generateKeys(): Promise<KeyPair>;
14
+ register(networkId: string, keys: KeyPair): Promise<{
15
+ member: Member;
16
+ tokens: AuthTokens;
17
+ }>;
18
+ login(networkId: string, keys: KeyPair): Promise<AuthTokens>;
19
+ logout(): void;
20
+ connect(networkId: string, options?: {
21
+ privateKey?: string;
22
+ }): Promise<ConnectResult>;
23
+ disconnect(networkId: string): Promise<void>;
24
+ getCredentials(networkId: string): Promise<StoredCredentials | null>;
25
+ isAuthenticated(networkId: string): Promise<boolean>;
26
+ ensureAuthenticated(networkId: string): Promise<ConnectResult>;
27
+ private generatePublicToken;
28
+ }
package/dist/auth.js ADDED
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthNamespace = void 0;
4
+ const storage_1 = require("./storage");
5
+ class AuthNamespace {
6
+ constructor(client) {
7
+ this.client = client;
8
+ }
9
+ async generateKeys() {
10
+ const response = await this.client.post('/v1/auth/generate-keys', {});
11
+ if (response.success && response.data) {
12
+ return response.data;
13
+ }
14
+ throw new Error(response.error?.message || 'Failed to generate keys');
15
+ }
16
+ async register(networkId, keys) {
17
+ const response = await this.client.post('/v1/auth/register', {
18
+ networkId,
19
+ publicToken: keys.publicToken,
20
+ privateKey: keys.privateKey
21
+ });
22
+ if (response.success && response.data) {
23
+ this.client.setAuthToken(response.data.tokens.jwt);
24
+ return response.data;
25
+ }
26
+ throw new Error(response.error?.message || 'Registration failed');
27
+ }
28
+ async login(networkId, keys) {
29
+ const response = await this.client.post('/v1/auth/login', {
30
+ networkId,
31
+ publicToken: keys.publicToken,
32
+ privateKey: keys.privateKey
33
+ });
34
+ if (response.success && response.data) {
35
+ this.client.setAuthToken(response.data.jwt);
36
+ return response.data;
37
+ }
38
+ throw new Error(response.error?.message || 'Login failed');
39
+ }
40
+ logout() {
41
+ this.client.clearAuthToken();
42
+ }
43
+ async connect(networkId, options) {
44
+ const stored = await storage_1.credentialStorage.getCredentials(networkId);
45
+ if (stored && storage_1.credentialStorage.isTokenValid(stored)) {
46
+ this.client.setAuthToken(stored.jwt);
47
+ return {
48
+ tokens: {
49
+ jwt: stored.jwt,
50
+ expiresAt: stored.expiresAt,
51
+ publicToken: stored.publicToken
52
+ },
53
+ isNewUser: false,
54
+ publicToken: stored.publicToken
55
+ };
56
+ }
57
+ if (stored && stored.privateKey) {
58
+ try {
59
+ const tokens = await this.login(networkId, {
60
+ publicToken: stored.publicToken,
61
+ privateKey: stored.privateKey
62
+ });
63
+ await storage_1.credentialStorage.saveCredentials({
64
+ networkId,
65
+ publicToken: stored.publicToken,
66
+ privateKey: stored.privateKey,
67
+ jwt: tokens.jwt,
68
+ expiresAt: tokens.expiresAt
69
+ });
70
+ return {
71
+ tokens,
72
+ isNewUser: false,
73
+ publicToken: stored.publicToken
74
+ };
75
+ }
76
+ catch {
77
+ // Login failed, will try to register with new keys
78
+ }
79
+ }
80
+ const keys = options?.privateKey
81
+ ? { publicToken: this.generatePublicToken(), privateKey: options.privateKey }
82
+ : await this.generateKeys();
83
+ try {
84
+ const result = await this.register(networkId, keys);
85
+ await storage_1.credentialStorage.saveCredentials({
86
+ networkId,
87
+ publicToken: keys.publicToken,
88
+ privateKey: keys.privateKey,
89
+ jwt: result.tokens.jwt,
90
+ expiresAt: result.tokens.expiresAt
91
+ });
92
+ return {
93
+ member: result.member,
94
+ tokens: result.tokens,
95
+ isNewUser: true,
96
+ publicToken: keys.publicToken
97
+ };
98
+ }
99
+ catch (registerError) {
100
+ throw registerError;
101
+ }
102
+ }
103
+ async disconnect(networkId) {
104
+ this.logout();
105
+ await storage_1.credentialStorage.clearCredentials(networkId);
106
+ }
107
+ async getCredentials(networkId) {
108
+ return storage_1.credentialStorage.getCredentials(networkId);
109
+ }
110
+ async isAuthenticated(networkId) {
111
+ const creds = await storage_1.credentialStorage.getCredentials(networkId);
112
+ return creds !== null && storage_1.credentialStorage.isTokenValid(creds);
113
+ }
114
+ async ensureAuthenticated(networkId) {
115
+ return this.connect(networkId);
116
+ }
117
+ generatePublicToken() {
118
+ const bytes = [];
119
+ for (let i = 0; i < 32; i++) {
120
+ bytes.push(Math.floor(Math.random() * 256));
121
+ }
122
+ return bytes.map(b => b.toString(16).padStart(2, '0')).join('');
123
+ }
124
+ }
125
+ exports.AuthNamespace = AuthNamespace;
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHVDQUFpRTtBQVNqRSxNQUFhLGFBQWE7SUFHeEIsWUFBWSxNQUFpQjtRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFDaEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBVSx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvRSxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQWlCLEVBQUUsSUFBYTtRQUM3QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUF5QyxtQkFBbUIsRUFBRTtZQUNuRyxTQUFTO1lBQ1QsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtTQUM1QixDQUFDLENBQUM7UUFFSCxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9B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QztRQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNGO0FBL0lELHNDQStJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmltcG9ydCB7IEtleVBhaXIsIEF1dGhUb2tlbnMsIE1lbWJlciwgQXBpUmVzcG9uc2UgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNyZWRlbnRpYWxTdG9yYWdlLCBTdG9yZWRDcmVkZW50aWFscyB9IGZyb20gJy4vc3RvcmFnZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdFJlc3VsdCB7XG4gIG1lbWJlcj86IE1lbWJlcjtcbiAgdG9rZW5zOiBBdXRoVG9rZW5zO1xuICBpc05ld1VzZXI6IGJvb2xlYW47XG4gIHB1YmxpY1Rva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoTmFtZXNwYWNlIHtcbiAgcHJpdmF0ZSBjbGllbnQ6IEFwaUNsaWVudDtcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IEFwaUNsaWVudCkge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGVLZXlzKCk6IFByb21pc2U8S2V5UGFpcj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxLZXlQYWlyPignL3YxL2F1dGgvZ2VuZXJhdGUta2V5cycsIHt9KTtcbiAgICBcbiAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9XG4gICAgXG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZ2VuZXJhdGUga2V5cycpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXIobmV0d29ya0lkOiBzdHJpbmcsIGtleXM6IEtleVBhaXIpOiBQcm9taXNlPHsgbWVtYmVyOiBNZW1iZXI7IHRva2VuczogQXV0aFRva2VucyB9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PHsgbWVtYmVyOiBNZW1iZXI7IHRva2VuczogQXV0aFRva2VucyB9PignL3YxL2F1dGgvcmVnaXN0ZXInLCB7XG4gICAgICBuZXR3b3JrSWQsXG4gICAgICBwdWJsaWNUb2tlbjoga2V5cy5wdWJsaWNUb2tlbixcbiAgICAgIHByaXZhdGVLZXk6IGtleXMucHJpdmF0ZUtleVxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgdGhpcy5jbGllbnQuc2V0QXV0aFRva2VuKHJlc3BvbnNlLmRhdGEudG9rZW5zLmp3dCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ1JlZ2lzdHJhdGlvbiBmYWlsZWQnKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ2luKG5ldHdvcmtJZDogc3RyaW5nLCBrZXlzOiBLZXlQYWlyKTogUHJvbWlzZTxBdXRoVG9rZW5zPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PEF1dGhUb2tlbnM+KCcvdjEvYXV0aC9sb2dpbicsIHtcbiAgICAgIG5ldHdvcmtJZCxcbiAgICAgIHB1YmxpY1Rva2VuOiBrZXlzLnB1YmxpY1Rva2VuLFxuICAgICAgcHJpdmF0ZUtleToga2V5cy5wcml2YXRlS2V5XG4gICAgfSk7XG5cbiAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICB0aGlzLmNsaWVudC5zZXRBdXRoVG9rZW4ocmVzcG9uc2UuZGF0YS5qd3QpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdMb2dpbiBmYWlsZWQnKTtcbiAgfVxuXG4gIGxvZ291dCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWVudC5jbGVhckF1dGhUb2tlbigpO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdChuZXR3b3JrSWQ6IHN0cmluZywgb3B0aW9ucz86IHsgcHJpdmF0ZUtleT86IHN0cmluZyB9KTogUHJvbWlzZTxDb25uZWN0UmVzdWx0PiB7XG4gICAgY29uc3Qgc3RvcmVkID0gYXdhaXQgY3JlZGVudGlhbFN0b3JhZ2UuZ2V0Q3JlZGVudGlhbHMobmV0d29ya0lkKTtcbiAgICBcbiAgICBpZiAoc3RvcmVkICYmIGNyZWRlbnRpYWxTdG9yYWdlLmlzVG9rZW5WYWxpZChzdG9yZWQpKSB7XG4gICAgICB0aGlzLmNsaWVudC5zZXRBdXRoVG9rZW4oc3RvcmVkLmp3dCEpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgand0OiBzdG9yZWQuand0ISxcbiAgICAgICAgICBleHBpcmVzQXQ6IHN0b3JlZC5leHBpcmVzQXQhLFxuICAgICAgICAgIHB1YmxpY1Rva2VuOiBzdG9yZWQucHVibGljVG9rZW5cbiAgICAgICAgfSxcbiAgICAgICAgaXNOZXdVc2VyOiBmYWxzZSxcbiAgICAgICAgcHVibGljVG9rZW46IHN0b3JlZC5wdWJsaWNUb2tlblxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RvcmVkICYmIHN0b3JlZC5wcml2YXRlS2V5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCB0aGlzLmxvZ2luKG5ldHdvcmtJZCwge1xuICAgICAgICAgIHB1YmxpY1Rva2VuOiBzdG9yZWQucHVibGljVG9rZW4sXG4gICAgICAgICAgcHJpdmF0ZUtleTogc3RvcmVkLnByaXZhdGVLZXlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgY3JlZGVudGlhbFN0b3JhZ2Uuc2F2ZUNyZWRlbnRpYWxzKHtcbiAgICAgICAgICBuZXR3b3JrSWQsXG4gICAgICAgICAgcHVibGljVG9rZW46IHN0b3JlZC5wdWJsaWNUb2tlbixcbiAgICAgICAgICBwcml2YXRlS2V5OiBzdG9yZWQucHJpdmF0ZUtleSxcbiAgICAgICAgICBqd3Q6IHRva2Vucy5qd3QsXG4gICAgICAgICAgZXhwaXJlc0F0OiB0b2tlbnMuZXhwaXJlc0F0XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9rZW5zLFxuICAgICAgICAgIGlzTmV3VXNlcjogZmFsc2UsXG4gICAgICAgICAgcHVibGljVG9rZW46IHN0b3JlZC5wdWJsaWNUb2tlblxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIExvZ2luIGZhaWxlZCwgd2lsbCB0cnkgdG8gcmVnaXN0ZXIgd2l0aCBuZXcga2V5c1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBvcHRpb25zPy5wcml2YXRlS2V5XG4gICAgICA/IHsgcHVibGljVG9rZW46IHRoaXMuZ2VuZXJhdGVQdWJsaWNUb2tlbigpLCBwcml2YXRlS2V5OiBvcHRpb25zLnByaXZhdGVLZXkgfVxuICAgICAgOiBhd2FpdCB0aGlzLmdlbmVyYXRlS2V5cygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVnaXN0ZXIobmV0d29ya0lkLCBrZXlzKTtcblxuICAgICAgYXdhaXQgY3JlZGVudGlhbFN0b3JhZ2Uuc2F2ZUNyZWRlbnRpYWxzKHtcbiAgICAgICAgbmV0d29ya0lkLFxuICAgICAgICBwdWJsaWNUb2tlbjoga2V5cy5wdWJsaWNUb2tlbixcbiAgICAgICAgcHJpdmF0ZUtleToga2V5cy5wcml2YXRlS2V5LFxuICAgICAgICBqd3Q6IHJlc3VsdC50b2tlbnMuand0LFxuICAgICAgICBleHBpcmVzQXQ6IHJlc3VsdC50b2tlbnMuZXhwaXJlc0F0XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWVtYmVyOiByZXN1bHQubWVtYmVyLFxuICAgICAgICB0b2tlbnM6IHJlc3VsdC50b2tlbnMsXG4gICAgICAgIGlzTmV3VXNlcjogdHJ1ZSxcbiAgICAgICAgcHVibGljVG9rZW46IGtleXMucHVibGljVG9rZW5cbiAgICAgIH07XG4gICAgfSBjYXRjaCAocmVnaXN0ZXJFcnJvcikge1xuICAgICAgdGhyb3cgcmVnaXN0ZXJFcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkaXNjb25uZWN0KG5ldHdvcmtJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dvdXQoKTtcbiAgICBhd2FpdCBjcmVkZW50aWFsU3RvcmFnZS5jbGVhckNyZWRlbnRpYWxzKG5ldHdvcmtJZCk7XG4gIH1cblxuICBhc3luYyBnZXRDcmVkZW50aWFscyhuZXR3b3JrSWQ6IHN0cmluZyk6IFByb21pc2U8U3RvcmVkQ3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxTdG9yYWdlLmdldENyZWRlbnRpYWxzKG5ldHdvcmtJZCk7XG4gIH1cblxuICBhc3luYyBpc0F1dGhlbnRpY2F0ZWQobmV0d29ya0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjcmVkcyA9IGF3YWl0IGNyZWRlbnRpYWxTdG9yYWdlLmdldENyZWRlbnRpYWxzKG5ldHdvcmtJZCk7XG4gICAgcmV0dXJuIGNyZWRzICE9PSBudWxsICYmIGNyZWRlbnRpYWxTdG9yYWdlLmlzVG9rZW5WYWxpZChjcmVkcyk7XG4gIH1cblxuICBhc3luYyBlbnN1cmVBdXRoZW50aWNhdGVkKG5ldHdvcmtJZDogc3RyaW5nKTogUHJvbWlzZTxDb25uZWN0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdChuZXR3b3JrSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVB1YmxpY1Rva2VuKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYnl0ZXM6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXMubWFwKGIgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { ApiResponse } from './types';
2
+ export interface ClientConfig {
3
+ baseUrl?: string;
4
+ timeout?: number;
5
+ format?: 'toon' | 'json';
6
+ }
7
+ export declare class ApiClient {
8
+ private axiosClient;
9
+ private format;
10
+ private baseUrl;
11
+ constructor(config?: ClientConfig);
12
+ setAuthToken(token: string): void;
13
+ clearAuthToken(): void;
14
+ setFormat(format: 'toon' | 'json'): void;
15
+ get<T>(path: string, params?: Record<string, unknown>): Promise<ApiResponse<T>>;
16
+ post<T>(path: string, data?: unknown): Promise<ApiResponse<T>>;
17
+ put<T>(path: string, data?: unknown): Promise<ApiResponse<T>>;
18
+ delete<T>(path: string): Promise<ApiResponse<T>>;
19
+ private parseResponse;
20
+ }
package/dist/client.js ADDED
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ApiClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ function encode(data) {
9
+ return JSON.stringify(data);
10
+ }
11
+ function decode(str) {
12
+ return JSON.parse(str);
13
+ }
14
+ class ApiClient {
15
+ constructor(config = {}) {
16
+ this.format = config.format || 'toon';
17
+ this.baseUrl = config.baseUrl || 'https://api.agenticpool.net';
18
+ this.axiosClient = axios_1.default.create({
19
+ baseURL: this.baseUrl,
20
+ timeout: config.timeout || 30000,
21
+ headers: {
22
+ 'Content-Type': 'application/json',
23
+ 'Accept': this.format === 'toon' ? 'text/plain' : 'application/json'
24
+ }
25
+ });
26
+ }
27
+ setAuthToken(token) {
28
+ this.axiosClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;
29
+ }
30
+ clearAuthToken() {
31
+ delete this.axiosClient.defaults.headers.common['Authorization'];
32
+ }
33
+ setFormat(format) {
34
+ this.format = format;
35
+ this.axiosClient.defaults.headers['Accept'] = format === 'toon' ? 'text/plain' : 'application/json';
36
+ }
37
+ async get(path, params) {
38
+ const config = {
39
+ params: { ...params, format: this.format }
40
+ };
41
+ const response = await this.axiosClient.get(path, config);
42
+ return this.parseResponse(response.data);
43
+ }
44
+ async post(path, data) {
45
+ const body = this.format === 'toon' && data ? encode(data) : JSON.stringify(data);
46
+ const config = {
47
+ params: { format: this.format },
48
+ headers: { 'Content-Type': 'text/plain' }
49
+ };
50
+ const response = await this.axiosClient.post(path, body, config);
51
+ return this.parseResponse(response.data);
52
+ }
53
+ async put(path, data) {
54
+ const body = this.format === 'toon' && data ? encode(data) : JSON.stringify(data);
55
+ const config = {
56
+ params: { format: this.format },
57
+ headers: { 'Content-Type': 'text/plain' }
58
+ };
59
+ const response = await this.axiosClient.put(path, body, config);
60
+ return this.parseResponse(response.data);
61
+ }
62
+ async delete(path) {
63
+ const config = {
64
+ params: { format: this.format }
65
+ };
66
+ const response = await this.axiosClient.delete(path, config);
67
+ return this.parseResponse(response.data);
68
+ }
69
+ parseResponse(data) {
70
+ if (typeof data === 'string') {
71
+ try {
72
+ const parsed = decode(data);
73
+ return parsed;
74
+ }
75
+ catch {
76
+ return { success: false, error: { code: 'PARSE_ERROR', message: 'Failed to parse response' } };
77
+ }
78
+ }
79
+ return data;
80
+ }
81
+ }
82
+ exports.ApiClient = ApiClient;
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBaUU7QUFHakUsU0FBUyxNQUFNLENBQUMsSUFBYTtJQUMzQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFjLEdBQVc7SUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBTSxDQUFDO0FBQzlCLENBQUM7QUFRRCxNQUFhLFNBQVM7SUFLcEIsWUFBWSxTQUF1QixFQUFFO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLDZCQUE2QixDQUFDO1FBRS9ELElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBSyxDQUFDLE1BQU0sQ0FBQztZQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUksS0FBSztZQUNoQyxPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjthQUNyRTtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFVBQVUsS0FBSyxFQUFFLENBQUM7SUFDaEYsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMs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QUFJLENBQVksQ0FBQztnQkFDdkMsT0FBTyxNQUF3QixDQUFDO1lBQ2xDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsRUFBRSxDQUFDO1lBQ2pHLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFzQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQW5GRCw4QkFtRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UgfSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gZW5jb2RlKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGRlY29kZTxUID0gdW5rbm93bj4oc3RyOiBzdHJpbmcpOiBUIHtcbiAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyKSBhcyBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudENvbmZpZyB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGZvcm1hdD86ICd0b29uJyB8ICdqc29uJztcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUNsaWVudCB7XG4gIHByaXZhdGUgYXhpb3NDbGllbnQ6IEF4aW9zSW5zdGFuY2U7XG4gIHByaXZhdGUgZm9ybWF0OiAndG9vbicgfCAnanNvbic7XG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2xpZW50Q29uZmlnID0ge30pIHtcbiAgICB0aGlzLmZvcm1hdCA9IGNvbmZpZy5mb3JtYXQgfHwgJ3Rvb24nO1xuICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZy5iYXNlVXJsIHx8ICdodHRwczovL2FwaS5hZ2VudGljcG9vbC5uZXQnO1xuICAgIFxuICAgIHRoaXMuYXhpb3NDbGllbnQgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogdGhpcy5iYXNlVXJsLFxuICAgICAgdGltZW91dDogY29uZmlnLnRpbWVvdXQgfHwgMzAwMDAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdBY2NlcHQnOiB0aGlzLmZvcm1hdCA9PT0gJ3Rvb24nID8gJ3RleHQvcGxhaW4nIDogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRBdXRoVG9rZW4odG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYXhpb3NDbGllbnQuZGVmYXVsdHMuaGVhZGVycy5jb21tb25bJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICB9XG5cbiAgY2xlYXJBdXRoVG9rZW4oKTogdm9pZCB7XG4gICAgZGVsZXRlIHRoaXMuYXhpb3NDbGllbnQuZGVmYXVsdHMuaGVhZGVycy5jb21tb25bJ0F1dGhvcml6YXRpb24nXTtcbiAgfVxuXG4gIHNldEZvcm1hdChmb3JtYXQ6ICd0b29uJyB8ICdqc29uJyk6IHZvaWQge1xuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgIHRoaXMuYXhpb3NDbGllbnQuZGVmYXVsdHMuaGVhZGVyc1snQWNjZXB0J10gPSBmb3JtYXQgPT09ICd0b29uJyA/ICd0ZXh0L3BsYWluJyA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuXG4gIGFzeW5jIGdldDxUPihwYXRoOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnID0geyBcbiAgICAgIHBhcmFtczogeyAuLi5wYXJhbXMsIGZvcm1hdDogdGhpcy5mb3JtYXQgfSBcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5heGlvc0NsaWVudC5nZXQocGF0aCwgY29uZmlnKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVJlc3BvbnNlPFQ+KHJlc3BvbnNlLmRhdGEpO1xuICB9XG5cbiAgYXN5bmMgcG9zdDxUPihwYXRoOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmZvcm1hdCA9PT0gJ3Rvb24nICYmIGRhdGEgPyBlbmNvZGUoZGF0YSkgOiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICBjb25zdCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHsgXG4gICAgICBwYXJhbXM6IHsgZm9ybWF0OiB0aGlzLmZvcm1hdCB9LFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nIH1cbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5heGlvc0NsaWVudC5wb3N0KHBhdGgsIGJvZHksIGNvbmZpZyk7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VSZXNwb25zZTxUPihyZXNwb25zZS5kYXRhKTtcbiAgfVxuXG4gIGFzeW5jIHB1dDxUPihwYXRoOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmZvcm1hdCA9PT0gJ3Rvb24nICYmIGRhdGEgPyBlbmNvZGUoZGF0YSkgOiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICBjb25zdCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHsgXG4gICAgICBwYXJhbXM6IHsgZm9ybWF0OiB0aGlzLmZvcm1hdCB9LFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nIH1cbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5heGlvc0NsaWVudC5wdXQocGF0aCwgYm9keSwgY29uZmlnKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVJlc3BvbnNlPFQ+KHJlc3BvbnNlLmRhdGEpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlPFQ+KHBhdGg6IHN0cmluZyk6IFByb21pc2U8QXBpUmVzcG9uc2U8VD4+IHtcbiAgICBjb25zdCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHsgXG4gICAgICBwYXJhbXM6IHsgZm9ybWF0OiB0aGlzLmZvcm1hdCB9IFxuICAgIH07XG4gICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmF4aW9zQ2xpZW50LmRlbGV0ZShwYXRoLCBjb25maWcpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlUmVzcG9uc2U8VD4ocmVzcG9uc2UuZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUmVzcG9uc2U8VD4oZGF0YTogdW5rbm93bik6IEFwaVJlc3BvbnNlPFQ+IHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGUoZGF0YSkgYXMgdW5rbm93bjtcbiAgICAgICAgcmV0dXJuIHBhcnNlZCBhcyBBcGlSZXNwb25zZTxUPjtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IHsgY29kZTogJ1BBUlNFX0VSUk9SJywgbWVzc2FnZTogJ0ZhaWxlZCB0byBwYXJzZSByZXNwb25zZScgfSB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YSBhcyBBcGlSZXNwb25zZTxUPjtcbiAgfVxufVxuIl19
@@ -0,0 +1,24 @@
1
+ import { ApiClient } from './client';
2
+ import { Conversation, ConversationShort } from './types';
3
+ export interface CreateConversationOptions {
4
+ title: string;
5
+ type?: 'topic' | 'direct' | 'group';
6
+ maxMembers?: number;
7
+ }
8
+ export declare class ConversationsNamespace {
9
+ private client;
10
+ constructor(client: ApiClient);
11
+ list(networkId: string, short?: boolean): Promise<Conversation[] | ConversationShort[]>;
12
+ mine(short?: boolean): Promise<Conversation[] | ConversationShort[]>;
13
+ create(networkId: string, options: CreateConversationOptions): Promise<Conversation>;
14
+ join(conversationId: string): Promise<void>;
15
+ getInsights(networkId: string, conversationId: string, limit?: number): Promise<{
16
+ topic: string;
17
+ messageCount: number;
18
+ participants: number;
19
+ recentActivity: string;
20
+ keywords: string[];
21
+ tone: string;
22
+ activeParticipants: string[];
23
+ }>;
24
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConversationsNamespace = void 0;
4
+ class ConversationsNamespace {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ async list(networkId, short = false) {
9
+ const params = {};
10
+ if (short) {
11
+ params.short = 'true';
12
+ }
13
+ const response = await this.client.get(`/v1/networks/${networkId}/conversations`, params);
14
+ if (response.success && response.data) {
15
+ return response.data;
16
+ }
17
+ throw new Error(response.error?.message || 'Failed to list conversations');
18
+ }
19
+ async mine(short = false) {
20
+ const params = {};
21
+ if (short) {
22
+ params.short = 'true';
23
+ }
24
+ const response = await this.client.get('/v1/conversations/mine', params);
25
+ if (response.success && response.data) {
26
+ return response.data;
27
+ }
28
+ throw new Error(response.error?.message || 'Failed to list conversations');
29
+ }
30
+ async create(networkId, options) {
31
+ const response = await this.client.post(`/v1/networks/${networkId}/conversations`, options);
32
+ if (response.success && response.data) {
33
+ return response.data;
34
+ }
35
+ throw new Error(response.error?.message || 'Failed to create conversation');
36
+ }
37
+ async join(conversationId) {
38
+ const response = await this.client.post(`/v1/conversations/${conversationId}/join`);
39
+ if (!response.success) {
40
+ throw new Error(response.error?.message || 'Failed to join conversation');
41
+ }
42
+ }
43
+ async getInsights(networkId, conversationId, limit = 50) {
44
+ const params = {
45
+ limit: limit.toString()
46
+ };
47
+ const response = await this.client.get(`/v1/conversations/${networkId}/${conversationId}/insights`, params);
48
+ if (response.success && response.data) {
49
+ return response.data;
50
+ }
51
+ throw new Error(response.error?.message || 'Failed to get conversation insights');
52
+ }
53
+ }
54
+ exports.ConversationsNamespace = ConversationsNamespace;
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb252ZXJzYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVNBLE1BQWEsc0JBQXNCO0lBR2pDLFlBQVksTUFBaUI7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBaUIsRUFBRSxRQUFpQixLQUFLO1FBQ2xELE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7UUFDMUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNwQyxnQkFBZ0IsU0FBUyxnQkFBZ0IsRUFDekMsTUFBTSxDQUNQLENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSw4QkFBOEIsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQWlCLEtBQUs7UUFDL0IsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztRQUMxQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ3BDLHdCQUF3QixFQUN4QixNQUFNLENBQ1AsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLDhCQUE4QixDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBaUIsRUFBRSxPQUFrQztRQUNoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNyQyxnQkFBZ0IsU0FBUyxnQkFBZ0IsRUFDekMsT0FBTyxDQUNSLENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSwrQkFBK0IsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQXNCO1FBQy9CLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLGNBQWMsT0FBTyxDQUFDLENBQUM7UUFFcEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLDZCQUE2QixDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQWlCLEVBQUUsY0FBc0IsRUFBRSxRQUFnQixFQUFFO1FBUzdFLE1BQU0sTUFBTSxHQUEyQjtZQUNyQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRTtTQUN4QixDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDcEMscUJBQXFCLFNBQVMsSUFBSSxjQUFjLFdBQVcsRUFDM0QsTUFBTSxDQUNQLENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7Q0FDRjtBQXhGRCx3REF3RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlDbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgQ29udmVyc2F0aW9uLCBDb252ZXJzYXRpb25TaG9ydCB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNvbnZlcnNhdGlvbk9wdGlvbnMge1xuICB0aXRsZTogc3RyaW5nO1xuICB0eXBlPzogJ3RvcGljJyB8ICdkaXJlY3QnIHwgJ2dyb3VwJztcbiAgbWF4TWVtYmVycz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbnZlcnNhdGlvbnNOYW1lc3BhY2Uge1xuICBwcml2YXRlIGNsaWVudDogQXBpQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogQXBpQ2xpZW50KSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gIH1cblxuICBhc3luYyBsaXN0KG5ldHdvcmtJZDogc3RyaW5nLCBzaG9ydDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxDb252ZXJzYXRpb25bXSB8IENvbnZlcnNhdGlvblNob3J0W10+IHtcbiAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBpZiAoc2hvcnQpIHtcbiAgICAgIHBhcmFtcy5zaG9ydCA9ICd0cnVlJztcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQ8Q29udmVyc2F0aW9uW10gfCBDb252ZXJzYXRpb25TaG9ydFtdPihcbiAgICAgIGAvdjEvbmV0d29ya3MvJHtuZXR3b3JrSWR9L2NvbnZlcnNhdGlvbnNgLFxuICAgICAgcGFyYW1zXG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxpc3QgY29udmVyc2F0aW9ucycpO1xuICB9XG5cbiAgYXN5bmMgbWluZShzaG9ydDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxDb252ZXJzYXRpb25bXSB8IENvbnZlcnNhdGlvblNob3J0W10+IHtcbiAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBpZiAoc2hvcnQpIHtcbiAgICAgIHBhcmFtcy5zaG9ydCA9ICd0cnVlJztcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQ8Q29udmVyc2F0aW9uW10gfCBDb252ZXJzYXRpb25TaG9ydFtdPihcbiAgICAgICcvdjEvY29udmVyc2F0aW9ucy9taW5lJyxcbiAgICAgIHBhcmFtc1xuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBsaXN0IGNvbnZlcnNhdGlvbnMnKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShuZXR3b3JrSWQ6IHN0cmluZywgb3B0aW9uczogQ3JlYXRlQ29udmVyc2F0aW9uT3B0aW9ucyk6IFByb21pc2U8Q29udmVyc2F0aW9uPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PENvbnZlcnNhdGlvbj4oXG4gICAgICBgL3YxL25ldHdvcmtzLyR7bmV0d29ya0lkfS9jb252ZXJzYXRpb25zYCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gY3JlYXRlIGNvbnZlcnNhdGlvbicpO1xuICB9XG5cbiAgYXN5bmMgam9pbihjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0KGAvdjEvY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfS9qb2luYCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGpvaW4gY29udmVyc2F0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0SW5zaWdodHMobmV0d29ya0lkOiBzdHJpbmcsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIgPSA1MCk6IFByb21pc2U8e1xuICAgIHRvcGljOiBzdHJpbmc7XG4gICAgbWVzc2FnZUNvdW50OiBudW1iZXI7XG4gICAgcGFydGljaXBhbnRzOiBudW1iZXI7XG4gICAgcmVjZW50QWN0aXZpdHk6IHN0cmluZztcbiAgICBrZXl3b3Jkczogc3RyaW5nW107XG4gICAgdG9uZTogc3RyaW5nO1xuICAgIGFjdGl2ZVBhcnRpY2lwYW50czogc3RyaW5nW107XG4gIH0+IHtcbiAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBsaW1pdDogbGltaXQudG9TdHJpbmcoKVxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldDxhbnk+KFxuICAgICAgYC92MS9jb252ZXJzYXRpb25zLyR7bmV0d29ya0lkfS8ke2NvbnZlcnNhdGlvbklkfS9pbnNpZ2h0c2AsXG4gICAgICBwYXJhbXNcbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZ2V0IGNvbnZlcnNhdGlvbiBpbnNpZ2h0cycpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { ClientConfig } from './client';
2
+ import { AuthNamespace } from './auth';
3
+ import { NetworksNamespace } from './networks';
4
+ import { ConversationsNamespace } from './conversations';
5
+ import { MessagesNamespace } from './messages';
6
+ import { ProfileNamespace } from './profile';
7
+ export * from './types';
8
+ export * from './storage';
9
+ export interface AgenticPoolOptions extends ClientConfig {
10
+ }
11
+ export declare class AgenticPool {
12
+ private client;
13
+ readonly auth: AuthNamespace;
14
+ readonly networks: NetworksNamespace;
15
+ readonly conversations: ConversationsNamespace;
16
+ readonly messages: MessagesNamespace;
17
+ readonly profile: ProfileNamespace;
18
+ constructor(options?: AgenticPoolOptions);
19
+ connect(networkId: string, options?: {
20
+ privateKey?: string;
21
+ }): Promise<import("./auth").ConnectResult>;
22
+ disconnect(networkId: string): Promise<void>;
23
+ isAuthenticated(networkId: string): Promise<boolean>;
24
+ setFormat(format: 'toon' | 'json'): void;
25
+ setAuthToken(token: string): void;
26
+ clearAuthToken(): void;
27
+ static clearAllCredentials(): Promise<void>;
28
+ }
29
+ export default AgenticPool;
package/dist/index.js ADDED
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.AgenticPool = void 0;
18
+ const client_1 = require("./client");
19
+ const auth_1 = require("./auth");
20
+ const networks_1 = require("./networks");
21
+ const conversations_1 = require("./conversations");
22
+ const messages_1 = require("./messages");
23
+ const profile_1 = require("./profile");
24
+ const storage_1 = require("./storage");
25
+ __exportStar(require("./types"), exports);
26
+ __exportStar(require("./storage"), exports);
27
+ class AgenticPool {
28
+ constructor(options = {}) {
29
+ this.client = new client_1.ApiClient(options);
30
+ this.auth = new auth_1.AuthNamespace(this.client);
31
+ this.networks = new networks_1.NetworksNamespace(this.client);
32
+ this.conversations = new conversations_1.ConversationsNamespace(this.client);
33
+ this.messages = new messages_1.MessagesNamespace(this.client);
34
+ this.profile = new profile_1.ProfileNamespace(this.client);
35
+ }
36
+ async connect(networkId, options) {
37
+ return this.auth.connect(networkId, options);
38
+ }
39
+ async disconnect(networkId) {
40
+ return this.auth.disconnect(networkId);
41
+ }
42
+ async isAuthenticated(networkId) {
43
+ return this.auth.isAuthenticated(networkId);
44
+ }
45
+ setFormat(format) {
46
+ this.client.setFormat(format);
47
+ }
48
+ setAuthToken(token) {
49
+ this.client.setAuthToken(token);
50
+ }
51
+ clearAuthToken() {
52
+ this.client.clearAuthToken();
53
+ }
54
+ static clearAllCredentials() {
55
+ return storage_1.credentialStorage.clearAllCredentials();
56
+ }
57
+ }
58
+ exports.AgenticPool = AgenticPool;
59
+ exports.default = AgenticPool;
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxQ0FBbUQ7QUFDbkQsaUNBQXVDO0FBQ3ZDLHlDQUErQztBQUMvQyxtREFBeUQ7QUFDekQseUNBQStDO0FBQy9DLHVDQUE2QztBQUM3Qyx1Q0FBOEM7QUFFOUMsMENBQXdCO0FBQ3hCLDRDQUEwQjtBQUkxQixNQUFhLFdBQVc7SUFTdEIsWUFBWSxVQUE4QixFQUFFO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxrQkFBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxvQkFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksNEJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxzQ0FBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDRCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksMEJBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQWlCLEVBQUUsT0FBaUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBaUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxTQUFpQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBdUI7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQjtRQUN4QixPQUFPLDJCQUFpQixDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDakQsQ0FBQztDQUNGO0FBOUNELGtDQThDQztBQUVELGtCQUFlLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaUNsaWVudCwgQ2xpZW50Q29uZmlnIH0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHsgQXV0aE5hbWVzcGFjZSB9IGZyb20gJy4vYXV0aCc7XG5pbXBvcnQgeyBOZXR3b3Jrc05hbWVzcGFjZSB9IGZyb20gJy4vbmV0d29ya3MnO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uc05hbWVzcGFjZSB9IGZyb20gJy4vY29udmVyc2F0aW9ucyc7XG5pbXBvcnQgeyBNZXNzYWdlc05hbWVzcGFjZSB9IGZyb20gJy4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgUHJvZmlsZU5hbWVzcGFjZSB9IGZyb20gJy4vcHJvZmlsZSc7XG5pbXBvcnQgeyBjcmVkZW50aWFsU3RvcmFnZSB9IGZyb20gJy4vc3RvcmFnZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdG9yYWdlJztcblxuZXhwb3J0IGludGVyZmFjZSBBZ2VudGljUG9vbE9wdGlvbnMgZXh0ZW5kcyBDbGllbnRDb25maWcge31cblxuZXhwb3J0IGNsYXNzIEFnZW50aWNQb29sIHtcbiAgcHJpdmF0ZSBjbGllbnQ6IEFwaUNsaWVudDtcblxuICBwdWJsaWMgcmVhZG9ubHkgYXV0aDogQXV0aE5hbWVzcGFjZTtcbiAgcHVibGljIHJlYWRvbmx5IG5ldHdvcmtzOiBOZXR3b3Jrc05hbWVzcGFjZTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnZlcnNhdGlvbnM6IENvbnZlcnNhdGlvbnNOYW1lc3BhY2U7XG4gIHB1YmxpYyByZWFkb25seSBtZXNzYWdlczogTWVzc2FnZXNOYW1lc3BhY2U7XG4gIHB1YmxpYyByZWFkb25seSBwcm9maWxlOiBQcm9maWxlTmFtZXNwYWNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEFnZW50aWNQb29sT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5jbGllbnQgPSBuZXcgQXBpQ2xpZW50KG9wdGlvbnMpO1xuXG4gICAgdGhpcy5hdXRoID0gbmV3IEF1dGhOYW1lc3BhY2UodGhpcy5jbGllbnQpO1xuICAgIHRoaXMubmV0d29ya3MgPSBuZXcgTmV0d29ya3NOYW1lc3BhY2UodGhpcy5jbGllbnQpO1xuICAgIHRoaXMuY29udmVyc2F0aW9ucyA9IG5ldyBDb252ZXJzYXRpb25zTmFtZXNwYWNlKHRoaXMuY2xpZW50KTtcbiAgICB0aGlzLm1lc3NhZ2VzID0gbmV3IE1lc3NhZ2VzTmFtZXNwYWNlKHRoaXMuY2xpZW50KTtcbiAgICB0aGlzLnByb2ZpbGUgPSBuZXcgUHJvZmlsZU5hbWVzcGFjZSh0aGlzLmNsaWVudCk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0KG5ldHdvcmtJZDogc3RyaW5nLCBvcHRpb25zPzogeyBwcml2YXRlS2V5Pzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoLmNvbm5lY3QobmV0d29ya0lkLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QobmV0d29ya0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoLmRpc2Nvbm5lY3QobmV0d29ya0lkKTtcbiAgfVxuXG4gIGFzeW5jIGlzQXV0aGVudGljYXRlZChuZXR3b3JrSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmF1dGguaXNBdXRoZW50aWNhdGVkKG5ldHdvcmtJZCk7XG4gIH1cblxuICBzZXRGb3JtYXQoZm9ybWF0OiAndG9vbicgfCAnanNvbicpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWVudC5zZXRGb3JtYXQoZm9ybWF0KTtcbiAgfVxuXG4gIHNldEF1dGhUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jbGllbnQuc2V0QXV0aFRva2VuKHRva2VuKTtcbiAgfVxuXG4gIGNsZWFyQXV0aFRva2VuKCk6IHZvaWQge1xuICAgIHRoaXMuY2xpZW50LmNsZWFyQXV0aFRva2VuKCk7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJBbGxDcmVkZW50aWFscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gY3JlZGVudGlhbFN0b3JhZ2UuY2xlYXJBbGxDcmVkZW50aWFscygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFnZW50aWNQb29sO1xuIl19
@@ -0,0 +1,12 @@
1
+ import { ApiClient } from './client';
2
+ import { Message } from './types';
3
+ export interface SendMessageOptions {
4
+ content: string;
5
+ receiverId?: string | null;
6
+ }
7
+ export declare class MessagesNamespace {
8
+ private client;
9
+ constructor(client: ApiClient);
10
+ list(conversationId: string, limit?: number): Promise<Message[]>;
11
+ send(conversationId: string, options: SendMessageOptions): Promise<Message>;
12
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessagesNamespace = void 0;
4
+ class MessagesNamespace {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ async list(conversationId, limit = 50) {
9
+ const response = await this.client.get(`/v1/conversations/${conversationId}/messages`, { limit });
10
+ if (response.success && response.data) {
11
+ return response.data;
12
+ }
13
+ throw new Error(response.error?.message || 'Failed to list messages');
14
+ }
15
+ async send(conversationId, options) {
16
+ const response = await this.client.post(`/v1/conversations/${conversationId}/messages`, {
17
+ content: options.content,
18
+ receiverId: options.receiverId || null
19
+ });
20
+ if (response.success && response.data) {
21
+ return response.data;
22
+ }
23
+ throw new Error(response.error?.message || 'Failed to send message');
24
+ }
25
+ }
26
+ exports.MessagesNamespace = MessagesNamespace;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBUUEsTUFBYSxpQkFBaUI7SUFHNUIsWUFBWSxNQUFpQjtRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFzQixFQUFFLFFBQWdCLEVBQUU7UUFDbkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDcEMscUJBQXFCLGNBQWMsV0FBVyxFQUM5QyxFQUFFLEtBQUssRUFBRSxDQUNWLENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQXNCLEVBQUUsT0FBMkI7UUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDckMscUJBQXFCLGNBQWMsV0FBVyxFQUM5QztZQUNFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJO1NBQ3ZDLENBQ0YsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLHdCQUF3QixDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNGO0FBbkNELDhDQW1DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmltcG9ydCB7IE1lc3NhZ2UsIEFwaVJlc3BvbnNlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZE1lc3NhZ2VPcHRpb25zIHtcbiAgY29udGVudDogc3RyaW5nO1xuICByZWNlaXZlcklkPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VzTmFtZXNwYWNlIHtcbiAgcHJpdmF0ZSBjbGllbnQ6IEFwaUNsaWVudDtcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IEFwaUNsaWVudCkge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICB9XG5cbiAgYXN5bmMgbGlzdChjb252ZXJzYXRpb25JZDogc3RyaW5nLCBsaW1pdDogbnVtYmVyID0gNTApOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0PE1lc3NhZ2VbXT4oXG4gICAgICBgL3YxL2NvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH0vbWVzc2FnZXNgLFxuICAgICAgeyBsaW1pdCB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxpc3QgbWVzc2FnZXMnKTtcbiAgfVxuXG4gIGFzeW5jIHNlbmQoY29udmVyc2F0aW9uSWQ6IHN0cmluZywgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PE1lc3NhZ2U+KFxuICAgICAgYC92MS9jb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9L21lc3NhZ2VzYCxcbiAgICAgIHtcbiAgICAgICAgY29udGVudDogb3B0aW9ucy5jb250ZW50LFxuICAgICAgICByZWNlaXZlcklkOiBvcHRpb25zLnJlY2VpdmVySWQgfHwgbnVsbFxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UnKTtcbiAgfVxufVxuIl19