@myrjfa/state 2.3.1 → 2.3.3

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.
Files changed (179) hide show
  1. package/dist/lib/actions/actions.d.ts +6 -6
  2. package/dist/lib/actions/auth.d.ts +23 -19
  3. package/dist/lib/actions/auth.d.ts.map +1 -1
  4. package/dist/lib/actions/auth.js +24 -5
  5. package/dist/lib/actions/chat.d.ts +20 -14
  6. package/dist/lib/actions/chat.d.ts.map +1 -1
  7. package/dist/lib/actions/chat.js +2 -2
  8. package/dist/lib/actions/fetcher.d.ts.map +1 -1
  9. package/dist/lib/actions/fetcher.js +15 -8
  10. package/dist/lib/actions.d.ts +12 -12
  11. package/dist/lib/actions.d.ts.map +1 -1
  12. package/dist/lib/actions.js +3 -1
  13. package/dist/lib/authSessionManager.d.ts.map +1 -1
  14. package/dist/lib/authSessionManager.js +77 -13
  15. package/dist/lib/authSessionPolicy.d.ts +34 -0
  16. package/dist/lib/authSessionPolicy.d.ts.map +1 -1
  17. package/dist/lib/authSessionPolicy.js +52 -0
  18. package/dist/lib/context/ChatContext.d.ts.map +1 -1
  19. package/dist/lib/context/ChatContext.js +12 -6
  20. package/dist/lib/models/authorization.d.ts +4 -3
  21. package/dist/lib/models/authorization.d.ts.map +1 -1
  22. package/dist/lib/models/authorization.js +10 -4
  23. package/dist/lib/models/blog.d.ts +4 -4
  24. package/dist/lib/models/chat.d.ts +10 -2
  25. package/dist/lib/models/chat.d.ts.map +1 -1
  26. package/dist/lib/models/chat.js +8 -0
  27. package/dist/lib/models/discount.d.ts +52 -52
  28. package/dist/lib/models/notifications.d.ts +2 -2
  29. package/dist/lib/models/opportunities/freelance.d.ts +34 -34
  30. package/dist/lib/models/opportunities/internship.d.ts +34 -34
  31. package/dist/lib/models/opportunities/job.d.ts +34 -34
  32. package/dist/lib/models/opportunities/opportunity.d.ts +34 -34
  33. package/dist/lib/models/opportunities/volunteerJob.d.ts +34 -34
  34. package/dist/lib/models/package.d.ts +16 -16
  35. package/dist/lib/models/portfolio.d.ts +2 -2
  36. package/dist/lib/models/pricing.d.ts +12 -12
  37. package/dist/lib/models/review.d.ts +2 -2
  38. package/dist/lib/models/stay.d.ts +18 -18
  39. package/dist/lib/models/travelPackage.d.ts +36 -36
  40. package/dist/lib/models/user.d.ts +12 -12
  41. package/dist/lib/userAtom.d.ts +126 -25
  42. package/dist/lib/userAtom.d.ts.map +1 -1
  43. package/dist/lib/userAtom.js +79 -45
  44. package/package.json +1 -1
  45. package/dist/lib/actions/adminDashboard.d.ts +0 -4
  46. package/dist/lib/actions/adminDashboard.d.ts.map +0 -1
  47. package/dist/lib/actions/adminDashboard.js +0 -29
  48. package/dist/lib/actions/adventure.d.ts +0 -104
  49. package/dist/lib/actions/adventure.d.ts.map +0 -1
  50. package/dist/lib/actions/adventure.js +0 -203
  51. package/dist/lib/actions/application.d.ts +0 -35
  52. package/dist/lib/actions/application.d.ts.map +0 -1
  53. package/dist/lib/actions/application.js +0 -573
  54. package/dist/lib/actions/blog.d.ts +0 -61
  55. package/dist/lib/actions/blog.d.ts.map +0 -1
  56. package/dist/lib/actions/blog.js +0 -762
  57. package/dist/lib/actions/brand.d.ts +0 -83
  58. package/dist/lib/actions/brand.d.ts.map +0 -1
  59. package/dist/lib/actions/brand.js +0 -28
  60. package/dist/lib/actions/companion.d.ts +0 -174
  61. package/dist/lib/actions/companion.d.ts.map +0 -1
  62. package/dist/lib/actions/companion.js +0 -276
  63. package/dist/lib/actions/event.d.ts +0 -178
  64. package/dist/lib/actions/event.d.ts.map +0 -1
  65. package/dist/lib/actions/event.js +0 -214
  66. package/dist/lib/actions/guide.d.ts +0 -55
  67. package/dist/lib/actions/guide.d.ts.map +0 -1
  68. package/dist/lib/actions/guide.js +0 -128
  69. package/dist/lib/actions/hostDashboard.d.ts +0 -122
  70. package/dist/lib/actions/hostDashboard.d.ts.map +0 -1
  71. package/dist/lib/actions/hostDashboard.js +0 -329
  72. package/dist/lib/actions/location.d.ts +0 -141
  73. package/dist/lib/actions/location.d.ts.map +0 -1
  74. package/dist/lib/actions/location.js +0 -113
  75. package/dist/lib/actions/notifications.d.ts +0 -91
  76. package/dist/lib/actions/notifications.d.ts.map +0 -1
  77. package/dist/lib/actions/notifications.js +0 -83
  78. package/dist/lib/actions/opportunity.d.ts +0 -44
  79. package/dist/lib/actions/opportunity.d.ts.map +0 -1
  80. package/dist/lib/actions/opportunity.js +0 -318
  81. package/dist/lib/actions/package.d.ts +0 -85
  82. package/dist/lib/actions/package.d.ts.map +0 -1
  83. package/dist/lib/actions/package.js +0 -167
  84. package/dist/lib/actions/place.d.ts +0 -191
  85. package/dist/lib/actions/place.d.ts.map +0 -1
  86. package/dist/lib/actions/place.js +0 -57
  87. package/dist/lib/actions/portfolio.d.ts +0 -65
  88. package/dist/lib/actions/portfolio.d.ts.map +0 -1
  89. package/dist/lib/actions/portfolio.js +0 -62
  90. package/dist/lib/actions/property.d.ts +0 -17
  91. package/dist/lib/actions/property.d.ts.map +0 -1
  92. package/dist/lib/actions/property.js +0 -16
  93. package/dist/lib/actions/rental.d.ts +0 -87
  94. package/dist/lib/actions/rental.d.ts.map +0 -1
  95. package/dist/lib/actions/rental.js +0 -205
  96. package/dist/lib/actions/review.d.ts +0 -8
  97. package/dist/lib/actions/review.d.ts.map +0 -1
  98. package/dist/lib/actions/review.js +0 -102
  99. package/dist/lib/actions/room.d.ts +0 -39
  100. package/dist/lib/actions/room.d.ts.map +0 -1
  101. package/dist/lib/actions/room.js +0 -74
  102. package/dist/lib/actions/stay.d.ts +0 -97
  103. package/dist/lib/actions/stay.d.ts.map +0 -1
  104. package/dist/lib/actions/stay.js +0 -138
  105. package/dist/lib/actions/travelPackage.d.ts +0 -104
  106. package/dist/lib/actions/travelPackage.d.ts.map +0 -1
  107. package/dist/lib/actions/travelPackage.js +0 -487
  108. package/dist/lib/data/adventureDummyData.d.ts +0 -3
  109. package/dist/lib/data/adventureDummyData.d.ts.map +0 -1
  110. package/dist/lib/data/adventureDummyData.js +0 -138
  111. package/dist/lib/data/adventureFormPage.d.ts +0 -28
  112. package/dist/lib/data/adventureFormPage.d.ts.map +0 -1
  113. package/dist/lib/data/adventureFormPage.js +0 -58
  114. package/dist/lib/data/companionDummyData.d.ts +0 -99
  115. package/dist/lib/data/companionDummyData.d.ts.map +0 -1
  116. package/dist/lib/data/companionDummyData.js +0 -203
  117. package/dist/lib/data/destinations.d.ts +0 -14
  118. package/dist/lib/data/destinations.d.ts.map +0 -1
  119. package/dist/lib/data/destinations.js +0 -203
  120. package/dist/lib/data/eventFormPage.d.ts +0 -38
  121. package/dist/lib/data/eventFormPage.d.ts.map +0 -1
  122. package/dist/lib/data/eventFormPage.js +0 -56
  123. package/dist/lib/data/eventsDummyData.d.ts +0 -54
  124. package/dist/lib/data/eventsDummyData.d.ts.map +0 -1
  125. package/dist/lib/data/eventsDummyData.js +0 -586
  126. package/dist/lib/data/guideDummyData.d.ts +0 -3
  127. package/dist/lib/data/guideDummyData.d.ts.map +0 -1
  128. package/dist/lib/data/guideDummyData.js +0 -66
  129. package/dist/lib/data/opportunityFormData.d.ts +0 -13
  130. package/dist/lib/data/opportunityFormData.d.ts.map +0 -1
  131. package/dist/lib/data/opportunityFormData.js +0 -62
  132. package/dist/lib/data/opportunityFormPage.d.ts +0 -12
  133. package/dist/lib/data/opportunityFormPage.d.ts.map +0 -1
  134. package/dist/lib/data/opportunityFormPage.js +0 -33
  135. package/dist/lib/data/packageDummyData.d.ts +0 -3
  136. package/dist/lib/data/packageDummyData.d.ts.map +0 -1
  137. package/dist/lib/data/packageDummyData.js +0 -56
  138. package/dist/lib/data/rentalDummyData.d.ts +0 -3
  139. package/dist/lib/data/rentalDummyData.d.ts.map +0 -1
  140. package/dist/lib/data/rentalDummyData.js +0 -382
  141. package/dist/lib/data/rentalFormPage.d.ts +0 -11
  142. package/dist/lib/data/rentalFormPage.d.ts.map +0 -1
  143. package/dist/lib/data/rentalFormPage.js +0 -86
  144. package/dist/lib/data/staysDummyData.d.ts +0 -72
  145. package/dist/lib/data/staysDummyData.d.ts.map +0 -1
  146. package/dist/lib/data/staysDummyData.js +0 -694
  147. package/dist/lib/data/storeDummyData.d.ts +0 -33
  148. package/dist/lib/data/storeDummyData.d.ts.map +0 -1
  149. package/dist/lib/data/storeDummyData.js +0 -336
  150. package/dist/lib/data/travelPackageFormData.d.ts +0 -19
  151. package/dist/lib/data/travelPackageFormData.d.ts.map +0 -1
  152. package/dist/lib/data/travelPackageFormData.js +0 -51
  153. package/dist/lib/data/travelPackageFormPage.d.ts +0 -22
  154. package/dist/lib/data/travelPackageFormPage.d.ts.map +0 -1
  155. package/dist/lib/data/travelPackageFormPage.js +0 -40
  156. package/dist/lib/data/vehicleData.d.ts +0 -2
  157. package/dist/lib/data/vehicleData.d.ts.map +0 -1
  158. package/dist/lib/data/vehicleData.js +0 -187
  159. package/dist/lib/data/vehicleModels.d.ts +0 -2
  160. package/dist/lib/data/vehicleModels.d.ts.map +0 -1
  161. package/dist/lib/data/vehicleModels.js +0 -128
  162. package/dist/lib/hooks/usePersistentDraftState.d.ts +0 -20
  163. package/dist/lib/hooks/usePersistentDraftState.d.ts.map +0 -1
  164. package/dist/lib/hooks/usePersistentDraftState.js +0 -47
  165. package/dist/lib/models/forms.d.ts +0 -384
  166. package/dist/lib/models/forms.d.ts.map +0 -1
  167. package/dist/lib/models/forms.js +0 -121
  168. package/dist/lib/pricingActions.d.ts +0 -13
  169. package/dist/lib/pricingActions.d.ts.map +0 -1
  170. package/dist/lib/pricingActions.js +0 -16
  171. package/dist/lib/utils/entitySubmission.d.ts +0 -21
  172. package/dist/lib/utils/entitySubmission.d.ts.map +0 -1
  173. package/dist/lib/utils/entitySubmission.js +0 -10
  174. package/dist/lib/utils/imageUpload.d.ts +0 -4
  175. package/dist/lib/utils/imageUpload.d.ts.map +0 -1
  176. package/dist/lib/utils/imageUpload.js +0 -36
  177. package/dist/lib/utils/tileConverters.d.ts +0 -8
  178. package/dist/lib/utils/tileConverters.d.ts.map +0 -1
  179. package/dist/lib/utils/tileConverters.js +0 -59
