rentabots-sdk 0.4.0 → 0.4.1

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/index.d.ts CHANGED
@@ -1,121 +1,123 @@
1
- import { z } from 'zod';
2
- export declare const CapabilitySchema: z.ZodEnum<{
3
- code_generation: "code_generation";
4
- web_browsing: "web_browsing";
5
- data_analysis: "data_analysis";
6
- image_generation: "image_generation";
7
- automation: "automation";
8
- translation: "translation";
9
- }>;
10
- export type Capability = z.infer<typeof CapabilitySchema>;
11
- export declare const JobSchema: z.ZodObject<{
12
- id: z.ZodString;
13
- title: z.ZodString;
14
- description: z.ZodString;
15
- budget: z.ZodString;
16
- category: z.ZodString;
17
- status: z.ZodEnum<{
18
- open: "open";
19
- in_progress: "in_progress";
20
- completed: "completed";
21
- archived: "archived";
22
- }>;
23
- createdAt: z.ZodString;
24
- }, z.core.$strip>;
25
- export type Job = z.infer<typeof JobSchema>;
26
- export declare const MessageSchema: z.ZodObject<{
27
- id: z.ZodString;
28
- jobId: z.ZodString;
29
- content: z.ZodString;
30
- senderId: z.ZodString;
31
- createdAt: z.ZodString;
32
- sender: z.ZodObject<{
33
- id: z.ZodString;
34
- displayName: z.ZodString;
35
- type: z.ZodEnum<{
36
- human: "human";
37
- agent: "agent";
38
- }>;
39
- }, z.core.$strip>;
40
- }, z.core.$strip>;
41
- export type Message = z.infer<typeof MessageSchema>;
42
- export interface AgentOptions {
43
- baseUrl?: string;
44
- apiKey?: string;
45
- capabilities?: Capability[];
46
- debug?: boolean;
47
- heartbeatInterval?: number;
48
- }
49
- export declare class Agent {
50
- static readonly SDK_VERSION = "0.4.0";
51
- private apiKey;
52
- readonly baseUrl: string;
53
- private agentId;
54
- private api;
55
- private socket;
56
- private debug;
57
- private capabilities;
58
- private heartbeatInterval;
59
- private messageHandlers;
60
- private jobHandlers;
61
- private assignedHandlers;
62
- private seenMessages;
63
- constructor(options?: AgentOptions);
64
- /**
65
- * Connect to the RentaBots grid and initialize WebSockets
66
- */
67
- connect(): Promise<{
68
- success: boolean;
69
- agent?: any;
70
- error?: string;
71
- }>;
72
- /**
73
- * Start periodic heartbeats to maintain ONLINE status in dashboard
74
- */
75
- private startHeartbeat;
76
- private sendHeartbeat;
77
- private initSocket;
78
- onMessage(callback: (msg: Message) => void): void;
79
- /**
80
- * Fired when a new job is posted to the grid.
81
- * Perfect for real-time auto-bidding.
82
- */
83
- onNewJob(callback: (job: Job) => void): void;
84
- /**
85
- * Fired when THIS agent specifically is hired for a mission.
86
- */
87
- onHired(callback: (job: Job) => void): void;
88
- onMissionAssigned(callback: (job: Job) => void): void;
89
- onJobFound(callback: (job: Job) => void): void;
90
- startPolling(): void;
91
- /**
92
- * Update the agent's profile on the grid
93
- */
94
- updateProfile(data: {
95
- displayName?: string;
96
- skills?: string[];
97
- bio?: string;
98
- }): Promise<import("axios").AxiosResponse<any, any, {}> | undefined>;
99
- /**
100
- * Broadcast a typing indicator to the user
101
- */
102
- setTyping(jobId: string, isTyping?: boolean): Promise<void>;
103
- /**
104
- * Automatically find missions matching criteria and bid
105
- */
106
- findAndBid(criteria: {
107
- skills?: string[];
108
- minBudget?: number;
109
- }): Promise<void>;
110
- getOpenMissions(): Promise<Job[]>;
111
- bid(jobId: string, amount: number, message: string): Promise<any>;
112
- sendMessage(jobId: string, content: string): Promise<any>;
113
- uploadDeliverable(jobId: string, url: string, name: string): Promise<any>;
114
- markComplete(jobId: string): Promise<any>;
115
- /**
116
- * Stream logs to the RentaBots Dashboard
117
- */
118
- log(message: string, level?: 'DEBUG' | 'INFO' | 'WARN' | 'ERROR'): Promise<void>;
119
- private logInternal;
120
- }
121
- export default Agent;
1
+ import { z } from 'zod';
2
+ export declare const CapabilitySchema: z.ZodEnum<{
3
+ code_generation: "code_generation";
4
+ web_browsing: "web_browsing";
5
+ data_analysis: "data_analysis";
6
+ image_generation: "image_generation";
7
+ automation: "automation";
8
+ translation: "translation";
9
+ }>;
10
+ export type Capability = z.infer<typeof CapabilitySchema>;
11
+ export declare const JobSchema: z.ZodObject<{
12
+ id: z.ZodString;
13
+ title: z.ZodString;
14
+ description: z.ZodString;
15
+ budget: z.ZodString;
16
+ category: z.ZodString;
17
+ status: z.ZodEnum<{
18
+ open: "open";
19
+ in_progress: "in_progress";
20
+ completed: "completed";
21
+ archived: "archived";
22
+ }>;
23
+ createdAt: z.ZodString;
24
+ }, z.core.$strip>;
25
+ export type Job = z.infer<typeof JobSchema>;
26
+ export declare const MessageSchema: z.ZodObject<{
27
+ id: z.ZodString;
28
+ jobId: z.ZodString;
29
+ content: z.ZodString;
30
+ senderId: z.ZodString;
31
+ createdAt: z.ZodString;
32
+ sender: z.ZodObject<{
33
+ id: z.ZodString;
34
+ displayName: z.ZodString;
35
+ type: z.ZodEnum<{
36
+ human: "human";
37
+ agent: "agent";
38
+ }>;
39
+ }, z.core.$strip>;
40
+ }, z.core.$strip>;
41
+ export type Message = z.infer<typeof MessageSchema>;
42
+ export interface AgentOptions {
43
+ baseUrl?: string;
44
+ apiKey?: string;
45
+ capabilities?: Capability[];
46
+ debug?: boolean;
47
+ heartbeatInterval?: number;
48
+ }
49
+ export declare class Agent {
50
+ static readonly SDK_VERSION = "0.4.1";
51
+ private apiKey;
52
+ readonly baseUrl: string;
53
+ private agentId;
54
+ private api;
55
+ private socket;
56
+ private debug;
57
+ private capabilities;
58
+ private heartbeatInterval;
59
+ private heartbeatTimer;
60
+ private messageHandlers;
61
+ private jobHandlers;
62
+ private assignedHandlers;
63
+ private seenMessages;
64
+ private bidCache;
65
+ constructor(options?: AgentOptions);
66
+ /**
67
+ * Connect to the RentaBots grid and initialize WebSockets
68
+ */
69
+ connect(): Promise<{
70
+ success: boolean;
71
+ agent?: any;
72
+ error?: string;
73
+ }>;
74
+ /**
75
+ * Start periodic heartbeats to maintain ONLINE status in dashboard
76
+ */
77
+ private startHeartbeat;
78
+ private sendHeartbeat;
79
+ private initSocket;
80
+ onMessage(callback: (msg: Message) => void): void;
81
+ /**
82
+ * Fired when a new job is posted to the grid.
83
+ * Perfect for real-time auto-bidding.
84
+ */
85
+ onNewJob(callback: (job: Job) => void): void;
86
+ /**
87
+ * Fired when THIS agent specifically is hired for a mission.
88
+ */
89
+ onHired(callback: (job: Job) => void): void;
90
+ onMissionAssigned(callback: (job: Job) => void): void;
91
+ onJobFound(callback: (job: Job) => void): void;
92
+ startPolling(): void;
93
+ /**
94
+ * Update the agent's profile on the grid
95
+ */
96
+ updateProfile(data: {
97
+ displayName?: string;
98
+ skills?: string[];
99
+ bio?: string;
100
+ }): Promise<import("axios").AxiosResponse<any, any, {}> | undefined>;
101
+ /**
102
+ * Broadcast a typing indicator to the user
103
+ */
104
+ setTyping(jobId: string, isTyping?: boolean): Promise<void>;
105
+ /**
106
+ * Automatically find missions matching criteria and bid
107
+ */
108
+ findAndBid(criteria: {
109
+ skills?: string[];
110
+ minBudget?: number;
111
+ }): Promise<void>;
112
+ getOpenMissions(): Promise<Job[]>;
113
+ bid(jobId: string, amount: number, message: string): Promise<any>;
114
+ sendMessage(jobId: string, content: string): Promise<any>;
115
+ uploadDeliverable(jobId: string, url: string, name: string): Promise<any>;
116
+ markComplete(jobId: string): Promise<any>;
117
+ /**
118
+ * Stream logs to the RentaBots Dashboard
119
+ */
120
+ log(message: string, level?: 'DEBUG' | 'INFO' | 'WARN' | 'ERROR'): Promise<void>;
121
+ private logInternal;
122
+ }
123
+ export default Agent;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- const a0_0x1910ae=a0_0xaf36;(function(_0x4f4141,_0x597109){const _0x5bb567=a0_0xaf36,_0x233515=_0x4f4141();while(!![]){try{const _0x339b3b=-parseInt(_0x5bb567(0x1f2))/0x1+parseInt(_0x5bb567(0x229))/0x2*(parseInt(_0x5bb567(0x285))/0x3)+-parseInt(_0x5bb567(0x26b))/0x4+parseInt(_0x5bb567(0x1ea))/0x5+-parseInt(_0x5bb567(0x20f))/0x6+-parseInt(_0x5bb567(0x1f4))/0x7+-parseInt(_0x5bb567(0x236))/0x8*(-parseInt(_0x5bb567(0x226))/0x9);if(_0x339b3b===_0x597109)break;else _0x233515['push'](_0x233515['shift']());}catch(_0x31ee65){_0x233515['push'](_0x233515['shift']());}}}(a0_0x4bc2,0xcd7f9));const a0_0x1f9a0c=(function(){let _0x20157b=!![];return function(_0xe7c929,_0x564c39){const _0x4cd4f8=_0x20157b?function(){const _0x22f6b3=a0_0xaf36;if(_0x564c39){const _0x23e979=_0x564c39[_0x22f6b3(0x207)](_0xe7c929,arguments);return _0x564c39=null,_0x23e979;}}:function(){};return _0x20157b=![],_0x4cd4f8;};}()),a0_0x165b9f=a0_0x1f9a0c(this,function(){const _0x4d61b3=a0_0xaf36,_0x121e15={'asDvW':_0x4d61b3(0x28a)};return a0_0x165b9f[_0x4d61b3(0x23d)]()[_0x4d61b3(0x205)](_0x121e15[_0x4d61b3(0x1e7)])[_0x4d61b3(0x23d)]()[_0x4d61b3(0x20d)](a0_0x165b9f)[_0x4d61b3(0x205)](_0x121e15[_0x4d61b3(0x1e7)]);});function a0_0x4bc2(){const _0x4da2db=['y29Kzv9Nzw5LCMf0Aw9U','yMLKCW','4P2mifjLBNrHqM90CYbbueKGs2v5igLZig1PC3nPBMCUifbHC3mGAxqGAw4GDgHLignVBNn0CNvJDg9Yig9YihnLDcbsru5uqujpvfnFqvbjx0TfwsbPBIaUzw52','D2vIx2jYB3DZAw5N','C29Tzq','CgfYC2u','B25ozxDkB2i','Cg9ZDa','ENjOr00','uwjjBeW','rMfPBgvKihrVihbHCNnLigLUy29TAw5NihnVy2TLDcbTzxnZywDL','u2jjthm','yxnZAwDUzwriyw5KBgvYCW','B1LpzM8','zgf0yv9HBMfSExnPCW','DMXeAwG','C29JA2v0','wfn6wfa','yxjYyxK','zgvIDwC','nti5ndC2ngXVrhD3va','zMfKBgO','qwDLBNq','ywDLBNrjza','AeHJv28','C3rHDhvZ','v1n3ELO','yMLK','DxbSB2fKrgvSAxzLCMfIBgu','DhLWAw5Nx3n0yxrL','l21HBMfNzq','s2jmAxq','zxjYB3i','EgLzzMy','vu5Zwum','BMv3x21LC3nHz2u','x19PBxbVCNrezwzHDwX0','AurPEee','suPAyvy','zw1PDa','l21LC3nHz2vZ','uwndy2m','AgfZ','nxWXFdr8mtf8mtb8m3WYFdeYFdz8oxWWFdH8nW','yMfZzvvYBa','sgzSDu0','mZe4mZqYm2fXu1LeAq','C2vUzeHLyxj0yMvHDa','zgvSAxzLCMfIBgu','wXTBmZfTu0rlievsuK9sg1SWBv0GrMfPBgvKihrVihn0CMvHBsbSB2CGDg8GzgfZAgjVyxjKoIa','AM9ICW','kcGOlISPkYKRksSK','C2vUze1LC3nHz2u','l2zPBgvZ','zgLZCgXHEu5HBwu','sgvHCNrIzwf0igzHAwXLza','su5gtW','Dg9mB3DLCKnHC2u','B25nAxnZAw9UqxnZAwDUzwq','icGK','v0fstG','zMPMteO','wfnnwfi','rMvHrfG','C3rYAw5N','CMvWBgfJzq','C3vJy2vZCW','BuXTsMO','yxjJAgL2zwq','yxHPB3m','rvjst1i','l2XVz3m','zgf0yq','ywDLBNrZl21L','D2vIC29JA2v0','g1SZmM0','y3jLyxrL','l2HLyxj0yMvHDa','4PYfiejPzcbWBgfJzwqGzM9Yia','EM9K','yxbPs2v5','Aw5JBhvKzxm','CevQuuW','yxneDLC','u1vdq0vtuW','l2nVBxbSzxrL','mZm0otq1DwP5s0T1','qMvHCMvYia','r0HVteW','AgvHCNrIzwf0sw50zxj2ywW','zw51Bq','q2fWywjPBgL0EvnJAgvTyq','BMv3x2PVyG','xrTBmg0G','mtmZmdmZown4rgvzrq','wXTBmZvTu0rlg1SWBv0G','mZa2mZi0mNreqwnstq','rMfPBgvKihrVigzLDgnOig1HCMTLDhbSywnLigPVyNm6ia','Ag9JCKy','zMLSDgvY','mc40lJa','Aw5PDfnVy2TLDa','l2fWAq','DgL0Bgu','t3rlreC','q29UBMvJDgLUzYb0BYbszw50yujVDhmGr3jPzcaODG','AM9ICY8','sevjsNe','r2Psv04','B25kB2jgB3vUza','u2nHBM5PBMCGzM9Yig1PC3nPB25Zig1HDgnOAw5NignYAxrLCMLHlI4U','AhvTyw4','tgvNywn5ihn0yxj0ug9SBgLUzYGPignHBgXLzc4Gu0rlig5VDYb1C2vZihjLywWTDgLTzsbxzwjtB2nRzxrZlG','C2vHCMnO','yxnmCg0','yxbWBhK','Aw5FChjVz3jLC3m','C0DsCeO','ks4UlG','ChvZAa','rfn1se4','y29UC3rYDwn0B3i','yxv0B21HDgLVBG','mta1nJm1nfLbzLflsq','sM9Iu2nOzw1H','EwDcrLa','ywrK','Aw1Hz2vFz2vUzxjHDgLVBG','C2v0vhLWAw5N','zLztwxy','B25nzxnZywDL','zMLUzefUzejPza','C2TPBgXZ','BwLUqNvKz2v0','BwLZC2LVBL9HC3nPz25Lzf8','g1SZm20','vw5RBM93BIbYzwfZB24','AM9PBL9TyxjRzxrWBgfJzq','qxLor2G','thLSu1m','yxbP','Bg9N','C0vNq1O','x19LC01VzhvSzq','ywDLBNrZlW','zgvMyxvSDa','mtqXoty2Ehrftevc','C29JA2v0lMLVlwnSAwvUDa','4Os577IpicbtA2LWCgvKoIa','mLjyAKrnAq','y2fWywjPBgL0AwvZ','rMfPBgvKihrVihn5BMmGy2fWywjPBgL0AwvZihrVigDYAwqSignVBNrPBNvPBMCUlI4','twvZC2fNzvnJAgvTyq','DxbKyxrLuhjVzMLSzq','z2v0','Bg9Nsw50zxjUywW','y29UBMvJDa','C2vLBK1LC3nHz2vZ','BwvZC2fNzq','uK9SuMm','rMfPBgvKihrVihbYB2nLC3mGBwLZC2LVBIbIAwq6ia','ssbJyw4GzxHLy3v0zsb0AgLZig1PC3nPB24Gyxv0B25VBw91C2X5lG','mtuXmKveyundBa','Ahr0Chm6lY9Yzw50ywjVDhmUy29Tl2fWAq','BwvZC2fNzuHHBMrSzxjZ','z2v0t3bLBK1PC3nPB25Z','ywDLBNq','y29TCgXLDgvK','A3rTBgu','Dg9tDhjPBMC','BwfYA0nVBxbSzxrL','C3bSAxq','yNvKz2v0','B25iAxjLza','t25SAw5LigfZoIa','C3rHCNrizwfYDgjLyxq','AM9IsgfUzgXLCNm','zM9YrwfJAa','wvztrfq','u0rlx1zfuLnjt04','uwfbzMO','B3bLBG','reXJAve','vgfYz2v0Aw5Nie1PC3nPB246ia','CMvZCg9UC2u','BgvUz3rO','v2vIu29JA2v0ieXPBMSGrxn0ywjSAxnOzwqU','wvz6Bwu','C3rHCNrqB2XSAw5N','g1SZmw0','DhjHBNnSyxrPB24','zvnRugC','zgvMAw5LuhjVCgvYDhK','rxzNuhe','B2jQzwn0'];a0_0x4bc2=function(){return _0x4da2db;};return a0_0x4bc2();}a0_0x165b9f();'use strict';var a0_0x57fc61=this&&this[a0_0x1910ae(0x27b)]||function(_0xcd49b1){const _0x51990a=a0_0x1910ae;return _0xcd49b1&&_0xcd49b1[_0x51990a(0x223)]?_0xcd49b1:{'default':_0xcd49b1};};Object[a0_0x1910ae(0x254)](exports,a0_0x1910ae(0x223),{'value':!![]}),exports[a0_0x1910ae(0x26d)]=exports[a0_0x1910ae(0x22c)]=exports[a0_0x1910ae(0x210)]=exports[a0_0x1910ae(0x1ef)]=void 0x0;function a0_0xaf36(_0xfc719a,_0x440d92){_0xfc719a=_0xfc719a-0x1d4;const _0x218f7b=a0_0x4bc2();let _0x19dd7d=_0x218f7b[_0xfc719a];if(a0_0xaf36['HPHwhd']===undefined){var _0x576c5d=function(_0x59b9d3){const _0x519311='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x337f4a='',_0x274e57='',_0x4d1a06=_0x337f4a+_0x576c5d;for(let _0x1e82a5=0x0,_0x495eda,_0x4b38f4,_0xe0defc=0x0;_0x4b38f4=_0x59b9d3['charAt'](_0xe0defc++);~_0x4b38f4&&(_0x495eda=_0x1e82a5%0x4?_0x495eda*0x40+_0x4b38f4:_0x4b38f4,_0x1e82a5++%0x4)?_0x337f4a+=_0x4d1a06['charCodeAt'](_0xe0defc+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x495eda>>(-0x2*_0x1e82a5&0x6)):_0x1e82a5:0x0){_0x4b38f4=_0x519311['indexOf'](_0x4b38f4);}for(let _0x4ae834=0x0,_0x1b8bff=_0x337f4a['length'];_0x4ae834<_0x1b8bff;_0x4ae834++){_0x274e57+='%'+('00'+_0x337f4a['charCodeAt'](_0x4ae834)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x274e57);};a0_0xaf36['LgCGOg']=_0x576c5d,a0_0xaf36['FsAVTu']={},a0_0xaf36['HPHwhd']=!![];}const _0x4bc2cb=_0x218f7b[0x0],_0xaf3692=_0xfc719a+_0x4bc2cb,_0x3a1298=a0_0xaf36['FsAVTu'][_0xaf3692];if(!_0x3a1298){const _0x5524c5=function(_0x3fba1b){this['EGZInG']=_0x3fba1b,this['nPIUXz']=[0x1,0x0,0x0],this['BzrsFr']=function(){return'newState';},this['gAUNdy']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['WKxmuR']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x5524c5['prototype']['pmsltx']=function(){const _0x14172d=new RegExp(this['gAUNdy']+this['WKxmuR']),_0x4f332e=_0x14172d['test'](this['BzrsFr']['toString']())?--this['nPIUXz'][0x1]:--this['nPIUXz'][0x0];return this['doJwdF'](_0x4f332e);},_0x5524c5['prototype']['doJwdF']=function(_0x49b43b){if(!Boolean(~_0x49b43b))return _0x49b43b;return this['BdIcot'](this['EGZInG']);},_0x5524c5['prototype']['BdIcot']=function(_0x4138f1){for(let _0x5e1e52=0x0,_0x5ae158=this['nPIUXz']['length'];_0x5e1e52<_0x5ae158;_0x5e1e52++){this['nPIUXz']['push'](Math['round'](Math['random']())),_0x5ae158=this['nPIUXz']['length'];}return _0x4138f1(this['nPIUXz'][0x0]);},new _0x5524c5(a0_0xaf36)['pmsltx'](),_0x19dd7d=a0_0xaf36['LgCGOg'](_0x19dd7d),a0_0xaf36['FsAVTu'][_0xaf3692]=_0x19dd7d;}else _0x19dd7d=_0x3a1298;return _0x19dd7d;}const a0_0x5acc9e=a0_0x57fc61(require(a0_0x1910ae(0x1d9))),a0_0xc504b8=require(a0_0x1910ae(0x227)),a0_0x4973e3=require(a0_0x1910ae(0x1e3));exports[a0_0x1910ae(0x1ef)]=a0_0x4973e3['z'][a0_0x1910ae(0x1ee)]([a0_0x1910ae(0x257),a0_0x1910ae(0x25a),a0_0x1910ae(0x265),a0_0x1910ae(0x213),a0_0x1910ae(0x20e),a0_0x1910ae(0x252)]),exports[a0_0x1910ae(0x210)]=a0_0x4973e3['z'][a0_0x1910ae(0x256)]({'id':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'title':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'description':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'budget':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'category':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'status':a0_0x4973e3['z'][a0_0x1910ae(0x1ee)]([a0_0x1910ae(0x249),a0_0x1910ae(0x208),a0_0x1910ae(0x23b),a0_0x1910ae(0x1d8)]),'createdAt':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)]()}),exports[a0_0x1910ae(0x22c)]=a0_0x4973e3['z'][a0_0x1910ae(0x256)]({'id':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'jobId':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'content':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'senderId':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'createdAt':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'sender':a0_0x4973e3['z'][a0_0x1910ae(0x256)]({'id':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'displayName':a0_0x4973e3['z'][a0_0x1910ae(0x1d4)](),'type':a0_0x4973e3['z'][a0_0x1910ae(0x1ee)]([a0_0x1910ae(0x203),a0_0x1910ae(0x23a)])})});class a0_0x319107{constructor(_0x2be2d={}){const _0x5e6e2e=a0_0x1910ae,_0x3d1eac={'pEjQL':_0x5e6e2e(0x282),'YVzme':_0x5e6e2e(0x259),'zrhGM':_0x5e6e2e(0x237)},_0x17aab6=_0x3d1eac[_0x5e6e2e(0x1e6)][_0x5e6e2e(0x23f)]('|');let _0x31bdff=0x0;while(!![]){switch(_0x17aab6[_0x31bdff++]){case'0':this[_0x5e6e2e(0x1ed)]=_0x2be2d[_0x5e6e2e(0x1ed)]||0x7530;continue;case'1':this[_0x5e6e2e(0x267)]=null;continue;case'2':this[_0x5e6e2e(0x1e4)]=_0x2be2d[_0x5e6e2e(0x1e4)]||process.env.RENTABOTS_API_KEY||process.env.AGENT_API_KEY||'';continue;case'3':this[_0x5e6e2e(0x231)]=new Set();continue;case'4':this[_0x5e6e2e(0x238)]=[];continue;case'5':this[_0x5e6e2e(0x26e)]=null;continue;case'6':this[_0x5e6e2e(0x26a)]=_0x2be2d[_0x5e6e2e(0x26a)]||![];continue;case'7':this[_0x5e6e2e(0x220)]=a0_0x5acc9e[_0x5e6e2e(0x225)][_0x5e6e2e(0x1e0)]({'baseURL':this[_0x5e6e2e(0x283)],'headers':{'x-api-key':this[_0x5e6e2e(0x1e4)],'x-sdk-version':a0_0x319107[_0x5e6e2e(0x247)]}});continue;case'8':if(!this[_0x5e6e2e(0x1e4)])throw new Error(_0x3d1eac[_0x5e6e2e(0x24f)]);continue;case'9':this[_0x5e6e2e(0x22a)]=_0x2be2d[_0x5e6e2e(0x22a)]||[];continue;case'10':this[_0x5e6e2e(0x263)]=[];continue;case'11':this[_0x5e6e2e(0x244)]=[];continue;case'12':this[_0x5e6e2e(0x283)]=_0x2be2d[_0x5e6e2e(0x283)]||_0x3d1eac[_0x5e6e2e(0x25f)];continue;}break;}}async[a0_0x1910ae(0x230)](){const _0x473c9d=a0_0x1910ae,_0x19b75a={'fVSYv':_0x473c9d(0x1dd),'XSMXR':function(_0x36e948,_0x17e5db){return _0x36e948>_0x17e5db;},'XSzXP':_0x473c9d(0x22b),'DLciQ':_0x473c9d(0x293)};this[_0x473c9d(0x22f)](_0x473c9d(0x1fd)+a0_0x319107[_0x473c9d(0x247)]+_0x473c9d(0x20a));try{const _0x1466ec=await this[_0x473c9d(0x220)][_0x473c9d(0x22e)](_0x19b75a[_0x473c9d(0x215)]);this[_0x473c9d(0x26e)]=_0x1466ec[_0x473c9d(0x1dc)][_0x473c9d(0x23a)]['id'],this[_0x473c9d(0x1f9)](),this[_0x473c9d(0x243)](this[_0x473c9d(0x1ed)]),this[_0x473c9d(0x22f)](_0x473c9d(0x242)+_0x1466ec[_0x473c9d(0x1dc)][_0x473c9d(0x23a)][_0x473c9d(0x28d)]);if(_0x19b75a[_0x473c9d(0x295)](this[_0x473c9d(0x22a)][_0x473c9d(0x24d)],0x0))try{await this[_0x473c9d(0x22d)]({'skills':this[_0x473c9d(0x22a)]});}catch(_0x469804){this[_0x473c9d(0x22f)](_0x19b75a[_0x473c9d(0x268)],_0x19b75a[_0x473c9d(0x24a)]);}return{'success':!![],'agent':_0x1466ec[_0x473c9d(0x1dc)][_0x473c9d(0x23a)]};}catch(_0x56f582){const _0xa51297=_0x56f582[_0x473c9d(0x24c)]?.[_0x473c9d(0x1dc)]?.[_0x473c9d(0x277)]||_0x56f582[_0x473c9d(0x232)];return{'success':![],'error':_0xa51297};}}[a0_0x1910ae(0x243)](_0xd49a46=0x7530){const _0x9fdb20=a0_0x1910ae,_0x93d4ad={'ROlRc':function(_0x346abd,_0x613aab,_0x2c76b0){return _0x346abd(_0x613aab,_0x2c76b0);}};if(!this[_0x9fdb20(0x26e)])return;this[_0x9fdb20(0x286)](),_0x93d4ad[_0x9fdb20(0x233)](setInterval,()=>this[_0x9fdb20(0x286)](),_0xd49a46);}async[a0_0x1910ae(0x286)](){const _0x269549=a0_0x1910ae,_0x43c06b={'FeaDX':_0x269549(0x28e),'IJZaV':_0x269549(0x293)};if(!this[_0x269549(0x26e)])return;try{await this[_0x269549(0x220)][_0x269549(0x25e)](_0x269549(0x224)+this[_0x269549(0x26e)]+_0x269549(0x1e1),{},{'headers':{'Authorization':_0x269549(0x1eb)+this[_0x269549(0x1e4)]}});}catch(_0x524df8){this[_0x269549(0x22f)](_0x43c06b[_0x269549(0x296)],_0x43c06b[_0x269549(0x27d)]);}}[a0_0x1910ae(0x1f9)](){const _0xfaa391=a0_0x1910ae,_0x98850a={'oYOfo':_0xfaa391(0x24e),'QbIlL':_0xfaa391(0x21d),'DSuHN':_0xfaa391(0x261),'QcCcc':_0xfaa391(0x1da),'fadlj':_0xfaa391(0x1fa),'AyNGh':_0xfaa391(0x1de),'YVSDT':_0xfaa391(0x230),'asLpm':_0xfaa391(0x27a),'fjfLJ':_0xfaa391(0x1f0)},_0x180869=this[_0xfaa391(0x283)][_0xfaa391(0x1d5)](_0x98850a[_0xfaa391(0x26c)],'');this[_0xfaa391(0x267)]=(0x0,a0_0xc504b8['io'])(_0x180869,{'auth':{'token':this[_0xfaa391(0x1e4)]},'transports':[_0x98850a[_0xfaa391(0x21e)]]}),this[_0xfaa391(0x267)]['on'](_0x98850a[_0xfaa391(0x246)],()=>{const _0x249146=_0xfaa391;this[_0x249146(0x22f)](_0x98850a[_0x249146(0x264)]),this[_0x249146(0x267)]?.[_0x249146(0x27e)](_0x98850a[_0x249146(0x260)]);}),this[_0xfaa391(0x267)]['on'](_0x98850a[_0xfaa391(0x206)],_0x197b36=>{const _0x85a7ba=_0xfaa391;try{const _0x1ff389=exports[_0x85a7ba(0x22c)][_0x85a7ba(0x25c)](_0x197b36);!this[_0x85a7ba(0x231)][_0x85a7ba(0x281)](_0x1ff389['id'])&&(this[_0x85a7ba(0x231)][_0x85a7ba(0x212)](_0x1ff389['id']),this[_0x85a7ba(0x238)][_0x85a7ba(0x245)](_0x35c797=>_0x35c797(_0x1ff389)));}catch(_0x1c8a37){this[_0x85a7ba(0x22f)](_0x98850a[_0x85a7ba(0x20c)],_0x98850a[_0x85a7ba(0x280)]);}}),this[_0xfaa391(0x267)]['on'](_0x98850a[_0xfaa391(0x294)],_0xda9cfa=>{const _0x2697a6=_0xfaa391;try{const _0x54f7e2=exports[_0x2697a6(0x210)][_0x2697a6(0x25c)](_0xda9cfa);this[_0x2697a6(0x244)][_0x2697a6(0x245)](_0x4f411a=>_0x4f411a(_0x54f7e2));}catch(_0x30dc3a){}}),this[_0xfaa391(0x267)]['on'](_0xfaa391(0x21a)+this[_0xfaa391(0x26e)],_0x29d997=>{const _0x3317dd=_0xfaa391;try{const _0x442fb7=exports[_0x3317dd(0x210)][_0x3317dd(0x25c)](_0x29d997);this[_0x3317dd(0x263)][_0x3317dd(0x245)](_0x512bd5=>_0x512bd5(_0x442fb7));}catch(_0x399b00){}});}[a0_0x1910ae(0x216)](_0x50e484){const _0x3d92d4=a0_0x1910ae;this[_0x3d92d4(0x238)][_0x3d92d4(0x20b)](_0x50e484);}[a0_0x1910ae(0x25d)](_0x292b57){const _0x79c316=a0_0x1910ae;this[_0x79c316(0x244)][_0x79c316(0x20b)](_0x292b57);}[a0_0x1910ae(0x241)](_0x37a1fd){const _0x4c7b4b=a0_0x1910ae;this[_0x4c7b4b(0x263)][_0x4c7b4b(0x20b)](_0x37a1fd);}[a0_0x1910ae(0x291)](_0x4dd429){const _0x86cfa9=a0_0x1910ae;this[_0x86cfa9(0x241)](_0x4dd429);}[a0_0x1910ae(0x201)](_0x11917c){const _0x154e01=a0_0x1910ae;this[_0x154e01(0x25d)](_0x11917c);}[a0_0x1910ae(0x250)](){const _0x1d2d68=a0_0x1910ae,_0x4f285e={'sGRpJ':_0x1d2d68(0x204),'xiYff':_0x1d2d68(0x293)};this[_0x1d2d68(0x22f)](_0x4f285e[_0x1d2d68(0x209)],_0x4f285e[_0x1d2d68(0x278)]);}async[a0_0x1910ae(0x22d)](_0x49ad5d){const _0x5b4719=a0_0x1910ae;if(!this[_0x5b4719(0x26e)])return;return this[_0x5b4719(0x220)][_0x5b4719(0x25e)](_0x5b4719(0x224)+this[_0x5b4719(0x26e)]+_0x5b4719(0x275),_0x49ad5d);}async[a0_0x1910ae(0x214)](_0x419488,_0x231406=!![]){const _0x5f126a=a0_0x1910ae,_0xaec5a4={'OtKDG':_0x5f126a(0x274)};this[_0x5f126a(0x267)]&&this[_0x5f126a(0x267)][_0x5f126a(0x27e)](_0xaec5a4[_0x5f126a(0x1fc)],{'jobId':_0x419488,'isTyping':_0x231406});}async[a0_0x1910ae(0x217)](_0x592a35){const _0x183cd0=a0_0x1910ae,_0x292f3b={'GjRWN':_0x183cd0(0x202),'QaAfj':function(_0x10795c,_0x1bc7a2){return _0x10795c(_0x1bc7a2);},'WSwzZ':function(_0x464b63,_0x3f086d){return _0x464b63>=_0x3f086d;},'KbLit':function(_0x3cb1e6,_0x2c4d5a){return _0x3cb1e6&&_0x2c4d5a;},'LylSS':_0x183cd0(0x235),'sEgCZ':_0x183cd0(0x1e8),'ygBFP':_0x183cd0(0x21c),'ktmle':_0x183cd0(0x293),'hHcWo':_0x183cd0(0x1da)};this[_0x183cd0(0x22f)](_0x292f3b[_0x183cd0(0x200)]);try{const _0x579488=await this[_0x183cd0(0x239)]();for(const _0x3cf7f5 of _0x579488){try{const _0x30c413=_0x292f3b[_0x183cd0(0x248)](parseFloat,_0x3cf7f5[_0x183cd0(0x240)]),_0x53b61d=_0x592a35[_0x183cd0(0x218)]?_0x592a35[_0x183cd0(0x218)][_0x183cd0(0x25b)](_0x672b35=>_0x3cf7f5[_0x183cd0(0x1fb)][_0x183cd0(0x290)]()[_0x183cd0(0x1e5)](_0x672b35[_0x183cd0(0x290)]())):!![],_0xf6e4c9=_0x592a35[_0x183cd0(0x219)]?_0x292f3b[_0x183cd0(0x271)](_0x30c413,_0x592a35[_0x183cd0(0x219)]):!![];if(_0x292f3b[_0x183cd0(0x276)](_0x53b61d,_0xf6e4c9)){this[_0x183cd0(0x22f)](_0x183cd0(0x24b)+_0x3cf7f5[_0x183cd0(0x1fb)]+_0x183cd0(0x292)+_0x3cf7f5[_0x183cd0(0x240)]+')');const _0x183e32=await this[_0x183cd0(0x272)](_0x3cf7f5['id'],_0x30c413,_0x292f3b[_0x183cd0(0x21f)]);_0x183e32[_0x183cd0(0x1d6)]?this[_0x183cd0(0x22f)](_0x183cd0(0x1e2)+_0x3cf7f5[_0x183cd0(0x1fb)],_0x292f3b[_0x183cd0(0x222)]):this[_0x183cd0(0x22f)](_0x183cd0(0x228)+(_0x183e32[_0x183cd0(0x277)]||_0x292f3b[_0x183cd0(0x211)]),_0x292f3b[_0x183cd0(0x23c)]);}}catch(_0x26478f){this[_0x183cd0(0x22f)](_0x183cd0(0x234)+_0x26478f[_0x183cd0(0x232)],_0x292f3b[_0x183cd0(0x26f)]);}}}catch(_0x309599){this[_0x183cd0(0x22f)](_0x183cd0(0x1f5)+_0x309599[_0x183cd0(0x232)],_0x292f3b[_0x183cd0(0x26f)]);}}async[a0_0x1910ae(0x239)](){const _0x27e2a5=a0_0x1910ae,_0x24da69={'EvgPq':_0x27e2a5(0x289)},_0x3f14e3=await this[_0x27e2a5(0x220)][_0x27e2a5(0x22e)](_0x24da69[_0x27e2a5(0x255)]);return a0_0x4973e3['z'][_0x27e2a5(0x269)](exports[_0x27e2a5(0x210)])[_0x27e2a5(0x25c)](_0x3f14e3[_0x27e2a5(0x1dc)][_0x27e2a5(0x1dc)][_0x27e2a5(0x1f7)](_0x4a814e=>_0x4a814e[_0x27e2a5(0x270)]===_0x27e2a5(0x249)));}async[a0_0x1910ae(0x272)](_0x5659ef,_0x2d1f80,_0x216ebb){const _0x4855ca=a0_0x1910ae,_0x296842={'UNsYC':_0x4855ca(0x258)};try{const _0x5c0a08=await this[_0x4855ca(0x220)][_0x4855ca(0x25e)](_0x296842[_0x4855ca(0x279)],{'jobId':_0x5659ef,'amount':_0x2d1f80,'message':_0x216ebb,'apiKey':this[_0x4855ca(0x1e4)]});return _0x5c0a08[_0x4855ca(0x1dc)];}catch(_0x7e90f6){return{'success':![],'error':_0x7e90f6[_0x4855ca(0x24c)]?.[_0x4855ca(0x1dc)]?.[_0x4855ca(0x277)]||_0x7e90f6[_0x4855ca(0x232)]};}}async[a0_0x1910ae(0x28b)](_0x47ecdc,_0x285278){const _0x282d87=a0_0x1910ae,_0x2ac4c3=await this[_0x282d87(0x220)][_0x282d87(0x25e)](_0x282d87(0x1fe)+_0x47ecdc+_0x282d87(0x27f),{'content':_0x285278,'senderId':this[_0x282d87(0x26e)]});return _0x2ac4c3[_0x282d87(0x1dc)];}async[a0_0x1910ae(0x273)](_0x2161f9,_0x3ab253,_0xc73556){const _0x1bfd31=a0_0x1910ae,_0x4f6f26={'HEIJq':_0x1bfd31(0x287)},_0x43cb81=await this[_0x1bfd31(0x220)][_0x1bfd31(0x25e)](_0x1bfd31(0x1fe)+_0x2161f9+_0x1bfd31(0x28c),{'url':_0x3ab253,'name':_0xc73556,'type':_0x4f6f26[_0x1bfd31(0x1ff)],'uploaderId':this[_0x1bfd31(0x26e)]});return _0x43cb81[_0x1bfd31(0x1dc)][_0x1bfd31(0x1d6)];}async[a0_0x1910ae(0x23e)](_0xe4187c){const _0x190f4c=a0_0x1910ae,_0x37af8e={'SbILs':_0x190f4c(0x23a)},_0x489881=await this[_0x190f4c(0x220)][_0x190f4c(0x25e)](_0x190f4c(0x1fe)+_0xe4187c+_0x190f4c(0x1e9),{'userId':this[_0x190f4c(0x26e)],'role':_0x37af8e[_0x190f4c(0x262)]});return _0x489881[_0x190f4c(0x1dc)];}async[a0_0x1910ae(0x221)](_0x2da6a1,_0x2f9ac6=a0_0x1910ae(0x28f)){const _0xb38b50=a0_0x1910ae,_0x1c45be={'mLmJj':function(_0x31c4a5,_0x4a4159){return _0x31c4a5===_0x4a4159;},'hocrF':_0xb38b50(0x1da),'HfluM':_0xb38b50(0x251),'iDixA':function(_0x5f095f,_0x31328c){return _0x5f095f===_0x31328c;},'GHoLL':_0xb38b50(0x293),'eSkPg':_0xb38b50(0x21b),'vlDih':_0xb38b50(0x1df)};if(!this[_0xb38b50(0x26e)])return;try{await this[_0xb38b50(0x220)][_0xb38b50(0x25e)](_0xb38b50(0x224)+this[_0xb38b50(0x26e)]+_0xb38b50(0x1db),{'message':_0x2da6a1,'level':_0x2f9ac6});if(this[_0xb38b50(0x26a)]){const _0x532e28=_0x1c45be[_0xb38b50(0x1d7)](_0x2f9ac6,_0x1c45be[_0xb38b50(0x1f6)])?_0x1c45be[_0xb38b50(0x284)]:_0x1c45be[_0xb38b50(0x27c)](_0x2f9ac6,_0x1c45be[_0xb38b50(0x1ec)])?_0x1c45be[_0xb38b50(0x253)]:_0x1c45be[_0xb38b50(0x266)];console[_0xb38b50(0x221)](_0x532e28+'['+_0x2f9ac6+_0xb38b50(0x1f1)+_0x2da6a1);}}catch(_0x593f48){this[_0xb38b50(0x26a)]&&console[_0xb38b50(0x277)](_0xb38b50(0x288)+_0x593f48[_0xb38b50(0x232)]);}}[a0_0x1910ae(0x22f)](_0x158ef6,_0x5cd7da=a0_0x1910ae(0x28f)){const _0xe0f1c0=a0_0x1910ae;if(this[_0xe0f1c0(0x26a)])console[_0xe0f1c0(0x221)](_0xe0f1c0(0x1f3)+_0x158ef6);}}exports[a0_0x1910ae(0x26d)]=a0_0x319107,a0_0x319107[a0_0x1910ae(0x247)]=a0_0x1910ae(0x1f8),exports[a0_0x1910ae(0x225)]=a0_0x319107;
1
+ const a0_0x220de=a0_0x1d4d;function a0_0x1d4d(_0x14f4ae,_0x312025){_0x14f4ae=_0x14f4ae-0x95;const _0xd4529a=a0_0x1e50();let _0x1498a0=_0xd4529a[_0x14f4ae];if(a0_0x1d4d['DMJnJb']===undefined){var _0x10feae=function(_0x23caed){const _0x2e59b4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1fb2b9='',_0x31ea09='',_0x1b34c1=_0x1fb2b9+_0x10feae;for(let _0x3c1dd0=0x0,_0x57b0ad,_0x6178e7,_0x215f66=0x0;_0x6178e7=_0x23caed['charAt'](_0x215f66++);~_0x6178e7&&(_0x57b0ad=_0x3c1dd0%0x4?_0x57b0ad*0x40+_0x6178e7:_0x6178e7,_0x3c1dd0++%0x4)?_0x1fb2b9+=_0x1b34c1['charCodeAt'](_0x215f66+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x57b0ad>>(-0x2*_0x3c1dd0&0x6)):_0x3c1dd0:0x0){_0x6178e7=_0x2e59b4['indexOf'](_0x6178e7);}for(let _0x34afd2=0x0,_0x48024c=_0x1fb2b9['length'];_0x34afd2<_0x48024c;_0x34afd2++){_0x31ea09+='%'+('00'+_0x1fb2b9['charCodeAt'](_0x34afd2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x31ea09);};a0_0x1d4d['cohFtr']=_0x10feae,a0_0x1d4d['Garfjj']={},a0_0x1d4d['DMJnJb']=!![];}const _0x1e50e8=_0xd4529a[0x0],_0x1d4d1a=_0x14f4ae+_0x1e50e8,_0x13d436=a0_0x1d4d['Garfjj'][_0x1d4d1a];if(!_0x13d436){const _0x11d433=function(_0x1ff234){this['CTyHnP']=_0x1ff234,this['xAivyr']=[0x1,0x0,0x0],this['vcMfGD']=function(){return'newState';},this['DKhpaU']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['SLZaFQ']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x11d433['prototype']['bzlNvJ']=function(){const _0x252363=new RegExp(this['DKhpaU']+this['SLZaFQ']),_0x3093f4=_0x252363['test'](this['vcMfGD']['toString']())?--this['xAivyr'][0x1]:--this['xAivyr'][0x0];return this['eEFXPD'](_0x3093f4);},_0x11d433['prototype']['eEFXPD']=function(_0x30fabb){if(!Boolean(~_0x30fabb))return _0x30fabb;return this['pDtGUF'](this['CTyHnP']);},_0x11d433['prototype']['pDtGUF']=function(_0x3db0c8){for(let _0x1363c6=0x0,_0x586299=this['xAivyr']['length'];_0x1363c6<_0x586299;_0x1363c6++){this['xAivyr']['push'](Math['round'](Math['random']())),_0x586299=this['xAivyr']['length'];}return _0x3db0c8(this['xAivyr'][0x0]);},new _0x11d433(a0_0x1d4d)['bzlNvJ'](),_0x1498a0=a0_0x1d4d['cohFtr'](_0x1498a0),a0_0x1d4d['Garfjj'][_0x1d4d1a]=_0x1498a0;}else _0x1498a0=_0x13d436;return _0x1498a0;}(function(_0x318e02,_0x53f2e1){const _0x1ab31b=a0_0x1d4d,_0x23c7af=_0x318e02();while(!![]){try{const _0x274ff0=parseInt(_0x1ab31b(0xfe))/0x1+parseInt(_0x1ab31b(0xdd))/0x2*(-parseInt(_0x1ab31b(0x135))/0x3)+parseInt(_0x1ab31b(0xdb))/0x4+-parseInt(_0x1ab31b(0xcd))/0x5+-parseInt(_0x1ab31b(0xe8))/0x6*(-parseInt(_0x1ab31b(0xb7))/0x7)+-parseInt(_0x1ab31b(0xeb))/0x8+-parseInt(_0x1ab31b(0xbd))/0x9;if(_0x274ff0===_0x53f2e1)break;else _0x23c7af['push'](_0x23c7af['shift']());}catch(_0x37c6f2){_0x23c7af['push'](_0x23c7af['shift']());}}}(a0_0x1e50,0x673a9));function a0_0x1e50(){const _0x1c15e9=['Au15Cgq','twvZC2fNzvnJAgvTyq','C2vHCMnO','uuTbsKi','l2nVBxbSzxrL','q29UBMvJDgLUzYb0BYbszw50yujVDhmGr3jPzcaODG','Aw1Hz2vFz2vUzxjHDgLVBG','tgvNywn5ihn0yxj0ug9SBgLUzYGPignHBgXLzc4Gu0rlig5VDYb1C2vZihjLywWTDgLTzsbxzwjtB2nRzxrZlG','zgLZCgXHEu5HBwu','D2vIx2jYB3DZAw5N','B25kB2jgB3vUza','C3rYAw5N','BwLUqNvKz2v0','B25nAxnZAw9UqxnZAwDUzwq','vgnRCw0','s0z6B3u','AM9ICW','t3HNDeO','AfLWy3u','BMv3x2PVyG','Cg9ZDa','yMLKCW','Aw5JBhvKzxm','BMv3x21LC3nHz2u','yxbP','yMLKq2fJAgu','yxbPs2v5','r0XTzwC','zM9YrwfJAa','AgvHCNrIzwf0vgLTzxi','l21LC3nHz2vZ','su5gtW','v0fstG','B3bLBG','u0nRChe','C2vUzeHLyxj0yMvHDa','sgvHCNrIzwf0igzHAwXLza','wwTRv2C','AM9ICY8','yxjJAgL2zwq','DxbKyxrLuhjVzMLSzq','qwDLBNq','rxjYB3iGAw4GAgLYzwqGAgfUzgXLCG','l2HLyxj0yMvHDa','DgL0Bgu','Eu5eC0K','B25ozxDkB2i','mJGXmdu3vKTXEwPX','vuHrwvC','A2DhB1K','C2v0vhLWAw5N','C29JA2v0','C3rHDhvZ','mtC0otm1n1n2sfvLAq','rvjst1i','zgf0yq','DufKquW','tMH3CvC','zgvSAxzLCMfIBgu','yxHPB3m','l2XVz3m','zePIwhu','zw51Bq','DhjHBNnSyxrPB24','qMvHCMvYia','Dg9tDhjPBMC','AhvTyw4','Chn5q2O','DhLWAw5Nx3n0yxrL','mZa4ota3mhbNuwH4vW','C29JA2v0lMLVlwnSAwvUDa','rxjYB3iGAw4GAM9IigHHBMrSzxi','BwvZC2fNzuHHBMrSzxjZ','AM9PBL9TyxjRzxrWBgfJzq','veXQEKG','zxn6wgi','shveEee','rMfPBgvKihrVihn5BMmGy2fWywjPBgL0AwvZihrVigDYAwqSignVBNrPBNvPBMCUlI4','ks4UlG','y2fWywjPBgL0AwvZ','ywXYzwfKEq','sM9Iu2nOzw1H','BgvUz3rO','mJqYnZu3mM9ntvrZsq','ChvZAa','mMHXuLzfBq','icGK','x19PBxbVCNrezwzHDwX0','s0nzrNO','yMPVu08','wXTBmZvTu0rlg1SWBv0G','BwfYA0nVBxbSzxrL','Dg9mB3DLCKnHC2u','r05lwhu','Aw5PDfnVy2TLDa','yMfZzvvYBa','nZHZr29gsve','8j+oIsbnAxnZAw9UiefZC2LNBMvKoIa','uxHLteK','nJy0mZa0wuHnCNj3','wKv0yKG','rxjYB3iGAw4GBwvZC2fNzsbOyw5KBgvY','l21HBMfNzq','z2v0t3bLBK1PC3nPB25Z','u1vdq0vtuW','zxjYB3i','u0rlx1zfuLnjt04','wXTBmZfTu0rlievsuK9sg1SWBv0GrMfPBgvKihrVihn0CMvHBsbSB2CGDg8GzgfZAgjVyxjKoIa','Buf2r1C','Ahr0Chm6lY9Yzw50ywjVDhmUy29Tl2fWAq','CMvZCg9UC2u','rNfpyKi','tuvyteO','yNvKz2v0','DxbSB2fKrgvSAxzLCMfIBgu','vLbwuhy','uhzeDfm','C2vLBK1LC3nHz2vZ','mZK5nZq1AMDABfzd','zgvMyxvSDa','C0vVB0u','yxnsEu0','v2vIu29JA2v0ieXPBMSGrxn0ywjSAxnOzwqU','t25SAw5LigfZoIa','x19LC01VzhvSzq','ssbJyw4GzxHLy3v0zsb0AgLZig1PC3nPB24Gyxv0B25VBw91C2X5lG','yxv0B21HDgLVBG','EvDRs1K','ywrK','uMH1vMG','ywDLBNrjza','ywDLBNrZl21L','EKntDxK','uefzA2y','y29UC3rYDwn0B3i','yxjYyxK','uKXouvK','y29UBMvJDgvK','B2jQzwn0','CgfYC2u','g1SZmM0','l2fWAq','uLrHugm','zgvIDwC','qvv4y1K','zw1PDa','BwvZC2fNzq','xrTBmg0G','AwXYDgm','wvf6quC','B25iAxjLza','s3Dusem','y29UBMvJDa','BLvOEge','D2vIC29JA2v0','twLUChG','zMLSDgvY','zMLUzefUzejPza','C3rHCNrqB2XSAw5N','mc40lJe','rMfPBgvKihrVihbHCNnLigLUy29TAw5NihnVy2TLDcbTzxnZywDL','AgfZ','u2nHBM5PBMCGzM9Yig1PC3nPB25Zig1HDgnOAw5NignYAxrLCMLHlI4U','4PYfiejPzcbWBgfJzwqGzM9Yia','mtf8mtn8mNWXmNWZFdL8mtr8n3WXFdb8mtb8nNW0FdH8nq','C3vJy2vZCW','z2v0','zgf0yv9HBMfSExnPCW','q2fWywjPBgL0EvnJAgvTyq','AKXjswS','4P2mifjLBNrHqM90CYbbueKGs2v5igLZig1PC3nPBMCUifbHC3mGAxqGAw4GDgHLignVBNn0CNvJDg9Yig9YihnLDcbsru5uqujpvfnFqvbjx0TfwsbPBIaUzw52','C3bSAxq','C29Tzq','nJmXnJuZDerhvLbS','yxnZAwDUzwriyw5KBgvYCW','g1SZmw0','y3jLyxrL','yMLK','rMfPBgvKihrVigzLDgnOig1HCMTLDhbSywnLigPVyNm6ia','rMfPBgvKihrVihbYB2nLC3mGBwLZC2LVBIbIAwq6ia','AM9IsgfUzgXLCNm','sefbuMy','C2TPBgXZ','vM1hr3O','4Os577IpicbtA2LWCgvKoIa','Bg9Nsw50zxjUywW','t3bQAxy','BwLZC2LVBL9HC3nPz25Lzf8','s1fhDM0','vgfYz2v0Aw5Nie1PC3nPB246ia','Bg9N','vfLoCeK','ywDLBNrZlW','l2zPBgvZ','B25nzxnZywDL','Aw5FChjVz3jLC3m','wKvitw8','ywDLBNq','C3rHCNrizwfYDgjLyxq','EM9K','kcGOlISPkYKRksSK','AgvHCNrIzwf0sw50zxj2ywW','CuLfq2G','yxbWBhK','C2vUze1LC3nHz2u','zgvMAw5LuhjVCgvYDhK','y29Kzv9Nzw5LCMf0Aw9U','tefnuvK','y29TCgXLDgvK','vw5RBM93BIbYzwfZB24','AhDIAw4','Ahr4Dey','CMvWBgfJzq','EKrtvK4','sfrSB24','wxvKwhi','g1SZm20'];a0_0x1e50=function(){return _0x1c15e9;};return a0_0x1e50();}const a0_0x3b6491=(function(){let _0x4999f9=!![];return function(_0x4e04a5,_0x3cf9ea){const _0x450b65=_0x4999f9?function(){const _0x47ebae=a0_0x1d4d;if(_0x3cf9ea){const _0x30b511=_0x3cf9ea[_0x47ebae(0x153)](_0x4e04a5,arguments);return _0x3cf9ea=null,_0x30b511;}}:function(){};return _0x4999f9=![],_0x450b65;};}()),a0_0x1fa11c=a0_0x3b6491(this,function(){const _0x46e859=a0_0x1d4d,_0x3b67fc={'GNKXu':_0x46e859(0x150)};return a0_0x1fa11c[_0x46e859(0xc9)]()[_0x46e859(0x163)](_0x3b67fc[_0x46e859(0xe5)])[_0x46e859(0xc9)]()[_0x46e859(0x10e)](a0_0x1fa11c)[_0x46e859(0x163)](_0x3b67fc[_0x46e859(0xe5)]);});a0_0x1fa11c();'use strict';var a0_0x11233b=this&&this[a0_0x220de(0xdf)]||function(_0x56e147){const _0x511cae=a0_0x220de;return _0x56e147&&_0x56e147[_0x511cae(0x104)]?_0x56e147:{'default':_0x56e147};};Object[a0_0x220de(0x155)](exports,a0_0x220de(0x104),{'value':!![]}),exports[a0_0x220de(0xb1)]=exports[a0_0x220de(0x162)]=exports[a0_0x220de(0xd9)]=exports[a0_0x220de(0x130)]=void 0x0;const a0_0x4b25e1=a0_0x11233b(require(a0_0x220de(0xc3))),a0_0x4b4a21=require(a0_0x220de(0xce)),a0_0x3b2221=require(a0_0x220de(0x14f));exports[a0_0x220de(0x130)]=a0_0x3b2221['z'][a0_0x220de(0xc6)]([a0_0x220de(0x156),a0_0x220de(0x16a),a0_0x220de(0x12f),a0_0x220de(0x167),a0_0x220de(0x106),a0_0x220de(0xc7)]),exports[a0_0x220de(0xd9)]=a0_0x3b2221['z'][a0_0x220de(0x112)]({'id':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'title':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'description':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'budget':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'category':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'status':a0_0x3b2221['z'][a0_0x220de(0xc6)]([a0_0x220de(0xa9),a0_0x220de(0x14b),a0_0x220de(0x158),a0_0x220de(0xaf)]),'createdAt':a0_0x3b2221['z'][a0_0x220de(0x16c)]()}),exports[a0_0x220de(0x162)]=a0_0x3b2221['z'][a0_0x220de(0x112)]({'id':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'jobId':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'content':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'senderId':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'createdAt':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'sender':a0_0x3b2221['z'][a0_0x220de(0x112)]({'id':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'displayName':a0_0x3b2221['z'][a0_0x220de(0x16c)](),'type':a0_0x3b2221['z'][a0_0x220de(0xc6)]([a0_0x220de(0xca),a0_0x220de(0x14d)])})});class a0_0xabd99{constructor(_0x33fb2e={}){const _0xee4a3a=a0_0x220de,_0x36bce0={'kgGoY':_0xee4a3a(0x12c),'RhuVh':_0xee4a3a(0xf5),'RLNQY':_0xee4a3a(0x132)},_0x5d048f=_0x36bce0[_0xee4a3a(0xb9)][_0xee4a3a(0x133)]('|');let _0x2316fb=0x0;while(!![]){switch(_0x5d048f[_0x2316fb++]){case'0':this[_0xee4a3a(0xe7)]=_0x33fb2e[_0xee4a3a(0xe7)]||_0x36bce0[_0xee4a3a(0x109)];continue;case'1':this[_0xee4a3a(0xa2)]=_0x33fb2e[_0xee4a3a(0xa2)]||process.env.RENTABOTS_API_KEY||process.env.AGENT_API_KEY||'';continue;case'2':this[_0xee4a3a(0xa5)]=null;continue;case'3':this[_0xee4a3a(0x13c)]=[];continue;case'4':this[_0xee4a3a(0x151)]=_0x33fb2e[_0xee4a3a(0x151)]||0x7530;continue;case'5':this[_0xee4a3a(0xa0)]=a0_0x4b25e1[_0xee4a3a(0xff)][_0xee4a3a(0x138)]({'baseURL':this[_0xee4a3a(0xe7)],'headers':{'x-api-key':this[_0xee4a3a(0xa2)],'x-sdk-version':a0_0xabd99[_0xee4a3a(0xf2)]}});continue;case'6':this[_0xee4a3a(0xd7)]=_0x33fb2e[_0xee4a3a(0xd7)]||[];continue;case'7':this[_0xee4a3a(0xa1)]=new Set();continue;case'8':if(!this[_0xee4a3a(0xa2)])throw new Error(_0x36bce0[_0xee4a3a(0x110)]);continue;case'9':this[_0xee4a3a(0x136)]=[];continue;case'10':this[_0xee4a3a(0x117)]=_0x33fb2e[_0xee4a3a(0x117)]||![];continue;case'11':this[_0xee4a3a(0x10a)]=null;continue;case'12':this[_0xee4a3a(0xd0)]=[];continue;case'13':this[_0xee4a3a(0xbb)]=null;continue;case'14':this[_0xee4a3a(0xfd)]=new Set();continue;}break;}}async[a0_0x220de(0x120)](){const _0x58fe96=a0_0x220de,_0x4dd15d={'sEooE':_0x58fe96(0x10b),'QxeLI':function(_0x82a9bc,_0x2903a7){return _0x82a9bc>_0x2903a7;},'eszXb':_0x58fe96(0xd5),'zDSVN':_0x58fe96(0xa8)};this[_0x58fe96(0x141)](_0x58fe96(0x166)+a0_0xabd99[_0x58fe96(0xf2)]+_0x58fe96(0xd6));try{const _0x3cceb7=await this[_0x58fe96(0xa0)][_0x58fe96(0x12e)](_0x4dd15d[_0x58fe96(0x100)]);this[_0x58fe96(0x10a)]=_0x3cceb7[_0x58fe96(0xbf)][_0x58fe96(0x14d)]['id'],this[_0x58fe96(0xe6)](),this[_0x58fe96(0x14e)](this[_0x58fe96(0x151)]),this[_0x58fe96(0x141)](_0x58fe96(0x103)+_0x3cceb7[_0x58fe96(0xbf)][_0x58fe96(0x14d)][_0x58fe96(0x169)]);if(_0x4dd15d[_0x58fe96(0xea)](this[_0x58fe96(0xd7)][_0x58fe96(0xda)],0x0))try{await this[_0x58fe96(0xb0)]({'skills':this[_0x58fe96(0xd7)]});}catch(_0x5bc13e){this[_0x58fe96(0x141)](_0x4dd15d[_0x58fe96(0xd3)],_0x4dd15d[_0x58fe96(0x15d)]);}return{'success':!![],'agent':_0x3cceb7[_0x58fe96(0xbf)][_0x58fe96(0x14d)]};}catch(_0x5568d1){const _0x560f24=_0x5568d1[_0x58fe96(0xf6)]?.[_0x58fe96(0xbf)]?.[_0x58fe96(0xf1)]||_0x5568d1[_0x58fe96(0x11a)];return{'success':![],'error':_0x560f24};}}[a0_0x220de(0x14e)](_0x43ef8d=0x7530){const _0x183a96=a0_0x220de,_0x15c091={'YkkWg':function(_0x2a7752,_0x3aeded){return _0x2a7752(_0x3aeded);},'ilrtc':function(_0x504c57,_0x443275,_0x28da9f){return _0x504c57(_0x443275,_0x28da9f);}};if(!this[_0x183a96(0x10a)])return;if(this[_0x183a96(0xa5)])_0x15c091[_0x183a96(0xad)](clearInterval,this[_0x183a96(0xa5)]);this[_0x183a96(0xab)](),this[_0x183a96(0xa5)]=_0x15c091[_0x183a96(0x11c)](setInterval,()=>this[_0x183a96(0xab)](),_0x43ef8d);}async[a0_0x220de(0xab)](){const _0x3abf8e=a0_0x220de,_0x609d65={'VPVPv':_0x3abf8e(0xac),'Minpx':_0x3abf8e(0xa8)};if(!this[_0x3abf8e(0x10a)])return;try{await this[_0x3abf8e(0xa0)][_0x3abf8e(0x9c)](_0x3abf8e(0x148)+this[_0x3abf8e(0x10a)]+_0x3abf8e(0xb3),{},{'headers':{'Authorization':_0x3abf8e(0xc8)+this[_0x3abf8e(0xa2)]}});}catch(_0x463d06){this[_0x3abf8e(0x141)](_0x609d65[_0x3abf8e(0xfb)],_0x609d65[_0x3abf8e(0x123)]);}}[a0_0x220de(0xe6)](){const _0xbda42=a0_0x220de,_0x1f8d1e={'bjoSO':_0xbda42(0x102),'hwbin':_0xbda42(0xd1),'MEXLJ':function(_0x516054,_0x40d586){return _0x516054(_0x40d586);},'PAYkf':_0xbda42(0xed),'SCkpq':_0xbda42(0xbe),'HTlon':_0xbda42(0x128),'HAARf':_0xbda42(0xcf),'qIECh':function(_0x47566c,_0x8a5218){return _0x47566c(_0x8a5218);},'UHQYW':_0xbda42(0xb2),'YudXr':_0xbda42(0xf0),'LAMQY':_0xbda42(0x115),'asRyM':_0xbda42(0x122),'uAdAL':_0xbda42(0x120),'YQzAG':_0xbda42(0x9f),'TLjzH':_0xbda42(0x9b)};if(this[_0xbda42(0xbb)]&&this[_0xbda42(0xbb)][_0xbda42(0x111)])return;const _0x530108=this[_0xbda42(0xe7)][_0xbda42(0x15c)](_0x1f8d1e[_0xbda42(0x157)],'');this[_0xbda42(0xbb)]=(0x0,a0_0x4b4a21['io'])(_0x530108,{'auth':{'token':this[_0xbda42(0xa2)]},'transports':[_0x1f8d1e[_0xbda42(0x101)]]}),this[_0xbda42(0xbb)]['on'](_0x1f8d1e[_0xbda42(0xc0)],()=>{const _0x39fde7=_0xbda42;this[_0x39fde7(0x141)](_0x1f8d1e[_0x39fde7(0xe1)]),this[_0x39fde7(0xbb)]?.[_0x39fde7(0x119)](_0x1f8d1e[_0x39fde7(0x15a)]);}),this[_0xbda42(0xbb)]['on'](_0x1f8d1e[_0xbda42(0x11d)],_0x1934c0=>{const _0xa15a7b=_0xbda42,_0x39cd4f={'QKAJB':function(_0x5ed030,_0x8a6909){const _0x2fd66f=a0_0x1d4d;return _0x1f8d1e[_0x2fd66f(0xf8)](_0x5ed030,_0x8a6909);},'psyCj':_0x1f8d1e[_0xa15a7b(0x10d)],'NhwqW':_0x1f8d1e[_0xa15a7b(0xaa)]};try{const _0xce8a31=exports[_0xa15a7b(0x162)][_0xa15a7b(0x113)](_0x1934c0);!this[_0xa15a7b(0xfd)][_0xa15a7b(0x129)](_0xce8a31['id'])&&(this[_0xa15a7b(0xfd)][_0xa15a7b(0x108)](_0xce8a31['id']),this[_0xa15a7b(0xd0)][_0xa15a7b(0xa4)](_0xcb9045=>{const _0x3cd6cd=_0xa15a7b;try{_0x39cd4f[_0x3cd6cd(0x164)](_0xcb9045,_0xce8a31);}catch(_0x2277bd){this[_0x3cd6cd(0x141)](_0x39cd4f[_0x3cd6cd(0xcb)],_0x39cd4f[_0x3cd6cd(0xc1)]);}}));}catch(_0x4ee45){this[_0xa15a7b(0x141)](_0x1f8d1e[_0xa15a7b(0x15e)],_0x1f8d1e[_0xa15a7b(0xaa)]);}}),this[_0xbda42(0xbb)]['on'](_0x1f8d1e[_0xbda42(0xd2)],_0x1b07e6=>{const _0x42f90c=_0xbda42,_0x335e36={'AUxcY':function(_0x59ec53,_0x5bc8da){const _0x44cf8b=a0_0x1d4d;return _0x1f8d1e[_0x44cf8b(0xf8)](_0x59ec53,_0x5bc8da);},'htxtF':_0x1f8d1e[_0x42f90c(0x13d)],'hYpcu':_0x1f8d1e[_0x42f90c(0xaa)]};try{const _0x2896d2=exports[_0x42f90c(0xd9)][_0x42f90c(0x113)](_0x1b07e6);this[_0x42f90c(0x13c)][_0x42f90c(0xa4)](_0x2549dd=>{const _0x3970a9=_0x42f90c;try{_0x335e36[_0x3970a9(0x118)](_0x2549dd,_0x2896d2);}catch(_0x463e43){this[_0x3970a9(0x141)](_0x335e36[_0x3970a9(0x15b)],_0x335e36[_0x3970a9(0x9a)]);}});}catch(_0x5b785d){}}),this[_0xbda42(0xbb)]['on'](_0xbda42(0x143)+this[_0xbda42(0x10a)],_0xa39bfb=>{const _0x45a9dc=_0xbda42;try{this[_0x45a9dc(0x141)](_0x45a9dc(0xe9)+_0xa39bfb[_0x45a9dc(0xb4)],_0x1f8d1e[_0x45a9dc(0x15f)]);const _0x26dc00=exports[_0x45a9dc(0xd9)][_0x45a9dc(0x113)](_0xa39bfb);this[_0x45a9dc(0x136)][_0x45a9dc(0xa4)](_0x59202d=>{const _0x32580d=_0x45a9dc;try{_0x1f8d1e[_0x32580d(0x152)](_0x59202d,_0x26dc00);}catch(_0x11347a){this[_0x32580d(0x141)](_0x1f8d1e[_0x32580d(0xb8)],_0x1f8d1e[_0x32580d(0xaa)]);}});}catch(_0x47179d){}});}[a0_0x220de(0x14a)](_0x37ec81){const _0x4698c5=a0_0x220de;this[_0x4698c5(0xd0)][_0x4698c5(0xdc)](_0x37ec81);}[a0_0x220de(0xb6)](_0x482f60){const _0x5dc198=a0_0x220de;this[_0x5dc198(0x13c)][_0x5dc198(0xdc)](_0x482f60);}[a0_0x220de(0x11e)](_0x3b84ed){const _0x4f14f7=a0_0x220de;this[_0x4f14f7(0x136)][_0x4f14f7(0xdc)](_0x3b84ed);}[a0_0x220de(0x95)](_0x4f8677){const _0x384794=a0_0x220de;this[_0x384794(0x11e)](_0x4f8677);}[a0_0x220de(0x16b)](_0xaf2804){const _0x29c9fb=a0_0x220de;this[_0x29c9fb(0xb6)](_0xaf2804);}[a0_0x220de(0x126)](){const _0x211086=a0_0x220de,_0x512fe3={'TYNpI':_0x211086(0x168),'ZEHMo':_0x211086(0xa8)};this[_0x211086(0x141)](_0x512fe3[_0x211086(0x147)],_0x512fe3[_0x211086(0x14c)]);}async[a0_0x220de(0xb0)](_0x2ea527){const _0x278964=a0_0x220de;if(!this[_0x278964(0x10a)])return;return this[_0x278964(0xa0)][_0x278964(0x9c)](_0x278964(0x148)+this[_0x278964(0x10a)]+_0x278964(0xee),_0x2ea527);}async[a0_0x220de(0xba)](_0x53c30e,_0x549fe4=!![]){const _0x3dae43=a0_0x220de,_0x10548a={'zCSuy':_0x3dae43(0xcc)};this[_0x3dae43(0xbb)]&&this[_0x3dae43(0xbb)][_0x3dae43(0x119)](_0x10548a[_0x3dae43(0x10c)],{'jobId':_0x53c30e,'isTyping':_0x549fe4});}async[a0_0x220de(0x125)](_0x14fdae){const _0x2ca329=a0_0x220de,_0x5c64f2={'Tckqm':_0x2ca329(0x12a),'HuDxA':function(_0x4e5212,_0x2b6d20){return _0x4e5212(_0x2b6d20);},'FqObB':function(_0x200c1e,_0x121a5a){return _0x200c1e>=_0x121a5a;},'iMypd':function(_0x2d91a4,_0x64bb1a){return _0x2d91a4&&_0x64bb1a;},'Opjiv':_0x2ca329(0x105),'mAvGW':_0x2ca329(0xf0),'KQGvm':_0x2ca329(0x159),'KCYFz':_0x2ca329(0xa8),'yNDsI':_0x2ca329(0xd8),'ZEtbH':_0x2ca329(0xbe)};this[_0x2ca329(0x141)](_0x5c64f2[_0x2ca329(0x96)]);try{const _0x49264c=await this[_0x2ca329(0xef)]();for(const _0x27376b of _0x49264c){if(this[_0x2ca329(0xa1)][_0x2ca329(0x129)](_0x27376b['id']))continue;try{const _0x50a1bb=_0x5c64f2[_0x2ca329(0xd4)](parseFloat,_0x27376b[_0x2ca329(0xf9)]),_0x531fa5=_0x14fdae[_0x2ca329(0x13e)]?_0x14fdae[_0x2ca329(0x13e)][_0x2ca329(0x134)](_0x22f520=>_0x27376b[_0x2ca329(0xb4)][_0x2ca329(0xe4)]()[_0x2ca329(0x9e)](_0x22f520[_0x2ca329(0xe4)]())):!![],_0x2b8e21=_0x14fdae[_0x2ca329(0x16d)]?_0x5c64f2[_0x2ca329(0xf7)](_0x50a1bb,_0x14fdae[_0x2ca329(0x16d)]):!![];if(_0x5c64f2[_0x2ca329(0x161)](_0x531fa5,_0x2b8e21)){this[_0x2ca329(0x141)](_0x2ca329(0x145)+_0x27376b[_0x2ca329(0xb4)]+_0x2ca329(0xde)+_0x27376b[_0x2ca329(0xf9)]+')');const _0x55e89e=await this[_0x2ca329(0x139)](_0x27376b['id'],_0x50a1bb,_0x5c64f2[_0x2ca329(0x142)]);_0x55e89e[_0x2ca329(0x12d)]?(this[_0x2ca329(0x141)](_0x2ca329(0x12b)+_0x27376b[_0x2ca329(0xb4)],_0x5c64f2[_0x2ca329(0xf4)]),this[_0x2ca329(0xa1)][_0x2ca329(0x108)](_0x27376b['id'])):(this[_0x2ca329(0x141)](_0x2ca329(0x140)+(_0x55e89e[_0x2ca329(0xf1)]||_0x5c64f2[_0x2ca329(0x144)]),_0x5c64f2[_0x2ca329(0xe0)]),_0x55e89e[_0x2ca329(0xf1)]&&_0x55e89e[_0x2ca329(0xf1)][_0x2ca329(0x9e)](_0x5c64f2[_0x2ca329(0xb5)])&&this[_0x2ca329(0xa1)][_0x2ca329(0x108)](_0x27376b['id']));}}catch(_0x2b3e34){this[_0x2ca329(0x141)](_0x2ca329(0x13b)+_0x2b3e34[_0x2ca329(0x11a)],_0x5c64f2[_0x2ca329(0xec)]);}}}catch(_0x2caf6b){this[_0x2ca329(0x141)](_0x2ca329(0x13a)+_0x2caf6b[_0x2ca329(0x11a)],_0x5c64f2[_0x2ca329(0xec)]);}}async[a0_0x220de(0xef)](){const _0xfecf51=a0_0x220de,_0x2ebb91={'OxgtJ':_0xfecf51(0x98)},_0x144d80=await this[_0xfecf51(0xa0)][_0xfecf51(0x12e)](_0x2ebb91[_0xfecf51(0x99)]);return a0_0x3b2221['z'][_0xfecf51(0x10f)](exports[_0xfecf51(0xd9)])[_0xfecf51(0x113)](_0x144d80[_0xfecf51(0xbf)][_0xfecf51(0xbf)][_0xfecf51(0x124)](_0x2349d5=>_0x2349d5[_0xfecf51(0xbc)]===_0xfecf51(0xa9)));}async[a0_0x220de(0x139)](_0x42f196,_0x28dea3,_0x3936a8){const _0x216ef6=a0_0x220de,_0x37446f={'RTaPc':_0x216ef6(0x9d)};try{const _0x17ed48=await this[_0x216ef6(0xa0)][_0x216ef6(0x9c)](_0x37446f[_0x216ef6(0x116)],{'jobId':_0x42f196,'amount':_0x28dea3,'message':_0x3936a8,'apiKey':this[_0x216ef6(0xa2)]});return _0x17ed48[_0x216ef6(0xbf)];}catch(_0x46ad1b){return{'success':![],'error':_0x46ad1b[_0x216ef6(0xf6)]?.[_0x216ef6(0xbf)]?.[_0x216ef6(0xf1)]||_0x46ad1b[_0x216ef6(0x11a)]};}}async[a0_0x220de(0x154)](_0x41103c,_0x9b820f){const _0x236b28=a0_0x220de,_0x5d6c92=await this[_0x236b28(0xa0)][_0x236b28(0x9c)](_0x236b28(0xae)+_0x41103c+_0x236b28(0xa6),{'content':_0x9b820f,'senderId':this[_0x236b28(0x10a)]});return _0x5d6c92[_0x236b28(0xbf)];}async[a0_0x220de(0xfa)](_0x19c239,_0x310c17,_0x2cdaec){const _0x22cc46=a0_0x220de,_0x271e36={'GLmeg':_0x22cc46(0xc2)},_0x5530ba=await this[_0x22cc46(0xa0)][_0x22cc46(0x9c)](_0x22cc46(0xae)+_0x19c239+_0x22cc46(0x149),{'url':_0x310c17,'name':_0x2cdaec,'type':_0x271e36[_0x22cc46(0xa3)],'uploaderId':this[_0x22cc46(0x10a)]});return _0x5530ba[_0x22cc46(0xbf)][_0x22cc46(0x12d)];}async[a0_0x220de(0xe3)](_0xbf5125){const _0x5707a9=a0_0x220de,_0xf0cc9a={'VmGGz':_0x5707a9(0x14d)},_0x2c6b86=await this[_0x5707a9(0xa0)][_0x5707a9(0x9c)](_0x5707a9(0xae)+_0xbf5125+_0x5707a9(0x165),{'userId':this[_0x5707a9(0x10a)],'role':_0xf0cc9a[_0x5707a9(0x13f)]});return _0x2c6b86[_0x5707a9(0xbf)];}async[a0_0x220de(0x146)](_0x39208b,_0x23eb8d=a0_0x220de(0xa7)){const _0x17b38f=a0_0x220de,_0x270f90={'jLIIk':function(_0x4ae72c,_0x1682eb){return _0x4ae72c===_0x1682eb;},'KwTHC':_0x17b38f(0xbe),'dJbXu':_0x17b38f(0x137),'yWkKY':function(_0x40b760,_0x5ab0a1){return _0x40b760===_0x5ab0a1;},'nUhxa':_0x17b38f(0xa8),'PvDtS':_0x17b38f(0x160),'KFzou':_0x17b38f(0x114)};if(!this[_0x17b38f(0x10a)])return;try{await this[_0x17b38f(0xa0)][_0x17b38f(0x9c)](_0x17b38f(0x148)+this[_0x17b38f(0x10a)]+_0x17b38f(0xc4),{'message':_0x39208b,'level':_0x23eb8d});if(this[_0x17b38f(0x117)]){const _0x38479f=_0x270f90[_0x17b38f(0x131)](_0x23eb8d,_0x270f90[_0x17b38f(0x11f)])?_0x270f90[_0x17b38f(0xc5)]:_0x270f90[_0x17b38f(0x107)](_0x23eb8d,_0x270f90[_0x17b38f(0x121)])?_0x270f90[_0x17b38f(0xfc)]:_0x270f90[_0x17b38f(0x97)];console[_0x17b38f(0x146)](_0x38479f+'['+_0x23eb8d+_0x17b38f(0x11b)+_0x39208b);}}catch(_0x2d36d8){this[_0x17b38f(0x117)]&&console[_0x17b38f(0xf1)](_0x17b38f(0xf3)+_0x2d36d8[_0x17b38f(0x11a)]);}}[a0_0x220de(0x141)](_0x56f8cc,_0x401a6f=a0_0x220de(0xa7)){const _0x506e2b=a0_0x220de;if(this[_0x506e2b(0x117)])console[_0x506e2b(0x146)](_0x506e2b(0xe2)+_0x56f8cc);}}exports[a0_0x220de(0xb1)]=a0_0xabd99,a0_0xabd99[a0_0x220de(0xf2)]=a0_0x220de(0x127),exports[a0_0x220de(0xff)]=a0_0xabd99;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rentabots-sdk",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Official SDK for RentaBots AI Agent Marketplace",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -9,7 +9,7 @@
9
9
  "rentabots-sdk": "./init.js"
10
10
  },
11
11
  "scripts": {
12
- "build": "tsc && javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding 'base64' --string-array-threshold 1 --rename-globals true --control-flow-flattening true --control-flow-flattening-threshold 1"
12
+ "build": "tsc && javascript-obfuscator ./dist --output ./dist --compact true --self-defending true --string-array true --string-array-encoding base64 --string-array-threshold 1 --rename-globals true --control-flow-flattening true --control-flow-flattening-threshold 1"
13
13
  },
14
14
  "keywords": [
15
15
  "ai",
@@ -20,6 +20,7 @@
20
20
  ],
21
21
  "dependencies": {
22
22
  "axios": "^1.6.0",
23
+ "rentabots-sdk": "^0.4.0",
23
24
  "socket.io-client": "^4.8.3",
24
25
  "zod": "^4.3.6"
25
26
  },
package/src/index.ts CHANGED
@@ -1,325 +1,348 @@
1
- import axios, { AxiosInstance } from 'axios';
2
- import { io, Socket } from 'socket.io-client';
3
- import { z } from 'zod';
4
-
5
- // --- TYPE DEFINITIONS ---
6
-
7
- export const CapabilitySchema = z.enum([
8
- 'code_generation',
9
- 'web_browsing',
10
- 'data_analysis',
11
- 'image_generation',
12
- 'automation',
13
- 'translation'
14
- ]);
15
-
16
- export type Capability = z.infer<typeof CapabilitySchema>;
17
-
18
- export const JobSchema = z.object({
19
- id: z.string(),
20
- title: z.string(),
21
- description: z.string(),
22
- budget: z.string(),
23
- category: z.string(),
24
- status: z.enum(['open', 'in_progress', 'completed', 'archived']),
25
- createdAt: z.string(),
26
- });
27
-
28
- export type Job = z.infer<typeof JobSchema>;
29
-
30
- export const MessageSchema = z.object({
31
- id: z.string(),
32
- jobId: z.string(),
33
- content: z.string(),
34
- senderId: z.string(),
35
- createdAt: z.string(),
36
- sender: z.object({
37
- id: z.string(),
38
- displayName: z.string(),
39
- type: z.enum(['human', 'agent'])
40
- })
41
- });
42
-
43
- export type Message = z.infer<typeof MessageSchema>;
44
-
45
- export interface AgentOptions {
46
- baseUrl?: string;
47
- apiKey?: string;
48
- capabilities?: Capability[];
49
- debug?: boolean;
50
- heartbeatInterval?: number;
51
- }
52
-
53
- // --- CORE SDK ---
54
-
55
- export class Agent {
56
- public static readonly SDK_VERSION = '0.4.0';
57
-
58
- private apiKey: string;
59
- public readonly baseUrl: string;
60
- private agentId: string | null = null;
61
- private api: AxiosInstance;
62
- private socket: Socket | null = null;
63
- private debug: boolean;
64
- private capabilities: Capability[];
65
- private heartbeatInterval: number;
66
-
67
- private messageHandlers: ((msg: Message) => void)[] = [];
68
- private jobHandlers: ((job: Job) => void)[] = [];
69
- private assignedHandlers: ((job: Job) => void)[] = [];
70
- private seenMessages = new Set<string>();
71
-
72
- constructor(options: AgentOptions = {}) {
73
- // 1. Standardize Env: Look for RENTABOTS_API_KEY first
74
- this.apiKey = options.apiKey || process.env.RENTABOTS_API_KEY || process.env.AGENT_API_KEY || '';
75
- this.baseUrl = options.baseUrl || 'https://rentabots.com/api';
76
- this.debug = options.debug || false;
77
- this.capabilities = options.capabilities || [];
78
- this.heartbeatInterval = options.heartbeatInterval || 30000;
79
-
80
- if (!this.apiKey) {
81
- throw new Error("❌ RentaBots API Key is missing. Pass it in the constructor or set RENTABOTS_API_KEY in .env");
82
- }
83
-
84
- this.api = axios.create({
85
- baseURL: this.baseUrl,
86
- headers: {
87
- 'x-api-key': this.apiKey,
88
- 'x-sdk-version': Agent.SDK_VERSION
89
- }
90
- });
91
- }
92
-
93
- /**
94
- * Connect to the RentaBots grid and initialize WebSockets
95
- */
96
- async connect(): Promise<{ success: boolean; agent?: any; error?: string }> {
97
- this.logInternal(`Connecting to RentaBots Grid (v${Agent.SDK_VERSION})...`);
98
-
99
- try {
100
- const res = await this.api.get('agents/me');
101
- this.agentId = res.data.agent.id;
102
-
103
- // Initialize Socket Connection
104
- this.initSocket();
105
-
106
- // Start Heartbeat to keep dashboard ONLINE
107
- this.startHeartbeat(this.heartbeatInterval);
108
-
109
- this.logInternal(`Online as: ${res.data.agent.displayName}`);
110
-
111
- // Register capabilities if any (Non-critical)
112
- if (this.capabilities.length > 0) {
113
- try {
114
- await this.updateProfile({ skills: this.capabilities });
115
- } catch (err) {
116
- this.logInternal('Failed to sync capabilities to grid, continuing...', 'WARN');
117
- }
118
- }
119
-
120
- return { success: true, agent: res.data.agent };
121
- } catch (e: any) {
122
- const error = e.response?.data?.error || e.message;
123
- return { success: false, error };
124
- }
125
- }
126
-
127
- /**
128
- * Start periodic heartbeats to maintain ONLINE status in dashboard
129
- */
130
- private startHeartbeat(intervalMs: number = 30000) {
131
- if (!this.agentId) return;
132
-
133
- // Initial heartbeat
134
- this.sendHeartbeat();
135
-
136
- setInterval(() => this.sendHeartbeat(), intervalMs);
137
- }
138
-
139
- private async sendHeartbeat() {
140
- if (!this.agentId) return;
141
- try {
142
- await this.api.post(`agents/${this.agentId}/heartbeat`, {}, {
143
- headers: { 'Authorization': `Bearer ${this.apiKey}` }
144
- });
145
- } catch (err) {
146
- this.logInternal('Heartbeat failed', 'WARN');
147
- }
148
- }
149
-
150
- private initSocket() {
151
- const socketUrl = this.baseUrl.replace('/api', '');
152
- this.socket = io(socketUrl, {
153
- auth: { token: this.apiKey },
154
- transports: ['websocket']
155
- });
156
-
157
- this.socket.on('connect', () => {
158
- this.logInternal('WebSocket Link Established.');
159
- // Automatically join marketplace feed
160
- this.socket?.emit('join_marketplace');
161
- });
162
-
163
- this.socket.on('new_message', (data) => {
164
- try {
165
- const msg = MessageSchema.parse(data);
166
- if (!this.seenMessages.has(msg.id)) {
167
- this.seenMessages.add(msg.id);
168
- this.messageHandlers.forEach(h => h(msg));
169
- }
170
- } catch (err) {
171
- this.logInternal('Failed to parse incoming socket message', 'ERROR');
172
- }
173
- });
174
-
175
- // Listen for new jobs posted to the marketplace (Real-Time Auto-Bidding)
176
- this.socket.on('new_job', (data) => {
177
- try {
178
- const job = JobSchema.parse(data);
179
- this.jobHandlers.forEach(h => h(job));
180
- } catch (err) {}
181
- });
182
-
183
- // Listen for when THIS agent specifically is hired
184
- this.socket.on(`mission_assigned_${this.agentId}`, (data) => {
185
- try {
186
- const job = JobSchema.parse(data);
187
- // Trigger assigned handlers
188
- this.assignedHandlers.forEach(h => h(job));
189
- } catch (err) {}
190
- });
191
- }
192
-
193
- // --- HIGH LEVEL EVENT HANDLERS ---
194
-
195
- onMessage(callback: (msg: Message) => void) {
196
- this.messageHandlers.push(callback);
197
- }
198
-
199
- /**
200
- * Fired when a new job is posted to the grid.
201
- * Perfect for real-time auto-bidding.
202
- */
203
- onNewJob(callback: (job: Job) => void) {
204
- this.jobHandlers.push(callback);
205
- }
206
-
207
- /**
208
- * Fired when THIS agent specifically is hired for a mission.
209
- */
210
- onHired(callback: (job: Job) => void) {
211
- this.assignedHandlers.push(callback);
212
- }
213
-
214
- // --- ALIASES FOR BACKWARD COMPATIBILITY ---
215
- onMissionAssigned(callback: (job: Job) => void) { this.onHired(callback); }
216
- onJobFound(callback: (job: Job) => void) { this.onNewJob(callback); }
217
- startPolling() { this.logInternal('Legacy startPolling() called. SDK now uses real-time WebSockets.', 'WARN'); }
218
-
219
- // --- AGENT ACTIONS ---
220
-
221
- /**
222
- * Update the agent's profile on the grid
223
- */
224
- async updateProfile(data: { displayName?: string; skills?: string[]; bio?: string }) {
225
- if (!this.agentId) return;
226
- return this.api.post(`agents/${this.agentId}/manage`, data);
227
- }
228
-
229
- /**
230
- * Broadcast a typing indicator to the user
231
- */
232
- async setTyping(jobId: string, isTyping: boolean = true) {
233
- if (this.socket) {
234
- this.socket.emit('typing_state', { jobId, isTyping });
235
- }
236
- }
237
-
238
- /**
239
- * Automatically find missions matching criteria and bid
240
- */
241
- async findAndBid(criteria: { skills?: string[]; minBudget?: number }) {
242
- this.logInternal('Scanning for missions matching criteria...');
243
- try {
244
- const jobs = await this.getOpenMissions();
245
-
246
- for (const job of jobs) {
247
- try {
248
- const budget = parseFloat(job.budget);
249
- const matchesSkill = criteria.skills ? criteria.skills.some(s => job.title.toLowerCase().includes(s.toLowerCase())) : true;
250
- const matchesBudget = criteria.minBudget ? budget >= criteria.minBudget : true;
251
-
252
- if (matchesSkill && matchesBudget) {
253
- this.logInternal(`Targeting Mission: ${job.title} ($${job.budget})`);
254
- const bidRes = await this.bid(job.id, budget, "I can execute this mission autonomously.");
255
- if (bidRes.success) {
256
- this.logInternal(`✅ Bid placed for ${job.title}`, 'SUCCESS' as any);
257
- } else {
258
- this.logInternal(`ℹ️ Skipped: ${bidRes.error || 'Unknown reason'}`, 'WARN');
259
- }
260
- }
261
- } catch (innerError: any) {
262
- this.logInternal(`Failed to process mission bid: ${innerError.message}`, 'ERROR');
263
- }
264
- }
265
- } catch (outerError: any) {
266
- this.logInternal(`Failed to fetch marketplace jobs: ${outerError.message}`, 'ERROR');
267
- }
268
- }
269
-
270
- async getOpenMissions(): Promise<Job[]> {
271
- const res = await this.api.get('jobs');
272
- return z.array(JobSchema).parse(res.data.data.filter((j: any) => j.status === 'open'));
273
- }
274
-
275
- async bid(jobId: string, amount: number, message: string) {
276
- try {
277
- const res = await this.api.post('bids', { jobId, amount, message, apiKey: this.apiKey });
278
- return res.data;
279
- } catch (e: any) {
280
- return {
281
- success: false,
282
- error: e.response?.data?.error || e.message
283
- };
284
- }
285
- }
286
-
287
- async sendMessage(jobId: string, content: string) {
288
- const res = await this.api.post(`jobs/${jobId}/messages`, { content, senderId: this.agentId });
289
- return res.data;
290
- }
291
-
292
- async uploadDeliverable(jobId: string, url: string, name: string) {
293
- const res = await this.api.post(`jobs/${jobId}/files`, { url, name, type: 'deliverable', uploaderId: this.agentId });
294
- return res.data.success;
295
- }
296
-
297
- async markComplete(jobId: string) {
298
- const res = await this.api.post(`jobs/${jobId}/complete`, { userId: this.agentId, role: 'agent' });
299
- return res.data;
300
- }
301
-
302
- /**
303
- * Stream logs to the RentaBots Dashboard
304
- */
305
- async log(message: string, level: 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' = 'INFO') {
306
- if (!this.agentId) return;
307
- try {
308
- await this.api.post(`agents/${this.agentId}/logs`, { message, level });
309
- if (this.debug) {
310
- const color = level === 'ERROR' ? '\x1b[31m' : level === 'WARN' ? '\x1b[33m' : '\x1b[32m';
311
- console.log(`${color}[${level}]\x1b[0m ${message}`);
312
- }
313
- } catch(e: any) {
314
- if (this.debug) {
315
- console.error(`[\x1b[31mSDK ERROR\x1b[0m] Failed to stream log to dashboard: ${e.message}`);
316
- }
317
- }
318
- }
319
-
320
- private logInternal(msg: string, level: any = 'INFO') {
321
- if (this.debug) console.log(`[\x1b[35mSDK\x1b[0m] ${msg}`);
322
- }
323
- }
324
-
325
- export default Agent;
1
+ import axios, { AxiosInstance } from 'axios';
2
+ import { io, Socket } from 'socket.io-client';
3
+ import { z } from 'zod';
4
+
5
+ // --- TYPE DEFINITIONS ---
6
+
7
+ export const CapabilitySchema = z.enum([
8
+ 'code_generation',
9
+ 'web_browsing',
10
+ 'data_analysis',
11
+ 'image_generation',
12
+ 'automation',
13
+ 'translation'
14
+ ]);
15
+
16
+ export type Capability = z.infer<typeof CapabilitySchema>;
17
+
18
+ export const JobSchema = z.object({
19
+ id: z.string(),
20
+ title: z.string(),
21
+ description: z.string(),
22
+ budget: z.string(),
23
+ category: z.string(),
24
+ status: z.enum(['open', 'in_progress', 'completed', 'archived']),
25
+ createdAt: z.string(),
26
+ });
27
+
28
+ export type Job = z.infer<typeof JobSchema>;
29
+
30
+ export const MessageSchema = z.object({
31
+ id: z.string(),
32
+ jobId: z.string(),
33
+ content: z.string(),
34
+ senderId: z.string(),
35
+ createdAt: z.string(),
36
+ sender: z.object({
37
+ id: z.string(),
38
+ displayName: z.string(),
39
+ type: z.enum(['human', 'agent'])
40
+ })
41
+ });
42
+
43
+ export type Message = z.infer<typeof MessageSchema>;
44
+
45
+ export interface AgentOptions {
46
+ baseUrl?: string;
47
+ apiKey?: string;
48
+ capabilities?: Capability[];
49
+ debug?: boolean;
50
+ heartbeatInterval?: number;
51
+ }
52
+
53
+ // --- CORE SDK ---
54
+
55
+ export class Agent {
56
+ public static readonly SDK_VERSION = '0.4.1';
57
+
58
+ private apiKey: string;
59
+ public readonly baseUrl: string;
60
+ private agentId: string | null = null;
61
+ private api: AxiosInstance;
62
+ private socket: Socket | null = null;
63
+ private debug: boolean;
64
+ private capabilities: Capability[];
65
+ private heartbeatInterval: number;
66
+ private heartbeatTimer: NodeJS.Timeout | null = null;
67
+
68
+ private messageHandlers: ((msg: Message) => void)[] = [];
69
+ private jobHandlers: ((job: Job) => void)[] = [];
70
+ private assignedHandlers: ((job: Job) => void)[] = [];
71
+
72
+ // Memory to prevent duplicates
73
+ private seenMessages = new Set<string>();
74
+ private bidCache = new Set<string>();
75
+
76
+ constructor(options: AgentOptions = {}) {
77
+ // 1. Standardize Env: Look for RENTABOTS_API_KEY first
78
+ this.apiKey = options.apiKey || process.env.RENTABOTS_API_KEY || process.env.AGENT_API_KEY || '';
79
+ this.baseUrl = options.baseUrl || 'https://rentabots.com/api';
80
+ this.debug = options.debug || false;
81
+ this.capabilities = options.capabilities || [];
82
+ this.heartbeatInterval = options.heartbeatInterval || 30000;
83
+
84
+ if (!this.apiKey) {
85
+ throw new Error("❌ RentaBots API Key is missing. Pass it in the constructor or set RENTABOTS_API_KEY in .env");
86
+ }
87
+
88
+ this.api = axios.create({
89
+ baseURL: this.baseUrl,
90
+ headers: {
91
+ 'x-api-key': this.apiKey,
92
+ 'x-sdk-version': Agent.SDK_VERSION
93
+ }
94
+ });
95
+ }
96
+
97
+ /**
98
+ * Connect to the RentaBots grid and initialize WebSockets
99
+ */
100
+ async connect(): Promise<{ success: boolean; agent?: any; error?: string }> {
101
+ this.logInternal(`Connecting to RentaBots Grid (v${Agent.SDK_VERSION})...`);
102
+
103
+ try {
104
+ const res = await this.api.get('agents/me');
105
+ this.agentId = res.data.agent.id;
106
+
107
+ // Initialize Socket Connection
108
+ this.initSocket();
109
+
110
+ // Start Heartbeat to keep dashboard ONLINE
111
+ this.startHeartbeat(this.heartbeatInterval);
112
+
113
+ this.logInternal(`Online as: ${res.data.agent.displayName}`);
114
+
115
+ // Register capabilities if any (Non-critical)
116
+ if (this.capabilities.length > 0) {
117
+ try {
118
+ await this.updateProfile({ skills: this.capabilities });
119
+ } catch (err) {
120
+ this.logInternal('Failed to sync capabilities to grid, continuing...', 'WARN');
121
+ }
122
+ }
123
+
124
+ return { success: true, agent: res.data.agent };
125
+ } catch (e: any) {
126
+ const error = e.response?.data?.error || e.message;
127
+ return { success: false, error };
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Start periodic heartbeats to maintain ONLINE status in dashboard
133
+ */
134
+ private startHeartbeat(intervalMs: number = 30000) {
135
+ if (!this.agentId) return;
136
+
137
+ // Clear existing timer if any
138
+ if (this.heartbeatTimer) clearInterval(this.heartbeatTimer);
139
+
140
+ // Initial heartbeat
141
+ this.sendHeartbeat();
142
+
143
+ this.heartbeatTimer = setInterval(() => this.sendHeartbeat(), intervalMs);
144
+ }
145
+
146
+ private async sendHeartbeat() {
147
+ if (!this.agentId) return;
148
+ try {
149
+ await this.api.post(`agents/${this.agentId}/heartbeat`, {}, {
150
+ headers: { 'Authorization': `Bearer ${this.apiKey}` }
151
+ });
152
+ } catch (err) {
153
+ this.logInternal('Heartbeat failed', 'WARN');
154
+ }
155
+ }
156
+
157
+ private initSocket() {
158
+ if (this.socket && this.socket.connected) return; // Prevent duplicates
159
+
160
+ const socketUrl = this.baseUrl.replace('/api', '');
161
+ this.socket = io(socketUrl, {
162
+ auth: { token: this.apiKey },
163
+ transports: ['websocket']
164
+ });
165
+
166
+ this.socket.on('connect', () => {
167
+ this.logInternal('WebSocket Link Established.');
168
+ // Automatically join marketplace feed
169
+ this.socket?.emit('join_marketplace');
170
+ });
171
+
172
+ this.socket.on('new_message', (data) => {
173
+ try {
174
+ const msg = MessageSchema.parse(data);
175
+ if (!this.seenMessages.has(msg.id)) {
176
+ this.seenMessages.add(msg.id);
177
+ this.messageHandlers.forEach(h => {
178
+ try { h(msg); } catch(e) { this.logInternal('Error in message handler', 'ERROR'); }
179
+ });
180
+ }
181
+ } catch (err) {
182
+ this.logInternal('Failed to parse incoming socket message', 'ERROR');
183
+ }
184
+ });
185
+
186
+ // Listen for new jobs posted to the marketplace (Real-Time Auto-Bidding)
187
+ this.socket.on('new_job', (data) => {
188
+ try {
189
+ const job = JobSchema.parse(data);
190
+ this.jobHandlers.forEach(h => {
191
+ try { h(job); } catch(e) { this.logInternal('Error in job handler', 'ERROR'); }
192
+ });
193
+ } catch (err) {}
194
+ });
195
+
196
+ // Listen for when THIS agent specifically is hired
197
+ this.socket.on(`mission_assigned_${this.agentId}`, (data) => {
198
+ try {
199
+ this.logInternal(`🎉 Mission Assigned: ${data.title}`, 'SUCCESS' as any);
200
+ const job = JobSchema.parse(data);
201
+ // Trigger assigned handlers
202
+ this.assignedHandlers.forEach(h => {
203
+ try { h(job); } catch(e) { this.logInternal('Error in hired handler', 'ERROR'); }
204
+ });
205
+ } catch (err) {}
206
+ });
207
+ }
208
+
209
+ // --- HIGH LEVEL EVENT HANDLERS ---
210
+
211
+ onMessage(callback: (msg: Message) => void) {
212
+ this.messageHandlers.push(callback);
213
+ }
214
+
215
+ /**
216
+ * Fired when a new job is posted to the grid.
217
+ * Perfect for real-time auto-bidding.
218
+ */
219
+ onNewJob(callback: (job: Job) => void) {
220
+ this.jobHandlers.push(callback);
221
+ }
222
+
223
+ /**
224
+ * Fired when THIS agent specifically is hired for a mission.
225
+ */
226
+ onHired(callback: (job: Job) => void) {
227
+ this.assignedHandlers.push(callback);
228
+ }
229
+
230
+ // --- ALIASES FOR BACKWARD COMPATIBILITY ---
231
+ onMissionAssigned(callback: (job: Job) => void) { this.onHired(callback); }
232
+ onJobFound(callback: (job: Job) => void) { this.onNewJob(callback); }
233
+ startPolling() { this.logInternal('Legacy startPolling() called. SDK now uses real-time WebSockets.', 'WARN'); }
234
+
235
+ // --- AGENT ACTIONS ---
236
+
237
+ /**
238
+ * Update the agent's profile on the grid
239
+ */
240
+ async updateProfile(data: { displayName?: string; skills?: string[]; bio?: string }) {
241
+ if (!this.agentId) return;
242
+ return this.api.post(`agents/${this.agentId}/manage`, data);
243
+ }
244
+
245
+ /**
246
+ * Broadcast a typing indicator to the user
247
+ */
248
+ async setTyping(jobId: string, isTyping: boolean = true) {
249
+ if (this.socket) {
250
+ this.socket.emit('typing_state', { jobId, isTyping });
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Automatically find missions matching criteria and bid
256
+ */
257
+ async findAndBid(criteria: { skills?: string[]; minBudget?: number }) {
258
+ this.logInternal('Scanning for missions matching criteria...');
259
+ try {
260
+ const jobs = await this.getOpenMissions();
261
+
262
+ for (const job of jobs) {
263
+ // Prevent duplicate bidding on the same run
264
+ if (this.bidCache.has(job.id)) continue;
265
+
266
+ try {
267
+ const budget = parseFloat(job.budget);
268
+ const matchesSkill = criteria.skills ? criteria.skills.some(s => job.title.toLowerCase().includes(s.toLowerCase())) : true;
269
+ const matchesBudget = criteria.minBudget ? budget >= criteria.minBudget : true;
270
+
271
+ if (matchesSkill && matchesBudget) {
272
+ this.logInternal(`Targeting Mission: ${job.title} ($${job.budget})`);
273
+ const bidRes = await this.bid(job.id, budget, "I can execute this mission autonomously.");
274
+ if (bidRes.success) {
275
+ this.logInternal(`✅ Bid placed for ${job.title}`, 'SUCCESS' as any);
276
+ this.bidCache.add(job.id); // Mark as bid
277
+ } else {
278
+ this.logInternal(`ℹ️ Skipped: ${bidRes.error || 'Unknown reason'}`, 'WARN');
279
+ if (bidRes.error && bidRes.error.includes('already')) {
280
+ this.bidCache.add(job.id); // Remember for next time
281
+ }
282
+ }
283
+ }
284
+ } catch (innerError: any) {
285
+ this.logInternal(`Failed to process mission bid: ${innerError.message}`, 'ERROR');
286
+ }
287
+ }
288
+ } catch (outerError: any) {
289
+ this.logInternal(`Failed to fetch marketplace jobs: ${outerError.message}`, 'ERROR');
290
+ }
291
+ }
292
+
293
+ async getOpenMissions(): Promise<Job[]> {
294
+ const res = await this.api.get('jobs');
295
+ return z.array(JobSchema).parse(res.data.data.filter((j: any) => j.status === 'open'));
296
+ }
297
+
298
+ async bid(jobId: string, amount: number, message: string) {
299
+ try {
300
+ const res = await this.api.post('bids', { jobId, amount, message, apiKey: this.apiKey });
301
+ return res.data;
302
+ } catch (e: any) {
303
+ return {
304
+ success: false,
305
+ error: e.response?.data?.error || e.message
306
+ };
307
+ }
308
+ }
309
+
310
+ async sendMessage(jobId: string, content: string) {
311
+ const res = await this.api.post(`jobs/${jobId}/messages`, { content, senderId: this.agentId });
312
+ return res.data;
313
+ }
314
+
315
+ async uploadDeliverable(jobId: string, url: string, name: string) {
316
+ const res = await this.api.post(`jobs/${jobId}/files`, { url, name, type: 'deliverable', uploaderId: this.agentId });
317
+ return res.data.success;
318
+ }
319
+
320
+ async markComplete(jobId: string) {
321
+ const res = await this.api.post(`jobs/${jobId}/complete`, { userId: this.agentId, role: 'agent' });
322
+ return res.data;
323
+ }
324
+
325
+ /**
326
+ * Stream logs to the RentaBots Dashboard
327
+ */
328
+ async log(message: string, level: 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' = 'INFO') {
329
+ if (!this.agentId) return;
330
+ try {
331
+ await this.api.post(`agents/${this.agentId}/logs`, { message, level });
332
+ if (this.debug) {
333
+ const color = level === 'ERROR' ? '\x1b[31m' : level === 'WARN' ? '\x1b[33m' : '\x1b[32m';
334
+ console.log(`${color}[${level}]\x1b[0m ${message}`);
335
+ }
336
+ } catch(e: any) {
337
+ if (this.debug) {
338
+ console.error(`[\x1b[31mSDK ERROR\x1b[0m] Failed to stream log to dashboard: ${e.message}`);
339
+ }
340
+ }
341
+ }
342
+
343
+ private logInternal(msg: string, level: any = 'INFO') {
344
+ if (this.debug) console.log(`[\x1b[35mSDK\x1b[0m] ${msg}`);
345
+ }
346
+ }
347
+
348
+ export default Agent;
package/super_agent.js ADDED
@@ -0,0 +1,151 @@
1
+ /**
2
+ * RentaBots SUPER AGENT (v2.0)
3
+ * Powered by patched SDK v0.4.1
4
+ */
5
+
6
+ const { Agent } = require('./dist/index');
7
+ const fs = require('fs');
8
+ const path = require('path');
9
+
10
+ const API_KEY = process.env.AGENT_API_KEY;
11
+ if (!API_KEY) {
12
+ console.error("❌ AGENT_API_KEY environment variable is required.");
13
+ process.exit(1);
14
+ }
15
+
16
+ // --- STATE MANAGEMENT ---
17
+ const STATE_FILE = path.join(__dirname, 'agent_state.json');
18
+ let state = {
19
+ activeJobs: {}, // { jobId: { status: 'analyzing' | 'coding' | 'done', lastUpdate: ts } }
20
+ earnings: 0
21
+ };
22
+
23
+ function loadState() {
24
+ if (fs.existsSync(STATE_FILE)) {
25
+ try {
26
+ state = JSON.parse(fs.readFileSync(STATE_FILE, 'utf8'));
27
+ } catch(e) { console.error("Failed to load state", e); }
28
+ }
29
+ }
30
+
31
+ function saveState() {
32
+ fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
33
+ }
34
+
35
+ // --- AGENT LOGIC ---
36
+
37
+ async function main() {
38
+ loadState();
39
+
40
+ const agent = new Agent({
41
+ apiKey: API_KEY,
42
+ debug: true,
43
+ capabilities: ['code_generation', 'automation']
44
+ });
45
+
46
+ // 1. Connect
47
+ const connection = await agent.connect();
48
+ if (!connection.success) {
49
+ console.error("❌ Connection failed:", connection.error);
50
+ return;
51
+ }
52
+
53
+ console.log(`🚀 Super Agent "${connection.agent.displayName}" initialized.`);
54
+ console.log(`💰 Total Earnings: $${connection.agent.totalEarnings}`);
55
+
56
+ // 2. Resume Active Jobs
57
+ const activeJobIds = Object.keys(state.activeJobs);
58
+ if (activeJobIds.length > 0) {
59
+ console.log(`🔄 Resuming work on ${activeJobIds.length} jobs...`);
60
+ // In a real app, we'd loop through them and restart the work loop
61
+ activeJobIds.forEach(id => {
62
+ if (state.activeJobs[id].status !== 'done') {
63
+ agent.log(`Resuming Job ${id}...`, 'INFO');
64
+ }
65
+ });
66
+ }
67
+
68
+ // 3. Handle NEW Assignments (Auto-Start)
69
+ agent.onHired(async (job) => {
70
+ console.log(`🎉 HIRED for: ${job.title} ($${job.budget})`);
71
+
72
+ // Init State
73
+ state.activeJobs[job.id] = { status: 'analyzing', startTime: Date.now() };
74
+ saveState();
75
+
76
+ // Step A: Immediate Acknowledgement
77
+ await agent.setTyping(job.id, true);
78
+ await new Promise(r => setTimeout(r, 1500)); // Fake typing delay
79
+ await agent.sendMessage(job.id, `Bid accepted! 🚀\n\nI am analyzing your requirements for "${job.title}".\nI will have a plan ready in a moment.`);
80
+ await agent.setTyping(job.id, false);
81
+
82
+ // Step B: "Work" (Simulated)
83
+ executeJob(agent, job);
84
+ });
85
+
86
+ // 4. Handle Chat Messages
87
+ agent.onMessage(async (msg) => {
88
+ if (msg.sender.type === 'agent') return; // Ignore self
89
+
90
+ console.log(`📩 Msg from ${msg.sender.displayName}: ${msg.content}`);
91
+
92
+ // Simple command handling
93
+ if (msg.content.toLowerCase().includes('status')) {
94
+ const jobState = state.activeJobs[msg.jobId];
95
+ const status = jobState ? jobState.status : 'idle';
96
+ await agent.sendMessage(msg.jobId, `Current Status: **${status.toUpperCase()}**\nI am working on it.`);
97
+ } else {
98
+ await agent.sendMessage(msg.jobId, "Received. I am focusing on the task. Will update you shortly.");
99
+ }
100
+ });
101
+
102
+ // 5. Auto-Bid Loop
103
+ console.log("👀 Starting Auto-Bidder...");
104
+ setInterval(async () => {
105
+ await agent.findAndBid({
106
+ skills: ['Python', 'React', 'Node', 'Automation'],
107
+ minBudget: 10
108
+ });
109
+ }, 60000); // Check every 60s
110
+ }
111
+
112
+ // --- WORKER FUNCTION ---
113
+
114
+ async function executeJob(agent, job) {
115
+ const jobId = job.id;
116
+
117
+ try {
118
+ // Phase 1: Planning
119
+ await agent.log(`[Job ${jobId}] Starting Analysis...`);
120
+ await new Promise(r => setTimeout(r, 5000)); // Simulate thinking
121
+
122
+ await agent.sendMessage(jobId, "📋 **Plan:**\n1. Initialize project structure.\n2. Write core logic.\n3. Run tests.\n4. Deliver.");
123
+
124
+ state.activeJobs[jobId].status = 'coding';
125
+ saveState();
126
+
127
+ // Phase 2: Coding (Simulated)
128
+ await agent.setTyping(jobId, true);
129
+ await new Promise(r => setTimeout(r, 10000)); // Simulate coding
130
+ await agent.setTyping(jobId, false);
131
+
132
+ // Phase 3: Delivery
133
+ // Create a fake repo/file
134
+ const code = "# Generated Code\nprint('Hello World')";
135
+ const deliverableUrl = `https://rentabots.com/fake-repo/${jobId}`;
136
+
137
+ await agent.uploadDeliverable(jobId, deliverableUrl, "Source_Code.zip");
138
+ await agent.sendMessage(jobId, `✅ **Work Complete!**\n\nI have uploaded the deliverables.\nPlease review and mark as complete.`);
139
+
140
+ state.activeJobs[jobId].status = 'done';
141
+ saveState();
142
+
143
+ await agent.log(`[Job ${jobId}] Finished successfully.`);
144
+
145
+ } catch (e) {
146
+ console.error(`Job execution failed: ${e.message}`);
147
+ await agent.sendMessage(jobId, "⚠️ I encountered an error while processing. Retrying...");
148
+ }
149
+ }
150
+
151
+ main().catch(console.error);