@skillswaveca/nova-shared-libraries 1.12.2
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/.eslintignore +1 -0
- package/.eslintrc.yaml +28 -0
- package/.github/dependabot.yml +18 -0
- package/.github/workflows/pull-request.yml +25 -0
- package/.github/workflows/release.yml +72 -0
- package/README.md +69 -0
- package/docs/accelerator-7PKwHj6p.js +7 -0
- package/docs/accelerator-CTGFUnJj.js +7 -0
- package/docs/access-special-BRCQ6BOA.js +7 -0
- package/docs/accessibility-check-DDEnCM3T.js +7 -0
- package/docs/add-CC95oWZj.js +7 -0
- package/docs/add-Dok7V7iV.js +7 -0
- package/docs/add-file-CDcwFmxE.js +9 -0
- package/docs/add-file-DSIehH-a.js +8 -0
- package/docs/add-message-C2J88NtD.js +8 -0
- package/docs/add-message-C74U_c_a.js +8 -0
- package/docs/add-to-lor-Cx3ALzs6.js +10 -0
- package/docs/add-to-lor-mWdPFUuq.js +10 -0
- package/docs/add-user-7oZmllZp.js +8 -0
- package/docs/add-user-Ct61dWhf.js +8 -0
- package/docs/ai-CXRsBcvO.js +7 -0
- package/docs/ai-D1Iq7PBt.js +9 -0
- package/docs/ai-DvFNdjTJ.js +7 -0
- package/docs/alarmbell-BptBR2Jr.js +7 -0
- package/docs/alarmbell-CB5dhFiR.js +7 -0
- package/docs/alert-DlHwdVP6.js +7 -0
- package/docs/alert-V7mrtHbK.js +9 -0
- package/docs/alert-p0Ge30rc.js +8 -0
- package/docs/align-center--wiBdBfZ.js +7 -0
- package/docs/align-full-BfwFgwgv.js +7 -0
- package/docs/align-left-DaZbAxVg.js +7 -0
- package/docs/align-right-DJm8Hnyk.js +7 -0
- package/docs/angry-CLkqqzeH.js +7 -0
- package/docs/arrow-collapse-CKVijIdk.js +7 -0
- package/docs/arrow-collapse-DgaM5Q7K.js +7 -0
- package/docs/arrow-collapse-small-BfTzkoWL.js +7 -0
- package/docs/arrow-expand-Bk1J3lIZ.js +7 -0
- package/docs/arrow-expand-small-B7KVZXkf.js +7 -0
- package/docs/arrow-thin-down-ClfvHk99.js +7 -0
- package/docs/arrow-thin-left-D0lmhbm9.js +7 -0
- package/docs/arrow-thin-right-CZH1S-Ev.js +7 -0
- package/docs/arrow-thin-up-kbf0Hayy.js +7 -0
- package/docs/arrow-toggle-down-CWSCkUi8.js +7 -0
- package/docs/arrow-toggle-up-sUgzJAuI.js +7 -0
- package/docs/assignments-BpNN8uRi.js +9 -0
- package/docs/assignments-BwrFNhJf.js +14 -0
- package/docs/assignments-DJuzE5TS.js +8 -0
- package/docs/attach-CxYJqjr7.js +8 -0
- package/docs/attach-DoURgNqH.js +7 -0
- package/docs/attendance-Bh8NDNxG.js +7 -0
- package/docs/attendance-CKrWYCoi.js +8 -0
- package/docs/awards-08R3caDo.js +7 -0
- package/docs/awards-CGFZ1AmF.js +7 -0
- package/docs/binder-DqjAKrO6.js +7 -0
- package/docs/binder-sPoCLPbv.js +9 -0
- package/docs/blocked-BqqEqoxS.js +7 -0
- package/docs/blocked-CdL2qnqB.js +7 -0
- package/docs/blog-EWWLpv3J.js +11 -0
- package/docs/blog-mImHk1UE.js +11 -0
- package/docs/bold-DvEMGUJQ.js +7 -0
- package/docs/book-management-BycZ58Mx.js +8 -0
- package/docs/book-management-C5EVLmWE.js +7 -0
- package/docs/bookmark-ZSLGVyMZ.js +8 -0
- package/docs/bookmark-filled-By-e1Vik.js +7 -0
- package/docs/bookmark-filled-C5_hpJmC.js +7 -0
- package/docs/bookmark-hollow-BERVrtPe.js +7 -0
- package/docs/bookmark-hollow-DmYIKVj-.js +7 -0
- package/docs/broken-link-0mE-24kB.js +7 -0
- package/docs/broken-link-B0FAWC4d.js +7 -0
- package/docs/browser-Bkf2Pqxa.js +11 -0
- package/docs/browser-DDKpAnFL.js +7 -0
- package/docs/bullet-WEelL-Oz.js +7 -0
- package/docs/bullseye-BGaOsg34.js +9 -0
- package/docs/bullseye-BI26Yr2r.js +11 -0
- package/docs/bullseye-D8leZHHy.js +10 -0
- package/docs/calculate-7BO4aJsc.js +7 -0
- package/docs/calculate-C1k19iEm.js +17 -0
- package/docs/calendar-10jvL2iw.js +7 -0
- package/docs/calendar-CAOKFxG8.js +7 -0
- package/docs/calendar-N5k43N09.js +7 -0
- package/docs/capture-BXEbu8tr.js +7 -0
- package/docs/change-file-3zLEwSjU.js +10 -0
- package/docs/change-file-CVDVitRF.js +10 -0
- package/docs/chat-BLpVloRi.js +7 -0
- package/docs/chat-CJvurd17.js +7 -0
- package/docs/chat-DkYoPSJD.js +7 -0
- package/docs/check-6yKqAXn0.js +7 -0
- package/docs/check-BDGGpjpw.js +7 -0
- package/docs/check-box-COb-iQnp.js +8 -0
- package/docs/check-box-unchecked-CihNEcBY.js +7 -0
- package/docs/check-circle-BHCbtC9e.js +8 -0
- package/docs/check-circle-CcqlS16f.js +7 -0
- package/docs/check-circle-D-88S9HE.js +8 -0
- package/docs/check-manual-D118hJse.js +10 -0
- package/docs/check-user-CzXE-sqy.js +9 -0
- package/docs/checklist-D3dcWqlj.js +12 -0
- package/docs/checklist-VRzqF3Cn.js +7 -0
- package/docs/chevron-down-CmgQXzCG.js +7 -0
- package/docs/chevron-down-NDFaTQA4.js +7 -0
- package/docs/chevron-down-eOc83-I6.js +7 -0
- package/docs/chevron-down-medium-ZHL8V0yD.js +7 -0
- package/docs/chevron-down-small-Cxu3u8oN.js +7 -0
- package/docs/chevron-left-CTXSr5gY.js +7 -0
- package/docs/chevron-left-DGHEARqj.js +7 -0
- package/docs/chevron-left-Dv2XEN1W.js +7 -0
- package/docs/chevron-left-circle-DC2ldsYl.js +8 -0
- package/docs/chevron-right-DyJ0vK9x.js +7 -0
- package/docs/chevron-right-X9aw5FQZ.js +7 -0
- package/docs/chevron-right-circle-CfufyneZ.js +8 -0
- package/docs/chevron-right-dtXLd_t_.js +7 -0
- package/docs/chevron-up-BLvFJkrs.js +7 -0
- package/docs/chevron-up-CBgDUU-S.js +7 -0
- package/docs/chevron-up-Cz4arn0k.js +7 -0
- package/docs/class-MfNPJCE3.js +7 -0
- package/docs/classes-BrimJoaQ.js +7 -0
- package/docs/classes-DNZeYwP9.js +7 -0
- package/docs/classlist-CT7aR3Qp.js +9 -0
- package/docs/classlist-lNAGMMK9.js +7 -0
- package/docs/close-DZhoaKqc.js +7 -0
- package/docs/close-circle-BUNfgKRi.js +8 -0
- package/docs/close-default-dnnWtHBx.js +7 -0
- package/docs/close-large-bMM1w3Qq.js +7 -0
- package/docs/close-large-thick-CIk4u_x5.js +7 -0
- package/docs/close-small-BM6jWA00.js +7 -0
- package/docs/close-thick-CSMgayuW.js +7 -0
- package/docs/comment-filled-BIwNhQOh.js +7 -0
- package/docs/comment-hollow-BuEIRoVu.js +7 -0
- package/docs/contacts-0c5Ejeie.js +8 -0
- package/docs/contacts-0p7GRork.js +9 -0
- package/docs/content-BkmZJI2k.js +10 -0
- package/docs/copy-ByxRV0Fv.js +9 -0
- package/docs/copy-C0jJBW8t.js +8 -0
- package/docs/copy-CrrPol58.js +9 -0
- package/docs/course-B7-GuqH0.js +9 -0
- package/docs/course-progress-complete-D-88S9HE.js +8 -0
- package/docs/course-progress-in-progress-CMNxGcwl.js +7 -0
- package/docs/course-progress-not-started-CZkienJ8.js +7 -0
- package/docs/course-tile-sort-DBH3sD6Y.js +7 -0
- package/docs/course-tile-sort-LVnGtfEg.js +7 -0
- package/docs/coursebuilder-CksHR_dY.js +7 -0
- package/docs/coursebuilder-mK3UOKAz.js +7 -0
- package/docs/cut-BSxIDiPd.js +7 -0
- package/docs/delete-XUr3hb61.js +8 -0
- package/docs/delete-n_0tMiML.js +7 -0
- package/docs/direction-ltr-DOOIOEMV.js +7 -0
- package/docs/direction-rtl-Zq209crM.js +7 -0
- package/docs/disable-CfhAdhZ4.js +8 -0
- package/docs/discussions-BV-rVYTJ.js +8 -0
- package/docs/discussions-DcjKXpsJ.js +8 -0
- package/docs/discussions-FfXuJJ0A.js +8 -0
- package/docs/divider-DYcReEjI.js +12 -0
- package/docs/divider-big-CNFI3Pvd.js +11 -0
- package/docs/divider-solid-BwFmdIq7.js +7 -0
- package/docs/dot-GOmm6Bys.js +7 -0
- package/docs/dot-THJbh2QW.js +7 -0
- package/docs/download-B8F8Cdcb.js +8 -0
- package/docs/download-D0w9z3Z3.js +8 -0
- package/docs/download-SHKxw6bp.js +8 -0
- package/docs/draft-mP5du8rd.js +9 -0
- package/docs/draft-vZl_0H-L.js +8 -0
- package/docs/dragger-aZ6zsEfR.js +7 -0
- package/docs/drivers/assets/anchor.js +350 -0
- package/docs/drivers/assets/bass-addons.css +12 -0
- package/docs/drivers/assets/bass.css +544 -0
- 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 +93 -0
- 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 +23 -0
- package/docs/drivers/assets/github.css +123 -0
- package/docs/drivers/assets/site.js +168 -0
- package/docs/drivers/assets/split.css +15 -0
- package/docs/drivers/assets/split.js +782 -0
- package/docs/drivers/assets/style.css +147 -0
- package/docs/drivers/index.html +6180 -0
- package/docs/edit-XTluWOyY.js +7 -0
- package/docs/edit-bulk-CbUTb41B.js +7 -0
- package/docs/edit-not-editable-BtNDjkNt.js +9 -0
- package/docs/edit-rtSBrFnZ.js +7 -0
- package/docs/email-B77IV5dc.js +8 -0
- package/docs/email-DShyqmyr.js +7 -0
- package/docs/email-Dr_fUQo7.js +7 -0
- package/docs/email-open-CNPI-nbt.js +9 -0
- package/docs/email-open-sMmv4goK.js +8 -0
- package/docs/email-read-D4PMZMhZ.js +8 -0
- package/docs/enable-BXJKKu9V.js +8 -0
- package/docs/enrollment-D_f33z-t.js +7 -0
- package/docs/eportfolio-CmIoQSs-.js +7 -0
- package/docs/eportfolio-DiR128Ch.js +8 -0
- package/docs/equation-graphical-DEK4DR0o.js +7 -0
- package/docs/equation-graphical-chemistry-deGj_Wo1.js +7 -0
- package/docs/equation-latex-OwF3WKZs.js +7 -0
- package/docs/equation-mathml-BVFy7F04.js +8 -0
- package/docs/evaluate-all-D8Ed6wUQ.js +15 -0
- package/docs/evaluate-all-DRA08hvM.js +13 -0
- package/docs/event-log-BBnLruqh.js +7 -0
- package/docs/exemption-add-CuNjn-gE.js +8 -0
- package/docs/exemption-remove-C6gurfls.js +10 -0
- package/docs/export-B00I40zU.js +8 -0
- package/docs/export-C_qczGjD.js +8 -0
- package/docs/external-CGUtobc0.js +6 -0
- package/docs/external-D14KafxI.js +9 -0
- package/docs/external-XLH4ZIpG.js +9 -0
- package/docs/feed-CpSir1Op.js +7 -0
- package/docs/feed-Dp9gnfxV.js +12 -0
- package/docs/feedback-CYkdDNHj.js +7 -0
- package/docs/feedback-zuS0X61K.js +7 -0
- package/docs/file-archive-BqyAeRx6.js +14 -0
- package/docs/file-archive-aUsV28fR.js +14 -0
- package/docs/file-audio-C0gLVZ1J.js +7 -0
- package/docs/file-audio-DlPChJJD.js +7 -0
- package/docs/file-audio-Ez8GKNqD.js +8 -0
- package/docs/file-document-OV_yiZc9.js +7 -0
- package/docs/file-document-PtERBBjG.js +9 -0
- package/docs/file-document-RAyDjBV0.js +9 -0
- package/docs/file-image-2kUlJRfa.js +7 -0
- package/docs/file-image-DEvp4loc.js +8 -0
- package/docs/file-presentation-DnSQf6dJ.js +10 -0
- package/docs/file-presentation-Dvm4dJkX.js +11 -0
- package/docs/file-presentation-DynwRY3d.js +7 -0
- package/docs/file-video-Baynsug6.js +8 -0
- package/docs/file-video-DubiL6Pa.js +7 -0
- package/docs/file-video-Dz0Xv-nt.js +8 -0
- package/docs/filter-BXmy_W6Z.js +7 -0
- package/docs/filter-CjP2TU9o.js +11 -0
- package/docs/flag-fill-Bon2nRGs.js +7 -0
- package/docs/flag-filled-B0f2EsXm.js +7 -0
- package/docs/flag-hollow-CaU1iNOl.js +7 -0
- package/docs/flag-hollow-DfEoHVNP.js +7 -0
- package/docs/folder-D4EQiKEf.js +7 -0
- package/docs/folder-DjGOP9kC.js +7 -0
- package/docs/folder-up-level-CmUITqEa.js +8 -0
- package/docs/forms-BzBisiyk.js +8 -0
- package/docs/forms-QmRSltZO.js +7 -0
- package/docs/forward-B7OsyI-4.js +8 -0
- package/docs/fullscreen-DW5UhnuF.js +8 -0
- package/docs/fullscreen-Dos-vYUL.js +7 -0
- package/docs/game-BPXtsa4R.js +12 -0
- package/docs/game-CAeZpf2P.js +12 -0
- package/docs/game-CJBm4W_4.js +6 -0
- package/docs/gear-BXgew4r5.js +8 -0
- package/docs/gear-BefUgJUH.js +8 -0
- package/docs/gear-Dozogx0s.js +7 -0
- package/docs/glossary-BYZOnXFD.js +10 -0
- package/docs/glossary-pJwGMnFw.js +7 -0
- package/docs/google-drive-BY7aNeo4.js +7 -0
- package/docs/google-drive-C2K-Q1Sz.js +7 -0
- package/docs/google-drive-UaaDdmWX.js +7 -0
- package/docs/grabber-DDfgK4q3.js +7 -0
- package/docs/grabber-small--2Gc1-LB.js +7 -0
- package/docs/grade-BG_E-8NT.js +8 -0
- package/docs/grade-D2MISbK9.js +7 -0
- package/docs/grade-NOWaSTNa.js +8 -0
- package/docs/grade-remove-Ph1Izm-7.js +8 -0
- package/docs/grade-visible-CDb-9-br.js +7 -0
- package/docs/group-DtqVtMH3.js +8 -0
- package/docs/group-locker-ftiR0a03.js +7 -0
- package/docs/happy-LeP0nGOv.js +7 -0
- package/docs/help-CkV4Dp7d.js +9 -0
- package/docs/help-Dxodc931.js +9 -0
- package/docs/help-FOiT3jKO.js +7 -0
- package/docs/history-DARTknKW.js +8 -0
- package/docs/history-rho7wY5T.js +8 -0
- package/docs/home-BE2SQvvs.js +7 -0
- package/docs/home-D_tSkasl.js +8 -0
- package/docs/home-DbQqnxwO.js +7 -0
- package/docs/image-BCnN94lf.js +9 -0
- package/docs/image-Dmy_y4Fd.js +8 -0
- package/docs/import-D_Njyhb9.js +8 -0
- package/docs/import-YfiMqwWh.js +8 -0
- package/docs/important-2qm6frSZ.js +9 -0
- package/docs/indent-decrease-CQm4KxII.js +7 -0
- package/docs/indent-increase-BO1QVrc8.js +7 -0
- package/docs/index.html +1 -0
- package/docs/inline-module-index-0.js +9556 -0
- package/docs/insert-attributes-B4iHYS-t.js +8 -0
- package/docs/insert-emoticon-BC9tKUjH.js +11 -0
- package/docs/insights-portal-Cm3Wea4M.js +10 -0
- package/docs/insights-portal-Depbhlwj.js +8 -0
- package/docs/italic-AhBNAWI0.js +7 -0
- package/docs/link-BgD3fOWi.js +8 -0
- package/docs/link-CPDrunkx.js +7 -0
- package/docs/link-CmNVOd0t.js +7 -0
- package/docs/list-bullet-CyrIsY33.js +11 -0
- package/docs/list-ordered-BnmtMuSC.js +7 -0
- package/docs/list-view-EI9pvwuC.js +11 -0
- package/docs/location-CzWLCAQ8.js +7 -0
- package/docs/location-DcnFhfnk.js +10 -0
- package/docs/locations-B9k1Fx7T.js +13 -0
- package/docs/locations-CSxT0wIK.js +7 -0
- package/docs/lock-BWzWh9B7.js +8 -0
- package/docs/lock-E8wu8HD6.js +8 -0
- package/docs/lock-locked-D5lyHWqQ.js +7 -0
- package/docs/lock-unlock-WCjSz1i-.js +7 -0
- package/docs/lock-unlocked-CAJCLSet.js +8 -0
- package/docs/lock-unlocked-DExBKORh.js +8 -0
- package/docs/locker-B10MJtSA.js +7 -0
- package/docs/locker-Cqcf7p8D.js +10 -0
- package/docs/lol-D_JxRmpk.js +7 -0
- package/docs/lor-LgltaGp1.js +7 -0
- package/docs/lor-NF8M-dTl.js +7 -0
- package/docs/low-priority-CYw20_i6.js +9 -0
- package/docs/manage-dates-7pdHHIpP.js +8 -0
- package/docs/manage-dates-BvldV3qd.js +10 -0
- package/docs/manage-dates-edit-BL7TE5Ca.js +7 -0
- package/docs/manage-dates-offset-C36mTMRI.js +8 -0
- package/docs/manage-files-CztcMg2T.js +8 -0
- package/docs/manage-files-DjhMboB5.js +8 -0
- package/docs/manual-run-mkeXX4ZT.js +8 -0
- package/docs/media-BIt0cvtO.js +8 -0
- package/docs/media-BP3ScDqX.js +7 -0
- package/docs/meh-VZVAbZG3.js +7 -0
- package/docs/menu-Bax-k1Yb.js +9 -0
- package/docs/menu-hamburger-C2vj4eRY.js +7 -0
- package/docs/menu-hamburger-DjawJZYW.js +7 -0
- package/docs/menu-hamburger-JIneUuO7.js +7 -0
- package/docs/merge-9psevQT-.js +11 -0
- package/docs/message-new-C2a9sicZ.js +8 -0
- package/docs/messages-BfrTLnON.js +12 -0
- package/docs/messages-BlNvFjBH.js +7 -0
- package/docs/mic-B_QU0QmO.js +8 -0
- package/docs/mic-Dq5WbNIP.js +8 -0
- package/docs/mobile-DqC65aN6.js +6 -0
- package/docs/more-CfLcaduh.js +7 -0
- package/docs/move-down-D9PWLWhn.js +7 -0
- package/docs/move-down-DNE-3gT2.js +8 -0
- package/docs/move-to-Bt5a4Jcj.js +8 -0
- package/docs/move-to-CmhSXqJ1.js +8 -0
- package/docs/move-up-BaS-oCU5.js +7 -0
- package/docs/move-up-ByeMSeVd.js +8 -0
- package/docs/my-computer-DTsn7C9t.js +8 -0
- package/docs/navigate-BUpXfdU3.js +8 -0
- package/docs/navigate-D1BhWZtz.js +11 -0
- package/docs/new-line-8f0I71Mh.js +7 -0
- package/docs/new-window-B5Ln_cc3.js +8 -0
- package/docs/news-C1mrMSqE.js +7 -0
- package/docs/news-DlE9A-vs.js +9 -0
- package/docs/news-NiNcL5vl.js +8 -0
- package/docs/no-entry-C3dnCBCI.js +8 -0
- package/docs/notification-bell-D_RdfZKS.js +9 -0
- package/docs/nova-middleware/assets/anchor.js +350 -0
- package/docs/nova-middleware/assets/bass-addons.css +12 -0
- package/docs/nova-middleware/assets/bass.css +544 -0
- 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 +93 -0
- 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 +23 -0
- package/docs/nova-middleware/assets/github.css +123 -0
- package/docs/nova-middleware/assets/site.js +168 -0
- package/docs/nova-middleware/assets/split.css +15 -0
- package/docs/nova-middleware/assets/split.js +782 -0
- package/docs/nova-middleware/assets/style.css +147 -0
- package/docs/nova-middleware/index.html +406 -0
- package/docs/nova-model/assets/anchor.js +350 -0
- package/docs/nova-model/assets/bass-addons.css +12 -0
- package/docs/nova-model/assets/bass.css +544 -0
- 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 +93 -0
- 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 +23 -0
- package/docs/nova-model/assets/github.css +123 -0
- package/docs/nova-model/assets/site.js +168 -0
- package/docs/nova-model/assets/split.css +15 -0
- package/docs/nova-model/assets/split.js +782 -0
- package/docs/nova-model/assets/style.css +147 -0
- package/docs/nova-model/index.html +3244 -0
- package/docs/nova-utils/assets/anchor.js +350 -0
- package/docs/nova-utils/assets/bass-addons.css +12 -0
- package/docs/nova-utils/assets/bass.css +544 -0
- 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 +93 -0
- 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 +23 -0
- package/docs/nova-utils/assets/github.css +123 -0
- package/docs/nova-utils/assets/site.js +168 -0
- package/docs/nova-utils/assets/split.css +15 -0
- package/docs/nova-utils/assets/split.js +782 -0
- package/docs/nova-utils/assets/style.css +147 -0
- package/docs/nova-utils/index.html +986 -0
- package/docs/one-drive-B17qEGg3.js +10 -0
- package/docs/one-drive-DJkLjiFC.js +6 -0
- package/docs/online-C94s_rb_.js +10 -0
- package/docs/online-D-ZCoHHm.js +9 -0
- package/docs/online-rooms-1mVK1aGi.js +7 -0
- package/docs/online-rooms-CDdAm2UO.js +9 -0
- package/docs/outcomes-BBf-Ha_8.js +7 -0
- package/docs/outcomes-C0izuLnk.js +7 -0
- package/docs/password-DLPNSwzE.js +7 -0
- package/docs/password-Dh7gVC6R.js +7 -0
- package/docs/paste-B-PIibRN.js +7 -0
- package/docs/pause-ClttiH9R.js +9 -0
- package/docs/pause-CytomPFa.js +7 -0
- package/docs/pause-borderless-BI_BVCJy.js +8 -0
- package/docs/pic-C5FMoERH.js +7 -0
- package/docs/pic-CfSFIefC.js +8 -0
- package/docs/pic-Dmy_y4Fd.js +8 -0
- package/docs/pin-filled-CXkRNZ5O.js +7 -0
- package/docs/pin-filled-w3eah_ZK.js +7 -0
- package/docs/pin-hollow-DEWfTASy.js +7 -0
- package/docs/pin-hollow-DVbwzH1M.js +7 -0
- package/docs/play-DMAGMc2B.js +8 -0
- package/docs/play-DbZdG7Gq.js +7 -0
- package/docs/play-borderless-DqQ17-YW.js +7 -0
- package/docs/plus-default-DHk06f01.js +7 -0
- package/docs/plus-large-DfxPCCrT.js +7 -0
- package/docs/plus-large-thick-gmHCMimx.js +7 -0
- package/docs/preview-BgaRQpP1.js +9 -0
- package/docs/preview-DiNoAoRq.js +9 -0
- package/docs/preview-DucwBKG_.js +8 -0
- package/docs/print-YZ-X09iP.js +7 -0
- package/docs/print-p1KbTvQ3.js +8 -0
- package/docs/profile-default-CR9VzwIc.js +7 -0
- package/docs/profile-default-CrRCaKe0.js +7 -0
- package/docs/profile-default-DjZMHiLd.js +7 -0
- package/docs/profile-pic-B1r87rnD.js +8 -0
- package/docs/profile-pic-FXAOU2-x.js +7 -0
- package/docs/profile-pic-WGNyfyzw.js +7 -0
- package/docs/project-BmdrPymq.js +9 -0
- package/docs/publish-all-C91CIIOg.js +9 -0
- package/docs/publish-all-CgPj17Qp.js +9 -0
- package/docs/publish-to-lor-BzzkuSPc.js +8 -0
- package/docs/publish-to-lor-NqvGf8fs.js +10 -0
- package/docs/quicklink-C5CDhyK0.js +6 -0
- package/docs/quicklink-DpoklXCh.js +7 -0
- package/docs/quiz-submissions-BAMFpmlt.js +12 -0
- package/docs/quizzing-B5p4bkL1.js +7 -0
- package/docs/quizzing-Bn5KKwty.js +17 -0
- package/docs/quizzing-ZT1VsQDi.js +10 -0
- package/docs/read-DhyDmmkk.js +7 -0
- package/docs/read-DzsAK1Gp.js +7 -0
- package/docs/read-unread-BaKkzPgA.js +7 -0
- package/docs/read-unread-ayEnU2WS.js +7 -0
- package/docs/reading-V8BekXyi.js +9 -0
- package/docs/reading-Z7La5_yK.js +7 -0
- package/docs/redo-DqrjRBg2.js +7 -0
- package/docs/reflection-Bx089gqz.js +10 -0
- package/docs/reflection-CWFEnLpT.js +10 -0
- package/docs/refresh-CLDK3svm.js +7 -0
- package/docs/refresh-DAtZSM_N.js +7 -0
- package/docs/release-conditions-BXxl9Dlf.js +7 -0
- package/docs/release-conditions-OLqc9pTg.js +7 -0
- package/docs/remove-user-B26LnqCu.js +10 -0
- package/docs/remove-user-DNXiNHBs.js +10 -0
- package/docs/reorder-BIFjdLxG.js +7 -0
- package/docs/reorder-Y4_r1Ayt.js +7 -0
- package/docs/repeat-JHaa8nfm.js +7 -0
- package/docs/replied-D2ix7Rk6.js +8 -0
- package/docs/reply-BqzsKC85.js +7 -0
- package/docs/reply-CKQu6lmN.js +8 -0
- package/docs/reply-all-g5VAmAX4.js +8 -0
- package/docs/reporting-ChEapxxJ.js +9 -0
- package/docs/reporting-D3LvXPru.js +7 -0
- package/docs/reports-Beth_W4X.js +12 -0
- package/docs/resize-left-GFaUaulC.js +7 -0
- package/docs/resize-right-DT6LaX2w.js +7 -0
- package/docs/reverse-order-aSt4RUV4.js +7 -0
- package/docs/role-switch-DLSQpVpI.js +7 -0
- package/docs/rss-4WhjKoVd.js +7 -0
- package/docs/rss-Bkw2Vu26.js +9 -0
- package/docs/rubric-C7Bvkdy8.js +7 -0
- package/docs/rubric-DCEXGTtW.js +7 -0
- package/docs/rubric-graded-DRJ7bKvJ.js +13 -0
- package/docs/rubric-graded-UxgPY7mA.js +8 -0
- package/docs/rubrics-CbER8LnL.js +7 -0
- package/docs/sad-BoDjvLIi.js +7 -0
- package/docs/save-C6Wm6dlX.js +7 -0
- package/docs/save-jMj_12iN.js +8 -0
- package/docs/scorm-BEMJkg_y.js +6 -0
- package/docs/scorm-DSQ_wzsf.js +7 -0
- package/docs/scorm-DwyYD2cQ.js +7 -0
- package/docs/search-Ba4VfUac.js +8 -0
- package/docs/search-CcFHrjV6.js +7 -0
- package/docs/search-Cg93dHlN.js +7 -0
- package/docs/seating-CenUmq00.js +7 -0
- package/docs/seating-Diwp3OZ0.js +7 -0
- package/docs/self-assessment-DtdsDcKC.js +7 -0
- package/docs/self-assessment-YnMgOzTH.js +10 -0
- package/docs/send-WLvWpVV4.js +7 -0
- package/docs/send-kamyQxgU.js +7 -0
- package/docs/share-DGresL3N.js +7 -0
- package/docs/share-MaE8kOCt.js +8 -0
- package/docs/share-hollow-CfuLT6Gb.js +7 -0
- package/docs/share-parent-filled-CvoEBnpc.js +10 -0
- package/docs/share-parent-hollow-DyLlXxk9.js +10 -0
- package/docs/shout-B8aYlnCU.js +7 -0
- package/docs/smallscreen-CAmSoX_a.js +7 -0
- package/docs/smallscreen-CJyGrrRY.js +7 -0
- package/docs/sort-type-Ccq_znjS.js +10 -0
- package/docs/source-editor-Bp_3QBP_.js +7 -0
- package/docs/spellcheck-Besf5dkX.js +8 -0
- package/docs/spellcheck-DOYSjTvo.js +8 -0
- package/docs/stop-DWabYiNA.js +8 -0
- package/docs/stop-borderless-CxP7Xjd-.js +7 -0
- package/docs/strikethrough-DBZqp7V2.js +7 -0
- package/docs/style-BbyPYYVo.js +7 -0
- package/docs/style-CDgs5AnH.js +7 -0
- package/docs/subscribe-filled-BQyc3NsS.js +7 -0
- package/docs/subscribe-filled-DnVzUac6.js +7 -0
- package/docs/subscribe-hollow-45odrrmr.js +7 -0
- package/docs/subscribe-hollow-C6hluycF.js +7 -0
- package/docs/subscript-BjAIARSd.js +7 -0
- package/docs/superscript-Bhxn6gvd.js +7 -0
- package/docs/support-DUKjOc66.js +7 -0
- package/docs/surveys-BE8aGBrC.js +7 -0
- package/docs/surveys-DoAUhIgW.js +11 -0
- package/docs/syllabus-CkqNQZI-.js +7 -0
- package/docs/syllabus-Dp2bL_st.js +8 -0
- package/docs/syllabus-QUazS8jY.js +8 -0
- package/docs/symbol-Bc-zvfel.js +7 -0
- package/docs/table-cell-merge-BE8joEWx.js +8 -0
- package/docs/table-cell-properties-CMFT10BB.js +8 -0
- package/docs/table-cell-split-DDUBTvcc.js +7 -0
- package/docs/table-column-insert-after-DzN38SQI.js +7 -0
- package/docs/table-column-insert-before-DeAvcikX.js +7 -0
- package/docs/table-column-remove-DYiXM8Jb.js +8 -0
- package/docs/table-delete-40sq_iUx.js +8 -0
- package/docs/table-of-contents-CpoMBmA3.js +7 -0
- package/docs/table-of-contents-DmVLblsk.js +11 -0
- package/docs/table-properties-C1ZRZ4ga.js +8 -0
- package/docs/table-row-copy-C0NVkTuO.js +8 -0
- package/docs/table-row-cut-D8ApKTxR.js +7 -0
- package/docs/table-row-insert-after-ZiQdbITr.js +7 -0
- package/docs/table-row-insert-before-DOqBNAv2.js +7 -0
- package/docs/table-row-paste-above-svu4TZL-.js +7 -0
- package/docs/table-row-paste-below-DnVjYP_H.js +7 -0
- package/docs/table-row-properties-DKKmT8xi.js +8 -0
- package/docs/table-row-remove-BpX_iTdC.js +8 -0
- package/docs/tag-CLCrd3YD.js +9 -0
- package/docs/tag-Dvlrl1rN.js +7 -0
- package/docs/tag-hollow-C4R57T76.js +8 -0
- package/docs/thumbs-down-_y6J-GBx.js +7 -0
- package/docs/thumbs-up-DmpTufP-.js +14 -0
- package/docs/tile-view-DAEgJlr5.js +12 -0
- package/docs/time-j7PVTeX4.js +7 -0
- package/docs/time-y--dvj05.js +8 -0
- package/docs/tools-ApXN5SG4.js +8 -0
- package/docs/tools-CI_7JQXe.js +7 -0
- package/docs/topic-last-CBI3iGxL.js +8 -0
- package/docs/topic-last-Db8wiEGR.js +8 -0
- package/docs/turnitin-HVqx-UXy.js +8 -0
- package/docs/unapproved-DWiZCrwv.js +10 -0
- package/docs/unapproved-Dhu_8xZD.js +10 -0
- package/docs/underline-DxnwXTaI.js +7 -0
- package/docs/undo-Di_HG7p_.js +7 -0
- package/docs/undo-KeM-So3F.js +7 -0
- package/docs/unsaved-Cc_mMbdm.js +10 -0
- package/docs/unsaved-DeP04L83.js +8 -0
- package/docs/upload-AImNeKVm.js +8 -0
- package/docs/upload-BIQxUfMy.js +8 -0
- package/docs/upload-nuZBVJjg.js +8 -0
- package/docs/user-competencies-8dMwEPL6.js +7 -0
- package/docs/user-competencies-Y57bDKtV.js +19 -0
- package/docs/user-progress-CUzNTpLo.js +10 -0
- package/docs/user-progress-DQUFGV7M.js +10 -0
- package/docs/validate-TiDv-LdA.js +16 -0
- package/docs/video-assignment-C-Eh-N2b.js +10 -0
- package/docs/video-assignment-DJhOt4CY.js +11 -0
- package/docs/view-submission-list-D56QhpGG.js +13 -0
- package/docs/view-submission-list-KS3OLMnE.js +15 -0
- package/docs/viewed-notviewed-CSNppbac.js +7 -0
- package/docs/virtual-classroom-Cxhu5Mw0.js +10 -0
- package/docs/virtual-classroom-De9_fVB7.js +6 -0
- package/docs/visibility-conditional-BbN-53aD.js +9 -0
- package/docs/visibility-hide-B2KKT0mx.js +7 -0
- package/docs/visibility-hide-Bctc7bkg.js +7 -0
- package/docs/visibility-show-BD2PP0kM.js +8 -0
- package/docs/visibility-show-BwU9PNHL.js +7 -0
- package/docs/volume-CYc0W77d.js +8 -0
- package/docs/volume-DrPpJaf1.js +7 -0
- package/docs/volume-muted-CK8EQ9dK.js +12 -0
- package/docs/volume-muted-D2mJNGq6.js +7 -0
- package/docs/widgets-BEcQiVkC.js +12 -0
- package/docs/wizard-D-phsxRW.js +11 -0
- package/docs/wizard-cZqtBjee.js +11 -0
- package/docs/zoom-in-Dpu97xmF.js +7 -0
- package/docs/zoom-out-Cu3SsLeV.js +7 -0
- package/docs-base/index.html +22 -0
- package/docs-base/nova-shared-repository.js +54 -0
- package/docs-base/package-info.js +26 -0
- package/index.js +21 -0
- package/package.json +59 -0
- package/packages/drivers/README.md +5 -0
- package/packages/drivers/docs/assets/anchor.js +350 -0
- package/packages/drivers/docs/assets/bass-addons.css +12 -0
- package/packages/drivers/docs/assets/bass.css +544 -0
- 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 +93 -0
- 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 +23 -0
- package/packages/drivers/docs/assets/github.css +123 -0
- package/packages/drivers/docs/assets/site.js +168 -0
- package/packages/drivers/docs/assets/split.css +15 -0
- package/packages/drivers/docs/assets/split.js +782 -0
- package/packages/drivers/docs/assets/style.css +147 -0
- package/packages/drivers/docs/index.html +6180 -0
- package/packages/drivers/index.js +10 -0
- package/packages/drivers/package.json +31 -0
- package/packages/drivers/src/aws/aws-base-driver.js +34 -0
- package/packages/drivers/src/aws/dynamodb.js +230 -0
- package/packages/drivers/src/aws/secrets-manager.js +52 -0
- package/packages/drivers/src/aws/sqs.js +140 -0
- package/packages/drivers/src/config.js +13 -0
- package/packages/drivers/src/http.js +162 -0
- package/packages/drivers/src/kraken-driver.js +28 -0
- package/packages/drivers/src/nova-driver.js +32 -0
- package/packages/drivers/src/oauth.js +145 -0
- package/packages/drivers/src/wave.js +83 -0
- package/packages/drivers/test/.eslintrc.yaml +27 -0
- package/packages/drivers/test/aws/dynamodb.test.js +119 -0
- package/packages/drivers/test/aws/secrets-manager.js +146 -0
- package/packages/drivers/test/http.test.js +118 -0
- package/packages/drivers/test/oauth.test.js +211 -0
- package/packages/drivers/test/wave.test.js +109 -0
- package/packages/nova-middleware/README.md +5 -0
- package/packages/nova-middleware/docs/assets/anchor.js +350 -0
- package/packages/nova-middleware/docs/assets/bass-addons.css +12 -0
- package/packages/nova-middleware/docs/assets/bass.css +544 -0
- 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 +93 -0
- 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 +23 -0
- package/packages/nova-middleware/docs/assets/github.css +123 -0
- package/packages/nova-middleware/docs/assets/site.js +168 -0
- package/packages/nova-middleware/docs/assets/split.css +15 -0
- package/packages/nova-middleware/docs/assets/split.js +782 -0
- package/packages/nova-middleware/docs/assets/style.css +147 -0
- package/packages/nova-middleware/docs/index.html +406 -0
- package/packages/nova-middleware/index.js +2 -0
- package/packages/nova-middleware/package.json +21 -0
- package/packages/nova-middleware/src/distributed-logging-middleware.js +36 -0
- package/packages/nova-middleware/src/oauth-middleware.js +63 -0
- package/packages/nova-middleware/test/.eslintrc.yaml +27 -0
- package/packages/nova-middleware/test/oauth-middleware.test.js +14 -0
- package/packages/nova-model/README.md +5 -0
- package/packages/nova-model/docs/assets/anchor.js +350 -0
- package/packages/nova-model/docs/assets/bass-addons.css +12 -0
- package/packages/nova-model/docs/assets/bass.css +544 -0
- 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 +93 -0
- 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 +23 -0
- package/packages/nova-model/docs/assets/github.css +123 -0
- package/packages/nova-model/docs/assets/site.js +168 -0
- package/packages/nova-model/docs/assets/split.css +15 -0
- package/packages/nova-model/docs/assets/split.js +782 -0
- package/packages/nova-model/docs/assets/style.css +147 -0
- package/packages/nova-model/docs/index.html +3244 -0
- package/packages/nova-model/index.js +6 -0
- package/packages/nova-model/package.json +19 -0
- package/packages/nova-model/src/model/api-token.js +27 -0
- package/packages/nova-model/src/model/models/nova-user.js +55 -0
- package/packages/nova-model/src/model/nova-model.js +184 -0
- package/packages/nova-model/src/model/nova-schema.js +154 -0
- package/packages/nova-model/src/repo/api-token.js +12 -0
- package/packages/nova-model/src/repo/nova-model-repo.js +203 -0
- package/packages/nova-model/test/.eslintrc.yaml +27 -0
- package/packages/nova-model/test/nova-model.test.js +123 -0
- package/packages/nova-utils/README.md +5 -0
- package/packages/nova-utils/docs/assets/anchor.js +350 -0
- package/packages/nova-utils/docs/assets/bass-addons.css +12 -0
- package/packages/nova-utils/docs/assets/bass.css +544 -0
- 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 +93 -0
- 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 +23 -0
- package/packages/nova-utils/docs/assets/github.css +123 -0
- package/packages/nova-utils/docs/assets/site.js +168 -0
- package/packages/nova-utils/docs/assets/split.css +15 -0
- package/packages/nova-utils/docs/assets/split.js +782 -0
- package/packages/nova-utils/docs/assets/style.css +147 -0
- package/packages/nova-utils/docs/index.html +986 -0
- package/packages/nova-utils/index.js +3 -0
- package/packages/nova-utils/package.json +19 -0
- package/packages/nova-utils/src/config.js +228 -0
- package/packages/nova-utils/src/logger.js +26 -0
- package/packages/nova-utils/src/tenant-utils.js +27 -0
- package/packages/nova-utils/test/config.test.js +250 -0
- package/packages/nova-utils/test/tenant-utiils.test.js +50 -0
- package/pnpm-workspace.yaml +2 -0
- package/rollup.config.js +13 -0
- package/scripts/.eslintrc.yaml +25 -0
- package/scripts/aggregate-docs.js +81 -0
- package/scripts/bump-version.js +26 -0
- package/scripts/create-index.js +30 -0
- package/scripts/create-library-template/README.md +5 -0
- package/scripts/create-library-template/package.json +19 -0
- package/scripts/create-library.js +62 -0
|
@@ -0,0 +1,118 @@
|
|
|
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
|
+
});
|
|
@@ -0,0 +1,211 @@
|
|
|
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
|
+
});
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { restore, stub } from 'sinon';
|
|
2
|
+
|
|
3
|
+
import { expect } from 'chai';
|
|
4
|
+
import { WaveDriver } from '../src/wave.js'; // Adjust the import path as necessary
|
|
5
|
+
|
|
6
|
+
describe('WaveDriver', () => {
|
|
7
|
+
let waveDriver;
|
|
8
|
+
let httpPostStub;
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
|
|
12
|
+
// Initialize WaveDriver with a fake configuration
|
|
13
|
+
waveDriver = new WaveDriver({
|
|
14
|
+
enabled: true,
|
|
15
|
+
baseUrl: 'https://wave.example.com',
|
|
16
|
+
secretName: 'wave-secret',
|
|
17
|
+
oauth : {
|
|
18
|
+
auth: {
|
|
19
|
+
tokenHost: 'https://token.host',
|
|
20
|
+
tokenPath: '/token',
|
|
21
|
+
},
|
|
22
|
+
client: {
|
|
23
|
+
id: 'fake-client-id',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
waveDriver.secretsManager = {
|
|
28
|
+
getSecret: stub().resolves('fake-api-key'),
|
|
29
|
+
};
|
|
30
|
+
stub(waveDriver, 'getHeaders').resolves({});
|
|
31
|
+
// Stub the HttpDriver's post method, which is inherited by WaveDriver
|
|
32
|
+
httpPostStub = stub(waveDriver, '_fetch').resolves({
|
|
33
|
+
status: 200,
|
|
34
|
+
json: async() => ({ success: true }),
|
|
35
|
+
text: async() => 'Success',
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
afterEach(() => {
|
|
40
|
+
// Restore all stubs
|
|
41
|
+
restore();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('should successfully upsert users when enabled', async() => {
|
|
45
|
+
const users = [{ tenantId: '1', name: 'User 1' }];
|
|
46
|
+
|
|
47
|
+
const result = await waveDriver.upsertUsers(users);
|
|
48
|
+
|
|
49
|
+
expect(httpPostStub.calledOnce).to.be.true;
|
|
50
|
+
expect(result).to.deep.equal(undefined);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('should not attempt to upsert users when disabled', async() => {
|
|
54
|
+
waveDriver.enabled = false; // Disable the driver
|
|
55
|
+
const users = [{ tenantId: '1', name: 'User 1' }];
|
|
56
|
+
|
|
57
|
+
let errMsg = '';
|
|
58
|
+
try {
|
|
59
|
+
await waveDriver.upsertUsers(users);
|
|
60
|
+
} catch (err) {
|
|
61
|
+
errMsg = err.message;
|
|
62
|
+
}
|
|
63
|
+
expect(httpPostStub.called).to.be.false;
|
|
64
|
+
expect(errMsg).to.equal('Failed to upsert users in Wave: Driver is disabled');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('should refuse to upsert users from multiple tenants', async() => {
|
|
68
|
+
const users = [
|
|
69
|
+
{ tenantId: '1', name: 'User 1' },
|
|
70
|
+
{ tenantId: '2', name: 'User 2' },
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
const result = await waveDriver.upsertUsers(users);
|
|
74
|
+
|
|
75
|
+
expect(httpPostStub.called).to.be.false;
|
|
76
|
+
expect(result).to.be.undefined;
|
|
77
|
+
});
|
|
78
|
+
// Test for network errors during upsert
|
|
79
|
+
it('should handle network errors gracefully', async() => {
|
|
80
|
+
httpPostStub.rejects(new Error('Network Error'));
|
|
81
|
+
const users = [{ tenantId: '1', name: 'User 1' }];
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
await waveDriver.upsertUsers(users);
|
|
85
|
+
throw new Error('Expected to throw an error for network issues');
|
|
86
|
+
} catch (error) {
|
|
87
|
+
expect(error.message).to.equal('Failed to upsert users in Wave: Network Error');
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// Test for unsuccessful response status
|
|
92
|
+
it('should log an error for unsuccessful upsert response', async() => {
|
|
93
|
+
httpPostStub.resolves({
|
|
94
|
+
status: 400,
|
|
95
|
+
json: async() => ({}),
|
|
96
|
+
text: async() => 'Bad Request',
|
|
97
|
+
});
|
|
98
|
+
const users = [{ tenantId: '1', name: 'User 1' }];
|
|
99
|
+
|
|
100
|
+
try {
|
|
101
|
+
await waveDriver.upsertUsers(users);
|
|
102
|
+
throw new Error('Expected to throw an error for unsuccessful response');
|
|
103
|
+
} catch (error) {
|
|
104
|
+
expect(error.message).to.include('Failed to upsert users in Wave');
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// More tests can be added here for different scenarios, such as handling errors from SecretsManager or the HTTP post method
|
|
109
|
+
});
|