@@ -2,7 +2,8 @@
2
2
  import CryptoJS from 'crypto-js';
3
3
  import { atom, getDefaultStore } from 'jotai';
4
4
  import { atomWithStorage } from 'jotai/utils';
5
- import { getCurrentUser } from './actions/actions';
5
+ import { clearSessionCookies } from './actions/auth';
6
+ import { canFinishAuthCleanup, clearCacheMissSessionBoundary, isAuthSessionPending, } from './authSessionPolicy';
6
7
  const STORAGE_KEY = process.env.NEXT_PUBLIC_USER_KEY;
7
8
  const LOGIN_KEY = process.env.NEXT_PUBLIC_LOGIN_KEY;
8
9
  const SECRET_KEY = process.env.NEXT_PUBLIC_RACE;
@@ -35,14 +36,14 @@ const getWithExpiry = (key) => {
35
36
  return null;
36
37
  const { value, expiry } = data;
37
38
  if (Date.now() > expiry) {
38
- resetAuthState();
39
+ localStorage.removeItem(key);
39
40
  return null;
40
41
  }
41
42
  return value;
42
43
  }
43
44
  catch (e) {
44
45
  console.warn('Invalid user data:', e);
45
- resetAuthState();
46
+ localStorage.removeItem(key);
46
47
  return null;
47
48
  }
