@@ -6,13 +6,14 @@ import {
66 AllowedUsersNpubsResponse ,
77 BulkImportRequest ,
88 AllowedUsersNpub ,
9+ AllowedUsersMode ,
910 DEFAULT_TIERS
1011} from '@app/types/allowedUsers.types' ;
1112
1213// Settings Management
1314export const getAllowedUsersSettings = async ( ) : Promise < AllowedUsersSettings > => {
1415 const token = readToken ( ) ;
15- const response = await fetch ( `${ config . baseURL } /api/settings/allowed_users ` , {
16+ const response = await fetch ( `${ config . baseURL } /api/settings` , {
1617 headers : {
1718 'Authorization' : `Bearer ${ token } ` ,
1819 } ,
@@ -22,25 +23,47 @@ export const getAllowedUsersSettings = async (): Promise<AllowedUsersSettings> =
2223
2324 const text = await response . text ( ) ;
2425 try {
25- const data : AllowedUsersApiResponse = JSON . parse ( text ) ;
26+ const data = JSON . parse ( text ) ;
27+
28+ // Extract allowed_users from the new nested structure
29+ const allowedUsersData = data . settings ?. allowed_users ;
30+ if ( ! allowedUsersData ) {
31+ throw new Error ( 'No allowed_users data found in response' ) ;
32+ }
2633
2734 // Transform tiers from backend format to frontend format
28- let transformedTiers = data . allowed_users . tiers . map ( tier => ( {
29- data_limit : ( tier as any ) . datalimit || tier . data_limit || '' ,
30- price : tier . price
31- } ) ) ;
35+ let transformedTiers = [ ] ;
36+
37+ // Check if tiers exist in response, otherwise use defaults
38+ if ( allowedUsersData . tiers && Array . isArray ( allowedUsersData . tiers ) ) {
39+ transformedTiers = allowedUsersData . tiers . map ( ( tier : any ) => ( {
40+ data_limit : tier . datalimit || tier . data_limit || '' ,
41+ price : tier . price || '0'
42+ } ) ) ;
43+ } else {
44+ // Use default tiers for the mode if none provided
45+ const mode = allowedUsersData . mode as AllowedUsersMode ;
46+ transformedTiers = DEFAULT_TIERS [ mode ] || DEFAULT_TIERS . free ;
47+ }
3248
3349 // For free mode, reconstruct full UI options with active tier marked
34- if ( data . allowed_users . mode === 'free' && transformedTiers . length === 1 ) {
50+ if ( allowedUsersData . mode === 'free' && transformedTiers . length === 1 ) {
3551 const activeTierDataLimit = transformedTiers [ 0 ] . data_limit ;
3652 transformedTiers = DEFAULT_TIERS . free . map ( defaultTier => ( {
3753 ...defaultTier ,
3854 active : defaultTier . data_limit === activeTierDataLimit
3955 } ) ) ;
4056 }
4157
58+ // For personal mode, reconstruct with single unlimited tier
59+ if ( allowedUsersData . mode === 'personal' && transformedTiers . length === 1 ) {
60+ transformedTiers = DEFAULT_TIERS . personal ;
61+ }
62+
4263 const transformedSettings = {
43- ...data . allowed_users ,
64+ mode : allowedUsersData . mode || 'free' ,
65+ read_access : allowedUsersData . read_access || { enabled : true , scope : 'all_users' } ,
66+ write_access : allowedUsersData . write_access || { enabled : true , scope : 'all_users' } ,
4467 tiers : transformedTiers
4568 } ;
4669
@@ -53,33 +76,35 @@ export const getAllowedUsersSettings = async (): Promise<AllowedUsersSettings> =
5376export const updateAllowedUsersSettings = async ( settings : AllowedUsersSettings ) : Promise < { success : boolean , message : string } > => {
5477 const token = readToken ( ) ;
5578
56- // Filter tiers based on mode - for free mode , only send active tier
57- const tiersToSend = settings . mode === 'free'
79+ // Filter tiers based on mode - for free and personal modes , only send active tier
80+ const tiersToSend = ( settings . mode === 'free' || settings . mode === 'personal' )
5881 ? settings . tiers . filter ( tier => tier . active )
5982 : settings . tiers ;
6083
61- // Transform to nested format as expected by backend
84+ // Transform to nested format as expected by new unified backend API
6285 const nestedSettings = {
63- "allowed_users" : {
64- "mode" : settings . mode ,
65- "read_access" : {
66- "enabled" : settings . read_access . enabled ,
67- "scope" : settings . read_access . scope
68- } ,
69- "write_access" : {
70- "enabled" : settings . write_access . enabled ,
71- "scope" : settings . write_access . scope
72- } ,
73- "tiers" : tiersToSend . map ( tier => ( {
74- "datalimit" : tier . data_limit || "1 GB per month" , // Backend expects 'datalimit' not 'data_limit', fallback for empty values
75- "price" : tier . price || "0"
76- } ) )
86+ "settings" : {
87+ "allowed_users" : {
88+ "mode" : settings . mode ,
89+ "read_access" : {
90+ "enabled" : settings . read_access . enabled ,
91+ "scope" : settings . read_access . scope
92+ } ,
93+ "write_access" : {
94+ "enabled" : settings . write_access . enabled ,
95+ "scope" : settings . write_access . scope
96+ } ,
97+ "tiers" : tiersToSend . map ( tier => ( {
98+ "datalimit" : tier . data_limit || "1 GB per month" , // Backend expects 'datalimit' not 'data_limit', fallback for empty values
99+ "price" : tier . price || "0"
100+ } ) )
101+ }
77102 }
78103 } ;
79104
80105 console . log ( 'Sending to backend:' , JSON . stringify ( nestedSettings , null , 2 ) ) ;
81106
82- const response = await fetch ( `${ config . baseURL } /api/settings/allowed_users ` , {
107+ const response = await fetch ( `${ config . baseURL } /api/settings` , {
83108 method : 'POST' ,
84109 headers : {
85110 'Content-Type' : 'application/json' ,
@@ -97,9 +122,10 @@ export const updateAllowedUsersSettings = async (settings: AllowedUsersSettings)
97122 }
98123
99124 try {
100- return JSON . parse ( text ) ;
125+ return JSON . parse ( text ) || { success : true , message : 'Settings updated successfully' } ;
101126 } catch ( jsonError ) {
102- throw new Error ( `Invalid JSON response: ${ text } ` ) ;
127+ // If response is not JSON, assume success if status was OK
128+ return { success : true , message : 'Settings updated successfully' } ;
103129 }
104130} ;
105131
0 commit comments