politeshop 0.0.1

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 (42) hide show
  1. package/README.md +33 -0
  2. package/dist/clients/brightspace.d.ts +75 -0
  3. package/dist/clients/brightspace.d.ts.map +1 -0
  4. package/dist/clients/brightspace.js +104 -0
  5. package/dist/clients/brightspace.js.map +1 -0
  6. package/dist/clients/polite.d.ts +117 -0
  7. package/dist/clients/polite.d.ts.map +1 -0
  8. package/dist/clients/polite.js +191 -0
  9. package/dist/clients/polite.js.map +1 -0
  10. package/dist/clients/politeshop.d.ts +119 -0
  11. package/dist/clients/politeshop.d.ts.map +1 -0
  12. package/dist/clients/politeshop.js +401 -0
  13. package/dist/clients/politeshop.js.map +1 -0
  14. package/dist/errors.d.ts +7 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +9 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/index.d.ts +5 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +4 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/schema/polite.d.ts +809 -0
  23. package/dist/schema/polite.d.ts.map +1 -0
  24. package/dist/schema/polite.js +197 -0
  25. package/dist/schema/polite.js.map +1 -0
  26. package/dist/schema/siren.d.ts +66 -0
  27. package/dist/schema/siren.d.ts.map +1 -0
  28. package/dist/schema/siren.js +112 -0
  29. package/dist/schema/siren.js.map +1 -0
  30. package/dist/types.d.ts +105 -0
  31. package/dist/types.d.ts.map +1 -0
  32. package/dist/types.js +6 -0
  33. package/dist/types.js.map +1 -0
  34. package/dist/utils/array.d.ts +5 -0
  35. package/dist/utils/array.d.ts.map +1 -0
  36. package/dist/utils/array.js +13 -0
  37. package/dist/utils/array.js.map +1 -0
  38. package/dist/utils/url.d.ts +23 -0
  39. package/dist/utils/url.d.ts.map +1 -0
  40. package/dist/utils/url.js +53 -0
  41. package/dist/utils/url.js.map +1 -0
  42. package/package.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"politeshop.d.ts","sourceRoot":"","sources":["../../clients/politeshop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,cAAc,EACd,MAAM,EACN,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,iBAAiB,EACjB,IAAI,EACJ,UAAU,EACX,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;;;GAQG;AACH,qBAAa,UAAU;;IACrB,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAIxB;;;;OAIG;gBACS,MAAM,EAAE;QAClB,oCAAoC;QACpC,aAAa,EAAE,MAAM,CAAC;QACtB,0CAA0C;QAC1C,mBAAmB,EAAE,MAAM,CAAC;QAC5B,yDAAyD;QACzD,MAAM,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB;IAcD;;;;;;;OAOG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAatC;IAID,4CAA4C;IACtC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,0EAA0E;IACpE,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ5C;;;qDAGiD;IACjD,sBAAsB,CAAC,MAAM,EAAE;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,MAAM,CAAC;IACnB,sBAAsB,CAAC,MAAM,EAAE;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,MAAM;IAiBV;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA0BrC;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC;QACtC,OAAO,EAAE,CAAC,MAAM,GAAG;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC,EAAE,CAAC;QAC7C,SAAS,EAAE,QAAQ,EAAE,CAAC;KACvB,CAAC;IAqDF;;;;;OAKG;IACG,gBAAgB,CAAC,EACrB,QAAQ,GACT,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA8K7B,wDAAwD;IAClD,sBAAsB,CAAC,EAC3B,QAAQ,GACT,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAahC;;;;;;;;;;;;;;;;;OAiBG;IACG,cAAc,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,cAAc,GACf,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAiEzB;;OAEG;IACG,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAwBrE,+EAA+E;IAC/E,KAAK,IAAI,IAAI;CAoDd"}
