hackmate-cli 1.1.0 → 1.1.2
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/Dashboard.js +4 -4
- package/dist/Dashboard.js.map +1 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +10 -0
- package/dist/api.js.map +1 -1
- package/dist/cli.js +11 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/Discover.d.ts +5 -1
- package/dist/commands/Discover.d.ts.map +1 -1
- package/dist/commands/Discover.js +12 -6
- package/dist/commands/Discover.js.map +1 -1
- package/dist/commands/MatchList.d.ts +5 -1
- package/dist/commands/MatchList.d.ts.map +1 -1
- package/dist/commands/MatchList.js +16 -8
- package/dist/commands/MatchList.js.map +1 -1
- package/dist/commands/auth/auth.logic.d.ts.map +1 -1
- package/dist/commands/auth/auth.logic.js +30 -14
- package/dist/commands/auth/auth.logic.js.map +1 -1
- package/dist/commands/auth/login.screen.d.ts.map +1 -1
- package/dist/commands/auth/login.screen.js +4 -1
- package/dist/commands/auth/login.screen.js.map +1 -1
- package/dist/commands/auth/verify.logic.js +1 -1
- package/dist/commands/auth/verify.logic.js.map +1 -1
- package/dist/config.d.ts +3 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/context/AuthContext.d.ts +1 -4
- package/dist/context/AuthContext.d.ts.map +1 -1
- package/dist/context/AuthContext.js +18 -2
- package/dist/context/AuthContext.js.map +1 -1
- package/dist/features/admin/hooks/useAdmin.js +1 -1
- package/dist/features/chat/components/ChatList.d.ts +3 -1
- package/dist/features/chat/components/ChatList.d.ts.map +1 -1
- package/dist/features/chat/components/ChatList.js +7 -2
- package/dist/features/chat/components/ChatList.js.map +1 -1
- package/dist/features/chat/hooks/useChat.d.ts.map +1 -1
- package/dist/features/chat/hooks/useChat.js +26 -20
- package/dist/features/chat/hooks/useChat.js.map +1 -1
- package/dist/features/group/hooks/useGroup.js +1 -1
- package/dist/features/network/hooks/useNetwork.js +1 -1
- package/dist/features/notification/hooks/useNotification.js +1 -1
- package/dist/features/profile/components/index.d.ts +1 -0
- package/dist/features/profile/components/index.d.ts.map +1 -1
- package/dist/features/profile/components/index.js +16 -8
- package/dist/features/profile/components/index.js.map +1 -1
- package/dist/features/profile/hooks/useProfile.d.ts +13 -4
- package/dist/features/profile/hooks/useProfile.d.ts.map +1 -1
- package/dist/features/profile/hooks/useProfile.js +34 -36
- package/dist/features/profile/hooks/useProfile.js.map +1 -1
- package/dist/features/project/hooks/useProject.js +2 -2
- package/dist/features/project/hooks/useProject.js.map +1 -1
- package/dist/services/auth.service.d.ts +14 -0
- package/dist/services/auth.service.d.ts.map +1 -0
- package/dist/services/auth.service.js +19 -0
- package/dist/services/auth.service.js.map +1 -0
- package/dist/services/chat.service.d.ts +14 -0
- package/dist/services/chat.service.d.ts.map +1 -0
- package/dist/services/chat.service.js +22 -0
- package/dist/services/chat.service.js.map +1 -0
- package/dist/services/match.service.d.ts +20 -0
- package/dist/services/match.service.d.ts.map +1 -0
- package/dist/services/match.service.js +28 -0
- package/dist/services/match.service.js.map +1 -0
- package/dist/services/network.service.d.ts +4 -0
- package/dist/services/network.service.d.ts.map +1 -0
- package/dist/services/network.service.js +8 -0
- package/dist/services/network.service.js.map +1 -0
- package/dist/services/user.service.d.ts +7 -0
- package/dist/services/user.service.d.ts.map +1 -0
- package/dist/services/user.service.js +17 -0
- package/dist/services/user.service.js.map +1 -0
- package/dist/shared/hooks/useAsyncRequest.d.ts +1 -1
- package/dist/shared/hooks/useAsyncRequest.d.ts.map +1 -1
- package/dist/shared/hooks/useAsyncRequest.js +15 -11
- package/dist/shared/hooks/useAsyncRequest.js.map +1 -1
- package/dist/tests/Dashboard.test.d.ts +2 -0
- package/dist/tests/Dashboard.test.d.ts.map +1 -0
- package/dist/tests/Dashboard.test.js +30 -0
- package/dist/tests/Dashboard.test.js.map +1 -0
- package/dist/types/index.d.ts +36 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +16 -3
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import api from '../api.js';
|
|
2
|
+
export const AuthService = {
|
|
3
|
+
async login(usernameOrEmail, password) {
|
|
4
|
+
const { data } = await api.post('/auth/login', {
|
|
5
|
+
usernameOrEmail,
|
|
6
|
+
password
|
|
7
|
+
});
|
|
8
|
+
return data;
|
|
9
|
+
},
|
|
10
|
+
async signup(userData) {
|
|
11
|
+
const { data } = await api.post('/auth/signup', userData);
|
|
12
|
+
return data;
|
|
13
|
+
},
|
|
14
|
+
async validateToken() {
|
|
15
|
+
const { data } = await api.get('/auth/me');
|
|
16
|
+
return data;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=auth.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,WAAW,CAAC;AAQ5B,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,KAAK,CAAC,KAAK,CAAC,eAAuB,EAAE,QAAgB;QACjD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAe,aAAa,EAAE;YACzD,eAAe;YACf,QAAQ;SACX,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAA8C;QACvD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAe,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,aAAa;QACf,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAO,UAAU,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { User } from '../types/index.js';
|
|
2
|
+
export interface Message {
|
|
3
|
+
_id: string;
|
|
4
|
+
sender: User;
|
|
5
|
+
content: string;
|
|
6
|
+
timestamp: Date;
|
|
7
|
+
}
|
|
8
|
+
export declare const ChatService: {
|
|
9
|
+
getHistory(targetId: string): Promise<Message[]>;
|
|
10
|
+
getGroupHistory(groupId: string): Promise<Message[]>;
|
|
11
|
+
sendMessage(targetUsername: string, content: string): Promise<Message>;
|
|
12
|
+
getConversations(): Promise<any[]>;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=chat.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.service.d.ts","sourceRoot":"","sources":["../../src/services/chat.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,MAAM,WAAW,OAAO;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED,eAAO,MAAM,WAAW;yBACO,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;6BAOvB,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;gCAKxB,MAAM,WAAW,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;wBAKlD,OAAO,CAAC,GAAG,EAAE,CAAC;CAI3C,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import api from '../api.js';
|
|
2
|
+
export const ChatService = {
|
|
3
|
+
async getHistory(targetId) {
|
|
4
|
+
// Note: Logic used ID, not username for history fetching in hook?
|
|
5
|
+
// Hook used `api.get(/chat/history/${data.user.id})`. So it takes ID.
|
|
6
|
+
const { data } = await api.get(`/chat/history/${targetId}`);
|
|
7
|
+
return data;
|
|
8
|
+
},
|
|
9
|
+
async getGroupHistory(groupId) {
|
|
10
|
+
const { data } = await api.get(`/chat/history/group/${groupId}`);
|
|
11
|
+
return data;
|
|
12
|
+
},
|
|
13
|
+
async sendMessage(targetUsername, content) {
|
|
14
|
+
const { data } = await api.post('/chat/send', { targetUsername, content });
|
|
15
|
+
return data;
|
|
16
|
+
},
|
|
17
|
+
async getConversations() {
|
|
18
|
+
const { data } = await api.get('/chat/conversations');
|
|
19
|
+
return data;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=chat.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../src/services/chat.service.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,WAAW,CAAC;AAU5B,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC7B,kEAAkE;QAClE,sEAAsE;QACtE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAY,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe;QACjC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAY,uBAAuB,OAAO,EAAE,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,cAAsB,EAAE,OAAe;QACrD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAU,YAAY,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,gBAAgB;QAClB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { User } from '../types/index.js';
|
|
2
|
+
export interface MatchResult {
|
|
3
|
+
userId: User;
|
|
4
|
+
score: number;
|
|
5
|
+
matchReasons: string[];
|
|
6
|
+
compatibilityPercentage: number;
|
|
7
|
+
fullName?: string;
|
|
8
|
+
bio?: string;
|
|
9
|
+
stack?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface MatchFilters {
|
|
12
|
+
city?: string;
|
|
13
|
+
stack?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const MatchService: {
|
|
16
|
+
getTopMatches(limit?: number, filters?: MatchFilters): Promise<MatchResult[]>;
|
|
17
|
+
discoverMatches(filters?: MatchFilters): Promise<MatchResult[]>;
|
|
18
|
+
performDetailsExchange(targetUserId: string): Promise<void>;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=match.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match.service.d.ts","sourceRoot":"","sources":["../../src/services/match.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAW,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,uBAAuB,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY;0BACM,MAAM,YAAiB,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;8BAQvD,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;yCAY1B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGpE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import api from '../api.js';
|
|
2
|
+
export const MatchService = {
|
|
3
|
+
async getTopMatches(limit = 10, filters) {
|
|
4
|
+
let query = `/match/top?limit=${limit}`;
|
|
5
|
+
if (filters?.city)
|
|
6
|
+
query += `&city=${encodeURIComponent(filters.city)}`;
|
|
7
|
+
if (filters?.stack)
|
|
8
|
+
query += `&stack=${encodeURIComponent(filters.stack)}`;
|
|
9
|
+
const { data } = await api.get(query);
|
|
10
|
+
return data;
|
|
11
|
+
},
|
|
12
|
+
async discoverMatches(filters) {
|
|
13
|
+
let query = '/match/discover?'; // Ensure ? is present if params added, but if empty query string is fine
|
|
14
|
+
// Better logic:
|
|
15
|
+
const params = new URLSearchParams();
|
|
16
|
+
if (filters?.city)
|
|
17
|
+
params.append('city', filters.city);
|
|
18
|
+
if (filters?.stack)
|
|
19
|
+
params.append('stack', filters.stack);
|
|
20
|
+
const queryString = params.toString() ? `?${params.toString()}` : '';
|
|
21
|
+
const { data } = await api.get('/match/discover' + queryString);
|
|
22
|
+
return data;
|
|
23
|
+
},
|
|
24
|
+
async performDetailsExchange(targetUserId) {
|
|
25
|
+
await api.post('/match/exchange', { targetUserId });
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=match.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match.service.js","sourceRoot":"","sources":["../../src/services/match.service.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,WAAW,CAAC;AAkB5B,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,EAAE,OAAsB;QAC1D,IAAI,KAAK,GAAG,oBAAoB,KAAK,EAAE,CAAC;QACxC,IAAI,OAAO,EAAE,IAAI;YAAE,KAAK,IAAI,SAAS,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,IAAI,OAAO,EAAE,KAAK;YAAE,KAAK,IAAI,UAAU,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAgB,KAAK,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAsB;QACxC,IAAI,KAAK,GAAG,kBAAkB,CAAC,CAAC,yEAAyE;QACzG,gBAAgB;QAChB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,EAAE,IAAI;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,OAAO,EAAE,KAAK;YAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAE1D,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAgB,iBAAiB,GAAG,WAAW,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,YAAoB;QAC7C,MAAM,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IACxD,CAAC;CACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.service.d.ts","sourceRoot":"","sources":["../../src/services/network.service.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;wCACmB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKnE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import api from '../api.js';
|
|
2
|
+
export const NetworkService = {
|
|
3
|
+
async sendConnectionRequest(targetUserId) {
|
|
4
|
+
await api.post('/network/request', { targetUserId });
|
|
5
|
+
},
|
|
6
|
+
// Add other network methods as needed (accept, reject, list, etc.)
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=network.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.service.js","sourceRoot":"","sources":["../../src/services/network.service.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,WAAW,CAAC;AAE5B,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,KAAK,CAAC,qBAAqB,CAAC,YAAoB;QAC5C,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,mEAAmE;CACtE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Profile } from '../types/index.js';
|
|
2
|
+
export declare const UserService: {
|
|
3
|
+
getProfile(username?: string): Promise<Profile>;
|
|
4
|
+
updateProfile(profileData: Partial<Profile>): Promise<Profile>;
|
|
5
|
+
createProfile(profileData: Partial<Profile>): Promise<Profile>;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=user.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../src/services/user.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,eAAO,MAAM,WAAW;0BACQ,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;+BAMpB,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;+BAKnC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAIvE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import api from '../api.js';
|
|
2
|
+
export const UserService = {
|
|
3
|
+
async getProfile(username) {
|
|
4
|
+
const url = username ? `/profile/${username}` : '/profile/me';
|
|
5
|
+
const { data } = await api.get(url);
|
|
6
|
+
return data;
|
|
7
|
+
},
|
|
8
|
+
async updateProfile(profileData) {
|
|
9
|
+
const { data } = await api.put('/profile/me', profileData);
|
|
10
|
+
return data;
|
|
11
|
+
},
|
|
12
|
+
async createProfile(profileData) {
|
|
13
|
+
const { data } = await api.post('/profile', profileData);
|
|
14
|
+
return data;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=user.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../src/services/user.service.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,WAAW,CAAC;AAG5B,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,KAAK,CAAC,UAAU,CAAC,QAAiB;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;QAC9D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAU,GAAG,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,WAA6B;QAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAU,aAAa,EAAE,WAAW,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,WAA6B;QAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAU,UAAU,EAAE,WAAW,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAC"}
|
|
@@ -4,6 +4,6 @@ interface UseAsyncRequestResult<T> {
|
|
|
4
4
|
error: string | null;
|
|
5
5
|
refetch: () => Promise<void>;
|
|
6
6
|
}
|
|
7
|
-
export declare const useAsyncRequest: <T>(
|
|
7
|
+
export declare const useAsyncRequest: <T>(source: string | (() => Promise<T>) | null, method?: "get" | "post", body?: any) => UseAsyncRequestResult<T>;
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=useAsyncRequest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAsyncRequest.d.ts","sourceRoot":"","sources":["../../../src/shared/hooks/useAsyncRequest.ts"],"names":[],"mappings":"AAKA,UAAU,qBAAqB,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,eAAO,MAAM,eAAe,GAAI,CAAC,EAC7B,
|
|
1
|
+
{"version":3,"file":"useAsyncRequest.d.ts","sourceRoot":"","sources":["../../../src/shared/hooks/useAsyncRequest.ts"],"names":[],"mappings":"AAKA,UAAU,qBAAqB,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,eAAO,MAAM,eAAe,GAAI,CAAC,EAC7B,QAAQ,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAC1C,SAAQ,KAAK,GAAG,MAAc,EAC9B,OAAO,GAAG,KACX,qBAAqB,CAAC,CAAC,CAoDzB,CAAC"}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback } from 'react';
|
|
2
2
|
import api from '../../api.js';
|
|
3
3
|
import { useAuth } from '../../context/index.js';
|
|
4
|
-
|
|
5
|
-
export const useAsyncRequest = (url, method = 'get', body) => {
|
|
4
|
+
export const useAsyncRequest = (source, method = 'get', body) => {
|
|
6
5
|
const [data, setData] = useState(null);
|
|
7
6
|
const [loading, setLoading] = useState(true);
|
|
8
7
|
const [error, setError] = useState(null);
|
|
9
8
|
const { isAuthenticated, isLoading: authLoading } = useAuth();
|
|
10
|
-
const { exit } = useApp();
|
|
11
9
|
const fetchData = useCallback(async () => {
|
|
12
|
-
if (!
|
|
10
|
+
if (!source) {
|
|
13
11
|
setLoading(false);
|
|
14
12
|
return;
|
|
15
13
|
}
|
|
@@ -18,20 +16,26 @@ export const useAsyncRequest = (url, method = 'get', body) => {
|
|
|
18
16
|
if (!isAuthenticated) {
|
|
19
17
|
setError('Please login first using "hackmate auth login"');
|
|
20
18
|
setLoading(false);
|
|
21
|
-
// Optional: Auto-exit? Let's leave it to the UI component to decide via useEffect
|
|
22
19
|
return;
|
|
23
20
|
}
|
|
24
21
|
setLoading(true);
|
|
25
22
|
setError(null);
|
|
26
23
|
try {
|
|
27
|
-
let
|
|
28
|
-
if (
|
|
29
|
-
|
|
24
|
+
let result;
|
|
25
|
+
if (typeof source === 'function') {
|
|
26
|
+
result = await source();
|
|
30
27
|
}
|
|
31
28
|
else {
|
|
32
|
-
res
|
|
29
|
+
let res;
|
|
30
|
+
if (method === 'get') {
|
|
31
|
+
res = await api.get(source);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
res = await api.post(source, body);
|
|
35
|
+
}
|
|
36
|
+
result = res.data;
|
|
33
37
|
}
|
|
34
|
-
setData(
|
|
38
|
+
setData(result);
|
|
35
39
|
}
|
|
36
40
|
catch (err) {
|
|
37
41
|
let msg = err.response?.data?.message || err.message || 'Request failed';
|
|
@@ -43,7 +47,7 @@ export const useAsyncRequest = (url, method = 'get', body) => {
|
|
|
43
47
|
finally {
|
|
44
48
|
setLoading(false);
|
|
45
49
|
}
|
|
46
|
-
}, [
|
|
50
|
+
}, [source, method, body, isAuthenticated, authLoading]);
|
|
47
51
|
useEffect(() => {
|
|
48
52
|
fetchData();
|
|
49
53
|
}, [fetchData]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAsyncRequest.js","sourceRoot":"","sources":["../../../src/shared/hooks/useAsyncRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"useAsyncRequest.js","sourceRoot":"","sources":["../../../src/shared/hooks/useAsyncRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAUjD,MAAM,CAAC,MAAM,eAAe,GAAG,CAC3B,MAA0C,EAC1C,SAAyB,KAAK,EAC9B,IAAU,EACc,EAAE;IAC1B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAW,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC;IAE9D,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,WAAW;YAAE,OAAO;QAExB,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,QAAQ,CAAC,gDAAgD,CAAC,CAAC;YAC3D,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;QACX,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACD,IAAI,MAAS,CAAC;YACd,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC/B,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACJ,IAAI,GAAG,CAAC;gBACR,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;oBACnB,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,MAAO,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACJ,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAO,EAAE,IAAI,CAAC,CAAC;gBACxC,CAAC;gBACD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;YACtB,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,gBAAgB,CAAC;YACzE,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACnC,GAAG,GAAG,gDAAgD,CAAC;YAC3D,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;gBAAS,CAAC;YACP,UAAU,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACX,SAAS,EAAE,CAAC;IAChB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACxD,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard.test.d.ts","sourceRoot":"","sources":["../../src/tests/Dashboard.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { render } from 'ink-testing-library';
|
|
3
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
4
|
+
import { Dashboard } from '../Dashboard.js';
|
|
5
|
+
// Mock explicit dependencies that might crash in test env
|
|
6
|
+
vi.mock('../context/index.js', () => ({
|
|
7
|
+
useAuth: () => ({
|
|
8
|
+
isAuthenticated: false,
|
|
9
|
+
isLoading: false,
|
|
10
|
+
user: null,
|
|
11
|
+
login: vi.fn(),
|
|
12
|
+
logout: vi.fn(),
|
|
13
|
+
}),
|
|
14
|
+
}));
|
|
15
|
+
vi.mock('ink', async () => {
|
|
16
|
+
const actual = await vi.importActual('ink');
|
|
17
|
+
return {
|
|
18
|
+
...actual,
|
|
19
|
+
useApp: () => ({ exit: vi.fn() }),
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
describe('Dashboard Component', () => {
|
|
23
|
+
it('renders the welcome message when not authenticated', () => {
|
|
24
|
+
const { lastFrame } = render(_jsx(Dashboard, {}));
|
|
25
|
+
expect(lastFrame()).toContain('HackMate Terminal');
|
|
26
|
+
expect(lastFrame()).toContain('Login');
|
|
27
|
+
expect(lastFrame()).toContain('Exit');
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=Dashboard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard.test.js","sourceRoot":"","sources":["../../src/tests/Dashboard.test.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,0DAA0D;AAC1D,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACZ,eAAe,EAAE,KAAK;QACtB,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;KAClB,CAAC;CACL,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;IACtB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO;QACH,GAAG,MAAM;QACT,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;KACpC,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,SAAS,KAAG,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface User {
|
|
2
|
+
_id: string;
|
|
3
|
+
username: string;
|
|
4
|
+
email: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Profile {
|
|
7
|
+
_id: string;
|
|
8
|
+
user: string | User;
|
|
9
|
+
bio?: string;
|
|
10
|
+
website?: string;
|
|
11
|
+
github?: string;
|
|
12
|
+
twitter?: string;
|
|
13
|
+
linkedin?: string;
|
|
14
|
+
skills: string[];
|
|
15
|
+
stack?: string[];
|
|
16
|
+
interests?: string[];
|
|
17
|
+
hobbies?: string[];
|
|
18
|
+
interestedIn?: string[];
|
|
19
|
+
role?: string;
|
|
20
|
+
company?: string;
|
|
21
|
+
location?: string;
|
|
22
|
+
city?: string;
|
|
23
|
+
country?: string;
|
|
24
|
+
intent?: string;
|
|
25
|
+
dateOfBirth?: string | Date;
|
|
26
|
+
}
|
|
27
|
+
export interface Project {
|
|
28
|
+
_id: string;
|
|
29
|
+
title: string;
|
|
30
|
+
description: string;
|
|
31
|
+
owner: string | User;
|
|
32
|
+
tags: string[];
|
|
33
|
+
status: 'open' | 'closed' | 'wip';
|
|
34
|
+
members: (string | User)[];
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,OAAO;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,OAAO,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hackmate-cli",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "HackMate CLI - Terminal-based social network for developers and hackers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -49,10 +49,23 @@
|
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@types/node": "^20.0.0",
|
|
51
51
|
"@types/react": "^18.0.0",
|
|
52
|
+
"@typescript-eslint/eslint-plugin": "^8.53.1",
|
|
53
|
+
"@typescript-eslint/parser": "^8.53.1",
|
|
54
|
+
"eslint": "^9.39.2",
|
|
55
|
+
"eslint-config-prettier": "^10.1.8",
|
|
56
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
57
|
+
"eslint-plugin-react": "^7.37.5",
|
|
58
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
59
|
+
"eslint-plugin-react-refresh": "^0.4.26",
|
|
60
|
+
"globals": "^17.0.0",
|
|
61
|
+
"ink-testing-library": "^4.0.0",
|
|
62
|
+
"prettier": "^3.8.0",
|
|
52
63
|
"tsx": "^4.0.0",
|
|
53
|
-
"typescript": "^5.9.3"
|
|
64
|
+
"typescript": "^5.9.3",
|
|
65
|
+
"typescript-eslint": "^8.53.1",
|
|
66
|
+
"vitest": "^4.0.17"
|
|
54
67
|
},
|
|
55
68
|
"engines": {
|
|
56
69
|
"node": ">=20"
|
|
57
70
|
}
|
|
58
|
-
}
|
|
71
|
+
}
|