@speakableio/core 1.0.58 → 1.0.59
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/package.json +1 -1
- package/dist/analytics.d.mts +0 -125
- package/dist/analytics.js +0 -471
- package/dist/analytics.js.map +0 -1
- package/dist/index.native.d.mts +0 -3566
- package/dist/index.native.d.ts +0 -3566
- package/dist/index.native.js +0 -3899
- package/dist/index.native.js.map +0 -1
- package/dist/index.native.mjs +0 -3887
- package/dist/index.native.mjs.map +0 -1
- package/dist/index.web.d.mts +0 -3566
- package/dist/index.web.js +0 -3887
- package/dist/index.web.js.map +0 -1
package/package.json
CHANGED
package/dist/analytics.d.mts
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { FieldValue } from 'firebase/firestore';
|
|
2
|
-
|
|
3
|
-
interface GradingStandard {
|
|
4
|
-
type: 'actfl' | 'wida' | 'custom';
|
|
5
|
-
customStandardId?: string | undefined;
|
|
6
|
-
dateMade: FieldValue;
|
|
7
|
-
courseId?: string;
|
|
8
|
-
assignmentId?: string;
|
|
9
|
-
teacherId?: string;
|
|
10
|
-
cardId: string;
|
|
11
|
-
setId: string;
|
|
12
|
-
level: string;
|
|
13
|
-
justification: string;
|
|
14
|
-
prompt: string;
|
|
15
|
-
transcript: string;
|
|
16
|
-
audioUrl?: string;
|
|
17
|
-
responseType: 'spoken' | 'written';
|
|
18
|
-
language: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
declare const logGradingStandardLog: (data: {
|
|
22
|
-
type: GradingStandard["type"];
|
|
23
|
-
level?: GradingStandard["level"];
|
|
24
|
-
courseId?: GradingStandard["courseId"];
|
|
25
|
-
}) => void;
|
|
26
|
-
|
|
27
|
-
declare const logOpenAssignment: (data?: {}) => void;
|
|
28
|
-
declare const logOpenActivityPreview: (data?: {}) => void;
|
|
29
|
-
declare const logSubmitAssignment: (data?: {}) => void;
|
|
30
|
-
declare const logCreateAssignment: (data?: {}) => void;
|
|
31
|
-
declare const logStartAssignment: (data?: {}) => void;
|
|
32
|
-
declare const logViewScoresModal: (data?: {}) => void;
|
|
33
|
-
declare const logViewMedia: (data?: {}) => void;
|
|
34
|
-
declare const logViewScores: (data?: {}) => void;
|
|
35
|
-
declare const logViewGradingMethod: (data?: {}) => void;
|
|
36
|
-
declare const logViewFeedback: (data?: {}) => void;
|
|
37
|
-
|
|
38
|
-
declare const logRepeatSuccess: (data?: {
|
|
39
|
-
courseId?: string;
|
|
40
|
-
[key: string]: any;
|
|
41
|
-
}) => void;
|
|
42
|
-
declare const logRepeatFail: (data?: {
|
|
43
|
-
courseId?: string;
|
|
44
|
-
[key: string]: any;
|
|
45
|
-
}) => void;
|
|
46
|
-
declare const logRespondSuccess: (data: {
|
|
47
|
-
courseId?: string;
|
|
48
|
-
[key: string]: any;
|
|
49
|
-
}) => void;
|
|
50
|
-
declare const logRespondFail: (data: {
|
|
51
|
-
courseId?: string;
|
|
52
|
-
[key: string]: any;
|
|
53
|
-
}) => void;
|
|
54
|
-
declare const logRespondSubmitted: (data: {
|
|
55
|
-
courseId?: string;
|
|
56
|
-
[key: string]: any;
|
|
57
|
-
}) => void;
|
|
58
|
-
declare const logRespondError: (errorDetails: {
|
|
59
|
-
courseId?: string;
|
|
60
|
-
[key: string]: any;
|
|
61
|
-
}) => void;
|
|
62
|
-
declare const logWrittenResponseSuccess: (data: {
|
|
63
|
-
courseId?: string;
|
|
64
|
-
[key: string]: any;
|
|
65
|
-
}) => void;
|
|
66
|
-
declare const logWrittenResponseFail: (data: {
|
|
67
|
-
courseId?: string;
|
|
68
|
-
[key: string]: any;
|
|
69
|
-
}) => void;
|
|
70
|
-
declare const logWrittenResponseSubmitted: (data?: {}) => void;
|
|
71
|
-
declare const logWrittenResponseError: (errorDetails: Record<string, unknown>) => void;
|
|
72
|
-
declare const logFreePlanRespond: (data: {
|
|
73
|
-
courseId?: string;
|
|
74
|
-
[key: string]: any;
|
|
75
|
-
}) => void;
|
|
76
|
-
declare const logFreePlanWrittenResponse: (data: {
|
|
77
|
-
courseId?: string;
|
|
78
|
-
[key: string]: any;
|
|
79
|
-
}) => void;
|
|
80
|
-
declare const logMultipleChoiceSuccess: (data: {
|
|
81
|
-
courseId?: string;
|
|
82
|
-
[key: string]: any;
|
|
83
|
-
}) => void;
|
|
84
|
-
declare const logMultipleChoiceFail: (data: {
|
|
85
|
-
courseId?: string;
|
|
86
|
-
[key: string]: any;
|
|
87
|
-
}) => void;
|
|
88
|
-
declare const logMultipleChoiceError: (errorDetails: {
|
|
89
|
-
courseId?: string;
|
|
90
|
-
[key: string]: any;
|
|
91
|
-
}) => void;
|
|
92
|
-
declare const logShortAnswerSuccess: (data: {
|
|
93
|
-
courseId?: string;
|
|
94
|
-
[key: string]: any;
|
|
95
|
-
}) => void;
|
|
96
|
-
declare const logShortAnswerFail: (data: {
|
|
97
|
-
courseId?: string;
|
|
98
|
-
[key: string]: any;
|
|
99
|
-
}) => void;
|
|
100
|
-
declare const logShortAnswerError: (errorDetails: {
|
|
101
|
-
courseId?: string;
|
|
102
|
-
[key: string]: any;
|
|
103
|
-
}) => void;
|
|
104
|
-
declare const logRetry: (data: {
|
|
105
|
-
courseId?: string;
|
|
106
|
-
[key: string]: any;
|
|
107
|
-
}) => void;
|
|
108
|
-
declare const logViewDetailsClick: (data?: {}) => void;
|
|
109
|
-
|
|
110
|
-
declare const logMessageSent: (data?: {
|
|
111
|
-
courseId?: string;
|
|
112
|
-
[key: string]: any;
|
|
113
|
-
}) => void;
|
|
114
|
-
declare const logMessageError: (errorDetails?: {
|
|
115
|
-
courseId?: string;
|
|
116
|
-
[key: string]: any;
|
|
117
|
-
}) => void;
|
|
118
|
-
|
|
119
|
-
declare const logTabsClick: (data?: {
|
|
120
|
-
courseId?: string;
|
|
121
|
-
tabName?: string;
|
|
122
|
-
[key: string]: any;
|
|
123
|
-
}) => void;
|
|
124
|
-
|
|
125
|
-
export { logCreateAssignment, logFreePlanRespond, logFreePlanWrittenResponse, logGradingStandardLog, logMessageError, logMessageSent, logMultipleChoiceError, logMultipleChoiceFail, logMultipleChoiceSuccess, logOpenActivityPreview, logOpenAssignment, logRepeatFail, logRepeatSuccess, logRespondError, logRespondFail, logRespondSubmitted, logRespondSuccess, logRetry, logShortAnswerError, logShortAnswerFail, logShortAnswerSuccess, logStartAssignment, logSubmitAssignment, logTabsClick, logViewDetailsClick, logViewFeedback, logViewGradingMethod, logViewMedia, logViewScores, logViewScoresModal, logWrittenResponseError, logWrittenResponseFail, logWrittenResponseSubmitted, logWrittenResponseSuccess };
|
package/dist/analytics.js
DELETED
|
@@ -1,471 +0,0 @@
|
|
|
1
|
-
// src/lib/firebase/api.ts
|
|
2
|
-
var FirebaseAPI = class _FirebaseAPI {
|
|
3
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
4
|
-
constructor() {
|
|
5
|
-
this.config = null;
|
|
6
|
-
}
|
|
7
|
-
static getInstance() {
|
|
8
|
-
if (!_FirebaseAPI.instance) {
|
|
9
|
-
_FirebaseAPI.instance = new _FirebaseAPI();
|
|
10
|
-
}
|
|
11
|
-
return _FirebaseAPI.instance;
|
|
12
|
-
}
|
|
13
|
-
initialize(config) {
|
|
14
|
-
this.config = config;
|
|
15
|
-
}
|
|
16
|
-
get db() {
|
|
17
|
-
if (!this.config) throw new Error("Firebase API not initialized");
|
|
18
|
-
return this.config.db;
|
|
19
|
-
}
|
|
20
|
-
get helpers() {
|
|
21
|
-
if (!this.config) throw new Error("Firebase API not initialized");
|
|
22
|
-
return this.config.helpers;
|
|
23
|
-
}
|
|
24
|
-
get httpsCallable() {
|
|
25
|
-
var _a;
|
|
26
|
-
return (_a = this.config) == null ? void 0 : _a.httpsCallable;
|
|
27
|
-
}
|
|
28
|
-
logEvent(name, data) {
|
|
29
|
-
var _a;
|
|
30
|
-
(_a = this.config) == null ? void 0 : _a.logEvent(name, data);
|
|
31
|
-
}
|
|
32
|
-
accessQueryConstraints() {
|
|
33
|
-
const { query, orderBy, limit, startAt, startAfter, endAt, endBefore, where, increment } = this.helpers;
|
|
34
|
-
return {
|
|
35
|
-
query,
|
|
36
|
-
orderBy,
|
|
37
|
-
limit,
|
|
38
|
-
startAt,
|
|
39
|
-
startAfter,
|
|
40
|
-
endAt,
|
|
41
|
-
endBefore,
|
|
42
|
-
where,
|
|
43
|
-
increment
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
accessHelpers() {
|
|
47
|
-
const { doc, collection, writeBatch, serverTimestamp, setDoc } = this.helpers;
|
|
48
|
-
return {
|
|
49
|
-
doc: (path) => doc(this.db, path),
|
|
50
|
-
collection: (path) => collection(this.db, path),
|
|
51
|
-
writeBatch: () => writeBatch(this.db),
|
|
52
|
-
serverTimestamp,
|
|
53
|
-
setDoc
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
async getDoc(path) {
|
|
57
|
-
const { getDoc, doc } = this.helpers;
|
|
58
|
-
const docRef = doc(this.db, path);
|
|
59
|
-
const docSnap = await getDoc(docRef);
|
|
60
|
-
const data = docSnap.exists() ? {
|
|
61
|
-
...docSnap.data(),
|
|
62
|
-
id: docSnap.id
|
|
63
|
-
} : null;
|
|
64
|
-
return {
|
|
65
|
-
id: docSnap.id,
|
|
66
|
-
data
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
async getDocs(path, ...queryConstraints) {
|
|
70
|
-
const { getDocs, query, collection } = this.helpers;
|
|
71
|
-
const collectionRef = collection(this.db, path);
|
|
72
|
-
const q = queryConstraints.length > 0 ? query(collectionRef, ...queryConstraints) : collectionRef;
|
|
73
|
-
const querySnapshot = await getDocs(q);
|
|
74
|
-
const data = querySnapshot.docs.map((doc) => ({
|
|
75
|
-
data: doc.data(),
|
|
76
|
-
id: doc.id
|
|
77
|
-
}));
|
|
78
|
-
return {
|
|
79
|
-
data,
|
|
80
|
-
querySnapshot,
|
|
81
|
-
empty: querySnapshot.empty
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
async addDoc(path, data) {
|
|
85
|
-
const { addDoc, collection } = this.helpers;
|
|
86
|
-
const collectionRef = collection(this.db, path);
|
|
87
|
-
const docRef = await addDoc(collectionRef, data);
|
|
88
|
-
return {
|
|
89
|
-
...data,
|
|
90
|
-
id: docRef.id
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
async setDoc(path, data, options = {}) {
|
|
94
|
-
const { setDoc, doc } = this.helpers;
|
|
95
|
-
const docRef = doc(this.db, path);
|
|
96
|
-
await setDoc(docRef, data, options);
|
|
97
|
-
}
|
|
98
|
-
async updateDoc(path, data) {
|
|
99
|
-
const { updateDoc, doc } = this.helpers;
|
|
100
|
-
const docRef = doc(this.db, path);
|
|
101
|
-
await updateDoc(docRef, data);
|
|
102
|
-
}
|
|
103
|
-
async deleteDoc(path) {
|
|
104
|
-
const { deleteDoc, doc } = this.helpers;
|
|
105
|
-
const docRef = doc(this.db, path);
|
|
106
|
-
await deleteDoc(docRef);
|
|
107
|
-
}
|
|
108
|
-
async runTransaction(updateFunction) {
|
|
109
|
-
const { runTransaction } = this.helpers;
|
|
110
|
-
return runTransaction(this.db, updateFunction);
|
|
111
|
-
}
|
|
112
|
-
async runBatch(operations) {
|
|
113
|
-
const { writeBatch } = this.helpers;
|
|
114
|
-
const batch = writeBatch(this.db);
|
|
115
|
-
await Promise.all(operations.map((op) => op()));
|
|
116
|
-
await batch.commit();
|
|
117
|
-
}
|
|
118
|
-
writeBatch() {
|
|
119
|
-
const { writeBatch } = this.helpers;
|
|
120
|
-
const batch = writeBatch(this.db);
|
|
121
|
-
return batch;
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
var api = FirebaseAPI.getInstance();
|
|
125
|
-
|
|
126
|
-
// src/lib/firebase/firebase-analytics/grading-standard.ts
|
|
127
|
-
var logGradingStandardLog = (data) => {
|
|
128
|
-
var _a, _b, _c;
|
|
129
|
-
if (data.courseId && data.type && data.level) {
|
|
130
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, "handleCouresAnalyticsEvent")) == null ? void 0 : _c({
|
|
131
|
-
eventType: data.type || "custom",
|
|
132
|
-
level: data.level,
|
|
133
|
-
courseId: data.courseId
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
api.logEvent("logGradingStandard", data);
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
// src/constants/analytics.constants.ts
|
|
140
|
-
var SPEAKABLE_ANALYTICS = {
|
|
141
|
-
VOICE_SUCCESS: "voice_success",
|
|
142
|
-
VOICE_FALLBACK_SUCCESS: "voice_fallback_success",
|
|
143
|
-
VOICE_FALLBACK_FAIL: "voice_fallback_fail",
|
|
144
|
-
VOICE_FAIL: "voice_fail",
|
|
145
|
-
RESPOND_CARD_SUCCESS: "respond_card_success",
|
|
146
|
-
RESPOND_CARD_FAIL: "respond_card_fail",
|
|
147
|
-
RESPOND_WRITE_CARD_SUCCESS: "respond_write_card_success",
|
|
148
|
-
RESPOND_WRITE_CARD_FAIL: "respond_write_card_fail",
|
|
149
|
-
RESPOND_WRITE_CARD_SUBMITTED: "respond_write_card_submitted",
|
|
150
|
-
RESPOND_WRITE_CARD_ERROR: "respond_write_card_error",
|
|
151
|
-
RESPOND_CARD_ERROR: "respond_card_error",
|
|
152
|
-
RESPOND_CARD_SUBMITTED: "respond_card_submitted",
|
|
153
|
-
RESPOND_FREE_PLAN: "respond_free_plan",
|
|
154
|
-
RESPOND_WRITE_FREE_PLAN: "respond_write_free_plan",
|
|
155
|
-
SUBMISSION: "assignment_submitted",
|
|
156
|
-
ASSIGNMENT_STARTED: "assignment_started",
|
|
157
|
-
CREATE_ASSIGNMENT: "create_assignment",
|
|
158
|
-
MC_SUCCESS: "multiple_choice_success",
|
|
159
|
-
MC_FAIL: "multiple_choice_fail",
|
|
160
|
-
MC_ERROR: "multiple_choice_error",
|
|
161
|
-
ACTFL_LEVEL: "actfl_level",
|
|
162
|
-
WIDA_LEVEL: "wida_level",
|
|
163
|
-
// New events
|
|
164
|
-
VIEW_SCORES_MODAL: "view_scores_modal",
|
|
165
|
-
SHORT_ANSWER_SUCCESS: "short_answer_success",
|
|
166
|
-
SHORT_ANSWER_FAIL: "short_answer_fail",
|
|
167
|
-
SHORT_ANSWER_ERROR: "short_answer_error",
|
|
168
|
-
RETRY: "retry",
|
|
169
|
-
MESSAGE_SENT: "message_sent",
|
|
170
|
-
MESSAGE_ERROR: "message_error",
|
|
171
|
-
VIEW_DETAILS_CLICK: "view_details_click",
|
|
172
|
-
TABS_CLICK: "tabs_click",
|
|
173
|
-
VIEW_MEDIA: "view_media",
|
|
174
|
-
VIEW_SCORES: "view_scores",
|
|
175
|
-
VIEW_GRADING_METHOD: "view_grading_method",
|
|
176
|
-
VIEW_FEEDBACK: "view_feedback"
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
// src/lib/firebase/firebase-analytics/assignment.ts
|
|
180
|
-
var logOpenAssignment = (data = {}) => {
|
|
181
|
-
api.logEvent("open_assignment", data);
|
|
182
|
-
};
|
|
183
|
-
var logOpenActivityPreview = (data = {}) => {
|
|
184
|
-
api.logEvent("open_activity_preview", data);
|
|
185
|
-
};
|
|
186
|
-
var logSubmitAssignment = (data = {}) => {
|
|
187
|
-
var _a, _b, _c;
|
|
188
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, "handleCouresAnalyticsEvent")) == null ? void 0 : _c({
|
|
189
|
-
eventType: SPEAKABLE_ANALYTICS.SUBMISSION,
|
|
190
|
-
...data
|
|
191
|
-
});
|
|
192
|
-
api.logEvent(SPEAKABLE_ANALYTICS.SUBMISSION, data);
|
|
193
|
-
};
|
|
194
|
-
var logCreateAssignment = (data = {}) => {
|
|
195
|
-
var _a, _b, _c;
|
|
196
|
-
if (data.courseId) {
|
|
197
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, "handleCouresAnalyticsEvent")) == null ? void 0 : _c({
|
|
198
|
-
eventType: SPEAKABLE_ANALYTICS.CREATE_ASSIGNMENT,
|
|
199
|
-
...data
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
api.logEvent(SPEAKABLE_ANALYTICS.CREATE_ASSIGNMENT, data);
|
|
203
|
-
};
|
|
204
|
-
var logStartAssignment = (data = {}) => {
|
|
205
|
-
var _a, _b, _c;
|
|
206
|
-
if (data.courseId) {
|
|
207
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, "handleCouresAnalyticsEvent")) == null ? void 0 : _c({
|
|
208
|
-
eventType: SPEAKABLE_ANALYTICS.ASSIGNMENT_STARTED,
|
|
209
|
-
...data
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
api.logEvent(SPEAKABLE_ANALYTICS.ASSIGNMENT_STARTED, data);
|
|
213
|
-
};
|
|
214
|
-
var logViewScoresModal = (data = {}) => {
|
|
215
|
-
api.logEvent(SPEAKABLE_ANALYTICS.VIEW_SCORES_MODAL, data);
|
|
216
|
-
};
|
|
217
|
-
var logViewMedia = (data = {}) => {
|
|
218
|
-
api.logEvent(SPEAKABLE_ANALYTICS.VIEW_MEDIA, data);
|
|
219
|
-
};
|
|
220
|
-
var logViewScores = (data = {}) => {
|
|
221
|
-
api.logEvent(SPEAKABLE_ANALYTICS.VIEW_SCORES, data);
|
|
222
|
-
};
|
|
223
|
-
var logViewGradingMethod = (data = {}) => {
|
|
224
|
-
api.logEvent(SPEAKABLE_ANALYTICS.VIEW_GRADING_METHOD, data);
|
|
225
|
-
};
|
|
226
|
-
var logViewFeedback = (data = {}) => {
|
|
227
|
-
api.logEvent(SPEAKABLE_ANALYTICS.VIEW_FEEDBACK, data);
|
|
228
|
-
};
|
|
229
|
-
|
|
230
|
-
// src/lib/firebase/firebase-analytics/page-analytics.ts
|
|
231
|
-
var HANDLE_COURSE_ANALYTICS_EVENT = "handleCouresAnalyticsEvent";
|
|
232
|
-
var logRepeatSuccess = (data = {}) => {
|
|
233
|
-
var _a, _b, _c;
|
|
234
|
-
if (data.courseId) {
|
|
235
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
236
|
-
eventType: SPEAKABLE_ANALYTICS.VOICE_SUCCESS,
|
|
237
|
-
...data,
|
|
238
|
-
courseId: data.courseId
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
api.logEvent(SPEAKABLE_ANALYTICS.VOICE_SUCCESS, data);
|
|
242
|
-
};
|
|
243
|
-
var logRepeatFail = (data = {}) => {
|
|
244
|
-
var _a, _b, _c;
|
|
245
|
-
if (data.courseId) {
|
|
246
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
247
|
-
eventType: SPEAKABLE_ANALYTICS.VOICE_FAIL,
|
|
248
|
-
...data,
|
|
249
|
-
courseId: data.courseId
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
api.logEvent(SPEAKABLE_ANALYTICS.VOICE_FAIL, data);
|
|
253
|
-
};
|
|
254
|
-
var logRespondSuccess = (data) => {
|
|
255
|
-
var _a, _b, _c;
|
|
256
|
-
if (data.courseId) {
|
|
257
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
258
|
-
eventType: SPEAKABLE_ANALYTICS.RESPOND_CARD_SUCCESS,
|
|
259
|
-
...data,
|
|
260
|
-
courseId: data.courseId
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_CARD_SUCCESS, data);
|
|
264
|
-
};
|
|
265
|
-
var logRespondFail = (data) => {
|
|
266
|
-
var _a, _b, _c;
|
|
267
|
-
if (data.courseId) {
|
|
268
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
269
|
-
eventType: SPEAKABLE_ANALYTICS.RESPOND_CARD_FAIL,
|
|
270
|
-
...data,
|
|
271
|
-
courseId: data.courseId
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_CARD_FAIL, data);
|
|
275
|
-
};
|
|
276
|
-
var logRespondSubmitted = (data) => {
|
|
277
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_CARD_SUBMITTED, data);
|
|
278
|
-
};
|
|
279
|
-
var logRespondError = (errorDetails) => {
|
|
280
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_CARD_ERROR, {
|
|
281
|
-
errorDetails
|
|
282
|
-
});
|
|
283
|
-
};
|
|
284
|
-
var logWrittenResponseSuccess = (data) => {
|
|
285
|
-
var _a, _b, _c;
|
|
286
|
-
if (data.courseId) {
|
|
287
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
288
|
-
eventType: SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_SUCCESS,
|
|
289
|
-
...data,
|
|
290
|
-
courseId: data.courseId
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_SUCCESS, data);
|
|
294
|
-
};
|
|
295
|
-
var logWrittenResponseFail = (data) => {
|
|
296
|
-
var _a, _b, _c;
|
|
297
|
-
if (data.courseId) {
|
|
298
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
299
|
-
eventType: SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_FAIL,
|
|
300
|
-
...data,
|
|
301
|
-
courseId: data.courseId
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_FAIL, data);
|
|
305
|
-
};
|
|
306
|
-
var logWrittenResponseSubmitted = (data = {}) => {
|
|
307
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_SUBMITTED, data);
|
|
308
|
-
};
|
|
309
|
-
var logWrittenResponseError = (errorDetails) => {
|
|
310
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_ERROR, {
|
|
311
|
-
errorDetails
|
|
312
|
-
});
|
|
313
|
-
};
|
|
314
|
-
var logFreePlanRespond = (data) => {
|
|
315
|
-
var _a, _b, _c;
|
|
316
|
-
if (data.courseId) {
|
|
317
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
318
|
-
eventType: SPEAKABLE_ANALYTICS.RESPOND_FREE_PLAN,
|
|
319
|
-
...data,
|
|
320
|
-
courseId: data.courseId
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_FREE_PLAN, data);
|
|
324
|
-
};
|
|
325
|
-
var logFreePlanWrittenResponse = (data) => {
|
|
326
|
-
var _a, _b, _c;
|
|
327
|
-
if (data.courseId) {
|
|
328
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
329
|
-
eventType: SPEAKABLE_ANALYTICS.RESPOND_WRITE_FREE_PLAN,
|
|
330
|
-
...data,
|
|
331
|
-
courseId: data.courseId
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_WRITE_FREE_PLAN, data);
|
|
335
|
-
};
|
|
336
|
-
var logMultipleChoiceSuccess = (data) => {
|
|
337
|
-
var _a, _b, _c;
|
|
338
|
-
if (data.courseId) {
|
|
339
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
340
|
-
eventType: SPEAKABLE_ANALYTICS.MC_SUCCESS,
|
|
341
|
-
courseId: data.courseId
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
api.logEvent(SPEAKABLE_ANALYTICS.MC_SUCCESS, data);
|
|
345
|
-
};
|
|
346
|
-
var logMultipleChoiceFail = (data) => {
|
|
347
|
-
var _a, _b, _c;
|
|
348
|
-
if (data.courseId) {
|
|
349
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
350
|
-
eventType: SPEAKABLE_ANALYTICS.MC_FAIL,
|
|
351
|
-
courseId: data.courseId
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
api.logEvent(SPEAKABLE_ANALYTICS.MC_FAIL, data);
|
|
355
|
-
};
|
|
356
|
-
var logMultipleChoiceError = (errorDetails) => {
|
|
357
|
-
api.logEvent(SPEAKABLE_ANALYTICS.MC_ERROR, {
|
|
358
|
-
errorDetails
|
|
359
|
-
});
|
|
360
|
-
};
|
|
361
|
-
var logShortAnswerSuccess = (data) => {
|
|
362
|
-
var _a, _b, _c;
|
|
363
|
-
if (data.courseId) {
|
|
364
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
365
|
-
eventType: SPEAKABLE_ANALYTICS.SHORT_ANSWER_SUCCESS,
|
|
366
|
-
...data,
|
|
367
|
-
courseId: data.courseId
|
|
368
|
-
});
|
|
369
|
-
}
|
|
370
|
-
api.logEvent(SPEAKABLE_ANALYTICS.SHORT_ANSWER_SUCCESS, data);
|
|
371
|
-
};
|
|
372
|
-
var logShortAnswerFail = (data) => {
|
|
373
|
-
var _a, _b, _c;
|
|
374
|
-
if (data.courseId) {
|
|
375
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
376
|
-
eventType: SPEAKABLE_ANALYTICS.SHORT_ANSWER_FAIL,
|
|
377
|
-
...data,
|
|
378
|
-
courseId: data.courseId
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
api.logEvent(SPEAKABLE_ANALYTICS.SHORT_ANSWER_FAIL, data);
|
|
382
|
-
};
|
|
383
|
-
var logShortAnswerError = (errorDetails) => {
|
|
384
|
-
api.logEvent(SPEAKABLE_ANALYTICS.SHORT_ANSWER_ERROR, {
|
|
385
|
-
errorDetails
|
|
386
|
-
});
|
|
387
|
-
};
|
|
388
|
-
var logRetry = (data) => {
|
|
389
|
-
var _a, _b, _c;
|
|
390
|
-
if (data.courseId) {
|
|
391
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT)) == null ? void 0 : _c({
|
|
392
|
-
eventType: SPEAKABLE_ANALYTICS.RETRY,
|
|
393
|
-
...data,
|
|
394
|
-
courseId: data.courseId
|
|
395
|
-
});
|
|
396
|
-
}
|
|
397
|
-
api.logEvent(SPEAKABLE_ANALYTICS.RETRY, data);
|
|
398
|
-
};
|
|
399
|
-
var logViewDetailsClick = (data = {}) => {
|
|
400
|
-
api.logEvent(SPEAKABLE_ANALYTICS.VIEW_DETAILS_CLICK, data);
|
|
401
|
-
};
|
|
402
|
-
|
|
403
|
-
// src/lib/firebase/firebase-analytics/message.ts
|
|
404
|
-
var HANDLE_COURSE_ANALYTICS_EVENT2 = "handleCouresAnalyticsEvent";
|
|
405
|
-
var logMessageSent = (data = {}) => {
|
|
406
|
-
var _a, _b, _c;
|
|
407
|
-
if (data.courseId) {
|
|
408
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT2)) == null ? void 0 : _c({
|
|
409
|
-
eventType: SPEAKABLE_ANALYTICS.MESSAGE_SENT,
|
|
410
|
-
...data,
|
|
411
|
-
courseId: data.courseId
|
|
412
|
-
});
|
|
413
|
-
}
|
|
414
|
-
api.logEvent(SPEAKABLE_ANALYTICS.MESSAGE_SENT, data);
|
|
415
|
-
};
|
|
416
|
-
var logMessageError = (errorDetails = {}) => {
|
|
417
|
-
api.logEvent(SPEAKABLE_ANALYTICS.MESSAGE_ERROR, {
|
|
418
|
-
errorDetails
|
|
419
|
-
});
|
|
420
|
-
};
|
|
421
|
-
|
|
422
|
-
// src/lib/firebase/firebase-analytics/tabs.ts
|
|
423
|
-
var HANDLE_COURSE_ANALYTICS_EVENT3 = "handleCouresAnalyticsEvent";
|
|
424
|
-
var logTabsClick = (data = {}) => {
|
|
425
|
-
var _a, _b, _c;
|
|
426
|
-
if (data.courseId) {
|
|
427
|
-
(_c = (_b = (_a = api).httpsCallable) == null ? void 0 : _b.call(_a, HANDLE_COURSE_ANALYTICS_EVENT3)) == null ? void 0 : _c({
|
|
428
|
-
eventType: SPEAKABLE_ANALYTICS.TABS_CLICK,
|
|
429
|
-
...data,
|
|
430
|
-
courseId: data.courseId
|
|
431
|
-
});
|
|
432
|
-
}
|
|
433
|
-
api.logEvent(SPEAKABLE_ANALYTICS.TABS_CLICK, data);
|
|
434
|
-
};
|
|
435
|
-
export {
|
|
436
|
-
logCreateAssignment,
|
|
437
|
-
logFreePlanRespond,
|
|
438
|
-
logFreePlanWrittenResponse,
|
|
439
|
-
logGradingStandardLog,
|
|
440
|
-
logMessageError,
|
|
441
|
-
logMessageSent,
|
|
442
|
-
logMultipleChoiceError,
|
|
443
|
-
logMultipleChoiceFail,
|
|
444
|
-
logMultipleChoiceSuccess,
|
|
445
|
-
logOpenActivityPreview,
|
|
446
|
-
logOpenAssignment,
|
|
447
|
-
logRepeatFail,
|
|
448
|
-
logRepeatSuccess,
|
|
449
|
-
logRespondError,
|
|
450
|
-
logRespondFail,
|
|
451
|
-
logRespondSubmitted,
|
|
452
|
-
logRespondSuccess,
|
|
453
|
-
logRetry,
|
|
454
|
-
logShortAnswerError,
|
|
455
|
-
logShortAnswerFail,
|
|
456
|
-
logShortAnswerSuccess,
|
|
457
|
-
logStartAssignment,
|
|
458
|
-
logSubmitAssignment,
|
|
459
|
-
logTabsClick,
|
|
460
|
-
logViewDetailsClick,
|
|
461
|
-
logViewFeedback,
|
|
462
|
-
logViewGradingMethod,
|
|
463
|
-
logViewMedia,
|
|
464
|
-
logViewScores,
|
|
465
|
-
logViewScoresModal,
|
|
466
|
-
logWrittenResponseError,
|
|
467
|
-
logWrittenResponseFail,
|
|
468
|
-
logWrittenResponseSubmitted,
|
|
469
|
-
logWrittenResponseSuccess
|
|
470
|
-
};
|
|
471
|
-
//# sourceMappingURL=analytics.js.map
|
package/dist/analytics.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/firebase/api.ts","../src/lib/firebase/firebase-analytics/grading-standard.ts","../src/constants/analytics.constants.ts","../src/lib/firebase/firebase-analytics/assignment.ts","../src/lib/firebase/firebase-analytics/page-analytics.ts","../src/lib/firebase/firebase-analytics/message.ts","../src/lib/firebase/firebase-analytics/tabs.ts"],"sourcesContent":["import { type CallableFunction, type FirestoreHelpers } from '@core/types/firebase.types'\nimport {\n type SetOptions,\n type DocumentData,\n type QueryConstraint,\n type WithFieldValue,\n type Firestore,\n} from 'firebase/firestore'\n\ninterface FirebaseConfig {\n db: Firestore\n helpers: FirestoreHelpers\n httpsCallable: (name: string) => CallableFunction\n logEvent: (name: string, data: any) => void\n}\n\ntype FirebasePath = string\n\nexport class FirebaseAPI {\n private static instance: FirebaseAPI\n private config: FirebaseConfig | null = null\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private constructor() {\n // Private constructor for singleton pattern\n }\n\n static getInstance(): FirebaseAPI {\n if (!FirebaseAPI.instance) {\n FirebaseAPI.instance = new FirebaseAPI()\n }\n\n return FirebaseAPI.instance\n }\n\n initialize(config: FirebaseConfig) {\n this.config = config\n }\n\n get db() {\n if (!this.config) throw new Error('Firebase API not initialized')\n\n return this.config.db\n }\n\n get helpers() {\n if (!this.config) throw new Error('Firebase API not initialized')\n\n return this.config.helpers\n }\n\n get httpsCallable() {\n return this.config?.httpsCallable\n }\n\n logEvent(name: string, data: any) {\n this.config?.logEvent(name, data)\n }\n\n accessQueryConstraints() {\n const { query, orderBy, limit, startAt, startAfter, endAt, endBefore, where, increment } =\n this.helpers\n\n return {\n query,\n orderBy,\n limit,\n startAt,\n startAfter,\n endAt,\n endBefore,\n where,\n increment,\n }\n }\n\n accessHelpers() {\n const { doc, collection, writeBatch, serverTimestamp, setDoc } = this.helpers\n\n return {\n doc: (path: FirebasePath) => doc(this.db, path),\n collection: (path: FirebasePath) => collection(this.db, path),\n writeBatch: () => writeBatch(this.db),\n serverTimestamp: serverTimestamp,\n setDoc: setDoc,\n }\n }\n\n async getDoc<T>(path: FirebasePath) {\n const { getDoc, doc } = this.helpers\n\n const docRef = doc(this.db, path)\n const docSnap = await getDoc(docRef)\n\n const data = docSnap.exists()\n ? ({\n ...docSnap.data(),\n id: docSnap.id,\n } as T)\n : null\n\n return {\n id: docSnap.id,\n data,\n }\n }\n\n async getDocs<T>(path: FirebasePath, ...queryConstraints: QueryConstraint[]) {\n const { getDocs, query, collection } = this.helpers\n const collectionRef = collection(this.db, path)\n const q =\n queryConstraints.length > 0 ? query(collectionRef, ...queryConstraints) : collectionRef\n\n const querySnapshot = await getDocs(q)\n\n const data = querySnapshot.docs.map(doc => ({\n data: doc.data() as T,\n id: doc.id,\n }))\n\n return {\n data: data as unknown as (T & {\n id: string\n })[],\n querySnapshot,\n empty: querySnapshot.empty,\n }\n }\n\n async addDoc<T extends WithFieldValue<DocumentData>>(\n path: FirebasePath,\n data: T,\n ): Promise<{ id: string } & T> {\n const { addDoc, collection } = this.helpers\n const collectionRef = collection(this.db, path)\n const docRef = await addDoc(collectionRef, data)\n\n return {\n ...data,\n id: docRef.id,\n }\n }\n\n async setDoc<T extends WithFieldValue<DocumentData>>(\n path: FirebasePath,\n data: T,\n options: SetOptions = {},\n ): Promise<void> {\n const { setDoc, doc } = this.helpers\n const docRef = doc(this.db, path)\n\n await setDoc(docRef, data, options)\n }\n\n async updateDoc(path: FirebasePath, data: any): Promise<void> {\n const { updateDoc, doc } = this.helpers\n\n const docRef = doc(this.db, path)\n\n await updateDoc(docRef, data)\n }\n\n async deleteDoc(path: FirebasePath): Promise<void> {\n const { deleteDoc, doc } = this.helpers\n const docRef = doc(this.db, path)\n\n await deleteDoc(docRef)\n }\n\n async runTransaction<T>(updateFunction: (transaction: any) => Promise<T>): Promise<T> {\n const { runTransaction } = this.helpers\n\n return runTransaction(this.db, updateFunction)\n }\n\n async runBatch(operations: (() => Promise<void>)[]): Promise<void> {\n const { writeBatch } = this.helpers\n const batch = writeBatch(this.db)\n\n await Promise.all(operations.map(op => op()))\n await batch.commit()\n }\n\n writeBatch() {\n const { writeBatch } = this.helpers\n\n const batch = writeBatch(this.db)\n\n return batch\n }\n}\n\nexport const api = FirebaseAPI.getInstance()\n","import { type GradingStandard } from '@core/services/add-grading-standard'\n\nimport { api } from '../api'\n\nexport const logGradingStandardLog = (data: {\n type: GradingStandard['type']\n level?: GradingStandard['level']\n courseId?: GradingStandard['courseId']\n}) => {\n if (data.courseId && data.type && data.level) {\n api.httpsCallable?.('handleCouresAnalyticsEvent')?.({\n eventType: data.type || 'custom',\n level: data.level,\n courseId: data.courseId,\n })\n }\n api.logEvent('logGradingStandard', data)\n}\n","// Event constants\nexport const SPEAKABLE_ANALYTICS = {\n VOICE_SUCCESS: 'voice_success',\n VOICE_FALLBACK_SUCCESS: 'voice_fallback_success',\n VOICE_FALLBACK_FAIL: 'voice_fallback_fail',\n VOICE_FAIL: 'voice_fail',\n RESPOND_CARD_SUCCESS: 'respond_card_success',\n RESPOND_CARD_FAIL: 'respond_card_fail',\n RESPOND_WRITE_CARD_SUCCESS: 'respond_write_card_success',\n RESPOND_WRITE_CARD_FAIL: 'respond_write_card_fail',\n RESPOND_WRITE_CARD_SUBMITTED: 'respond_write_card_submitted',\n RESPOND_WRITE_CARD_ERROR: 'respond_write_card_error',\n RESPOND_CARD_ERROR: 'respond_card_error',\n RESPOND_CARD_SUBMITTED: 'respond_card_submitted',\n RESPOND_FREE_PLAN: 'respond_free_plan',\n RESPOND_WRITE_FREE_PLAN: 'respond_write_free_plan',\n SUBMISSION: 'assignment_submitted',\n ASSIGNMENT_STARTED: 'assignment_started',\n CREATE_ASSIGNMENT: 'create_assignment',\n MC_SUCCESS: 'multiple_choice_success',\n MC_FAIL: 'multiple_choice_fail',\n MC_ERROR: 'multiple_choice_error',\n ACTFL_LEVEL: 'actfl_level',\n WIDA_LEVEL: 'wida_level',\n // New events\n VIEW_SCORES_MODAL: 'view_scores_modal',\n SHORT_ANSWER_SUCCESS: 'short_answer_success',\n SHORT_ANSWER_FAIL: 'short_answer_fail',\n SHORT_ANSWER_ERROR: 'short_answer_error',\n RETRY: 'retry',\n MESSAGE_SENT: 'message_sent',\n MESSAGE_ERROR: 'message_error',\n VIEW_DETAILS_CLICK: 'view_details_click',\n TABS_CLICK: 'tabs_click',\n VIEW_MEDIA: 'view_media',\n VIEW_SCORES: 'view_scores',\n VIEW_GRADING_METHOD: 'view_grading_method',\n VIEW_FEEDBACK: 'view_feedback',\n} as const\n","import { SPEAKABLE_ANALYTICS } from '@core/constants/analytics.constants'\n\nimport { api } from '../api'\n\nexport const logOpenAssignment = (data = {}) => {\n api.logEvent('open_assignment', data)\n}\n\nexport const logOpenActivityPreview = (data = {}) => {\n api.logEvent('open_activity_preview', data)\n}\n\nexport const logSubmitAssignment = (data = {}) => {\n api.httpsCallable?.('handleCouresAnalyticsEvent')?.({\n eventType: SPEAKABLE_ANALYTICS.SUBMISSION,\n ...data,\n })\n api.logEvent(SPEAKABLE_ANALYTICS.SUBMISSION, data)\n}\n\nexport const logCreateAssignment = (data = {}) => {\n // @ts-ignore\n if (data.courseId) {\n api.httpsCallable?.('handleCouresAnalyticsEvent')?.({\n eventType: SPEAKABLE_ANALYTICS.CREATE_ASSIGNMENT,\n ...data,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.CREATE_ASSIGNMENT, data)\n}\n\nexport const logStartAssignment = (data = {}) => {\n // @ts-ignore\n if (data.courseId) {\n api.httpsCallable?.('handleCouresAnalyticsEvent')?.({\n eventType: SPEAKABLE_ANALYTICS.ASSIGNMENT_STARTED,\n ...data,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.ASSIGNMENT_STARTED, data)\n}\n\nexport const logViewScoresModal = (data = {}) => {\n api.logEvent(SPEAKABLE_ANALYTICS.VIEW_SCORES_MODAL, data)\n}\n\nexport const logViewMedia = (data = {}) => {\n api.logEvent(SPEAKABLE_ANALYTICS.VIEW_MEDIA, data)\n}\n\nexport const logViewScores = (data = {}) => {\n api.logEvent(SPEAKABLE_ANALYTICS.VIEW_SCORES, data)\n}\n\nexport const logViewGradingMethod = (data = {}) => {\n api.logEvent(SPEAKABLE_ANALYTICS.VIEW_GRADING_METHOD, data)\n}\n\nexport const logViewFeedback = (data = {}) => {\n api.logEvent(SPEAKABLE_ANALYTICS.VIEW_FEEDBACK, data)\n}\n","import { SPEAKABLE_ANALYTICS } from '@core/constants/analytics.constants'\n\nimport { api } from '../api'\n\nconst HANDLE_COURSE_ANALYTICS_EVENT = 'handleCouresAnalyticsEvent'\n\nexport const logRepeatSuccess = (\n data: {\n courseId?: string\n [key: string]: any\n } = {},\n) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.VOICE_SUCCESS,\n ...data,\n courseId: data.courseId,\n })\n }\n\n api.logEvent(SPEAKABLE_ANALYTICS.VOICE_SUCCESS, data)\n}\n\nexport const logRepeatFail = (\n data: {\n courseId?: string\n [key: string]: any\n } = {},\n) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.VOICE_FAIL,\n ...data,\n courseId: data.courseId,\n })\n }\n\n api.logEvent(SPEAKABLE_ANALYTICS.VOICE_FAIL, data)\n}\n\nexport const logRespondSuccess = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.RESPOND_CARD_SUCCESS,\n ...data,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_CARD_SUCCESS, data)\n}\n\nexport const logRespondFail = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.RESPOND_CARD_FAIL,\n ...data,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_CARD_FAIL, data)\n}\n\nexport const logRespondSubmitted = (data: { courseId?: string; [key: string]: any }) => {\n api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_CARD_SUBMITTED, data)\n}\n\nexport const logRespondError = (errorDetails: { courseId?: string; [key: string]: any }) => {\n api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_CARD_ERROR, {\n errorDetails,\n })\n}\n\nexport const logWrittenResponseSuccess = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_SUCCESS,\n ...data,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_SUCCESS, data)\n}\n\nexport const logWrittenResponseFail = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_FAIL,\n ...data,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_FAIL, data)\n}\n\nexport const logWrittenResponseSubmitted = (data = {}) => {\n api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_SUBMITTED, data)\n}\n\nexport const logWrittenResponseError = (errorDetails: Record<string, unknown>) => {\n api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_WRITE_CARD_ERROR, {\n errorDetails,\n })\n}\n\nexport const logFreePlanRespond = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.RESPOND_FREE_PLAN,\n ...data,\n courseId: data.courseId,\n })\n }\n\n api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_FREE_PLAN, data)\n}\n\nexport const logFreePlanWrittenResponse = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.RESPOND_WRITE_FREE_PLAN,\n ...data,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.RESPOND_WRITE_FREE_PLAN, data)\n}\n\nexport const logMultipleChoiceSuccess = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.MC_SUCCESS,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.MC_SUCCESS, data)\n}\n\nexport const logMultipleChoiceFail = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.MC_FAIL,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.MC_FAIL, data)\n}\n\nexport const logMultipleChoiceError = (errorDetails: { courseId?: string; [key: string]: any }) => {\n api.logEvent(SPEAKABLE_ANALYTICS.MC_ERROR, {\n errorDetails,\n })\n}\n\nexport const logShortAnswerSuccess = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.SHORT_ANSWER_SUCCESS,\n ...data,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.SHORT_ANSWER_SUCCESS, data)\n}\n\nexport const logShortAnswerFail = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.SHORT_ANSWER_FAIL,\n ...data,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.SHORT_ANSWER_FAIL, data)\n}\n\nexport const logShortAnswerError = (errorDetails: { courseId?: string; [key: string]: any }) => {\n api.logEvent(SPEAKABLE_ANALYTICS.SHORT_ANSWER_ERROR, {\n errorDetails,\n })\n}\n\nexport const logRetry = (data: { courseId?: string; [key: string]: any }) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.RETRY,\n ...data,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.RETRY, data)\n}\n\nexport const logViewDetailsClick = (data = {}) => {\n api.logEvent(SPEAKABLE_ANALYTICS.VIEW_DETAILS_CLICK, data)\n}\n","import { SPEAKABLE_ANALYTICS } from '@core/constants/analytics.constants'\n\nimport { api } from '../api'\n\nconst HANDLE_COURSE_ANALYTICS_EVENT = 'handleCouresAnalyticsEvent'\n\nexport const logMessageSent = (data: { courseId?: string; [key: string]: any } = {}) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.MESSAGE_SENT,\n ...data,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.MESSAGE_SENT, data)\n}\n\nexport const logMessageError = (errorDetails: { courseId?: string; [key: string]: any } = {}) => {\n api.logEvent(SPEAKABLE_ANALYTICS.MESSAGE_ERROR, {\n errorDetails,\n })\n}\n","import { SPEAKABLE_ANALYTICS } from '@core/constants/analytics.constants'\n\nimport { api } from '../api'\n\nconst HANDLE_COURSE_ANALYTICS_EVENT = 'handleCouresAnalyticsEvent'\n\nexport const logTabsClick = (\n data: { courseId?: string; tabName?: string; [key: string]: any } = {},\n) => {\n if (data.courseId) {\n api.httpsCallable?.(HANDLE_COURSE_ANALYTICS_EVENT)?.({\n eventType: SPEAKABLE_ANALYTICS.TABS_CLICK,\n ...data,\n courseId: data.courseId,\n })\n }\n api.logEvent(SPEAKABLE_ANALYTICS.TABS_CLICK, data)\n}\n"],"mappings":"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","names":["HANDLE_COURSE_ANALYTICS_EVENT","HANDLE_COURSE_ANALYTICS_EVENT"]}
|