@@ -0,0 +1,401 @@
1
+ import { z } from "zod";
2
+ import { getURLExpiry, lastPathComponent } from "../utils/url";
3
+ import { chunk } from "../utils/array";
4
+ import { Brightspace } from "./brightspace";
5
+ import { POLITE } from "./polite";
6
+ /**
7
+ * High-level POLITEMall client.
8
+ *
9
+ * Composes {@link POLITE} (for `*.polite.edu.sg` APIs) and {@link Brightspace}
10
+ * (for `*.api.brightspace.com` APIs) into a single, convenient interface.
11
+ *
12
+ * Both lower-level clients are accessible so callers can reach endpoints not
13
+ * covered by the high-level methods.
14
+ */
15
+ export class POLITEShop {
16
+ /** Client for `*.polite.edu.sg` APIs. */
17
+ polite;
18
+ #brightspaceInstance = null;
19
+ /**
20
+ * Initialize the underlying {@link POLITE} client. If `d2lFetchToken` is
21
+ * provided, the {@link Brightspace} client is also initialized immediately.
22
+ * Otherwise, it is initialized lazily via the {@link brightspace} getter.
23
+ */
24
+ constructor(config) {
25
+ this.polite = new POLITE({
26
+ d2lSessionVal: config.d2lSessionVal,
27
+ d2lSecureSessionVal: config.d2lSecureSessionVal,
28
+ domain: config.domain,
29
+ });
30
+ if (config.d2lFetchToken) {
31
+ this.#brightspaceInstance = new Brightspace({
32
+ d2lFetchToken: config.d2lFetchToken,
33
+ });
34
+ }
35
+ }
36
+ /**
37
+ * Returns the initialized {@link Brightspace} client, fetching or refreshing
38
+ * the `d2lFetchToken` automatically when needed.
39
+ *
40
+ * Implemented as a Promise-returning getter rather than a plain `Brightspace`
41
+ * property because the token may be unavailable or expired at access time,
42
+ * requiring an asynchronous network request to obtain a fresh one.
43
+ */
44
+ get brightspace() {
45
+ if (this.#brightspaceInstance !== null &&
46
+ this.#brightspaceInstance.tokenExpiry > new Date()) {
47
+ return Promise.resolve(this.#brightspaceInstance);
48
+ }
49
+ return this.polite.getNewFetchToken().then(({ access_token }) => {
50
+ this.#brightspaceInstance = new Brightspace({
51
+ d2lFetchToken: access_token,
52
+ });
53
+ return this.#brightspaceInstance;
54
+ });
55
+ }
56
+ // ── User & Organisation ───────────────────────────────────────────────────────
57
+ /** Fetch the user's ID and display name. */
58
+ async getUser() {
59
+ const data = await this.polite.whoAmI();
60
+ return { id: data.Identifier, name: data.FirstName };
61
+ }
62
+ /** Fetch information about the educational institution the user is in. */
63
+ async getInstitution() {
64
+ const data = await this.polite.getOrganizationInfo();
65
+ return {
66
+ id: data.Identifier,
67
+ name: data.Name,
68
+ };
69
+ }
70
+ getInstitutionImageURL(config) {
71
+ if (config.institutionId) {
72
+ return this.polite.getImageURL(config.institutionId, config);
73
+ }
74
+ return this.getInstitution().then(({ id }) => this.polite.getImageURL(id, config));
75
+ }
76
+ // ── Modules & Semesters ───────────────────────────────────────────────────────
77
+ /**
78
+ * Fetch the modules the user is enrolled in.
79
+ */
80
+ async getModules() {
81
+ const modules = [];
82
+ let bookmark;
83
+ do {
84
+ const page = await this.polite.getMyEnrollments({ bookmark });
85
+ // Modules ("course offerings") are those with OrgUnit.Type.Id === 3
86
+ modules.push(...page.Items.filter((item) => item.OrgUnit.Type.Id === 3).map((item) => ({
87
+ id: item.OrgUnit.Id.toString(),
88
+ name: item.OrgUnit.Name,
89
+ code: item.OrgUnit.Code ?? "",
90
+ })));
91
+ bookmark = page.PagingInfo.HasMoreItems
92
+ ? page.PagingInfo.Bookmark
93
+ : undefined;
94
+ } while (bookmark !== undefined);
95
+ return modules;
96
+ }
97
+ /**
98
+ * Fetch all modules the user is enrolled in, together with the associated semesters.
99
+ */
100
+ async getModulesAndSemesters() {
101
+ const modules = await this.getModules();
102
+ const semesters = await this.#getSemestersBatched({
103
+ moduleIds: modules.map((m) => m.id),
104
+ });
105
+ // Deduplicate semesters
106
+ const semestersUnique = [];
107
+ const seenSemesters = new Set();
108
+ for (const sem of semesters) {
109
+ if (!seenSemesters.has(sem.id)) {
110
+ semestersUnique.push(sem);
111
+ seenSemesters.add(sem.id);
112
+ }
113
+ }
114
+ return {
115
+ modules: modules.map((m, i) => ({
116
+ ...m,
117
+ semesterId: semesters[i].id,
118
+ })),
119
+ semesters: semestersUnique,
120
+ };
121
+ }
122
+ /**
123
+ * Return the associated semesters for the given modules. The semester at each
124
+ * index corresponds to the module at the same index (i.e. `moduleIds[i]`'s
125
+ * semester is `semesters[i]`).
126
+ */
127
+ async #getSemestersBatched({ moduleIds, }) {
128
+ // Fetch batches of parentOrgUnits in parallel
129
+ // (they contain semester information)
130
+ return await Promise.all(chunk(moduleIds, 25).map((c) => {
131
+ const csv = c.join(",");
132
+ return this.polite.getParentOrgUnits({ orgUnitIdsCSV: csv });
133
+ })).then((c) => c.flat().map((o) => ({
134
+ id: o.Semester.Identifier,
135
+ name: o.Semester.Name.trim(),
136
+ })));
137
+ }
138
+ // ── Module Content ────────────────────────────────────────────────────────────
139
+ /**
140
+ * Fetch all activity folders and activities for a module.
141
+ *
142
+ * Retrieves the table of contents then recursively parses every folder and
143
+ * topic, making additional requests as needed to resolve activity details.
144
+ */
145
+ async getModuleContent({ moduleId, }) {
146
+ const toc = await this.polite.getModuleTOC({ moduleId });
147
+ return Promise.all(toc.Modules.map((m) => this.#parseActivityFolder({ folder: m, moduleId })));
148
+ }
149
+ /**
150
+ * Parse a Brightspace "Module" (what POLITEShop calls an activity folder)
151
+ * and all of its children recursively.
152
+ *
153
+ * This may issue additional network requests for nested folders and topics.
154
+ */
155
+ async #parseActivityFolder({ folder, moduleId, }) {
156
+ const folderId = folder.ModuleId.toString();
157
+ // Parse activities and sub-folders in parallel.
158
+ const [activities, activityFolders] = await Promise.all([
159
+ Promise.all(folder.Topics.filter((t) => !t.IsBroken).map((t) => this.#parseActivity({ activity: t, moduleId }))),
160
+ Promise.all(folder.Modules.map((m) => this.#parseActivityFolder({ folder: m, moduleId }))),
161
+ ]);
162
+ return {
163
+ type: "folder",
164
+ id: folderId,
165
+ name: folder.Title,
166
+ description: folder.Description.Html,
167
+ sortOrder: folder.SortOrder,
168
+ contents: [...activities, ...activityFolders].sort((a, b) => a.sortOrder - b.sortOrder),
169
+ };
170
+ }
171
+ /**
172
+ * Parse a Brightspace "Topic" (what POLITEShop calls an activity).
173
+ *
174
+ * This may issue additional network requests to the POLITE or Brightspace
175
+ * APIs depending on the activity type.
176
+ *
177
+ * @throws if `activity.IsBroken` is `true`.
178
+ */
179
+ async #parseActivity({ activity, moduleId, }) {
180
+ if (activity.IsBroken)
181
+ throw new Error("parseActivity() cannot handle broken activities");
182
+ const base = {
183
+ id: activity.Identifier,
184
+ sortOrder: activity.SortOrder,
185
+ };
186
+ const name = activity.Title;
187
+ // ── HTML activity (ActivityType 1, File, *.html) ──────────────────────────
188
+ if (activity.ActivityType === 1 &&
189
+ activity.TypeIdentifier === "File" &&
190
+ activity.Url.endsWith(".html")) {
191
+ const content = await this.polite.getContentHTML({
192
+ urlOrPath: activity.Url,
193
+ });
194
+ return { ...base, type: "html", name, content };
195
+ }
196
+ // ── Document embed (ActivityType 1, File, non-HTML) ───────────────────────
197
+ if (activity.ActivityType === 1 && activity.TypeIdentifier === "File") {
198
+ const activityEnt = await (await this.brightspace).getActivity({
199
+ moduleId,
200
+ topicId: activity.TopicId,
201
+ });
202
+ const fileActivityEnt = activityEnt.getChild({
203
+ class: ["activity", "file-activity"],
204
+ });
205
+ const fileEnt = fileActivityEnt.getChild({ class: ["file"] });
206
+ const previewURL = fileEnt.findLink({
207
+ class: ["pdf", "d2l-converted-doc"],
208
+ })?.href;
209
+ const previewURLExpiry = previewURL
210
+ ? getURLExpiry(previewURL)
211
+ : undefined;
212
+ return {
213
+ ...base,
214
+ type: "doc_embed",
215
+ name,
216
+ sourceURL: activity.Url,
217
+ previewURL,
218
+ previewURLExpiry,
219
+ };
220
+ }
221
+ // ── Video embed (ActivityType 1, ContentService) ──────────────────────────
222
+ if (activity.ActivityType === 1 &&
223
+ activity.TypeIdentifier === "ContentService") {
224
+ const [source, thumbnail] = await Promise.all([
225
+ this.#getContentServiceMediaURL({
226
+ moduleId,
227
+ activityId: activity.Identifier,
228
+ }),
229
+ this.#getContentServiceThumbnailURL({
230
+ moduleId,
231
+ activityId: activity.Identifier,
232
+ }),
233
+ ]);
234
+ return {
235
+ ...base,
236
+ type: "video_embed",
237
+ name,
238
+ sourceURL: source.url,
239
+ sourceURLExpiry: source.urlExpiry,
240
+ thumbnailURL: thumbnail.url,
241
+ thumbnailURLExpiry: thumbnail.urlExpiry,
242
+ };
243
+ }
244
+ // ── Web embed (ActivityType 2) ────────────────────────────────────────────
245
+ if (activity.ActivityType === 2) {
246
+ return { ...base, type: "web_embed", name, url: activity.Url };
247
+ }
248
+ // ── Submission activity (ActivityType 3) ──────────────────────────────────
249
+ if (activity.ActivityType === 3) {
250
+ if (!activity.ToolItemId)
251
+ throw new Error("Missing ToolItemId in submission activity");
252
+ return {
253
+ ...base,
254
+ type: "submission",
255
+ dropboxId: activity.ToolItemId.toString(),
256
+ };
257
+ }
258
+ // ── Quiz activity (ActivityType 4) ────────────────────────────────────────
259
+ if (activity.ActivityType === 4) {
260
+ if (!activity.ToolItemId)
261
+ throw new Error("Missing ToolItemId in quiz activity");
262
+ return { ...base, type: "quiz", quizId: activity.ToolItemId.toString() };
263
+ }
264
+ return { ...base, type: "unknown" };
265
+ }
266
+ // ── Dropboxes & Submissions ───────────────────────────────────────────────────
267
+ /** Fetch all submission dropbox folders in a module. */
268
+ async getSubmissionDropboxes({ moduleId, }) {
269
+ const data = await this.polite.getDropboxFolders({ moduleId });
270
+ return data.map((d) => ({
271
+ id: d.Id.toString(),
272
+ name: d.Name,
273
+ moduleId,
274
+ description: d.CustomInstructions.Html,
275
+ dueAt: d.DueDate,
276
+ opensAt: d.Availability?.StartDate,
277
+ closesAt: d.Availability?.EndDate,
278
+ }));
279
+ }
280
+ /**
281
+ * Fetch the authenticated user's submissions for a given dropbox.
282
+ *
283
+ * Two strategies are attempted in order:
284
+ *
285
+ * 1. **POLITE API** — A single request returns all submissions. This is the
286
+ * preferred path but returns HTTP 403 for dropboxes whose availability
287
+ * window has closed.
288
+ * 2. **Brightspace Activities API** — Used as a fallback when the POLITE API
289
+ * fails. Requires one additional request per submission. If `organizationId`
290
+ * is not provided, it is fetched automatically via {@link getInstitution}.
291
+ *
292
+ * @param params.moduleId - The module (course offering) ID.
293
+ * @param params.dropboxId - The dropbox folder ID.
294
+ * @param params.organizationId - The organisation ID, used by the Brightspace
295
+ * Activities API path. If omitted and the fallback is needed, it is fetched
296
+ * automatically via {@link getInstitution}.
297
+ */
298
+ async getSubmissions({ moduleId, dropboxId, organizationId, }) {
299
+ // Try POLITE API first
300
+ try {
301
+ const data = await this.polite.getDropboxSubmissions({
302
+ moduleId,
303
+ dropboxId,
304
+ });
305
+ if (data.length === 0)
306
+ return [];
307
+ return data[0].Submissions.map((sub) => ({
308
+ id: sub.Id.toString(),
309
+ dropboxId,
310
+ submittedAt: sub.SubmissionDate,
311
+ comment: sub.Comment.Html,
312
+ }));
313
+ }
314
+ catch { }
315
+ // If POLITE API fails, try Brightspace API instead
316
+ const bs = await this.brightspace;
317
+ const ent = await bs.getClosedDropboxSubmissions({
318
+ orgId: organizationId ?? (await this.getInstitution()).id,
319
+ dropboxId,
320
+ moduleId,
321
+ });
322
+ const submissionLinks = ent.getChild({
323
+ class: ["assignment-submission-list"],
324
+ }).links;
325
+ if (!submissionLinks)
326
+ return [];
327
+ return Promise.all(submissionLinks.map(async (link) => {
328
+ const submissionEnt = await bs.getSubmissionDetails({
329
+ href: link.href,
330
+ });
331
+ return {
332
+ id: lastPathComponent(link.href),
333
+ dropboxId,
334
+ ...this.#parseSubmissionDetails(submissionEnt),
335
+ };
336
+ }));
337
+ }
338
+ #parseSubmissionDetails(ent) {
339
+ const submittedAt = new Date(ent.findChild({ class: "submission-date" })?.properties?.date);
340
+ const comment = z
341
+ .string()
342
+ .optional()
343
+ .parse(ent.findChild({ class: "submission-comment" })?.properties?.html);
344
+ return {
345
+ submittedAt,
346
+ comment,
347
+ };
348
+ }
349
+ // ── Quizzes ───────────────────────────────────────────────────────────────────
350
+ /**
351
+ * Fetch all quizzes in a module.
352
+ */
353
+ async getQuizzes({ moduleId }) {
354
+ const quizzes = [];
355
+ let nextURL = `/d2l/api/le/1.75/${moduleId}/quizzes/`;
356
+ do {
357
+ const page = await this.polite.getQuizzesPage({ urlOrPath: nextURL });
358
+ nextURL = page.Next;
359
+ quizzes.push(...page.Objects.map((d) => ({
360
+ id: d.QuizId.toString(),
361
+ moduleId,
362
+ name: d.Name,
363
+ description: d.Description.Text.Html,
364
+ dueAt: d.DueDate,
365
+ })));
366
+ } while (nextURL);
367
+ return quizzes;
368
+ }
369
+ // ── Lifecycle ─────────────────────────────────────────────────────────────────
370
+ /** Abort all in-flight requests on both the POLITE and Brightspace clients. */
371
+ abort() {
372
+ this.polite.abort();
373
+ this.#brightspaceInstance?.abort();
374
+ }
375
+ // ── Private helpers ───────────────────────────────────────────────────────────
376
+ async #getContentServiceThumbnailURL({ moduleId, activityId, }) {
377
+ const ent = await (await this.brightspace).getTopicThumbnail({
378
+ moduleId,
379
+ activityId,
380
+ });
381
+ const thumbnailProps = z
382
+ .object({ src: z.string(), expires: z.coerce.number().optional() })
383
+ .parse(ent.findChild({ class: ["thumbnail"] })?.properties);
384
+ const { src: url } = thumbnailProps;
385
+ // The Content Service exposes the expiry as a Unix timestamp in `expires`.
386
+ const urlExpiry = thumbnailProps.expires
387
+ ? new Date(thumbnailProps.expires * 1000)
388
+ : getURLExpiry(url);
389
+ return { url, urlExpiry };
390
+ }
391
+ async #getContentServiceMediaURL({ moduleId, activityId, }) {
392
+ const ent = await (await this.brightspace).getTopicMedia({
393
+ moduleId,
394
+ activityId,
395
+ });
396
+ const { src: url } = z.object({ src: z.string() }).parse(ent.properties);
397
+ return { url, urlExpiry: getURLExpiry(url) };
398
+ }
399
+ }
400
+ // ── Module-private utilities ──────────────────────────────────────────────────
401
+ //# sourceMappingURL=politeshop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"politeshop.js","sourceRoot":"","sources":["../../clients/politeshop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;;;GAQG;AACH,MAAM,OAAO,UAAU;IACrB,yCAAyC;IAChC,MAAM,CAAS;IAExB,oBAAoB,GAAuB,IAAI,CAAC;IAEhD;;;;OAIG;IACH,YAAY,MAYX;QACC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YAC/C,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,oBAAoB,GAAG,IAAI,WAAW,CAAC;gBAC1C,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,WAAW;QACb,IACE,IAAI,CAAC,oBAAoB,KAAK,IAAI;YAClC,IAAI,CAAC,oBAAoB,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,EAClD,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;YAC9D,IAAI,CAAC,oBAAoB,GAAG,IAAI,WAAW,CAAC;gBAC1C,aAAa,EAAE,YAAY;aAC5B,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,oBAAoB,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iFAAiF;IAEjF,4CAA4C;IAC5C,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACvD,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACrD,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,UAAU;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IAeD,sBAAsB,CAAC,MAItB;QACC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAC3C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CACpC,CAAC;IACJ,CAAC;IAED,iFAAiF;IAEjF;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,QAA4B,CAAC;QAEjC,GAAG,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE9D,oEAAoE;YACpE,OAAO,CAAC,IAAI,CACV,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAC5D,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACT,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE;gBAC9B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE;aAC9B,CAAC,CACH,CACF,CAAC;YAEF,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY;gBACrC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ;gBAC1B,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC,QAAQ,QAAQ,KAAK,SAAS,EAAE;QAEjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB;QAI1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC;YAChD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,eAAe,GAAqB,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAExC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/B,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1B,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9B,GAAG,CAAC;gBACJ,UAAU,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE;aAC7B,CAAC,CAAC;YACH,SAAS,EAAE,eAAe;SAC3B,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CAAC,EACzB,SAAS,GAGV;QACC,8CAA8C;QAC9C,sCAAsC;QACtC,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CACH,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACX,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU;YACzB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;SAC7B,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,iFAAiF;IAEjF;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,EACrB,QAAQ,GAGT;QACC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEzD,OAAO,OAAO,CAAC,GAAG,CAChB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE,CAC/B,IAAI,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CACnD,CACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,oBAAoB,CAAC,EACzB,MAAM,EACN,QAAQ,GAIT;QACC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAE5C,gDAAgD;QAChD,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACtD,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAW,EAAE,EAAE,CACrE,IAAI,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAC/C,CACF;YACD,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE,CAClC,IAAI,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CACnD,CACF;SACF,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,MAAM,CAAC,KAAK;YAClB,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;YACpC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,eAAe,CAAC,CAAC,IAAI,CAChD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CACpC;SACF,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,cAAc,CAAC,EACnB,QAAQ,EACR,QAAQ,GAIT;QACC,IAAI,QAAQ,CAAC,QAAQ;YACnB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAErE,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,QAAQ,CAAC,UAAU;YACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC;QACF,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;QAE5B,6EAA6E;QAC7E,IACE,QAAQ,CAAC,YAAY,KAAK,CAAC;YAC3B,QAAQ,CAAC,cAAc,KAAK,MAAM;YAClC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;gBAC/C,SAAS,EAAE,QAAQ,CAAC,GAAG;aACxB,CAAC,CAAC;YACH,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAClD,CAAC;QAED,6EAA6E;QAC7E,IAAI,QAAQ,CAAC,YAAY,KAAK,CAAC,IAAI,QAAQ,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YACtE,MAAM,WAAW,GAAG,MAAM,CACxB,MAAM,IAAI,CAAC,WAAW,CACvB,CAAC,WAAW,CAAC;gBACZ,QAAQ;gBACR,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAC;YAEH,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC;gBAC3C,KAAK,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;aACrC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAE9D,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;gBAClC,KAAK,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC;aACpC,CAAC,EAAE,IAAI,CAAC;YACT,MAAM,gBAAgB,GAAG,UAAU;gBACjC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;gBAC1B,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO;gBACL,GAAG,IAAI;gBACP,IAAI,EAAE,WAAW;gBACjB,IAAI;gBACJ,SAAS,EAAE,QAAQ,CAAC,GAAG;gBACvB,UAAU;gBACV,gBAAgB;aACjB,CAAC;QACJ,CAAC;QAED,6EAA6E;QAC7E,IACE,QAAQ,CAAC,YAAY,KAAK,CAAC;YAC3B,QAAQ,CAAC,cAAc,KAAK,gBAAgB,EAC5C,CAAC;YACD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC5C,IAAI,CAAC,0BAA0B,CAAC;oBAC9B,QAAQ;oBACR,UAAU,EAAE,QAAQ,CAAC,UAAU;iBAChC,CAAC;gBACF,IAAI,CAAC,8BAA8B,CAAC;oBAClC,QAAQ;oBACR,UAAU,EAAE,QAAQ,CAAC,UAAU;iBAChC,CAAC;aACH,CAAC,CAAC;YAEH,OAAO;gBACL,GAAG,IAAI;gBACP,IAAI,EAAE,aAAa;gBACnB,IAAI;gBACJ,SAAS,EAAE,MAAM,CAAC,GAAG;gBACrB,eAAe,EAAE,MAAM,CAAC,SAAS;gBACjC,YAAY,EAAE,SAAS,CAAC,GAAG;gBAC3B,kBAAkB,EAAE,SAAS,CAAC,SAAS;aACxC,CAAC;QACJ,CAAC;QAED,6EAA6E;QAC7E,IAAI,QAAQ,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjE,CAAC;QAED,6EAA6E;QAC7E,IAAI,QAAQ,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,UAAU;gBACtB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,OAAO;gBACL,GAAG,IAAI;gBACP,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE;aAC1C,CAAC;QACJ,CAAC;QAED,6EAA6E;QAC7E,IAAI,QAAQ,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,UAAU;gBACtB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3E,CAAC;QAED,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtC,CAAC;IAED,iFAAiF;IAEjF,wDAAwD;IACxD,KAAK,CAAC,sBAAsB,CAAC,EAC3B,QAAQ,GAGT;QACC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE;YACnB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ;YACR,WAAW,EAAE,CAAC,CAAC,kBAAkB,CAAC,IAAI;YACtC,KAAK,EAAE,CAAC,CAAC,OAAO;YAChB,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,SAAS;YAClC,QAAQ,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO;SAClC,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,cAAc,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,cAAc,GAKf;QACC,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;gBACnD,QAAQ;gBACR,SAAS;aACV,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAEjC,OAAO,IAAI,CAAC,CAAC,CAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACxC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE;gBACrB,SAAS;gBACT,WAAW,EAAE,GAAG,CAAC,cAAc;gBAC/B,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI;aAC1B,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,mDAAmD;QAEnD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,2BAA2B,CAAC;YAC/C,KAAK,EAAE,cAAc,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE;YACzD,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC;YACnC,KAAK,EAAE,CAAC,4BAA4B,CAAC;SACtC,CAAC,CAAC,KAAK,CAAC;QACT,IAAI,CAAC,eAAe;YAAE,OAAO,EAAE,CAAC;QAEhC,OAAO,OAAO,CAAC,GAAG,CAChB,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACjC,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,oBAAoB,CAAC;gBAClD,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAC;YACH,OAAO;gBACL,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,SAAS;gBACT,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;aAC/C,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,uBAAuB,CAAC,GAAgB;QAItC,MAAM,WAAW,GAAG,IAAI,IAAI,CAC1B,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAC9D,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC;aACd,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAE3E,OAAO;YACL,WAAW;YACX,OAAO;SACR,CAAC;IACJ,CAAC;IAED,iFAAiF;IAEjF;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAwB;QACjD,MAAM,OAAO,GAAW,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAkB,oBAAoB,QAAQ,WAAW,CAAC;QAErE,GAAG,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YACtE,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;YAEpB,OAAO,CAAC,IAAI,CACV,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1B,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACvB,QAAQ;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI;gBACpC,KAAK,EAAE,CAAC,CAAC,OAAO;aACjB,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC,QAAQ,OAAO,EAAE;QAElB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,iFAAiF;IAEjF,+EAA+E;IAC/E,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,iFAAiF;IAEjF,KAAK,CAAC,8BAA8B,CAAC,EACnC,QAAQ,EACR,UAAU,GAIX;QACC,MAAM,GAAG,GAAG,MAAM,CAChB,MAAM,IAAI,CAAC,WAAW,CACvB,CAAC,iBAAiB,CAAC;YAClB,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,CAAC;aACrB,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;aAClE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAE9D,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,cAAc,CAAC;QACpC,2EAA2E;QAC3E,MAAM,SAAS,GAAqB,cAAc,CAAC,OAAO;YACxD,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YACzC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAEtB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,0BAA0B,CAAC,EAC/B,QAAQ,EACR,UAAU,GAIX;QACC,MAAM,GAAG,GAAG,MAAM,CAChB,MAAM,IAAI,CAAC,WAAW,CACvB,CAAC,aAAa,CAAC;YACd,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEzE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/C,CAAC;CACF;AAED,iFAAiF"}
@@ -0,0 +1,7 @@
1
+ export declare class UnexpectedResponseError extends Error {
2
+ response?: Response;
3
+ constructor(message: string, options?: ErrorOptions & {
4
+ response?: Response;
5
+ });
6
+ }
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../errors.ts"],"names":[],"mappings":"AAAA,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC;gBAGlB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY,GAAG;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE;CAMnD"}
package/dist/errors.js ADDED
@@ -0,0 +1,9 @@
1
+ export class UnexpectedResponseError extends Error {
2
+ response;
3
+ constructor(message, options) {
4
+ super(message, options);
5
+ this.name = "UnexpectedResponseError";
6
+ this.response = options?.response;
7
+ }
8
+ }
9
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAY;IAEpB,YACE,OAAe,EACf,OAAgD;QAEhD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { Brightspace } from "./clients/brightspace";
2
+ export { POLITE } from "./clients/polite";
3
+ export { POLITEShop } from "./clients/politeshop";
4
+ export type * from "./types";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,mBAAmB,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { Brightspace } from "./clients/brightspace";
2
+ export { POLITE } from "./clients/polite";
3
+ export { POLITEShop } from "./clients/politeshop";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}