48
49
  };
@@ -64,68 +65,99 @@ export const userAtom = atomWithStorage(STORAGE_KEY, null, {
64
65
  removeItem: (key) => localStorage.removeItem(key),
65
66
  });
66
67
  export const isLoggedInAtom = atomWithStorage(LOGIN_KEY, false);
68
+ /**
69
+ * Changes whenever a login/logout boundary occurs.
70
+ *
71
+ * Background session requests capture this value. Responses belonging to an
72
+ * older revision must not clear a newer authenticated state.
73
+ */
74
+ export const authRevisionAtom = atom(0);
75
+ /** Backend reconciliation state for the currently persisted identity. */
76
+ export const authSessionStatusAtom = atom("initializing");
77
+ /**
78
+ * Atomically commits a successful login to the active Jotai store.
79
+ */
80
+ export const commitLoginAtom = atom(null, (_get, set, authenticatedUser) => {
81
+ set(userAtom, authenticatedUser);
82
+ set(isLoggedInAtom, true);
83
+ set(storageInitializedAtom, true);
84
+ set(authSessionStatusAtom, "authenticated");
85
+ set(authRevisionAtom, (revision) => revision + 1);
86
+ });
67
87
  // 🕒 Tracks if user is loading
68
88
  export const userLoadingAtom = atom((get) => {
69
- // The issue was here - we need to properly track initialization state
70
89
  const initialized = get(storageInitializedAtom);
71
- // We're loading if we haven't initialized storage yet
72
- return !initialized;
90
+ const sessionStatus = get(authSessionStatusAtom);
91
+ // Reconciliation is an authentication boundary, not background cosmetic
92
+ // work. Keep login/register controls unavailable until validation or
93
+ // cookie cleanup settles so a late Set-Cookie response cannot erase a
94
+ // newly-created session.
95
+ return !initialized || isAuthSessionPending(sessionStatus);
96
+ });
97
+ export const resetAuthStateAtom = atom(null, (_get, set) => {
98
+ if (typeof window === "undefined")
99
+ return;
100
+ localStorage.removeItem(STORAGE_KEY);
101
+ localStorage.removeItem(LOGIN_KEY);
102
+ // Update the active Jotai store used by the calling React component.
103
+ set(userAtom, null);
104
+ set(isLoggedInAtom, false);
105
+ set(storageInitializedAtom, true);
106
+ set(authSessionStatusAtom, "signed-out");
107
+ set(authRevisionAtom, (revision) => revision + 1);
108
+ });
109
+ /**
110
+ * Clears provisional browser identity while keeping public auth controls
111
+ * disabled until the backend cookie/device cleanup request has settled.
112
+ */
113
+ export const beginAuthCleanupAtom = atom(null, (_get, set) => {
114
+ if (typeof window === "undefined")
115
+ return;
116
+ localStorage.removeItem(STORAGE_KEY);
117
+ localStorage.removeItem(LOGIN_KEY);
118
+ set(userAtom, null);
119
+ set(isLoggedInAtom, false);
120
+ set(storageInitializedAtom, true);
121
+ set(authSessionStatusAtom, "clearing");
122
+ set(authRevisionAtom, (revision) => revision + 1);
123
+ });
124
+ export const finishAuthCleanupAtom = atom(null, (get, set, expectedRevision) => {
125
+ if (!canFinishAuthCleanup(expectedRevision, get(authRevisionAtom)))
126
+ return;
127
+ set(authSessionStatusAtom, "signed-out");
73
128
  });
