@oxyhq/services 0.0.85 → 0.1.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/README.md +165 -81
- package/dist/backend/auth.d.ts +37 -0
- package/dist/backend/auth.js +81 -0
- package/dist/backend/index.d.ts +12 -0
- package/dist/backend/index.js +20 -0
- package/dist/backend/karma.d.ts +45 -0
- package/dist/backend/karma.js +83 -0
- package/dist/backend/users.d.ts +39 -0
- package/dist/backend/users.js +87 -0
- package/dist/backend/wallet.d.ts +29 -0
- package/dist/backend/wallet.js +68 -0
- package/dist/bundle.js +2 -0
- package/dist/bundle.js.LICENSE.txt +1 -0
- package/dist/frontend/context/OxyContext.d.ts +20 -0
- package/dist/frontend/context/OxyContext.js +97 -0
- package/dist/frontend/hooks/useAuth.d.ts +19 -0
- package/dist/frontend/hooks/useAuth.js +234 -0
- package/dist/frontend/hooks/useKarma.d.ts +27 -0
- package/dist/frontend/hooks/useKarma.js +187 -0
- package/dist/frontend/hooks/useUser.d.ts +13 -0
- package/dist/frontend/hooks/useUser.js +136 -0
- package/dist/frontend/hooks/useWallet.d.ts +14 -0
- package/dist/frontend/hooks/useWallet.js +174 -0
- package/dist/frontend/index.d.ts +6 -0
- package/dist/frontend/index.js +14 -0
- package/dist/index.d.ts +3 -7
- package/dist/index.js +33 -6
- package/dist/shared/api-client.d.ts +15 -0
- package/dist/shared/api-client.js +197 -0
- package/dist/shared/types.d.ts +135 -0
- package/dist/shared/types.js +2 -0
- package/package.json +43 -57
- package/dist/assets/dot-icon.d.ts +0 -3
- package/dist/assets/dot-icon.d.ts.map +0 -1
- package/dist/assets/dot-icon.js +0 -6
- package/dist/assets/verified-icon.d.ts +0 -3
- package/dist/assets/verified-icon.d.ts.map +0 -1
- package/dist/assets/verified-icon.js +0 -10
- package/dist/components/assets/oxy-logo.d.ts +0 -3
- package/dist/components/assets/oxy-logo.d.ts.map +0 -1
- package/dist/components/assets/oxy-logo.js +0 -30
- package/dist/components/auth/AccountSwitcherModal.d.ts +0 -7
- package/dist/components/auth/AccountSwitcherModal.d.ts.map +0 -1
- package/dist/components/auth/AccountSwitcherModal.js +0 -91
- package/dist/components/auth/SessionOwnerButton.d.ts +0 -3
- package/dist/components/auth/SessionOwnerButton.d.ts.map +0 -1
- package/dist/components/auth/SessionOwnerButton.js +0 -35
- package/dist/components/auth/SignInButton.d.ts +0 -8
- package/dist/components/auth/SignInButton.d.ts.map +0 -1
- package/dist/components/auth/SignInButton.js +0 -15
- package/dist/components/auth/styles/account-switcher-modal.module.css +0 -29
- package/dist/components/auth/styles/account-switcher-modal.module.css.map +0 -1
- package/dist/components/auth/styles/oavatar.module.css +0 -34
- package/dist/components/auth/styles/oavatar.module.css.map +0 -1
- package/dist/components/auth/styles/session-owner-modal.module.css +0 -35
- package/dist/components/auth/styles/session-owner-modal.module.css.map +0 -1
- package/dist/components/auth/styles/sign-in-button.module.css +0 -30
- package/dist/components/auth/styles/sign-in-button.module.css.map +0 -1
- package/dist/components/elements/button/components/button.d.ts +0 -7
- package/dist/components/elements/button/components/button.d.ts.map +0 -1
- package/dist/components/elements/button/components/button.js +0 -6
- package/dist/components/elements/button/components/styles/button.module.css +0 -25
- package/dist/components/elements/button/components/styles/button.module.css.map +0 -1
- package/dist/components/elements/button/index.d.ts +0 -2
- package/dist/components/elements/button/index.d.ts.map +0 -1
- package/dist/components/elements/button/index.js +0 -1
- package/dist/components/elements/ellipsis-wrapper/components/EllipsisWrapper.d.ts +0 -5
- package/dist/components/elements/ellipsis-wrapper/components/EllipsisWrapper.d.ts.map +0 -1
- package/dist/components/elements/ellipsis-wrapper/components/EllipsisWrapper.js +0 -4
- package/dist/components/elements/ellipsis-wrapper/components/ellipsis-wrapper.d.ts +0 -5
- package/dist/components/elements/ellipsis-wrapper/components/ellipsis-wrapper.d.ts.map +0 -1
- package/dist/components/elements/ellipsis-wrapper/components/ellipsis-wrapper.js +0 -4
- package/dist/components/elements/ellipsis-wrapper/components/styles/ellipses-wrapper.module.css +0 -11
- package/dist/components/elements/ellipsis-wrapper/components/styles/ellipses-wrapper.module.css.map +0 -1
- package/dist/components/elements/ellipsis-wrapper/index.d.ts +0 -2
- package/dist/components/elements/ellipsis-wrapper/index.d.ts.map +0 -1
- package/dist/components/elements/ellipsis-wrapper/index.js +0 -1
- package/dist/components/elements/modal/components/confirmation-modal.d.ts +0 -12
- package/dist/components/elements/modal/components/confirmation-modal.d.ts.map +0 -1
- package/dist/components/elements/modal/components/confirmation-modal.js +0 -21
- package/dist/components/elements/modal/components/modal.d.ts +0 -13
- package/dist/components/elements/modal/components/modal.d.ts.map +0 -1
- package/dist/components/elements/modal/components/modal.js +0 -111
- package/dist/components/elements/modal/components/styles/confirmation-modal.module.css +0 -105
- package/dist/components/elements/modal/components/styles/confirmation-modal.module.css.map +0 -1
- package/dist/components/elements/modal/components/styles/modal.module.css +0 -10
- package/dist/components/elements/modal/components/styles/modal.module.css.map +0 -1
- package/dist/components/elements/modal/hooks/use-track-position.d.ts +0 -5
- package/dist/components/elements/modal/hooks/use-track-position.d.ts.map +0 -1
- package/dist/components/elements/modal/hooks/use-track-position.js +0 -35
- package/dist/components/elements/modal/index.d.ts +0 -4
- package/dist/components/elements/modal/index.d.ts.map +0 -1
- package/dist/components/elements/modal/index.js +0 -3
- package/dist/config/index.d.ts +0 -21
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -7
- package/dist/features/profile/components/avatar.d.ts +0 -10
- package/dist/features/profile/components/avatar.d.ts.map +0 -1
- package/dist/features/profile/components/avatar.js +0 -7
- package/dist/features/profile/components/styles/avatar.module.css +0 -15
- package/dist/features/profile/components/styles/avatar.module.css.map +0 -1
- package/dist/features/profile/components/styles/user-name.module.css +0 -18
- package/dist/features/profile/components/styles/user-name.module.css.map +0 -1
- package/dist/features/profile/components/styles/user-username.module.css +0 -6
- package/dist/features/profile/components/styles/user-username.module.css.map +0 -1
- package/dist/features/profile/components/user-name.d.ts +0 -7
- package/dist/features/profile/components/user-name.d.ts.map +0 -1
- package/dist/features/profile/components/user-name.js +0 -8
- package/dist/features/profile/components/user-username.d.ts +0 -5
- package/dist/features/profile/components/user-username.d.ts.map +0 -1
- package/dist/features/profile/components/user-username.js +0 -7
- package/dist/features/profile/index.d.ts +0 -4
- package/dist/features/profile/index.d.ts.map +0 -1
- package/dist/features/profile/index.js +0 -3
- package/dist/hooks/get-user.d.ts +0 -2
- package/dist/hooks/get-user.d.ts.map +0 -1
- package/dist/hooks/get-user.js +0 -31
- package/dist/hooks/getClientKey.d.ts +0 -2
- package/dist/hooks/getClientKey.d.ts.map +0 -1
- package/dist/hooks/getClientKey.js +0 -19
- package/dist/hooks/getUserById.d.ts +0 -11
- package/dist/hooks/getUserById.d.ts.map +0 -1
- package/dist/hooks/getUserById.js +0 -31
- package/dist/hooks/use-user.d.ts +0 -14
- package/dist/hooks/use-user.d.ts.map +0 -1
- package/dist/hooks/use-user.js +0 -8
- package/dist/hooks/useCrossDomainStorage.d.ts +0 -6
- package/dist/hooks/useCrossDomainStorage.d.ts.map +0 -1
- package/dist/hooks/useCrossDomainStorage.js +0 -24
- package/dist/hooks/useOxySession.d.ts +0 -30
- package/dist/hooks/useOxySession.d.ts.map +0 -1
- package/dist/hooks/useOxySession.js +0 -64
- package/dist/index.css +0 -5
- package/dist/index.css.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/interfaces/index.d.ts +0 -10
- package/dist/interfaces/index.d.ts.map +0 -1
- package/dist/interfaces/index.js +0 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -1
- package/dist/utils/cn.d.ts +0 -3
- package/dist/utils/cn.d.ts.map +0 -1
- package/dist/utils/cn.js +0 -5
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useKarma = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const api_client_1 = require("../../shared/api-client");
|
|
6
|
+
const OxyContext_1 = require("../context/OxyContext");
|
|
7
|
+
const useKarma = (options) => {
|
|
8
|
+
const context = (0, OxyContext_1.useOxyContext)();
|
|
9
|
+
const apiUrl = (options === null || options === void 0 ? void 0 : options.apiUrl) || context.apiUrl;
|
|
10
|
+
const getToken = (options === null || options === void 0 ? void 0 : options.getToken) || context.getToken;
|
|
11
|
+
if (!apiUrl) {
|
|
12
|
+
throw new Error('API URL is required. Provide it either through options or OxyProvider.');
|
|
13
|
+
}
|
|
14
|
+
const [apiClient] = (0, react_1.useState)(() => new api_client_1.ApiClient({
|
|
15
|
+
apiUrl,
|
|
16
|
+
}));
|
|
17
|
+
// Get a user's karma total
|
|
18
|
+
const getUserKarma = (0, react_1.useCallback)(async (userId) => {
|
|
19
|
+
try {
|
|
20
|
+
return await apiClient.request({
|
|
21
|
+
method: 'GET',
|
|
22
|
+
url: `/karma/${userId}/total`,
|
|
23
|
+
headers: getToken ? {
|
|
24
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
25
|
+
} : undefined
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return {
|
|
30
|
+
success: false,
|
|
31
|
+
error: error.message || 'Failed to get karma'
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}, [apiClient, getToken]);
|
|
35
|
+
// Get a user's karma history
|
|
36
|
+
const getUserKarmaHistory = (0, react_1.useCallback)(async (userId, limit, offset) => {
|
|
37
|
+
try {
|
|
38
|
+
if (!getToken) {
|
|
39
|
+
return {
|
|
40
|
+
success: false,
|
|
41
|
+
error: 'Authentication token is required'
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const params = {};
|
|
45
|
+
if (limit !== undefined)
|
|
46
|
+
params.limit = limit.toString();
|
|
47
|
+
if (offset !== undefined)
|
|
48
|
+
params.offset = offset.toString();
|
|
49
|
+
return await apiClient.request({
|
|
50
|
+
method: 'GET',
|
|
51
|
+
url: `/karma/${userId}/history`,
|
|
52
|
+
params,
|
|
53
|
+
headers: {
|
|
54
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
error: error.message || 'Failed to get karma history'
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}, [apiClient, getToken]);
|
|
65
|
+
// Award karma to a user
|
|
66
|
+
const awardKarma = (0, react_1.useCallback)(async (karmaAction) => {
|
|
67
|
+
try {
|
|
68
|
+
if (!getToken) {
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
error: 'Authentication token is required'
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return await apiClient.request({
|
|
75
|
+
method: 'POST',
|
|
76
|
+
url: '/karma/award',
|
|
77
|
+
data: karmaAction,
|
|
78
|
+
headers: {
|
|
79
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
error: error.message || 'Failed to award karma'
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}, [apiClient, getToken]);
|
|
90
|
+
// Deduct karma from a user
|
|
91
|
+
const deductKarma = (0, react_1.useCallback)(async (karmaAction) => {
|
|
92
|
+
try {
|
|
93
|
+
if (!getToken) {
|
|
94
|
+
return {
|
|
95
|
+
success: false,
|
|
96
|
+
error: 'Authentication token is required'
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return await apiClient.request({
|
|
100
|
+
method: 'POST',
|
|
101
|
+
url: '/karma/deduct',
|
|
102
|
+
data: karmaAction,
|
|
103
|
+
headers: {
|
|
104
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
return {
|
|
110
|
+
success: false,
|
|
111
|
+
error: error.message || 'Failed to deduct karma'
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}, [apiClient, getToken]);
|
|
115
|
+
// Get karma leaderboard
|
|
116
|
+
const getKarmaLeaderboard = (0, react_1.useCallback)(async (limit = 10, offset = 0) => {
|
|
117
|
+
try {
|
|
118
|
+
return await apiClient.request({
|
|
119
|
+
method: 'GET',
|
|
120
|
+
url: '/karma/leaderboard',
|
|
121
|
+
params: { limit, offset },
|
|
122
|
+
headers: getToken ? {
|
|
123
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
124
|
+
} : undefined
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: error.message || 'Failed to get karma leaderboard'
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}, [apiClient, getToken]);
|
|
134
|
+
// Get karma rules
|
|
135
|
+
const getKarmaRules = (0, react_1.useCallback)(async () => {
|
|
136
|
+
try {
|
|
137
|
+
return await apiClient.request({
|
|
138
|
+
method: 'GET',
|
|
139
|
+
url: '/karma/rules',
|
|
140
|
+
headers: getToken ? {
|
|
141
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
142
|
+
} : undefined
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
error: error.message || 'Failed to get karma rules'
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}, [apiClient, getToken]);
|
|
152
|
+
// Admin only: Create or update karma rule
|
|
153
|
+
const createOrUpdateKarmaRule = (0, react_1.useCallback)(async (rule) => {
|
|
154
|
+
try {
|
|
155
|
+
if (!getToken) {
|
|
156
|
+
return {
|
|
157
|
+
success: false,
|
|
158
|
+
error: 'Authentication token is required'
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return await apiClient.request({
|
|
162
|
+
method: 'POST',
|
|
163
|
+
url: '/karma/rules',
|
|
164
|
+
data: rule,
|
|
165
|
+
headers: {
|
|
166
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
return {
|
|
172
|
+
success: false,
|
|
173
|
+
error: error.message || 'Failed to create or update karma rule'
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}, [apiClient, getToken]);
|
|
177
|
+
return {
|
|
178
|
+
getUserKarma,
|
|
179
|
+
getUserKarmaHistory,
|
|
180
|
+
awardKarma,
|
|
181
|
+
deductKarma,
|
|
182
|
+
getKarmaLeaderboard,
|
|
183
|
+
getKarmaRules,
|
|
184
|
+
createOrUpdateKarmaRule
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
exports.useKarma = useKarma;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ApiResponse, UserProfile, PrivacySettings } from '../../shared/types';
|
|
2
|
+
interface UseUserOptions {
|
|
3
|
+
apiUrl?: string;
|
|
4
|
+
getToken?: () => string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare const useUser: (options?: UseUserOptions) => {
|
|
7
|
+
getUserById: (userId: string) => Promise<ApiResponse<UserProfile>>;
|
|
8
|
+
updateUserProfile: (userId: string, profileData: Partial<UserProfile>) => Promise<ApiResponse<UserProfile>>;
|
|
9
|
+
getPrivacySettings: (userId: string) => Promise<ApiResponse<PrivacySettings>>;
|
|
10
|
+
updatePrivacySettings: (userId: string, settings: Partial<PrivacySettings>) => Promise<ApiResponse<PrivacySettings>>;
|
|
11
|
+
searchUsers: (query: string, limit?: number) => Promise<ApiResponse<UserProfile[]>>;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useUser = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const api_client_1 = require("../../shared/api-client");
|
|
6
|
+
const OxyContext_1 = require("../context/OxyContext");
|
|
7
|
+
const useUser = (options) => {
|
|
8
|
+
const context = (0, OxyContext_1.useOxyContext)();
|
|
9
|
+
const apiUrl = (options === null || options === void 0 ? void 0 : options.apiUrl) || context.apiUrl;
|
|
10
|
+
const getToken = (options === null || options === void 0 ? void 0 : options.getToken) || context.getToken;
|
|
11
|
+
if (!apiUrl) {
|
|
12
|
+
throw new Error('API URL is required. Provide it either through options or OxyProvider.');
|
|
13
|
+
}
|
|
14
|
+
const [apiClient] = (0, react_1.useState)(() => new api_client_1.ApiClient({
|
|
15
|
+
apiUrl,
|
|
16
|
+
}));
|
|
17
|
+
// Get a user's profile by ID
|
|
18
|
+
const getUserById = (0, react_1.useCallback)(async (userId) => {
|
|
19
|
+
try {
|
|
20
|
+
return await apiClient.request({
|
|
21
|
+
method: 'GET',
|
|
22
|
+
url: `/users/${userId}`,
|
|
23
|
+
headers: getToken ? {
|
|
24
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
25
|
+
} : undefined
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return {
|
|
30
|
+
success: false,
|
|
31
|
+
error: error.message || 'Failed to get user profile'
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}, [apiClient, getToken]);
|
|
35
|
+
// Update a user's profile
|
|
36
|
+
const updateUserProfile = (0, react_1.useCallback)(async (userId, profileData) => {
|
|
37
|
+
try {
|
|
38
|
+
if (!getToken) {
|
|
39
|
+
return {
|
|
40
|
+
success: false,
|
|
41
|
+
error: 'Authentication token is required'
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return await apiClient.request({
|
|
45
|
+
method: 'PATCH',
|
|
46
|
+
url: `/users/${userId}`,
|
|
47
|
+
data: profileData,
|
|
48
|
+
headers: {
|
|
49
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return {
|
|
55
|
+
success: false,
|
|
56
|
+
error: error.message || 'Failed to update user profile'
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}, [apiClient, getToken]);
|
|
60
|
+
// Get a user's privacy settings
|
|
61
|
+
const getPrivacySettings = (0, react_1.useCallback)(async (userId) => {
|
|
62
|
+
try {
|
|
63
|
+
if (!getToken) {
|
|
64
|
+
return {
|
|
65
|
+
success: false,
|
|
66
|
+
error: 'Authentication token is required'
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return await apiClient.request({
|
|
70
|
+
method: 'GET',
|
|
71
|
+
url: `/privacy/${userId}`,
|
|
72
|
+
headers: {
|
|
73
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
error: error.message || 'Failed to get privacy settings'
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}, [apiClient, getToken]);
|
|
84
|
+
// Update a user's privacy settings
|
|
85
|
+
const updatePrivacySettings = (0, react_1.useCallback)(async (userId, settings) => {
|
|
86
|
+
try {
|
|
87
|
+
if (!getToken) {
|
|
88
|
+
return {
|
|
89
|
+
success: false,
|
|
90
|
+
error: 'Authentication token is required'
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return await apiClient.request({
|
|
94
|
+
method: 'PATCH',
|
|
95
|
+
url: `/privacy/${userId}`,
|
|
96
|
+
data: settings,
|
|
97
|
+
headers: {
|
|
98
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
return {
|
|
104
|
+
success: false,
|
|
105
|
+
error: error.message || 'Failed to update privacy settings'
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}, [apiClient, getToken]);
|
|
109
|
+
// Search for users
|
|
110
|
+
const searchUsers = (0, react_1.useCallback)(async (query, limit = 10) => {
|
|
111
|
+
try {
|
|
112
|
+
return await apiClient.request({
|
|
113
|
+
method: 'GET',
|
|
114
|
+
url: '/users/search',
|
|
115
|
+
params: { query, limit },
|
|
116
|
+
headers: getToken ? {
|
|
117
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
118
|
+
} : undefined
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
return {
|
|
123
|
+
success: false,
|
|
124
|
+
error: error.message || 'Failed to search users'
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}, [apiClient, getToken]);
|
|
128
|
+
return {
|
|
129
|
+
getUserById,
|
|
130
|
+
updateUserProfile,
|
|
131
|
+
getPrivacySettings,
|
|
132
|
+
updatePrivacySettings,
|
|
133
|
+
searchUsers
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
exports.useUser = useUser;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ApiResponse, WalletInfo, TransactionInfo, TransferRequest, PurchaseRequest, WithdrawalRequest } from '../../shared/types';
|
|
2
|
+
interface UseWalletOptions {
|
|
3
|
+
apiUrl?: string;
|
|
4
|
+
getToken?: () => string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare const useWallet: (options?: UseWalletOptions) => {
|
|
7
|
+
getWallet: (userId: string) => Promise<ApiResponse<WalletInfo>>;
|
|
8
|
+
getTransactionHistory: (userId: string, limit?: number, offset?: number) => Promise<ApiResponse<TransactionInfo[]>>;
|
|
9
|
+
transferFunds: (transferRequest: TransferRequest) => Promise<ApiResponse<TransactionInfo>>;
|
|
10
|
+
processPurchase: (purchaseRequest: PurchaseRequest) => Promise<ApiResponse<TransactionInfo>>;
|
|
11
|
+
requestWithdrawal: (withdrawalRequest: WithdrawalRequest) => Promise<ApiResponse<TransactionInfo>>;
|
|
12
|
+
getTransaction: (transactionId: string) => Promise<ApiResponse<TransactionInfo>>;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useWallet = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const api_client_1 = require("../../shared/api-client");
|
|
6
|
+
const OxyContext_1 = require("../context/OxyContext");
|
|
7
|
+
const useWallet = (options) => {
|
|
8
|
+
const context = (0, OxyContext_1.useOxyContext)();
|
|
9
|
+
const apiUrl = (options === null || options === void 0 ? void 0 : options.apiUrl) || context.apiUrl;
|
|
10
|
+
const getToken = (options === null || options === void 0 ? void 0 : options.getToken) || context.getToken;
|
|
11
|
+
if (!apiUrl) {
|
|
12
|
+
throw new Error('API URL is required. Provide it either through options or OxyProvider.');
|
|
13
|
+
}
|
|
14
|
+
const [apiClient] = (0, react_1.useState)(() => new api_client_1.ApiClient({
|
|
15
|
+
apiUrl,
|
|
16
|
+
}));
|
|
17
|
+
// Get wallet information for the current user
|
|
18
|
+
const getWallet = (0, react_1.useCallback)(async (userId) => {
|
|
19
|
+
try {
|
|
20
|
+
if (!getToken) {
|
|
21
|
+
return {
|
|
22
|
+
success: false,
|
|
23
|
+
error: 'Authentication token is required'
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return await apiClient.request({
|
|
27
|
+
method: 'GET',
|
|
28
|
+
url: `/wallet/${userId}`,
|
|
29
|
+
headers: {
|
|
30
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
error: error.message || 'Failed to get wallet information'
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}, [apiClient, getToken]);
|
|
41
|
+
// Get transaction history
|
|
42
|
+
const getTransactionHistory = (0, react_1.useCallback)(async (userId, limit = 10, offset = 0) => {
|
|
43
|
+
try {
|
|
44
|
+
if (!getToken) {
|
|
45
|
+
return {
|
|
46
|
+
success: false,
|
|
47
|
+
error: 'Authentication token is required'
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return await apiClient.request({
|
|
51
|
+
method: 'GET',
|
|
52
|
+
url: `/wallet/transactions/${userId}`,
|
|
53
|
+
params: { limit, offset },
|
|
54
|
+
headers: {
|
|
55
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
error: error.message || 'Failed to get transaction history'
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}, [apiClient, getToken]);
|
|
66
|
+
// Transfer funds to another user
|
|
67
|
+
const transferFunds = (0, react_1.useCallback)(async (transferRequest) => {
|
|
68
|
+
try {
|
|
69
|
+
if (!getToken) {
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
error: 'Authentication token is required'
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return await apiClient.request({
|
|
76
|
+
method: 'POST',
|
|
77
|
+
url: '/wallet/transfer',
|
|
78
|
+
data: transferRequest,
|
|
79
|
+
headers: {
|
|
80
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
return {
|
|
86
|
+
success: false,
|
|
87
|
+
error: error.message || 'Failed to transfer funds'
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}, [apiClient, getToken]);
|
|
91
|
+
// Process a purchase
|
|
92
|
+
const processPurchase = (0, react_1.useCallback)(async (purchaseRequest) => {
|
|
93
|
+
try {
|
|
94
|
+
if (!getToken) {
|
|
95
|
+
return {
|
|
96
|
+
success: false,
|
|
97
|
+
error: 'Authentication token is required'
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return await apiClient.request({
|
|
101
|
+
method: 'POST',
|
|
102
|
+
url: '/wallet/purchase',
|
|
103
|
+
data: purchaseRequest,
|
|
104
|
+
headers: {
|
|
105
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
return {
|
|
111
|
+
success: false,
|
|
112
|
+
error: error.message || 'Failed to process purchase'
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}, [apiClient, getToken]);
|
|
116
|
+
// Request a withdrawal
|
|
117
|
+
const requestWithdrawal = (0, react_1.useCallback)(async (withdrawalRequest) => {
|
|
118
|
+
try {
|
|
119
|
+
if (!getToken) {
|
|
120
|
+
return {
|
|
121
|
+
success: false,
|
|
122
|
+
error: 'Authentication token is required'
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return await apiClient.request({
|
|
126
|
+
method: 'POST',
|
|
127
|
+
url: '/wallet/withdraw',
|
|
128
|
+
data: withdrawalRequest,
|
|
129
|
+
headers: {
|
|
130
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return {
|
|
136
|
+
success: false,
|
|
137
|
+
error: error.message || 'Failed to request withdrawal'
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}, [apiClient, getToken]);
|
|
141
|
+
// Get a specific transaction
|
|
142
|
+
const getTransaction = (0, react_1.useCallback)(async (transactionId) => {
|
|
143
|
+
try {
|
|
144
|
+
if (!getToken) {
|
|
145
|
+
return {
|
|
146
|
+
success: false,
|
|
147
|
+
error: 'Authentication token is required'
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return await apiClient.request({
|
|
151
|
+
method: 'GET',
|
|
152
|
+
url: `/wallet/transaction/${transactionId}`,
|
|
153
|
+
headers: {
|
|
154
|
+
Authorization: `Bearer ${getToken() || ''}`
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
return {
|
|
160
|
+
success: false,
|
|
161
|
+
error: error.message || 'Failed to get transaction'
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}, [apiClient, getToken]);
|
|
165
|
+
return {
|
|
166
|
+
getWallet,
|
|
167
|
+
getTransactionHistory,
|
|
168
|
+
transferFunds,
|
|
169
|
+
processPurchase,
|
|
170
|
+
requestWithdrawal,
|
|
171
|
+
getTransaction
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
exports.useWallet = useWallet;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { useAuth } from './hooks/useAuth';
|
|
2
|
+
import { useUser } from './hooks/useUser';
|
|
3
|
+
import { useKarma } from './hooks/useKarma';
|
|
4
|
+
import { useWallet } from './hooks/useWallet';
|
|
5
|
+
import { OxyProvider, useOxyContext } from './context/OxyContext';
|
|
6
|
+
export { useAuth, useUser, useKarma, useWallet, OxyProvider, useOxyContext };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useOxyContext = exports.OxyProvider = exports.useWallet = exports.useKarma = exports.useUser = exports.useAuth = void 0;
|
|
4
|
+
const useAuth_1 = require("./hooks/useAuth");
|
|
5
|
+
Object.defineProperty(exports, "useAuth", { enumerable: true, get: function () { return useAuth_1.useAuth; } });
|
|
6
|
+
const useUser_1 = require("./hooks/useUser");
|
|
7
|
+
Object.defineProperty(exports, "useUser", { enumerable: true, get: function () { return useUser_1.useUser; } });
|
|
8
|
+
const useKarma_1 = require("./hooks/useKarma");
|
|
9
|
+
Object.defineProperty(exports, "useKarma", { enumerable: true, get: function () { return useKarma_1.useKarma; } });
|
|
10
|
+
const useWallet_1 = require("./hooks/useWallet");
|
|
11
|
+
Object.defineProperty(exports, "useWallet", { enumerable: true, get: function () { return useWallet_1.useWallet; } });
|
|
12
|
+
const OxyContext_1 = require("./context/OxyContext");
|
|
13
|
+
Object.defineProperty(exports, "OxyProvider", { enumerable: true, get: function () { return OxyContext_1.OxyProvider; } });
|
|
14
|
+
Object.defineProperty(exports, "useOxyContext", { enumerable: true, get: function () { return OxyContext_1.useOxyContext; } });
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { AccountSwitcherModal } from "./components/auth/AccountSwitcherModal";
|
|
5
|
-
import { SessionOwnerButton } from "./components/auth/SessionOwnerButton";
|
|
6
|
-
export { useOxySession, getUserById, SignInButton, AccountSwitcherModal, SessionOwnerButton, };
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
1
|
+
export * from './shared/types';
|
|
2
|
+
export { OxyAuthBackend, OxyUsersBackend, OxyKarmaBackend, OxyWalletBackend } from './backend';
|
|
3
|
+
export { useAuth, useUser, useKarma, useWallet, OxyProvider, useOxyContext } from './frontend';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.useOxyContext = exports.OxyProvider = exports.useWallet = exports.useKarma = exports.useUser = exports.useAuth = exports.OxyWalletBackend = exports.OxyKarmaBackend = exports.OxyUsersBackend = exports.OxyAuthBackend = void 0;
|
|
18
|
+
// Export types
|
|
19
|
+
__exportStar(require("./shared/types"), exports);
|
|
20
|
+
// Export backend services
|
|
21
|
+
var backend_1 = require("./backend");
|
|
22
|
+
Object.defineProperty(exports, "OxyAuthBackend", { enumerable: true, get: function () { return backend_1.OxyAuthBackend; } });
|
|
23
|
+
Object.defineProperty(exports, "OxyUsersBackend", { enumerable: true, get: function () { return backend_1.OxyUsersBackend; } });
|
|
24
|
+
Object.defineProperty(exports, "OxyKarmaBackend", { enumerable: true, get: function () { return backend_1.OxyKarmaBackend; } });
|
|
25
|
+
Object.defineProperty(exports, "OxyWalletBackend", { enumerable: true, get: function () { return backend_1.OxyWalletBackend; } });
|
|
26
|
+
// Export frontend hooks and context
|
|
27
|
+
var frontend_1 = require("./frontend");
|
|
28
|
+
Object.defineProperty(exports, "useAuth", { enumerable: true, get: function () { return frontend_1.useAuth; } });
|
|
29
|
+
Object.defineProperty(exports, "useUser", { enumerable: true, get: function () { return frontend_1.useUser; } });
|
|
30
|
+
Object.defineProperty(exports, "useKarma", { enumerable: true, get: function () { return frontend_1.useKarma; } });
|
|
31
|
+
Object.defineProperty(exports, "useWallet", { enumerable: true, get: function () { return frontend_1.useWallet; } });
|
|
32
|
+
Object.defineProperty(exports, "OxyProvider", { enumerable: true, get: function () { return frontend_1.OxyProvider; } });
|
|
33
|
+
Object.defineProperty(exports, "useOxyContext", { enumerable: true, get: function () { return frontend_1.useOxyContext; } });
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AxiosRequestConfig } from 'axios';
|
|
2
|
+
import { ApiResponse, AuthTokens, OxyAuthConfig } from './types';
|
|
3
|
+
export declare class ApiClient {
|
|
4
|
+
private axiosInstance;
|
|
5
|
+
private config;
|
|
6
|
+
private tokenRefreshTimeout?;
|
|
7
|
+
constructor(config: OxyAuthConfig);
|
|
8
|
+
request<T>(config: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
9
|
+
private getAccessToken;
|
|
10
|
+
private getRefreshToken;
|
|
11
|
+
storeTokens(tokens: AuthTokens): void;
|
|
12
|
+
clearTokens(): void;
|
|
13
|
+
private refreshToken;
|
|
14
|
+
private setupTokenRefresh;
|
|
15
|
+
}
|