@skillswaveca/nova-shared-libraries 3.3.1 → 3.5.5
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/.github/workflows/release.yml +52 -1
- package/.release-it.json +9 -18
- package/.releaserc.json +21 -0
- package/docs-base/package-info.js +4 -4
- package/package.json +20 -12
- package/packages/drivers/package.json +2 -2
- package/packages/nova-middleware/package.json +2 -2
- package/packages/nova-model/package.json +2 -2
- package/packages/nova-utils/package.json +2 -2
- package/scripts/update-versions.js +54 -0
- package/CHANGELOG.md +0 -62
- package/docs/accelerator-7PKwHj6p.js +0 -7
- package/docs/accelerator-CTGFUnJj.js +0 -7
- package/docs/access-special-BRCQ6BOA.js +0 -7
- package/docs/accessibility-check-DDEnCM3T.js +0 -7
- package/docs/add-CC95oWZj.js +0 -7
- package/docs/add-Dok7V7iV.js +0 -7
- package/docs/add-file-CDcwFmxE.js +0 -9
- package/docs/add-file-DSIehH-a.js +0 -8
- package/docs/add-message-C2J88NtD.js +0 -8
- package/docs/add-message-C74U_c_a.js +0 -8
- package/docs/add-to-lor-Cx3ALzs6.js +0 -10
- package/docs/add-to-lor-mWdPFUuq.js +0 -10
- package/docs/add-user-7oZmllZp.js +0 -8
- package/docs/add-user-Ct61dWhf.js +0 -8
- package/docs/ai-CXRsBcvO.js +0 -7
- package/docs/ai-D1Iq7PBt.js +0 -9
- package/docs/ai-DvFNdjTJ.js +0 -7
- package/docs/alarmbell-BptBR2Jr.js +0 -7
- package/docs/alarmbell-CB5dhFiR.js +0 -7
- package/docs/alert-DlHwdVP6.js +0 -7
- package/docs/alert-V7mrtHbK.js +0 -9
- package/docs/alert-p0Ge30rc.js +0 -8
- package/docs/align-center--wiBdBfZ.js +0 -7
- package/docs/align-full-BfwFgwgv.js +0 -7
- package/docs/align-left-DaZbAxVg.js +0 -7
- package/docs/align-right-DJm8Hnyk.js +0 -7
- package/docs/angry-CLkqqzeH.js +0 -7
- package/docs/arrow-collapse-CKVijIdk.js +0 -7
- package/docs/arrow-collapse-DgaM5Q7K.js +0 -7
- package/docs/arrow-collapse-small-BfTzkoWL.js +0 -7
- package/docs/arrow-expand-Bk1J3lIZ.js +0 -7
- package/docs/arrow-expand-small-B7KVZXkf.js +0 -7
- package/docs/arrow-thin-down-ClfvHk99.js +0 -7
- package/docs/arrow-thin-left-D0lmhbm9.js +0 -7
- package/docs/arrow-thin-right-CZH1S-Ev.js +0 -7
- package/docs/arrow-thin-up-kbf0Hayy.js +0 -7
- package/docs/arrow-toggle-down-CWSCkUi8.js +0 -7
- package/docs/arrow-toggle-up-sUgzJAuI.js +0 -7
- package/docs/assignments-BpNN8uRi.js +0 -9
- package/docs/assignments-BwrFNhJf.js +0 -14
- package/docs/assignments-DJuzE5TS.js +0 -8
- package/docs/attach-CxYJqjr7.js +0 -8
- package/docs/attach-DoURgNqH.js +0 -7
- package/docs/attendance-Bh8NDNxG.js +0 -7
- package/docs/attendance-CKrWYCoi.js +0 -8
- package/docs/awards-08R3caDo.js +0 -7
- package/docs/awards-CGFZ1AmF.js +0 -7
- package/docs/binder-DqjAKrO6.js +0 -7
- package/docs/binder-sPoCLPbv.js +0 -9
- package/docs/blocked-BqqEqoxS.js +0 -7
- package/docs/blocked-CdL2qnqB.js +0 -7
- package/docs/blog-EWWLpv3J.js +0 -11
- package/docs/blog-mImHk1UE.js +0 -11
- package/docs/bold-DvEMGUJQ.js +0 -7
- package/docs/book-management-BycZ58Mx.js +0 -8
- package/docs/book-management-C5EVLmWE.js +0 -7
- package/docs/bookmark-ZSLGVyMZ.js +0 -8
- package/docs/bookmark-filled-By-e1Vik.js +0 -7
- package/docs/bookmark-filled-C5_hpJmC.js +0 -7
- package/docs/bookmark-hollow-BERVrtPe.js +0 -7
- package/docs/bookmark-hollow-DmYIKVj-.js +0 -7
- package/docs/broken-link-0mE-24kB.js +0 -7
- package/docs/broken-link-B0FAWC4d.js +0 -7
- package/docs/browser-Bkf2Pqxa.js +0 -11
- package/docs/browser-DDKpAnFL.js +0 -7
- package/docs/bullet-WEelL-Oz.js +0 -7
- package/docs/bullseye-BGaOsg34.js +0 -9
- package/docs/bullseye-BI26Yr2r.js +0 -11
- package/docs/bullseye-D8leZHHy.js +0 -10
- package/docs/calculate-7BO4aJsc.js +0 -7
- package/docs/calculate-C1k19iEm.js +0 -17
- package/docs/calendar-10jvL2iw.js +0 -7
- package/docs/calendar-CAOKFxG8.js +0 -7
- package/docs/calendar-N5k43N09.js +0 -7
- package/docs/capture-BXEbu8tr.js +0 -7
- package/docs/change-file-3zLEwSjU.js +0 -10
- package/docs/change-file-CVDVitRF.js +0 -10
- package/docs/chat-BLpVloRi.js +0 -7
- package/docs/chat-CJvurd17.js +0 -7
- package/docs/chat-DkYoPSJD.js +0 -7
- package/docs/check-6yKqAXn0.js +0 -7
- package/docs/check-BDGGpjpw.js +0 -7
- package/docs/check-box-COb-iQnp.js +0 -8
- package/docs/check-box-unchecked-CihNEcBY.js +0 -7
- package/docs/check-circle-BHCbtC9e.js +0 -8
- package/docs/check-circle-CcqlS16f.js +0 -7
- package/docs/check-circle-D-88S9HE.js +0 -8
- package/docs/check-manual-D118hJse.js +0 -10
- package/docs/check-user-CzXE-sqy.js +0 -9
- package/docs/checklist-D3dcWqlj.js +0 -12
- package/docs/checklist-VRzqF3Cn.js +0 -7
- package/docs/chevron-down-CmgQXzCG.js +0 -7
- package/docs/chevron-down-NDFaTQA4.js +0 -7
- package/docs/chevron-down-eOc83-I6.js +0 -7
- package/docs/chevron-down-medium-ZHL8V0yD.js +0 -7
- package/docs/chevron-down-small-Cxu3u8oN.js +0 -7
- package/docs/chevron-left-CTXSr5gY.js +0 -7
- package/docs/chevron-left-DGHEARqj.js +0 -7
- package/docs/chevron-left-Dv2XEN1W.js +0 -7
- package/docs/chevron-left-circle-DC2ldsYl.js +0 -8
- package/docs/chevron-right-DyJ0vK9x.js +0 -7
- package/docs/chevron-right-X9aw5FQZ.js +0 -7
- package/docs/chevron-right-circle-CfufyneZ.js +0 -8
- package/docs/chevron-right-dtXLd_t_.js +0 -7
- package/docs/chevron-up-BLvFJkrs.js +0 -7
- package/docs/chevron-up-CBgDUU-S.js +0 -7
- package/docs/chevron-up-Cz4arn0k.js +0 -7
- package/docs/class-MfNPJCE3.js +0 -7
- package/docs/classes-BrimJoaQ.js +0 -7
- package/docs/classes-DNZeYwP9.js +0 -7
- package/docs/classlist-CT7aR3Qp.js +0 -9
- package/docs/classlist-lNAGMMK9.js +0 -7
- package/docs/close-DZhoaKqc.js +0 -7
- package/docs/close-circle-BUNfgKRi.js +0 -8
- package/docs/close-default-dnnWtHBx.js +0 -7
- package/docs/close-large-bMM1w3Qq.js +0 -7
- package/docs/close-large-thick-CIk4u_x5.js +0 -7
- package/docs/close-small-BM6jWA00.js +0 -7
- package/docs/close-thick-CSMgayuW.js +0 -7
- package/docs/comment-filled-BIwNhQOh.js +0 -7
- package/docs/comment-hollow-BuEIRoVu.js +0 -7
- package/docs/contacts-0c5Ejeie.js +0 -8
- package/docs/contacts-0p7GRork.js +0 -9
- package/docs/content-BkmZJI2k.js +0 -10
- package/docs/copy-ByxRV0Fv.js +0 -9
- package/docs/copy-C0jJBW8t.js +0 -8
- package/docs/copy-CrrPol58.js +0 -9
- package/docs/course-B7-GuqH0.js +0 -9
- package/docs/course-progress-complete-D-88S9HE.js +0 -8
- package/docs/course-progress-in-progress-CMNxGcwl.js +0 -7
- package/docs/course-progress-not-started-CZkienJ8.js +0 -7
- package/docs/course-tile-sort-DBH3sD6Y.js +0 -7
- package/docs/course-tile-sort-LVnGtfEg.js +0 -7
- package/docs/coursebuilder-CksHR_dY.js +0 -7
- package/docs/coursebuilder-mK3UOKAz.js +0 -7
- package/docs/cut-BSxIDiPd.js +0 -7
- package/docs/delete-XUr3hb61.js +0 -8
- package/docs/delete-n_0tMiML.js +0 -7
- package/docs/direction-ltr-DOOIOEMV.js +0 -7
- package/docs/direction-rtl-Zq209crM.js +0 -7
- package/docs/disable-CfhAdhZ4.js +0 -8
- package/docs/discussions-BV-rVYTJ.js +0 -8
- package/docs/discussions-DcjKXpsJ.js +0 -8
- package/docs/discussions-FfXuJJ0A.js +0 -8
- package/docs/divider-DYcReEjI.js +0 -12
- package/docs/divider-big-CNFI3Pvd.js +0 -11
- package/docs/divider-solid-BwFmdIq7.js +0 -7
- package/docs/dot-GOmm6Bys.js +0 -7
- package/docs/dot-THJbh2QW.js +0 -7
- package/docs/download-B8F8Cdcb.js +0 -8
- package/docs/download-D0w9z3Z3.js +0 -8
- package/docs/download-SHKxw6bp.js +0 -8
- package/docs/draft-mP5du8rd.js +0 -9
- package/docs/draft-vZl_0H-L.js +0 -8
- package/docs/dragger-aZ6zsEfR.js +0 -7
- package/docs/drivers/assets/anchor.js +0 -350
- package/docs/drivers/assets/bass-addons.css +0 -12
- package/docs/drivers/assets/bass.css +0 -544
- package/docs/drivers/assets/fonts/EOT/SourceCodePro-Bold.eot +0 -0
- package/docs/drivers/assets/fonts/EOT/SourceCodePro-Regular.eot +0 -0
- package/docs/drivers/assets/fonts/LICENSE.txt +0 -93
- package/docs/drivers/assets/fonts/OTF/SourceCodePro-Bold.otf +0 -0
- package/docs/drivers/assets/fonts/OTF/SourceCodePro-Regular.otf +0 -0
- package/docs/drivers/assets/fonts/TTF/SourceCodePro-Bold.ttf +0 -0
- package/docs/drivers/assets/fonts/TTF/SourceCodePro-Regular.ttf +0 -0
- package/docs/drivers/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff +0 -0
- package/docs/drivers/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff +0 -0
- package/docs/drivers/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff +0 -0
- package/docs/drivers/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff +0 -0
- package/docs/drivers/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 +0 -0
- package/docs/drivers/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 +0 -0
- package/docs/drivers/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 +0 -0
- package/docs/drivers/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 +0 -0
- package/docs/drivers/assets/fonts/source-code-pro.css +0 -23
- package/docs/drivers/assets/github.css +0 -123
- package/docs/drivers/assets/site.js +0 -168
- package/docs/drivers/assets/split.css +0 -15
- package/docs/drivers/assets/split.js +0 -782
- package/docs/drivers/assets/style.css +0 -147
- package/docs/drivers/index.html +0 -6180
- package/docs/edit-XTluWOyY.js +0 -7
- package/docs/edit-bulk-CbUTb41B.js +0 -7
- package/docs/edit-not-editable-BtNDjkNt.js +0 -9
- package/docs/edit-rtSBrFnZ.js +0 -7
- package/docs/email-B77IV5dc.js +0 -8
- package/docs/email-DShyqmyr.js +0 -7
- package/docs/email-Dr_fUQo7.js +0 -7
- package/docs/email-open-CNPI-nbt.js +0 -9
- package/docs/email-open-sMmv4goK.js +0 -8
- package/docs/email-read-D4PMZMhZ.js +0 -8
- package/docs/enable-BXJKKu9V.js +0 -8
- package/docs/enrollment-D_f33z-t.js +0 -7
- package/docs/eportfolio-CmIoQSs-.js +0 -7
- package/docs/eportfolio-DiR128Ch.js +0 -8
- package/docs/equation-graphical-DEK4DR0o.js +0 -7
- package/docs/equation-graphical-chemistry-deGj_Wo1.js +0 -7
- package/docs/equation-latex-OwF3WKZs.js +0 -7
- package/docs/equation-mathml-BVFy7F04.js +0 -8
- package/docs/evaluate-all-D8Ed6wUQ.js +0 -15
- package/docs/evaluate-all-DRA08hvM.js +0 -13
- package/docs/event-log-BBnLruqh.js +0 -7
- package/docs/exemption-add-CuNjn-gE.js +0 -8
- package/docs/exemption-remove-C6gurfls.js +0 -10
- package/docs/export-B00I40zU.js +0 -8
- package/docs/export-C_qczGjD.js +0 -8
- package/docs/external-CGUtobc0.js +0 -6
- package/docs/external-D14KafxI.js +0 -9
- package/docs/external-XLH4ZIpG.js +0 -9
- package/docs/feed-CpSir1Op.js +0 -7
- package/docs/feed-Dp9gnfxV.js +0 -12
- package/docs/feedback-CYkdDNHj.js +0 -7
- package/docs/feedback-zuS0X61K.js +0 -7
- package/docs/file-archive-BqyAeRx6.js +0 -14
- package/docs/file-archive-aUsV28fR.js +0 -14
- package/docs/file-audio-C0gLVZ1J.js +0 -7
- package/docs/file-audio-DlPChJJD.js +0 -7
- package/docs/file-audio-Ez8GKNqD.js +0 -8
- package/docs/file-document-OV_yiZc9.js +0 -7
- package/docs/file-document-PtERBBjG.js +0 -9
- package/docs/file-document-RAyDjBV0.js +0 -9
- package/docs/file-image-2kUlJRfa.js +0 -7
- package/docs/file-image-DEvp4loc.js +0 -8
- package/docs/file-presentation-DnSQf6dJ.js +0 -10
- package/docs/file-presentation-Dvm4dJkX.js +0 -11
- package/docs/file-presentation-DynwRY3d.js +0 -7
- package/docs/file-video-Baynsug6.js +0 -8
- package/docs/file-video-DubiL6Pa.js +0 -7
- package/docs/file-video-Dz0Xv-nt.js +0 -8
- package/docs/filter-BXmy_W6Z.js +0 -7
- package/docs/filter-CjP2TU9o.js +0 -11
- package/docs/flag-fill-Bon2nRGs.js +0 -7
- package/docs/flag-filled-B0f2EsXm.js +0 -7
- package/docs/flag-hollow-CaU1iNOl.js +0 -7
- package/docs/flag-hollow-DfEoHVNP.js +0 -7
- package/docs/folder-D4EQiKEf.js +0 -7
- package/docs/folder-DjGOP9kC.js +0 -7
- package/docs/folder-up-level-CmUITqEa.js +0 -8
- package/docs/forms-BzBisiyk.js +0 -8
- package/docs/forms-QmRSltZO.js +0 -7
- package/docs/forward-B7OsyI-4.js +0 -8
- package/docs/fullscreen-DW5UhnuF.js +0 -8
- package/docs/fullscreen-Dos-vYUL.js +0 -7
- package/docs/game-BPXtsa4R.js +0 -12
- package/docs/game-CAeZpf2P.js +0 -12
- package/docs/game-CJBm4W_4.js +0 -6
- package/docs/gear-BXgew4r5.js +0 -8
- package/docs/gear-BefUgJUH.js +0 -8
- package/docs/gear-Dozogx0s.js +0 -7
- package/docs/glossary-BYZOnXFD.js +0 -10
- package/docs/glossary-pJwGMnFw.js +0 -7
- package/docs/google-drive-BY7aNeo4.js +0 -7
- package/docs/google-drive-C2K-Q1Sz.js +0 -7
- package/docs/google-drive-UaaDdmWX.js +0 -7
- package/docs/grabber-DDfgK4q3.js +0 -7
- package/docs/grabber-small--2Gc1-LB.js +0 -7
- package/docs/grade-BG_E-8NT.js +0 -8
- package/docs/grade-D2MISbK9.js +0 -7
- package/docs/grade-NOWaSTNa.js +0 -8
- package/docs/grade-remove-Ph1Izm-7.js +0 -8
- package/docs/grade-visible-CDb-9-br.js +0 -7
- package/docs/group-DtqVtMH3.js +0 -8
- package/docs/group-locker-ftiR0a03.js +0 -7
- package/docs/happy-LeP0nGOv.js +0 -7
- package/docs/help-CkV4Dp7d.js +0 -9
- package/docs/help-Dxodc931.js +0 -9
- package/docs/help-FOiT3jKO.js +0 -7
- package/docs/history-DARTknKW.js +0 -8
- package/docs/history-rho7wY5T.js +0 -8
- package/docs/home-BE2SQvvs.js +0 -7
- package/docs/home-D_tSkasl.js +0 -8
- package/docs/home-DbQqnxwO.js +0 -7
- package/docs/image-BCnN94lf.js +0 -9
- package/docs/image-Dmy_y4Fd.js +0 -8
- package/docs/import-D_Njyhb9.js +0 -8
- package/docs/import-YfiMqwWh.js +0 -8
- package/docs/important-2qm6frSZ.js +0 -9
- package/docs/indent-decrease-CQm4KxII.js +0 -7
- package/docs/indent-increase-BO1QVrc8.js +0 -7
- package/docs/index.html +0 -1
- package/docs/inline-module-index-0.js +0 -9551
- package/docs/insert-attributes-B4iHYS-t.js +0 -8
- package/docs/insert-emoticon-BC9tKUjH.js +0 -11
- package/docs/insights-portal-Cm3Wea4M.js +0 -10
- package/docs/insights-portal-Depbhlwj.js +0 -8
- package/docs/italic-AhBNAWI0.js +0 -7
- package/docs/link-BgD3fOWi.js +0 -8
- package/docs/link-CPDrunkx.js +0 -7
- package/docs/link-CmNVOd0t.js +0 -7
- package/docs/list-bullet-CyrIsY33.js +0 -11
- package/docs/list-ordered-BnmtMuSC.js +0 -7
- package/docs/list-view-EI9pvwuC.js +0 -11
- package/docs/location-CzWLCAQ8.js +0 -7
- package/docs/location-DcnFhfnk.js +0 -10
- package/docs/locations-B9k1Fx7T.js +0 -13
- package/docs/locations-CSxT0wIK.js +0 -7
- package/docs/lock-BWzWh9B7.js +0 -8
- package/docs/lock-E8wu8HD6.js +0 -8
- package/docs/lock-locked-D5lyHWqQ.js +0 -7
- package/docs/lock-unlock-WCjSz1i-.js +0 -7
- package/docs/lock-unlocked-CAJCLSet.js +0 -8
- package/docs/lock-unlocked-DExBKORh.js +0 -8
- package/docs/locker-B10MJtSA.js +0 -7
- package/docs/locker-Cqcf7p8D.js +0 -10
- package/docs/lol-D_JxRmpk.js +0 -7
- package/docs/lor-LgltaGp1.js +0 -7
- package/docs/lor-NF8M-dTl.js +0 -7
- package/docs/low-priority-CYw20_i6.js +0 -9
- package/docs/manage-dates-7pdHHIpP.js +0 -8
- package/docs/manage-dates-BvldV3qd.js +0 -10
- package/docs/manage-dates-edit-BL7TE5Ca.js +0 -7
- package/docs/manage-dates-offset-C36mTMRI.js +0 -8
- package/docs/manage-files-CztcMg2T.js +0 -8
- package/docs/manage-files-DjhMboB5.js +0 -8
- package/docs/manual-run-mkeXX4ZT.js +0 -8
- package/docs/media-BIt0cvtO.js +0 -8
- package/docs/media-BP3ScDqX.js +0 -7
- package/docs/meh-VZVAbZG3.js +0 -7
- package/docs/menu-Bax-k1Yb.js +0 -9
- package/docs/menu-hamburger-C2vj4eRY.js +0 -7
- package/docs/menu-hamburger-DjawJZYW.js +0 -7
- package/docs/menu-hamburger-JIneUuO7.js +0 -7
- package/docs/merge-9psevQT-.js +0 -11
- package/docs/message-new-C2a9sicZ.js +0 -8
- package/docs/messages-BfrTLnON.js +0 -12
- package/docs/messages-BlNvFjBH.js +0 -7
- package/docs/mic-B_QU0QmO.js +0 -8
- package/docs/mic-Dq5WbNIP.js +0 -8
- package/docs/mobile-DqC65aN6.js +0 -6
- package/docs/more-CfLcaduh.js +0 -7
- package/docs/move-down-D9PWLWhn.js +0 -7
- package/docs/move-down-DNE-3gT2.js +0 -8
- package/docs/move-to-Bt5a4Jcj.js +0 -8
- package/docs/move-to-CmhSXqJ1.js +0 -8
- package/docs/move-up-BaS-oCU5.js +0 -7
- package/docs/move-up-ByeMSeVd.js +0 -8
- package/docs/my-computer-DTsn7C9t.js +0 -8
- package/docs/navigate-BUpXfdU3.js +0 -8
- package/docs/navigate-D1BhWZtz.js +0 -11
- package/docs/new-line-8f0I71Mh.js +0 -7
- package/docs/new-window-B5Ln_cc3.js +0 -8
- package/docs/news-C1mrMSqE.js +0 -7
- package/docs/news-DlE9A-vs.js +0 -9
- package/docs/news-NiNcL5vl.js +0 -8
- package/docs/no-entry-C3dnCBCI.js +0 -8
- package/docs/notification-bell-D_RdfZKS.js +0 -9
- package/docs/nova-middleware/assets/anchor.js +0 -350
- package/docs/nova-middleware/assets/bass-addons.css +0 -12
- package/docs/nova-middleware/assets/bass.css +0 -544
- package/docs/nova-middleware/assets/fonts/EOT/SourceCodePro-Bold.eot +0 -0
- package/docs/nova-middleware/assets/fonts/EOT/SourceCodePro-Regular.eot +0 -0
- package/docs/nova-middleware/assets/fonts/LICENSE.txt +0 -93
- package/docs/nova-middleware/assets/fonts/OTF/SourceCodePro-Bold.otf +0 -0
- package/docs/nova-middleware/assets/fonts/OTF/SourceCodePro-Regular.otf +0 -0
- package/docs/nova-middleware/assets/fonts/TTF/SourceCodePro-Bold.ttf +0 -0
- package/docs/nova-middleware/assets/fonts/TTF/SourceCodePro-Regular.ttf +0 -0
- package/docs/nova-middleware/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff +0 -0
- package/docs/nova-middleware/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff +0 -0
- package/docs/nova-middleware/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff +0 -0
- package/docs/nova-middleware/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff +0 -0
- package/docs/nova-middleware/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 +0 -0
- package/docs/nova-middleware/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 +0 -0
- package/docs/nova-middleware/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 +0 -0
- package/docs/nova-middleware/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 +0 -0
- package/docs/nova-middleware/assets/fonts/source-code-pro.css +0 -23
- package/docs/nova-middleware/assets/github.css +0 -123
- package/docs/nova-middleware/assets/site.js +0 -168
- package/docs/nova-middleware/assets/split.css +0 -15
- package/docs/nova-middleware/assets/split.js +0 -782
- package/docs/nova-middleware/assets/style.css +0 -147
- package/docs/nova-middleware/index.html +0 -406
- package/docs/nova-model/assets/anchor.js +0 -350
- package/docs/nova-model/assets/bass-addons.css +0 -12
- package/docs/nova-model/assets/bass.css +0 -544
- package/docs/nova-model/assets/fonts/EOT/SourceCodePro-Bold.eot +0 -0
- package/docs/nova-model/assets/fonts/EOT/SourceCodePro-Regular.eot +0 -0
- package/docs/nova-model/assets/fonts/LICENSE.txt +0 -93
- package/docs/nova-model/assets/fonts/OTF/SourceCodePro-Bold.otf +0 -0
- package/docs/nova-model/assets/fonts/OTF/SourceCodePro-Regular.otf +0 -0
- package/docs/nova-model/assets/fonts/TTF/SourceCodePro-Bold.ttf +0 -0
- package/docs/nova-model/assets/fonts/TTF/SourceCodePro-Regular.ttf +0 -0
- package/docs/nova-model/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff +0 -0
- package/docs/nova-model/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff +0 -0
- package/docs/nova-model/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff +0 -0
- package/docs/nova-model/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff +0 -0
- package/docs/nova-model/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 +0 -0
- package/docs/nova-model/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 +0 -0
- package/docs/nova-model/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 +0 -0
- package/docs/nova-model/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 +0 -0
- package/docs/nova-model/assets/fonts/source-code-pro.css +0 -23
- package/docs/nova-model/assets/github.css +0 -123
- package/docs/nova-model/assets/site.js +0 -168
- package/docs/nova-model/assets/split.css +0 -15
- package/docs/nova-model/assets/split.js +0 -782
- package/docs/nova-model/assets/style.css +0 -147
- package/docs/nova-model/index.html +0 -3244
- package/docs/nova-utils/assets/anchor.js +0 -350
- package/docs/nova-utils/assets/bass-addons.css +0 -12
- package/docs/nova-utils/assets/bass.css +0 -544
- package/docs/nova-utils/assets/fonts/EOT/SourceCodePro-Bold.eot +0 -0
- package/docs/nova-utils/assets/fonts/EOT/SourceCodePro-Regular.eot +0 -0
- package/docs/nova-utils/assets/fonts/LICENSE.txt +0 -93
- package/docs/nova-utils/assets/fonts/OTF/SourceCodePro-Bold.otf +0 -0
- package/docs/nova-utils/assets/fonts/OTF/SourceCodePro-Regular.otf +0 -0
- package/docs/nova-utils/assets/fonts/TTF/SourceCodePro-Bold.ttf +0 -0
- package/docs/nova-utils/assets/fonts/TTF/SourceCodePro-Regular.ttf +0 -0
- package/docs/nova-utils/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff +0 -0
- package/docs/nova-utils/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff +0 -0
- package/docs/nova-utils/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff +0 -0
- package/docs/nova-utils/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff +0 -0
- package/docs/nova-utils/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 +0 -0
- package/docs/nova-utils/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 +0 -0
- package/docs/nova-utils/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 +0 -0
- package/docs/nova-utils/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 +0 -0
- package/docs/nova-utils/assets/fonts/source-code-pro.css +0 -23
- package/docs/nova-utils/assets/github.css +0 -123
- package/docs/nova-utils/assets/site.js +0 -168
- package/docs/nova-utils/assets/split.css +0 -15
- package/docs/nova-utils/assets/split.js +0 -782
- package/docs/nova-utils/assets/style.css +0 -147
- package/docs/nova-utils/index.html +0 -986
- package/docs/one-drive-B17qEGg3.js +0 -10
- package/docs/one-drive-DJkLjiFC.js +0 -6
- package/docs/online-C94s_rb_.js +0 -10
- package/docs/online-D-ZCoHHm.js +0 -9
- package/docs/online-rooms-1mVK1aGi.js +0 -7
- package/docs/online-rooms-CDdAm2UO.js +0 -9
- package/docs/outcomes-BBf-Ha_8.js +0 -7
- package/docs/outcomes-C0izuLnk.js +0 -7
- package/docs/password-DLPNSwzE.js +0 -7
- package/docs/password-Dh7gVC6R.js +0 -7
- package/docs/paste-B-PIibRN.js +0 -7
- package/docs/pause-ClttiH9R.js +0 -9
- package/docs/pause-CytomPFa.js +0 -7
- package/docs/pause-borderless-BI_BVCJy.js +0 -8
- package/docs/pic-C5FMoERH.js +0 -7
- package/docs/pic-CfSFIefC.js +0 -8
- package/docs/pic-Dmy_y4Fd.js +0 -8
- package/docs/pin-filled-CXkRNZ5O.js +0 -7
- package/docs/pin-filled-w3eah_ZK.js +0 -7
- package/docs/pin-hollow-DEWfTASy.js +0 -7
- package/docs/pin-hollow-DVbwzH1M.js +0 -7
- package/docs/play-DMAGMc2B.js +0 -8
- package/docs/play-DbZdG7Gq.js +0 -7
- package/docs/play-borderless-DqQ17-YW.js +0 -7
- package/docs/plus-default-DHk06f01.js +0 -7
- package/docs/plus-large-DfxPCCrT.js +0 -7
- package/docs/plus-large-thick-gmHCMimx.js +0 -7
- package/docs/preview-BgaRQpP1.js +0 -9
- package/docs/preview-DiNoAoRq.js +0 -9
- package/docs/preview-DucwBKG_.js +0 -8
- package/docs/print-YZ-X09iP.js +0 -7
- package/docs/print-p1KbTvQ3.js +0 -8
- package/docs/profile-default-CR9VzwIc.js +0 -7
- package/docs/profile-default-CrRCaKe0.js +0 -7
- package/docs/profile-default-DjZMHiLd.js +0 -7
- package/docs/profile-pic-B1r87rnD.js +0 -8
- package/docs/profile-pic-FXAOU2-x.js +0 -7
- package/docs/profile-pic-WGNyfyzw.js +0 -7
- package/docs/project-BmdrPymq.js +0 -9
- package/docs/publish-all-C91CIIOg.js +0 -9
- package/docs/publish-all-CgPj17Qp.js +0 -9
- package/docs/publish-to-lor-BzzkuSPc.js +0 -8
- package/docs/publish-to-lor-NqvGf8fs.js +0 -10
- package/docs/quicklink-C5CDhyK0.js +0 -6
- package/docs/quicklink-DpoklXCh.js +0 -7
- package/docs/quiz-submissions-BAMFpmlt.js +0 -12
- package/docs/quizzing-B5p4bkL1.js +0 -7
- package/docs/quizzing-Bn5KKwty.js +0 -17
- package/docs/quizzing-ZT1VsQDi.js +0 -10
- package/docs/read-DhyDmmkk.js +0 -7
- package/docs/read-DzsAK1Gp.js +0 -7
- package/docs/read-unread-BaKkzPgA.js +0 -7
- package/docs/read-unread-ayEnU2WS.js +0 -7
- package/docs/reading-V8BekXyi.js +0 -9
- package/docs/reading-Z7La5_yK.js +0 -7
- package/docs/redo-DqrjRBg2.js +0 -7
- package/docs/reflection-Bx089gqz.js +0 -10
- package/docs/reflection-CWFEnLpT.js +0 -10
- package/docs/refresh-CLDK3svm.js +0 -7
- package/docs/refresh-DAtZSM_N.js +0 -7
- package/docs/release-conditions-BXxl9Dlf.js +0 -7
- package/docs/release-conditions-OLqc9pTg.js +0 -7
- package/docs/remove-user-B26LnqCu.js +0 -10
- package/docs/remove-user-DNXiNHBs.js +0 -10
- package/docs/reorder-BIFjdLxG.js +0 -7
- package/docs/reorder-Y4_r1Ayt.js +0 -7
- package/docs/repeat-JHaa8nfm.js +0 -7
- package/docs/replied-D2ix7Rk6.js +0 -8
- package/docs/reply-BqzsKC85.js +0 -7
- package/docs/reply-CKQu6lmN.js +0 -8
- package/docs/reply-all-g5VAmAX4.js +0 -8
- package/docs/reporting-ChEapxxJ.js +0 -9
- package/docs/reporting-D3LvXPru.js +0 -7
- package/docs/reports-Beth_W4X.js +0 -12
- package/docs/resize-left-GFaUaulC.js +0 -7
- package/docs/resize-right-DT6LaX2w.js +0 -7
- package/docs/reverse-order-aSt4RUV4.js +0 -7
- package/docs/role-switch-DLSQpVpI.js +0 -7
- package/docs/rss-4WhjKoVd.js +0 -7
- package/docs/rss-Bkw2Vu26.js +0 -9
- package/docs/rubric-C7Bvkdy8.js +0 -7
- package/docs/rubric-DCEXGTtW.js +0 -7
- package/docs/rubric-graded-DRJ7bKvJ.js +0 -13
- package/docs/rubric-graded-UxgPY7mA.js +0 -8
- package/docs/rubrics-CbER8LnL.js +0 -7
- package/docs/sad-BoDjvLIi.js +0 -7
- package/docs/save-C6Wm6dlX.js +0 -7
- package/docs/save-jMj_12iN.js +0 -8
- package/docs/scorm-BEMJkg_y.js +0 -6
- package/docs/scorm-DSQ_wzsf.js +0 -7
- package/docs/scorm-DwyYD2cQ.js +0 -7
- package/docs/search-Ba4VfUac.js +0 -8
- package/docs/search-CcFHrjV6.js +0 -7
- package/docs/search-Cg93dHlN.js +0 -7
- package/docs/seating-CenUmq00.js +0 -7
- package/docs/seating-Diwp3OZ0.js +0 -7
- package/docs/self-assessment-DtdsDcKC.js +0 -7
- package/docs/self-assessment-YnMgOzTH.js +0 -10
- package/docs/send-WLvWpVV4.js +0 -7
- package/docs/send-kamyQxgU.js +0 -7
- package/docs/share-DGresL3N.js +0 -7
- package/docs/share-MaE8kOCt.js +0 -8
- package/docs/share-hollow-CfuLT6Gb.js +0 -7
- package/docs/share-parent-filled-CvoEBnpc.js +0 -10
- package/docs/share-parent-hollow-DyLlXxk9.js +0 -10
- package/docs/shout-B8aYlnCU.js +0 -7
- package/docs/smallscreen-CAmSoX_a.js +0 -7
- package/docs/smallscreen-CJyGrrRY.js +0 -7
- package/docs/sort-type-Ccq_znjS.js +0 -10
- package/docs/source-editor-Bp_3QBP_.js +0 -7
- package/docs/spellcheck-Besf5dkX.js +0 -8
- package/docs/spellcheck-DOYSjTvo.js +0 -8
- package/docs/stop-DWabYiNA.js +0 -8
- package/docs/stop-borderless-CxP7Xjd-.js +0 -7
- package/docs/strikethrough-DBZqp7V2.js +0 -7
- package/docs/style-BbyPYYVo.js +0 -7
- package/docs/style-CDgs5AnH.js +0 -7
- package/docs/subscribe-filled-BQyc3NsS.js +0 -7
- package/docs/subscribe-filled-DnVzUac6.js +0 -7
- package/docs/subscribe-hollow-45odrrmr.js +0 -7
- package/docs/subscribe-hollow-C6hluycF.js +0 -7
- package/docs/subscript-BjAIARSd.js +0 -7
- package/docs/superscript-Bhxn6gvd.js +0 -7
- package/docs/support-DUKjOc66.js +0 -7
- package/docs/surveys-BE8aGBrC.js +0 -7
- package/docs/surveys-DoAUhIgW.js +0 -11
- package/docs/syllabus-CkqNQZI-.js +0 -7
- package/docs/syllabus-Dp2bL_st.js +0 -8
- package/docs/syllabus-QUazS8jY.js +0 -8
- package/docs/symbol-Bc-zvfel.js +0 -7
- package/docs/table-cell-merge-BE8joEWx.js +0 -8
- package/docs/table-cell-properties-CMFT10BB.js +0 -8
- package/docs/table-cell-split-DDUBTvcc.js +0 -7
- package/docs/table-column-insert-after-DzN38SQI.js +0 -7
- package/docs/table-column-insert-before-DeAvcikX.js +0 -7
- package/docs/table-column-remove-DYiXM8Jb.js +0 -8
- package/docs/table-delete-40sq_iUx.js +0 -8
- package/docs/table-of-contents-CpoMBmA3.js +0 -7
- package/docs/table-of-contents-DmVLblsk.js +0 -11
- package/docs/table-properties-C1ZRZ4ga.js +0 -8
- package/docs/table-row-copy-C0NVkTuO.js +0 -8
- package/docs/table-row-cut-D8ApKTxR.js +0 -7
- package/docs/table-row-insert-after-ZiQdbITr.js +0 -7
- package/docs/table-row-insert-before-DOqBNAv2.js +0 -7
- package/docs/table-row-paste-above-svu4TZL-.js +0 -7
- package/docs/table-row-paste-below-DnVjYP_H.js +0 -7
- package/docs/table-row-properties-DKKmT8xi.js +0 -8
- package/docs/table-row-remove-BpX_iTdC.js +0 -8
- package/docs/tag-CLCrd3YD.js +0 -9
- package/docs/tag-Dvlrl1rN.js +0 -7
- package/docs/tag-hollow-C4R57T76.js +0 -8
- package/docs/thumbs-down-_y6J-GBx.js +0 -7
- package/docs/thumbs-up-DmpTufP-.js +0 -14
- package/docs/tile-view-DAEgJlr5.js +0 -12
- package/docs/time-j7PVTeX4.js +0 -7
- package/docs/time-y--dvj05.js +0 -8
- package/docs/tools-ApXN5SG4.js +0 -8
- package/docs/tools-CI_7JQXe.js +0 -7
- package/docs/topic-last-CBI3iGxL.js +0 -8
- package/docs/topic-last-Db8wiEGR.js +0 -8
- package/docs/turnitin-HVqx-UXy.js +0 -8
- package/docs/unapproved-DWiZCrwv.js +0 -10
- package/docs/unapproved-Dhu_8xZD.js +0 -10
- package/docs/underline-DxnwXTaI.js +0 -7
- package/docs/undo-Di_HG7p_.js +0 -7
- package/docs/undo-KeM-So3F.js +0 -7
- package/docs/unsaved-Cc_mMbdm.js +0 -10
- package/docs/unsaved-DeP04L83.js +0 -8
- package/docs/upload-AImNeKVm.js +0 -8
- package/docs/upload-BIQxUfMy.js +0 -8
- package/docs/upload-nuZBVJjg.js +0 -8
- package/docs/user-competencies-8dMwEPL6.js +0 -7
- package/docs/user-competencies-Y57bDKtV.js +0 -19
- package/docs/user-progress-CUzNTpLo.js +0 -10
- package/docs/user-progress-DQUFGV7M.js +0 -10
- package/docs/validate-TiDv-LdA.js +0 -16
- package/docs/video-assignment-C-Eh-N2b.js +0 -10
- package/docs/video-assignment-DJhOt4CY.js +0 -11
- package/docs/view-submission-list-D56QhpGG.js +0 -13
- package/docs/view-submission-list-KS3OLMnE.js +0 -15
- package/docs/viewed-notviewed-CSNppbac.js +0 -7
- package/docs/virtual-classroom-Cxhu5Mw0.js +0 -10
- package/docs/virtual-classroom-De9_fVB7.js +0 -6
- package/docs/visibility-conditional-BbN-53aD.js +0 -9
- package/docs/visibility-hide-B2KKT0mx.js +0 -7
- package/docs/visibility-hide-Bctc7bkg.js +0 -7
- package/docs/visibility-show-BD2PP0kM.js +0 -8
- package/docs/visibility-show-BwU9PNHL.js +0 -7
- package/docs/volume-CYc0W77d.js +0 -8
- package/docs/volume-DrPpJaf1.js +0 -7
- package/docs/volume-muted-CK8EQ9dK.js +0 -12
- package/docs/volume-muted-D2mJNGq6.js +0 -7
- package/docs/widgets-BEcQiVkC.js +0 -12
- package/docs/wizard-D-phsxRW.js +0 -11
- package/docs/wizard-cZqtBjee.js +0 -11
- package/docs/zoom-in-Dpu97xmF.js +0 -7
- package/docs/zoom-out-Cu3SsLeV.js +0 -7
- package/packages/drivers/docs/assets/anchor.js +0 -350
- package/packages/drivers/docs/assets/bass-addons.css +0 -12
- package/packages/drivers/docs/assets/bass.css +0 -544
- package/packages/drivers/docs/assets/fonts/EOT/SourceCodePro-Bold.eot +0 -0
- package/packages/drivers/docs/assets/fonts/EOT/SourceCodePro-Regular.eot +0 -0
- package/packages/drivers/docs/assets/fonts/LICENSE.txt +0 -93
- package/packages/drivers/docs/assets/fonts/OTF/SourceCodePro-Bold.otf +0 -0
- package/packages/drivers/docs/assets/fonts/OTF/SourceCodePro-Regular.otf +0 -0
- package/packages/drivers/docs/assets/fonts/TTF/SourceCodePro-Bold.ttf +0 -0
- package/packages/drivers/docs/assets/fonts/TTF/SourceCodePro-Regular.ttf +0 -0
- package/packages/drivers/docs/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff +0 -0
- package/packages/drivers/docs/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff +0 -0
- package/packages/drivers/docs/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff +0 -0
- package/packages/drivers/docs/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff +0 -0
- package/packages/drivers/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 +0 -0
- package/packages/drivers/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 +0 -0
- package/packages/drivers/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 +0 -0
- package/packages/drivers/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 +0 -0
- package/packages/drivers/docs/assets/fonts/source-code-pro.css +0 -23
- package/packages/drivers/docs/assets/github.css +0 -123
- package/packages/drivers/docs/assets/site.js +0 -168
- package/packages/drivers/docs/assets/split.css +0 -15
- package/packages/drivers/docs/assets/split.js +0 -782
- package/packages/drivers/docs/assets/style.css +0 -147
- package/packages/drivers/docs/index.html +0 -6180
- package/packages/drivers/test/.eslintrc.yaml +0 -27
- package/packages/drivers/test/aws/dynamodb.test.js +0 -119
- package/packages/drivers/test/aws/secrets-manager.js +0 -146
- package/packages/drivers/test/http.test.js +0 -118
- package/packages/drivers/test/oauth.test.js +0 -211
- package/packages/drivers/test/wave.test.js +0 -109
- package/packages/nova-middleware/docs/assets/anchor.js +0 -350
- package/packages/nova-middleware/docs/assets/bass-addons.css +0 -12
- package/packages/nova-middleware/docs/assets/bass.css +0 -544
- package/packages/nova-middleware/docs/assets/fonts/EOT/SourceCodePro-Bold.eot +0 -0
- package/packages/nova-middleware/docs/assets/fonts/EOT/SourceCodePro-Regular.eot +0 -0
- package/packages/nova-middleware/docs/assets/fonts/LICENSE.txt +0 -93
- package/packages/nova-middleware/docs/assets/fonts/OTF/SourceCodePro-Bold.otf +0 -0
- package/packages/nova-middleware/docs/assets/fonts/OTF/SourceCodePro-Regular.otf +0 -0
- package/packages/nova-middleware/docs/assets/fonts/TTF/SourceCodePro-Bold.ttf +0 -0
- package/packages/nova-middleware/docs/assets/fonts/TTF/SourceCodePro-Regular.ttf +0 -0
- package/packages/nova-middleware/docs/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff +0 -0
- package/packages/nova-middleware/docs/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff +0 -0
- package/packages/nova-middleware/docs/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff +0 -0
- package/packages/nova-middleware/docs/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff +0 -0
- package/packages/nova-middleware/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 +0 -0
- package/packages/nova-middleware/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 +0 -0
- package/packages/nova-middleware/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 +0 -0
- package/packages/nova-middleware/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 +0 -0
- package/packages/nova-middleware/docs/assets/fonts/source-code-pro.css +0 -23
- package/packages/nova-middleware/docs/assets/github.css +0 -123
- package/packages/nova-middleware/docs/assets/site.js +0 -168
- package/packages/nova-middleware/docs/assets/split.css +0 -15
- package/packages/nova-middleware/docs/assets/split.js +0 -782
- package/packages/nova-middleware/docs/assets/style.css +0 -147
- package/packages/nova-middleware/docs/index.html +0 -406
- package/packages/nova-middleware/test/.eslintrc.yaml +0 -27
- package/packages/nova-middleware/test/oauth-middleware.test.js +0 -14
- package/packages/nova-model/docs/assets/anchor.js +0 -350
- package/packages/nova-model/docs/assets/bass-addons.css +0 -12
- package/packages/nova-model/docs/assets/bass.css +0 -544
- package/packages/nova-model/docs/assets/fonts/EOT/SourceCodePro-Bold.eot +0 -0
- package/packages/nova-model/docs/assets/fonts/EOT/SourceCodePro-Regular.eot +0 -0
- package/packages/nova-model/docs/assets/fonts/LICENSE.txt +0 -93
- package/packages/nova-model/docs/assets/fonts/OTF/SourceCodePro-Bold.otf +0 -0
- package/packages/nova-model/docs/assets/fonts/OTF/SourceCodePro-Regular.otf +0 -0
- package/packages/nova-model/docs/assets/fonts/TTF/SourceCodePro-Bold.ttf +0 -0
- package/packages/nova-model/docs/assets/fonts/TTF/SourceCodePro-Regular.ttf +0 -0
- package/packages/nova-model/docs/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff +0 -0
- package/packages/nova-model/docs/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff +0 -0
- package/packages/nova-model/docs/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff +0 -0
- package/packages/nova-model/docs/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff +0 -0
- package/packages/nova-model/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 +0 -0
- package/packages/nova-model/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 +0 -0
- package/packages/nova-model/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 +0 -0
- package/packages/nova-model/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 +0 -0
- package/packages/nova-model/docs/assets/fonts/source-code-pro.css +0 -23
- package/packages/nova-model/docs/assets/github.css +0 -123
- package/packages/nova-model/docs/assets/site.js +0 -168
- package/packages/nova-model/docs/assets/split.css +0 -15
- package/packages/nova-model/docs/assets/split.js +0 -782
- package/packages/nova-model/docs/assets/style.css +0 -147
- package/packages/nova-model/docs/index.html +0 -3244
- package/packages/nova-model/test/.eslintrc.yaml +0 -27
- package/packages/nova-model/test/nova-model.test.js +0 -123
- package/packages/nova-utils/docs/assets/anchor.js +0 -350
- package/packages/nova-utils/docs/assets/bass-addons.css +0 -12
- package/packages/nova-utils/docs/assets/bass.css +0 -544
- package/packages/nova-utils/docs/assets/fonts/EOT/SourceCodePro-Bold.eot +0 -0
- package/packages/nova-utils/docs/assets/fonts/EOT/SourceCodePro-Regular.eot +0 -0
- package/packages/nova-utils/docs/assets/fonts/LICENSE.txt +0 -93
- package/packages/nova-utils/docs/assets/fonts/OTF/SourceCodePro-Bold.otf +0 -0
- package/packages/nova-utils/docs/assets/fonts/OTF/SourceCodePro-Regular.otf +0 -0
- package/packages/nova-utils/docs/assets/fonts/TTF/SourceCodePro-Bold.ttf +0 -0
- package/packages/nova-utils/docs/assets/fonts/TTF/SourceCodePro-Regular.ttf +0 -0
- package/packages/nova-utils/docs/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff +0 -0
- package/packages/nova-utils/docs/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff +0 -0
- package/packages/nova-utils/docs/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff +0 -0
- package/packages/nova-utils/docs/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff +0 -0
- package/packages/nova-utils/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 +0 -0
- package/packages/nova-utils/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 +0 -0
- package/packages/nova-utils/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 +0 -0
- package/packages/nova-utils/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 +0 -0
- package/packages/nova-utils/docs/assets/fonts/source-code-pro.css +0 -23
- package/packages/nova-utils/docs/assets/github.css +0 -123
- package/packages/nova-utils/docs/assets/site.js +0 -168
- package/packages/nova-utils/docs/assets/split.css +0 -15
- package/packages/nova-utils/docs/assets/split.js +0 -782
- package/packages/nova-utils/docs/assets/style.css +0 -147
- package/packages/nova-utils/docs/index.html +0 -986
- package/packages/nova-utils/test/config.test.js +0 -250
- package/packages/nova-utils/test/tenant-utiils.test.js +0 -50
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
extends:
|
|
2
|
-
- brightspace/testing-config
|
|
3
|
-
|
|
4
|
-
rules:
|
|
5
|
-
indent:
|
|
6
|
-
- error
|
|
7
|
-
- 2
|
|
8
|
-
- SwitchCase: 1
|
|
9
|
-
no-console:
|
|
10
|
-
- off
|
|
11
|
-
sort-imports:
|
|
12
|
-
- error
|
|
13
|
-
- ignoreCase: true
|
|
14
|
-
ignoreDeclarationSort: false
|
|
15
|
-
ignoreMemberSort: false
|
|
16
|
-
memberSyntaxSortOrder:
|
|
17
|
-
- none
|
|
18
|
-
- all
|
|
19
|
-
- multiple
|
|
20
|
-
- single
|
|
21
|
-
allowSeparatedGroups: true
|
|
22
|
-
import/no-extraneous-dependencies:
|
|
23
|
-
- error
|
|
24
|
-
- devDependencies:
|
|
25
|
-
- "**/test/**/*.js"
|
|
26
|
-
- "**/*.spec.js"
|
|
27
|
-
- "**/*.test.js"
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
|
|
3
|
-
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
4
|
-
import sinon from 'sinon';
|
|
5
|
-
|
|
6
|
-
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
|
|
7
|
-
import { DynamoDbDriver } from '../../src/aws/dynamodb.js';
|
|
8
|
-
|
|
9
|
-
describe('DynamoDb', () => {
|
|
10
|
-
let dynamoDbInstance;
|
|
11
|
-
let sandbox;
|
|
12
|
-
let mockClient;
|
|
13
|
-
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
sandbox = sinon.createSandbox();
|
|
16
|
-
mockClient = {
|
|
17
|
-
send: sandbox.stub().resolves({}),
|
|
18
|
-
};
|
|
19
|
-
sandbox.stub(DynamoDBDocumentClient, 'from').returns(mockClient);
|
|
20
|
-
dynamoDbInstance = new DynamoDbDriver({});
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
afterEach(() => {
|
|
24
|
-
sandbox.restore();
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
describe('put', () => {
|
|
28
|
-
it('should call the put method of the DynamoDB client', async() => {
|
|
29
|
-
const params = { TableName: 'testTable', Item: { id: '1', value: 'test' } };
|
|
30
|
-
|
|
31
|
-
await dynamoDbInstance.put(params);
|
|
32
|
-
|
|
33
|
-
expect(mockClient.send.calledOnce).to.be.true;
|
|
34
|
-
// Ensure the PutCommand was instantiated with the correct parameters
|
|
35
|
-
const [putCommand] = mockClient.send.firstCall.args;
|
|
36
|
-
expect(putCommand.input).to.deep.equal(params);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
describe('get', () => {
|
|
41
|
-
it('should call the get method of the DynamoDB client', async() => {
|
|
42
|
-
const params = { TableName: 'testTable', Key: { id: '1' } };
|
|
43
|
-
|
|
44
|
-
await dynamoDbInstance.get(params);
|
|
45
|
-
|
|
46
|
-
expect(mockClient.send.calledOnce).to.be.true;
|
|
47
|
-
const [getCommand] = mockClient.send.firstCall.args;
|
|
48
|
-
expect(getCommand.input).to.deep.equal(params);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
describe('batchGet', () => {
|
|
53
|
-
it('should process batch get requests', async() => {
|
|
54
|
-
const params = {
|
|
55
|
-
RequestItems: {
|
|
56
|
-
'testTable': {
|
|
57
|
-
Keys: [{ id: '1' }, { id: '2' }],
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
mockClient.send.resolves({
|
|
62
|
-
Responses: { 'testTable': [{ id: '1', value: 'item1' }, { id: '2', value: 'item2' }] },
|
|
63
|
-
UnprocessedKeys: {},
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
const result = await dynamoDbInstance.batchGet(params);
|
|
67
|
-
|
|
68
|
-
expect(result).to.have.property('Responses').that.is.an('object');
|
|
69
|
-
expect(result.Responses['testTable']).to.have.lengthOf(2);
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
describe('delete', () => {
|
|
74
|
-
it('should call the delete method of the DynamoDB client', async() => {
|
|
75
|
-
const params = { TableName: 'testTable', Key: { id: '1' } };
|
|
76
|
-
|
|
77
|
-
await dynamoDbInstance.delete(params);
|
|
78
|
-
|
|
79
|
-
expect(mockClient.send.calledOnce).to.be.true;
|
|
80
|
-
const [deleteCommand] = mockClient.send.firstCall.args;
|
|
81
|
-
expect(deleteCommand.input).to.deep.equal(params);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
describe('query', () => {
|
|
86
|
-
it('should call the query method of the DynamoDB client', async() => {
|
|
87
|
-
const params = { TableName: 'testTable', KeyConditionExpression: 'id = :id', ExpressionAttributeValues: { ':id': '1' } };
|
|
88
|
-
|
|
89
|
-
await dynamoDbInstance.query(params);
|
|
90
|
-
|
|
91
|
-
expect(mockClient.send.calledOnce).to.be.true;
|
|
92
|
-
const [queryCommand] = mockClient.send.firstCall.args;
|
|
93
|
-
expect(queryCommand.input).to.deep.equal(params);
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
describe('getAllResultsRecursive', () => {
|
|
98
|
-
it('should recursively fetch all items', async() => {
|
|
99
|
-
const params = { TableName: 'testTable', KeyConditionExpression: 'id = :id', ExpressionAttributeValues: { ':id': '1' } };
|
|
100
|
-
const itemsPage1 = Array(10).fill(null).map((_, index) => ({ id: `1-${index}` }));
|
|
101
|
-
const itemsPage2 = Array(5).fill(null).map((_, index) => ({ id: `2-${index}` }));
|
|
102
|
-
|
|
103
|
-
// Setup stub to simulate paginated response
|
|
104
|
-
mockClient.send.onFirstCall().resolves({
|
|
105
|
-
Items: itemsPage1,
|
|
106
|
-
LastEvaluatedKey: { id: '1-9' },
|
|
107
|
-
}).onSecondCall().resolves({
|
|
108
|
-
Items: itemsPage2,
|
|
109
|
-
LastEvaluatedKey: null, // Indicate no more pages
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
const results = await dynamoDbInstance.getAllResultsRecursive(params, [], undefined, 0, 0);
|
|
113
|
-
|
|
114
|
-
expect(results.length).to.equal(15);
|
|
115
|
-
expect(results).to.deep.include.members(itemsPage1);
|
|
116
|
-
expect(results).to.deep.include.members(itemsPage2);
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
});
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
// Import the necessary libraries
|
|
2
|
-
import { expect } from 'chai';
|
|
3
|
-
import sinon from 'sinon';
|
|
4
|
-
import { GetSecretValueCommand, SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
|
|
5
|
-
|
|
6
|
-
import { SecretsManager } from '../../src/aws/secrets-manager.js';
|
|
7
|
-
|
|
8
|
-
describe('SecretsManager', () => {
|
|
9
|
-
let secretsManager;
|
|
10
|
-
let stubSend;
|
|
11
|
-
|
|
12
|
-
beforeEach(() => {
|
|
13
|
-
// Initialize the SecretsManager instance
|
|
14
|
-
secretsManager = new SecretsManager();
|
|
15
|
-
|
|
16
|
-
// Stub the send method of SecretsManagerClient
|
|
17
|
-
stubSend = sinon.stub(SecretsManagerClient.prototype, 'send');
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
afterEach(() => {
|
|
21
|
-
// Restore the stubbed send method to its original state
|
|
22
|
-
sinon.restore();
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('should fetch and return the correct secret value', async() => {
|
|
26
|
-
const secretName = 'testSecret';
|
|
27
|
-
const secretValue = 'secretValue';
|
|
28
|
-
const secretString = JSON.stringify({ [secretValue]: 'TestValue' });
|
|
29
|
-
|
|
30
|
-
stubSend.resolves({
|
|
31
|
-
SecretString: secretString,
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
const result = await secretsManager.getSecret(secretName);
|
|
35
|
-
expect(result).to.equal('TestValue');
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('should throw an error if secretName is not provided', async() => {
|
|
39
|
-
try {
|
|
40
|
-
await secretsManager.getSecret();
|
|
41
|
-
} catch (error) {
|
|
42
|
-
expect(error.message).to.equal('Missing secret name to fetch secret');
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('should handle and rethrow AWS SDK errors', async() => {
|
|
47
|
-
const secretName = 'invalidSecret';
|
|
48
|
-
stubSend.rejects(new Error('The requested secret does not exist'));
|
|
49
|
-
|
|
50
|
-
try {
|
|
51
|
-
await secretsManager.getSecret(secretName);
|
|
52
|
-
} catch (error) {
|
|
53
|
-
expect(error.message).to.include('SecretsManager: The requested secret does not exist');
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('should return the entire secret object if keyId is "allKeys"', async() => {
|
|
58
|
-
const secretName = 'complexSecret';
|
|
59
|
-
const secretObject = { key1: 'value1', key2: 'value2', key3: 'value3' };
|
|
60
|
-
const secretString = JSON.stringify(secretObject);
|
|
61
|
-
|
|
62
|
-
stubSend.resolves({
|
|
63
|
-
SecretString: secretString,
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
const result = await secretsManager.getSecret(secretName, 'allKeys');
|
|
67
|
-
expect(result).to.deep.equal(secretObject);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('should return a specific key-value pair from the secret', async() => {
|
|
71
|
-
const secretName = 'specificKeySecret';
|
|
72
|
-
const secretObject = { specificKey: 'specificValue', otherKey: 'otherValue' };
|
|
73
|
-
const secretString = JSON.stringify(secretObject);
|
|
74
|
-
|
|
75
|
-
stubSend.resolves({
|
|
76
|
-
SecretString: secretString,
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
const result = await secretsManager.getSecret(secretName, 'specificKey');
|
|
80
|
-
expect(result).to.equal('specificValue');
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('should return the prod specific value if in production environment', async() => {
|
|
84
|
-
// Simulate production environment
|
|
85
|
-
secretsManager.isProdEnvironment = true;
|
|
86
|
-
const secretName = 'envSpecificSecret';
|
|
87
|
-
const secretObject = { dev: 'devValue', prod: 'prodValue' };
|
|
88
|
-
const secretString = JSON.stringify(secretObject);
|
|
89
|
-
|
|
90
|
-
stubSend.resolves({
|
|
91
|
-
SecretString: secretString,
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
const result = await secretsManager.getSecret(secretName);
|
|
95
|
-
expect(result).to.equal('prodValue');
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('should return the dev specific value if not in production environment', async() => {
|
|
99
|
-
// Ensure non-production environment
|
|
100
|
-
secretsManager.isProdEnvironment = false;
|
|
101
|
-
const secretName = 'envSpecificSecret';
|
|
102
|
-
const secretObject = { dev: 'devValue', unused: 'unusedValue' };
|
|
103
|
-
const secretString = JSON.stringify(secretObject);
|
|
104
|
-
|
|
105
|
-
stubSend.resolves({
|
|
106
|
-
SecretString: secretString,
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
const result = await secretsManager.getSecret(secretName);
|
|
110
|
-
expect(result).to.equal('devValue');
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('should throw an error if the specified keyId does not exist in the secret', async() => {
|
|
114
|
-
const secretName = 'missingKeySecret';
|
|
115
|
-
const secretObject = { existingKey: 'existingValue' };
|
|
116
|
-
const secretString = JSON.stringify(secretObject);
|
|
117
|
-
|
|
118
|
-
stubSend.resolves({
|
|
119
|
-
SecretString: secretString,
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
try {
|
|
123
|
-
await secretsManager.getSecret(secretName, 'nonExistingKey');
|
|
124
|
-
} catch (error) {
|
|
125
|
-
expect(error.message).to.equal('SecretsManager: nonExistingKey does not exist');
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
it('should log the error before rethrowing', async() => {
|
|
130
|
-
const secretName = 'erroredSecret';
|
|
131
|
-
const errorMessage = 'Simulated failure';
|
|
132
|
-
stubSend.rejects(new Error(errorMessage));
|
|
133
|
-
|
|
134
|
-
const logSpy = sinon.spy(console, 'log');
|
|
135
|
-
|
|
136
|
-
try {
|
|
137
|
-
await secretsManager.getSecret(secretName);
|
|
138
|
-
} catch (error) {
|
|
139
|
-
// The error should be logged before being rethrown
|
|
140
|
-
sinon.assert.calledWith(logSpy, sinon.match.instanceOf(Error));
|
|
141
|
-
expect(error.message).to.include(`SecretsManager: ${errorMessage}`);
|
|
142
|
-
} finally {
|
|
143
|
-
logSpy.restore();
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
});
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { match, restore, stub } from 'sinon';
|
|
2
|
-
|
|
3
|
-
import * as chai from 'chai';
|
|
4
|
-
import sinonChai from 'sinon-chai';
|
|
5
|
-
|
|
6
|
-
import { HttpDriver } from '../../drivers/src/http.js';
|
|
7
|
-
|
|
8
|
-
chai.use(sinonChai);
|
|
9
|
-
const expect = chai.expect;
|
|
10
|
-
|
|
11
|
-
describe('HttpDriver', () => {
|
|
12
|
-
let httpDriver;
|
|
13
|
-
let stubFetch;
|
|
14
|
-
const baseUrl = 'http://example.com';
|
|
15
|
-
const configOverrides = { enabled: true };
|
|
16
|
-
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
httpDriver = new HttpDriver(baseUrl, configOverrides);
|
|
19
|
-
stubFetch = stub(httpDriver, '_fetch'); // Stubbing fetch
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
afterEach(() => {
|
|
23
|
-
restore(); // Restore original fetch function
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
const mockSuccess = () => {
|
|
27
|
-
return Promise.resolve({
|
|
28
|
-
status: 200,
|
|
29
|
-
json: () => Promise.resolve({ success: true }),
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
describe('post', () => {
|
|
34
|
-
|
|
35
|
-
const path = '/test';
|
|
36
|
-
const body = { key: 'value' };
|
|
37
|
-
const headers = { 'Custom-Header': 'HeaderValue', 'Content-Type': 'application/json' };
|
|
38
|
-
|
|
39
|
-
it('should send a POST request and return response', async() => {
|
|
40
|
-
const mockResponse = mockSuccess();
|
|
41
|
-
|
|
42
|
-
stubFetch.returns(mockResponse);
|
|
43
|
-
|
|
44
|
-
const response = await httpDriver.post(path, body, headers);
|
|
45
|
-
expect(stubFetch).to.be.calledWith(`${baseUrl}${path}`, {
|
|
46
|
-
method: 'POST',
|
|
47
|
-
headers: {
|
|
48
|
-
'Content-Type': 'application/json',
|
|
49
|
-
'Custom-Header': 'HeaderValue',
|
|
50
|
-
},
|
|
51
|
-
body: JSON.stringify(body),
|
|
52
|
-
});
|
|
53
|
-
expect(response.success).to.be.true;
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it('should handle a successful POST request', async() => {
|
|
57
|
-
const mockResponse = Promise.resolve({
|
|
58
|
-
status: 200,
|
|
59
|
-
json: () => Promise.resolve({ success: true, data: 'response data' }),
|
|
60
|
-
});
|
|
61
|
-
stubFetch.returns(mockResponse);
|
|
62
|
-
|
|
63
|
-
const response = await httpDriver.post(path, body, headers);
|
|
64
|
-
|
|
65
|
-
expect(stubFetch).to.have.been.calledWith(`${baseUrl}${path}`, match.has('method', 'POST'));
|
|
66
|
-
expect(response).to.deep.include({ success: true, body: { success: true, data: 'response data' } });
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('should handle a failed POST request with non-2xx status', async() => {
|
|
70
|
-
const mockResponse = Promise.resolve({
|
|
71
|
-
status: 400,
|
|
72
|
-
text: () => Promise.resolve('Bad Request'),
|
|
73
|
-
});
|
|
74
|
-
stubFetch.returns(mockResponse);
|
|
75
|
-
|
|
76
|
-
const response = await httpDriver.post(path, body, headers);
|
|
77
|
-
|
|
78
|
-
expect(response).to.deep.include({ success: false, error: 'Bad Request' });
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('should handle network or fetch errors gracefully', async() => {
|
|
82
|
-
stubFetch.rejects(new Error('Network Error'));
|
|
83
|
-
|
|
84
|
-
const response = await httpDriver.post(path, body, headers);
|
|
85
|
-
|
|
86
|
-
expect(response).to.deep.include({ success: false, error: 'Network Error' });
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it('should send the correct headers and body with the POST request', async() => {
|
|
90
|
-
const mockResponse = Promise.resolve({ status: 200, json: () => Promise.resolve({ success: true }) });
|
|
91
|
-
stubFetch.returns(mockResponse);
|
|
92
|
-
|
|
93
|
-
await httpDriver.post(path, body, headers);
|
|
94
|
-
|
|
95
|
-
expect(stubFetch).to.have.been.calledWithMatch(`${baseUrl}${path}`, {
|
|
96
|
-
headers: match({
|
|
97
|
-
'Content-Type': 'application/json',
|
|
98
|
-
'Custom-Header': 'HeaderValue',
|
|
99
|
-
}),
|
|
100
|
-
body: JSON.stringify(body),
|
|
101
|
-
method: 'POST',
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('should correctly serialize JSON body for the POST request', async() => {
|
|
106
|
-
const mockResponse = Promise.resolve({ status: 200, json: () => Promise.resolve({ success: true }) });
|
|
107
|
-
stubFetch.returns(mockResponse);
|
|
108
|
-
|
|
109
|
-
const complexBody = { key: 'value', nested: { a: 1, b: true } };
|
|
110
|
-
await httpDriver.post(path, complexBody, headers);
|
|
111
|
-
|
|
112
|
-
expect(stubFetch).to.have.been.calledWithMatch(`${baseUrl}${path}`, {
|
|
113
|
-
body: JSON.stringify(complexBody),
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
});
|
|
118
|
-
});
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { ClientCredentials } from 'simple-oauth2';
|
|
2
|
-
import { expect } from 'chai';
|
|
3
|
-
import { mock, restore } from 'sinon';
|
|
4
|
-
|
|
5
|
-
import { apiTokenRepo } from '../../nova-model/src/repo/api-token.js';
|
|
6
|
-
import { OAuthDriver } from '../src/oauth.js';
|
|
7
|
-
|
|
8
|
-
describe('OAuthDriver', () => {
|
|
9
|
-
let oauthDriver;
|
|
10
|
-
let clientCredentialsMock;
|
|
11
|
-
let apiTokenRepoMock;
|
|
12
|
-
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
// Resetting stubs and mocks before each test
|
|
15
|
-
restore(); // This ensures that the environment is clean for each test.
|
|
16
|
-
|
|
17
|
-
// Mocking the client credentials instance and its methods
|
|
18
|
-
clientCredentialsMock = mock(ClientCredentials.prototype);
|
|
19
|
-
apiTokenRepoMock = mock(apiTokenRepo);
|
|
20
|
-
|
|
21
|
-
// Example tokenConfig and clientConfig for instantiation
|
|
22
|
-
const oauth = {
|
|
23
|
-
client: {
|
|
24
|
-
id: 'client-id',
|
|
25
|
-
},
|
|
26
|
-
auth: {
|
|
27
|
-
tokenHost: 'https://token.host',
|
|
28
|
-
tokenPath: '/token',
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
const tokenConfig = {};
|
|
32
|
-
const apiIdentifier = 'test-api';
|
|
33
|
-
const baseUrl = 'https://test.nova.dev.brightspace.com';
|
|
34
|
-
|
|
35
|
-
oauthDriver = new OAuthDriver(apiIdentifier, { baseUrl, oauth, tokenConfig });
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
afterEach(() => {
|
|
39
|
-
// Restore the default sandbox here
|
|
40
|
-
restore();
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
describe('getNewToken', () => {
|
|
44
|
-
it('should retrieve a new token successfully', async() => {
|
|
45
|
-
const fakeToken = {
|
|
46
|
-
token: {
|
|
47
|
-
access_token: 'access-token',
|
|
48
|
-
token_type: 'Bearer',
|
|
49
|
-
expires_in: 3600,
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
clientCredentialsMock.expects('getToken').once().resolves(fakeToken);
|
|
54
|
-
|
|
55
|
-
const token = await oauthDriver.getNewToken();
|
|
56
|
-
expect(token).to.deep.equal(fakeToken);
|
|
57
|
-
|
|
58
|
-
clientCredentialsMock.verify();
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
describe('getStoredToken', () => {
|
|
63
|
-
it('should retrieve a stored token successfully', async() => {
|
|
64
|
-
const storedTokenData = {
|
|
65
|
-
token: JSON.stringify({
|
|
66
|
-
access_token: 'stored-access-token',
|
|
67
|
-
token_type: 'Bearer',
|
|
68
|
-
expires_in: 3600,
|
|
69
|
-
expires_at: new Date(Date.now() + 3600 * 1000), // expires in 1 hour
|
|
70
|
-
}),
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
apiTokenRepoMock.expects('get').withArgs({ apiIdentifier: 'test-api' }).resolves(storedTokenData);
|
|
74
|
-
clientCredentialsMock.expects('createToken').once().returns(storedTokenData);
|
|
75
|
-
|
|
76
|
-
const storedToken = await oauthDriver.getStoredToken();
|
|
77
|
-
expect(storedToken).to.deep.equal(storedTokenData);
|
|
78
|
-
|
|
79
|
-
apiTokenRepoMock.verify();
|
|
80
|
-
clientCredentialsMock.verify();
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
describe('storeToken', () => {
|
|
85
|
-
it('should store the token successfully', async() => {
|
|
86
|
-
const tokenToStore = {
|
|
87
|
-
token: {
|
|
88
|
-
access_token: 'new-access-token',
|
|
89
|
-
token_type: 'Bearer',
|
|
90
|
-
expires_in: 3600,
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
apiTokenRepoMock.expects('save').once().resolves();
|
|
95
|
-
|
|
96
|
-
await oauthDriver.storeToken(tokenToStore);
|
|
97
|
-
|
|
98
|
-
apiTokenRepoMock.verify();
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
describe('ensureAccessToken', () => {
|
|
103
|
-
it('should use the existing token if it is not expired', async() => {
|
|
104
|
-
const existingToken = {
|
|
105
|
-
expired: () => false,
|
|
106
|
-
token: {
|
|
107
|
-
access_token: 'valid-access-token',
|
|
108
|
-
token_type: 'Bearer',
|
|
109
|
-
expires_in: 3600,
|
|
110
|
-
},
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
// Directly assigning a non-expired token to the instance
|
|
114
|
-
oauthDriver.accessToken = existingToken;
|
|
115
|
-
|
|
116
|
-
const accessToken = await oauthDriver.ensureAccessToken();
|
|
117
|
-
expect(accessToken).to.deep.equal(existingToken);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('should retrieve a stored token if the current token is expired', async() => {
|
|
121
|
-
oauthDriver.accessToken = {
|
|
122
|
-
expired: () => true,
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
const storedToken = {
|
|
126
|
-
expired: () => false,
|
|
127
|
-
token: JSON.stringify({
|
|
128
|
-
access_token: 'stored-access-token',
|
|
129
|
-
token_type: 'Bearer',
|
|
130
|
-
expires_in: 3600,
|
|
131
|
-
}),
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
apiTokenRepoMock.expects('get').once().resolves(storedToken);
|
|
135
|
-
clientCredentialsMock.expects('createToken').once().returns(storedToken);
|
|
136
|
-
|
|
137
|
-
const accessToken = await oauthDriver.ensureAccessToken();
|
|
138
|
-
expect(accessToken).to.deep.equal(storedToken);
|
|
139
|
-
|
|
140
|
-
apiTokenRepoMock.verify();
|
|
141
|
-
clientCredentialsMock.verify();
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it('should retrieve a new token if no valid token is available', async() => {
|
|
145
|
-
oauthDriver.accessToken = null;
|
|
146
|
-
|
|
147
|
-
const newToken = {
|
|
148
|
-
token: {
|
|
149
|
-
access_token: 'new-access-token',
|
|
150
|
-
token_type: 'Bearer',
|
|
151
|
-
expires_in: 3600,
|
|
152
|
-
},
|
|
153
|
-
};
|
|
154
|
-
|
|
155
|
-
apiTokenRepoMock.expects('get').once().resolves(null);
|
|
156
|
-
clientCredentialsMock.expects('getToken').once().resolves(newToken);
|
|
157
|
-
apiTokenRepoMock.expects('save').once().resolves();
|
|
158
|
-
|
|
159
|
-
const accessToken = await oauthDriver.ensureAccessToken();
|
|
160
|
-
expect(accessToken).to.deep.equal(newToken);
|
|
161
|
-
|
|
162
|
-
apiTokenRepoMock.verify();
|
|
163
|
-
clientCredentialsMock.verify();
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
describe('getHeaders', () => {
|
|
168
|
-
it('should return the correct authorization headers', async() => {
|
|
169
|
-
oauthDriver.accessToken = {
|
|
170
|
-
expired: () => false,
|
|
171
|
-
token: {
|
|
172
|
-
access_token: 'access-token',
|
|
173
|
-
token_type: 'Bearer',
|
|
174
|
-
expires_in: 3600,
|
|
175
|
-
},
|
|
176
|
-
}; // Assuming accessToken is already available
|
|
177
|
-
|
|
178
|
-
const headers = await oauthDriver.getHeaders();
|
|
179
|
-
expect(headers).to.deep.equal({
|
|
180
|
-
'Content-Type': 'application/json',
|
|
181
|
-
Authorization: 'Bearer access-token',
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
describe('Error Handling', () => {
|
|
187
|
-
it('should throw an error when getting a new token fails', async() => {
|
|
188
|
-
clientCredentialsMock.expects('getToken').once().rejects(new Error('Token retrieval failed'));
|
|
189
|
-
let response;
|
|
190
|
-
try {
|
|
191
|
-
await oauthDriver.getNewToken();
|
|
192
|
-
response = 'success';
|
|
193
|
-
} catch (error) {
|
|
194
|
-
response = error.message;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
expect(response).to.equal('Token retrieval failed');
|
|
198
|
-
clientCredentialsMock.verify();
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
it('should return undefined when stored token retrieval fails', async() => {
|
|
202
|
-
apiTokenRepoMock.expects('get').once().rejects(new Error('Token retrieval failed'));
|
|
203
|
-
|
|
204
|
-
const storedToken = await oauthDriver.getStoredToken();
|
|
205
|
-
expect(storedToken).to.be.undefined;
|
|
206
|
-
|
|
207
|
-
apiTokenRepoMock.verify();
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
});
|