@speakableio/core 0.1.106 → 1.0.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.
Files changed (66) hide show
  1. package/dist/analytics-Bj2i88Zk.d.ts +89 -0
  2. package/dist/analytics.d.mts +88 -0
  3. package/dist/analytics.js +329 -25
  4. package/dist/analytics.js.map +1 -1
  5. package/dist/{assignment.model-DLMWAp0Y.d.ts → assignment.model-BRS4h8gX.d.ts} +1 -1
  6. package/dist/assignment.model-Bc61gBHl.d.ts +302 -0
  7. package/dist/assignment.model-Bm9gE2YK.d.ts +301 -0
  8. package/dist/const.d.ts +3 -73
  9. package/dist/const.js +355 -45
  10. package/dist/const.js.map +1 -1
  11. package/dist/everything.d.ts +1348 -0
  12. package/dist/everything.js +3509 -0
  13. package/dist/everything.js.map +1 -0
  14. package/dist/hooks.d.ts +621 -4
  15. package/dist/hooks.js +1745 -61
  16. package/dist/hooks.js.map +1 -1
  17. package/dist/index.native.d.mts +2836 -0
  18. package/dist/index.native.d.ts +2272 -27
  19. package/dist/index.native.js +2995 -166
  20. package/dist/index.native.js.map +1 -1
  21. package/dist/index.native.mjs +3322 -0
  22. package/dist/index.native.mjs.map +1 -0
  23. package/dist/index.web-DNYJV_41.d.ts +469 -0
  24. package/dist/index.web.d.mts +2836 -0
  25. package/dist/index.web.d.ts +68 -2
  26. package/dist/index.web.js +3244 -12
  27. package/dist/index.web.js.map +1 -1
  28. package/dist/models.d.ts +2 -2
  29. package/dist/models.js +43 -8
  30. package/dist/models.js.map +1 -1
  31. package/dist/{notification.constants-Da4-_0kX.d.ts → notification.constants-B72fb734.d.ts} +1 -1
  32. package/dist/repos.d.ts +1 -1
  33. package/dist/repos.js +440 -13
  34. package/dist/repos.js.map +1 -1
  35. package/dist/speakable-plans-BjWWEWrQ.d.ts +72 -0
  36. package/dist/speakable-plans-DR1cQ6IK.d.ts +92 -0
  37. package/dist/speakable-plans-Dq9nRefI.d.ts +72 -0
  38. package/dist/utils.d.ts +84 -2
  39. package/dist/utils.js +481 -15
  40. package/dist/utils.js.map +1 -1
  41. package/dist/web.constants-qmx4rGyO.d.ts +26 -0
  42. package/package.json +11 -62
  43. package/dist/chunk-233VJDUF.js +0 -149
  44. package/dist/chunk-233VJDUF.js.map +0 -1
  45. package/dist/chunk-2CRI5MJP.js +0 -225
  46. package/dist/chunk-2CRI5MJP.js.map +0 -1
  47. package/dist/chunk-AWVUNWML.js +0 -141
  48. package/dist/chunk-AWVUNWML.js.map +0 -1
  49. package/dist/chunk-CJ5JXKII.js +0 -129
  50. package/dist/chunk-CJ5JXKII.js.map +0 -1
  51. package/dist/chunk-EEBMPASA.js +0 -21
  52. package/dist/chunk-EEBMPASA.js.map +0 -1
  53. package/dist/chunk-H5XNOXRC.js +0 -11
  54. package/dist/chunk-H5XNOXRC.js.map +0 -1
  55. package/dist/chunk-LZG3MTSH.js +0 -53
  56. package/dist/chunk-LZG3MTSH.js.map +0 -1
  57. package/dist/chunk-OLSTHM2U.js +0 -154
  58. package/dist/chunk-OLSTHM2U.js.map +0 -1
  59. package/dist/chunk-TQGDTKTE.js +0 -13
  60. package/dist/chunk-TQGDTKTE.js.map +0 -1
  61. package/dist/chunk-YKUMIPSO.js +0 -212
  62. package/dist/chunk-YKUMIPSO.js.map +0 -1
  63. package/dist/chunk-YMJRCINF.js +0 -68
  64. package/dist/chunk-YMJRCINF.js.map +0 -1
  65. package/dist/chunk-YO34TZYN.js +0 -28
  66. package/dist/chunk-YO34TZYN.js.map +0 -1
