diff --git a/.meteor/packages b/.meteor/packages index c866ba8..5346828 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -4,29 +4,27 @@ # 'meteor add' and 'meteor remove' will edit this file for you, # but you can also edit it by hand. -meteor-base@1.5.1 # Packages every Meteor app needs to have -mobile-experience@1.1.1 # Packages for a great mobile UX -mongo@1.16.10 # The database Meteor supports right now +meteor-base@1.5.2 # Packages every Meteor app needs to have +mobile-experience@1.1.2 # Packages for a great mobile UX +mongo@2.1.4 # The database Meteor supports right now blaze-html-templates # Compile .html files into Meteor Blaze views jquery # Wrapper package for npm-installed jquery -reactive-var@1.0.12 # Reactive variable for tracker -tracker@1.3.3 # Meteor's client-side reactive programming library +reactive-var@1.0.13 # Reactive variable for tracker +tracker@1.3.4 # Meteor's client-side reactive programming library -standard-minifier-css@1.9.2 # CSS minifier run for production mode -standard-minifier-js@2.8.1 # JS minifier run for production mode -es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers -ecmascript@0.16.8 # Enable ECMAScript2015+ syntax in app code -typescript@4.9.5 # Enable TypeScript syntax in .ts and .tsx modules -shell-server@0.5.0 # Server-side component of the `meteor shell` command +standard-minifier-css@1.9.3 # CSS minifier run for production mode +standard-minifier-js@3.1.1 # JS minifier run for production mode +es5-shim@4.8.1 # ECMAScript 5 compatibility for older browsers +ecmascript@0.16.13 # Enable ECMAScript2015+ syntax in app code +typescript@5.6.6 # Enable TypeScript syntax in .ts and .tsx modules +shell-server@0.6.2 # Server-side component of the `meteor shell` command -hot-module-replacement@0.5.3 # Update code in development without reloading the page +hot-module-replacement@0.5.4 # Update code in development without reloading the page blaze-hot # Update files using Blaze's API with HMR -alanning:roles@2.2.0 -email@2.2.6 -session@1.2.1 - -raix:handlebar-helpers -kadira:flow-router -kadira:blaze-layout -accounts-password@2.4.0 +roles@1.0.1 +session@1.2.2 +email@3.1.2 +arianjahiri:meteor-handlebars-helpers +ostrio:flow-router-extra +accounts-password@3.2.1 diff --git a/.meteor/release b/.meteor/release index 5152abe..4876d6f 100644 --- a/.meteor/release +++ b/.meteor/release @@ -1 +1 @@ -METEOR@2.16 +METEOR@3.3.2 diff --git a/.meteor/versions b/.meteor/versions index 6007c47..9d06cad 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,94 +1,94 @@ -accounts-base@2.2.11 -accounts-password@2.4.0 -alanning:roles@2.2.0 -allow-deny@1.1.1 -autoupdate@1.8.0 -babel-compiler@7.10.5 -babel-runtime@1.5.1 -base64@1.0.12 -binary-heap@1.0.11 -blaze@2.9.0 -blaze-hot@1.1.2 -blaze-html-templates@1.2.1 -blaze-tools@1.1.4 -boilerplate-generator@1.7.2 -caching-compiler@1.2.2 -caching-html-compiler@1.2.2 -callback-hook@1.5.1 -check@1.4.1 -ddp@1.4.1 -ddp-client@2.6.2 -ddp-common@1.4.1 -ddp-rate-limiter@1.2.1 -ddp-server@2.7.1 -deps@1.0.12 -diff-sequence@1.1.2 -dynamic-import@0.7.3 -ecmascript@0.16.8 -ecmascript-runtime@0.8.1 -ecmascript-runtime-client@0.12.1 -ecmascript-runtime-server@0.11.0 -ejson@1.1.3 -email@2.2.6 -es5-shim@4.8.0 -fetch@0.1.4 -geojson-utils@1.0.11 -hot-code-push@1.0.4 -hot-module-replacement@0.5.3 -html-tools@1.1.4 -htmljs@1.2.1 -id-map@1.1.1 -inter-process-messaging@0.1.1 -jquery@3.0.0 -kadira:blaze-layout@2.0.1 -kadira:flow-router@2.12.1 -launch-screen@2.0.0 -localstorage@1.2.0 -logging@1.3.4 -meteor@1.11.5 -meteor-base@1.5.1 -minifier-css@1.6.4 -minifier-js@2.8.0 -minimongo@1.9.4 -mobile-experience@1.1.1 -mobile-status-bar@1.1.0 -modern-browsers@0.1.10 -modules@0.20.0 -modules-runtime@0.13.1 -modules-runtime-hot@0.14.2 -mongo@1.16.10 -mongo-decimal@0.1.3 -mongo-dev-server@1.1.0 -mongo-id@1.0.8 -npm-mongo@4.17.2 -observe-sequence@1.0.22 -ordered-dict@1.1.0 -promise@0.12.2 -raix:handlebar-helpers@0.2.5 -random@1.2.1 -rate-limit@1.1.1 -react-fast-refresh@0.2.8 -reactive-dict@1.3.1 -reactive-var@1.0.12 -reload@1.3.1 -retry@1.1.0 -routepolicy@1.1.1 -session@1.2.1 -sha@1.0.9 -shell-server@0.5.0 -socket-stream-client@0.5.2 -spacebars@1.6.0 -spacebars-compiler@1.3.2 -standard-minifier-css@1.9.2 -standard-minifier-js@2.8.1 -templating@1.4.3 -templating-compiler@1.4.2 -templating-runtime@1.6.4 -templating-tools@1.2.3 -tracker@1.3.3 -typescript@4.9.5 -ui@1.0.13 -underscore@1.6.2 -url@1.3.2 -webapp@1.13.8 -webapp-hashing@1.1.1 +accounts-base@3.1.2 +accounts-password@3.2.1 +allow-deny@2.1.0 +arianjahiri:meteor-handlebars-helpers@0.0.1 +autoupdate@2.0.1 +babel-compiler@7.12.2 +babel-runtime@1.5.2 +base64@1.0.13 +binary-heap@1.0.12 +blaze@3.0.2 +blaze-hot@2.0.0 +blaze-html-templates@3.0.0 +blaze-tools@2.0.0 +boilerplate-generator@2.0.2 +caching-compiler@2.0.1 +caching-html-compiler@2.0.0 +callback-hook@1.6.1 +check@1.4.4 +core-runtime@1.0.0 +ddp@1.4.2 +ddp-client@3.1.1 +ddp-common@1.4.4 +ddp-rate-limiter@1.2.2 +ddp-server@3.1.2 +deps@1.0.5-pre.1 +diff-sequence@1.1.3 +dynamic-import@0.7.4 +ecmascript@0.16.13 +ecmascript-runtime@0.8.3 +ecmascript-runtime-client@0.12.3 +ecmascript-runtime-server@0.11.1 +ejson@1.1.5 +email@3.1.2 +es5-shim@4.8.1 +facts-base@1.0.2 +fetch@0.1.6 +geojson-utils@1.0.12 +hot-code-push@1.0.5 +hot-module-replacement@0.5.4 +html-tools@2.0.0 +htmljs@2.0.1 +id-map@1.2.0 +inter-process-messaging@0.1.2 +jquery@3.0.2 +launch-screen@2.0.1 +localstorage@1.2.1 +logging@1.3.6 +meteor@2.1.1 +meteor-base@1.5.2 +minifier-css@2.0.1 +minifier-js@3.0.4 +minimongo@2.0.4 +mobile-experience@1.1.2 +mobile-status-bar@1.1.1 +modern-browsers@0.2.3 +modules@0.20.3 +modules-runtime@0.13.2 +modules-runtime-hot@0.14.3 +mongo@2.1.4 +mongo-decimal@0.2.0 +mongo-dev-server@1.1.1 +mongo-id@1.0.9 +npm-mongo@6.16.1 +observe-sequence@2.0.0 +ordered-dict@1.2.0 +ostrio:flow-router-extra@3.12.0 +promise@1.0.0 +random@1.2.2 +rate-limit@1.1.2 +react-fast-refresh@0.2.9 +reactive-dict@1.3.2 +reactive-var@1.0.13 +reload@1.3.2 +retry@1.1.1 +roles@1.0.1 +routepolicy@1.1.2 +session@1.2.2 +sha@1.0.10 +shell-server@0.6.2 +socket-stream-client@0.6.1 +spacebars@2.0.0 +spacebars-compiler@2.0.0 +standard-minifier-css@1.9.3 +standard-minifier-js@3.1.1 +templating@1.4.4 +templating-compiler@2.0.0 +templating-runtime@2.0.1 +templating-tools@2.0.0 +tracker@1.3.4 +typescript@5.6.6 +underscore@1.6.4 +url@1.3.5 +webapp@2.0.7 +webapp-hashing@1.1.2 diff --git a/Dockerfile b/Dockerfile index 6cf4fd2..5064534 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,4 @@ -FROM alpine:3.17 - -ENV NODE_VERSION=14.21.4 -ENV NODE_URL="https://static.meteor.com/dev-bundle-node-os/unofficial-builds/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" -ENV DIR_NODE=/usr/local +FROM node:22.16.0-alpine RUN apk add --no-cache \ libstdc++ \ @@ -20,13 +16,6 @@ RUN apk add --no-cache \ ccache \ xz -RUN echo $NODE_URL -RUN curl -sSL "$NODE_URL" | tar -xz -C /usr/local/ && mv $DIR_NODE/node-v${NODE_VERSION}-linux-x64 $DIR_NODE/v$NODE_VERSION - -# add node and npm to path so the commands are available -ENV NODE_PATH $DIR_NODE/v$NODE_VERSION/lib/node_modules -ENV PATH $DIR_NODE/v$NODE_VERSION/bin:$PATH - # confirm installation RUN node -v RUN npm -v @@ -38,11 +27,11 @@ ENV MONGO_URL=mongodb://mongo:27017/get_my\ RUN mkdir -p /usr/src/get_my WORKDIR /usr/src/get_my -COPY bundle/ /usr/src/get_my/ +COPY ../bundle/ /usr/src/get_my/ RUN cd /usr/src/get_my/programs/server/ \ && npm install EXPOSE 3000 -CMD [ "node", "main.js" ] +CMD [ "node", "main.js" ] \ No newline at end of file diff --git a/README.md b/README.md index 6b3d1b8..8590db0 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,8 @@ The documentation is being done in the amazing open source software [Bookstack]( If you'd like to contribute by writing some documentation, please contact me me with an, and I'll see about getting you access to contribute. +I have a video introduction on my YouTube channel here as well: https://youtu.be/hbGNTzU24hI?si=K5mcb8FuzSWNCueB + ## Keeping it Simple - Registration / Login System built in - 1st user to register is the system admin by default. diff --git a/client/Accounts/Login/login.js b/client/Accounts/Login/login.js index 7f3c38a..f436e4b 100644 --- a/client/Accounts/Login/login.js +++ b/client/Accounts/Login/login.js @@ -1,4 +1,5 @@ import { SysConfig } from '../../../imports/api/systemConfig.js'; +import { FlowRouter } from 'meteor/ostrio:flow-router-extra'; Template.login.onCreated(function() { this.subscribe("SystemConfig"); @@ -25,7 +26,7 @@ Template.login.helpers({ Template.login.events({ 'click #logmein' (event) { event.preventDefault(); - console.log("clicked login"); + // console.log("clicked login"); let email = $("#email").val(); let pass = $("#password").val(); diff --git a/client/Accounts/Login/reg.js b/client/Accounts/Login/reg.js index c2ddbe2..2a46225 100644 --- a/client/Accounts/Login/reg.js +++ b/client/Accounts/Login/reg.js @@ -1,4 +1,5 @@ import { SysConfig } from "../../../imports/api/systemConfig.js"; +import { FlowRouter } from 'meteor/ostrio:flow-router-extra'; Template.reg.onCreated(function() { this.subscribe("SystemConfig"); @@ -29,12 +30,16 @@ Template.reg.helpers({ return Session.get("missingReq"); }, allowReg: function() { - let conf = SysConfig.findOne(); - if (typeof conf != 'undefined') { - return conf.allowReg; - } else { - return true + const sysConf = async() => { + let conf = await SysConfig.findOneAsync(); + if (!conf) { + return true; + } else { + return conf.allowReg; + } } + let sysConfig = sysConf(); + return sysConfig; } }); @@ -83,15 +88,17 @@ Template.reg.events({ }); let userId = Meteor.userId(); - console.log("User ID: " + userId); - Meteor.call("addToRole", "user", function(err, result) { - if (err) { - console.log(" ERROR: ROLES - Error adding user to role: " + err); + // console.log("User ID: " + userId); + const addRole = async() => { + let result = await Meteor.callAsync("addToRole", "user"); + if (!result) { + console.log(" ERROR: ROLES - Error adding user to role: "); } else { // console.log("User should be added to role - teacher."); FlowRouter.go('/dashboard'); } - }); + } + addRole(); } } }, diff --git a/client/Accounts/UserMgmt/userInfoModal.html b/client/Accounts/UserMgmt/userInfoModal.html index e25fda3..156a66a 100644 --- a/client/Accounts/UserMgmt/userInfoModal.html +++ b/client/Accounts/UserMgmt/userInfoModal.html @@ -15,7 +15,7 @@ {{#if $eq passMatch false}}

Passwords do not match!

{{/if}} -
+
-
+

+
+

+ +