74
129
  // Initialize storage atom effect
75
130
  export const initializeAuthSessionAtom = atom(null, async (get, set) => {
76
131
  // Only run in browser
77
132
  if (typeof window === 'undefined')
78
133
  return;
79
- // 1. Validate session (role-aware — host route differs from user route)
80
- // const session = await validateSession();
81
- // if (session.success) {
82
- // Session validated successfully
83
- // } else {
84
- // resetAuthState();
85
- // set(storageInitializedAtom, true);
86
- // return;
87
- // }
88
- // NOTE: if validateSession fails we do NOT reset — we just fall through
89
- // to cache/API. A failed ping could mean the backend is temporarily down,
90
- // the user is a host (different endpoint), etc. We only clear state if we
91
- // POSITIVELY know the user is logged out (getCurrentUser fails).
92
- // 2. Try cache (localStorage)
134
+ // Try the local identity cache first. It remains provisional until the
135
+ // backend confirms that the cookies belong to the same actor.
93
136
  const userData = getWithExpiry(STORAGE_KEY);
94
137
  if (userData) {
95
- set(userAtom, userData);
96
- set(isLoggedInAtom, true);
97
- set(storageInitializedAtom, true);
138
+ set(commitLoginAtom, userData);
139
+ set(authSessionStatusAtom, "validating");
98
140
  return;
99
141
  }
100
- // 3. If cache miss: fetch user from backend using session cookie
142
+ // Missing persisted identity is always a cleanup boundary. The endpoint
143
+ // is idempotent for a fresh guest and revokes stale cookie-only sessions.
144
+ set(beginAuthCleanupAtom);
145
+ const cleanupRevision = get(authRevisionAtom);
101
146
  try {
102
- // This endpoint can hit DB or another cache as needed
103
- const remoteUser = await getCurrentUser();
104
- if (remoteUser) {
105
- set(userAtom, remoteUser);
106
- set(isLoggedInAtom, true);
107
- setWithExpiry(STORAGE_KEY, remoteUser); // Write to local cache for next time
108
- }
109
- else {
110
- resetAuthState();
111
- }
147
+ await clearCacheMissSessionBoundary({
148
+ cleanupRevision,
149
+ getCurrentRevision: () => get(authRevisionAtom),
150
+ clearSession: clearSessionCookies,
151
+ });
112
152
  }
113
153
  catch {
114
- resetAuthState();
154
+ // clearSessionCookies is bounded. Local signed-out state is still
155
+ // published only after the cleanup attempt has settled.
115
156
  }
116
157
  finally {
117
- set(storageInitializedAtom, true);
158
+ set(finishAuthCleanupAtom, cleanupRevision);
118
159
  }
119
160
  });
