@churchapps/apphelper 0.18.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ImageEditor.d.ts.map +1 -1
- package/dist/components/ImageEditor.js +0 -2
- package/dist/components/ImageEditor.js.map +1 -1
- package/dist/components/PageHeader.d.ts +4 -0
- package/dist/components/PageHeader.d.ts.map +1 -1
- package/dist/components/PageHeader.js +23 -26
- package/dist/components/PageHeader.js.map +1 -1
- package/dist/components/conversations/Conversations.d.ts +1 -7
- package/dist/components/conversations/Conversations.d.ts.map +1 -1
- package/dist/components/conversations/Conversations.js +1 -7
- package/dist/components/conversations/Conversations.js.map +1 -1
- package/dist/components/header/SiteHeader.d.ts.map +1 -1
- package/dist/components/header/SiteHeader.js +8 -12
- package/dist/components/header/SiteHeader.js.map +1 -1
- package/dist/components/notes/AddNote.d.ts.map +1 -1
- package/dist/components/notes/AddNote.js +2 -6
- package/dist/components/notes/AddNote.js.map +1 -1
- package/dist/components/notes/Notes.d.ts.map +1 -1
- package/dist/components/notes/Notes.js +3 -8
- package/dist/components/notes/Notes.js.map +1 -1
- package/dist/components/notes/SubscriptionToggle.d.ts +3 -19
- package/dist/components/notes/SubscriptionToggle.d.ts.map +1 -1
- package/dist/components/notes/SubscriptionToggle.js +3 -19
- package/dist/components/notes/SubscriptionToggle.js.map +1 -1
- package/dist/components/wrapper/PrivateMessageDetails.d.ts.map +1 -1
- package/dist/components/wrapper/PrivateMessageDetails.js +0 -2
- package/dist/components/wrapper/PrivateMessageDetails.js.map +1 -1
- package/dist/donations/components/CardForm.js.map +1 -1
- package/dist/donations/components/KingdomFundingTokenForm.d.ts.map +1 -1
- package/dist/donations/components/KingdomFundingTokenForm.js +2 -6
- package/dist/donations/components/KingdomFundingTokenForm.js.map +1 -1
- package/dist/donations/components/MultiGatewayDonationForm.d.ts.map +1 -1
- package/dist/donations/components/MultiGatewayDonationForm.js +8 -18
- package/dist/donations/components/MultiGatewayDonationForm.js.map +1 -1
- package/dist/donations/components/NonAuthDonation.d.ts.map +1 -1
- package/dist/donations/components/NonAuthDonation.js +0 -3
- package/dist/donations/components/NonAuthDonation.js.map +1 -1
- package/dist/donations/components/NonAuthDonationInner.d.ts.map +1 -1
- package/dist/donations/components/NonAuthDonationInner.js +1 -9
- package/dist/donations/components/NonAuthDonationInner.js.map +1 -1
- package/dist/donations/components/PayPalHostedFields.d.ts.map +1 -1
- package/dist/donations/components/PayPalHostedFields.js +0 -1
- package/dist/donations/components/PayPalHostedFields.js.map +1 -1
- package/dist/donations/components/PayPalNonAuthDonationInner.d.ts.map +1 -1
- package/dist/donations/components/PayPalNonAuthDonationInner.js +3 -11
- package/dist/donations/components/PayPalNonAuthDonationInner.js.map +1 -1
- package/dist/donations/components/PaymentMethods.d.ts.map +1 -1
- package/dist/donations/components/PaymentMethods.js +3 -14
- package/dist/donations/components/PaymentMethods.js.map +1 -1
- package/dist/donations/components/RecurringDonations.d.ts.map +1 -1
- package/dist/donations/components/RecurringDonations.js +1 -6
- package/dist/donations/components/RecurringDonations.js.map +1 -1
- package/dist/donations/helpers/DonationHelper.d.ts.map +1 -1
- package/dist/donations/helpers/DonationHelper.js +1 -4
- package/dist/donations/helpers/DonationHelper.js.map +1 -1
- package/dist/donations/providers/PayPalProvider.d.ts.map +1 -1
- package/dist/donations/providers/PayPalProvider.js +2 -9
- package/dist/donations/providers/PayPalProvider.js.map +1 -1
- package/dist/donations/providers/StripeInstanceContext.d.ts.map +1 -1
- package/dist/donations/providers/StripeInstanceContext.js +1 -3
- package/dist/donations/providers/StripeInstanceContext.js.map +1 -1
- package/dist/donations/providers/StripeProvider.d.ts.map +1 -1
- package/dist/donations/providers/StripeProvider.js +4 -12
- package/dist/donations/providers/StripeProvider.js.map +1 -1
- package/dist/donations/providers/index.d.ts.map +1 -1
- package/dist/donations/providers/index.js +0 -3
- package/dist/donations/providers/index.js.map +1 -1
- package/dist/donations/providers/registry.d.ts.map +1 -1
- package/dist/donations/providers/registry.js +1 -3
- package/dist/donations/providers/registry.js.map +1 -1
- package/dist/donations/providers/types.d.ts +2 -0
- package/dist/donations/providers/types.d.ts.map +1 -1
- package/dist/forms/components/FormSubmissionEdit.d.ts.map +1 -1
- package/dist/forms/components/FormSubmissionEdit.js +0 -3
- package/dist/forms/components/FormSubmissionEdit.js.map +1 -1
- package/dist/helpers/ConversationStore.d.ts +1 -13
- package/dist/helpers/ConversationStore.d.ts.map +1 -1
- package/dist/helpers/ConversationStore.js +4 -21
- package/dist/helpers/ConversationStore.js.map +1 -1
- package/dist/helpers/NotificationService.d.ts +0 -34
- package/dist/helpers/NotificationService.d.ts.map +1 -1
- package/dist/helpers/NotificationService.js +2 -59
- package/dist/helpers/NotificationService.js.map +1 -1
- package/dist/helpers/PresenceStore.d.ts +1 -8
- package/dist/helpers/PresenceStore.d.ts.map +1 -1
- package/dist/helpers/PresenceStore.js +1 -8
- package/dist/helpers/PresenceStore.js.map +1 -1
- package/dist/helpers/SocketHelper.d.ts.map +1 -1
- package/dist/helpers/SocketHelper.js +3 -18
- package/dist/helpers/SocketHelper.js.map +1 -1
- package/dist/helpers/SubscriptionManager.d.ts +1 -8
- package/dist/helpers/SubscriptionManager.d.ts.map +1 -1
- package/dist/helpers/SubscriptionManager.js +3 -22
- package/dist/helpers/SubscriptionManager.js.map +1 -1
- package/dist/helpers/WebPushHelper.d.ts +3 -17
- package/dist/helpers/WebPushHelper.d.ts.map +1 -1
- package/dist/helpers/WebPushHelper.js +3 -17
- package/dist/helpers/WebPushHelper.js.map +1 -1
- package/dist/helpers/createEmotionCache.d.ts.map +1 -1
- package/dist/helpers/createEmotionCache.js +1 -3
- package/dist/helpers/createEmotionCache.js.map +1 -1
- package/dist/hooks/useConversation.d.ts +1 -9
- package/dist/hooks/useConversation.d.ts.map +1 -1
- package/dist/hooks/useConversation.js +4 -12
- package/dist/hooks/useConversation.js.map +1 -1
- package/dist/hooks/useNotifications.d.ts +1 -19
- package/dist/hooks/useNotifications.d.ts.map +1 -1
- package/dist/hooks/useNotifications.js +1 -24
- package/dist/hooks/useNotifications.js.map +1 -1
- package/dist/login/LoginPage.d.ts.map +1 -1
- package/dist/login/LoginPage.js +11 -14
- package/dist/login/LoginPage.js.map +1 -1
- package/dist/login/components/Login.d.ts.map +1 -1
- package/dist/login/components/Login.js +2 -1
- package/dist/login/components/Login.js.map +1 -1
- package/dist/login/components/Register.d.ts.map +1 -1
- package/dist/login/components/Register.js +4 -3
- package/dist/login/components/Register.js.map +1 -1
- package/dist/login/components/SsoButtons.d.ts +3 -0
- package/dist/login/components/SsoButtons.d.ts.map +1 -0
- package/dist/login/components/SsoButtons.js +51 -0
- package/dist/login/components/SsoButtons.js.map +1 -0
- package/dist/login/index.d.ts +1 -0
- package/dist/login/index.d.ts.map +1 -1
- package/dist/login/index.js +1 -0
- package/dist/login/index.js.map +1 -1
- package/dist/markdown/components/htmlEditor/plugins/HtmlToolbarPlugin.d.ts.map +1 -1
- package/dist/markdown/components/htmlEditor/plugins/HtmlToolbarPlugin.js +0 -7
- package/dist/markdown/components/htmlEditor/plugins/HtmlToolbarPlugin.js.map +1 -1
- package/dist/markdown/components/htmlEditor/utils/cleanHtml.d.ts +1 -4
- package/dist/markdown/components/htmlEditor/utils/cleanHtml.d.ts.map +1 -1
- package/dist/markdown/components/htmlEditor/utils/cleanHtml.js +1 -17
- package/dist/markdown/components/htmlEditor/utils/cleanHtml.js.map +1 -1
- package/dist/markdown/components/markdownEditor/MarkdownPreviewLight.d.ts.map +1 -1
- package/dist/markdown/components/markdownEditor/MarkdownPreviewLight.js +5 -10
- package/dist/markdown/components/markdownEditor/MarkdownPreviewLight.js.map +1 -1
- package/dist/markdown/components/markdownEditor/plugins/FloatingTextMenu/FloatingTextFormatToolbarPlugin.d.ts.map +1 -1
- package/dist/markdown/components/markdownEditor/plugins/FloatingTextMenu/FloatingTextFormatToolbarPlugin.js +4 -11
- package/dist/markdown/components/markdownEditor/plugins/FloatingTextMenu/FloatingTextFormatToolbarPlugin.js.map +1 -1
- package/dist/markdown/components/markdownEditor/plugins/ToolbarPlugin.d.ts.map +1 -1
- package/dist/markdown/components/markdownEditor/plugins/ToolbarPlugin.js +0 -2
- package/dist/markdown/components/markdownEditor/plugins/ToolbarPlugin.js.map +1 -1
- package/dist/markdown/components/markdownEditor/plugins/customLink/FloatingLinkEditor.d.ts.map +1 -1
- package/dist/markdown/components/markdownEditor/plugins/customLink/FloatingLinkEditor.js +1 -3
- package/dist/markdown/components/markdownEditor/plugins/customLink/FloatingLinkEditor.js.map +1 -1
- package/dist/public/locales/en.json +7 -3
- package/dist/website/components/Element.d.ts.map +1 -1
- package/dist/website/components/Element.js +2 -3
- package/dist/website/components/Element.js.map +1 -1
- package/dist/website/components/admin/calendar/CuratedEventCalendar.d.ts.map +1 -1
- package/dist/website/components/admin/calendar/CuratedEventCalendar.js +1 -3
- package/dist/website/components/admin/calendar/CuratedEventCalendar.js.map +1 -1
- package/dist/website/components/elementTypes/CalendarElement.d.ts +1 -5
- package/dist/website/components/elementTypes/CalendarElement.d.ts.map +1 -1
- package/dist/website/components/elementTypes/CalendarElement.js.map +1 -1
- package/dist/website/components/elementTypes/RawHTMLElement.d.ts.map +1 -1
- package/dist/website/components/elementTypes/RawHTMLElement.js +1 -3
- package/dist/website/components/elementTypes/RawHTMLElement.js.map +1 -1
- package/dist/website/components/eventCalendar/EventCalendar.d.ts.map +1 -1
- package/dist/website/components/eventCalendar/EventCalendar.js +1 -3
- package/dist/website/components/eventCalendar/EventCalendar.js.map +1 -1
- package/dist/website/components/groups/GroupCard.d.ts.map +1 -1
- package/dist/website/components/groups/GroupCard.js.map +1 -1
- package/dist/website/components/groups/GroupsBrowser.d.ts +2 -2
- package/dist/website/components/groups/GroupsBrowser.d.ts.map +1 -1
- package/dist/website/components/video/LiveStream.d.ts.map +1 -1
- package/dist/website/components/video/LiveStream.js.map +1 -1
- package/dist/website/helpers/StyleHelper.d.ts.map +1 -1
- package/dist/website/helpers/StyleHelper.js +1 -9
- package/dist/website/helpers/StyleHelper.js.map +1 -1
- package/dist/website/helpers/imageOptimizer.d.ts.map +1 -1
- package/dist/website/helpers/imageOptimizer.js +0 -3
- package/dist/website/helpers/imageOptimizer.js.map +1 -1
- package/dist/website/helpers/interfaces.d.ts +1 -7
- package/dist/website/helpers/interfaces.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -10,9 +10,6 @@ export class NotificationService {
|
|
|
10
10
|
this.isInitialized = false;
|
|
11
11
|
this.currentPersonId = null;
|
|
12
12
|
this.loadTimeout = null;
|
|
13
|
-
/**
|
|
14
|
-
* Initialize the notification service with user context
|
|
15
|
-
*/
|
|
16
13
|
this.initInFlight = null;
|
|
17
14
|
this.changeUnsubscribe = null;
|
|
18
15
|
}
|
|
@@ -25,18 +22,14 @@ export class NotificationService {
|
|
|
25
22
|
async initialize(context) {
|
|
26
23
|
const targetPersonId = context?.person?.id || null;
|
|
27
24
|
const targetChurchId = context?.userChurch?.church?.id || null;
|
|
28
|
-
// Re-init when context changes (church switch / different sign-in)
|
|
29
25
|
if (this.isInitialized) {
|
|
30
26
|
if (targetPersonId === this.currentPersonId && targetChurchId === SocketHelper.getPersonChurch().churchId) {
|
|
31
27
|
return;
|
|
32
28
|
}
|
|
33
|
-
// context changed — tear down room subscriptions and conversation cache so they re-join under the new tenant
|
|
34
29
|
SubscriptionManager.reset();
|
|
35
30
|
ConversationStore.reset();
|
|
36
31
|
}
|
|
37
|
-
// Coalesce concurrent
|
|
38
|
-
// don't each open their own WebSocket. The first caller drives the init; everyone
|
|
39
|
-
// else awaits the same promise.
|
|
32
|
+
// Coalesce concurrent calls to avoid multiple WebSocket opens.
|
|
40
33
|
if (this.initInFlight)
|
|
41
34
|
return this.initInFlight;
|
|
42
35
|
this.initInFlight = this.runInitialize(targetPersonId, targetChurchId, context);
|
|
@@ -50,28 +43,23 @@ export class NotificationService {
|
|
|
50
43
|
async runInitialize(targetPersonId, targetChurchId, context) {
|
|
51
44
|
try {
|
|
52
45
|
this.currentPersonId = targetPersonId;
|
|
53
|
-
// Initialize WebSocket connection (cleanup is idempotent — re-init reconnects cleanly)
|
|
54
46
|
await SocketHelper.init();
|
|
55
|
-
// Bind the singleton change listener once so future church switches reset cleanly
|
|
56
47
|
if (!this.changeUnsubscribe) {
|
|
57
48
|
this.changeUnsubscribe = SocketHelper.onPersonChurchChange(() => {
|
|
58
49
|
SubscriptionManager.reset();
|
|
59
50
|
ConversationStore.reset();
|
|
60
51
|
});
|
|
61
52
|
}
|
|
62
|
-
// Set person/church context for websocket — triggers join of "alerts" room
|
|
63
53
|
if (targetPersonId && targetChurchId) {
|
|
64
54
|
SocketHelper.setPersonChurch({ personId: targetPersonId, churchId: targetChurchId });
|
|
65
55
|
}
|
|
66
56
|
else {
|
|
67
57
|
console.warn("⚠️ NotificationService: Missing person/church IDs, cannot set socket context");
|
|
68
58
|
}
|
|
69
|
-
// Register handlers for notification updates + conversation broadcasts + reconnect rejoin
|
|
70
59
|
this.registerWebSocketHandlers();
|
|
71
60
|
ConversationStore.ensureHandlers();
|
|
72
61
|
PresenceStore.ensureHandlers();
|
|
73
62
|
SubscriptionManager.setupRejoin();
|
|
74
|
-
// Load initial notification counts
|
|
75
63
|
await this.loadNotificationCounts();
|
|
76
64
|
this.isInitialized = true;
|
|
77
65
|
}
|
|
@@ -80,11 +68,7 @@ export class NotificationService {
|
|
|
80
68
|
throw error;
|
|
81
69
|
}
|
|
82
70
|
}
|
|
83
|
-
/**
|
|
84
|
-
* Register websocket handlers for real-time notification updates
|
|
85
|
-
*/
|
|
86
71
|
registerWebSocketHandlers() {
|
|
87
|
-
// Handler for new private messages
|
|
88
72
|
SocketHelper.addHandler("privateMessage", "NotificationService-PM", (data) => {
|
|
89
73
|
try {
|
|
90
74
|
if (!this.applyCountsFromPayload(data))
|
|
@@ -94,7 +78,6 @@ export class NotificationService {
|
|
|
94
78
|
console.error("❌ NotificationService: Error handling privateMessage socket event:", error);
|
|
95
79
|
}
|
|
96
80
|
});
|
|
97
|
-
// Handler for general notifications
|
|
98
81
|
SocketHelper.addHandler("notification", "NotificationService-Notification", (data) => {
|
|
99
82
|
try {
|
|
100
83
|
if (!this.applyCountsFromPayload(data))
|
|
@@ -104,9 +87,7 @@ export class NotificationService {
|
|
|
104
87
|
console.error("❌ NotificationService: Error handling notification socket event:", error);
|
|
105
88
|
}
|
|
106
89
|
});
|
|
107
|
-
// Handler for message updates that could affect notification counts
|
|
108
90
|
SocketHelper.addHandler("message", "NotificationService-MessageUpdate", (data) => {
|
|
109
|
-
// Only update counts if the message update involves the current person
|
|
110
91
|
if (data?.message?.personId === this.currentPersonId ||
|
|
111
92
|
data?.notifyPersonId === this.currentPersonId) {
|
|
112
93
|
try {
|
|
@@ -117,15 +98,10 @@ export class NotificationService {
|
|
|
117
98
|
}
|
|
118
99
|
}
|
|
119
100
|
});
|
|
120
|
-
// Handler for reconnect events
|
|
121
101
|
SocketHelper.addHandler("reconnect", "NotificationService-Reconnect", (data) => {
|
|
122
|
-
this.loadNotificationCounts();
|
|
102
|
+
this.loadNotificationCounts();
|
|
123
103
|
});
|
|
124
104
|
}
|
|
125
|
-
/**
|
|
126
|
-
* If the socket payload carries fresh counts, apply them directly and skip the
|
|
127
|
-
* extra API round-trip. Returns true when counts were applied.
|
|
128
|
-
*/
|
|
129
105
|
applyCountsFromPayload(data) {
|
|
130
106
|
const counts = data?.counts;
|
|
131
107
|
if (!counts || typeof counts !== "object")
|
|
@@ -137,9 +113,6 @@ export class NotificationService {
|
|
|
137
113
|
this.updateCounts({ notificationCount, pmCount });
|
|
138
114
|
return true;
|
|
139
115
|
}
|
|
140
|
-
/**
|
|
141
|
-
* Load notification counts from the API with debouncing
|
|
142
|
-
*/
|
|
143
116
|
debouncedLoadNotificationCounts() {
|
|
144
117
|
if (this.loadTimeout) {
|
|
145
118
|
clearTimeout(this.loadTimeout);
|
|
@@ -148,18 +121,13 @@ export class NotificationService {
|
|
|
148
121
|
this.loadNotificationCounts();
|
|
149
122
|
}, 300); // 300ms debounce
|
|
150
123
|
}
|
|
151
|
-
/**
|
|
152
|
-
* Load notification counts from the API
|
|
153
|
-
*/
|
|
154
124
|
async loadNotificationCounts() {
|
|
155
125
|
try {
|
|
156
|
-
// Use the unreadCount endpoint which returns both notification and PM counts
|
|
157
126
|
const counts = await ApiHelper.get("/notifications/unreadCount", "MessagingApi");
|
|
158
127
|
const newCounts = {
|
|
159
128
|
notificationCount: counts?.notificationCount || 0,
|
|
160
129
|
pmCount: counts?.pmCount || 0
|
|
161
130
|
};
|
|
162
|
-
// Update counts and notify listeners
|
|
163
131
|
this.updateCounts(newCounts);
|
|
164
132
|
}
|
|
165
133
|
catch (error) {
|
|
@@ -172,15 +140,11 @@ export class NotificationService {
|
|
|
172
140
|
// Don't throw - just log the error and keep existing counts
|
|
173
141
|
}
|
|
174
142
|
}
|
|
175
|
-
/**
|
|
176
|
-
* Update counts and notify all listeners
|
|
177
|
-
*/
|
|
178
143
|
updateCounts(newCounts) {
|
|
179
144
|
const countsChanged = this.counts.notificationCount !== newCounts.notificationCount ||
|
|
180
145
|
this.counts.pmCount !== newCounts.pmCount;
|
|
181
146
|
if (countsChanged) {
|
|
182
147
|
this.counts = { ...newCounts };
|
|
183
|
-
// Notify all listeners
|
|
184
148
|
this.listeners.forEach((listener, index) => {
|
|
185
149
|
try {
|
|
186
150
|
listener(this.counts);
|
|
@@ -191,45 +155,28 @@ export class NotificationService {
|
|
|
191
155
|
});
|
|
192
156
|
}
|
|
193
157
|
}
|
|
194
|
-
/**
|
|
195
|
-
* Subscribe to notification count changes
|
|
196
|
-
*/
|
|
197
158
|
subscribe(listener) {
|
|
198
159
|
this.listeners.push(listener);
|
|
199
|
-
// Immediately call with current counts
|
|
200
160
|
listener(this.counts);
|
|
201
|
-
// Return unsubscribe function
|
|
202
161
|
return () => {
|
|
203
162
|
this.listeners = this.listeners.filter(l => l !== listener);
|
|
204
163
|
};
|
|
205
164
|
}
|
|
206
|
-
/**
|
|
207
|
-
* Get current notification counts
|
|
208
|
-
*/
|
|
209
165
|
getCounts() {
|
|
210
166
|
return { ...this.counts };
|
|
211
167
|
}
|
|
212
|
-
/**
|
|
213
|
-
* Manually refresh notification counts
|
|
214
|
-
*/
|
|
215
168
|
async refresh() {
|
|
216
169
|
await this.loadNotificationCounts();
|
|
217
170
|
}
|
|
218
|
-
/**
|
|
219
|
-
* Cleanup the service
|
|
220
|
-
*/
|
|
221
171
|
cleanup() {
|
|
222
|
-
// Clear any pending timeout
|
|
223
172
|
if (this.loadTimeout) {
|
|
224
173
|
clearTimeout(this.loadTimeout);
|
|
225
174
|
this.loadTimeout = null;
|
|
226
175
|
}
|
|
227
|
-
// Remove websocket handlers
|
|
228
176
|
SocketHelper.removeHandler("NotificationService-PM");
|
|
229
177
|
SocketHelper.removeHandler("NotificationService-Notification");
|
|
230
178
|
SocketHelper.removeHandler("NotificationService-MessageUpdate");
|
|
231
179
|
SocketHelper.removeHandler("NotificationService-Reconnect");
|
|
232
|
-
// Clear listeners
|
|
233
180
|
this.listeners = [];
|
|
234
181
|
if (this.changeUnsubscribe) {
|
|
235
182
|
this.changeUnsubscribe();
|
|
@@ -237,14 +184,10 @@ export class NotificationService {
|
|
|
237
184
|
}
|
|
238
185
|
SubscriptionManager.reset();
|
|
239
186
|
ConversationStore.reset();
|
|
240
|
-
// Reset state
|
|
241
187
|
this.counts = { notificationCount: 0, pmCount: 0 };
|
|
242
188
|
this.currentPersonId = null;
|
|
243
189
|
this.isInitialized = false;
|
|
244
190
|
}
|
|
245
|
-
/**
|
|
246
|
-
* Check if service is initialized
|
|
247
|
-
*/
|
|
248
191
|
isReady() {
|
|
249
192
|
return this.isInitialized && SocketHelper.isConnected();
|
|
250
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationService.js","sourceRoot":"","sources":["../../src/helpers/NotificationService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAwB,MAAM,qBAAqB,CAAC;AAOtE,MAAM,OAAO,mBAAmB;IAQ9B;QANQ,WAAM,GAAuB,EAAE,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAClE,cAAS,GAAgD,EAAE,CAAC;QAC5D,kBAAa,GAAY,KAAK,CAAC;QAC/B,oBAAe,GAAkB,IAAI,CAAC;QACtC,gBAAW,GAAe,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"NotificationService.js","sourceRoot":"","sources":["../../src/helpers/NotificationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,14 +9,7 @@ export interface PresenceSnapshot {
|
|
|
9
9
|
viewers: PresenceViewer[];
|
|
10
10
|
}
|
|
11
11
|
type Listener = (snapshot: PresenceSnapshot) => void;
|
|
12
|
-
/**
|
|
13
|
-
* In-memory cache of presence (attendance) per conversationId. Mirrors ConversationStore's
|
|
14
|
-
* pattern: registers the "attendance" socket handler exactly once, applies broadcasts to
|
|
15
|
-
* whichever conversations are currently open, and notifies subscribers.
|
|
16
|
-
*
|
|
17
|
-
* Server-side, attendance is derived from the Connection rows joined to the conversation
|
|
18
|
-
* and rebroadcast on every join/leave, so consumers see updates without polling.
|
|
19
|
-
*/
|
|
12
|
+
/** In-memory cache of presence per conversation; socket handler registered once, rebroadcast on server join/leave so no polling needed */
|
|
20
13
|
export declare class PresenceStore {
|
|
21
14
|
private static snapshots;
|
|
22
15
|
private static listeners;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresenceStore.d.ts","sourceRoot":"","sources":["../../src/helpers/PresenceStore.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAAG,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AACvF,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,KAAK,QAAQ,GAAG,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAErD
|
|
1
|
+
{"version":3,"file":"PresenceStore.d.ts","sourceRoot":"","sources":["../../src/helpers/PresenceStore.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAAG,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AACvF,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,KAAK,QAAQ,GAAG,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAErD,0IAA0I;AAC1I,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAA4C;IACpE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAyC;IACjE,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAS;IAE1C,MAAM,CAAC,cAAc,aAYnB;IAEF,MAAM,CAAC,KAAK,aAGV;IAEF,MAAM,CAAC,GAAG,GAAI,gBAAgB,MAAM,KAAG,gBAAgB,GAAG,IAAI,CAE5D;IAEF,MAAM,CAAC,SAAS,GAAI,gBAAgB,MAAM,EAAE,UAAU,QAAQ,KAAG,CAAC,MAAM,IAAI,CAAC,CAgB3E;IAEF,OAAO,CAAC,MAAM,CAAC,MAAM,CAOnB;IAEF,OAAO,CAAC,MAAM,CAAC,SAAS,CAKtB;IAEF,OAAO,CAAC,MAAM,CAAC,MAAM,CAQnB;IAEF,MAAM,CAAC,MAAM,GAAI,gBAAgB,MAAM,KAAG,IAAI,CAG5C;CACH"}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { SocketHelper } from "./SocketHelper";
|
|
2
|
-
/**
|
|
3
|
-
* In-memory cache of presence (attendance) per conversationId. Mirrors ConversationStore's
|
|
4
|
-
* pattern: registers the "attendance" socket handler exactly once, applies broadcasts to
|
|
5
|
-
* whichever conversations are currently open, and notifies subscribers.
|
|
6
|
-
*
|
|
7
|
-
* Server-side, attendance is derived from the Connection rows joined to the conversation
|
|
8
|
-
* and rebroadcast on every join/leave, so consumers see updates without polling.
|
|
9
|
-
*/
|
|
2
|
+
/** In-memory cache of presence per conversation; socket handler registered once, rebroadcast on server join/leave so no polling needed */
|
|
10
3
|
export class PresenceStore {
|
|
11
4
|
}
|
|
12
5
|
PresenceStore.snapshots = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresenceStore.js","sourceRoot":"","sources":["../../src/helpers/PresenceStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAW9C
|
|
1
|
+
{"version":3,"file":"PresenceStore.js","sourceRoot":"","sources":["../../src/helpers/PresenceStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SocketHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/SocketHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,4BAA4B,EAAE,sBAAsB,EAAmD,MAAM,qBAAqB,CAAC;AAEjK,qBAAa,YAAY;IACvB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IACzB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,cAAc,EAAE,4BAA4B,EAAE,CAAM;IAC3D,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA0E;IACzG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAkB;IAE5C,MAAM,CAAC,eAAe,GAAI,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,
|
|
1
|
+
{"version":3,"file":"SocketHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/SocketHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,4BAA4B,EAAE,sBAAsB,EAAmD,MAAM,qBAAqB,CAAC;AAEjK,qBAAa,YAAY;IACvB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IACzB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,cAAc,EAAE,4BAA4B,EAAE,CAAM;IAC3D,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA0E;IACzG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAkB;IAE5C,MAAM,CAAC,eAAe,GAAI,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,UAclE;IAEF,MAAM,CAAC,eAAe,QAAO;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAEjE;IAEF,MAAM,CAAC,oBAAoB,GAAI,UAAU,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,IAAI,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,KAAK,IAAI,gBAKzJ;IAEF,OAAO,CAAC,MAAM,CAAC,eAAe,CAAiI;IAE/J,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAyC;IAEzE,MAAM,CAAC,eAAe,GAAI,UAAU,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,gBAK5D;IAEF,MAAM,CAAC,qBAAqB,aAY1B;IAEF,MAAM,CAAC,IAAI,sBAqDT;IAEF,MAAM,CAAC,UAAU,GAAI,QAAQ,MAAM,EAAE,IAAI,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,UAOjF;IAEF,MAAM,CAAC,aAAa,GAAI,IAAI,MAAM,UAEhC;IAEF,MAAM,CAAC,sBAAsB,GAAI,QAAQ,MAAM,UAE7C;IAEF,MAAM,CAAC,gBAAgB,aAErB;IAEF,MAAM,CAAC,aAAa,GAAI,SAAS,sBAAsB,UA2BrD;IAEF,MAAM,CAAC,OAAO,aAaZ;IAEF,MAAM,CAAC,UAAU,aAEf;IAEF,MAAM,CAAC,WAAW,QAAO,OAAO,CAE9B;IAEF,MAAM,CAAC,kBAAkB,QAAO,MAAM,CAUpC;IAEF,MAAM,CAAC,kBAAkB,mBAWvB;CAEH"}
|
|
@@ -13,9 +13,6 @@ SocketHelper.setPersonChurch = (pc) => {
|
|
|
13
13
|
const personChanged = pc.personId !== _a.personIdChurchId.personId;
|
|
14
14
|
if (!churchChanged && !personChanged)
|
|
15
15
|
return;
|
|
16
|
-
// If we're already connected and the church/person changed, fire the changed callbacks
|
|
17
|
-
// so caches scoped to the previous tenant get cleared. Each subscriber decides whether
|
|
18
|
-
// it cares about church-only vs person-only changes.
|
|
19
16
|
if (_a.personIdChurchId.churchId || _a.personIdChurchId.personId) {
|
|
20
17
|
_a.changeListeners.forEach((cb) => {
|
|
21
18
|
try {
|
|
@@ -59,12 +56,10 @@ SocketHelper.createAlertConnection = () => {
|
|
|
59
56
|
}
|
|
60
57
|
};
|
|
61
58
|
SocketHelper.init = async () => {
|
|
62
|
-
// Idempotent:
|
|
59
|
+
// Idempotent: don't tear down an open or connecting socket; wait for socketId instead.
|
|
63
60
|
if (_a.socket && (_a.socket.readyState === _a.socket.OPEN || _a.socket.readyState === _a.socket.CONNECTING)) {
|
|
64
|
-
// If we already have a socketId, the connection is fully usable — return immediately.
|
|
65
61
|
if (_a.socketId)
|
|
66
62
|
return;
|
|
67
|
-
// Otherwise wait briefly for socketId to arrive instead of tearing down.
|
|
68
63
|
await new Promise((resolve) => {
|
|
69
64
|
const start = Date.now();
|
|
70
65
|
const tick = () => {
|
|
@@ -141,8 +136,7 @@ SocketHelper.handleMessage = (payload) => {
|
|
|
141
136
|
const previousId = _a.socketId;
|
|
142
137
|
_a.socketId = payload.data;
|
|
143
138
|
_a.createAlertConnection();
|
|
144
|
-
// Notify
|
|
145
|
-
// to flush rooms that called joinRoom before the socket finished connecting.
|
|
139
|
+
// Notify SubscriptionManager to flush pending joinRoom calls.
|
|
146
140
|
if (!previousId) {
|
|
147
141
|
_a.socketIdListeners.forEach((cb) => {
|
|
148
142
|
try {
|
|
@@ -172,14 +166,13 @@ SocketHelper.handleMessage = (payload) => {
|
|
|
172
166
|
};
|
|
173
167
|
SocketHelper.cleanup = () => {
|
|
174
168
|
_a.isCleanedUp = true;
|
|
175
|
-
// Close socket connection
|
|
176
169
|
if (_a.socket && _a.socket.readyState !== _a.socket.CLOSED) {
|
|
177
170
|
try {
|
|
178
171
|
_a.socket.close();
|
|
179
172
|
}
|
|
180
173
|
catch { /* ignore */ }
|
|
181
174
|
}
|
|
182
|
-
//
|
|
175
|
+
// Preserve handlers across reconnects.
|
|
183
176
|
_a.socket = null;
|
|
184
177
|
_a.socketId = null;
|
|
185
178
|
_a.personIdChurchId = { personId: "", churchId: "" };
|
|
@@ -201,7 +194,6 @@ SocketHelper.getConnectionState = () => {
|
|
|
201
194
|
default: return "UNKNOWN";
|
|
202
195
|
}
|
|
203
196
|
};
|
|
204
|
-
// Global cleanup on window unload
|
|
205
197
|
SocketHelper.setupGlobalCleanup = () => {
|
|
206
198
|
if (typeof window !== "undefined") {
|
|
207
199
|
const cleanup = () => {
|
|
@@ -209,13 +201,6 @@ SocketHelper.setupGlobalCleanup = () => {
|
|
|
209
201
|
};
|
|
210
202
|
window.addEventListener("beforeunload", cleanup);
|
|
211
203
|
window.addEventListener("unload", cleanup);
|
|
212
|
-
// Also cleanup on page visibility change (when tab is closed)
|
|
213
|
-
document.addEventListener("visibilitychange", () => {
|
|
214
|
-
if (document.visibilityState === "hidden") {
|
|
215
|
-
// Optional: cleanup when tab becomes hidden
|
|
216
|
-
// SocketHelper.cleanup();
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
204
|
return cleanup;
|
|
220
205
|
}
|
|
221
206
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SocketHelper.js","sourceRoot":"","sources":["../../src/helpers/SocketHelper.ts"],"names":[],"mappings":";AAAA,OAAO,EAA6E,SAAS,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEjK,MAAM,OAAO,YAAY;;;AAGhB,2BAAc,GAAmC,EAAE,AAArC,CAAsC;AAC5C,6BAAgB,GAA2C,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,AAAzE,CAA0E;AAC1F,wBAAW,GAAY,KAAK,AAAjB,CAAkB;AAErC,4BAAe,GAAG,CAAC,EAA0C,EAAE,EAAE;IACtE,IAAI,CAAC,EAAE,EAAE,QAAQ,IAAI,CAAC,EAAE,EAAE,QAAQ;QAAE,OAAO;IAC3C,MAAM,aAAa,GAAG,EAAE,CAAC,QAAQ,KAAK,EAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACrE,MAAM,aAAa,GAAG,EAAE,CAAC,QAAQ,KAAK,EAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACrE,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa;QAAE,OAAO;IAE7C,
|
|
1
|
+
{"version":3,"file":"SocketHelper.js","sourceRoot":"","sources":["../../src/helpers/SocketHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tracks which conversation rooms the current tab has joined.
|
|
3
|
-
* Backed by a single WebSocket (SocketHelper) and the server's /messaging/connections endpoint.
|
|
4
|
-
*
|
|
5
|
-
* - joinRoom: ref-counted POST /connections
|
|
6
|
-
* - leaveRoom: decrements ref; DELETE /connections/:churchId/:conversationId/:socketId at zero
|
|
7
|
-
* - rejoinAll: re-issues every active POST after a socket reconnect
|
|
8
|
-
*/
|
|
1
|
+
/** Tracks conversation room subscriptions via ref-counted WebSocket connections. */
|
|
9
2
|
export declare class SubscriptionManager {
|
|
10
3
|
private static counts;
|
|
11
4
|
private static rejoinHandlerRegistered;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionManager.d.ts","sourceRoot":"","sources":["../../src/helpers/SubscriptionManager.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"SubscriptionManager.d.ts","sourceRoot":"","sources":["../../src/helpers/SubscriptionManager.ts"],"names":[],"mappings":"AAGA,oFAAoF;AACpF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAkC;IACvD,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAS;IAE/C,MAAM,CAAC,WAAW,aAahB;IAEF,MAAM,CAAC,QAAQ,GAAU,gBAAgB,MAAM,EAAE,UAAU,MAAM,EAAE,WAAW,MAAM,EAAE,cAAc,MAAM,mBAOxG;IAGF,OAAO,CAAC,MAAM,CAAC,aAAa,CAAyD;IACrF,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAO;IAEvC,MAAM,CAAC,SAAS,GAAU,gBAAgB,MAAM,EAAE,UAAU,MAAM,mBAuBhE;IAEF,MAAM,CAAC,SAAS,sBAOd;IAEF,MAAM,CAAC,KAAK,aAEV;IAEF,MAAM,CAAC,QAAQ,GAAI,UAAU,MAAM,EAAE,gBAAgB,MAAM,KAAG,OAAO,CAEnE;IAEF,OAAO,CAAC,MAAM,CAAC,cAAc,CAc3B;IAEF,OAAO,CAAC,MAAM,CAAC,GAAG,CAAiF;CACpG"}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
var _a;
|
|
2
2
|
import { ApiHelper } from "@churchapps/helpers";
|
|
3
3
|
import { SocketHelper } from "./SocketHelper";
|
|
4
|
-
/**
|
|
5
|
-
* Tracks which conversation rooms the current tab has joined.
|
|
6
|
-
* Backed by a single WebSocket (SocketHelper) and the server's /messaging/connections endpoint.
|
|
7
|
-
*
|
|
8
|
-
* - joinRoom: ref-counted POST /connections
|
|
9
|
-
* - leaveRoom: decrements ref; DELETE /connections/:churchId/:conversationId/:socketId at zero
|
|
10
|
-
* - rejoinAll: re-issues every active POST after a socket reconnect
|
|
11
|
-
*/
|
|
4
|
+
/** Tracks conversation room subscriptions via ref-counted WebSocket connections. */
|
|
12
5
|
export class SubscriptionManager {
|
|
13
6
|
}
|
|
14
7
|
_a = SubscriptionManager;
|
|
@@ -21,15 +14,10 @@ SubscriptionManager.setupRejoin = () => {
|
|
|
21
14
|
SocketHelper.addHandler("reconnect", "SubscriptionManager-Rejoin", () => {
|
|
22
15
|
_a.rejoinAll();
|
|
23
16
|
});
|
|
24
|
-
//
|
|
25
|
-
// We record the intent in `counts`; this listener flushes those pending joins to the server
|
|
26
|
-
// as soon as socketId arrives.
|
|
17
|
+
// joinRoom calls may arrive before socketId is ready; flush when ready or if already present.
|
|
27
18
|
SocketHelper.onSocketIdReady(() => {
|
|
28
19
|
_a.rejoinAll();
|
|
29
20
|
});
|
|
30
|
-
// setupRejoin is called from NotificationService.runInitialize *after* SocketHelper.init
|
|
31
|
-
// completes — so socketId may already be present by the time we register the listener.
|
|
32
|
-
// In that case there's no future socketId event to wait for; flush any pending joins now.
|
|
33
21
|
if (SocketHelper.socketId) {
|
|
34
22
|
_a.rejoinAll().catch(() => { });
|
|
35
23
|
}
|
|
@@ -43,12 +31,7 @@ SubscriptionManager.joinRoom = async (conversationId, churchId, personId, displa
|
|
|
43
31
|
_a.setupRejoin();
|
|
44
32
|
await _a.postConnection(conversationId, churchId, personId, displayName);
|
|
45
33
|
};
|
|
46
|
-
//
|
|
47
|
-
// delay later. If joinRoom comes back within that window (React StrictMode dev
|
|
48
|
-
// mount/cleanup/mount, or a useEffect dep update that immediately re-mounts), the
|
|
49
|
-
// pending DELETE is canceled and the server-side row is preserved — preventing the
|
|
50
|
-
// race where the inbound broadcast lands between DELETE and the next POST and
|
|
51
|
-
// finds an empty room.
|
|
34
|
+
// Debounce DELETE to avoid race where broadcast lands between DELETE and next POST (React StrictMode).
|
|
52
35
|
SubscriptionManager.pendingLeaves = new Map();
|
|
53
36
|
SubscriptionManager.LEAVE_DEBOUNCE_MS = 300;
|
|
54
37
|
SubscriptionManager.leaveRoom = async (conversationId, churchId) => {
|
|
@@ -62,13 +45,11 @@ SubscriptionManager.leaveRoom = async (conversationId, churchId) => {
|
|
|
62
45
|
return;
|
|
63
46
|
}
|
|
64
47
|
_a.counts.delete(key);
|
|
65
|
-
// Debounce the actual DELETE — see comment above.
|
|
66
48
|
const existing = _a.pendingLeaves.get(key);
|
|
67
49
|
if (existing)
|
|
68
50
|
clearTimeout(existing);
|
|
69
51
|
const timer = setTimeout(async () => {
|
|
70
52
|
_a.pendingLeaves.delete(key);
|
|
71
|
-
// If something rejoined in the meantime, abort.
|
|
72
53
|
if ((_a.counts.get(key) ?? 0) > 0)
|
|
73
54
|
return;
|
|
74
55
|
if (!SocketHelper.socketId)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionManager.js","sourceRoot":"","sources":["../../src/helpers/SubscriptionManager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAuB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"SubscriptionManager.js","sourceRoot":"","sources":["../../src/helpers/SubscriptionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cross-app helper for registering a Web Push subscription with the MessagingApi.
|
|
3
|
-
* Hosts call WebPushHelper.configure({ scope, appName }) once at boot, then
|
|
4
|
-
* WebPushHelper.subscribe() at login (and on userChurch changes).
|
|
5
|
-
*
|
|
6
|
-
* The server stores the subscription under the active userChurch's churchId, so
|
|
7
|
-
* switching churches without re-enrolling would leave the device tied to the wrong
|
|
8
|
-
* tenant — call subscribe() again after each church switch.
|
|
9
|
-
*/
|
|
1
|
+
/** Cross-app helper for registering a Web Push subscription with the MessagingApi. */
|
|
10
2
|
export declare const WebPushHelper: {
|
|
11
3
|
configure(options: {
|
|
12
4
|
scope?: string;
|
|
@@ -20,15 +12,9 @@ export declare const WebPushHelper: {
|
|
|
20
12
|
isStandalone(): boolean;
|
|
21
13
|
getRegistration(): Promise<ServiceWorkerRegistration | null>;
|
|
22
14
|
getExistingSubscription(): Promise<PushSubscription | null>;
|
|
23
|
-
/**
|
|
24
|
-
* Subscribe (or re-enroll) the active user. Safe to call multiple times — the server
|
|
25
|
-
* upserts based on (churchId, fcmToken). Call after login and after any userChurch change.
|
|
26
|
-
*/
|
|
15
|
+
/** Subscribe (or re-enroll) the active user. Safe to call multiple times. */
|
|
27
16
|
subscribe(): Promise<PushSubscription | null>;
|
|
28
|
-
/**
|
|
29
|
-
* Re-enroll the existing subscription (no permission prompt). Use this on userChurch
|
|
30
|
-
* change so the device record updates to the new church without re-prompting the user.
|
|
31
|
-
*/
|
|
17
|
+
/** Re-enroll the existing subscription without re-prompting. */
|
|
32
18
|
refreshEnrollment(): Promise<void>;
|
|
33
19
|
unsubscribe(): Promise<void>;
|
|
34
20
|
postSubscription(sub: PushSubscription): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebPushHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/WebPushHelper.ts"],"names":[],"mappings":"AAwBA
|
|
1
|
+
{"version":3,"file":"WebPushHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/WebPushHelper.ts"],"names":[],"mappings":"AAwBA,sFAAsF;AACtF,eAAO,MAAM,aAAa;uBACL;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;uBARjC,OAAO;kBAef,OAAO;uBAIF,OAAO;oBAOV,OAAO;;oBAeP,OAAO;uBAOE,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;+BAKjC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAMjE,6EAA6E;iBAC1D,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IA6BnD,gEAAgE;yBACrC,OAAO,CAAC,IAAI,CAAC;mBAOnB,OAAO,CAAC,IAAI,CAAC;0BASN,gBAAgB;CAa7C,CAAC"}
|
|
@@ -17,15 +17,7 @@ const isSupported = () => typeof window !== "undefined" &&
|
|
|
17
17
|
"serviceWorker" in navigator &&
|
|
18
18
|
"PushManager" in window &&
|
|
19
19
|
"Notification" in window;
|
|
20
|
-
/**
|
|
21
|
-
* Cross-app helper for registering a Web Push subscription with the MessagingApi.
|
|
22
|
-
* Hosts call WebPushHelper.configure({ scope, appName }) once at boot, then
|
|
23
|
-
* WebPushHelper.subscribe() at login (and on userChurch changes).
|
|
24
|
-
*
|
|
25
|
-
* The server stores the subscription under the active userChurch's churchId, so
|
|
26
|
-
* switching churches without re-enrolling would leave the device tied to the wrong
|
|
27
|
-
* tenant — call subscribe() again after each church switch.
|
|
28
|
-
*/
|
|
20
|
+
/** Cross-app helper for registering a Web Push subscription with the MessagingApi. */
|
|
29
21
|
export const WebPushHelper = {
|
|
30
22
|
configure(options) {
|
|
31
23
|
if (options.scope)
|
|
@@ -100,10 +92,7 @@ export const WebPushHelper = {
|
|
|
100
92
|
return null;
|
|
101
93
|
}
|
|
102
94
|
},
|
|
103
|
-
/**
|
|
104
|
-
* Subscribe (or re-enroll) the active user. Safe to call multiple times — the server
|
|
105
|
-
* upserts based on (churchId, fcmToken). Call after login and after any userChurch change.
|
|
106
|
-
*/
|
|
95
|
+
/** Subscribe (or re-enroll) the active user. Safe to call multiple times. */
|
|
107
96
|
async subscribe() {
|
|
108
97
|
if (!isSupported() || !UserHelper.user?.id)
|
|
109
98
|
return null;
|
|
@@ -132,10 +121,7 @@ export const WebPushHelper = {
|
|
|
132
121
|
WebPushHelper.setOptedOut(false);
|
|
133
122
|
return subscription;
|
|
134
123
|
},
|
|
135
|
-
/**
|
|
136
|
-
* Re-enroll the existing subscription (no permission prompt). Use this on userChurch
|
|
137
|
-
* change so the device record updates to the new church without re-prompting the user.
|
|
138
|
-
*/
|
|
124
|
+
/** Re-enroll the existing subscription without re-prompting. */
|
|
139
125
|
async refreshEnrollment() {
|
|
140
126
|
if (!isSupported() || !UserHelper.user?.id)
|
|
141
127
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebPushHelper.js","sourceRoot":"","sources":["../../src/helpers/WebPushHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,GAAG,oBAAoB,CAAC;AACzC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AACjD,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnD,IAAI,KAAK,GAAW,GAAG,CAAC;AACxB,IAAI,OAAO,GAAW,eAAe,CAAC;AAEtC,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAc,EAAE;IAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,GAAY,EAAE,CAChC,OAAO,MAAM,KAAK,WAAW;IAC7B,eAAe,IAAI,SAAS;IAC5B,aAAa,IAAI,MAAM;IACvB,cAAc,IAAI,MAAM,CAAC;AAE3B
|
|
1
|
+
{"version":3,"file":"WebPushHelper.js","sourceRoot":"","sources":["../../src/helpers/WebPushHelper.ts"],"names":[],"mappings":"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"}
|