package/dist/repos.js CHANGED
@@ -1,16 +1,443 @@
1
- import {
2
- createAssignmentRepo,
3
- createCardRepo
4
- } from "./chunk-OLSTHM2U.js";
5
- import {
6
- getSet
7
- } from "./chunk-EEBMPASA.js";
8
- import "./chunk-233VJDUF.js";
9
- import "./chunk-H5XNOXRC.js";
10
- import "./chunk-AWVUNWML.js";
11
- import "./chunk-TQGDTKTE.js";
12
- import "./chunk-CJ5JXKII.js";
13
- import "./chunk-LZG3MTSH.js";
1
+ // src/utils/error-handler.ts
2
+ var ServiceError = class extends Error {
3
+ constructor(message, originalError, code) {
4
+ super(message);
5
+ this.originalError = originalError;
6
+ this.code = code;
7
+ this.name = "ServiceError";
8
+ }
9
+ };
10
+ function withErrorHandler(fn, serviceName) {
11
+ return async (...args) => {
12
+ try {
13
+ return await fn(...args);
14
+ } catch (error) {
15
+ if (error instanceof Error && "code" in error) {
16
+ const firebaseError = error;
17
+ throw new ServiceError(
18
+ `Error in ${serviceName}: ${firebaseError.message}`,
19
+ error,
20
+ firebaseError.code
21
+ );
22
+ }
23
+ if (error instanceof Error) {
24
+ throw new ServiceError(`Error in ${serviceName}: ${error.message}`, error);
25
+ }
26
+ throw new ServiceError(`Unknown error in ${serviceName}`, error);
27
+ }
28
+ };
29
+ }
30
+
31
+ // src/lib/firebase/api.ts
32
+ var FirebaseAPI = class _FirebaseAPI {
33
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
34
+ constructor() {
35
+ this.config = null;
36
+ }
37
+ static getInstance() {
38
+ if (!_FirebaseAPI.instance) {
39
+ _FirebaseAPI.instance = new _FirebaseAPI();
40
+ }
41
+ return _FirebaseAPI.instance;
42
+ }
43
+ initialize(config) {
44
+ this.config = config;
45
+ }
46
+ get db() {
47
+ if (!this.config) throw new Error("Firebase API not initialized");
48
+ return this.config.db;
49
+ }
50
+ get helpers() {
51
+ if (!this.config) throw new Error("Firebase API not initialized");
52
+ return this.config.helpers;
53
+ }
54
+ get httpsCallable() {
55
+ var _a;
56
+ return (_a = this.config) == null ? void 0 : _a.httpsCallable;
57
+ }
58
+ logEvent(name, data) {
59
+ var _a;
60
+ (_a = this.config) == null ? void 0 : _a.logEvent(name, data);
61
+ }
62
+ accessQueryConstraints() {
63
+ const { query, orderBy, limit, startAt, startAfter, endAt, endBefore, where, increment } = this.helpers;
64
+ return {
65
+ query,
66
+ orderBy,
67
+ limit,
68
+ startAt,
69
+ startAfter,
70
+ endAt,
71
+ endBefore,
72
+ where,
73
+ increment
74
+ };
75
+ }
76
+ accessHelpers() {
77
+ const { doc, collection, writeBatch, serverTimestamp, setDoc } = this.helpers;
78
+ return {
79
+ doc: (path) => doc(this.db, path),
80
+ collection: (path) => collection(this.db, path),
81
+ writeBatch: () => writeBatch(this.db),
82
+ serverTimestamp,
83
+ setDoc
84
+ };
85
+ }
86
+ async getDoc(path) {
87
+ const { getDoc, doc } = this.helpers;
88
+ const docRef = doc(this.db, path);
89
+ const docSnap = await getDoc(docRef);
90
+ const data = docSnap.exists() ? {
91
+ ...docSnap.data(),
92
+ id: docSnap.id
93
+ } : null;
94
+ return {
95
+ id: docSnap.id,
96
+ data
97
+ };
98
+ }
99
+ async getDocs(path, ...queryConstraints) {
100
+ const { getDocs, query, collection } = this.helpers;
101
+ const collectionRef = collection(this.db, path);
102
+ const q = queryConstraints.length > 0 ? query(collectionRef, ...queryConstraints) : collectionRef;
103
+ const querySnapshot = await getDocs(q);
104
+ const data = querySnapshot.docs.map((doc) => ({
105
+ data: doc.data(),
106
+ id: doc.id
107
+ }));
108
+ return {
109
+ data,
110
+ querySnapshot,
111
+ empty: querySnapshot.empty
112
+ };
113
+ }
114
+ async addDoc(path, data) {
115
+ const { addDoc, collection } = this.helpers;
116
+ const collectionRef = collection(this.db, path);
117
+ const docRef = await addDoc(collectionRef, data);
118
+ return {
119
+ ...data,
120
+ id: docRef.id
121
+ };
122
+ }
123
+ async setDoc(path, data, options = {}) {
124
+ const { setDoc, doc } = this.helpers;
125
+ const docRef = doc(this.db, path);
126
+ await setDoc(docRef, data, options);
127
+ }
128
+ async updateDoc(path, data) {
129
+ const { updateDoc, doc } = this.helpers;
130
+ const docRef = doc(this.db, path);
131
+ await updateDoc(docRef, data);
132
+ }
133
+ async deleteDoc(path) {
134
+ const { deleteDoc, doc } = this.helpers;
135
+ const docRef = doc(this.db, path);
136
+ await deleteDoc(docRef);
137
+ }
138
+ async runTransaction(updateFunction) {
139
+ const { runTransaction } = this.helpers;
140
+ return runTransaction(this.db, updateFunction);
141
+ }
142
+ async runBatch(operations) {
143
+ const { writeBatch } = this.helpers;
144
+ const batch = writeBatch(this.db);
145
+ await Promise.all(operations.map((op) => op()));
146
+ await batch.commit();
147
+ }
148
+ writeBatch() {
149
+ const { writeBatch } = this.helpers;
150
+ const batch = writeBatch(this.db);
151
+ return batch;
152
+ }
153
+ };
154
+ var api = FirebaseAPI.getInstance();
155
+
156
+ // src/domains/assignment/assignment.constants.ts
157
+ var ASSIGNMENT_ANALYTICS_TYPES = [
158
+ "macro" /* Macro */,
159
+ "gradebook" /* Gradebook */,
160
+ "cards" /* Cards */,
161
+ "student" /* Student */,
162
+ "student_summary" /* StudentSummary */
163
+ ];
164
+ var ASSIGNMENTS_COLLECTION = "assignments";
165
+ var ANALYTICS_SUBCOLLECTION = "analytics";
166
+ var SCORES_SUBCOLLECTION = "scores";
167
+ var refsAssignmentFiresotre = {
168
+ allAssignments: () => ASSIGNMENTS_COLLECTION,
169
+ assignment: (params) => `${ASSIGNMENTS_COLLECTION}/${params.id}`,
170
+ assignmentAllAnalytics: (params) => `${ASSIGNMENTS_COLLECTION}/${params.id}/${ANALYTICS_SUBCOLLECTION}`,
171
+ assignmentAnalytics: (params) => `${ASSIGNMENTS_COLLECTION}/${params.id}/${ANALYTICS_SUBCOLLECTION}/${params.type}`,
172
+ assignmentScores: (params) => `${ASSIGNMENTS_COLLECTION}/${params.id}/${SCORES_SUBCOLLECTION}/${params.userId}`
173
+ };
174
+
175
+ // src/domains/assignment/services/get-assignments-score.service.ts
176
+ var _getAssignmentScores = async ({
177
+ assignmentId,
178
+ analyticType = "macro" /* Macro */,
179
+ studentId,
180
+ currentUserId
181
+ }) => {
182
+ if (analyticType === "student" /* Student */) {
183
+ const path = refsAssignmentFiresotre.assignmentScores({
184
+ id: assignmentId,
185
+ userId: currentUserId
186
+ });
187
+ const response = await api.getDoc(path);
188
+ return { scores: response.data, id: assignmentId };
189
+ }
190
+ if (analyticType === "student_summary" /* StudentSummary */ && studentId) {
191
+ const path = refsAssignmentFiresotre.assignmentScores({
192
+ id: assignmentId,
193
+ userId: studentId
194
+ });
195
+ const response = await api.getDoc(path);
196
+ return { scores: response.data, id: assignmentId };
197
+ }
198
+ if (analyticType !== "all" /* All */ && ASSIGNMENT_ANALYTICS_TYPES.includes(analyticType)) {
199
+ const ref = refsAssignmentFiresotre.assignmentAnalytics({
200
+ id: assignmentId,
201
+ type: analyticType
202
+ });
203
+ const docData = await api.getDoc(ref);
204
+ return { scores: docData.data, id: assignmentId };
205
+ } else if (analyticType === "all" /* All */) {
206
+ const ref = refsAssignmentFiresotre.assignmentAllAnalytics({ id: assignmentId });
207
+ const response = await api.getDocs(ref);
208
+ const data = response.data.reduce((acc, curr) => {
209
+ acc[curr.id] = curr;
210
+ return acc;
211
+ }, {});
212
+ return { scores: data, id: assignmentId };
213
+ }
214
+ };
215
+ var getAssignmentScores = withErrorHandler(_getAssignmentScores, "getAssignmentScores");
216
+
217
+ // src/domains/assignment/services/attach-score-assignment.service.ts
218
+ var _attachScoresAssignment = async ({
219
+ assignments,
220
+ analyticType,
221
+ studentId,
222
+ currentUserId
223
+ }) => {
224
+ const scoresPromises = assignments.map((a) => {
225
+ return getAssignmentScores({
226
+ assignmentId: a.id,
227
+ analyticType,
228
+ studentId,
229
+ currentUserId
230
+ });
231
+ });
232
+ const scores = await Promise.all(scoresPromises);
233
+ const scoresObject = scores.reduce((acc, curr) => {
234
+ acc[curr.id] = curr.scores;
235
+ return acc;
236
+ }, {});
237
+ const assignmentsWithScores = assignments.map((a) => {
238
+ var _a;
239
+ return {
240
+ ...a,
241
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/ban-ts-comment
242
+ // @ts-ignore
243
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
244
+ scores: (_a = scoresObject[a.id]) != null ? _a : null
245
+ };
246
+ });
247
+ return assignmentsWithScores;
248
+ };
249
+ var attachScoresAssignment = withErrorHandler(
250
+ _attachScoresAssignment,
251
+ "attachScoresAssignment"
252
+ );
253
+
254
+ // src/domains/assignment/services/get-all-assignment.service.ts
255
+ async function _getAllAssignments() {
256
+ const path = refsAssignmentFiresotre.allAssignments();
257
+ const response = await api.getDocs(path);
258
+ return response.data;
259
+ }
260
+ var getAllAssignments = withErrorHandler(_getAllAssignments, "getAllAssignments");
261
+
262
+ // src/domains/assignment/utils/check-assignment-availability.ts
263
+ import dayjs from "dayjs";
264
+ var checkAssignmentAvailability = (scheduledTime) => {
265
+ if (!scheduledTime) return true;
266
+ const scheduledDate = typeof scheduledTime === "string" ? dayjs(scheduledTime) : dayjs(scheduledTime.toDate());
267
+ if (!scheduledDate.isValid()) return true;
268
+ return dayjs().isAfter(scheduledDate);
269
+ };
270
+
271
+ // src/domains/assignment/services/get-assignment.service.ts
272
+ async function _getAssignment(params) {
273
+ var _a;
274
+ const path = refsAssignmentFiresotre.assignment({ id: params.assignmentId });
275
+ const response = await api.getDoc(path);
276
+ if (!response.data) return null;
277
+ const assignment = response.data;
278
+ const isAvailable = checkAssignmentAvailability(assignment.scheduledTime);
279
+ const assignmentWithId = {
280
+ ...assignment,
281
+ isAvailable,
282
+ id: params.assignmentId,
283
+ scheduledTime: (_a = assignment.scheduledTime) != null ? _a : null
284
+ };
285
+ if (params.analyticType) {
286
+ const assignmentsWithScores = await attachScoresAssignment({
287
+ assignments: [assignmentWithId],
288
+ analyticType: params.analyticType,
289
+ currentUserId: params.currentUserId
290
+ });
291
+ return assignmentsWithScores.length > 0 ? assignmentsWithScores[0] : assignmentWithId;
292
+ }
293
+ return assignmentWithId;
294
+ }
295
+ var getAssignment = withErrorHandler(_getAssignment, "getAssignment");
296
+
297
+ // src/domains/assignment/assignment.repo.ts
298
+ var createAssignmentRepo = () => {
299
+ return {
300
+ getAssignment,
301
+ attachScoresAssignment,
302
+ getAssignmentScores,
303
+ getAllAssignments
304
+ };
305
+ };
306
+
307
+ // src/domains/cards/services/create-card.service.ts
308
+ import { v4 } from "uuid";
309
+
310
+ // src/domains/cards/card.constants.ts
311
+ var CARDS_COLLECTION = "flashcards";
312
+ var refsCardsFiresotre = {
313
+ allCards: CARDS_COLLECTION,
314
+ card: (id) => `${CARDS_COLLECTION}/${id}`
315
+ };
316
+
317
+ // src/utils/text-utils.ts
318
+ import sha1 from "js-sha1";
319
+ var purify = (word) => {
320
+ return word.normalize("NFD").replace(/\/([^" "]*)/g, "").replace(/\([^()]*\)/g, "").replace(/([^()]*)/g, "").replace(/[\u0300-\u036f]/g, "").replace(/[-]/g, " ").replace(/[.,/#!¡¿?؟。,.?$%^&*;:{}=\-_`~()’'…\s]/g, "").replace(/\s\s+/g, " ").toLowerCase().trim();
321
+ };
322
+ var cleanString = (words) => {
323
+ const splitWords = words == null ? void 0 : words.split("+");
324
+ if (splitWords && splitWords.length === 1) {
325
+ const newWord = purify(words);
326
+ return newWord;
327
+ } else if (splitWords && splitWords.length > 1) {
328
+ const split = splitWords.map((w) => purify(w));
329
+ return split;
330
+ } else {
331
+ return "";
332
+ }
333
+ };
334
+ var getWordHash = (word, language) => {
335
+ const cleanedWord = cleanString(word);
336
+ const wordHash = sha1(`${language}-${cleanedWord}`);
337
+ console.log("wordHash core library", wordHash);
338
+ return wordHash;
339
+ };
340
+
341
+ // src/domains/cards/services/get-card-verification-status.service.ts
342
+ var charactarLanguages = ["zh", "ja", "ko"];
343
+ var getVerificationStatus = async (target_text, language) => {
344
+ if ((target_text == null ? void 0 : target_text.length) < 3 && !charactarLanguages.includes(language)) {
345
+ return "NOT_RECOMMENDED" /* NOT_RECOMMENDED */;
346
+ }
347
+ const hash = getWordHash(target_text, language);
348
+ const response = await api.getDoc(`checked-pronunciations/${hash}`);
349
+ try {
350
+ if (response.data) {
351
+ return processRecord(response.data);
352
+ } else {
353
+ return "NOT_CHECKED" /* NOT_CHECKED */;
354
+ }
355
+ } catch (e) {
356
+ return "NOT_CHECKED" /* NOT_CHECKED */;
357
+ }
358
+ };
359
+ var processRecord = (data) => {
360
+ const { pronunciations = 0, fails = 0 } = data;
361
+ const attempts = pronunciations + fails;
362
+ const successRate = attempts > 0 ? pronunciations / attempts * 100 : 0;
363
+ let newStatus = null;
364
+ if (attempts < 6) {
365
+ return "NOT_CHECKED" /* NOT_CHECKED */;
366
+ }
367
+ if (successRate > 25) {
368
+ newStatus = "VERIFIED" /* VERIFIED */;
369
+ } else if (successRate > 10) {
370
+ newStatus = "WARNING" /* WARNING */;
371
+ } else if (fails > 20 && successRate < 10 && pronunciations > 1) {
372
+ newStatus = "NOT_RECOMMENDED" /* NOT_RECOMMENDED */;
373
+ } else if (pronunciations === 0 && fails > 20) {
374
+ newStatus = "NOT_WORKING" /* NOT_WORKING */;
375
+ } else {
376
+ newStatus = "NOT_CHECKED" /* NOT_CHECKED */;
377
+ }
378
+ return newStatus;
379
+ };
380
+
381
+ // src/domains/cards/services/create-card.service.ts
382
+ async function _createCard({ data }) {
383
+ const response = await api.addDoc(refsCardsFiresotre.allCards, data);
384
+ return response;
385
+ }
386
+ var createCard = withErrorHandler(_createCard, "createCard");
387
+ async function _createCards({ cards }) {
388
+ const { writeBatch, doc } = api.accessHelpers();
389
+ const batch = writeBatch();
390
+ const cardsWithId = [];
391
+ for (const card of cards) {
392
+ const cardId = v4();
393
+ const ref = doc(refsCardsFiresotre.card(cardId));
394
+ const newCardObject = {
395
+ ...card,
396
+ id: cardId
397
+ };
398
+ if (card.type === "READ_REPEAT" /* READ_REPEAT */ && card.target_text && card.language) {
399
+ const verificationStatus = await getVerificationStatus(card.target_text, card.language);
400
+ newCardObject.verificationStatus = verificationStatus || null;
401
+ }
402
+ cardsWithId.push(newCardObject);
403
+ batch.set(ref, newCardObject);
404
+ }
405
+ await batch.commit();
406
+ return cardsWithId;
407
+ }
408
+ var createCards = withErrorHandler(_createCards, "createCards");
409
+
410
+ // src/domains/cards/services/get-card.service.ts
411
+ async function _getCard(params) {
412
+ const ref = refsCardsFiresotre.card(params.cardId);
413
+ const response = await api.getDoc(ref);
414
+ if (!response.data) return null;
415
+ return response.data;
416
+ }
417
+ var getCard = withErrorHandler(_getCard, "getCard");
418
+
419
+ // src/domains/cards/card.repo.ts
420
+ var createCardRepo = () => {
421
+ return {
422
+ createCard,
423
+ createCards,
424
+ getCard
425
+ };
426
+ };
427
+
428
+ // src/domains/sets/set.constants.ts
429
+ var SETS_COLLECTION = "sets";
430
+ var refsSetsFirestore = {
431
+ allSets: SETS_COLLECTION,
432
+ set: (id) => `${SETS_COLLECTION}/${id}`
433
+ };
434
+
435
+ // src/domains/sets/services/get-set.service.ts
436
+ async function _getSet({ setId }) {
437
+ const response = await api.getDoc(refsSetsFirestore.set(setId));
438
+ return response.data;
439
+ }
440
+ var getSet = withErrorHandler(_getSet, "getSet");
14
441
 
15
442
  // src/domains/sets/set.repo.ts
16
443
  var createSetRepo = () => {
package/dist/repos.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/domains/sets/set.repo.ts"],"sourcesContent":["import { getSet } from './services/get-set.service'\n\nexport const createSetRepo = () => {\n return {\n getSet,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAEO,IAAM,gBAAgB,MAAM;AACjC,SAAO;AAAA,IACL;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/utils/error-handler.ts","../src/lib/firebase/api.ts","../src/domains/assignment/assignment.constants.ts","../src/domains/assignment/services/get-assignments-score.service.ts","../src/domains/assignment/services/attach-score-assignment.service.ts","../src/domains/assignment/services/get-all-assignment.service.ts","../src/domains/assignment/utils/check-assignment-availability.ts","../src/domains/assignment/services/get-assignment.service.ts","../src/domains/assignment/assignment.repo.ts","../src/domains/cards/services/create-card.service.ts","../src/domains/cards/card.constants.ts","../src/utils/text-utils.ts","../src/domains/cards/services/get-card-verification-status.service.ts","../src/domains/cards/services/get-card.service.ts","../src/domains/cards/card.repo.ts","../src/domains/sets/set.constants.ts","../src/domains/sets/services/get-set.service.ts","../src/domains/sets/set.repo.ts"],"sourcesContent":["// error-handler.ts\nimport { type FirebaseError } from 'firebase/app'\n\nexport class ServiceError extends Error {\n constructor(\n message: string,\n public readonly originalError?: unknown,\n public readonly code?: string,\n ) {\n super(message)\n this.name = 'ServiceError'\n }\n}\n\n// Preservamos los tipos de los parámetros\ntype AsyncFunction<T, P extends any[] = any[]> = (...args: P) => Promise<T>\n\nexport function withErrorHandler<T, P extends any[]>(\n fn: AsyncFunction<T, P>,\n serviceName: string,\n): AsyncFunction<T, P> {\n return async (...args: P): Promise<T> => {\n try {\n return await fn(...args)\n } catch (error) {\n if (error instanceof Error && 'code' in error) {\n const firebaseError = error as FirebaseError\n\n throw new ServiceError(\n `Error in ${serviceName}: ${firebaseError.message}`,\n error,\n firebaseError.code,\n )\n }\n\n if (error instanceof Error) {\n throw new ServiceError(`Error in ${serviceName}: ${error.message}`, error)\n }\n\n throw new ServiceError(`Unknown error in ${serviceName}`, error)\n }\n }\n}\n","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","export enum AssignmentAnalyticsType {\n Macro = 'macro',\n Gradebook = 'gradebook',\n Cards = 'cards',\n Student = 'student',\n StudentSummary = 'student_summary',\n All = 'all',\n}\n\nexport const ASSIGNMENT_ANALYTICS_TYPES = [\n AssignmentAnalyticsType.Macro,\n AssignmentAnalyticsType.Gradebook,\n AssignmentAnalyticsType.Cards,\n AssignmentAnalyticsType.Student,\n AssignmentAnalyticsType.StudentSummary,\n]\n\nconst ASSIGNMENTS_COLLECTION = 'assignments'\nconst ANALYTICS_SUBCOLLECTION = 'analytics'\nconst SCORES_SUBCOLLECTION = 'scores'\n\nexport type RefsAssignmentFiresotre =\n `${typeof ASSIGNMENTS_COLLECTION}/${string}${`/${typeof ANALYTICS_SUBCOLLECTION}/${string}` | `/${typeof SCORES_SUBCOLLECTION}/${string}` | ''}`\n\nexport const refsAssignmentFiresotre = {\n allAssignments: () => ASSIGNMENTS_COLLECTION,\n assignment: (params: { id: string }) => `${ASSIGNMENTS_COLLECTION}/${params.id}` as const,\n assignmentAllAnalytics: (params: { id: string }) =>\n `${ASSIGNMENTS_COLLECTION}/${params.id}/${ANALYTICS_SUBCOLLECTION}` as const,\n assignmentAnalytics: (params: { id: string; type: string }) =>\n `${ASSIGNMENTS_COLLECTION}/${params.id}/${ANALYTICS_SUBCOLLECTION}/${params.type}` as const,\n assignmentScores: (params: { id: string; userId: string }) =>\n `${ASSIGNMENTS_COLLECTION}/${params.id}/${SCORES_SUBCOLLECTION}/${params.userId}` as const,\n}\n","import { api } from '@core/lib/firebase/api'\nimport { withErrorHandler } from '@core/utils/error-handler'\n\nimport {\n ASSIGNMENT_ANALYTICS_TYPES,\n AssignmentAnalyticsType,\n refsAssignmentFiresotre,\n} from '../assignment.constants'\n\nconst _getAssignmentScores = async ({\n assignmentId,\n analyticType = AssignmentAnalyticsType.Macro,\n studentId,\n currentUserId,\n}: {\n assignmentId: string\n currentUserId: string\n analyticType?: AssignmentAnalyticsType\n studentId?: string\n}) => {\n if (analyticType === AssignmentAnalyticsType.Student) {\n const path = refsAssignmentFiresotre.assignmentScores({\n id: assignmentId,\n userId: currentUserId,\n })\n const response = await api.getDoc(path)\n\n return { scores: response.data, id: assignmentId }\n }\n\n if (analyticType === AssignmentAnalyticsType.StudentSummary && studentId) {\n const path = refsAssignmentFiresotre.assignmentScores({\n id: assignmentId,\n userId: studentId,\n })\n const response = await api.getDoc(path)\n\n return { scores: response.data, id: assignmentId }\n }\n\n if (\n analyticType !== AssignmentAnalyticsType.All &&\n ASSIGNMENT_ANALYTICS_TYPES.includes(analyticType)\n ) {\n const ref = refsAssignmentFiresotre.assignmentAnalytics({\n id: assignmentId,\n type: analyticType,\n })\n\n const docData = await api.getDoc(ref)\n\n return { scores: docData.data, id: assignmentId }\n } else if (analyticType === AssignmentAnalyticsType.All) {\n const ref = refsAssignmentFiresotre.assignmentAllAnalytics({ id: assignmentId })\n\n const response = await api.getDocs(ref)\n const data = response.data.reduce((acc, curr) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n acc[curr.id] = curr\n\n return acc\n }, {})\n\n return { scores: data, id: assignmentId }\n }\n}\n\nexport const getAssignmentScores = withErrorHandler(_getAssignmentScores, 'getAssignmentScores')\n","import { withErrorHandler } from '@core/utils/error-handler'\n\nimport { type AssignmentAnalyticsType } from '../assignment.constants'\nimport { type AssignmentWithId } from '../assignment.model'\n\nimport { getAssignmentScores } from './get-assignments-score.service'\n\nconst _attachScoresAssignment = async ({\n assignments,\n analyticType,\n studentId,\n currentUserId,\n}: {\n assignments: AssignmentWithId[]\n analyticType: AssignmentAnalyticsType\n studentId?: string\n currentUserId: string\n}) => {\n const scoresPromises = assignments.map(a => {\n return getAssignmentScores({\n assignmentId: a.id,\n analyticType: analyticType,\n studentId,\n currentUserId,\n })\n })\n const scores = await Promise.all(scoresPromises)\n\n const scoresObject = scores.reduce((acc, curr) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n acc[curr.id] = curr.scores\n\n return acc\n }, {})\n const assignmentsWithScores = assignments.map(a => {\n return {\n ...a,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n scores: scoresObject[a.id] ?? null,\n }\n })\n\n return assignmentsWithScores\n}\n\nexport const attachScoresAssignment = withErrorHandler(\n _attachScoresAssignment,\n 'attachScoresAssignment',\n)\n","import { api } from '@core/lib/firebase/api'\nimport { withErrorHandler } from '@core/utils/error-handler'\n\nimport { refsAssignmentFiresotre } from '../assignment.constants'\nimport { type AssignmentWithId } from '../assignment.model'\n\nexport async function _getAllAssignments() {\n const path = refsAssignmentFiresotre.allAssignments()\n const response = await api.getDocs<AssignmentWithId>(path)\n\n return response.data\n}\n\nexport const getAllAssignments = withErrorHandler(_getAllAssignments, 'getAllAssignments')\n","import { type CustomTimestamp } from '@core/types/firebase.types'\nimport dayjs from 'dayjs'\n\nexport const checkAssignmentAvailability = (\n scheduledTime: string | CustomTimestamp | null | undefined,\n) => {\n if (!scheduledTime) return true\n\n const scheduledDate =\n typeof scheduledTime === 'string' ? dayjs(scheduledTime) : dayjs(scheduledTime.toDate())\n\n if (!scheduledDate.isValid()) return true\n\n return dayjs().isAfter(scheduledDate)\n}\n","import { api } from '@core/lib/firebase/api'\nimport { withErrorHandler } from '@core/utils/error-handler'\n\nimport { type AssignmentWithId } from '../assignment.model'\nimport { type AssignmentAnalyticsType, refsAssignmentFiresotre } from '../assignment.constants'\nimport { checkAssignmentAvailability } from '../utils/check-assignment-availability'\n\nimport { attachScoresAssignment } from './attach-score-assignment.service'\n\nasync function _getAssignment(params: {\n assignmentId: string\n currentUserId: string\n analyticType?: AssignmentAnalyticsType\n studentId?: string\n}) {\n const path = refsAssignmentFiresotre.assignment({ id: params.assignmentId })\n const response = await api.getDoc<AssignmentWithId>(path)\n\n if (!response.data) return null\n\n const assignment = response.data\n\n const isAvailable = checkAssignmentAvailability(assignment.scheduledTime)\n\n const assignmentWithId: AssignmentWithId = {\n ...assignment,\n isAvailable,\n id: params.assignmentId,\n scheduledTime: assignment.scheduledTime ?? null,\n }\n\n if (params.analyticType) {\n const assignmentsWithScores = await attachScoresAssignment({\n assignments: [assignmentWithId],\n analyticType: params.analyticType,\n currentUserId: params.currentUserId,\n })\n\n return assignmentsWithScores.length > 0 ? assignmentsWithScores[0] : assignmentWithId\n }\n\n return assignmentWithId\n}\n\nexport const getAssignment = withErrorHandler(_getAssignment, 'getAssignment')\n","import { attachScoresAssignment } from './services/attach-score-assignment.service'\nimport { getAllAssignments } from './services/get-all-assignment.service'\nimport { getAssignment } from './services/get-assignment.service'\nimport { getAssignmentScores } from './services/get-assignments-score.service'\n\nexport const createAssignmentRepo = () => {\n return {\n getAssignment: getAssignment,\n attachScoresAssignment: attachScoresAssignment,\n getAssignmentScores: getAssignmentScores,\n getAllAssignments: getAllAssignments,\n }\n}\n","import { v4 } from 'uuid'\nimport { api } from '@core/lib/firebase/api'\nimport { withErrorHandler } from '@core/utils/error-handler'\n\nimport { ActivityPageType, type PageActivityWithId, type PageActivity } from '../card.model'\nimport { refsCardsFiresotre } from '../card.constants'\n\nimport { getVerificationStatus } from './get-card-verification-status.service'\n\nasync function _createCard({ data }: { data: Partial<PageActivity> }) {\n const response = await api.addDoc(refsCardsFiresotre.allCards, data)\n\n return response\n}\n\nexport const createCard = withErrorHandler(_createCard, 'createCard')\n\nasync function _createCards({ cards }: { cards: PageActivity[] }) {\n const { writeBatch, doc } = api.accessHelpers()\n\n const batch = writeBatch()\n\n const cardsWithId = []\n\n for (const card of cards) {\n const cardId = v4()\n\n const ref = doc(refsCardsFiresotre.card(cardId))\n\n const newCardObject = {\n ...card,\n id: cardId,\n }\n\n if (card.type === ActivityPageType.READ_REPEAT && card.target_text && card.language) {\n const verificationStatus = await getVerificationStatus(card.target_text, card.language)\n\n newCardObject.verificationStatus = verificationStatus || null\n }\n cardsWithId.push(newCardObject)\n batch.set(ref, newCardObject)\n }\n\n await batch.commit()\n\n return cardsWithId satisfies PageActivityWithId[]\n}\n\nexport const createCards = withErrorHandler(_createCards, 'createCards')\n","/* eslint-disable @typescript-eslint/naming-convention */\n\nexport enum FeedbackTypesCard {\n SuggestedResponse = 'suggested_response',\n Wida = 'wida',\n GrammarInsights = 'grammar_insights',\n Actfl = 'actfl',\n ProficiencyLevel = 'proficiency_level',\n}\n\nexport enum LeniencyCard {\n CONFIDENCE = 'confidence',\n EASY = 'easy',\n NORMAL = 'normal',\n HARD = 'hard',\n}\n\nexport const LENIENCY_OPTIONS = [\n {\n label: 'Build Confidence - most lenient',\n value: LeniencyCard.CONFIDENCE,\n },\n {\n label: 'Very Lenient',\n value: LeniencyCard.EASY,\n },\n {\n label: 'Normal',\n value: LeniencyCard.NORMAL,\n },\n {\n label: 'No leniency - most strict',\n value: LeniencyCard.HARD,\n },\n]\n\nexport const STUDENT_LEVELS_OPTIONS = [\n {\n label: 'Beginner',\n description: 'Beginner Level: Just starting out. Can say a few basic words and phrases.',\n value: 'beginner',\n },\n {\n label: 'Elementary',\n description:\n 'Elementary Level: Can understand simple sentences and have very basic conversations.',\n value: 'elementary',\n },\n {\n label: 'Intermediate',\n description: 'Intermediate Level: Can talk about everyday topics and handle common situations.',\n value: 'intermediate',\n },\n {\n label: 'Advanced',\n description: 'Advanced Level: Can speak and understand with ease, and explain ideas clearly.',\n value: 'advanced',\n },\n {\n label: 'Fluent',\n description:\n 'Fluent Level: Speaks naturally and easily. Can use the language in work or school settings.',\n value: 'fluent',\n },\n {\n label: 'Native-like',\n description:\n 'Native-like Level: Understands and speaks like a native. Can discuss complex ideas accurately.',\n value: 'nativeLike',\n },\n]\n\nexport const BASE_RESPOND_FIELD_VALUES = {\n title: '',\n allowRetries: true,\n respondTime: 180,\n maxCharacters: 1000,\n}\n\nexport const BASE_REPEAT_FIELD_VALUES = {\n repeat: 1,\n}\n\nexport const BASE_MULTIPLE_CHOICE_FIELD_VALUES = {\n MCQType: 'single',\n answer: ['A'],\n choices: [\n { option: 'A', value: 'Option A' },\n { option: 'B', value: 'Option B' },\n { option: 'C', value: 'Option C' },\n ],\n}\n\nexport enum VerificationCardStatus {\n VERIFIED = 'VERIFIED',\n WARNING = 'WARNING',\n NOT_RECOMMENDED = 'NOT_RECOMMENDED',\n NOT_WORKING = 'NOT_WORKING',\n NOT_CHECKED = 'NOT_CHECKED',\n}\n\nconst CARDS_COLLECTION = 'flashcards'\n\nexport type RefsCardsFiresotre = `${typeof CARDS_COLLECTION}/${string}`\n\nexport const refsCardsFiresotre = {\n allCards: CARDS_COLLECTION,\n card: (id: string) => `${CARDS_COLLECTION}/${id}` as const,\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport sha1 from 'js-sha1'\n\nexport const purify = (word: string) => {\n return word\n .normalize('NFD')\n .replace(/\\/([^\" \"]*)/g, '') // removes word after slash to space el/la --> el\n .replace(/\\([^()]*\\)/g, '') // removes word parenthesis\n .replace(/([^()]*)/g, '') //removes chinese parenthesis\n .replace(/[\\u0300-\\u036f]/g, '') // removes diacritics\n .replace(/[-]/g, ' ') // removes hyphens\n .replace(/[.,/#!¡¿?؟。,.?$%^&*;:{}=\\-_`~()’'…\\s]/g, '') // removes punctuation\n .replace(/\\s\\s+/g, ' ') //Removes all whitespace\n .toLowerCase()\n .trim()\n}\n\nexport const cleanString = (words: string) => {\n const splitWords = words?.split('+')\n\n if (splitWords && splitWords.length === 1) {\n const newWord = purify(words)\n\n return newWord\n } else if (splitWords && splitWords.length > 1) {\n const split = splitWords.map(w => purify(w))\n\n return split\n } else {\n return ''\n }\n}\n\nexport const getWordHash = (word: string, language: string) => {\n const cleanedWord = cleanString(word)\n const wordHash = sha1(`${language}-${cleanedWord as string}`)\n\n console.log('wordHash core library', wordHash)\n\n return wordHash\n}\n\nexport function getPhraseLength(phrase: string, input?: string) {\n if (Array.isArray(phrase) && phrase.includes(input)) {\n return phrase[phrase.indexOf(input)].split(' ').length as number\n } else {\n return phrase ? phrase.split(' ').length : (0 as number)\n }\n}\n","/* eslint-disable @typescript-eslint/restrict-plus-operands */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { getWordHash } from '@core/utils/text-utils'\nimport { api } from '@core/lib/firebase/api'\n\nimport { VerificationCardStatus } from '../card.constants'\n\nconst charactarLanguages = ['zh', 'ja', 'ko']\n\nexport const getVerificationStatus = async (target_text: string, language: string) => {\n if (target_text?.length < 3 && !charactarLanguages.includes(language)) {\n return VerificationCardStatus.NOT_RECOMMENDED\n }\n const hash = getWordHash(target_text, language)\n const response = await api.getDoc<any>(`checked-pronunciations/${hash}`)\n\n try {\n if (response.data) {\n return processRecord(response.data)\n } else {\n return VerificationCardStatus.NOT_CHECKED\n }\n } catch (e) {\n return VerificationCardStatus.NOT_CHECKED\n }\n}\n\nconst processRecord = (data: any) => {\n const { pronunciations = 0, fails = 0 } = data\n const attempts = pronunciations + fails\n const successRate = attempts > 0 ? (pronunciations / attempts) * 100 : 0\n let newStatus = null\n\n if (attempts < 6) {\n return VerificationCardStatus.NOT_CHECKED\n }\n if (successRate > 25) {\n // console.log('Verified')\n newStatus = VerificationCardStatus.VERIFIED\n } else if (successRate > 10) {\n // console.log('Warning')\n newStatus = VerificationCardStatus.WARNING\n } else if (fails > 20 && successRate < 10 && pronunciations > 1) {\n // console.log('Not recommended for use')\n newStatus = VerificationCardStatus.NOT_RECOMMENDED\n } else if (pronunciations === 0 && fails > 20) {\n // console.log('does not work')\n newStatus = VerificationCardStatus.NOT_WORKING\n } else {\n // console.log('no data - must be checked')\n newStatus = VerificationCardStatus.NOT_CHECKED\n }\n\n return newStatus\n}\n","import { api } from '@core/lib/firebase/api'\nimport { withErrorHandler } from '@core/utils/error-handler'\n\nimport { type PageActivityWithId } from '../card.model'\nimport { refsCardsFiresotre } from '../card.constants'\n\nasync function _getCard(params: { cardId: string }) {\n const ref = refsCardsFiresotre.card(params.cardId)\n\n const response = await api.getDoc<PageActivityWithId>(ref)\n\n if (!response.data) return null\n\n return response.data\n}\n\nexport const getCard = withErrorHandler(_getCard, 'getCard')\n","import { createCards } from './services/create-card.service'\nimport { createCard } from './services/create-card.service'\nimport { getCard } from './services/get-card.service'\n\nexport const createCardRepo = () => {\n return {\n createCard: createCard,\n createCards: createCards,\n getCard: getCard,\n }\n}\n","const SETS_COLLECTION = 'sets'\n\nexport type RefsSetsFirestore = `${typeof SETS_COLLECTION}/${string}`\n\nexport const refsSetsFirestore = {\n allSets: SETS_COLLECTION,\n set: (id: string) => `${SETS_COLLECTION}/${id}` as const,\n}\n","import { api } from '@core/lib/firebase/api'\nimport { withErrorHandler } from '@core/utils/error-handler'\n\nimport { refsSetsFirestore } from '../set.constants'\nimport { type SetWithId } from '../set.model'\n\nasync function _getSet({ setId }: { setId: string }) {\n const response = await api.getDoc<SetWithId>(refsSetsFirestore.set(setId))\n\n return response.data\n}\n\nexport const getSet = withErrorHandler(_getSet, 'getSet')\n","import { getSet } from './services/get-set.service'\n\nexport const createSetRepo = () => {\n return {\n getSet,\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,72 @@
1
+ declare const FEEDBACK_PLANS: {
2
+ readonly FEEDBACK_TRANSCRIPT: "FEEDBACK_TRANSCRIPT";
3
+ readonly FEEDBACK_SUMMARY: "FEEDBACK_SUMMARY";
4
+ readonly FEEDBACK_GRAMMAR_INSIGHTS: "FEEDBACK_GRAMMAR_INSIGHTS";
5
+ readonly FEEDBACK_SUGGESTED_RESPONSE: "FEEDBACK_SUGGESTED_RESPONSE";
6
+ readonly FEEDBACK_RUBRIC: "FEEDBACK_RUBRIC";
7
+ readonly FEEDBACK_GRADING_STANDARDS: "FEEDBACK_GRADING_STANDARDS";
8
+ readonly FEEDBACK_TARGET_LANGUAGE: "FEEDBACK_TARGET_LANGUAGE";
9
+ readonly FEEDBACK_DISABLE_ALLOW_RETRIES: "FEEDBACK_DISABLE_ALLOW_RETRIES";
10
+ };
11
+ declare const AUTO_GRADING_PLANS: {
12
+ readonly AUTO_GRADING_PASS_FAIL: "AUTO_GRADING_PASS_FAIL";
13
+ readonly AUTO_GRADING_RUBRICS: "AUTO_GRADING_RUBRICS";
14
+ readonly AUTO_GRADING_STANDARDS_BASED: "AUTO_GRADING_STANDARDS_BASED";
15
+ };
16
+ declare const COMMENTS_PLANS: {
17
+ readonly COMMENTS_SUGGESTIONS: "COMMENTS_SUGGESTIONS";
18
+ };
19
+ declare const AI_ASSISTANT_PLANS: {
20
+ readonly AI_ASSISTANT_DOCUMENT_UPLOADS: "AI_ASSISTANT_DOCUMENT_UPLOADS";
21
+ readonly AI_ASSISTANT_UNLIMITED_USE: "AI_ASSISTANT_UNLIMITED_USE";
22
+ };
23
+ declare const ASSIGNMENT_SETTINGS_PLANS: {
24
+ readonly ASSESSMENTS: "ASSESSMENTS";
25
+ readonly GOOGLE_CLASSROOM_GRADE_PASSBACK: "GOOGLE_CLASSROOM_GRADE_PASSBACK";
26
+ };
27
+ declare const ANALYTICS_PLANS: {
28
+ readonly ANALYTICS_GRADEBOOK: "ANALYTICS_GRADEBOOK";
29
+ readonly ANALYTICS_CLASSROOM_ANALYTICS: "ANALYTICS_CLASSROOM_ANALYTICS";
30
+ readonly ANALYTICS_STUDENT_PROGRESS_REPORTS: "ANALYTICS_STUDENT_PROGRESS_REPORTS";
31
+ readonly ANALYTICS_ASSIGNMENT_RESULTS: "ANALYTICS_ASSIGNMENT_RESULTS";
32
+ readonly ANALYTICS_ORGANIZATION: "ANALYTICS_ORGANIZATION";
33
+ };
34
+ declare const SPACES_PLANS: {
35
+ readonly SPACES_CREATE_SPACE: "SPACES_CREATE_SPACE";
36
+ readonly SPACES_CHECK_POINTS: "SPACES_CHECK_POINTS";
37
+ };
38
+ declare const DISCOVER_PLANS: {
39
+ readonly DISCOVER_ORGANIZATION_LIBRARY: "DISCOVER_ORGANIZATION_LIBRARY";
40
+ };
41
+ declare const INTEGRATIONS_PLANS: {
42
+ readonly INTEGRATIONS_LTI: "INTEGRATIONS_LTI";
43
+ };
44
+ declare const MEDIA_AREA_PLANS: {
45
+ readonly MEDIA_AREA_DOCUMENT_UPLOAD: "MEDIA_AREA_DOCUMENT_UPLOAD";
46
+ readonly MEDIA_AREA_AUDIO_FILES: "MEDIA_AREA_AUDIO_FILES";
47
+ };
48
+ declare const FREE_PLAN: never[];
49
+ declare const TEACHER_PRO_PLAN: ("FEEDBACK_TRANSCRIPT" | "FEEDBACK_SUMMARY" | "FEEDBACK_TARGET_LANGUAGE" | "AUTO_GRADING_PASS_FAIL" | "ANALYTICS_GRADEBOOK" | "SPACES_CREATE_SPACE")[];
50
+ declare const SCHOOL_STARTER: ("FEEDBACK_TRANSCRIPT" | "FEEDBACK_SUMMARY" | "FEEDBACK_GRAMMAR_INSIGHTS" | "FEEDBACK_SUGGESTED_RESPONSE" | "FEEDBACK_RUBRIC" | "FEEDBACK_GRADING_STANDARDS" | "FEEDBACK_TARGET_LANGUAGE" | "FEEDBACK_DISABLE_ALLOW_RETRIES" | "AUTO_GRADING_PASS_FAIL" | "AUTO_GRADING_RUBRICS" | "AUTO_GRADING_STANDARDS_BASED" | "AI_ASSISTANT_DOCUMENT_UPLOADS" | "AI_ASSISTANT_UNLIMITED_USE" | "GOOGLE_CLASSROOM_GRADE_PASSBACK" | "ANALYTICS_GRADEBOOK" | "ANALYTICS_CLASSROOM_ANALYTICS" | "ANALYTICS_STUDENT_PROGRESS_REPORTS" | "SPACES_CREATE_SPACE" | "SPACES_CHECK_POINTS" | "MEDIA_AREA_DOCUMENT_UPLOAD" | "MEDIA_AREA_AUDIO_FILES")[];
51
+ declare const ORGANIZATION_PLAN: ("FEEDBACK_TRANSCRIPT" | "FEEDBACK_SUMMARY" | "FEEDBACK_GRAMMAR_INSIGHTS" | "FEEDBACK_SUGGESTED_RESPONSE" | "FEEDBACK_RUBRIC" | "FEEDBACK_GRADING_STANDARDS" | "FEEDBACK_TARGET_LANGUAGE" | "FEEDBACK_DISABLE_ALLOW_RETRIES" | "AUTO_GRADING_PASS_FAIL" | "AUTO_GRADING_RUBRICS" | "AUTO_GRADING_STANDARDS_BASED" | "AI_ASSISTANT_DOCUMENT_UPLOADS" | "AI_ASSISTANT_UNLIMITED_USE" | "ASSESSMENTS" | "GOOGLE_CLASSROOM_GRADE_PASSBACK" | "ANALYTICS_GRADEBOOK" | "ANALYTICS_CLASSROOM_ANALYTICS" | "ANALYTICS_STUDENT_PROGRESS_REPORTS" | "ANALYTICS_ORGANIZATION" | "SPACES_CREATE_SPACE" | "SPACES_CHECK_POINTS" | "DISCOVER_ORGANIZATION_LIBRARY" | "MEDIA_AREA_DOCUMENT_UPLOAD" | "MEDIA_AREA_AUDIO_FILES")[];
52
+ declare const SpeakablePlanTypes: {
53
+ readonly basic: "basic";
54
+ readonly teacher_pro: "teacher_pro";
55
+ readonly school_starter: "school_starter";
56
+ readonly organization: "organization";
57
+ readonly starter: "starter";
58
+ readonly growth: "growth";
59
+ readonly professional: "professional";
60
+ };
61
+ declare const SpeakablePermissionsMap: {
62
+ readonly basic: never[];
63
+ readonly starter: ("FEEDBACK_TRANSCRIPT" | "FEEDBACK_SUMMARY" | "FEEDBACK_TARGET_LANGUAGE" | "AUTO_GRADING_PASS_FAIL" | "ANALYTICS_GRADEBOOK" | "SPACES_CREATE_SPACE")[];
64
+ readonly teacher_pro: ("FEEDBACK_TRANSCRIPT" | "FEEDBACK_SUMMARY" | "FEEDBACK_TARGET_LANGUAGE" | "AUTO_GRADING_PASS_FAIL" | "ANALYTICS_GRADEBOOK" | "SPACES_CREATE_SPACE")[];
65
+ readonly growth: ("FEEDBACK_TRANSCRIPT" | "FEEDBACK_SUMMARY" | "FEEDBACK_GRAMMAR_INSIGHTS" | "FEEDBACK_SUGGESTED_RESPONSE" | "FEEDBACK_RUBRIC" | "FEEDBACK_GRADING_STANDARDS" | "FEEDBACK_TARGET_LANGUAGE" | "FEEDBACK_DISABLE_ALLOW_RETRIES" | "AUTO_GRADING_PASS_FAIL" | "AUTO_GRADING_RUBRICS" | "AUTO_GRADING_STANDARDS_BASED" | "AI_ASSISTANT_DOCUMENT_UPLOADS" | "AI_ASSISTANT_UNLIMITED_USE" | "ASSESSMENTS" | "GOOGLE_CLASSROOM_GRADE_PASSBACK" | "ANALYTICS_GRADEBOOK" | "ANALYTICS_CLASSROOM_ANALYTICS" | "ANALYTICS_STUDENT_PROGRESS_REPORTS" | "ANALYTICS_ORGANIZATION" | "SPACES_CREATE_SPACE" | "SPACES_CHECK_POINTS" | "DISCOVER_ORGANIZATION_LIBRARY" | "MEDIA_AREA_DOCUMENT_UPLOAD" | "MEDIA_AREA_AUDIO_FILES")[];
66
+ readonly professional: ("FEEDBACK_TRANSCRIPT" | "FEEDBACK_SUMMARY" | "FEEDBACK_GRAMMAR_INSIGHTS" | "FEEDBACK_SUGGESTED_RESPONSE" | "FEEDBACK_RUBRIC" | "FEEDBACK_GRADING_STANDARDS" | "FEEDBACK_TARGET_LANGUAGE" | "FEEDBACK_DISABLE_ALLOW_RETRIES" | "AUTO_GRADING_PASS_FAIL" | "AUTO_GRADING_RUBRICS" | "AUTO_GRADING_STANDARDS_BASED" | "AI_ASSISTANT_DOCUMENT_UPLOADS" | "AI_ASSISTANT_UNLIMITED_USE" | "ASSESSMENTS" | "GOOGLE_CLASSROOM_GRADE_PASSBACK" | "ANALYTICS_GRADEBOOK" | "ANALYTICS_CLASSROOM_ANALYTICS" | "ANALYTICS_STUDENT_PROGRESS_REPORTS" | "ANALYTICS_ORGANIZATION" | "SPACES_CREATE_SPACE" | "SPACES_CHECK_POINTS" | "DISCOVER_ORGANIZATION_LIBRARY" | "MEDIA_AREA_DOCUMENT_UPLOAD" | "MEDIA_AREA_AUDIO_FILES")[];
67
+ readonly organization: ("FEEDBACK_TRANSCRIPT" | "FEEDBACK_SUMMARY" | "FEEDBACK_GRAMMAR_INSIGHTS" | "FEEDBACK_SUGGESTED_RESPONSE" | "FEEDBACK_RUBRIC" | "FEEDBACK_GRADING_STANDARDS" | "FEEDBACK_TARGET_LANGUAGE" | "FEEDBACK_DISABLE_ALLOW_RETRIES" | "AUTO_GRADING_PASS_FAIL" | "AUTO_GRADING_RUBRICS" | "AUTO_GRADING_STANDARDS_BASED" | "AI_ASSISTANT_DOCUMENT_UPLOADS" | "AI_ASSISTANT_UNLIMITED_USE" | "ASSESSMENTS" | "GOOGLE_CLASSROOM_GRADE_PASSBACK" | "ANALYTICS_GRADEBOOK" | "ANALYTICS_CLASSROOM_ANALYTICS" | "ANALYTICS_STUDENT_PROGRESS_REPORTS" | "ANALYTICS_ORGANIZATION" | "SPACES_CREATE_SPACE" | "SPACES_CHECK_POINTS" | "DISCOVER_ORGANIZATION_LIBRARY" | "MEDIA_AREA_DOCUMENT_UPLOAD" | "MEDIA_AREA_AUDIO_FILES")[];
68
+ readonly school_starter: ("FEEDBACK_TRANSCRIPT" | "FEEDBACK_SUMMARY" | "FEEDBACK_GRAMMAR_INSIGHTS" | "FEEDBACK_SUGGESTED_RESPONSE" | "FEEDBACK_RUBRIC" | "FEEDBACK_GRADING_STANDARDS" | "FEEDBACK_TARGET_LANGUAGE" | "FEEDBACK_DISABLE_ALLOW_RETRIES" | "AUTO_GRADING_PASS_FAIL" | "AUTO_GRADING_RUBRICS" | "AUTO_GRADING_STANDARDS_BASED" | "AI_ASSISTANT_DOCUMENT_UPLOADS" | "AI_ASSISTANT_UNLIMITED_USE" | "GOOGLE_CLASSROOM_GRADE_PASSBACK" | "ANALYTICS_GRADEBOOK" | "ANALYTICS_CLASSROOM_ANALYTICS" | "ANALYTICS_STUDENT_PROGRESS_REPORTS" | "SPACES_CREATE_SPACE" | "SPACES_CHECK_POINTS" | "MEDIA_AREA_DOCUMENT_UPLOAD" | "MEDIA_AREA_AUDIO_FILES")[];
69
+ };
70
+ declare const SpeakablePlanHierarchy: readonly ["basic", "starter", "teacher_pro", "growth", "professional", "school_starter", "organization"];
71
+
72
+ export { AUTO_GRADING_PLANS as A, COMMENTS_PLANS as C, DISCOVER_PLANS as D, FEEDBACK_PLANS as F, INTEGRATIONS_PLANS as I, MEDIA_AREA_PLANS as M, ORGANIZATION_PLAN as O, SpeakablePlanTypes as S, TEACHER_PRO_PLAN as T, AI_ASSISTANT_PLANS as a, ASSIGNMENT_SETTINGS_PLANS as b, ANALYTICS_PLANS as c, SPACES_PLANS as d, FREE_PLAN as e, SCHOOL_STARTER as f, SpeakablePermissionsMap as g, SpeakablePlanHierarchy as h };