+
diff --git a/client/AdminMgmt/ListMgmt/listMgmtForm.js b/client/AdminMgmt/ListMgmt/listMgmtForm.js index ece9583..75a01c3 100644 --- a/client/AdminMgmt/ListMgmt/listMgmtForm.js +++ b/client/AdminMgmt/ListMgmt/listMgmtForm.js @@ -7,6 +7,7 @@ Template.listMgmtForm.onCreated(function() { Template.listMgmtForm.onRendered(function() { Session.set("listNameMiss", false); Session.set("listNameEditMode", false); + Session.set("showCompletedLists", false); }); Template.listMgmtForm.helpers({ @@ -28,15 +29,7 @@ Template.listMgmtForm.events({ Session.set("listNameMiss", true); return; } else { - Meteor.call('add.list', listName, shared, function(err, result) { - if (err) { - // console.log(" ERROR adding list name: " + err); - } else { - // console.log(" SUCCESS adding list name."); - $("#listNameInp").val(""); - $("#isShared").prop("checked", false); - } - }); + addList(listName, shared); } }, 'click .renameListMgmt' (event) { @@ -49,16 +42,7 @@ Template.listMgmtForm.events({ Session.set("listNameMiss", true); return; } else { - Meteor.call('edit.list', listId, listName, shared, function(err, result) { - if (err) { - // console.log(" ERROR editing list name: " + err); - } else { - // console.log(" SUCCESS editing list name."); - $("#listNameInp").val(""); - $("#isShared").prop("checked", false); - Session.set("listNameEditMode", false); - } - }); + editList(listId, listName, shared); } }, 'submit .listAdd' (event) { @@ -73,27 +57,34 @@ Template.listMgmtForm.events({ return; } else { if (editMode == false) { - Meteor.call('add.list', listName, shared, function(err, result) { - if (err) { - // console.log(" ERROR adding list name: " + err); - } else { - // console.log(" SUCCESS adding list name."); - $("#listNameInp").val(""); - $("#isShared").prop("checked", false); - } - }); + addList(listName, shared); } else { - Meteor.call('edit.list', listId, listName, shared, function(err, result) { - if (err) { - // console.log(" ERROR editing list name: " + err); - } else { - // console.log(" SUCCESS editing list name."); - $("#listNameInp").val(""); - $("#isShared").prop("checked", false); - Session.set("listNameEditMode", false); - } - }); + editList(listId, listName, shared); } } + }, + 'change #isCompleted' (event) { + Session.set("showCompletedLists", true); + }, +}); + +const addList = async(listName, shared) => { + let result = await Meteor.callAsync('add.list', listName, shared); + if (!result) { + console.log("Nothing returned from method call add.list"); + } else { + $("#listNameInp").val(""); + $("#isShared").prop("checked", false); } -}); \ No newline at end of file +} + +const editList = async(listId, listName, shared) => { + let result = await Meteor.callAsync('edit.list', listId, listName, shared); + if (!result) { + // console.log("Nothing returned from method call edit.list"); + } else { + $("#listNameInp").val(""); + $("#isShared").prop("checked", false); + Session.set("listNameEditMode", false); + } +} \ No newline at end of file diff --git a/client/AdminMgmt/ListMgmt/listMgmtTbl.html b/client/AdminMgmt/ListMgmt/listMgmtTbl.html index 7011beb..a3d9577 100644 --- a/client/AdminMgmt/ListMgmt/listMgmtTbl.html +++ b/client/AdminMgmt/ListMgmt/listMgmtTbl.html @@ -8,6 +8,7 @@ delete edit check + refresh {{/each}} @@ -21,6 +22,9 @@ +
{{> deleteConfirmationModal}} \ No newline at end of file diff --git a/client/AdminMgmt/ListMgmt/listMgmtTbl.js b/client/AdminMgmt/ListMgmt/listMgmtTbl.js index d737894..256f7d5 100644 --- a/client/AdminMgmt/ListMgmt/listMgmtTbl.js +++ b/client/AdminMgmt/ListMgmt/listMgmtTbl.js @@ -2,7 +2,7 @@ import { Lists } from '../../../imports/api/lists.js'; import { M } from '../../lib/assets/materialize.js'; Template.listMgmtTbl.onCreated(function() { - this.subscribe("myLists"); + this.subscribe("allLists"); }); Template.listMgmtTbl.onRendered(function() { @@ -14,7 +14,13 @@ Template.listMgmtTbl.onRendered(function() { Template.listMgmtTbl.helpers({ lists: function() { - return Lists.find({}); + let showComplete = Session.get("showCompletedLists"); + // console.log("Show Complete Lists: " + showComplete); + if (showComplete) { + return Lists.find({}); + } else { + return Lists.find({ listComplete: false }); + } } }); @@ -29,9 +35,14 @@ Template.listMgmtTbl.events({ }, 'click .editListName' (event) { event.preventDefault(); - let listInfo = Lists.findOne({ _id: this._id }); - let listName = listInfo.listName; - let listShared = listInfo.listShared; + const lInfo = async() => { + let listInfo = await Lists.findOneAsync({ _id: this._id }); + return listInfo; + } + let listData = lInfo(); + + let listName = listData.listName; + let listShared = listData.listShared; $("#listNameInp").val(listName); if (listShared == true) { $("#isShared").prop("checked", true); @@ -44,12 +55,27 @@ Template.listMgmtTbl.events({ 'click .markListComplete' (event) { event.preventDefault(); let listId = this._id; - Meteor.call('mark.complete', listId, function(err, result) { - if (err) { - // console.log(" ERROR marking complete: " + err); + const markComp = async() => { + let result = await Meteor.callAsync('mark.complete', listId); + if (!result) { + console.log(" ERROR marking complete."); } else { // console.log(" SUCCESS marking complete."); } - }); + } + markComp(); + }, + 'click .markListNotComplete' (event) { + event.preventDefault(); + let listId = this._id; + const markInc = async() => { + let result = await Meteor.callAsync('mark.incomplete', listId); + if (!result) { + console.log("Issue marking list incomplete."); + } else { + // console.log("List marked incomplete."); + } + } + markInc(); } }); \ No newline at end of file diff --git a/client/AdminMgmt/MgmtPage/mgmtPage.js b/client/AdminMgmt/MgmtPage/mgmtPage.js index 39c831a..6b16295 100644 --- a/client/AdminMgmt/MgmtPage/mgmtPage.js +++ b/client/AdminMgmt/MgmtPage/mgmtPage.js @@ -1,3 +1,5 @@ +import { FlowRouter } from 'meteor/ostrio:flow-router-extra'; + Template.mgmtPage.onCreated(function() { }); diff --git a/client/AdminMgmt/ProductMgmt/prodMgmtForm.html b/client/AdminMgmt/ProductMgmt/prodMgmtForm.html index 357b19c..7ebd800 100644 --- a/client/AdminMgmt/ProductMgmt/prodMgmtForm.html +++ b/client/AdminMgmt/ProductMgmt/prodMgmtForm.html @@ -2,14 +2,22 @@

Product Management

{{#if Template.subscriptionsReady}}
-
-

- -

-
+
+

+ +

+
+
+

+ +

+
diff --git a/client/AdminMgmt/ProductMgmt/prodMgmtForm.js b/client/AdminMgmt/ProductMgmt/prodMgmtForm.js index d133fd8..f0c2a2d 100644 --- a/client/AdminMgmt/ProductMgmt/prodMgmtForm.js +++ b/client/AdminMgmt/ProductMgmt/prodMgmtForm.js @@ -35,46 +35,65 @@ Template.prodMgmtForm.events({ 'click .saveProdMgmt, click .editProdMgmt' (event) { let name = $("#prodName").val(); let store = $("#prodStore").val(); - let prodId = Session.get("prodEditId"); let prodEditMode = Session.get("prodEditMode"); - if (store == null) { store = ""; } - if (name == "" || name == null) { Session.set("prodNameRed", true); return; } else { if (prodEditMode == true) { - Meteor.call('edit.product', prodId, name, store, function(err, result) { - if (err) { - console.log(" ERROR: can't add product: " + err); - } else { - $("#prodName").val(""); - showSnackbar("Successfully Edited Product!", "green"); - } - }); + editProd(prodId, name, store); } else { - Meteor.call('add.product', name, store, function(err, result) { - if (err) { - console.log(" ERROR: can't add product: " + err); - } else { - $("#prodName").val(""); - showSnackbar("Product Added Succssfully!", "green"); - } - }); + newProd(name, store); } } }, 'click #showNoStoreSet' (event) { let noStoreSet = $("#showNoStoreSet").prop('checked'); - console.log("Clicked: " + noStoreSet); + // console.log("Clicked: " + noStoreSet); if (noStoreSet == true) { Session.set("noStoreSet", true); } else { Session.set("noStoreSet", false); } - } + }, + 'click #showNoList' (event) { + let notUsedInList = $("#showNoList").prop('checked'); + if (notUsedInList == true) { + Session.set("noListUsed", true); + } else { + Session.set("noListUsed", false); + } + }, + 'submit .prodInputForm' (event) { + + }, }); + +const newProd = async(name, store) => { + let result = await Meteor.callAsync('add.product', name, store); + try { + if (!result) { + // console.log("No result when trying to add a new product."); + showSnackbar("Unable to add new product."); + } else { + $("#prodName").val(""); + showSnackbar("New Product Added!", "green"); + } + } catch(error) { + console.log(" ERROR - couldn't add product: " + error); + } +} + +const editProd = async(prodId, name, store) => { + let result = await Meteor.callAsync('edit.product', prodId, name, store); + if (!result) { + console.log(" ERROR: can't add product: " + err); + } else { + $("#prodName").val(""); + showSnackbar("Successfully Edited Product!", "green"); + } +} \ No newline at end of file diff --git a/client/AdminMgmt/ProductMgmt/prodMgmtTbl.js b/client/AdminMgmt/ProductMgmt/prodMgmtTbl.js index 5f9d817..67b3e12 100644 --- a/client/AdminMgmt/ProductMgmt/prodMgmtTbl.js +++ b/client/AdminMgmt/ProductMgmt/prodMgmtTbl.js @@ -1,14 +1,17 @@ import { Products } from '../../../imports/api/products.js'; +import { ListItems } from '../../../imports/api/listItems.js'; import { M } from '../../lib/assets/materialize.js'; Template.prodMgmtTbl.onCreated(function() { this.subscribe("myProducts"); + this.subscribe("allListItems"); }); Template.prodMgmtTbl.onRendered(function() { Session.set("searchProds", false); Session.set("searchStore", false); Session.set("noStoreSet", false); + Session.set("noListUsed", false); }); Template.prodMgmtTbl.helpers({ @@ -16,6 +19,7 @@ Template.prodMgmtTbl.helpers({ let searchProd = Session.get("searchProds"); let searchStore = Session.get("searchStore"); let noStoreSet = Session.get("noStoreSet"); + let noListUsed = Session.get("noListUsed"); if (searchProd == true) { let searchVal = Session.get("searchVal"); @@ -33,6 +37,17 @@ Template.prodMgmtTbl.helpers({ } } else if (noStoreSet == true) { return Products.find({ prodStore: '' }, { sort: { prodName: 1 }}); + } else if (noListUsed == true) { + let i; + let idList = []; + let idsInLists = ListItems.find({}).fetch(); + for (i=0; i < idsInLists.length; i++) { + idList.push(idsInLists[i].prodId); + } + if (i > idsInLists.length - 1) { + let noProdsNot = Products.find({ _id: { $nin: idList }}).count(); + return Products.find({ _id: { $nin: idList }}, { sort: { prodName: 1 }}); + } } else { return Products.find({}, { sort: { prodName: 1 }}); } @@ -57,10 +72,17 @@ Template.prodMgmtTbl.events({ event.preventDefault(); Session.set("prodEditMode", true); Session.set("prodEditId", this._id); - let prodInfo = Products.findOne({ _id: this._id }); - $("#prodName").val(prodInfo.prodName); - $("#prodStore").val(prodInfo.prodStore); - // $('select').formSelect(); + const getProds = async() => { + let prodInfo = await Products.findOneAsync({ _id: this._id }); + if (!prodInfo) { + // console.log("No Product Returned."); + } else { + $("#prodName").val(prodInfo.prodName); + $("#prodStore").val(prodInfo.prodStore); + } + } + getProds(); + }, 'click #filterProds' (event) { event.preventDefault(); diff --git a/client/AdminMgmt/StoreMgmt/storeMgmtForm.js b/client/AdminMgmt/StoreMgmt/storeMgmtForm.js index 642c921..07da897 100644 --- a/client/AdminMgmt/StoreMgmt/storeMgmtForm.js +++ b/client/AdminMgmt/StoreMgmt/storeMgmtForm.js @@ -23,14 +23,7 @@ Template.storeMgmtForm.events({ Session.set("borderRed", true); return; } else { - Meteor.call("add.store", storeName, function(err, result) { - if (err) { - console.log("ERROR: Store add failed: " + err); - } else { - $("#storeName").val(""); - showSnackbar("Store Added Successfully!", "green"); - } - }); + addStore(storeName); } }, 'click .cancelStoreMgmt' (event) { @@ -38,51 +31,51 @@ Template.storeMgmtForm.events({ $("#storeName").val(""); Session.set("editModeStore", false); }, - // 'submit #storeForm' (event) { - // event.preventDefault(); - // let editMode = Session.get("editModeStore"); - // let storeName = $("#storeName").val(); - // if (storeName == "" || storeName == null) { - // Session.set("borderRed", true); - // return; - // } else { - // if (editMode == false) { - // Meteor.call("add.store", storeName, function(err, result) { - // if (err) { - // console.log("ERROR: Store add failed: " + err); - // } else { - // $("#storeName").val(""); - // } - // }); - // } else { - // let storeId = Session.get("storeIdEdit"); - // Meteor.call("edit.store", storeId, storeName, function(err, result) { - // if (err) { - // console.log("ERROR: Store add failed: " + err); - // } else { - // $("#storeName").val(""); - // Session.set("editModeStore", false); - // } - // }); - // } - // } - // }, + 'submit #storeForm' (event) { + event.preventDefault(); + let editMode = Session.get("editModeStore"); + let storeName = $("#storeName").val(); + if (storeName == "" || storeName == null) { + Session.set("borderRed", true); + return; + } else { + if (editMode == false) { + addStore(storeName); + } else { + let storeId = Session.get("storeIdEdit"); + editStore(storeId, storeName); + } + } + }, 'click .editStoreMgmt' (event) { let storeName = $("#storeName").val(); let storeId = Session.get("storeIdEdit"); if (storeName == "" || storeName == null) { Session.set("borderRed", true); return; - } else { - Meteor.call("edit.store", storeId, storeName, function(err, result) { - if (err) { - console.log("ERROR: Store add failed: " + err); - } else { - $("#storeName").val(""); - Session.set("editModeStore", false); - showSnackbar("Store Updated Successfully!", "green"); - } - }); + } else { + editStore(storeId, storeName); } } -}); \ No newline at end of file +}); + +const addStore = async(storeName) => { + let result = await Meteor.callAsync("add.store", storeName); + if (!result) { + // console.log("ERROR: Store add failed."); + } else { + $("#storeName").val(""); + showSnackbar("Store Added Successfully!", "green"); + } +} + +const editStore = async(storeId, storeName) => { + let result = await Meteor.callAsync("edit.store", storeId, storeName); + if (!result) { + // console.log("ERROR: Store add failed: " + err); + } else { + $("#storeName").val(""); + Session.set("editModeStore", false); + showSnackbar("Store Updated Successfully!", "green"); + } +} \ No newline at end of file diff --git a/client/AdminMgmt/SystemAdmin/systemAdmin.js b/client/AdminMgmt/SystemAdmin/systemAdmin.js index 80b7ffd..2e52c4e 100644 --- a/client/AdminMgmt/SystemAdmin/systemAdmin.js +++ b/client/AdminMgmt/SystemAdmin/systemAdmin.js @@ -14,7 +14,7 @@ Template.systemAdmin.onRendered(function() { $("#allAdmReg").prop('checked', curr.SysAdminReg); $("#recvUpdateMsgs").prop('checked', curr.allowUpdates); } else { - console.log(" ---- unable to find current system configuration."); + // console.log(" ---- unable to find current system configuration."); } }); @@ -27,34 +27,34 @@ Template.systemAdmin.onRendered(function() { }); Template.systemAdmin.helpers({ - currConfigs: function() { - - }, + }); Template.systemAdmin.events({ 'change #allowGenReg, change #allowAdmReg' (evnnt) { let genReg = $("#allowGenReg").prop('checked'); let admReg = $("#allowAdmReg").prop('checked'); - // console.log("General Reg set to: " + genReg); - Meteor.call("add.noSysAdminReg", admReg, genReg, function(err, result) { - if (err) { - // console.log(" ERROR updating permission to allow general registration: " + err); - // showSnackbar("Registration Permission Change Failed.", "red"); + const addNoSysReg = async() => { + let result = await Meteor.callAsync("add.noSysAdminReg", admReg, genReg); + if (!result) { + showSnackbar("Registration Permission Change Failed.", "red"); } else { - // console.log(" Successfully updated permission to allow general registration."); showSnackbar("Registration Permission Successfully Changed.", "green") } - }); + } + addNoSysReg(); }, 'change #recvUpdateMsgs' (event) { let updSet = $("#recvUpdateMsgs").prop('checked'); - Meteor.call('allow.updateInfo', updSet, function(err, result) { - if (err) { - console.log(" ERROR changing update setting: " + err); + const allowUpdateInfo = async() => { + let result = await Meteor.callAsync('allow.updateInfo', updSet); + if (!result) { + // console.log(" ERROR changing update setting."); + showSnackbar("Update Setting Change Failed.", "red"); } else { showSnackbar("Update Setting Changed Successfully!", "green"); } - }); + } + allowUpdateInfo(); }, }); diff --git a/client/AdminMgmt/Tasks/taskForm.html b/client/AdminMgmt/Tasks/taskForm.html index 596451c..dc520fb 100644 --- a/client/AdminMgmt/Tasks/taskForm.html +++ b/client/AdminMgmt/Tasks/taskForm.html @@ -3,7 +3,7 @@
-
+
-
+
diff --git a/client/AdminMgmt/Tasks/taskForm.js b/client/AdminMgmt/Tasks/taskForm.js index 8dd95d3..2c5f42a 100644 --- a/client/AdminMgmt/Tasks/taskForm.js +++ b/client/AdminMgmt/Tasks/taskForm.js @@ -50,7 +50,7 @@ Template.taskForm.events({ event.preventDefault(); let elemcc = document.getElementById('taskName'); let taskName = M.Chips.getInstance(elemcc).chipsData; - console.log(taskName); + // console.log(taskName); }, 'change #taskDate' (event) { let taskDate = $("#taskDate").val(); @@ -69,7 +69,6 @@ Template.taskForm.events({ let taskDateErr = false; let userInfo; let actDate = []; - // console.dir(taskNameArr); if (taskNameArr == null || taskNameArr == []) { taskNameErr = true; @@ -92,17 +91,19 @@ Template.taskForm.events({ } if (taskUserErr == false && taskDateErr == false && taskNameErr == false) { - Meteor.call("add.task", taskNameArr, userInfo[0], userInfo[1], taskDateArr, actDate, function(err, result) { - if (err) { - console.log(" ERROR adding the new task: " + err); + const addTask = async() => { + let result = await Meteor.callAsync("add.task", taskNameArr, userInfo[0], userInfo[1], taskDateArr, actDate); + if (!result) { + // console.log(" ERROR adding the new task."); } else { - console.log(" SUCCESS adding the new task."); + // console.log(" SUCCESS adding the new task."); Session.set("taskDateArr", []); $("#taskDate").val(""); $("#taskUser").val(""); $('select').formSelect(); } - }); + } + addTask(); } else { showSnackbar("ERROR: Missing Required Fields!", "red"); } @@ -113,7 +114,6 @@ Template.taskForm.events({ Session.set("hideCompletedTasks", true); } else { Session.set("hideCompletedTasks", false); - } - + } } }); \ No newline at end of file diff --git a/client/AdminMgmt/Tasks/taskTbl.js b/client/AdminMgmt/Tasks/taskTbl.js index f5a8973..dfb41eb 100644 --- a/client/AdminMgmt/Tasks/taskTbl.js +++ b/client/AdminMgmt/Tasks/taskTbl.js @@ -43,13 +43,15 @@ Template.taskTbl.events({ 'click .markTaskComplete' (event) { event.preventDefault(); let taskId = this._id; - Meteor.call("markTask.complete", taskId, function(err, result) { - if (err) { - console.log(" ERROR marking task completeL " + err); + const markComp = async() => { + let result = await Meteor.callAsync("markTask.complete", taskId); + if (!result) { + // console.log(" ERROR marking task completeL " + err); showSnackbar("ERROR Marking Task Complete!", "red"); } else { showSnackbar("Successfully Marked Task Complete!", "green"); } - }); + } + markComp(); }, }); \ No newline at end of file diff --git a/client/Dashboard/dashboard.html b/client/Dashboard/dashboard.html index 0bb3c46..3ab5ff3 100644 --- a/client/Dashboard/dashboard.html +++ b/client/Dashboard/dashboard.html @@ -2,12 +2,13 @@

My Dashboard

{{#if $eq currConfig.allowUpdates true}} - {{#if updatesExist}} + {{#if $eq updatesExist true}}
-
-
-
Update Available
-
+
    +
  • +
    Update Available
    +
    +
    {{#each updates}}
    @@ -33,8 +34,9 @@
    {{/each}}
    -
    -
    +
    +
  • +
{{/if}} {{/if}} diff --git a/client/Dashboard/dashboard.js b/client/Dashboard/dashboard.js index 68e0d7f..6489fc0 100644 --- a/client/Dashboard/dashboard.js +++ b/client/Dashboard/dashboard.js @@ -7,6 +7,8 @@ import moment from 'moment'; import { TaskItems } from "../../imports/api/tasks"; import { UpdateInfo } from '../../imports/api/updateInfo.js'; import { SysConfig } from '../../imports/api/systemConfig.js'; +import { FlowRouter } from 'meteor/ostrio:flow-router-extra'; +import { M } from '../lib/assets/materialize.js'; Template.dashboard.onCreated(function() { this.subscribe("userList"); @@ -23,7 +25,10 @@ Template.dashboard.onCreated(function() { }); Template.dashboard.onRendered(function() { - + setTimeout(function() { + var elems = document.querySelectorAll('.collapsible'); + var instances = M.Collapsible.init(elems, {}); + }, 200); }); Template.dashboard.helpers({ @@ -61,18 +66,47 @@ Template.dashboard.helpers({ }, updates: function() { let updateAvail = UpdateInfo.find({}); - return updateAvail; - }, - updatesExist: function() { - let updateExists = UpdateInfo.find({ viewed: false }).fetch(); - if (updateExists.length > 0) { - return true; - } else { - return false; + try { + if (!updateAvail) { + // console.log("No update info found."); + return false; + } else { + // console.dir(updateAvail); + return updateAvail; + } + } catch(error) { + console.log(" ERROR trying to grab update info: " + error); } }, + updatesExist: function() { + const ifUpdate = async() => { + let updateExists = await UpdateInfo.findOneAsync({ viewed: false }); + if (!updateExists) { + // console.log("Update doesn't exist as false."); + return false; + } else { + // console.log("Update found with false."); + return true; + } + } + let updateAvail = ifUpdate(); + return updateAvail; + }, currConfig: function() { - return SysConfig.findOne({}); + const getSys = async() => { + let currSys = SysConfig.findOneAsync({}); + try { + if (!currSys) { + // console.log("No System Config found.") + } else { + return currSys; + } + } catch(error) { + console.log(" ERROR trying to fetch current system config: " + error); + } + } + let currConf = getSys(); + return currConf; }, descriptionSinHTML: function() { let desc = this.description; @@ -141,12 +175,19 @@ Template.dashboard.events({ 'click .readLink' (event) { let eventId = event.currentTarget.id; - Meteor.call('markUpdate.read', eventId, function(err, result) { - if (err) { - console.log(" ERROR marking update as 'read': " + err); - } else { - console.log("marked read successfully!"); + const markUpdate = async() => { + let result = await Meteor.callAsync('markUpdate.read', eventId); + try { + if (!result) { + // console.log(" Error marking this read."); + showSnackbar("Error Marking Read!", "red"); + } else { + showSnackbar("Successfully Marked as Read.", "green"); + } + } catch(error) { + console.log(" ERROR trying to mark this update as read: " + error); } - }); + } + markUpdate(); } }); diff --git a/client/General/DeleteConfModal/deleteConfirmationModal.js b/client/General/DeleteConfModal/deleteConfirmationModal.js index dde7bfb..f153ae7 100644 --- a/client/General/DeleteConfModal/deleteConfirmationModal.js +++ b/client/General/DeleteConfModal/deleteConfirmationModal.js @@ -22,14 +22,16 @@ Template.deleteConfirmationModal.events({ let deleteId = Session.get("deleteId"); let method = Session.get("method"); - Meteor.call(method, deleteId, function(err, result) { - if (err) { + const delItem = async() => { + let result = await Meteor.callAsync(method, deleteId); + if (!result) { console.log(" ERROR deleting item from modal: " + err); } else { console.log(" SUCCESSFULLY deleted."); // put the new modal open / close here // $('#modalDelete').modal('close'); } - }); + } + delItem(); }, }); \ No newline at end of file diff --git a/client/General/headerBar.html b/client/General/headerBar.html index 9971514..97737ca 100644 --- a/client/General/headerBar.html +++ b/client/General/headerBar.html @@ -11,8 +11,8 @@
  • My Lists
  • My Menus
  • My Tasks
  • -
  • My Settings
  • - {{#if isInRole 'systemadmin'}} +
  • My Settings
  • + {{#if isInRole "systemadmin"}}
  • Manage
  • {{/if}}
  • Log Out
  • @@ -30,7 +30,7 @@
  • My Lists
  • My Menus
  • My Tasks
  • -
  • My Settings
  • +
  • My Settings
  • {{#if isInRole 'systemadmin'}}
  • Manage
  • {{#if $eq updateExists true}} diff --git a/client/General/headerBar.js b/client/General/headerBar.js index 9de0b62..3e246f0 100644 --- a/client/General/headerBar.js +++ b/client/General/headerBar.js @@ -1,15 +1,38 @@ +import { Meteor } from 'meteor/meteor'; import { M } from '../lib/assets/materialize'; import { UpdateInfo } from '../../imports/api/updateInfo.js'; +import { FlowRouter } from 'meteor/ostrio:flow-router-extra'; +import { Roles } from 'meteor/roles'; Template.headerBar.onCreated(function() { this.subscribe("UpdateVersion"); + this.subscribe("assignment"); }); Template.headerBar.onRendered(function() { var elems = document.querySelectorAll('.sidenav'); var instances = M.Sidenav.init(elems, {}); var elemd = document.querySelectorAll('.dropdown-trigger'); - var instances = M.Dropdown.init(elemd, {}); + var instances = M.Dropdown.init(elemd, {}); + + setTimeout(function() { + const getRoles = async() => { + let userId = Meteor.userId(); + // let isRole = await Roles.userIsInRoleAsync(userId, "systemadmin"); + let isRole = await Roles.getRolesForUserAsync(userId); + try { + if (!isRole) { + // console.log("SystemAdmin role for user not found: " + isRole);; + } else { + // console.log("Found role for the user: "); + // console.dir(isRole); + } + } catch(error) { + console.log(" ERROR getting role for user: " + error); + } + } + getRoles(); + }, 1000); }); Template.headerBar.helpers({ diff --git a/client/ListItems/listItemTblByStore.js b/client/ListItems/listItemTblByStore.js index 4141227..a914cd0 100644 --- a/client/ListItems/listItemTblByStore.js +++ b/client/ListItems/listItemTblByStore.js @@ -58,13 +58,13 @@ Template.listItemTblByStore.events({ if (typeof itemOrder == 'undefined' || itemOrder == "" || itemOrder == false) { Meteor.call("setOrdered.listItem", itemId, function(err, result) { if (err) { - console.log(" ERROR updating order status to ordered: " + err); + // console.log(" ERROR updating order status to ordered: " + err); } }); } else { Meteor.call("setNotOrdered.listItem", itemId, function(err, result) { if (err) { - console.log(" ERROR updating order status to unordered: " + err); + // console.log(" ERROR updating order status to unordered: " + err); } }); } @@ -73,7 +73,7 @@ Template.listItemTblByStore.events({ event.preventDefault(); Meteor.call('setReceived.listItem', this._id, function(err, result) { if (err) { - console.log(" ERROR setting item as received: " + err); + // console.log(" ERROR setting item as received: " + err); } else { // console.log(" SUCCESS setting item received."); } diff --git a/client/ListItems/listItemsForm.js b/client/ListItems/listItemsForm.js index ff1b481..20959a3 100644 --- a/client/ListItems/listItemsForm.js +++ b/client/ListItems/listItemsForm.js @@ -39,7 +39,7 @@ Template.listItemsForm.helpers({ selListId = selListInfo.viewId; Session.set("listId", selListId); } else { - console.log("not finding any value for viewId."); + // console.log("not finding any value for viewId."); } } let listInfo = Lists.findOne({ _id: selListId }); @@ -48,6 +48,7 @@ Template.listItemsForm.helpers({ } }, itemProdName: function() { + return Products.find({}); }, editMode: function() { @@ -66,14 +67,7 @@ Template.listItemsForm.events({ if (item == null || item == "") { Session.set("itemReqErr", true); } else { - Meteor.call("add.listItem", item, listId, function(err, result) { - if (err) { - console.log(" ERROR adding item to list: " + err); - } else { - console.log(" SUCCESS adding item to list."); - $("#findListItems").val(""); - } - }); + addItem(item, listId); } }, 'keydown #findListItems' (event) { @@ -83,14 +77,7 @@ Template.listItemsForm.events({ if (item == null || item == "") { Session.set("itemReqErr", true); } else { - Meteor.call("add.listItem", item, listId, function(err, result) { - if (err) { - console.log(" ERROR adding item to list: " + err); - } else { - console.log(" SUCCESS adding item to list."); - $("#findListItems").val(""); - } - }); + addItem(item, listId); } } }, @@ -110,8 +97,11 @@ Template.listItemsForm.events({ 'keyup #findListItems' (event) { if (event.which !== 13) { let findItemVal = $("#findListItems").val(); + // console.log(findItemVal); let listItemInfo = Products.find({ prodName: {$regex: findItemVal + '.*', $options: 'i'}}).fetch(); - if (typeof listItemInfo != 'undefined' && listItemInfo != "" && listItemInfo != null) { + if (!listItemInfo) { + // console.log("No data for key input."); + } else { getDataList(listItemInfo); } } @@ -128,7 +118,21 @@ Template.listItemsForm.events({ }); getDataList = function(listItemInfo) { + // console.log(listItemInfo); let listItemObjArray = []; listItemObjArray = listItemInfo.map(info => ({ id: info._id, text: info.prodName, store: info.prodStore })) Session.set("findListItems", listItemObjArray); } + +const addItem = async(item, listId) => { + let result = await Meteor.callAsync("add.listItem", item, listId); + try { + if (!result) { + // console.log(" ISSUE adding list item. See logs."); + } else { + $("#findListItems").val(""); + } + } catch(error) { + console.log(" ERROR adding list item: " + error); + } +} diff --git a/client/ListItems/listItemsTbl.js b/client/ListItems/listItemsTbl.js index e17a006..4d04e18 100644 --- a/client/ListItems/listItemsTbl.js +++ b/client/ListItems/listItemsTbl.js @@ -22,13 +22,13 @@ Template.listItemsTbl.helpers({ let showRecvd = Session.get("showReceivedItems"); let searchVal = Session.get("searchVal"); if (showRecvd == false) { - if (typeof searchVal == 'undefined' || searchVal.length === 0) { + if (!searchVal) { return ListItems.find({ itemReceived: false }); } else { return ListItems.find({ itemReceived: false, itemName: { $regex: searchVal + '.*', $options: 'i' } }); } } else { - if (typeof searchVal == 'undefined' || searchVal.length == 0) { + if (!searchVal) { return ListItems.find({}); } else { return ListItems.find({ itemName: { $regex: searchVal + '.*', $options: 'i' } }); @@ -40,34 +40,37 @@ Template.listItemsTbl.helpers({ Template.listItemsTbl.events({ 'click li' (event) { event.preventDefault(); - let itemInfo = ListItems.findOne({ _id: this._id }); - if (itemInfo.itemOrdered == true) { - Meteor.call('setNotOrdered.listItem', this._id, function(err, result) { - if (err) { - console.log(" ERROR setting this item as NOT ordered: " + err); + const setOrd = async() => { + let itemInfo = await ListItems.findOneAsync({ _id: this._id }); + if (itemInfo.itemOrdered == true) { + let result = await Meteor.callAsync('setNotOrdered.listItem', this._id); + if (!result) { + // console.log(" ERROR seeting item as not ordered."); } else { - // console.log(" SUCCESS setting this item as NOT ordered."); - } - }); - } else { - Meteor.call('setOrdered.listItem', this._id, function(err, result) { - if (err) { - console.log(" ERROR marking item ordered: " + err); + // console.log(" SUCCESS setting item as ordered."); + } + } else { + let result = Meteor.callAsync('setOrdered.listItem', this._id); + if (!result) { + // console.log(" ERROR marking item ordered: " + err); } else { // console.log(" SUCCESS marking this item ordered."); } - }); + } } + setOrd(); }, 'click .markListItemReceived' (event) { event.preventDefault(); - Meteor.call('setReceived.listItem', this._id, function(err, result) { - if (err) { - console.log(" ERROR setting item as received: " + err); + const setRcvd = async() => { + let result = await Meteor.callAsync('setReceived.listItem', this._id); + if (!result) { + // console.log("Item not marked properly - why?"); } else { - // console.log(" SUCCESS setting item received."); + // console.log("Item Marked Received."); } - }); + } + setRcvd(); }, 'click .deleteListItem' (event) { event.preventDefault(); diff --git a/client/Lists/listsTbl.js b/client/Lists/listsTbl.js index 1d7a8f0..05a065e 100644 --- a/client/Lists/listsTbl.js +++ b/client/Lists/listsTbl.js @@ -1,5 +1,6 @@ import { Lists } from '../../imports/api/lists.js'; import { M } from '../lib/assets/materialize.js'; +import { FlowRouter } from 'meteor/ostrio:flow-router-extra'; Template.listsTbl.onCreated(function() { this.subscribe("myLists"); @@ -27,15 +28,17 @@ Template.listsTbl.events({ } else { // console.log("listId is: " + listId); Session.set("listId", listId); - Meteor.call('add.userLast', "List", listId, function(err, result) { - if (err) { - console.log(" ERROR setting user last list id in db: " + err); + const addUserLast = async() => { + let result = await Meteor.callAsync('add.userLast', "List", listId); + if (!result) { + // console.log(" ERROR setting user last list id in db: " + err); } else { - Meteor.setTimeout(function() { + setTimeout(function() { FlowRouter.go('/listitems'); }, 100); } - }); + } + addUserLast(); } } }, @@ -47,15 +50,17 @@ Template.listsTbl.events({ let splitList = listFullId.split("_"); let listId = splitList[1]; // console.log("listId is " + listId); - Meteor.call("mark.complete", listId, function(err, result){ - if (err) { - console.log(" ERROR marking list complete! " + err); + const markComp = async() => { + let result = await Meteor.callAsync("mark.complete", listId); + if (!result) { + // console.log(" ERROR marking list complete!"); showSnackbar("ERROR! List Not Makred Complete!", "red"); } else { // console.log(" SUCCESS marking list complete."); showSnackbar("List Marked Complete!", "green"); } - }); + } + markComp(); } } }); \ No newline at end of file diff --git a/client/MainLayout.js b/client/MainLayout.js index 2a37018..010b72f 100644 --- a/client/MainLayout.js +++ b/client/MainLayout.js @@ -7,20 +7,27 @@ Template.MainLayout.onCreated(function() { Template.MainLayout.onRendered(function() { this.autorun(() => { let myId = Meteor.userId(); - let myprefs = UserConfig.findOne({ user: myId }); - if (typeof myprefs != 'undefined') { - if (myprefs.darkMode == "light") { - console.log("Found theme as light"); - Session.set("myTheme", "light"); - document.documentElement.setAttribute('theme', "light"); - } else { - console.log("Found theme as dark"); - Session.set("myTheme", "dark"); - document.documentElement.setAttribute('theme', "dark"); - } - } else { - console.log("User Prefs appear undefined."); + const getConfig = async() => { + let myprefs = await UserConfig.findOneAsync({ user: myId }); + try { + if (!myprefs) { + // console.log("User Prefs appear undefined."); + } else { + if (myprefs.darkMode == "light") { + // console.log("Found theme as light"); + Session.set("myTheme", "light"); + document.documentElement.setAttribute('theme', "light"); + } else { + // console.log("Found theme as dark"); + Session.set("myTheme", "dark"); + document.documentElement.setAttribute('theme', "dark"); + } + } + } catch(error) { + console.log(" ERROR getting user preferences: " + error); + } } + getConfig(); }); }); diff --git a/client/MenuItems/addProdToListModal.html b/client/MenuItems/addProdToListModal.html index 191eaeb..4ac3f34 100644 --- a/client/MenuItems/addProdToListModal.html +++ b/client/MenuItems/addProdToListModal.html @@ -39,10 +39,9 @@ Cancel
    -
    - +
    {{> snackbar}} diff --git a/client/MenuItems/addProdToListModal.js b/client/MenuItems/addProdToListModal.js index 7204281..914273a 100644 --- a/client/MenuItems/addProdToListModal.js +++ b/client/MenuItems/addProdToListModal.js @@ -31,9 +31,9 @@ Template.addProdToListModal.helpers({ }, productToChoose: function() { let menuItemId = Session.get("menuItemId"); - console.log("Menu Item Id received is: " + menuItemId); + // console.log("Menu Item Id received is: " + menuItemId); let prodLinkLIst = MenuProdLinks.find({ menuItemId: menuItemId}); - console.dir(prodLinkLIst); + // console.dir(prodLinkLIst); if (typeof prodLinkLIst != 'undefined' && prodLinkLIst != "" && prodLinkLIst != null) { return prodLinkLIst; } @@ -44,21 +44,23 @@ Template.addProdToListModal.events({ 'click .productListing' (event) { let itemId = event.currentTarget.id; let selected = Session.get("itemsSelected"); - console.log("Item clicked: " + itemId); + // console.log("Item clicked: " + itemId); selected.push(itemId); - console.dir(selected); + // console.dir(selected); Session.set("itemsSelected", selected); }, 'click #saveProdsToList' (event) { event.preventDefault(); let selectedItems = Session.get("itemsSelected"); let listId = $("#chooseList").val(); - Meteor.call('add.itemsFromMenuItem', selectedItems, listId, function(err, result) { - if (err) { - console.log(" ERROR adding menu components to list: " + err); + const addItemsFromMenu = async() => { + let result = await Meteor.callAsync('add.itemsFromMenuItem', selectedItems, listId); + if (!result) { + console.log(" ERROR adding menu components to list: "); } else { showSnackbar("Items Added to List!", "green"); } - }); + } + addItemsFromMenu(); } }); diff --git a/client/MenuItems/menuItemsForm.js b/client/MenuItems/menuItemsForm.js index 9419402..e0a6e65 100644 --- a/client/MenuItems/menuItemsForm.js +++ b/client/MenuItems/menuItemsForm.js @@ -38,13 +38,27 @@ Template.menuItemsForm.helpers({ if (Session.get("menuId")) { menuId = Session.get("menuId"); } else { - menuId = UserLast.findOne({ view: "Menu" }).viewId; + const menuInfor = async() => { + let result = await UserLast.findOneAsync({ view: "Menu" }).viewId; + if (!result) { + + } else { + return result; + } + } + let menuId = menuInfor(); } - let menuInfo = Menus.findOne({ _id: menuId }); - if (menuInfo) { - return menuInfo.menuName; + const menuData = async() => { + let menuInfo = await Menus.findOneAsync({ _id: menuId }); + if (!menuInfo) { + return; + } else { + return menuInfo.menuName; + } } + let menuInformation = menuData(); + return menuInformation; } }); @@ -55,49 +69,77 @@ Template.menuItemsForm.events({ let dateSrv = $("#dateServed").val(); let menuId = Session.get("menuId"); + if (menuId == null || menuId == "") { + console.log(" ---- NO MENU ID! ----"); + } - let menuItemExists = MenuItems.findOne({ itemName: menuItem }); + const mie = async() => { + let menuItemExists = await MenuItems.findOneAsync({ itemName: menuItem }); + if (!menuItemExists) { + // call to add it + notExists(); + } else { + // call to add it to the menu only + console.dir(menuItemExists); + itExists(menuItemExists); + } + } + mie(); - if (typeof menuItemExists != 'undefined' && menuItemExists != null && menuItemExists != "") { + const notExists = async() => { + // add the item as new and add to the menu + if (menuItem == null || menuItem == "") { + Session.set("menuItemErr", true); + } else { + const addMenuItem = async() => { + let result = await Meteor.callAsync('add.menuItem', menuItem); + if (!result) { + // console.log(" ERROR adding menu item: " + err); + } else { + // console.log(" SUCCESS adding menu item. Result is: " + result); + return result; + } + } + let addedItem = await addMenuItem(); + + if (!addedItem) { + // console.log("Item was not added."); + } else { + // now add this item to the menu + // console.log("Added Item = " + addedItem); + const addToMenu = async() => { + let result2 = await Meteor.callAsync('addto.Menu', menuId, menuItem, addedItem, dateSrv, false); + if (!result2) { + // console.log(" ERROR adding menuitem to menu: " + error); + } else { + $("#menuItemInp").val(""); + $("#dateServed").val(""); + // console.log("Added item to menu - no problem."); + } + } + addToMenu(); + } + } + } + + const itExists = async(menuItemExists) => { // use the existing item on the menu let menuItemId = menuItemExists._id; let isLinked = menuItemExists.isLinked; if (menuItem == null || menuItem == "") { Session.set("menuItemErr", true); } else { - Meteor.call('addto.Menu', menuId, menuItem, menuItemId, dateSrv, isLinked, function(error, nresult) { - if (error) { - console.log(" ERROR adding menuitem to menu: " + error); + const addToMenu = async() => { + let result = await Meteor.callAsync('addto.Menu', menuId, menuItem, menuItemId, dateSrv, isLinked); + if (!result) { + // console.log(" ERROR adding menuitem to menu: " + error); } else { // console.log("Added item to menu - no problem."); $("#menuItemInp").val(""); $("#dateServed").val(""); } - }); - } - } else { - // add the item as new and add to the menu - if (menuItem == null || menuItem == "") { - Session.set("menuItemErr", true); - } else { - Meteor.call('add.menuItem', menuItem, function(err, result) { - if (err) { - console.log(" ERROR adding menu item: " + err); - } else { - // console.log(" SUCCESS adding menu item."); - $("#menuItemInp").val(""); - $("#dateServed").val(""); - - // now add this item to the menu - Meteor.call('addto.Menu', menuId, menuItem, result, dateSrv, false, function(error, nresult) { - if (error) { - console.log(" ERROR adding menuitem to menu: " + error); - } else { - // console.log("Added item to menu - no problem."); - } - }); - } - }); + } + addToMenu(); } } }, @@ -110,20 +152,25 @@ Template.menuItemsForm.events({ let menuItemId = menuInfo[i]._id; let momentAddDay = moment(menuInfo[i].serveDate).add(1, 'day').format("MMM DD, YYYY"); // console.log(momentAddDay); - Meteor.call('shiftDate', menuItemId, momentAddDay, function(err,result) { - if (err) { - console.log(" ERROR shifting meal days: " + err); + const shiftDay = async() => { + let result = await Meteor.callAsync('shiftDate', menuItemId, momentAddDay); + if (!result) { + // console.log(" ERROR shifting meal days: " + err); } else { showSnackbar("Items Shifted Out by 1 Calendar Day", "green"); } - }); + } } }, 'keyup #menuItemInp' (event) { if (event.which != 13) { let findMenuItem = $("#menuItemInp").val(); let menuItemInfo = MenuItems.find({ itemName: {$regex: findMenuItem + '.*', $options: 'i' }}).fetch(); - if (typeof menuItemInfo != 'undefined' && menuItemInfo != '' && menuItemInfo != null) { + if (!menuItemInfo) { + console.log("Nothing found in menu items:"); + console.dir(menuItemInfo); + } else { + console.dir(menuItemInfo) getMenuItemList(menuItemInfo); } } diff --git a/client/MenuItems/menuItemsTbl.js b/client/MenuItems/menuItemsTbl.js index 40e279c..f931e62 100644 --- a/client/MenuItems/menuItemsTbl.js +++ b/client/MenuItems/menuItemsTbl.js @@ -30,11 +30,21 @@ Template.menuItemsTbl.helpers({ if (Session.get("menuId")) { menuId = Session.get("menuId"); } else { - menuId = UserLast.findOne({ view: "Menu" }).viewId; + const menu = async() => { + let menId = await UserLast.findOneAsync({ view: "Menu" }).viewId; + if (!menId) { + + } else { + return menId; + } + } + menuId = menu(); } - let menuInfo = Menus.find({ _id: menuId }, { sort: { serveDateActual: 1 }}); - if (menuInfo) { - return menuInfo + if (menuId) { + let menuInfo = Menus.find({ _id: menuId }, { sort: { serveDateActual: 1 }}); + if (menuInfo) { + return menuInfo; + } } } }); @@ -43,7 +53,7 @@ Template.menuItemsTbl.events({ 'click .deleteMenuItem' (event) { event.preventDefault(); let theseIds = Session.get("menuId") + "_" + this.menuItemId; - console.log("These Ids: " + theseIds); + // console.log("These Ids: " + theseIds); Session.set("deleteId", theseIds); Session.set("method", "delete.itemFromMenu"); Session.set("item", this.menuItemName); @@ -53,7 +63,7 @@ Template.menuItemsTbl.events({ event.preventDefault(); Session.set("menuItemId", this.menuItemId); Session.set("menuItemName", this.menuItemName); - console.log("menu item name = " + this.menuItemName); + // console.log("menu item name = " + this.menuItemName); }, 'click .addProdsToList' (event) { event.preventDefault(); diff --git a/client/MenuItems/modalLinkProducts.js b/client/MenuItems/modalLinkProducts.js index d15780e..8d777d3 100644 --- a/client/MenuItems/modalLinkProducts.js +++ b/client/MenuItems/modalLinkProducts.js @@ -18,17 +18,29 @@ Template.modalLinkProducts.onRendered(function() { dropdownOptions: 4, }); - setTimeout(function() { - var instances = M.Modal.init(elems, {}); - var instancese = M.FormSelect.init(elemse, { - dropdownOptions: 4, - }); - }, 250); + this.autorun(() => { + if (this.subscriptionsReady()) { + // setTimeout(function() { + // var instances = M.Modal.init(elems, {}); + var elemse = document.querySelectorAll('select'); + var instancese = M.FormSelect.init(elemse, { + dropdownOptions: 4, + }); + // }, 250); + } + }); }); Template.modalLinkProducts.helpers({ products: function() { - return Products.find({}, {sort: { prodName:1 }}); + let prodInfo = Products.find({}, { sort: { prodName:1 }}); + // return Products.find({}, {sort: { prodName:1 }}); + if (!prodInfo) { + console.log("no product info yet."); + } else { + console.log("prod info found."); + return prodInfo; + } } }); @@ -42,7 +54,7 @@ Template.modalLinkProducts.events({ let links = M.FormSelect.getInstance(linkSelect).getSelectedValues(); if (typeof links != undefined && links != [] && links != null) { // let's split these links into their parts, and make an array of objects - for (i=0; i { + let result = await Meteor.callAsync("add.menuProdLinks", menuItemId, menuItemName, linkObjArray); + if (!result) { + // console.log(" ERROR adding product links to this menu item: " + err); } else { - Meteor.call('update.menuItemLinked', menuItemId, true, function(err, result) { - if (err) { - console.log(" ERROR adding link to menu item: " + err); - } else { - Meteor.call('link.inMenu', menuItemId, true, function(error, nresult) { - if (error) { - console.log(" ERROR adding link to menu sub-item: " + error); - } else { - showSnackbar("Products added to Menu Item successfully!", "green"); - } - }); - } - }); + updMenuItemLinks(); } - }); + } + addMenuProdLinks(); + + const updMenuItemLinks = async() => { + let result = await Meteor.callAsync('update.menuItemLinked', menuItemId, true); + if (!result) { + // console.log(" ERROR adding link to menu item: " + err); + } else { + linkInMenu(); + } + } + + const linkInMenu = async() => { + let result = await Meteor.callAsync('link.inMenu', menuItemId, true); + if (!result) { + console.log(" ERROR adding link to menu sub-item: " + error); + } else { + showSnackbar("Products added to Menu Item successfully!", "green"); + } + } } } -}); +}); \ No newline at end of file diff --git a/client/Menus/addMenuModal.js b/client/Menus/addMenuModal.js index ae92d87..638f81d 100644 --- a/client/Menus/addMenuModal.js +++ b/client/Menus/addMenuModal.js @@ -27,14 +27,16 @@ Template.addMenuModal.events({ if (menuName == "" || menuName == null) { Session.set("menuNameErr", true); } else { - Meteor.call("add.menu", menuName, function(err, result) { - if (err) { - console.log(" ERROR adding menu: " + err); + const addMenu = async() => { + let result = await Meteor.callAsync("add.menu", menuName); + if (!result) { + // console.log(" ERROR adding menu: " + err); } else { - console.log(" SUCCESS adding menu."); + // console.log(" SUCCESS adding menu."); $("#menuNameInp").val(""); } - }); + } + addMenu(); } }, }); \ No newline at end of file diff --git a/client/Menus/mainMenuTbl.js b/client/Menus/mainMenuTbl.js index 0ae96b7..a64e4c3 100644 --- a/client/Menus/mainMenuTbl.js +++ b/client/Menus/mainMenuTbl.js @@ -1,5 +1,6 @@ import { Menus } from '../../imports/api/menu.js'; import { M } from '../lib/assets/materialize.js'; +import { FlowRouter } from 'meteor/ostrio:flow-router-extra'; Template.mainMenuTbl.onCreated(function() { this.subscribe("myMenus"); @@ -21,7 +22,7 @@ Template.mainMenuTbl.events({ 'click li.collection-item' (event) { event.preventDefault(); let sender = event.target; - // console.log("Sender origination from: "); + // console.log("Sender originated from: "); // console.log(sender.localName); if (sender.localName == "li") { let menuId = event.currentTarget.id; @@ -29,33 +30,38 @@ Template.mainMenuTbl.events({ // console.log("add menu clicked"); } else { // console.log("menuId is: " + menuId); - Meteor.call('add.userLast', "Menu", menuId, function(err, result) { - if (err) { - console.log(" ERROR writing last menu viewed by user to db: " + err); + const addUserLast = async() => { + Session.set("menuId", menuId); + let result = await Meteor.callAsync('add.userLast', "Menu", menuId); + if (!result) { + // console.log(" ERROR writing last menu viewed by user to db."); } else { - Session.set("menuId", menuId); - Meteor.setTimeout(function() { - FlowRouter.go('/menuitems'); - }, 100); + FlowRouter.go('/menuitems'); } - }); + } + addUserLast(); } } else if (sender.localName == "i") { let menuId = this._id; - Meteor.call("markMenu.complete", menuId, function(err, result) { - if (err) { - console.log(" ERROR: can't mark menu complete: " + err); + const makrMenuComp = async() => { + let result = await Meteor.callAsync("markMenu.complete", menuId); + if (!result) { + // console.log(" ERROR: can't mark menu complete."); } else { - console.log(" SUCCESS marking menu complete."); - Meteor.call('setAllMade.menuItem', menuId, function(err, result) { - if (err) { - console.log(" ERROR: cannot set all items as made: " + err); - } else { - console.log(" SUCCESS setting all items made."); - } - }); + // console.log(" SUCCESS marking menu complete."); + setAllMade(); } - }); + } + makrMenuComp(); + + const setAllMade = async() => { + let result = await Meteor.callAsync('setAllMade.menuItem', menuId); + if (!result) { + // console.log(" ERROR: cannot set all items as made."); + } else { + // console.log(" SUCCESS setting all items made."); + } + } } }, }); \ No newline at end of file diff --git a/client/MyTasks/myTasksForm.js b/client/MyTasks/myTasksForm.js index 7d50d29..82e4b1a 100644 --- a/client/MyTasks/myTasksForm.js +++ b/client/MyTasks/myTasksForm.js @@ -33,34 +33,26 @@ Template.myTasksForm.events({ let taskDateArray = Session.get("taskDateArr"); let actDate = []; + console.dir(taskNameArray); + console.dir(taskDateArray); + if (taskNameArray == null || taskNameArray == [] || taskNameArray == "") { taskNameErr = true; } if (taskDateArray == null || taskDateArray == []|| taskDateArray == "") { taskDateErr = true; - } else { - for (i = 0; i < taskDateArray.length; i++) { - // console.log(taskDateArray[i]); - let actDateTask = new Date(taskDateArray[i]); - actDate.push(actDateTask); - } } - console.log("Date Error: " + taskDateErr + " - Name Error: " + taskNameErr); + // console.log("Date Error: " + taskDateErr + " - Name Error: " + taskNameErr); if (taskDateErr == false && taskNameErr == false) { - Meteor.call("add.task", taskNameArray, "self", "selfId", taskDateArray, actDate, function(err, result) { - if (err) { - console.log(" ERROR adding task for self: " + err); - showSnackbar("ERROR adding task for self!", "red"); - } else { - console.log(" SUCCESS adding task for self."); - Session.set("taskDateArr", []); - $("#myTaskName").val(""); - $("#myTaskDate").val(""); - showSnackbar("Added Tasks Successfully!", "green"); + for (const task of taskNameArray) { + for (const date of taskDateArray) { + let actDate = new Date(date); + + addTask(task.id, date, actDate); } - }); + } } else { showSnackbar("Error! Both Task & Date are Required!", "red"); } @@ -91,4 +83,18 @@ Template.myTasksForm.events({ taskDateArr.push(taskDate); Session.set("taskDateArr", taskDateArr); }, -}); \ No newline at end of file +}); + +const addTask = async(task, date, actDate) => { + let result = await Meteor.callAsync("add.myTask", task, date, actDate); + if (!result) { + // console.log(" ERROR adding task for self: "); + showSnackbar("Error adding task for self!", "red"); + } else { + // console.log(" SUCCESS adding task for self."); + // Session.set("taskDateArr", []); + // $("#myTaskName").val(""); + // $("#myTaskDate").val(""); + showSnackbar("Added Tasks Successfully!", "green"); + } +} \ No newline at end of file diff --git a/client/MyTasks/myTasksTbl.js b/client/MyTasks/myTasksTbl.js index ea3569c..9f2bc91 100644 --- a/client/MyTasks/myTasksTbl.js +++ b/client/MyTasks/myTasksTbl.js @@ -55,19 +55,19 @@ Template.myTasksTbl.events({ 'click .markMyTaskComplete' (event) { event.preventDefault(); let taskId = this._id; - Meteor.call("markTask.complete", taskId, function(err, result) { - if (err) { - console.log(" ERROR marking task completeL " + err); + const makrTaskComp = async() => { + let result = await Meteor.callAsync("markTask.complete", taskId); + if (!result) { + // console.log(" ERROR marking task completeL " + err); showSnackbar("ERROR Marking Task Complete!", "red"); } else { showSnackbar("Successfully Marked Task Complete!", "green"); - } - }); + } }, 'click .deleteMyTask' (event) { event.preventDefault(); - console.log("detected click"); + // console.log("detected click"); Session.set("deleteId", this._id); Session.set("method", "delete.task"); Session.set("item", this.taskName); diff --git a/client/UserConfig/userConfig.js b/client/UserConfig/userConfig.js index 8afff09..e5f8725 100644 --- a/client/UserConfig/userConfig.js +++ b/client/UserConfig/userConfig.js @@ -5,15 +5,29 @@ Template.userConfig.onCreated(function() { }); Template.userConfig.onRendered(function() { - let myConfig = UserConfig.findOne({ user: Meteor.userId() }); - if (typeof myConfig != 'undefined') { - console.log("My Pref: " + myConfig.darkPref); - if (myConfig.darkMode == 'light') { - $("#darkMode").prop('checked', false); - } else { - $("#darkMode").prop('checked', true); + const getConfig = async() => { + // console.log("tried to get switch config.") + let myConfig = await UserConfig.findOneAsync({ user: Meteor.userId() }); + try { + // console.dir(myConfig); + if (!myConfig) { + // console.log("config not found, setting to light mode."); + $("#darkMode").prop('checked', false); + } else { + // console.log("My Pref: " + myConfig.darkMode); + if (myConfig.darkMode == 'light') { + $("#darkMode").prop('checked', false); + } else { + // console.log("should be checked.") + $("#darkMode").prop('checked', true); + } + } + } catch(error) { + console.log(" ERROR getting dark theme for setting swtich: " + error); } + } + getConfig(); }); Template.userConfig.helpers({ @@ -22,23 +36,22 @@ Template.userConfig.helpers({ Template.userConfig.events({ 'click #darkMode' (event) { - let darkModePref = $("#darkMode").prop('checked'); + let darkModePref = $("#darkMode").prop('checked') if (darkModePref == true) { - Meteor.call('update.darkModePref', 'dark', function(err, reuslt) { - if (err) { - console.log(" ERROR: could not set dark mode preference to dark: " + err); - } else { - showSnackbar("Dark Mode Preference Set to Dark", "green"); - } - }); + let mode = 'dark'; + setDarkMode(mode); } else { - Meteor.call('update.darkModePref', 'light', function(err, result) { - if (err) { - console.log(" ERROR: could not set dark mode preference to light: " + err); - } else { - showSnackbar("Dark Mode Preference Set to Light", "green"); - } - }); + let mode = 'light'; + setDarkMode(mode); } }, -}); \ No newline at end of file +}); + +const setDarkMode = async(mode) => { + let result = await Meteor.callAsync('update.darkModePref', mode); + if (!result) { + // console.log(" - Did not receive back a 'result' from the update."); + } else { + showSnackbar("Dark Mode Preference Set to " + mode, "green"); + } +} \ No newline at end of file diff --git a/imports/api/listItems.js b/imports/api/listItems.js index 9459395..ad85f68 100644 --- a/imports/api/listItems.js +++ b/imports/api/listItems.js @@ -14,7 +14,7 @@ ListItems.allow({ }); Meteor.methods({ - 'add.listItem' (itemName, listId) { + async 'add.listItem' (itemName, listId) { check(itemName, String); check(listId, String); @@ -25,18 +25,21 @@ Meteor.methods({ let iname = itemName.charAt(0).toUpperCase() + itemName.slice(1); // look up the item from the Products collection - let prodInfo = Products.findOne({ prodName: iname }); - if (!prodInfo) { - Meteor.call("add.product", itemName, [""], function(err, result) { - if (err) { - console.log(" ERROR adding item to products: " + err); + + let prodInfo = await Products.findOneAsync({ prodName: iname }); + try { + if (!prodInfo) { + // add product info first + let added = await Meteor.callAsync("add.product", itemName, [""]); + if (!added) { + // console.log(" ERROR adding item to products: " + err); } else { // console.log(" SUCCESS adding item to Products."); - return ListItems.insert({ + return await ListItems.insertAsync({ itemName: iname, listId: listId, - prodId: result, + prodId: added, addedBy: this.userId, itemStore: "", itemOrdered: false, @@ -44,39 +47,9 @@ Meteor.methods({ dateAddedToList: new Date(), }); } - }); - } else { - return ListItems.insert({ - itemName: iname, - listId: listId, - prodId: prodInfo._id, - addedBy: this.userId, - itemStore: prodInfo.prodStore, - itemOrdered: false, - itemReceived: false, - dateAddedToList: new Date(), - }); - } - }, - 'add.itemsFromMenuItem' (itemIds, listId) { - check(itemIds, [String]); - check(listId, String); - - if (!this.userId) { - throw new Meteor.Error('You are not allowed to add items from a menu. Make sure you are logged in with valid user credentials.'); - } - - console.dir(itemIds); - - for (i=0; i < itemIds.length; i++) { - // let's check and make sure the product isn't already on the list - let onList = ListItems.find({ listId: listId, prodId: itemIds[i] }).count(); - console.log("Number On List: " + onList); - if (onList == 0) { - // now pull the product - let prodInfo = Products.findOne({ _id: itemIds[i] }); - ListItems.insert({ - itemName: prodInfo.prodName, + } else { + return await ListItems.insertAsync({ + itemName: iname, listId: listId, prodId: prodInfo._id, addedBy: this.userId, @@ -85,52 +58,95 @@ Meteor.methods({ itemReceived: false, dateAddedToList: new Date(), }); + } + } catch(error) { + console.log(" ERROR adding new product and item: " + error); + } + }, + async 'add.itemsFromMenuItem' (itemIds, listId) { + check(itemIds, [String]); + check(listId, String); + + if (!this.userId) { + throw new Meteor.Error('You are not allowed to add items from a menu. Make sure you are logged in with valid user credentials.'); + } + + console.dir(itemIds); + let noitems = itemIds.length; + let i; + + for (i=0; i < noitems; i++) { + // let's check and make sure the product isn't already on the list + let onList = await ListItems.find({ listId: listId, prodId: itemIds[i] }).countAsync(); + // console.log("Number On List: " + onList); + if (onList == 0) { + // now pull the product + let prodInfo = await Products.findOneAsync({ _id: itemIds[i] }); + if (!prodInfo) { + console.log("Unable to load product info."); + } else { + console.log("Run " + i); + ListItems.insertAsync({ + itemName: prodInfo.prodName, + listId: listId, + prodId: prodInfo._id, + addedBy: this.userId, + itemStore: prodInfo.prodStore, + itemOrdered: false, + itemReceived: false, + dateAddedToList: new Date(), + }); + } } else { // product exists on list, move on to next console.log("Product Exists on Selected List."); } + if (i == (noitems - 1)) { + console.log("Returning now."); + return true; + } } }, - 'setOrdered.listItem' (itemId) { + async 'setOrdered.listItem' (itemId) { check(itemId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to set items as ordered. Make sure you are logged in with valid user credentials.'); } - return ListItems.update({ _id: itemId }, { + return await ListItems.updateAsync({ _id: itemId }, { $set: { itemOrdered: true, dateOrdered: new Date(), } }); }, - 'setAllOrdered.listItem' (shopListId) { + async 'setAllOrdered.listItem' (shopListId) { // set all items that are not already set as ordered, or set as received to ordered on this list }, - 'setNotOrdered.listItem' (itemId) { + async 'setNotOrdered.listItem' (itemId) { check(itemId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to set items as not ordered. Make sure you are logged in with valid user credentials.'); } - return ListItems.update({ _id: itemId }, { + return await ListItems.updateAsync({ _id: itemId }, { $set: { itemOrdered: false, dateUnOrdered: new Date(), } }); }, - 'setReceived.listItem' (itemId) { + async 'setReceived.listItem' (itemId) { check(itemId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to set items as received. Make sure you are logged in with valid user credentials.'); } - return ListItems.update({ _id: itemId }, { + return await ListItems.updateAsync({ _id: itemId }, { $set: { itemReceived: true, dateReceived: new Date(), @@ -138,25 +154,25 @@ Meteor.methods({ }); }, - 'setNotReceived.listItem' (shopListId) { + async 'setNotReceived.listItem' (shopListId) { check(itemId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to set items as not received. Make sure you are logged in with valid user credentials.'); } - return ListItems.update({ _id: itemId }, { + return await ListItems.updateAsync({ _id: itemId }, { $set: { itemReceived: false, dateNotReceived: new Date(), } }); }, - 'setAllReceived.listItem' () { + async 'setAllReceived.listItem' () { // set all items that are not already listed as received to received on this list }, - 'edit.listItem' (itemId, itemName) { + async 'edit.listItem' (itemId, itemName) { check(itemId, String); check(itemName, String); @@ -164,19 +180,19 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to add items. Make sure you are logged in with valid user credentials.'); } - return ListItems.update({ _id: itemId }, { + return await ListItems.updateAsync({ _id: itemId }, { $set: { itemName: itemName, } }); }, - 'delete.listItem' (itemId) { + async 'delete.listItem' (itemId) { check(itemId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to delete list items. Make sure you are logged in with valid user credentials.'); } - return ListItems.remove({ _id: itemId }); + return await ListItems.removeAsync({ _id: itemId }); } }); diff --git a/imports/api/lists.js b/imports/api/lists.js index 6b8651d..65f2f5d 100644 --- a/imports/api/lists.js +++ b/imports/api/lists.js @@ -12,7 +12,7 @@ Lists.allow({ }); Meteor.methods({ - 'add.list' (listName, isShared) { + async 'add.list' (listName, isShared) { check(listName, String); check(isShared, Boolean); @@ -20,14 +20,14 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to add lists. Make sure you are logged in with valid user credentials.'); } - return Lists.insert({ + return await Lists.insertAsync({ listName: listName, listShared: isShared, listOwner: this.userId, listComplete: false, }); }, - 'edit.list' (listId, listName, isShared) { + async 'edit.list' (listId, listName, isShared) { check(listId, String); check(listName, String); check(isShared, Boolean); @@ -36,41 +36,55 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to edit lists. Make sure you are logged in with valid user credentials.'); } - return Lists.update({ _id: listId }, { + return await Lists.updateAsync({ _id: listId }, { $set: { listName: listName, listShared: isShared, } }); }, - 'delete.list' (listId) { + async 'delete.list' (listId) { check(listId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to delete lists. Make sure you are logged in with valid user credentials.'); } - return Lists.remove({ _id: listId }); + return await Lists.removeAsync({ _id: listId }); }, - 'mark.complete' (listId) { + async 'mark.complete' (listId) { check(listId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to mark lists complete. Make sure you are logged in with valid user credentials.'); } - return Lists.update({ _id: listId }, { + return await Lists.updateAsync({ _id: listId }, { $set: { listComplete: true, completedOn: new Date() } - });; + }); }, - 'clean.Lists' () { + async 'mark.incomplete' (listId) { + check(listId, String); + + if (!this.userId) { + throw new Meteor.Error('You are not allowed to restore completed lists. Make sure you are logged in with valid user credentials.'); + } + + return await Lists.updateAsync({ _id: listId }, { + $set: { + listComplete: false, + completedOn: new Date() + } + }); + }, + async 'clean.Lists' () { if (!this.userId) { throw new Meteor.Error('You are not allowed to clean up old lists. Make sure you are logged in with valid user credentials.'); } - return Lists.remove({ listComplete: true }); + return await Lists.removeAsync({ listComplete: true }); }, }); \ No newline at end of file diff --git a/imports/api/mScripts.js b/imports/api/mScripts.js index 4152b65..67c1685 100644 --- a/imports/api/mScripts.js +++ b/imports/api/mScripts.js @@ -12,10 +12,10 @@ MScripts.allow({ }); Meteor.methods({ - 'set.ScriptRun' (scriptName) { + async 'set.ScriptRun' (scriptName) { check(scriptName, String); - MScripts.insert({ + return await MScripts.insertAsync({ scriptName: scriptName, hasRun: true, runOn: new Date(), diff --git a/imports/api/menu.js b/imports/api/menu.js index b97d21a..e9bd450 100644 --- a/imports/api/menu.js +++ b/imports/api/menu.js @@ -15,20 +15,20 @@ Menus.allow({ }); Meteor.methods({ - 'add.menu' (menuName) { + async 'add.menu' (menuName) { check(menuName, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to add menus. Make sure you are logged in with valid user credentials.'); } - return Menus.insert({ + return await Menus.insertAsync({ menuName: menuName, menuOwner: this.userId, menuComplete: false, }); }, - 'edit.menu' (menuId, menuName) { + async 'edit.menu' (menuId, menuName) { check(menuId, String); check(menuName, String); @@ -36,88 +36,55 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to edit menus. Make sure you are logged in with valid user credentials.'); } - return Menus.update({ _id: menuId }, { + return await Menus.updateAsync({ _id: menuId }, { $set: { menuName: menuName, } }); }, - 'delete.menu' (menuId) { + async 'delete.menu' (menuId) { check(menuId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to delete menus. Make sure you are logged in with valid user credentials.'); } - return Menus.remove({ _id: menuId }); + return await Menus.removeAsync({ _id: menuId }); }, - 'markMenu.complete' (menuId) { + async 'markMenu.complete' (menuId) { check(menuId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to mark menus complete. Make sure you are logged in with valid user credentials.'); } - return Menus.update({ _id: menuId }, { + return await Menus.updateAsync({ _id: menuId }, { $set: { menuComplete: true, } }); }, - 'markMenu.notComplete' (menuId) { + async 'markMenu.notComplete' (menuId) { check(menuId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to mark menus not complete. Make sure you are logged in with valid user credentials.'); } - return Menus.update({ _id: menuId }, { + return await Menus.updateAsync({ _id: menuId }, { $set: { menuComplete: false, } }); }, - 'clean.Menus' () { + async 'clean.Menus' () { if (!this.userId) { throw new Meteor.Error('You are not allowed to clean up old Menus. Make sure you are logged in with valid user credentials.'); } - let removeMenuIds = []; - - - // let's find all the menus with menu items that are past their date. - let menuList = Menus.find({ menuComplete: false }).fetch(); - for (i=0; i < menuList.length; i++) { - let removeMenu = true; - let items = MenuItems.find({ menuId: menuList[i]._id }).fetch(); - for (j=0; j < items.length; j++) { - let srvDate = moment(items[j].serveDateActual); - let today = moment(); - let expired = moment(today).isAfter(srvDate); - if (expired != true) { - removeMenu = false; - } - if (j == items.length - 1) { - if (removeMenu == true) { - removeMenuIds.push(menuList[i]._id); - } - } - } - } - - // next let's add the ids of any menus that are marked complete - let markedComplete = Menus.find({ menuComplete: true }).fetch(); - for (k = 0; k < markedComplete.length; k++) { - let menuId = markedComplete[k]._id; - removeMenuIds.push(menuId); - } - - // finally we'll cycle through the ids and remove the items we collected up. - for (l = 0; l < removeMenuIds.length; l++) { - Menus.remove({ _id: removeMenuIds[l] }); - } + return await Menus.removeAsync({ menuComplete: true }); }, - 'addto.Menu' (menuId, menuItem, menuItemId, dateSrv, isLinked) { + async 'addto.Menu' (menuId, menuItem, menuItemId, dateSrv, isLinked) { check(menuId, String); check(menuItem, String); check(menuItemId, String); @@ -128,9 +95,9 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to add items to menus. Make sure you are logged in with valid user credentials.'); } - serveDateActual = new Date(dateSrv); + let serveDateActual = new Date(dateSrv); - return Menus.update({ _id: menuId }, { + return await Menus.updateAsync({ _id: menuId }, { $addToSet: { menuItems: { @@ -143,7 +110,7 @@ Meteor.methods({ } }); }, - 'link.inMenu' (menuItemId, isLinked) { + async 'link.inMenu' (menuItemId, isLinked) { check(menuItemId, String); check(isLinked, Boolean); @@ -151,13 +118,13 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to link menu items to products. Make sure you are logged in with valid user credentials.'); } - return Menus.update({ 'menuItems.menuItemId': menuItemId }, { + return await Menus.updateAsync({ 'menuItems.menuItemId': menuItemId }, { $set: { "menuItems.$.isLinked": isLinked } }); }, - 'delete.itemFromMenu' (itemIds) { + async 'delete.itemFromMenu' (itemIds) { check(itemIds, String); if (!this.userId) { @@ -165,9 +132,9 @@ Meteor.methods({ } let ids = itemIds.split('_'); - console.log("item ids: " + ids[0] + " and " + ids[1]); + // console.log("item ids: " + ids[0] + " and " + ids[1]); - return Menus.update({ _id: ids[0] }, { + return await Menus.updateAsync({ _id: ids[0] }, { $pull: { menuItems: { menuItemId: ids[1], diff --git a/imports/api/menuItems.js b/imports/api/menuItems.js index eca07b0..232d510 100644 --- a/imports/api/menuItems.js +++ b/imports/api/menuItems.js @@ -12,21 +12,21 @@ MenuItems.allow({ }); Meteor.methods({ - 'add.menuItem' (itemName) { + async 'add.menuItem' (itemName) { check(itemName, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to add items. Make sure you are logged in with valid user credentials.'); } - return MenuItems.insert({ + return await MenuItems.insertAsync({ itemName: itemName, addedBy: this.userId, dateAddedtoMenu: new Date(), isLinked: false, }); }, - 'update.menuItemLinked' (itemId, isLinked) { + async 'update.menuItemLinked' (itemId, isLinked) { check(itemId, String); check(isLinked, Boolean); @@ -34,13 +34,13 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to set this menu item as linked to products. Make sure you are logged in with valid user credentials.'); } - return MenuItems.update({ _id: itemId }, { + return await MenuItems.updateAsync({ _id: itemId }, { $set: { isLinked: isLinked, } }); }, - 'edit.madeItem' (itemId, itemName) { + async 'edit.madeItem' (itemId, itemName) { check(itemId, String); check(itemName, String); @@ -48,22 +48,22 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to edit menu items. Make sure you are logged in with valid user credentials.'); } - return MenuItems.update({ _id: itemId }, { + return await MenuItems.updateAsync({ _id: itemId }, { $set: { itemName: itemName, } }); }, - 'delete.menuItem' (itemId) { + async 'delete.menuItem' (itemId) { check(itemId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to delete menu items. Make sure you are logged in with valid user credentials.'); } - return MenuItems.remove({ _id: itemId }); + return await MenuItems.removeAsync({ _id: itemId }); }, - 'shiftDate' (itemId, momentAddDay) { + async 'shiftDate' (itemId, momentAddDay) { check(itemId, String); check(momentAddDay, String); @@ -71,7 +71,7 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to shift menu item dates. Make sure you are logged in with valid user credentials.'); } - return MenuItems.update({ _id: itemId }, { + return await MenuItems.updateAsync({ _id: itemId }, { $set: { serveDate: momentAddDay, } diff --git a/imports/api/menuProdLinks.js b/imports/api/menuProdLinks.js index 042755b..3dba4fc 100644 --- a/imports/api/menuProdLinks.js +++ b/imports/api/menuProdLinks.js @@ -13,7 +13,7 @@ MenuProdLinks.allow({ }); Meteor.methods({ - 'add.menuProdLinks' (menuItemId, menuItemName, prodNameArray) { + async 'add.menuProdLinks' (menuItemId, menuItemName, prodNameArray) { check(menuItemId, String); check(menuItemName, String); check(prodNameArray, [Object]); @@ -22,19 +22,19 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to add menu and product links. Make sure you are logged in with valid user credentials.'); }; - let linkExists = MenuProdLinks.findOne({ menuItemId: menuItemId }); + let linkExists = await MenuProdLinks.findOneAsync({ menuItemId: menuItemId }); if (linkExists) { - console.log("sending to update method instead."); - Meteor.call('update.menuPordLInks', menuItemId, menuItemName, prodNameArray, function(err, result) { + // console.log("sending to update method instead."); + await Meteor.callAsync('update.menuPordLInks', menuItemId, menuItemName, prodNameArray, function(err, result) { if (err) { - console.log(" ERROR moving to the update method: " + err); + // console.log(" ERROR moving to the update method: " + err); } else { - console.log("Successfully updated the menu prod links.") + // console.log("Successfully updated the menu prod links.") } }); } else { - return MenuProdLinks.insert({ + return await MenuProdLinks.insertAsync({ menuItemId: menuItemId, menuItemName: menuItemName, products: prodNameArray, @@ -43,7 +43,7 @@ Meteor.methods({ }); } }, - 'update.menuPordLInks' (menuItemId, menuItemName, prodNameArray) { + async 'update.menuPordLInks' (menuItemId, menuItemName, prodNameArray) { check(menuItemId, String); check(menuItemName, String); check(prodNameArray, [Object]); @@ -52,7 +52,8 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to add menu and product links. Make sure you are logged in with valid user credentials.'); }; - return MenuProdLinks.update({ menuItemId: menuItemId }, { + console.log(" ---- Doing an Update instead! ---- "); + return await MenuProdLinks.updateAsync({ menuItemId: menuItemId }, { $set: { products: prodNameArray, dateUpdated: Date(), diff --git a/imports/api/products.js b/imports/api/products.js index d63bf2a..35e8206 100644 --- a/imports/api/products.js +++ b/imports/api/products.js @@ -12,7 +12,7 @@ Products.allow({ }); Meteor.methods({ - 'add.product' (prodName, prodStore) { + async 'add.product' (prodName, prodStore) { check(prodName, String); check(prodStore, [String]); @@ -24,17 +24,20 @@ Meteor.methods({ // first does this product already exist? - let prodExists = Products.findOne({ prodName: pname }); - - if (!prodExists) { - return Products.insert({ - prodName: pname, - prodOwner: this.userId, - prodStore: prodStore, - }); + let prodExists = await Products.findOneAsync({ prodName: pname }); + try { + if (!prodExists) { + return await Products.insertAsync({ + prodName: pname, + prodOwner: this.userId, + prodStore: prodStore, + }); + } + } catch(error) { + console.log(" ERROR adding Pdocut: " + error); } }, - 'edit.product' (prodId, prodName, prodStore) { + async 'edit.product' (prodId, prodName, prodStore) { check(prodId, String); check(prodName, String); check(prodStore, [String]); @@ -45,20 +48,30 @@ Meteor.methods({ let pname = prodName.charAt(0).toUpperCase() + prodName.slice(1); - return Products.update({ _id: prodId }, { + return await Products.updateAsync({ _id: prodId }, { $set: { prodName: pname, prodStore: prodStore, } }); }, - 'delete.product' (prodId) { + async 'delete.product' (prodId) { check(prodId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to delete products. Make sure you are logged in with valid user credentials.'); } - return Products.remove({ _id: prodId }); + return await Products.removeAsync({ _id: prodId }); + }, + async 'clean.Products' () { + if (!this.userId) { + throw new Meteor.Error('You are not allowed to delete products. Make sure you are logged in with valid user credentials.'); + } + + // first we need to find potential duplicate products + // next we need to see which of those are on incomplete lists + // Then we'll update those to use the main products ID instead + // finally we'll delete the duplicates } }); diff --git a/imports/api/recipeItems.js b/imports/api/recipeItems.js index a0688be..42b374f 100644 --- a/imports/api/recipeItems.js +++ b/imports/api/recipeItems.js @@ -12,7 +12,7 @@ RecipeItems.allow({ }); Meteor.methods({ - 'add.recipeItem' (recipeId, recipeItemType, recipeItem) { + async 'add.recipeItem' (recipeId, recipeItemType, recipeItem) { check(recipeId, String); check(recipeItemType, String); check(recipeItem, String); @@ -21,13 +21,13 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to add recipe items. Make sure you are logged in with valid user credentials.'); } - return RecipeItems.insert({ + return await RecipeItems.insertAsync({ recipeId: recipeId, recipeItemType: recipeItemType, recipeItem: recipeItem, }); }, - 'edit.recipeItem' (recipeItemId, recipeId, recipeItemType, recipeItem) { + async 'edit.recipeItem' (recipeItemId, recipeId, recipeItemType, recipeItem) { check(recipeItemId, String); check(recipeId, String); check(recipeItemType, String); @@ -37,7 +37,7 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to edit recipe items. Make sure you are logged in with valid user credentials.'); } - return RecipeItems.update({ _id: recipeItemId }, { + return await RecipeItems.updateAsync({ _id: recipeItemId }, { $set: { recipeId: recipeId, recipeItemType: recipeItemType, @@ -45,13 +45,13 @@ Meteor.methods({ } }); }, - 'delete.recipeItem' (recipeItemId) { + async 'delete.recipeItem' (recipeItemId) { check(recipeItemId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to delete recipe items. Make sure you are logged in with valid user credentials.'); } - return RecipeItems.remove({ _id: recipeItemId }); + return await RecipeItems.removeAsync({ _id: recipeItemId }); } }); \ No newline at end of file diff --git a/imports/api/recipes.js b/imports/api/recipes.js index 9ad2169..008bb51 100644 --- a/imports/api/recipes.js +++ b/imports/api/recipes.js @@ -12,20 +12,20 @@ Recipes.allow({ }); Meteor.methods({ - 'add.recipe' (recipeName) { + async 'add.recipe' (recipeName) { check(recipeName, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to add recipes. Make sure you are logged in with valid user credentials.'); } - return Recipes.insert({ + return await Recipes.insertAsync({ recipeName: recipeName, addedBy: this.userId, addedOn: new Date(), }); }, - 'edit.recipe' (recipeId, recipeName) { + async 'edit.recipe' (recipeId, recipeName) { check(recipeId, String); check(recipeName, String); @@ -33,7 +33,7 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to add recipes. Make sure you are logged in with valid user credentials.'); } - return Recipes.update({ _id: recipeId }, { + return await Recipes.updateAsync({ _id: recipeId }, { $set: { recipeName: recipeName, updatedOn: new Date(), @@ -41,13 +41,13 @@ Meteor.methods({ } }); }, - 'delete.recipe' (recipeId) { + async 'delete.recipe' (recipeId) { check(recipeId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to delete recipes. Make sure you are logged in with valid user credentials.'); } - return Recipes.remove({ _id: recipeId }); + return await Recipes.removeAsync({ _id: recipeId }); } }); \ No newline at end of file diff --git a/imports/api/shopList.js b/imports/api/shopList.js index b013d50..637e740 100644 --- a/imports/api/shopList.js +++ b/imports/api/shopList.js @@ -12,19 +12,19 @@ ShopLists.allow({ }); Meteor.methods({ - 'add.shopList' (shopName) { + async 'add.shopList' (shopName) { check(shopName, Sring); if (!this.userId) { throw new Meteor.Error('You are not allowed to add shopping lists. Make sure you are logged in with valid user credentials.'); } - return ShopLists.insert({ + return await ShopLists.insert({ shopName: shopName, shopOwner: this.userId, }); }, - 'edit.shopList' (shopId, shopName) { + async 'edit.shopList' (shopId, shopName) { check(shopId, String); check(shopName, String); @@ -32,19 +32,19 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to edit shopping lists. Make sure you are logged in with valid user credentials.'); } - return ShopLists.update({ _id: shopId }, { + return await ShopLists.update({ _id: shopId }, { $set: { shopName: shopName, } }); }, - 'delete.shopList' (shopId) { + async 'delete.shopList' (shopId) { check(shopId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to delete shopping lists. Make sure you are logged in with valid user credentials.'); } - return ShopLists.remove({ _id: shopId }); + return await ShopLists.remove({ _id: shopId }); }, }); \ No newline at end of file diff --git a/imports/api/stores.js b/imports/api/stores.js index 4638595..c97b381 100644 --- a/imports/api/stores.js +++ b/imports/api/stores.js @@ -12,19 +12,19 @@ Stores.allow({ }); Meteor.methods({ - 'add.store' (storeName) { + async 'add.store' (storeName) { check(storeName, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to add stores. Make sure you are logged in with valid user credentials.'); } - return Stores.insert({ + return await Stores.insertAsync({ storeName: storeName, owner: this.userId, }); }, - 'edit.store' (storeId, storeName) { + async 'edit.store' (storeId, storeName) { check(storeId, String); check(storeName, String); @@ -32,19 +32,19 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to edit stores. Make sure you are logged in with valid user credentials.'); } - return Stores.update({ _id: storeId }, { + return await Stores.updateAsync({ _id: storeId }, { $set: { storeName: storeName, } }); }, - 'delete.store' (storeId) { + async 'delete.store' (storeId) { check(storeId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to delete stores. Make sure you are logged in with valid user credentials.'); } - return Stores.remove({ _id: storeId }); + return await Stores.removeAsync({ _id: storeId }); }, }); \ No newline at end of file diff --git a/imports/api/systemConfig.js b/imports/api/systemConfig.js index 3f848be..7126453 100644 --- a/imports/api/systemConfig.js +++ b/imports/api/systemConfig.js @@ -12,7 +12,7 @@ SysConfig.allow({ }); Meteor.methods({ - 'add.noSysAdminReg' (admReg, genReg) { + async 'add.noSysAdminReg' (admReg, genReg) { check(admReg, Boolean); check(genReg, Boolean); @@ -20,25 +20,39 @@ Meteor.methods({ throw new Meteor.Error('Not able to change registration setting. Make sure you are logged in with valid system administrator credentials.'); } - let curr = SysConfig.findOne({}); - if (typeof curr != 'undefined') { - let configId = curr._id; - Meteor.call('edit.noSysAdminReg', configId, admReg, genReg, function(err, result) { - if (err) { - console.log(" ERROR updating sys admin reg: " + err); - } else { - console.log("Success updating sys admin reg."); - } - }); + const currConfig = async() => { + let curr = await SysConfig.findOneAsync({}); + if (!curr) { + try { + return await SysConfig.insertAsync({ + SysAdminReg: admReg, + dateAdded: new Date(), + allowReg: genReg, + }); + } catch(error) { + console.log(" ERROR trying to insert system config:"); + console.log(error.message); + console.log(error.stack); + } } else { - return SysConfig.insert({ - SysAdminReg: admReg, - dateAdded: new Date(), - allowReg: genReg, - }); + try { + let configId = curr._id; + const addNoSys = await Meteor.callAsync('edit.noSysAdminReg', configId, admReg, genReg); + if (!addNoSys) { + // console.log(" Couldn't edit the system config."); + } else { + // console.log("Success updating sys admin reg."); + } + } catch(error) { + console.log(" ERROR trying to pull current system config:"); + console.log(error.message); + console.log(error.stack); + } } + } + currConfig(); }, - 'edit.noSysAdminReg' (configId, canReg, genReg) { + async 'edit.noSysAdminReg' (configId, canReg, genReg) { check(canReg, Boolean); check(configId, String); check(genReg, Boolean); @@ -47,7 +61,7 @@ Meteor.methods({ throw new Meteor.Error('Not able to change registration setting. Make sure you are logged in with valid system administrator credentials.'); } - return SysConfig.update({ _id: configId }, { + return await SysConfig.updateAsync({ _id: configId }, { $set: { SysAdminReg: canReg, allowReg: genReg, @@ -55,7 +69,7 @@ Meteor.methods({ } }); }, - 'allow.updateInfo' (allowUpdate) { + async 'allow.updateInfo' (allowUpdate) { check(allowUpdate, Boolean); if (!this.userId) { @@ -66,7 +80,7 @@ Meteor.methods({ let configId = curr._id; - return SysConfig.update({ _id: configId }, { + return await SysConfig.updateAsync({ _id: configId }, { $set: { allowUpdates: allowUpdate, } diff --git a/imports/api/tasks.js b/imports/api/tasks.js index 7e581b1..a3d5a83 100644 --- a/imports/api/tasks.js +++ b/imports/api/tasks.js @@ -13,7 +13,7 @@ TaskItems.allow({ }); Meteor.methods({ - 'add.task' (taskNameArr, assignedTo, assignedToId, taskDateArr, actDate) { + async 'add.task' (taskNameArr, assignedTo, assignedToId, taskDateArr, actDate) { check(taskNameArr, [Object]); check(assignedTo, String); check(taskDateArr, [String]); @@ -23,24 +23,14 @@ Meteor.methods({ if (!this.userId) { throw new Meteor.Error('You are not allowed to add tasks. Make sure you are logged in with valid user credentials.'); } - - let username; - - if (assignedTo == "self") { - let userInfo = Meteor.users.findOne({ _id: this.userId }); - username = userInfo.profile.fullname; - assignedToId = this.userId; - } else { - username = assignedTo; - } - - for (i=0; i < taskDateArr.length; i++) { - for (j=0; j < taskNameArr.length; j++) { - TaskItems.insert({ + + for (let i=0; i < taskDateArr.length; i++) { + for (let j=0; j < taskNameArr.length; j++) { + await TaskItems.insertAsync({ taskName: taskNameArr[j].id, taskDate: taskDateArr[i], actualDate: actDate[i], - assignedTo: username, + assignedTo: assignedTo, assignedToId: assignedToId, isComplete: false, completedOn: null, @@ -50,7 +40,7 @@ Meteor.methods({ } } }, - 'add.mytask' (taskName, assignedTo, assignedToId, taskDate, actDate) { + async 'add.myTask' (taskName, taskDate, actDate) { check(taskName, String); check(taskDate, String); check(actDate, Date); @@ -59,29 +49,28 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to add tasks. Make sure you are logged in with valid user credentials.'); } - let username; - - if (assignedTo == "self") { - let userInfo = Meteor.users.findOne({ _id: this.userId }); - username = userInfo.profile.fullname; - assignedToId = this.userId; + let userInfo = await Meteor.users.findOneAsync({ _id: this.userId }); + if (!userInfo) { + // console.log("No matching user info found.") } else { - username = assignedTo; + try { + return await TaskItems.insertAsync({ + taskName: taskName, + taskDate: taskDate, + actualDate: actDate, + assignedTo: userInfo.profile.fullname, + assignedToId: this.userId, + isComplete: false, + completedOn: null, + assignedOn: new Date(), + assignedBy: this.userId, + }); + } catch(error) { + console.log(" ERROR adding tasksL " + error.message); + } } - - return TaskItems.insert({ - taskName: taskName, - taskDate: taskDate, - actualDate: actDate, - assignedTo: username, - assignedToId: assignedToId, - isComplete: false, - completedOn: null, - assignedOn: new Date(), - assignedBy: this.userId, - }); }, - 'edit.task' (taskId, taskName, assignedTo, taskDate) { + async 'edit.task' (taskId, taskName, assignedTo, taskDate) { check(taskId, String); check(taskName, String); check(assignedTo, String); @@ -91,7 +80,7 @@ Meteor.methods({ throw new Meteor.Error('You are not allowed to edit tasks. Make sure you are logged in with valid user credentials.'); } - return TaskItems.update({ _id: taskId }, { + return await TaskItems.updateAsync({ _id: taskId }, { $set: { taskName: taskName, taskDate: taskDate, @@ -101,23 +90,23 @@ Meteor.methods({ } }); }, - 'delete.task' (taskId) { + async 'delete.task' (taskId) { check(taskId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to delete tasks. Make sure you are logged in with valid user credentials.'); } - return TaskItems.remove({ _id: taskId }); + return await TaskItems.removeAsync({ _id: taskId }); }, - 'markTask.complete' (taskId) { + async 'markTask.complete' (taskId) { check(taskId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to mark tasks complete. Make sure you are logged in with valid user credentials.'); } - return TaskItems.update({ _id: taskId }, { + return await TaskItems.updateAsync({ _id: taskId }, { $set: { isComplete: true, completedOn: new Date(), @@ -125,14 +114,14 @@ Meteor.methods({ } }); }, - 'markTask.notComplete' (taskId) { + async 'markTask.notComplete' (taskId) { check(taskId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to mark tasks not complete. Make sure you are logged in with valid user credentials.'); } - return TaskItems.update({ _id: taskId }, { + return await TaskItems.updateAsync({ _id: taskId }, { $set: { isComplete: false, markedUncomplteOn: new Date(), @@ -140,7 +129,7 @@ Meteor.methods({ } }); }, - 'clean.Tasks' (timeFrame) { + async 'clean.Tasks' (timeFrame) { check(timeFrame, String); if (!this.userId) { @@ -151,29 +140,29 @@ Meteor.methods({ let upToDate = ""; switch(timeFrame) { case "1-week": - console.log("1 Week"); + // console.log("1 Week"); upToDate = 7 * 24 * 60 * 60 * 1000; break; case "2-weeks": - console.log("2 Week"); + // console.log("2 Week"); upToDate = 14 * 24 * 60 * 60 * 1000; break; case '1-month': - console.log("1 month"); + // console.log("1 month"); upToDate = 30 * 24 * 60 * 60 * 1000; break; case '3-months': - console.log("3 months"); + // console.log("3 months"); upToDate = 90 * 24 * 60 * 60 * 1000; break; case 'all': - console.log("all"); + // console.log("all"); upToDate = 1 * 24 * 60 * 60 * 1000; break; default: break; } - return TaskItems.remove({ actualDate: { $lt: new Date((new Date()) - upToDate )}}); + return await TaskItems.removeAsync({ actualDate: { $lt: new Date((new Date()) - upToDate )}}); } }); \ No newline at end of file diff --git a/imports/api/updateInfo.js b/imports/api/updateInfo.js index 75ce240..34f222b 100644 --- a/imports/api/updateInfo.js +++ b/imports/api/updateInfo.js @@ -12,24 +12,24 @@ UpdateInfo.allow({ }); Meteor.methods({ - 'add.updateInfo' (updateObject) { + async 'add.updateInfo' (updateObject) { check(updateObject, Object); - UpdateInfo.insert({ + return await UpdateInfo.insertAsync({ title: updateObject.title, description: updateObject.description, dateRelease: updateObject.date, releaseLink: updateObject.link }); }, - 'markUpdate.read' (updateId) { + async 'markUpdate.read' (updateId) { check(updateId, String); if (!this.userId) { throw new Meteor.Error('You are not allowed to mark updates as read. Make sure you are logged in with valid user credentials.'); } - return UpdateInfo.update({ _id: updateId }, { + return await UpdateInfo.updateAsync({ _id: updateId }, { $set: { viewed: true } diff --git a/imports/api/userConfig.js b/imports/api/userConfig.js index 354230a..ac6ab2e 100644 --- a/imports/api/userConfig.js +++ b/imports/api/userConfig.js @@ -9,43 +9,38 @@ UserConfig.allow({ // if use id exists, allow insert return !!userId; }, + update: function(userId, doc){ + // if use id exists, allow insert + return !!userId; + }, }); Meteor.methods({ - 'add.darkModePref' (pref) { + async 'add.darkModePref' (pref) { check(pref, String); if (!this.userId) { - throw new Meteor.Error('Not able to change registration setting. Make sure you are logged in with valid system administrator credentials.'); + throw new Meteor.Error('Not able to change theme setting. Make sure you are logged in with valid system administrator credentials.'); } - return UserConfig.insert({ + return await UserConfig.insertAsync({ user: this.userId, darkMode: pref, dateAdded: Date() }); }, - 'update.darkModePref' (pref) { + async 'update.darkModePref' (pref) { check(pref, String); if (!this.userId) { - throw new Meteor.Error('Not able to change registration setting. Make sure you are logged in with valid system administrator credentials.'); + throw new Meteor.Error('Not able to change theme setting. Make sure you are logged in with valid system administrator credentials.'); } - let myConfig = UserConfig.findOne({ user: this.userId }); - if (typeof myConfig == 'undefined') { - Meteor.call('add.darkModePref', pref, function(err, result) { - if (err) { - console.log(" ERROR calling the add functioin for dark mode: " + err); - } - }); - } else { - return UserConfig.update({ user: this.userId }, { - $set: { - darkMode: pref, - dateUpdate: Date() - } - }); - } + return await UserConfig.updateAsync({ user: this.userId }, { + $set: { + darkMode: pref, + dateUpdate: Date() + } + }); } }); \ No newline at end of file diff --git a/imports/api/userConfigOptions.js b/imports/api/userConfigOptions.js index d7b59c3..09c9207 100644 --- a/imports/api/userConfigOptions.js +++ b/imports/api/userConfigOptions.js @@ -12,10 +12,10 @@ UserConfigOptions.allow({ }); Meteor.methods({ - 'change.userPass' (usersId, password) { + async 'change.userPass' (usersId, password) { check(usersId, String); check(password, String); - return Accounts.setPassword(usersId, password); + return await Accounts.setPasswordAsync(usersId, password); }, }); \ No newline at end of file diff --git a/imports/api/userLast.js b/imports/api/userLast.js index 93c12a9..a370e2f 100644 --- a/imports/api/userLast.js +++ b/imports/api/userLast.js @@ -12,7 +12,7 @@ UserLast.allow({ }); Meteor.methods({ - 'add.userLast' (view, viewId) { + async 'add.userLast' (view, viewId) { check(view, String); check(viewId, String); @@ -22,24 +22,33 @@ Meteor.methods({ // first let's find out if there's an entry for this user and view, and if so // we'll just edit that entry with updated information - let userListInfo = UserLast.findOne({ userId: this.userId, view: view }); - if (typeof userListInfo != 'undefined' && userListInfo != "" && userListInfo != null) { - // entry exists, call the edit function instead - Meteor.call('edit.userLast', view, viewId, function(err, result) { - if (err) { - console.log(" ERROR moving user to edit for last view: " + err); - } - }); - } else { - return UserLast.insert({ + let userListInfo = await UserLast.findOneAsync({ userId: this.userId, view: view }); + if (!userListInfo) { + // console.log("Adding new user last item."); + return await UserLast.insertAsync({ userId: this.userId, view: view, viewId: viewId, dateAdded: Date(), }); + } else { + // console.log("Editing existing user last itme."); + // entry exists, call the edit function instead + let result = await Meteor.callAsync('edit.userLast', view, viewId); + if (!result) { + try { + // console.log("Issue editing existing entry in userLast. Check the logs."); + } catch(error) { + console.log(" ERROR adding userLast item: " + error); + console.log(error.message); + console.log(error.stack); + } + } else { + return true; + } } }, - 'edit.userLast' (view, viewId) { + async 'edit.userLast' (view, viewId) { check(view, String); check(viewId, String); @@ -47,7 +56,8 @@ Meteor.methods({ throw new Meteor.Error('Not able to change user view last setting. Make sure you are logged in with valid system administrator credentials.'); } - return UserLast.update({ view: view, userId: this.userId }, { + // console.log("Edit in progress."); + return await UserLast.updateAsync({ view: view, userId: this.userId }, { $set: { viewId: viewId, dateLastUpdate: Date(), diff --git a/lib/routes.js b/lib/routes.js index 6071936..0a4df86 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -1,132 +1,134 @@ +import { FlowRouter } from 'meteor/ostrio:flow-router-extra'; + FlowRouter.route('/dashboard', { name: 'home', action() { - BlazeLayout.render('MainLayout', { main: "dashboard" }); + this.render('MainLayout', { main: "dashboard" }); } }); FlowRouter.route('/', { name: 'homeNoRoute', action() { - BlazeLayout.render('MainLayout', { main: "dashboard" }); + this.render('MainLayout', { main: "dashboard" }); } }); FlowRouter.route('/', { name: 'homeNotLoggedIn', action() { - BlazeLayout.render('MainLayout', { notLoggedIn: "login" }); + this.render('MainLayout', { notLoggedIn: "login" }); } }); FlowRouter.route('/login', { name: 'login', action() { - BlazeLayout.render('MainLayout', { notLoggedIn: "login" }); + this.render('MainLayout', { notLoggedIn: "login" }); } }); FlowRouter.route('/reg', { name: 'reg', action() { - BlazeLayout.render('MainLayout', { notLoggedIn: "reg" }); + this.render('MainLayout', { notLoggedIn: "reg" }); } }); FlowRouter.route('/userMgmt', { name: 'userMgmt', action() { - BlazeLayout.render('MainLayout', { main: 'userMgmt' }); + this.render('MainLayout', { main: 'userMgmt' }); } }); FlowRouter.route('/manageStore', { name: 'storeMgmt', action() { - BlazeLayout.render('MainLayout', { main: 'storeMgmt' }); + this.render('MainLayout', { main: 'storeMgmt' }); } }); FlowRouter.route('/manage', { name: 'mgmtPage', action() { - BlazeLayout.render('MainLayout', { main: 'mgmtPage' }); + this.render('MainLayout', { main: 'mgmtPage' }); } }); FlowRouter.route('/manageProduct', { name: 'manageProduct', action() { - BlazeLayout.render('MainLayout', { main: 'prodMgmt' }); + this.render('MainLayout', { main: 'prodMgmt' }); } }); FlowRouter.route('/manageLists', { name: 'manageLists', action() { - BlazeLayout.render('MainLayout', { main: 'listMgmt' }); + this.render('MainLayout', { main: 'listMgmt' }); } }); FlowRouter.route('/mylists', { name: 'mylists', action() { - BlazeLayout.render('MainLayout', { main: 'listsMain' }); + this.render('MainLayout', { main: 'listsMain' }); } }); FlowRouter.route('/listItems', { name: 'listItems', action() { - BlazeLayout.render('MainLayout', { main: 'listItemsMain' }); + this.render('MainLayout', { main: 'listItemsMain' }); } }); FlowRouter.route('/mymenus', { name: 'mymenus', action() { - BlazeLayout.render('MainLayout', { main: 'mainMenu' }); + this.render('MainLayout', { main: 'mainMenu' }); } }); FlowRouter.route('/menuItems', { name: 'menuItems', action() { - BlazeLayout.render('MainLayout', { main: 'menuItems' }); + this.render('MainLayout', { main: 'menuItems' }); } }); FlowRouter.route('/taskHome', { name: 'taskHome', action() { - BlazeLayout.render('MainLayout', { main: 'taskHome' }); + this.render('MainLayout', { main: 'taskHome' }); } }); FlowRouter.route('/myTasks', { name: 'myTasks', action() { - BlazeLayout.render('MainLayout', { main: 'myTasks' }); + this.render('MainLayout', { main: 'myTasks' }); } }); FlowRouter.route('/systemAdmin', { name: 'systemAdmin', action() { - BlazeLayout.render('MainLayout', { main: 'systemAdmin' }); + this.render('MainLayout', { main: 'systemAdmin' }); } }); FlowRouter.route('/cleanUp', { name: 'cleanUp', action() { - BlazeLayout.render('MainLayout', { main: 'cleanUp'}); + this.render('MainLayout', { main: 'cleanUp'}); } }); FlowRouter.route('/mySettings', { name: 'mySettings', action() { - BlazeLayout.render('MainLayout', { main: 'userConfig'}); + this.render('MainLayout', { main: 'userConfig'}); } }); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 119939f..a78ea76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,36 +1,53 @@ { - "name": "pPickup", + "name": "get-my", + "lockfileVersion": 3, "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", - "requires": { - "regenerator-runtime": "^0.13.4" + "packages": { + "": { + "name": "get-my", + "dependencies": { + "@babel/runtime": "^7.15.3", + "jquery": "^3.6.0", + "meteor-node-stubs": "^1.2.5", + "moment": "^2.29.4", + "node-cron": "^3.0.3", + "rss-url-parser": "^3.0.0", + "typeahead-standalone": "^5.2.0" } }, - "addressparser": { + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/addressparser": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", - "integrity": "sha512-aQX7AISOMM7HFE0iZ3+YnD07oIeJqWGVnJ+ZIKaBZAk03ftmVYVqsGas/rbXKR21n4D/hKCSHypvcyOkds/xzg==" + "integrity": "sha512-aQX7AISOMM7HFE0iZ3+YnD07oIeJqWGVnJ+ZIKaBZAk03ftmVYVqsGas/rbXKR21n4D/hKCSHypvcyOkds/xzg==", + "license": "MIT" }, - "array-indexofobject": { + "node_modules/array-indexofobject": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-indexofobject/-/array-indexofobject-0.0.1.tgz", - "integrity": "sha512-tpdPBIBm4TMNxSp8O3pZgC7mF4+wn9SmJlhE+7bi5so6x39PvzUqChQMbv93R5ilYGZ1HV+Neki4IH/i+87AoQ==" + "integrity": "sha512-tpdPBIBm4TMNxSp8O3pZgC7mF4+wn9SmJlhE+7bi5so6x39PvzUqChQMbv93R5ilYGZ1HV+Neki4IH/i+87AoQ==", + "license": "MIT" }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" }, - "feedparser": { + "node_modules/feedparser": { "version": "2.2.10", "resolved": "https://registry.npmjs.org/feedparser/-/feedparser-2.2.10.tgz", "integrity": "sha512-WoAOooa61V8/xuKMi2pEtK86qQ3ZH/M72EEGdqlOTxxb3m6ve1NPvZcmPFs3wEDfcBbFLId2GqZ4YjsYi+h1xA==", - "requires": { + "license": "MIT", + "dependencies": { "addressparser": "^1.0.1", "array-indexofobject": "~0.0.1", "lodash.assign": "^4.2.0", @@ -40,856 +57,148 @@ "mri": "^1.1.5", "readable-stream": "^2.3.7", "sax": "^1.2.4" + }, + "bin": { + "feedparser": "bin/feedparser.js" + }, + "engines": { + "node": ">= 10.18.1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, - "isarray": { + "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" }, - "jquery": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", - "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "license": "MIT" }, - "lodash.assign": { + "node_modules/lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "license": "MIT" }, - "lodash.get": { + "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "license": "MIT" }, - "lodash.has": { + "node_modules/lodash.has": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", - "integrity": "sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==" + "integrity": "sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==", + "license": "MIT" }, - "lodash.uniq": { + "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" }, - "meteor-node-stubs": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.2.5.tgz", - "integrity": "sha512-FLlOFZx3KnZ5s3yPCK+x58DyX9ewN+oQ12LcpwBXMLtzJ/YyprMQVivd6KIrahZbKJrNenPNUGuDS37WUFg+Mw==", - "requires": { - "assert": "^2.0.0", + "node_modules/meteor-node-stubs": { + "version": "1.2.24", + "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.2.24.tgz", + "integrity": "sha512-tw9QzDFVOI5A5CcEw4tTD6CjF+Lk14uzhy2gWH5ImoH4mx4pyPVcha9MmyVur+rEVgpzk+aMG6rs3RxAF9SwiA==", + "bundleDependencies": [ + "@meteorjs/crypto-browserify", + "assert", + "browserify-zlib", + "buffer", + "console-browserify", + "constants-browserify", + "domain-browser", + "events", + "https-browserify", + "os-browserify", + "path-browserify", + "process", + "punycode", + "querystring-es3", + "readable-stream", + "stream-browserify", + "stream-http", + "string_decoder", + "timers-browserify", + "tty-browserify", + "url", + "util", + "vm-browserify" + ], + "license": "MIT", + "dependencies": { + "@meteorjs/crypto-browserify": "^3.12.1", + "assert": "^2.1.0", "browserify-zlib": "^0.2.0", "buffer": "^5.7.1", "console-browserify": "^1.2.0", "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.12.0", - "domain-browser": "^4.22.0", - "elliptic": "^6.5.4", + "domain-browser": "^4.23.0", "events": "^3.3.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", - "path-browserify": "^1.0.0", + "path-browserify": "^1.0.1", "process": "^0.11.10", "punycode": "^1.4.1", "querystring-es3": "^0.2.1", - "readable-stream": "^3.6.0", + "readable-stream": "^3.6.2", + "sha.js": "^2.4.12", "stream-browserify": "^3.0.0", "stream-http": "^3.2.0", "string_decoder": "^1.3.0", "timers-browserify": "^2.0.12", "tty-browserify": "0.0.1", - "url": "^0.11.0", - "util": "^0.12.4", + "url": "^0.11.4", + "util": "^0.12.5", "vm-browserify": "^1.1.2" - }, + } + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign": { + "version": "4.2.6", + "inBundle": true, + "license": "ISC", "dependencies": { - "asn1.js": { - "version": "5.4.1", - "bundled": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "bundled": true - } - } - }, - "assert": { - "version": "2.0.0", - "bundled": true, - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "available-typed-arrays": { - "version": "1.0.4", - "bundled": true - }, - "base64-js": { - "version": "1.5.1", - "bundled": true - }, - "bn.js": { - "version": "5.2.0", - "bundled": true - }, - "brorand": { - "version": "1.1.0", - "bundled": true - }, - "browserify-aes": { - "version": "1.2.0", - "bundled": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "bundled": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "bundled": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "bundled": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "bundled": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "bundled": true, - "requires": { - "pako": "~1.0.5" - } - }, - "buffer": { - "version": "5.7.1", - "bundled": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-xor": { - "version": "1.0.3", - "bundled": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "bundled": true - }, - "call-bind": { - "version": "1.0.2", - "bundled": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "cipher-base": { - "version": "1.0.4", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "console-browserify": { - "version": "1.2.0", - "bundled": true - }, - "constants-browserify": { - "version": "1.0.0", - "bundled": true - }, - "create-ecdh": { - "version": "4.0.4", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "bundled": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "bundled": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "bundled": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "bundled": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "define-properties": { - "version": "1.1.3", - "bundled": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "des.js": { - "version": "1.0.1", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "bundled": true - } - } - }, - "domain-browser": { - "version": "4.22.0", - "bundled": true - }, - "elliptic": { - "version": "6.5.4", - "bundled": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "bundled": true - } - } - }, - "es-abstract": { - "version": "1.18.3", - "bundled": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "bundled": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-object-assign": { - "version": "1.1.0", - "bundled": true - }, - "events": { - "version": "3.3.0", - "bundled": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "bundled": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "foreach": { - "version": "2.0.5", - "bundled": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true - }, - "get-intrinsic": { - "version": "1.1.1", - "bundled": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "has": { - "version": "1.0.3", - "bundled": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "bundled": true - }, - "has-symbols": { - "version": "1.0.2", - "bundled": true - }, - "hash-base": { - "version": "3.1.0", - "bundled": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "bundled": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "https-browserify": { - "version": "1.0.0", - "bundled": true - }, - "ieee754": { - "version": "1.2.1", - "bundled": true - }, - "inherits": { - "version": "2.0.4", - "bundled": true - }, - "is-arguments": { - "version": "1.1.0", - "bundled": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.2", - "bundled": true - }, - "is-boolean-object": { - "version": "1.1.1", - "bundled": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "bundled": true - }, - "is-date-object": { - "version": "1.0.4", - "bundled": true - }, - "is-generator-function": { - "version": "1.0.9", - "bundled": true - }, - "is-nan": { - "version": "1.3.2", - "bundled": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "bundled": true - }, - "is-number-object": { - "version": "1.0.5", - "bundled": true - }, - "is-regex": { - "version": "1.1.3", - "bundled": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "bundled": true - }, - "is-symbol": { - "version": "1.0.4", - "bundled": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.5", - "bundled": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - } - }, - "md5.js": { - "version": "1.3.5", - "bundled": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "bundled": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "bundled": true - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "bundled": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "bundled": true - }, - "object-inspect": { - "version": "1.10.3", - "bundled": true - }, - "object-is": { - "version": "1.1.5", - "bundled": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "bundled": true - }, - "object.assign": { - "version": "4.1.2", - "bundled": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "os-browserify": { - "version": "0.3.0", - "bundled": true - }, - "pako": { - "version": "1.0.11", - "bundled": true - }, - "parse-asn1": { - "version": "5.1.6", - "bundled": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "path-browserify": { - "version": "1.0.1", - "bundled": true - }, - "pbkdf2": { - "version": "3.1.2", - "bundled": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "process": { - "version": "0.11.10", - "bundled": true - }, - "public-encrypt": { - "version": "4.0.3", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "bundled": true - } - } - }, - "punycode": { - "version": "1.4.1", - "bundled": true - }, - "querystring": { - "version": "0.2.0", - "bundled": true - }, - "querystring-es3": { - "version": "0.2.1", - "bundled": true - }, - "randombytes": { - "version": "2.1.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "bundled": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "ripemd160": { - "version": "2.0.2", - "bundled": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "setimmediate": { - "version": "1.0.5", - "bundled": true - }, - "sha.js": { - "version": "2.4.11", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "stream-browserify": { - "version": "3.0.0", - "bundled": true, - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "stream-http": { - "version": "3.2.0", - "bundled": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "bundled": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "bundled": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "timers-browserify": { - "version": "2.0.12", - "bundled": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tty-browserify": { - "version": "0.0.1", - "bundled": true - }, - "unbox-primitive": { - "version": "1.0.1", - "bundled": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "url": { - "version": "0.11.0", - "bundled": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "bundled": true - } - } - }, - "util": { - "version": "0.12.4", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "vm-browserify": { - "version": "1.1.2", - "bundled": true - }, - "which-boxed-primitive": { - "version": "1.0.2", - "bundled": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.4", - "bundled": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - } - }, - "xtend": { - "version": "4.0.2", - "bundled": true - } + "bn.js": "^5.2.1", + "brorand": "^1.1.0", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash-base": "~3.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" } }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" - }, - "node-cron": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", - "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", - "requires": { - "uuid": "8.3.2" - } - }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "readable-stream": { + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { + "inBundle": true, + "license": "MIT", + "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", @@ -899,68 +208,1411 @@ "util-deprecate": "~1.0.1" } }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "rss-url-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rss-url-parser/-/rss-url-parser-3.0.0.tgz", - "integrity": "sha512-x39bDQDe1BwpiVwPrjg52ILbTMZc5h7oDPE7FRLa/sgYar7BrNRBTU/msxgokacPZN1rawXmK1rtBU5N7Gsn4A==", - "requires": { - "feedparser": "^2.2.10", - "node-fetch": "^2.6.7" - } - }, - "safe-buffer": { + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "inBundle": true, + "license": "MIT" }, - "sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" - }, - "string_decoder": { + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { + "inBundle": true, + "license": "MIT", + "dependencies": { "safe-buffer": "~5.1.0" } }, - "tr46": { + "node_modules/meteor-node-stubs/node_modules/@meteorjs/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/create-ecdh": { + "version": "4.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/create-ecdh/node_modules/bn.js": { + "version": "4.12.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/@meteorjs/crypto-browserify": { + "version": "3.12.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@meteorjs/browserify-sign": "^4.2.3", + "@meteorjs/create-ecdh": "^4.0.4", + "browserify-cipher": "^1.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/asn1.js": { + "version": "4.10.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/assert": { + "version": "2.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "node_modules/meteor-node-stubs/node_modules/available-typed-arrays": { + "version": "1.0.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/bn.js": { + "version": "5.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/brorand": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/browserify-aes": { + "version": "1.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/browserify-cipher": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/browserify-des": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/browserify-rsa": { + "version": "4.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/meteor-node-stubs/node_modules/browserify-zlib": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/meteor-node-stubs/node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/meteor-node-stubs/node_modules/buffer-xor": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/builtin-status-codes": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/call-bind": { + "version": "1.0.8", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/call-bound": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/cipher-base": { + "version": "1.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/meteor-node-stubs/node_modules/console-browserify": { + "version": "1.2.0", + "inBundle": true + }, + "node_modules/meteor-node-stubs/node_modules/constants-browserify": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/core-util-is": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/create-hash": { + "version": "1.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/create-hmac": { + "version": "1.1.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/meteor-node-stubs/node_modules/define-data-property": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/define-properties": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/des.js": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/diffie-hellman": { + "version": "5.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/domain-browser": { + "version": "4.23.0", + "inBundle": true, + "license": "Artistic-2.0", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/meteor-node-stubs/node_modules/dunder-proto": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/es-define-property": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/es-errors": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/es-object-atoms": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/events": { + "version": "3.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/meteor-node-stubs/node_modules/evp_bytestokey": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/for-each": { + "version": "0.3.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/function-bind": { + "version": "1.1.2", + "inBundle": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/get-intrinsic": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/get-proto": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/gopd": { + "version": "1.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/has-property-descriptors": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/has-symbols": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/has-tostringtag": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/hash-base": { + "version": "3.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/meteor-node-stubs/node_modules/hash.js": { + "version": "1.1.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/hasown": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/hmac-drbg": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/https-browserify": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/meteor-node-stubs/node_modules/inherits": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/meteor-node-stubs/node_modules/is-arguments": { + "version": "1.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/is-callable": { + "version": "1.2.7", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/is-generator-function": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/is-nan": { + "version": "1.3.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/is-regex": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/is-typed-array": { + "version": "1.1.15", + "inBundle": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/isarray": { + "version": "2.0.5", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/math-intrinsics": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/md5.js": { + "version": "1.3.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/miller-rabin": { + "version": "4.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/meteor-node-stubs/node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/minimalistic-assert": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/meteor-node-stubs/node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/object-inspect": { + "version": "1.13.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/object-is": { + "version": "1.1.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/object-keys": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/object.assign": { + "version": "4.1.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/os-browserify": { + "version": "0.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/pako": { + "version": "1.0.11", + "inBundle": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/meteor-node-stubs/node_modules/parse-asn1": { + "version": "5.1.7", + "inBundle": true, + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/meteor-node-stubs/node_modules/path-browserify": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/pbkdf2": { + "version": "3.1.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/meteor-node-stubs/node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/possible-typed-array-names": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/process": { + "version": "0.11.10", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/process-nextick-args": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/public-encrypt": { + "version": "4.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/punycode": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/qs": { + "version": "6.14.0", + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/querystring-es3": { + "version": "0.2.1", + "inBundle": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/meteor-node-stubs/node_modules/randombytes": { + "version": "2.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/randomfill": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/readable-stream": { + "version": "3.6.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/meteor-node-stubs/node_modules/ripemd160": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/meteor-node-stubs/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/safe-regex-test": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/set-function-length": { + "version": "1.2.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/setimmediate": { + "version": "1.0.5", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/sha.js": { + "version": "2.4.12", + "inBundle": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/side-channel": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/side-channel-list": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/side-channel-map": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/side-channel-weakmap": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/stream-browserify": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/stream-http": { + "version": "3.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/string_decoder": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/timers-browserify": { + "version": "2.0.12", + "inBundle": true, + "license": "MIT", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/meteor-node-stubs/node_modules/to-buffer": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/tty-browserify": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/typed-array-buffer": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/url": { + "version": "0.11.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meteor-node-stubs/node_modules/util": { + "version": "0.12.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/meteor-node-stubs/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/vm-browserify": { + "version": "1.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/meteor-node-stubs/node_modules/which-typed-array": { + "version": "1.1.19", + "inBundle": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/meteor-node-stubs/node_modules/xtend": { + "version": "4.0.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/node-cron": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", + "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", + "license": "ISC", + "dependencies": { + "uuid": "8.3.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/rss-url-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rss-url-parser/-/rss-url-parser-3.0.0.tgz", + "integrity": "sha512-x39bDQDe1BwpiVwPrjg52ILbTMZc5h7oDPE7FRLa/sgYar7BrNRBTU/msxgokacPZN1rawXmK1rtBU5N7Gsn4A==", + "license": "MIT", + "dependencies": { + "feedparser": "^2.2.10", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": "^16 || ^18 || ^20", + "npm": "9.x.x" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, - "typeahead-standalone": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typeahead-standalone/-/typeahead-standalone-5.2.0.tgz", - "integrity": "sha512-9GTbCO7XhwimgolmxzuPklftoIa2NEGXBI30n9f5kQZOptvTeJ9ublhNYy4W00RN1D5gSHM5n4dI5vOojr51hg==" + "node_modules/typeahead-standalone": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/typeahead-standalone/-/typeahead-standalone-5.4.0.tgz", + "integrity": "sha512-aKm/POm1SXb9kPBCZLne+evPOrZtVPtZ8K63EsPhKda77Ax+CaZpxnc+Ahr5Ba4T6BdKMdCiGxBUePF2Sw1Fpw==", + "license": "MIT" }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, - "uuid": { + "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { + "license": "MIT", + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } diff --git a/package.json b/package.json index 4801b6a..1e134b9 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "pPickup", + "name": "get-my", "private": true, "scripts": { "start": "meteor run", diff --git a/server/main.js b/server/main.js index 4af2669..05920f8 100644 --- a/server/main.js +++ b/server/main.js @@ -1,3 +1,5 @@ +// this file has been converted for meteor 3 and later + import { Meteor } from 'meteor/meteor'; import { SysConfig } from '../imports/api/systemConfig'; import { MenuItems } from '../imports/api/menuItems'; @@ -5,142 +7,178 @@ import { Products } from '../imports/api/products.js'; import { Menus } from '../imports/api/menu.js'; import { MScripts } from '../imports/api/mScripts.js'; import { UpdateInfo } from '../imports/api/updateInfo.js'; +import { Roles } from 'meteor/roles'; -Meteor.startup(() => { +Meteor.startup(async() => { // code to run on server at startup - Roles.createRole("user", {unlessExists: true}); - Roles.createRole("admin", {unlessExists: true}); - Roles.createRole("systemadmin", {unlessExists: true}); + Roles.createRoleAsync("user", {unlessExists: true}); + Roles.createRoleAsync("admin", {unlessExists: true}); + Roles.createRoleAsync("systemadmin", {unlessExists: true}); // set the systemconfig defaults for registration // check if this has already been run - let regPolRun = MScripts.findOne({ scriptName: "DefaultRegPolicy", scriptRun: true }); - if (typeof regPolRun == "undefined" || regPolRun == null || regPolRun == "") { - let regPolicy = SysConfig.findOne({}); - if (typeof regPolicy == 'undefined') { - return SysConfig.insert({ - SysAdminReg: false, - dateAdded: new Date(), - allowReg: true, - allowUpdates: true, - }); - } else { - // console.log("Registration policy already set."); - markScriptRun("DefaultRegPolicy"); - } + let regPolRun = await MScripts.findOneAsync({ scriptName: "DefaultRegPolicy", scriptRun: true }); + if (!regPolRun) { + try { + let regPolicy = await SysConfig.findOneAsync({}); + if (!regPolicy) { + SysConfig.insertAsync({ + SysAdminReg: false, + dateAdded: new Date(), + allowReg: true, + allowUpdates: true, + }); + markScriptRun("DefaultRegPolicy"); + } else { + // console.log("Registration policy already set."); + markScriptRun("DefaultRegPolicy"); + } + } catch(error) { + console.log(" ERROR trying to check if registration policy was set."); + console.log(error.message); + console.log(error.stack); + } } - - + // check if the isLInked item exists on menuitems, and if not, add it (data cleanup task) // see if already updated - let linkUpdateRun = MScripts.findOne({ scriptName: "updateMenuItemLinks", scriptRun: true }); - if (typeof linkUpdateRun == 'undefined' || linkUpdateRun == null || linkUpdateRun == "") { - let itemInfoNoLink = MenuItems.find({ isLinked: { $exists: false } }).fetch(); - // console.log("No Ites with isLinked not set: " + itemInfoNoLink.length); - if (itemInfoNoLink.length > 0) { - // console.log("found items with isLinked not set."); - // console.dir(itemInfoNoLink); - let infoLength = itemInfoNoLink.length; - for (i=0; i < infoLength; i++) { - MenuItems.update({ _id: itemInfoNoLink[i]._id }, { - $set: { - isLinked: false, + let linkUpdateRun = await MScripts.findOneAsync({ scriptName: "updateMenuItemLinks", scriptRun: true }); + try { + if (!linkUpdateRun) { + let itemInfoNoLink = MenuItems.find({ isLinked: { $exists: false } }).fetch(); + // console.log("No Ites with isLinked not set: " + itemInfoNoLink.length); + if (itemInfoNoLink.length > 0) { + // console.log("Found items with isLinked not set. Updating..."); + // console.dir(itemInfoNoLink); + let infoLength = itemInfoNoLink.length; + for (i=0; i < infoLength; i++) { + MenuItems.updateAsync({ _id: itemInfoNoLink[i]._id }, { + $set: { + isLinked: false, + } + }); + if (i == (infoLength -1)) { + markScriptRun("updateMenuItemLinks"); } - }); - if (i == (infoLength -1)) { - markScriptRun("updateMenuItemLinks"); } + } else { + // this will show if all items are found to have isLInked set. + // console.log("No items with isLinked not set."); + markScriptRun("updateMenuItemLinks"); } - } else { - // this will show if all items are found to have isLInked set. - // console.log("No items with isLinked not set."); - markScriptRun("updateMenuItemLinks"); } + } catch(error) { + console.log(" ERROR running check for isLinked items."); + console.log(error.message); + console.log(error.stack); } - // update Products to be able to have multiple stores in the document // check if update already run - let prodStoreArrayRun = MScripts.findOne({ scriptName: "changeProdStoreToArray", scriptRun: true }); + let prodStoreArrayRun = await MScripts.findOneAsync({ scriptName: "changeProdStoreToArray", scriptRun: true }); if (!prodStoreArrayRun) { - let prodInfo = Products.find({}).fetch(); - let prodCount = prodInfo.length; - console.log("Updating Products to allow multiple store assocation for " + prodCount + " products."); - for (j = 0; j < prodCount; j++) { - if (typeof prodInfo[j].prodStore == 'object') { - // console.log(typeof prodInfo[j].prodStore); - // console.log("Is Array already"); - } else { - let prodStoreArray = []; - // console.log("---- ---- ----"); - // console.log(typeof prodInfo[j].prodStore); - // console.log("---- Is Not Array."); - let prodStore = prodInfo[j].prodStore; + try { + let prodInfo = Products.find({}).fetch(); + let prodCount = prodInfo.length; + // console.log("Updating Products to allow multiple store assocation for " + prodCount + " products."); + for (let j = 0; j < prodCount; j++) { + if (typeof prodInfo[j].prodStore == 'object') { + // console.log(typeof prodInfo[j].prodStore); + // console.log("Is Array already"); + } else { + let prodStoreArray = []; + // console.log("---- ---- ----"); + // console.log(typeof prodInfo[j].prodStore); + // console.log("---- Is Not Array."); + let prodStore = prodInfo[j].prodStore; - prodStoreArray.push(prodStore); - // console.dir(prodStoreArray); - Products.update({ _id: prodInfo[j]._id }, { - $set: { - prodStore: prodStoreArray, - } - }); + prodStoreArray.push(prodStore); + // console.dir(prodStoreArray); + Products.update({ _id: prodInfo[j]._id }, { + $set: { + prodStore: prodStoreArray, + } + }); + } + if (j == (prodCount -1)) { + markScriptRun("changeProdStoreToArray"); + } } - if (j == (prodCount -1)) { - markScriptRun("changeProdStoreToArray"); - } - } + } catch(error) { + console.log("Script to update product stores couldn't run."); + console.log(error.message); + console.log(error.stack); + } } // update menu items to new format so they get the linked products // check if this update has run - let menuItemUpdRun = MScripts.findOne({ scriptName: "updateMenuProdLinks", scriptRun: true }); + let menuItemUpdRun = await MScripts.findOneAsync({ scriptName: "updateMenuProdLinks", scriptRun: true }); if (!menuItemUpdRun) { - let openMenus = Menus.find({ menuComplete: false }).fetch(); - let openMenuCount = openMenus.length; - // console.log("Open Menu count is: " + openMenuCount); - for (k = 0; k < openMenuCount; k++) { - if (typeof openMenus.menuItems == 'object') { - // console.log(openMenus.menuName + " appears to be converted."); - markScriptRun("updateMenuProdLinks"); - } else { - let menuId = openMenus[k]._id; + try { + let openMenus = Menus.find({ menuComplete: false }).fetch(); + let openMenuCount = openMenus.length; + // console.log("Open Menu count is: " + openMenuCount); + for (let k = 0; k < openMenuCount; k++) { + if (typeof openMenus.menuItems == 'object') { + // console.log(openMenus.menuName + " appears to be converted."); + markScriptRun("updateMenuProdLinks"); + } else { + let menuId = openMenus[k]._id; - let thisMenuItems = MenuItems.find({ menuId: menuId }).fetch(); + let thisMenuItems = MenuItems.find({ menuId: menuId }).fetch(); - let itemCount = thisMenuItems.length; + let itemCount = thisMenuItems.length; - for (l = 0; l < itemCount; l++) { - Menus.update({ _id: menuId }, { - $addToSet: { - menuItems: - { - menuItemId: thisMenuItems[l]._id, - menuItemName: thisMenuItems[l].itemName, - serveDate: thisMenuItems[l].serveDate, - serveDateActual: thisMenuItems[l].serveDateActual, - isLinked: thisMenuItems[l].isLinked - }, - } - }); + for (l = 0; l < itemCount; l++) { + Menus.update({ _id: menuId }, { + $addToSet: { + menuItems: + { + menuItemId: thisMenuItems[l]._id, + menuItemName: thisMenuItems[l].itemName, + serveDate: thisMenuItems[l].serveDate, + serveDateActual: thisMenuItems[l].serveDateActual, + isLinked: thisMenuItems[l].isLinked + }, + } + }); + } + } + if (k == (openMenuCount - 1)) { + markScriptRun("updateMenuProdLinks"); } } - if (k == (openMenuCount - 1)) { - markScriptRun("updateMenuProdLinks"); - } - } + } catch(error) { + console.log(" ERROR updating the menu product links: "); + console.log(error.message); + console.log(error.stack); + } + } else { + // console.log("Menu Item updates have already been run."); } // get update available information if enabled in system confiuration - let currConfig = SysConfig.findOne({}); - let feedurl = "https://gitlab.com/bmcgonag/get_my/-/releases.atom" - if (currConfig.allowUpdates == true) { - // console.log("Allow Updates is true"); - startCronForUpdates(feedurl); - } else if (typeof currConfig.allowUpdates == 'undefined' || currConfig.allowUpdates == null) { - SysConfig.update({ _id: currConfig._id }, { $set: { - allowUpdates: true, - }}); - startCronForUpdates(feedurl); + let currConfig = await SysConfig.findOneAsync({}); + if (!currConfig) { + // console.log("No Current Config found.") + } else { + try { + let feedurl = "https://gitlab.com/bmcgonag/get_my/-/releases.atom" + if (currConfig.allowUpdates == true) { + // console.log("Allow Updates is true"); + startCronForUpdates(feedurl); + } else if (typeof currConfig.allowUpdates == 'undefined' || currConfig.allowUpdates == null) { + SysConfig.update({ _id: currConfig._id }, { $set: { + allowUpdates: true, + }}); + startCronForUpdates(feedurl); + } + } catch(error) { + console.log(" ERROR checking current config for updates: " + error); + console.log(error.message); + console.log(error.stack); + } } }); @@ -152,18 +190,23 @@ var startCronForUpdates = function(feedurl) { }); } -var markScriptRun = function(scriptName) { +var markScriptRun = async function(scriptName) { // check if this is already set - let scriptRun = MScripts.findOne({ scriptName: scriptName }); - - if (scriptRun) { - console.log(scriptName + " already set as run on " + scriptRun.runOn); + let scriptRun = await MScripts.findOneAsync({ scriptName: scriptName }); + if (!scriptRun) { + try { + return MScripts.insertAsync({ + scriptName: scriptName, + scriptRun: true, + runOn: new Date() + }); + } catch(error) { + console.log(" ERROR inserting the script run log: " + error); + console.log(error.message); + console.log(error.stack); + } } else { - MScripts.insert({ - scriptName: scriptName, - scriptRun: true, - runOn: new Date() - }); + // console.log(scriptName + " already set as run on " + scriptRun.runOn); } } @@ -175,16 +218,22 @@ var getUpdateInfoNow = async function(feedurl) { // console.dir(data[0].title); // check if this title already exists in db - let updatesExist = UpdateInfo.findOne({ title: data[0].title }); - if (!updatesExist) { - UpdateInfo.insert({ - title: data[0].title, - description: data[0].description, - dateRelease: data[0].date, - releaseLink: data[0].link, - viewed: false - }); - } else { - console.log("No new updates available at this time."); + let updatesExist = await UpdateInfo.findOneAsync({ title: data[0].title }); + try { + if (!updatesExist) { + UpdateInfo.insertAsync({ + title: data[0].title, + description: data[0].description, + dateRelease: data[0].date, + releaseLink: data[0].link, + viewed: false + }); + } else { + console.log("No new updates available at this time."); + } + } catch(error) { + console.log(" ERROR checking for update: " + error); + console.log(error.message); + console.log(error.stack); } } diff --git a/server/methods.js b/server/methods.js index 1d6e9a5..d634eed 100644 --- a/server/methods.js +++ b/server/methods.js @@ -3,61 +3,66 @@ import { Mongo } from 'meteor/mongo'; import { check } from 'meteor/check'; import { TaskItems } from '../imports/api/tasks'; import { SysConfig } from '../imports/api/systemConfig'; +import { Roles } from 'meteor/roles'; Meteor.methods({ - 'addToRole' (role) { - let countOfUsers = Meteor.users.find().count(); - - // if users = 1 - set to role passed in function call - if (countOfUsers > 1) { - console.log("User id for role: " + Meteor.userId() ); - let userId = Meteor.userId(); - Roles.addUsersToRoles(userId, role); - Meteor.call('add.darkModePref', "light", function(err, result) { - if (err) { - console.log(" ERROR: can't set user dark mode preference: " + err); + async 'addToRole' (role) { + try { + let countOfUsers = await Meteor.users.find().countAsync(); + const user = await Meteor.userAsync(); + if (user) { + let userId = user._id; + if (countOfUsers > 1) { + await Roles.addUsersToRolesAsync(userId, role); + const result = await Meteor.callAsync('add.darkModePref', "light"); + if (!result) { + console.log(" ERROR: can't set user dark mode preference: " + err); + } else { + // console.log(" SUCCESSFULLY set user dark mode preference."); + } + } else if (countOfUsers == 1) { + await Roles.addUsersToRolesAsync(userId, "systemadmin"); + const result = await Meteor.callAsync('add.darkModePref', "light"); + if (!result) { + console.log(" ERROR: can't set user dark mode preference: " + err); + } else { + console.log(" SUCCESSFULLY set user dark mode preference."); + } } else { - // console.log(" SUCCESSFULLY set user dark mode preference."); + console.log("The count of users didn't seem to work when adding a new user."); } - }); - } else if (countOfUsers == 1) { - console.log("Creating first system admin user: " + Meteor.userId() ); - let userId = Meteor.userId(); - Roles.addUsersToRoles(userId, "systemadmin"); - Meteor.call('add.darkModePref', "light", function(err, result) { - if (err) { - console.log(" ERROR: can't set user dark mode preference: " + err); - } else { - // console.log(" SUCCESSFULLY set user dark mode preference."); - } - }); + } else { + console.log(" ---- No user info found.") + } + } catch(error) { + console.log(" ERROR getting user info on server: " + error); } }, - 'edit.userPass' (userId, newPassword) { + async 'edit.userPass' (userId, newPassword) { check(userId, String); check(newPassword, String); - return Accounts.setPassword(userId, newPassword); + return await Accounts.setPasswordAsync(userId, newPassword); }, - 'delete.userFromSys' (userId) { + async 'delete.userFromSys' (userId) { check(userId, String); - return Meteor.users.remove({ _id: userId }); + return await Meteor.users.removeAsync({ _id: userId }); }, - 'update.userEmail' (userId, email) { + async 'update.userEmail' (userId, email) { check(userId, String); check(email, String); - return Meteor.users.update({ _id: userId }, { + return await Meteor.users.updateAsync({ _id: userId }, { $set: { 'emails.0.address': email, } }); }, - 'edit.userRole' (userId, role) { + async 'edit.userRole' (userId, role) { check(userId, String); check(role, String); - return Roles.setUserRoles(userId, role); + return await Roles.setUserRolesAsync(userId, role); }, }); diff --git a/server/publish.js b/server/publish.js index 124eb64..57e5e13 100644 --- a/server/publish.js +++ b/server/publish.js @@ -13,6 +13,13 @@ import { MenuProdLinks } from '../imports/api/menuProdLinks.js'; import { UserLast } from '../imports/api/userLast.js'; import { UpdateInfo } from '../imports/api/updateInfo.js'; +Meteor.publish(null, function () { + if (this.userId) { + return Meteor.roleAssignment.find({ "user._id": this.userId }); + } + this.ready(); +}); + Meteor.publish("SystemConfig", function() { try { return SysConfig.find({}); @@ -23,7 +30,7 @@ Meteor.publish("SystemConfig", function() { Meteor.publish("UserConfigPrefs", function() { try { - return UserConfig.find({}); + return UserConfig.find({ user: this.userId }); } catch (error) { console.log(" ERROR: Error accessing user config: " + error); } @@ -89,6 +96,14 @@ Meteor.publish("myListItems", function(listId) { } }); +Meteor.publish("allListItems", function() { + try { + return ListItems.find({}); + } catch (error) { + console.log(" ERROR pulling all list items."); + } +}); + Meteor.publish("myStoreListItems", function(listId) { try { let stores = Store.find({});