120
- export const resetAuthStateAtom = atom(null, (_get, set) => {
121
- if (typeof window === 'undefined')
122
- return;
123
- localStorage.removeItem(STORAGE_KEY);
124
- localStorage.removeItem(LOGIN_KEY);
125
- set(userAtom, null);
126
- set(isLoggedInAtom, false);
127
- set(storageInitializedAtom, true);
128
- });
129
161
  export function resetAuthState() {
130
162
  if (typeof window === 'undefined') {
131
163
  console.warn('resetAuthState called on server — skipped');
@@ -136,4 +168,6 @@ export function resetAuthState() {
136
168
  store.set(userAtom, null);
137
169
  store.set(isLoggedInAtom, false);
138
170
  store.set(storageInitializedAtom, true);
171
+ store.set(authSessionStatusAtom, "signed-out");
172
+ store.set(authRevisionAtom, (revision) => revision + 1);
139
173
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@myrjfa/state",
3
- "version": "2.3.1",
3
+ "version": "2.3.3",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./dist/*": "./dist/*.js"
@@ -1,4 +0,0 @@
1
- export declare function getPayoutRecipients(): Promise<any>;
2
- export declare function getPayoutHistory(): Promise<any>;
3
- export declare function recordManualPayout(formData: FormData): Promise<any>;
4
- //# sourceMappingURL=adminDashboard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adminDashboard.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/adminDashboard.ts"],"names":[],"mappings":"AAIA,wBAAsB,mBAAmB,iBAOxC;AAED,wBAAsB,gBAAgB,iBAOrC;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,gBAO1D"}
@@ -1,29 +0,0 @@
1
- // --- Payouts actions --- //
2
- import { get, post } from "./fetcher";
3
- export async function getPayoutRecipients() {
4
- try {
5
- const data = await get("/admin/payouts/recipients");
6
- return { success: true, ...data };
7
- }
8
- catch (error) {
9
- return { success: false, error: error.message };
10
- }
11
- }
12
- export async function getPayoutHistory() {
13
- try {
14
- const data = await get("/admin/payouts/history");
15
- return { success: true, ...data };
16
- }
17
- catch (error) {
18
- return { success: false, error: error.message };
19
- }
20
- }
21
- export async function recordManualPayout(formData) {
22
- try {
23
- const data = await post("/admin/payouts/record", formData);
24
- return { success: true, ...data };
25
- }
26
- catch (error) {
27
- return { success: false, error: error.message };
28
- }
29
- }
@@ -1,104 +0,0 @@
1
- import { Adventure, AdventureMetaData } from "../models/adventure";
2
- import { TileProps } from "../models/tile";
3
- export declare function getAdventureTiles(limit?: number, filters?: {
4
- activityType?: string;
5
- difficulty?: string;
6
- sort?: "popular" | "latest";
7
- }): Promise<{
8
- success: boolean;
9
- tiles: TileProps[];
10
- message?: string;
11
- error?: string;
12
- }>;
13
- export declare function trendingAdventureTiles(limit: number): Promise<{
14
- success: boolean;
15
- tiles: TileProps[];
16
- message?: string;
17
- error?: string;
18
- }>;
19
- export declare function adventureDetails(slug: string, options?: {
20
- edit?: boolean;
21
- }): Promise<{
22
- success: boolean;
23
- adventure: Adventure | null;
24
- message?: string;
25
- error?: string;
26
- }>;
27
- export declare function adventureMetaData(slug: string): Promise<{
28
- success: boolean;
29
- metadata: AdventureMetaData | null;
30
- message?: string;
31
- error?: string;
32
- }>;
33
- export declare function adventuresByUsername(username: string, limit?: number): Promise<{
34
- success: boolean;
35
- tiles: TileProps[];
36
- message?: string;
37
- error?: string;
38
- }>;
39
- export declare function adminAdventuresByHost(username: string): Promise<{
40
- success: boolean;
41
- adventures: Adventure[];
42
- error?: string;
43
- }>;
44
- export declare function adventuresByHost(): Promise<{
45
- success: boolean;
46
- adventures: Adventure[];
47
- message?: string;
48
- error?: string;
49
- }>;
50
- export declare function createAdventure(formData: FormData): Promise<{
51
- success: boolean;
52
- slug?: string;
53
- message?: string;
54
- error?: string;
55
- }>;
56
- export declare function editAdventure(formData: FormData, slug: string): Promise<{
57
- success: boolean;
58
- message?: string;
59
- error?: string;
60
- }>;
61
- export declare function patchAdventureStatus(slug: string, status: string): Promise<{
62
- success: boolean;
63
- error?: string;
64
- }>;
65
- export declare function deleteAdventure(slug: string): Promise<{
66
- success: boolean;
67
- message?: string;
68
- error?: string;
69
- }>;
70
- export declare function getPendingAdventures(): Promise<{
71
- success: boolean;
72
- adventures: Adventure[];
73
- message?: string;
74
- error?: string;
75
- }>;
76
- export declare function approveAdventure(slug: string): Promise<{
77
- success: boolean;
78
- message?: string;
79
- error?: string;
80
- }>;
81
- export declare function rejectAdventure(slug: string, rejectionReason: string): Promise<{
82
- success: boolean;
83
- message?: string;
84
- error?: string;
85
- }>;
86
- export declare function getAdventureBookingsAdmin(slugOrId: string): Promise<{
87
- success: boolean;
88
- bookings: any[];
89
- error?: string;
90
- }>;
91
- export declare function submitAdventureQuery(slug: string, payload: {
92
- name?: string;
93
- email?: string;
94
- phone?: string;
95
- message: string;
96
- preferredDate?: string | null;
97
- preferredTime?: string | null;
98
- numberOfPeople?: number;
99
- }): Promise<{
100
- success: boolean;
101
- message?: string;
102
- error?: string;
103
- }>;
104
- //# sourceMappingURL=adventure.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adventure.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/adventure.ts"],"names":[],"mappings":"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"}
@@ -1,203 +0,0 @@
1
- import { get, patch, post, del } from "./fetcher";
2
- import { calculatePricingStrategyDisplayUnitPrice, getPrimaryPricingStrategy, getPricingCurrency } from "../models/pricing";
3
- // ─── Public ───────────────────────────────────────────────────────────────────
4
- export async function getAdventureTiles(limit, filters) {
5
- try {
6
- let endpoint = `/adventures/getAllAdventureTiles?status=open`;
7
- if (limit)
8
- endpoint += `&limit=${limit}`;
9
- if (filters?.activityType)
10
- endpoint += `&activityType=${filters.activityType}`;
11
- if (filters?.difficulty)
12
- endpoint += `&difficulty=${filters.difficulty}`;
13
- if (filters?.sort)
14
- endpoint += `&sort=${filters.sort}`;
15
- const data = await get(endpoint);
16
- return {
17
- success: true,
18
- message: data.message,
19
- tiles: data.data.map(adventureToTile),
20
- };
21
- }
22
- catch (error) {
23
- console.error("Failed to fetch adventure tiles:", error);
24
- return { success: false, error: error.message, tiles: [] };
25
- }
26
- }
27
- export async function trendingAdventureTiles(limit) {
28
- return getAdventureTiles(limit, { sort: "popular" });
29
- }
30
- export async function adventureDetails(slug, options = {}) {
31
- try {
32
- const query = options.edit ? "?context=edit" : "";
33
- const data = await get(`/adventures/getAdventure/${slug}${query}`);
34
- return { success: true, message: data.message, adventure: data.data };
35
- }
36
- catch (error) {
37
- console.error("Failed to fetch adventure details:", error);
38
- return { success: false, error: error.message, adventure: null };
39
- }
40
- }
41
- export async function adventureMetaData(slug) {
42
- try {
43
- const data = await get(`/adventures/getAdventure/${slug}`);
44
- const a = data.data;
45
- return {
46
- success: true,
47
- metadata: {
48
- image: a.images?.[0] || "/images/placeholder.svg",
49
- title: a.title,
50
- city: a.city,
51
- state: a.state,
52
- activityType: a.activityType,
53
- difficulty: a.difficulty,
54
- price: calculatePricingStrategyDisplayUnitPrice(getPrimaryPricingStrategy(a)),
55
- currency: getPricingCurrency(a),
56
- },
57
- };
58
- }
59
- catch (error) {
60
- return { success: false, error: error.message, metadata: null };
61
- }
62
- }
63
- export async function adventuresByUsername(username, limit) {
64
- try {
65
- let endpoint = `/adventures/getAdventuresByUsername/${username}`;
66
- if (limit)
67
- endpoint += `?limit=${limit}`;
68
- const data = await get(endpoint);
69
- return { success: true, tiles: data.data.map(adventureToTile) };
70
- }
71
- catch (error) {
72
- return { success: false, error: error.message, tiles: [] };
73
- }
74
- }
75
- export async function adminAdventuresByHost(username) {
76
- try {
77
- const data = await get(`/adventures/getAdventuresByUsername/${username}?status=open,pending,draft,denied,archived,closed`);
78
- return { success: true, adventures: data.data || [] };
79
- }
80
- catch (error) {
81
- return { success: false, adventures: [], error: error.message };
82
- }
83
- }
84
- // ─── Host Dashboard ───────────────────────────────────────────────────────────
85
- export async function adventuresByHost() {
86
- try {
87
- const data = await get(`/adventures/myAdventures`);
88
- return { success: true, message: data.message, adventures: data.data };
89
- }
90
- catch (error) {
91
- return { success: false, error: error.message, adventures: [] };
92
- }
93
- }
94
- export async function createAdventure(formData) {
95
- try {
96
- const data = await post(`/adventures/create`, formData);
97
- return { success: true, slug: data.data, message: data.message };
98
- }
99
- catch (error) {
100
- return { success: false, error: error.message };
101
- }
102
- }
103
- export async function editAdventure(formData, slug) {
104
- try {
105
- const data = await patch(`/adventures/update/${slug}`, formData);
106
- return { success: true, message: data.message };
107
- }
108
- catch (error) {
109
- return { success: false, error: error.message };
110
- }
111
- }
112
- export async function patchAdventureStatus(slug, status) {
113
- try {
114
- await patch(`/adventures/update/${slug}`, { status });
115
- return { success: true };
116
- }
117
- catch (error) {
118
- return { success: false, error: error.message };
119
- }
120
- }
121
- export async function deleteAdventure(slug) {
122
- try {
123
- const data = await del(`/adventures/delete/${slug}`);
124
- return { success: true, message: data.message };
125
- }
126
- catch (error) {
127
- return { success: false, error: error.message };
128
- }
129
- }
130
- // ─── Admin ────────────────────────────────────────────────────────────────────
131
- export async function getPendingAdventures() {
132
- try {
133
- const data = await get(`/admin/adventures?status=all`);
134
- return { success: true, message: data.message, adventures: data.data };
135
- }
136
- catch (error) {
137
- return { success: false, error: error.message, adventures: [] };
138
- }
139
- }
140
- export async function approveAdventure(slug) {
141
- try {
142
- const data = await patch(`/admin/adventures/approve/${slug}`, {});
143
- return { success: true, message: data.message };
144
- }
145
- catch (error) {
146
- return { success: false, error: error.message };
147
- }
148
- }
149
- export async function rejectAdventure(slug, rejectionReason) {
150
- try {
151
- const data = await patch(`/admin/adventures/reject/${slug}`, { rejectionReason });
152
- return { success: true, message: data.message };
153
- }
154
- catch (error) {
155
- return { success: false, error: error.message };
156
- }
157
- }
158
- export async function getAdventureBookingsAdmin(slugOrId) {
159
- try {
160
- const data = await get(`/adventures/host/${slugOrId}/bookings`);
161
- return { success: true, bookings: data.data || [] };
162
- }
163
- catch (error) {
164
- return { success: false, bookings: [], error: error.message };
165
- }
166
- }
167
- export async function submitAdventureQuery(slug, payload) {
168
- try {
169
- const data = await post(`/adventures/getAdventure/${slug}/query`, payload);
170
- return { success: true, message: data.message };
171
- }
172
- catch (error) {
173
- return { success: false, error: error.message };
174
- }
175
- }
176
- // ─── Helper ───────────────────────────────────────────────────────────────────
177
- function adventureToTile(adventure) {
178
- const rawHost = adventure.host ?? adventure.hostId;
179
- const hostName = rawHost?.name ||
180
- rawHost?.username ||
181
- [rawHost?.firstName, rawHost?.lastName].filter(Boolean).join(" ") ||
182
- "";
183
- return {
184
- slug: adventure.slug || "",
185
- image: adventure.images?.[0] || "/images/placeholder.svg",
186
- title: adventure.title || "",
187
- description: adventure.description || "",
188
- location: `${adventure.city}, ${adventure.state}`,
189
- date: adventure.createdAt,
190
- rating: adventure.rating,
191
- price: calculatePricingStrategyDisplayUnitPrice(getPrimaryPricingStrategy(adventure)),
192
- currency: getPricingCurrency(adventure),
193
- duration: adventure.duration,
194
- difficultyLevel: adventure.difficulty?.toLowerCase(),
195
- tileType: "adventures",
196
- host: rawHost
197
- ? {
198
- name: hostName || "Host",
199
- image: rawHost.image || rawHost.profilePic,
200
- }
201
- : undefined,
202
- };
203
- }
@@ -1,35 +0,0 @@
1
- import type { Application } from "../models/application";
2
- export declare function getVolunteerApplicationForm(slug: string): Promise<{
3
- success: boolean;
4
- message?: string;
5
- error?: string;
6
- application: Application | null;
7
- }>;
8
- export declare function applicationDetails(applicationId: string): Promise<{
9
- success: boolean;
10
- message?: string;
11
- error?: string;
12
- application: Application | null;
13
- }>;
14
- export declare function getApplicationsForOpportunity(slug: string): Promise<{
15
- success: boolean;
16
- message?: string;
17
- error?: string;
18
- applications: Application[];
19
- }>;
20
- export declare function saveApplicationForm(formData: FormData): Promise<{
21
- success: boolean;
22
- message?: string;
23
- error?: string;
24
- }>;
25
- export declare function updateApplicationStatus(status: string, id: string): Promise<{
26
- success: boolean;
27
- message?: string;
28
- error?: string;
29
- }>;
30
- export declare function editApplication(formData: FormData, id: string): Promise<{
31
- success: boolean;
32
- message?: string;
33
- error?: string;
34
- }>;
35
- //# sourceMappingURL=application.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/application.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAiGzD,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CACjC,CAAC,CAYD;AAuFD,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CACjC,CAAC,CAYD;AAuFD,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACzE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,CAAC,CAYD;AAuFD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBjE;AAuFD,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBjE;AAuFD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBjE"}