@explorins/pers-sdk 2.0.7 → 2.0.11
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 +113 -59
- package/dist/analytics/index.d.ts +0 -2
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/models/index.d.ts +1 -10
- package/dist/analytics/models/index.d.ts.map +1 -1
- package/dist/analytics.cjs +44 -29
- package/dist/analytics.cjs.map +1 -1
- package/dist/analytics.js +45 -2
- package/dist/analytics.js.map +1 -1
- package/dist/business/index.d.ts +0 -1
- package/dist/business/index.d.ts.map +1 -1
- package/dist/business.cjs +7 -774
- package/dist/business.cjs.map +1 -1
- package/dist/business.js +3 -751
- package/dist/business.js.map +1 -1
- package/dist/campaign/index.d.ts +0 -1
- package/dist/campaign/index.d.ts.map +1 -1
- package/dist/campaign.cjs +429 -29
- package/dist/campaign.cjs.map +1 -1
- package/dist/campaign.js +431 -3
- package/dist/campaign.js.map +1 -1
- package/dist/chunks/business-membership-service-8KC_qRj7.cjs +756 -0
- package/dist/chunks/business-membership-service-8KC_qRj7.cjs.map +1 -0
- package/dist/chunks/business-membership-service-D6vaVQTR.js +751 -0
- package/dist/chunks/business-membership-service-D6vaVQTR.js.map +1 -0
- package/dist/chunks/{web3-chain-service-BeBjALg2.cjs → index-B-g2JPVK.cjs} +1 -220
- package/dist/chunks/index-B-g2JPVK.cjs.map +1 -0
- package/dist/chunks/{web3-chain-service-DKHCnHQX.js → index-CKm_V5XE.js} +2 -219
- package/dist/chunks/index-CKm_V5XE.js.map +1 -0
- package/dist/chunks/payment-service-Bkw7ZXev.cjs +214 -0
- package/dist/chunks/payment-service-Bkw7ZXev.cjs.map +1 -0
- package/dist/chunks/payment-service-IvM6rryM.js +211 -0
- package/dist/chunks/payment-service-IvM6rryM.js.map +1 -0
- package/dist/chunks/{pers-sdk-JIExM712.js → pers-sdk-DYnIZvcx.js} +12 -291
- package/dist/chunks/pers-sdk-DYnIZvcx.js.map +1 -0
- package/dist/chunks/{pers-sdk-h-uoLpBx.cjs → pers-sdk-Dr9W8stD.cjs} +38 -318
- package/dist/chunks/pers-sdk-Dr9W8stD.cjs.map +1 -0
- package/dist/chunks/redemption-service-D-hBqh42.js +339 -0
- package/dist/chunks/redemption-service-D-hBqh42.js.map +1 -0
- package/dist/chunks/redemption-service-rMB6T2W5.cjs +342 -0
- package/dist/chunks/redemption-service-rMB6T2W5.cjs.map +1 -0
- package/dist/chunks/tenant-service-CsRA3O2V.js +163 -0
- package/dist/chunks/tenant-service-CsRA3O2V.js.map +1 -0
- package/dist/chunks/tenant-service-fj-pkXTw.cjs +166 -0
- package/dist/chunks/tenant-service-fj-pkXTw.cjs.map +1 -0
- package/dist/chunks/{transaction-request.builder-DrqTWcyC.cjs → transaction-request.builder-BwWmfHXm.cjs} +6 -6
- package/dist/chunks/{transaction-request.builder-DrqTWcyC.cjs.map → transaction-request.builder-BwWmfHXm.cjs.map} +1 -1
- package/dist/chunks/{transaction-request.builder-DltmruUC.js → transaction-request.builder-C1FPWmYN.js} +6 -6
- package/dist/chunks/{transaction-request.builder-DltmruUC.js.map → transaction-request.builder-C1FPWmYN.js.map} +1 -1
- package/dist/chunks/web3-chain-service-D68-0WaW.cjs +224 -0
- package/dist/chunks/web3-chain-service-D68-0WaW.cjs.map +1 -0
- package/dist/chunks/web3-chain-service-DuvxmKSj.js +221 -0
- package/dist/chunks/web3-chain-service-DuvxmKSj.js.map +1 -0
- package/dist/chunks/{explorer.utils-Cx3wrqAj.cjs → web3-manager-C_cFaMCm.cjs} +411 -144
- package/dist/chunks/web3-manager-C_cFaMCm.cjs.map +1 -0
- package/dist/chunks/{explorer.utils-BkS3k8hX.js → web3-manager-OExwBWB7.js} +412 -146
- package/dist/chunks/web3-manager-OExwBWB7.js.map +1 -0
- package/dist/core.cjs +18 -21
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +10 -12
- package/dist/core.js.map +1 -1
- package/dist/donation/index.d.ts +0 -1
- package/dist/donation/index.d.ts.map +1 -1
- package/dist/donation.cjs +48 -29
- package/dist/donation.cjs.map +1 -1
- package/dist/donation.js +50 -3
- package/dist/donation.js.map +1 -1
- package/dist/index.cjs +43 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -15
- package/dist/index.js.map +1 -1
- package/dist/managers/analytics-manager.d.ts +1 -1
- package/dist/managers/index.d.ts +0 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/web3-manager.d.ts +1 -1
- package/dist/managers/web3-manager.d.ts.map +1 -1
- package/dist/node.cjs +10 -13
- package/dist/node.cjs.map +1 -1
- package/dist/node.js +10 -13
- package/dist/node.js.map +1 -1
- package/dist/package.json +4 -10
- package/dist/payment/index.d.ts +0 -1
- package/dist/payment/index.d.ts.map +1 -1
- package/dist/payment.cjs +5 -232
- package/dist/payment.cjs.map +1 -1
- package/dist/payment.js +3 -210
- package/dist/payment.js.map +1 -1
- package/dist/pers-sdk.d.ts +1 -13
- package/dist/pers-sdk.d.ts.map +1 -1
- package/dist/redemption/index.d.ts +0 -1
- package/dist/redemption/index.d.ts.map +1 -1
- package/dist/redemption/services/redemption-service.d.ts +1 -2
- package/dist/redemption/services/redemption-service.d.ts.map +1 -1
- package/dist/redemption.cjs +5 -360
- package/dist/redemption.cjs.map +1 -1
- package/dist/redemption.js +3 -338
- package/dist/redemption.js.map +1 -1
- package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts +15 -21
- package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts.map +1 -1
- package/dist/tenant/index.d.ts +0 -1
- package/dist/tenant/index.d.ts.map +1 -1
- package/dist/tenant.cjs +5 -184
- package/dist/tenant.cjs.map +1 -1
- package/dist/tenant.js +3 -162
- package/dist/tenant.js.map +1 -1
- package/dist/token/index.d.ts +0 -1
- package/dist/token/index.d.ts.map +1 -1
- package/dist/token.cjs +1 -25
- package/dist/token.cjs.map +1 -1
- package/dist/token.js +1 -1
- package/dist/transaction/models/transaction-request.builder.d.ts +4 -4
- package/dist/transaction/models/transaction-request.builder.d.ts.map +1 -1
- package/dist/transaction.cjs +1 -1
- package/dist/transaction.js +1 -1
- package/dist/user/index.d.ts +0 -1
- package/dist/user/index.d.ts.map +1 -1
- package/dist/user-status/index.d.ts +0 -1
- package/dist/user-status/index.d.ts.map +1 -1
- package/dist/user-status.cjs +0 -25
- package/dist/user-status.cjs.map +1 -1
- package/dist/user-status.js +0 -1
- package/dist/user-status.js.map +1 -1
- package/dist/user.cjs +209 -29
- package/dist/user.cjs.map +1 -1
- package/dist/user.js +211 -3
- package/dist/user.js.map +1 -1
- package/dist/web3/index.d.ts +1 -0
- package/dist/web3/index.d.ts.map +1 -1
- package/dist/web3-chain/index.d.ts +0 -1
- package/dist/web3-chain/index.d.ts.map +1 -1
- package/dist/web3-chain.cjs +14 -29
- package/dist/web3-chain.cjs.map +1 -1
- package/dist/web3-chain.js +16 -3
- package/dist/web3-chain.js.map +1 -1
- package/dist/web3-manager.cjs +13 -0
- package/dist/web3-manager.cjs.map +1 -0
- package/dist/web3-manager.js +7 -0
- package/dist/web3-manager.js.map +1 -0
- package/dist/web3.cjs +10 -6
- package/dist/web3.cjs.map +1 -1
- package/dist/web3.js +4 -1
- package/dist/web3.js.map +1 -1
- package/package.json +4 -10
- package/dist/chunks/analytics-service-CitlimKJ.cjs +0 -49
- package/dist/chunks/analytics-service-CitlimKJ.cjs.map +0 -1
- package/dist/chunks/analytics-service-CxyrOwel.js +0 -46
- package/dist/chunks/analytics-service-CxyrOwel.js.map +0 -1
- package/dist/chunks/campaign-service-CdEz0jpP.cjs +0 -435
- package/dist/chunks/campaign-service-CdEz0jpP.cjs.map +0 -1
- package/dist/chunks/campaign-service-DrTAqFZM.js +0 -432
- package/dist/chunks/campaign-service-DrTAqFZM.js.map +0 -1
- package/dist/chunks/donation-service--6cnTvWq.cjs +0 -54
- package/dist/chunks/donation-service--6cnTvWq.cjs.map +0 -1
- package/dist/chunks/donation-service-xiXZ2Eto.js +0 -51
- package/dist/chunks/donation-service-xiXZ2Eto.js.map +0 -1
- package/dist/chunks/explorer.utils-BkS3k8hX.js.map +0 -1
- package/dist/chunks/explorer.utils-Cx3wrqAj.cjs.map +0 -1
- package/dist/chunks/index-BtDNXaFq.js +0 -13
- package/dist/chunks/index-BtDNXaFq.js.map +0 -1
- package/dist/chunks/index-CMk3Aqkk.cjs +0 -15
- package/dist/chunks/index-CMk3Aqkk.cjs.map +0 -1
- package/dist/chunks/pers-sdk-JIExM712.js.map +0 -1
- package/dist/chunks/pers-sdk-h-uoLpBx.cjs.map +0 -1
- package/dist/chunks/user-service-BGP3SZpk.js +0 -212
- package/dist/chunks/user-service-BGP3SZpk.js.map +0 -1
- package/dist/chunks/user-service-gITOx4qj.cjs +0 -215
- package/dist/chunks/user-service-gITOx4qj.cjs.map +0 -1
- package/dist/chunks/web3-chain-service-BeBjALg2.cjs.map +0 -1
- package/dist/chunks/web3-chain-service-DKHCnHQX.js.map +0 -1
package/dist/business.cjs
CHANGED
|
@@ -1,780 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
|
|
3
|
+
var businessMembershipService = require('./chunks/business-membership-service-8KC_qRj7.cjs');
|
|
4
|
+
require('./chunks/pagination-utils-B2jRHMSO.cjs');
|
|
5
|
+
require('@explorins/pers-shared');
|
|
5
6
|
|
|
6
|
-
/**
|
|
7
|
-
* Platform-Agnostic Business API Client
|
|
8
|
-
*
|
|
9
|
-
* Updated to match the actual RESTful endpoints:
|
|
10
|
-
* - /businesses for business operations
|
|
11
|
-
* - /business-types for business type operations (separate controller)
|
|
12
|
-
*/
|
|
13
|
-
class BusinessApi {
|
|
14
|
-
constructor(apiClient) {
|
|
15
|
-
this.apiClient = apiClient;
|
|
16
|
-
this.basePath = '/businesses';
|
|
17
|
-
this.businessTypesPath = '/businesses/types';
|
|
18
|
-
}
|
|
19
|
-
// ==========================================
|
|
20
|
-
// 🌐 BUSINESS TYPES MANAGEMENT
|
|
21
|
-
// ==========================================
|
|
22
|
-
/**
|
|
23
|
-
* Get all business types (project key required)
|
|
24
|
-
*
|
|
25
|
-
* Endpoint: GET /business-types
|
|
26
|
-
* Auth: @ApiSecurity('projectKey')
|
|
27
|
-
*
|
|
28
|
-
* @param options Pagination options (page, limit, sortBy, sortOrder)
|
|
29
|
-
* @returns Paginated response with business types
|
|
30
|
-
*/
|
|
31
|
-
async getBusinessTypes(options) {
|
|
32
|
-
const params = paginationUtils.buildPaginationParams(options);
|
|
33
|
-
const response = await this.apiClient.get(`${this.businessTypesPath}?${params.toString()}`);
|
|
34
|
-
return paginationUtils.normalizeToPaginated(response);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* ADMIN: Create business type
|
|
38
|
-
*
|
|
39
|
-
* Endpoint: POST /business-types
|
|
40
|
-
* Auth: @TenantAdmin()
|
|
41
|
-
*/
|
|
42
|
-
async createBusinessType(dto) {
|
|
43
|
-
return this.apiClient.post(this.businessTypesPath, dto);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* ADMIN: Update business type
|
|
47
|
-
*
|
|
48
|
-
* Endpoint: PUT /business-types
|
|
49
|
-
* Auth: @TenantAdmin()
|
|
50
|
-
*/
|
|
51
|
-
async updateBusinessType(dto) {
|
|
52
|
-
return this.apiClient.put(this.businessTypesPath, dto);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* ADMIN: Delete business type
|
|
56
|
-
*
|
|
57
|
-
* Endpoint: DELETE /business-types/{id}
|
|
58
|
-
* Auth: @TenantAdmin()
|
|
59
|
-
*/
|
|
60
|
-
async deleteBusinessType(id) {
|
|
61
|
-
return this.apiClient.delete(`${this.businessTypesPath}/${id}`);
|
|
62
|
-
}
|
|
63
|
-
// ==========================================
|
|
64
|
-
// 🏢 BUSINESS MANAGEMENT
|
|
65
|
-
// ==========================================
|
|
66
|
-
/**
|
|
67
|
-
* Get current business info (business authentication required)
|
|
68
|
-
*
|
|
69
|
-
* Endpoint: GET /businesses/me
|
|
70
|
-
* Auth: @Business()
|
|
71
|
-
*/
|
|
72
|
-
async getCurrentBusiness() {
|
|
73
|
-
return this.apiClient.get(`${this.basePath}/me`);
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Get all businesses with role-based filtering and pagination
|
|
77
|
-
*
|
|
78
|
-
* Endpoint: GET /businesses?active={boolean}&sanitize={mode}&page={number}&limit={number}
|
|
79
|
-
* Auth: @ApiSecurity('projectKey') (enhanced with role-based filtering)
|
|
80
|
-
*
|
|
81
|
-
* Note:
|
|
82
|
-
* - Project API Key users: Active businesses only (automatically filtered)
|
|
83
|
-
* - Admin JWT users: Full access with all query parameters
|
|
84
|
-
*
|
|
85
|
-
* @param options - Filter and pagination options
|
|
86
|
-
* @returns Paginated list of businesses
|
|
87
|
-
*
|
|
88
|
-
* @example
|
|
89
|
-
* ```typescript
|
|
90
|
-
* // Get first page of active businesses
|
|
91
|
-
* const page1 = await businessApi.getBusinesses({ active: true });
|
|
92
|
-
*
|
|
93
|
-
* // Get all businesses (admin only) with pagination
|
|
94
|
-
* const page2 = await businessApi.getBusinesses({
|
|
95
|
-
* page: 2,
|
|
96
|
-
* limit: 25,
|
|
97
|
-
* sanitize: 'soft'
|
|
98
|
-
* });
|
|
99
|
-
* ```
|
|
100
|
-
*/
|
|
101
|
-
async getBusinesses(options) {
|
|
102
|
-
const params = paginationUtils.buildPaginationParams(options);
|
|
103
|
-
if (options?.active !== undefined) {
|
|
104
|
-
params.set('active', String(options.active));
|
|
105
|
-
}
|
|
106
|
-
if (options?.sanitize) {
|
|
107
|
-
params.set('sanitize', options.sanitize);
|
|
108
|
-
}
|
|
109
|
-
const response = await this.apiClient.get(`${this.basePath}?${params.toString()}`);
|
|
110
|
-
return paginationUtils.normalizeToPaginated(response);
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Get business by ID
|
|
114
|
-
*
|
|
115
|
-
* Endpoint: GET /businesses/{id}
|
|
116
|
-
* Auth: @ApiSecurity('projectKey')
|
|
117
|
-
*/
|
|
118
|
-
async getBusinessById(businessId) {
|
|
119
|
-
return this.apiClient.get(`${this.basePath}/${businessId}`);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Get business by account address
|
|
123
|
-
*
|
|
124
|
-
* Endpoint: GET /businesses/account/{accountAddress}
|
|
125
|
-
* Auth: @ApiSecurity('projectKey')
|
|
126
|
-
*/
|
|
127
|
-
async getBusinessByAccount(accountAddress) {
|
|
128
|
-
return this.apiClient.get(`${this.basePath}/account/${accountAddress}`);
|
|
129
|
-
}
|
|
130
|
-
// ==========================================
|
|
131
|
-
// 🔧 ADMIN OPERATIONS
|
|
132
|
-
// ==========================================
|
|
133
|
-
/**
|
|
134
|
-
* ADMIN: Create business
|
|
135
|
-
*
|
|
136
|
-
* Endpoint: POST /businesses
|
|
137
|
-
* Auth: @TenantAdmin()
|
|
138
|
-
* Returns: BusinessApiKeyDTO | BusinessTokenBalancesDTO
|
|
139
|
-
*/
|
|
140
|
-
async createBusiness(dto) {
|
|
141
|
-
return this.apiClient.post(this.basePath, dto);
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* ADMIN: Create business by display name (convenience method)
|
|
145
|
-
*/
|
|
146
|
-
async createBusinessByDisplayName(displayName) {
|
|
147
|
-
const dto = {
|
|
148
|
-
displayName,
|
|
149
|
-
// Add other required fields based on BusinessCreateRequestDTO structure
|
|
150
|
-
};
|
|
151
|
-
return this.createBusiness(dto);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* ADMIN: Create businesses from URL
|
|
155
|
-
*
|
|
156
|
-
* Endpoint: POST /businesses/bulk/url
|
|
157
|
-
* Auth: @TenantAdmin()
|
|
158
|
-
*/
|
|
159
|
-
async createBusinessesFromUrl(url) {
|
|
160
|
-
return this.apiClient.post(`${this.basePath}/bulk/url`, { url });
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* ADMIN: Update business
|
|
164
|
-
*
|
|
165
|
-
* Endpoint: PUT /businesses/{id}
|
|
166
|
-
* Auth: @TenantAdmin()
|
|
167
|
-
*/
|
|
168
|
-
async updateBusiness(id, businessData) {
|
|
169
|
-
return this.apiClient.put(`${this.basePath}/${id}`, businessData);
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* ADMIN: Toggle business active status
|
|
173
|
-
*
|
|
174
|
-
* Endpoint: PUT /businesses/{id}/status
|
|
175
|
-
* Auth: @TenantAdmin()
|
|
176
|
-
*/
|
|
177
|
-
async toggleBusinessStatus(id, dto) {
|
|
178
|
-
return this.apiClient.put(`${this.basePath}/${id}/status`, dto);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
7
|
|
|
182
|
-
/**
|
|
183
|
-
* Business Membership API Client
|
|
184
|
-
*
|
|
185
|
-
* Platform-agnostic API client for managing business memberships.
|
|
186
|
-
* Handles user access to businesses with role-based permissions.
|
|
187
|
-
*
|
|
188
|
-
* Base Path: /businesses/:businessId/members
|
|
189
|
-
*
|
|
190
|
-
* Required Headers:
|
|
191
|
-
* - Authorization: Bearer <business_jwt_token>
|
|
192
|
-
* - X-Project-Key: <project_key>
|
|
193
|
-
*
|
|
194
|
-
* @example
|
|
195
|
-
* ```typescript
|
|
196
|
-
* const membershipApi = new BusinessMembershipApi(apiClient);
|
|
197
|
-
*
|
|
198
|
-
* // List all members of a business
|
|
199
|
-
* const members = await membershipApi.getMembers('business-123');
|
|
200
|
-
*
|
|
201
|
-
* // Add a new member
|
|
202
|
-
* const newMember = await membershipApi.addMember('business-123', {
|
|
203
|
-
* userId: 'user-456',
|
|
204
|
-
* role: MembershipRole.EDITOR
|
|
205
|
-
* });
|
|
206
|
-
* ```
|
|
207
|
-
*
|
|
208
|
-
* @version 2.0.0
|
|
209
|
-
*/
|
|
210
|
-
class BusinessMembershipApi {
|
|
211
|
-
constructor(apiClient) {
|
|
212
|
-
this.apiClient = apiClient;
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Build the membership endpoint path for a business
|
|
216
|
-
*/
|
|
217
|
-
getMembersPath(businessId) {
|
|
218
|
-
return `/businesses/${businessId}/members`;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Build the membership endpoint path for a specific member
|
|
222
|
-
*/
|
|
223
|
-
getMemberPath(businessId, userId) {
|
|
224
|
-
return `/businesses/${businessId}/members/${userId}`;
|
|
225
|
-
}
|
|
226
|
-
// ==========================================
|
|
227
|
-
// LIST MEMBERS
|
|
228
|
-
// ==========================================
|
|
229
|
-
/**
|
|
230
|
-
* List all members of a business with pagination
|
|
231
|
-
*
|
|
232
|
-
* Endpoint: GET /businesses/:businessId/members
|
|
233
|
-
* Min Role: VIEWER (any member can view)
|
|
234
|
-
*
|
|
235
|
-
* @param businessId - The business UUID
|
|
236
|
-
* @param options - Pagination and filter options
|
|
237
|
-
* @returns Paginated array of business memberships with user and role details
|
|
238
|
-
*
|
|
239
|
-
* @throws {AuthenticationError} 401 - Not authenticated
|
|
240
|
-
* @throws {PersApiError} 403 - businessId in path doesn't match JWT's business
|
|
241
|
-
*
|
|
242
|
-
* @example
|
|
243
|
-
* ```typescript
|
|
244
|
-
* // Get first page of members
|
|
245
|
-
* const page1 = await membershipApi.getMembers('business-123');
|
|
246
|
-
* page1.data.forEach(m => console.log(`${m.userId}: ${m.role}`));
|
|
247
|
-
*
|
|
248
|
-
* // Filter by role
|
|
249
|
-
* const admins = await membershipApi.getMembers('business-123', {
|
|
250
|
-
* role: MembershipRole.ADMIN,
|
|
251
|
-
* page: 1,
|
|
252
|
-
* limit: 50
|
|
253
|
-
* });
|
|
254
|
-
*
|
|
255
|
-
* // Paginate through all members
|
|
256
|
-
* const page2 = await membershipApi.getMembers('business-123', { page: 2 });
|
|
257
|
-
* ```
|
|
258
|
-
*/
|
|
259
|
-
async getMembers(businessId, options) {
|
|
260
|
-
const params = paginationUtils.buildPaginationParams(options);
|
|
261
|
-
if (options?.role) {
|
|
262
|
-
params.set('role', options.role);
|
|
263
|
-
}
|
|
264
|
-
const response = await this.apiClient.get(`${this.getMembersPath(businessId)}?${params.toString()}`);
|
|
265
|
-
return paginationUtils.normalizeToPaginated(response);
|
|
266
|
-
}
|
|
267
|
-
// ==========================================
|
|
268
|
-
// ADD MEMBER
|
|
269
|
-
// ==========================================
|
|
270
|
-
/**
|
|
271
|
-
* Add a member to a business
|
|
272
|
-
*
|
|
273
|
-
* Endpoint: POST /businesses/:businessId/members
|
|
274
|
-
* Min Role: ADMIN
|
|
275
|
-
*
|
|
276
|
-
* @param businessId - The business UUID
|
|
277
|
-
* @param request - The add member request with userId and optional role
|
|
278
|
-
* @returns The created business membership
|
|
279
|
-
*
|
|
280
|
-
* @throws {AuthenticationError} 401 - Not authenticated
|
|
281
|
-
* @throws {PersApiError} 403 - Insufficient role (requires ADMIN or higher)
|
|
282
|
-
* @throws {PersApiError} 404 - User not found
|
|
283
|
-
* @throws {PersApiError} 409 - User is already a member
|
|
284
|
-
*
|
|
285
|
-
* @example
|
|
286
|
-
* ```typescript
|
|
287
|
-
* const newMember = await membershipApi.addMember('business-123', {
|
|
288
|
-
* userId: 'user-456',
|
|
289
|
-
* role: MembershipRole.EDITOR
|
|
290
|
-
* });
|
|
291
|
-
* ```
|
|
292
|
-
*/
|
|
293
|
-
async addMember(businessId, request) {
|
|
294
|
-
return this.apiClient.post(this.getMembersPath(businessId), request);
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Add a member to a business with explicit parameters
|
|
298
|
-
*
|
|
299
|
-
* Convenience method that constructs the request DTO internally.
|
|
300
|
-
*
|
|
301
|
-
* @param businessId - The business UUID
|
|
302
|
-
* @param userId - The user UUID to add
|
|
303
|
-
* @param role - The role to assign (defaults to VIEWER)
|
|
304
|
-
* @returns The created business membership
|
|
305
|
-
*
|
|
306
|
-
* @example
|
|
307
|
-
* ```typescript
|
|
308
|
-
* const member = await membershipApi.addMemberByUserId(
|
|
309
|
-
* 'business-123',
|
|
310
|
-
* 'user-456',
|
|
311
|
-
* MembershipRole.EDITOR
|
|
312
|
-
* );
|
|
313
|
-
* ```
|
|
314
|
-
*/
|
|
315
|
-
async addMemberByUserId(businessId, userId, role = persShared.MembershipRole.VIEWER) {
|
|
316
|
-
return this.addMember(businessId, { userId, role });
|
|
317
|
-
}
|
|
318
|
-
// ==========================================
|
|
319
|
-
// UPDATE MEMBER ROLE
|
|
320
|
-
// ==========================================
|
|
321
|
-
/**
|
|
322
|
-
* Update a member's role in a business
|
|
323
|
-
*
|
|
324
|
-
* Endpoint: PUT /businesses/:businessId/members/:userId
|
|
325
|
-
* Min Role: ADMIN
|
|
326
|
-
*
|
|
327
|
-
* Business Rules:
|
|
328
|
-
* - Cannot demote the last OWNER (must transfer ownership first)
|
|
329
|
-
* - Can only assign roles up to your own level (ADMIN cannot create OWNER)
|
|
330
|
-
*
|
|
331
|
-
* @param businessId - The business UUID
|
|
332
|
-
* @param userId - The user UUID to update
|
|
333
|
-
* @param request - The update request with new role
|
|
334
|
-
* @returns The updated business membership
|
|
335
|
-
*
|
|
336
|
-
* @throws {AuthenticationError} 401 - Not authenticated
|
|
337
|
-
* @throws {PersApiError} 403 - Insufficient role (requires ADMIN or higher)
|
|
338
|
-
* @throws {PersApiError} 404 - Membership not found
|
|
339
|
-
* @throws {PersApiError} 400 - Cannot demote last OWNER
|
|
340
|
-
*
|
|
341
|
-
* @example
|
|
342
|
-
* ```typescript
|
|
343
|
-
* const updated = await membershipApi.updateMemberRole(
|
|
344
|
-
* 'business-123',
|
|
345
|
-
* 'user-456',
|
|
346
|
-
* { role: MembershipRole.ADMIN }
|
|
347
|
-
* );
|
|
348
|
-
* ```
|
|
349
|
-
*/
|
|
350
|
-
async updateMemberRole(businessId, userId, request) {
|
|
351
|
-
return this.apiClient.put(this.getMemberPath(businessId, userId), request);
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Update a member's role with explicit parameters
|
|
355
|
-
*
|
|
356
|
-
* Convenience method that constructs the request DTO internally.
|
|
357
|
-
*
|
|
358
|
-
* @param businessId - The business UUID
|
|
359
|
-
* @param userId - The user UUID to update
|
|
360
|
-
* @param role - The new role to assign
|
|
361
|
-
* @returns The updated business membership
|
|
362
|
-
*
|
|
363
|
-
* @example
|
|
364
|
-
* ```typescript
|
|
365
|
-
* const updated = await membershipApi.setMemberRole(
|
|
366
|
-
* 'business-123',
|
|
367
|
-
* 'user-456',
|
|
368
|
-
* MembershipRole.ADMIN
|
|
369
|
-
* );
|
|
370
|
-
* ```
|
|
371
|
-
*/
|
|
372
|
-
async setMemberRole(businessId, userId, role) {
|
|
373
|
-
return this.updateMemberRole(businessId, userId, { role });
|
|
374
|
-
}
|
|
375
|
-
// ==========================================
|
|
376
|
-
// REMOVE MEMBER
|
|
377
|
-
// ==========================================
|
|
378
|
-
/**
|
|
379
|
-
* Remove a member from a business
|
|
380
|
-
*
|
|
381
|
-
* Endpoint: DELETE /businesses/:businessId/members/:userId
|
|
382
|
-
* Min Role: ADMIN
|
|
383
|
-
*
|
|
384
|
-
* Business Rules:
|
|
385
|
-
* - Cannot remove the last OWNER
|
|
386
|
-
* - Cannot remove yourself (use leave endpoint or transfer ownership)
|
|
387
|
-
*
|
|
388
|
-
* @param businessId - The business UUID
|
|
389
|
-
* @param userId - The user UUID to remove
|
|
390
|
-
* @returns Success confirmation
|
|
391
|
-
*
|
|
392
|
-
* @throws {AuthenticationError} 401 - Not authenticated
|
|
393
|
-
* @throws {PersApiError} 403 - Insufficient role (requires ADMIN or higher)
|
|
394
|
-
* @throws {PersApiError} 404 - Membership not found
|
|
395
|
-
* @throws {PersApiError} 400 - Cannot remove last OWNER
|
|
396
|
-
*
|
|
397
|
-
* @example
|
|
398
|
-
* ```typescript
|
|
399
|
-
* const result = await membershipApi.removeMember('business-123', 'user-456');
|
|
400
|
-
* if (result.success) {
|
|
401
|
-
* console.log('Member removed successfully');
|
|
402
|
-
* }
|
|
403
|
-
* ```
|
|
404
|
-
*/
|
|
405
|
-
async removeMember(businessId, userId) {
|
|
406
|
-
return this.apiClient.delete(this.getMemberPath(businessId, userId));
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
8
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
* No framework dependencies - pure TypeScript business logic.
|
|
415
|
-
*
|
|
416
|
-
* Focuses only on actual backend capabilities.
|
|
417
|
-
*/
|
|
418
|
-
class BusinessService {
|
|
419
|
-
constructor(businessApi) {
|
|
420
|
-
this.businessApi = businessApi;
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Get all active businesses with pagination
|
|
424
|
-
* @deprecated Use getBusinesses({ active: true }) for more control
|
|
425
|
-
*/
|
|
426
|
-
async getActiveBusinesses(options) {
|
|
427
|
-
return this.businessApi.getBusinesses({ active: true, ...options });
|
|
428
|
-
}
|
|
429
|
-
/**
|
|
430
|
-
* Get all business types with pagination
|
|
431
|
-
*/
|
|
432
|
-
async getBusinessTypes(options) {
|
|
433
|
-
return this.businessApi.getBusinessTypes(options);
|
|
434
|
-
}
|
|
435
|
-
/**
|
|
436
|
-
* Get business by ID
|
|
437
|
-
*/
|
|
438
|
-
async getBusinessById(businessId) {
|
|
439
|
-
return this.businessApi.getBusinessById(businessId);
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* Get business by account address
|
|
443
|
-
*/
|
|
444
|
-
async getBusinessByAccount(accountAddress) {
|
|
445
|
-
return this.businessApi.getBusinessByAccount(accountAddress);
|
|
446
|
-
}
|
|
447
|
-
/**
|
|
448
|
-
* Get businesses by type (client-side filtering)
|
|
449
|
-
* @deprecated Consider implementing server-side filtering for better performance
|
|
450
|
-
*/
|
|
451
|
-
async getBusinessesByType(typeId, options) {
|
|
452
|
-
const response = await this.getActiveBusinesses(options);
|
|
453
|
-
const filtered = response.data.filter((business) => business.businessType && business.businessType.id === parseInt(typeId));
|
|
454
|
-
return {
|
|
455
|
-
data: filtered,
|
|
456
|
-
pagination: {
|
|
457
|
-
...response.pagination,
|
|
458
|
-
total: filtered.length,
|
|
459
|
-
pages: Math.ceil(filtered.length / (response.pagination.limit || 20))
|
|
460
|
-
}
|
|
461
|
-
};
|
|
462
|
-
}
|
|
463
|
-
// ==========================================
|
|
464
|
-
// ADMIN OPERATIONS
|
|
465
|
-
// ==========================================
|
|
466
|
-
/**
|
|
467
|
-
* ADMIN: Get all businesses with pagination (active and inactive)
|
|
468
|
-
*/
|
|
469
|
-
async getBusinesses(options) {
|
|
470
|
-
return this.businessApi.getBusinesses(options);
|
|
471
|
-
}
|
|
472
|
-
/**
|
|
473
|
-
* ADMIN: Create business by display name
|
|
474
|
-
*/
|
|
475
|
-
async createBusinessByDisplayName(displayName) {
|
|
476
|
-
return this.businessApi.createBusinessByDisplayName(displayName);
|
|
477
|
-
}
|
|
478
|
-
/**
|
|
479
|
-
* ADMIN: Update business
|
|
480
|
-
*/
|
|
481
|
-
async updateBusiness(id, businessData) {
|
|
482
|
-
return this.businessApi.updateBusiness(id, businessData);
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* ADMIN: Toggle business active status
|
|
486
|
-
*/
|
|
487
|
-
async toggleBusinessStatus(id, dto) {
|
|
488
|
-
return this.businessApi.toggleBusinessStatus(id, dto);
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
/**
|
|
493
|
-
* Business Membership Service
|
|
494
|
-
*
|
|
495
|
-
* Platform-agnostic service for managing business memberships.
|
|
496
|
-
* Provides business logic layer on top of the API client with
|
|
497
|
-
* convenience methods and role-based utilities.
|
|
498
|
-
*
|
|
499
|
-
* @example
|
|
500
|
-
* ```typescript
|
|
501
|
-
* const service = new BusinessMembershipService(membershipApi);
|
|
502
|
-
*
|
|
503
|
-
* // Get members with admin permissions
|
|
504
|
-
* const admins = await service.getMembersByRole('business-123', MembershipRole.ADMIN);
|
|
505
|
-
*
|
|
506
|
-
* // Check permissions
|
|
507
|
-
* const canManage = service.canManageMembers(MembershipRole.ADMIN); // true
|
|
508
|
-
* ```
|
|
509
|
-
*
|
|
510
|
-
* @version 2.0.0
|
|
511
|
-
*/
|
|
512
|
-
class BusinessMembershipService {
|
|
513
|
-
constructor(membershipApi) {
|
|
514
|
-
this.membershipApi = membershipApi;
|
|
515
|
-
}
|
|
516
|
-
// ==========================================
|
|
517
|
-
// MEMBER LISTING
|
|
518
|
-
// ==========================================
|
|
519
|
-
/**
|
|
520
|
-
* Get all members of a business with pagination
|
|
521
|
-
*
|
|
522
|
-
* @param businessId - The business UUID
|
|
523
|
-
* @param options - Pagination options
|
|
524
|
-
* @returns Paginated response with business memberships
|
|
525
|
-
*/
|
|
526
|
-
async getMembers(businessId, options) {
|
|
527
|
-
return this.membershipApi.getMembers(businessId, options);
|
|
528
|
-
}
|
|
529
|
-
/**
|
|
530
|
-
* Get members filtered by role (client-side filtering)
|
|
531
|
-
* @deprecated Consider server-side role filtering for better performance
|
|
532
|
-
*/
|
|
533
|
-
async getMembersByRole(businessId, role, options) {
|
|
534
|
-
const response = await this.getMembers(businessId, options);
|
|
535
|
-
const filtered = response.data.filter((m) => m.role === role);
|
|
536
|
-
return {
|
|
537
|
-
data: filtered,
|
|
538
|
-
pagination: {
|
|
539
|
-
...response.pagination,
|
|
540
|
-
total: filtered.length,
|
|
541
|
-
pages: Math.ceil(filtered.length / (response.pagination.limit || 20))
|
|
542
|
-
}
|
|
543
|
-
};
|
|
544
|
-
}
|
|
545
|
-
/**
|
|
546
|
-
* Get members with at least a minimum role level
|
|
547
|
-
*
|
|
548
|
-
* Uses the role hierarchy: OWNER > ADMIN > EDITOR > VIEWER
|
|
549
|
-
*
|
|
550
|
-
* @param businessId - The business UUID
|
|
551
|
-
* @param minRole - The minimum role level
|
|
552
|
-
* @returns Array of memberships with role >= minRole
|
|
553
|
-
*
|
|
554
|
-
* @example
|
|
555
|
-
* ```typescript
|
|
556
|
-
* // Get all members who can manage content (EDITOR and above)
|
|
557
|
-
* const editors = await service.getMembersWithMinRole('biz-123', MembershipRole.EDITOR);
|
|
558
|
-
* ```
|
|
559
|
-
*/
|
|
560
|
-
async getMembersWithMinRole(businessId, minRole) {
|
|
561
|
-
const response = await this.getMembers(businessId);
|
|
562
|
-
return response.data.filter((m) => persShared.hasMinimumRole(m.role, minRole));
|
|
563
|
-
}
|
|
564
|
-
/**
|
|
565
|
-
* Get a specific member by user ID
|
|
566
|
-
*
|
|
567
|
-
* @param businessId - The business UUID
|
|
568
|
-
* @param userId - The user UUID to find
|
|
569
|
-
* @returns The membership if found, undefined otherwise
|
|
570
|
-
*/
|
|
571
|
-
async getMemberByUserId(businessId, userId) {
|
|
572
|
-
const response = await this.getMembers(businessId);
|
|
573
|
-
return response.data.find((m) => m.userId === userId);
|
|
574
|
-
}
|
|
575
|
-
/**
|
|
576
|
-
* Count members by role
|
|
577
|
-
*
|
|
578
|
-
* @param businessId - The business UUID
|
|
579
|
-
* @returns Object with count per role
|
|
580
|
-
*
|
|
581
|
-
* @example
|
|
582
|
-
* ```typescript
|
|
583
|
-
* const counts = await service.getMemberCountsByRole('biz-123');
|
|
584
|
-
* // { OWNER: 1, ADMIN: 2, EDITOR: 5, VIEWER: 10 }
|
|
585
|
-
* ```
|
|
586
|
-
*/
|
|
587
|
-
async getMemberCountsByRole(businessId) {
|
|
588
|
-
const response = await this.getMembers(businessId);
|
|
589
|
-
const counts = {
|
|
590
|
-
[persShared.MembershipRole.OWNER]: 0,
|
|
591
|
-
[persShared.MembershipRole.ADMIN]: 0,
|
|
592
|
-
[persShared.MembershipRole.EDITOR]: 0,
|
|
593
|
-
[persShared.MembershipRole.VIEWER]: 0,
|
|
594
|
-
};
|
|
595
|
-
for (const member of response.data) {
|
|
596
|
-
if (member.role in counts) {
|
|
597
|
-
counts[member.role]++;
|
|
598
|
-
}
|
|
599
|
-
}
|
|
600
|
-
return counts;
|
|
601
|
-
}
|
|
602
|
-
// ==========================================
|
|
603
|
-
// MEMBER MANAGEMENT
|
|
604
|
-
// ==========================================
|
|
605
|
-
/**
|
|
606
|
-
* Add a new member to a business
|
|
607
|
-
*
|
|
608
|
-
* @param businessId - The business UUID
|
|
609
|
-
* @param userId - The user UUID to add
|
|
610
|
-
* @param role - The role to assign (defaults to VIEWER)
|
|
611
|
-
* @returns The created membership
|
|
612
|
-
*/
|
|
613
|
-
async addMember(businessId, userId, role = persShared.MembershipRole.VIEWER) {
|
|
614
|
-
return this.membershipApi.addMemberByUserId(businessId, userId, role);
|
|
615
|
-
}
|
|
616
|
-
/**
|
|
617
|
-
* Update a member's role
|
|
618
|
-
*
|
|
619
|
-
* @param businessId - The business UUID
|
|
620
|
-
* @param userId - The user UUID to update
|
|
621
|
-
* @param newRole - The new role to assign
|
|
622
|
-
* @returns The updated membership
|
|
623
|
-
*/
|
|
624
|
-
async updateMemberRole(businessId, userId, newRole) {
|
|
625
|
-
return this.membershipApi.setMemberRole(businessId, userId, newRole);
|
|
626
|
-
}
|
|
627
|
-
/**
|
|
628
|
-
* Remove a member from a business
|
|
629
|
-
*
|
|
630
|
-
* @param businessId - The business UUID
|
|
631
|
-
* @param userId - The user UUID to remove
|
|
632
|
-
* @returns Success confirmation
|
|
633
|
-
*/
|
|
634
|
-
async removeMember(businessId, userId) {
|
|
635
|
-
return this.membershipApi.removeMember(businessId, userId);
|
|
636
|
-
}
|
|
637
|
-
/**
|
|
638
|
-
* Promote a member to a higher role
|
|
639
|
-
*
|
|
640
|
-
* @param businessId - The business UUID
|
|
641
|
-
* @param userId - The user UUID to promote
|
|
642
|
-
* @param targetRole - The target role (must be higher than current)
|
|
643
|
-
* @returns The updated membership
|
|
644
|
-
* @throws Error if target role is not higher than current
|
|
645
|
-
*/
|
|
646
|
-
async promoteMember(businessId, userId, targetRole) {
|
|
647
|
-
const member = await this.getMemberByUserId(businessId, userId);
|
|
648
|
-
if (!member) {
|
|
649
|
-
throw new Error(`Member not found: ${userId}`);
|
|
650
|
-
}
|
|
651
|
-
// Validate that target role is actually a promotion
|
|
652
|
-
if (!persShared.hasMinimumRole(targetRole, member.role) || targetRole === member.role) {
|
|
653
|
-
throw new Error(`Cannot promote to ${targetRole}: current role is ${member.role}`);
|
|
654
|
-
}
|
|
655
|
-
return this.updateMemberRole(businessId, userId, targetRole);
|
|
656
|
-
}
|
|
657
|
-
/**
|
|
658
|
-
* Demote a member to a lower role
|
|
659
|
-
*
|
|
660
|
-
* Note: Cannot demote the last OWNER
|
|
661
|
-
*
|
|
662
|
-
* @param businessId - The business UUID
|
|
663
|
-
* @param userId - The user UUID to demote
|
|
664
|
-
* @param targetRole - The target role (must be lower than current)
|
|
665
|
-
* @returns The updated membership
|
|
666
|
-
* @throws Error if target role is not lower than current
|
|
667
|
-
*/
|
|
668
|
-
async demoteMember(businessId, userId, targetRole) {
|
|
669
|
-
const member = await this.getMemberByUserId(businessId, userId);
|
|
670
|
-
if (!member) {
|
|
671
|
-
throw new Error(`Member not found: ${userId}`);
|
|
672
|
-
}
|
|
673
|
-
// Validate that target role is actually a demotion
|
|
674
|
-
if (persShared.hasMinimumRole(targetRole, member.role)) {
|
|
675
|
-
throw new Error(`Cannot demote to ${targetRole}: current role is ${member.role}`);
|
|
676
|
-
}
|
|
677
|
-
return this.updateMemberRole(businessId, userId, targetRole);
|
|
678
|
-
}
|
|
679
|
-
// ==========================================
|
|
680
|
-
// PERMISSION UTILITIES
|
|
681
|
-
// ==========================================
|
|
682
|
-
/**
|
|
683
|
-
* Check if a role can view members (any member)
|
|
684
|
-
*/
|
|
685
|
-
canViewMembers(role) {
|
|
686
|
-
return role !== null;
|
|
687
|
-
}
|
|
688
|
-
/**
|
|
689
|
-
* Check if a role can manage members (ADMIN or higher)
|
|
690
|
-
*/
|
|
691
|
-
canManageMembers(role) {
|
|
692
|
-
return role !== null && persShared.hasMinimumRole(role, persShared.MembershipRole.ADMIN);
|
|
693
|
-
}
|
|
694
|
-
/**
|
|
695
|
-
* Check if a role can edit content (EDITOR or higher)
|
|
696
|
-
*/
|
|
697
|
-
canEditContent(role) {
|
|
698
|
-
return role !== null && persShared.hasMinimumRole(role, persShared.MembershipRole.EDITOR);
|
|
699
|
-
}
|
|
700
|
-
/**
|
|
701
|
-
* Check if a role can delete the business (OWNER only)
|
|
702
|
-
*/
|
|
703
|
-
canDeleteBusiness(role) {
|
|
704
|
-
return role === persShared.MembershipRole.OWNER;
|
|
705
|
-
}
|
|
706
|
-
/**
|
|
707
|
-
* Get permissions object for a role
|
|
708
|
-
*
|
|
709
|
-
* Useful for UI components to conditionally render based on permissions.
|
|
710
|
-
*
|
|
711
|
-
* @param role - The membership role (or null if not a member)
|
|
712
|
-
* @returns Object with boolean permission flags
|
|
713
|
-
*
|
|
714
|
-
* @example
|
|
715
|
-
* ```typescript
|
|
716
|
-
* const perms = service.getPermissions(MembershipRole.EDITOR);
|
|
717
|
-
* // { canViewMembers: true, canManageMembers: false, canEditContent: true, canDeleteBusiness: false }
|
|
718
|
-
*
|
|
719
|
-
* if (perms.canManageMembers) {
|
|
720
|
-
* showAddMemberButton();
|
|
721
|
-
* }
|
|
722
|
-
* ```
|
|
723
|
-
*/
|
|
724
|
-
getPermissions(role) {
|
|
725
|
-
return {
|
|
726
|
-
canViewMembers: this.canViewMembers(role),
|
|
727
|
-
canManageMembers: this.canManageMembers(role),
|
|
728
|
-
canEditContent: this.canEditContent(role),
|
|
729
|
-
canDeleteBusiness: this.canDeleteBusiness(role),
|
|
730
|
-
};
|
|
731
|
-
}
|
|
732
|
-
/**
|
|
733
|
-
* Check if a role can assign another role
|
|
734
|
-
*
|
|
735
|
-
* Rule: Can only assign roles up to your own level
|
|
736
|
-
* (ADMIN cannot create OWNER, but OWNER can create anything)
|
|
737
|
-
*
|
|
738
|
-
* @param assignerRole - The role of the user assigning
|
|
739
|
-
* @param targetRole - The role being assigned
|
|
740
|
-
* @returns true if the assigner can assign the target role
|
|
741
|
-
*/
|
|
742
|
-
canAssignRole(assignerRole, targetRole) {
|
|
743
|
-
// Must be at least ADMIN to assign any role
|
|
744
|
-
if (!persShared.hasMinimumRole(assignerRole, persShared.MembershipRole.ADMIN)) {
|
|
745
|
-
return false;
|
|
746
|
-
}
|
|
747
|
-
// Can only assign roles up to your own level
|
|
748
|
-
return persShared.hasMinimumRole(assignerRole, targetRole);
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
Object.defineProperty(exports, "AccountOwnerType", {
|
|
753
|
-
enumerable: true,
|
|
754
|
-
get: function () { return persShared.AccountOwnerType; }
|
|
755
|
-
});
|
|
756
|
-
Object.defineProperty(exports, "ApiKeyType", {
|
|
757
|
-
enumerable: true,
|
|
758
|
-
get: function () { return persShared.ApiKeyType; }
|
|
759
|
-
});
|
|
760
|
-
Object.defineProperty(exports, "MEMBERSHIP_ROLE_HIERARCHY", {
|
|
761
|
-
enumerable: true,
|
|
762
|
-
get: function () { return persShared.MEMBERSHIP_ROLE_HIERARCHY; }
|
|
763
|
-
});
|
|
764
|
-
Object.defineProperty(exports, "MembershipRole", {
|
|
765
|
-
enumerable: true,
|
|
766
|
-
get: function () { return persShared.MembershipRole; }
|
|
767
|
-
});
|
|
768
|
-
Object.defineProperty(exports, "NativeTokenTypes", {
|
|
769
|
-
enumerable: true,
|
|
770
|
-
get: function () { return persShared.NativeTokenTypes; }
|
|
771
|
-
});
|
|
772
|
-
Object.defineProperty(exports, "hasMinimumRole", {
|
|
773
|
-
enumerable: true,
|
|
774
|
-
get: function () { return persShared.hasMinimumRole; }
|
|
775
|
-
});
|
|
776
|
-
exports.BusinessApi = BusinessApi;
|
|
777
|
-
exports.BusinessMembershipApi = BusinessMembershipApi;
|
|
778
|
-
exports.BusinessMembershipService = BusinessMembershipService;
|
|
779
|
-
exports.BusinessService = BusinessService;
|
|
9
|
+
exports.BusinessApi = businessMembershipService.BusinessApi;
|
|
10
|
+
exports.BusinessMembershipApi = businessMembershipService.BusinessMembershipApi;
|
|
11
|
+
exports.BusinessMembershipService = businessMembershipService.BusinessMembershipService;
|
|
12
|
+
exports.BusinessService = businessMembershipService.BusinessService;
|
|
780
13
|
//# sourceMappingURL=business.cjs.map
|