ready for connecting to entraID

This commit is contained in:
Sura Hanna 2024-04-28 17:40:17 -04:00
parent 4e94715d86
commit 7e1ee6f890
108 changed files with 4116 additions and 8 deletions

6
.env.example Normal file
View File

@ -0,0 +1,6 @@
NODE_ENV=
HTTP_PORT=
OPENWEATHER_APPID=
AZURE_CLIENT_ID=
AZURE_CLIENT_SECRET=
AZURE_TENANT_ID=

1
.gitignore vendored
View File

@ -130,3 +130,4 @@ dist
.yarn/install-state.gz
.pnp.*
certs/

View File

@ -1,8 +0,0 @@
ISC License:
Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC")
Copyright (c) 1995-2003 by Internet Software Consortium
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@ -0,0 +1,124 @@
{
"value": [
{
"subject": "Team Standup Meeting",
"start": {
"dateTime": "2024-04-12T08:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T09:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-00 Open Space"
},
"organizer": {
"emailAddress": {
"address": "organizer1@example.com",
"name": "John Doe"
}
}
},
{
"subject": "Project Discussion",
"start": {
"dateTime": "2024-04-12T10:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T11:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-00 Open Space"
},
"organizer": {
"emailAddress": {
"address": "organizer2@example.com",
"name": "Jane Smith"
}
}
},
{
"subject": "Client Call",
"start": {
"dateTime": "2024-04-12T11:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T12:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-00 Open Space"
},
"organizer": {
"emailAddress": {
"address": "organizer3@example.com",
"name": "Alice Johnson"
}
}
},
{
"subject": "Lunch Break",
"start": {
"dateTime": "2024-04-12T12:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T13:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-00 Open Space"
},
"organizer": {
"emailAddress": {
"address": "organizer4@example.com",
"name": "Bob White"
}
}
},
{
"subject": "Design Review",
"start": {
"dateTime": "2024-04-12T14:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T15:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-00 Open Space"
},
"organizer": {
"emailAddress": {
"address": "organizer5@example.com",
"name": "Clara Green"
}
}
},
{
"subject": "Wrap-Up Meeting",
"start": {
"dateTime": "2024-04-12T16:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T17:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-00 Open Space"
},
"organizer": {
"emailAddress": {
"address": "organizer6@example.com",
"name": "Daniel Blue"
}
}
}
]
}

View File

@ -0,0 +1,124 @@
{
"value": [
{
"subject": "Team Standup Meeting",
"start": {
"dateTime": "2024-04-12T08:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T09:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-03 Visualization Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer1@example.com",
"name": "John Doe"
}
}
},
{
"subject": "Project Discussion",
"start": {
"dateTime": "2024-04-12T10:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T11:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-03 Visualization Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer2@example.com",
"name": "Jane Smith"
}
}
},
{
"subject": "Client Call",
"start": {
"dateTime": "2024-04-12T11:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T12:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-03 Visualization Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer3@example.com",
"name": "Alice Johnson"
}
}
},
{
"subject": "Lunch Break",
"start": {
"dateTime": "2024-04-12T12:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T13:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-03 Visualization Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer4@example.com",
"name": "Bob White"
}
}
},
{
"subject": "Design Review",
"start": {
"dateTime": "2024-04-12T14:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T15:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-03 Visualization Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer5@example.com",
"name": "Clara Green"
}
}
},
{
"subject": "Wrap-Up Meeting",
"start": {
"dateTime": "2024-04-12T16:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T17:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-03 Visualization Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer6@example.com",
"name": "Daniel Blue"
}
}
}
]
}

View File

@ -0,0 +1,124 @@
{
"value": [
{
"subject": "Team Standup Meeting",
"start": {
"dateTime": "2024-04-12T08:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T09:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-33 Ideation Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer1@example.com",
"name": "John Doe"
}
}
},
{
"subject": "Project Discussion",
"start": {
"dateTime": "2024-04-12T10:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T11:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-33 Ideation Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer2@example.com",
"name": "Jane Smith"
}
}
},
{
"subject": "Client Call",
"start": {
"dateTime": "2024-04-12T11:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T12:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-33 Ideation Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer3@example.com",
"name": "Alice Johnson"
}
}
},
{
"subject": "Lunch Break",
"start": {
"dateTime": "2024-04-12T12:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T13:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-33 Ideation Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer4@example.com",
"name": "Bob White"
}
}
},
{
"subject": "Design Review",
"start": {
"dateTime": "2024-04-12T14:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T15:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-33 Ideation Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer5@example.com",
"name": "Clara Green"
}
}
},
{
"subject": "Wrap-Up Meeting",
"start": {
"dateTime": "2024-04-12T16:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T17:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-33 Ideation Lab"
},
"organizer": {
"emailAddress": {
"address": "organizer6@example.com",
"name": "Daniel Blue"
}
}
}
]
}

View File

@ -0,0 +1,124 @@
{
"value": [
{
"subject": "Team Standup Meeting",
"start": {
"dateTime": "2024-04-12T08:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T09:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-37 Multipurpose Room"
},
"organizer": {
"emailAddress": {
"address": "organizer1@example.com",
"name": "John Doe"
}
}
},
{
"subject": "Project Discussion",
"start": {
"dateTime": "2024-04-12T10:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T11:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-37 Multipurpose Room"
},
"organizer": {
"emailAddress": {
"address": "organizer2@example.com",
"name": "Jane Smith"
}
}
},
{
"subject": "Client Call",
"start": {
"dateTime": "2024-04-12T11:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T12:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-37 Multipurpose Room"
},
"organizer": {
"emailAddress": {
"address": "organizer3@example.com",
"name": "Alice Johnson"
}
}
},
{
"subject": "Lunch Break",
"start": {
"dateTime": "2024-04-12T12:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T13:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-37 Multipurpose Room"
},
"organizer": {
"emailAddress": {
"address": "organizer4@example.com",
"name": "Bob White"
}
}
},
{
"subject": "Design Review",
"start": {
"dateTime": "2024-04-12T14:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T15:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-37 Multipurpose Room"
},
"organizer": {
"emailAddress": {
"address": "organizer5@example.com",
"name": "Clara Green"
}
}
},
{
"subject": "Wrap-Up Meeting",
"start": {
"dateTime": "2024-04-12T16:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T17:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-37 Multipurpose Room"
},
"organizer": {
"emailAddress": {
"address": "organizer6@example.com",
"name": "Daniel Blue"
}
}
}
]
}

View File

@ -0,0 +1,124 @@
{
"value": [
{
"subject": "Team Standup Meeting",
"start": {
"dateTime": "2024-04-12T08:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T09:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-39 Conference Room"
},
"organizer": {
"emailAddress": {
"address": "organizer1@example.com",
"name": "John Doe"
}
}
},
{
"subject": "Project Discussion",
"start": {
"dateTime": "2024-04-12T10:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T11:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-39 Conference Room"
},
"organizer": {
"emailAddress": {
"address": "organizer2@example.com",
"name": "Jane Smith"
}
}
},
{
"subject": "Client Call",
"start": {
"dateTime": "2024-04-12T11:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T12:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-39 Conference Room"
},
"organizer": {
"emailAddress": {
"address": "organizer3@example.com",
"name": "Alice Johnson"
}
}
},
{
"subject": "Lunch Break",
"start": {
"dateTime": "2024-04-12T12:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T13:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-39 Conference Room"
},
"organizer": {
"emailAddress": {
"address": "organizer4@example.com",
"name": "Bob White"
}
}
},
{
"subject": "Design Review",
"start": {
"dateTime": "2024-04-12T14:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T15:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-39 Conference Room"
},
"organizer": {
"emailAddress": {
"address": "organizer5@example.com",
"name": "Clara Green"
}
}
},
{
"subject": "Wrap-Up Meeting",
"start": {
"dateTime": "2024-04-12T16:00:00",
"timeZone": "Eastern Standard Time"
},
"end": {
"dateTime": "2024-04-12T17:00:00",
"timeZone": "Eastern Standard Time"
},
"location": {
"displayName": "ER 1431-39 Conference Room"
},
"organizer": {
"emailAddress": {
"address": "organizer6@example.com",
"name": "Daniel Blue"
}
}
}
]
}

View File

@ -0,0 +1,240 @@
function populateTable(resourceUPN, events, container) {
console.log(events);
// Create a wrapper for the resource and its events
const resourceWrapper = document.createElement('div');
resourceWrapper.className = 'resource-wrapper';
// Create a row for the resource title
const titleRow = document.createElement('div');
titleRow.className = 'title-row';
switch (resourceUPN.split("@")[0]) {
case "s-er-1431-00":
titleRow.innerHTML = 'ER 1431-00 Open Space';
break;
case "s-er-1431-03":
titleRow.innerHTML = 'ER 1431-03 Visualization Lab';
break;
case "s-er-1431-33":
titleRow.innerHTML = 'ER 1431-33 Ideation Lab';
break;
case "s-er-1431-37":
titleRow.innerHTML = 'ER 1431-37 Multipurpose Room';
break;
case "s-er-1431-39":
titleRow.innerHTML = 'ER 1431-39 Conference Room';
break;
}
resourceWrapper.appendChild(titleRow);
// Create a grid for events
const eventGrid = document.createElement('div');
eventGrid.className = 'event-row';
events.forEach((event, index) => {
const eventCell = document.createElement('div');
eventCell.className = 'flex-cell';
const title = event.subject;
const organizer = event.organizer.emailAddress.name;
const startTime = formatUTCTime(event.start.dateTime + 'Z');
const endTime = formatUTCTime(event.end.dateTime + 'Z');
const titleDiv = document.createElement('div');
titleDiv.textContent = title;
const organizerDiv = document.createElement('div');
organizerDiv.textContent = organizer;
organizerDiv.className = 'organizer';
const timeDiv = document.createElement('div');
timeDiv.className = 'time-range';
timeDiv.innerHTML = `${startTime} - ${endTime}`;
eventCell.appendChild(titleDiv);
eventCell.appendChild(organizerDiv);
eventCell.appendChild(timeDiv);
eventGrid.appendChild(eventCell);
});
resourceWrapper.appendChild(eventGrid);
container.appendChild(resourceWrapper);
}
function formatUTCTime(date) {
const etDate = new Date(date.toLocaleString("en-US", { timeZone: "America/New_York" }));
const hours = etDate.getHours();
const minutes = etDate.getMinutes().toString().padStart(2, '0');
return `<span class="time">${hours}</span><span class="separator">:</span><span class="time">${minutes}</span>`;
}
async function fetchAllEvents() {
console.log("fetching events");
const response = await fetch('http://localhost:8080/api/events');
const allEvents = await response.json();
console.log(allEvents);
const resourcesContainer = document.getElementById('resources-container');
resourcesContainer.innerHTML = '';
const keys = Object.keys(allEvents);
keys.forEach((key) => {
console.log(allEvents[key]);
populateTable(key, allEvents[key].value, resourcesContainer);
});
}
function updateTime(showSeparator) {
let timeString = formatUTCTime(new Date());
if (!showSeparator) {
timeString = timeString.replace(':', ' ');
}
document.getElementById('time').innerHTML = timeString;
}
function updateFontSize(elementId) {
const element = document.getElementById(elementId);
const textLength = element.textContent.length;
if (textLength <= 83) {
element.style.fontSize = '5em';
} else if (textLength <= 166) {
element.style.fontSize = '4em';
} else {
element.style.fontSize = '3em';
}
}
// Function to fetch and display a quote
async function fetchAndDisplayQuote() {
try {
const response = await fetch('http://localhost:8080/api/quotes');
if (response.ok) {
const data = await response.json();
const quotes = data.results;
const randomIndex = Math.floor(Math.random() * quotes.length);
const randomQuote = quotes[randomIndex];
document.getElementById('quote').innerHTML = `<i>${randomQuote.content}</i>`;
updateFontSize('quote');
document.getElementById('author').innerHTML = `${randomQuote.author}`;
} else {
console.error('Failed to fetch data');
}
} catch (error) {
console.error('An error occurred:', error);
}
}
// Fetch Current Weather
async function fetchWeather() {
const response = await fetch('http://localhost:8080/api/weather');
const data = await response.json();
if (data.cod === 200) {
const temperature = data.main.temp;
const description = data.weather[0].description;
const iconCode = data.weather[0].icon;
const iconUrl = `https://openweathermap.org/img/wn/${iconCode}.png`
document.getElementById("weather-icon-container").innerHTML = `<img id="weather-icon" alt="Weather Icon" src="${iconUrl}">`;
document.getElementById("temperature").innerHTML = `${temperature}°`;
document.getElementById("description").innerHTML = `${description}`;
} else {
document.getElementById("weather").innerText = 'Weather data unavailable';
}
}
// Display Current Time
function displayTime() {
const now = new Date();
const timeHtml = formatUTCTime(now);
document.getElementById("time").innerHTML = timeHtml;
setTimeout(displayTime, 60000);
}
// Slideshow
async function fetchSlideshowImages() {
try {
const response = await fetch('http://localhost:8080/api/slideshow');
if (!response.ok) {
throw new Error('Failed to fetch slideshow images');
}
const images = await response.json();
updateSlideshow(images);
} catch (error) {
console.error('Error fetching slideshow images:', error);
}
}
function createSlideshowElement(src) {
const img = document.createElement('img');
// img.src = src;
img.src = `http://localhost:8080${src}`;
img.className = 'slideshow-img';
img.style.width = '100%';
img.style.maxHeight = '100vh';
img.style.objectFit = 'cover';
const filename = src.split('/').pop().split('.')[0]; // Extracts filename without extension
// Set the filename as the alt text
img.alt = filename;
// If you also want to set the title attribute
img.title = filename;
return img;
}
let currentIndex = 0;
function updateSlideshow(images) {
if (images.length === 0) {
console.log('No images found for the slideshow.');
return;
}
const slideshowContainer = document.getElementById('slideshow');
slideshowContainer.innerHTML = '';
const imageElement = createSlideshowElement(images[currentIndex]);
slideshowContainer.appendChild(imageElement);
// Wait a little bit before starting the fade-in to ensure it's loaded
setTimeout(() => { imageElement.style.opacity = '1'; }, 100);
// Clean up the previous image after the new one has faded in
setTimeout(() => {
while (slideshowContainer.children.length > 1) {
slideshowContainer.removeChild(slideshowContainer.firstChild);
}
}, 100);
currentIndex = (currentIndex + 1) % images.length;
setTimeout(() => updateSlideshow(images), 30000); // Change image every 5 seconds
}
let showSeparator = true;
fetchAndDisplayQuote();
setInterval(fetchAndDisplayQuote, 60 * 60 * 1000);
fetchWeather();
setInterval(fetchWeather, 15 * 60 * 1000);
updateTime(showSeparator);
setInterval(() => {
updateTime(showSeparator);
showSeparator = !showSeparator;
}, 1000);
fetchSlideshowImages();
fetchAllEvents();
setInterval(fetchAllEvents, 5 * 60 * 1000);

View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>NGCI Daily Schedule</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="grid">
<div id="schedule-container">
<div class="header">
<img id="horizontal-logo" src="ngci-logo-white-wide.svg" alt="Next-Generation Cities Institute">
</div>
<div id="resources-container"></div>
</div>
<div id="slideshow"></div>
<div id="homepage-container">
<div class="header">
<img id="horizontal-logo" src="ngci-logo-white-wide.svg" alt="Next-Generation Cities Institute">
</div>
<div class="top-container">
<div id="time-weather-container">
<div id="weather">
<div id="weather-icon-container"></div>
<div id="temperature"></div>
<div id="description"></div>
</div>
<div id="time"></div>
</div>
</div>
<div id="bottom-section">
<div id="quote"></div>
<div id="author"></div>
</div>
</div>
</div>
<script type="module" src="frontend.js"></script>
</body>
</html>

View File

@ -0,0 +1,758 @@
{
"name": "vwss-frontend",
"version": "0.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "vwss-frontend",
"version": "0.0.0",
"devDependencies": {
"vite": "^5.1.6"
}
},
"node_modules/@esbuild/aix-ppc64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
"integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"aix"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-arm": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
"integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-arm64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
"integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
"integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-arm64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
"integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
"integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-arm64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
"integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
"integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
"integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
"integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ia32": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
"integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-loong64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
"integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
"cpu": [
"loong64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-mips64el": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
"integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
"cpu": [
"mips64el"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ppc64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
"integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-riscv64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
"integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-s390x": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
"integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
"cpu": [
"s390x"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
"integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/netbsd-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
"integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/openbsd-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
"integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/sunos-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
"integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-arm64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
"integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-ia32": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
"integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-x64": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
"integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz",
"integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-android-arm64": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz",
"integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz",
"integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-darwin-x64": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz",
"integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz",
"integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz",
"integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz",
"integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz",
"integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==",
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz",
"integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz",
"integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz",
"integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz",
"integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz",
"integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
]
},
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
},
"node_modules/esbuild": {
"version": "0.19.12",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
"integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
"dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=12"
},
"optionalDependencies": {
"@esbuild/aix-ppc64": "0.19.12",
"@esbuild/android-arm": "0.19.12",
"@esbuild/android-arm64": "0.19.12",
"@esbuild/android-x64": "0.19.12",
"@esbuild/darwin-arm64": "0.19.12",
"@esbuild/darwin-x64": "0.19.12",
"@esbuild/freebsd-arm64": "0.19.12",
"@esbuild/freebsd-x64": "0.19.12",
"@esbuild/linux-arm": "0.19.12",
"@esbuild/linux-arm64": "0.19.12",
"@esbuild/linux-ia32": "0.19.12",
"@esbuild/linux-loong64": "0.19.12",
"@esbuild/linux-mips64el": "0.19.12",
"@esbuild/linux-ppc64": "0.19.12",
"@esbuild/linux-riscv64": "0.19.12",
"@esbuild/linux-s390x": "0.19.12",
"@esbuild/linux-x64": "0.19.12",
"@esbuild/netbsd-x64": "0.19.12",
"@esbuild/openbsd-x64": "0.19.12",
"@esbuild/sunos-x64": "0.19.12",
"@esbuild/win32-arm64": "0.19.12",
"@esbuild/win32-ia32": "0.19.12",
"@esbuild/win32-x64": "0.19.12"
}
},
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
},
"node_modules/postcss": {
"version": "8.4.36",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.36.tgz",
"integrity": "sha512-/n7eumA6ZjFHAsbX30yhHup/IMkOmlmvtEi7P+6RMYf+bGJSUHc3geH4a0NSZxAz/RJfiS9tooCTs9LAVYUZKw==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.1.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/rollup": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz",
"integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==",
"dev": true,
"dependencies": {
"@types/estree": "1.0.5"
},
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
"node": ">=18.0.0",
"npm": ">=8.0.0"
},
"optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.13.0",
"@rollup/rollup-android-arm64": "4.13.0",
"@rollup/rollup-darwin-arm64": "4.13.0",
"@rollup/rollup-darwin-x64": "4.13.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.13.0",
"@rollup/rollup-linux-arm64-gnu": "4.13.0",
"@rollup/rollup-linux-arm64-musl": "4.13.0",
"@rollup/rollup-linux-riscv64-gnu": "4.13.0",
"@rollup/rollup-linux-x64-gnu": "4.13.0",
"@rollup/rollup-linux-x64-musl": "4.13.0",
"@rollup/rollup-win32-arm64-msvc": "4.13.0",
"@rollup/rollup-win32-ia32-msvc": "4.13.0",
"@rollup/rollup-win32-x64-msvc": "4.13.0",
"fsevents": "~2.3.2"
}
},
"node_modules/source-map-js": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.1.0.tgz",
"integrity": "sha512-9vC2SfsJzlej6MAaMPLu8HiBSHGdRAJ9hVFYN1ibZoNkeanmDmLUcIrj6G9DGL7XMJ54AKg/G75akXl1/izTOw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/vite": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz",
"integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==",
"dev": true,
"dependencies": {
"esbuild": "^0.19.3",
"postcss": "^8.4.35",
"rollup": "^4.2.0"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
"node": "^18.0.0 || >=20.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies": {
"fsevents": "~2.3.3"
},
"peerDependencies": {
"@types/node": "^18.0.0 || >=20.0.0",
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
"stylus": "*",
"sugarss": "*",
"terser": "^5.4.0"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
"less": {
"optional": true
},
"lightningcss": {
"optional": true
},
"sass": {
"optional": true
},
"stylus": {
"optional": true
},
"sugarss": {
"optional": true
},
"terser": {
"optional": true
}
}
}
}
}

View File

@ -0,0 +1,14 @@
{
"name": "vwss-frontend",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"vite": "^5.1.6"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,296 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="884.44"
height="117.89333"
viewBox="0 0 884.44 117.89333"
sodipodi:docname="Concordia-Logo-NGCI-ENG-HORIZ-CMYK-white (1).eps"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<g
id="g8"
inkscape:groupmode="layer"
inkscape:label="ink_ext_XXXXXX"
transform="matrix(1.3333333,0,0,-1.3333333,0,117.89333)">
<g
id="g10"
transform="scale(0.1)">
<path
d="m 1082.71,343.16 c -28.83,-20.058 -63.19,-30.156 -105.093,-30.676 -47.976,-1.289 -91.062,14.532 -121.355,44.563 -28.032,27.793 -42.5,64.629 -41.821,106.562 0.414,43.797 17.004,83.602 46.582,112.286 29.297,28.418 69.778,43.601 114.028,42.695 33.109,-0.449 53.949,-6.035 82.439,-22.246 l 13.89,-7.844 v 58.645 l -5.78,2.382 c -32.16,13.504 -54.13,16.075 -91.198,16.661 -64.058,0.507 -121.929,-21.739 -163.054,-62.637 -36.946,-36.856 -57.207,-86.504 -56.985,-139.805 0.266,-55.176 21.723,-105.793 60.293,-142.578 41.739,-39.746 100,-60.137 163.989,-57.305 -0.059,0 5.144,0.137 5.144,0.137 33.001,0.898 54.791,1.543 87.461,13.379 0.07,0.059 3.92,1.473 3.92,1.473 l 33.26,82.316 -25.72,-18.008"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path12" />
<path
d="m 1304.56,311.461 c -43.56,0 -78.03,38.457 -78.49,87.586 -0.26,26.301 9.94,52.219 27.24,69.191 14.28,14.024 32.18,21.16 51.84,20.645 43.28,-2.121 78.44,-41.738 78.44,-88.418 l -0.05,-2.832 c -0.9,-47.52 -36.34,-86.172 -78.98,-86.172 z m 97.62,180.644 c -25.1,26.172 -59,41.016 -95.43,41.856 h -0.03 c -35.85,0.527 -71.19,-13.75 -96.94,-39.16 -25.63,-25.274 -39.75,-58.586 -39.75,-93.887 0,-72.551 59.42,-132.48 132.41,-133.516 36.37,-0.566 70.68,12.997 96.66,38.204 25.27,24.57 39.48,57.304 39.99,92.156 0.78,35.109 -12.34,68.683 -36.91,94.347"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path14" />
<path
d="m 2072.29,327.086 c -14.94,-10.742 -42.51,-18.262 -70.17,-19.16 -24.43,-0.391 -47.33,8.808 -64.5,25.918 -17.33,17.285 -26.66,40.703 -26.2,65.906 0,50.813 38.09,89.777 88.61,90.676 22.23,0.39 46.21,-6.68 61.05,-18.067 l 14.99,-11.386 v 58.398 l -5.79,2.371 c -25.47,10.422 -43.43,10.742 -68.3,11.192 l -2.36,0.07 c -41.26,1.023 -78.98,-13.254 -106.15,-40.195 -24.31,-24.18 -37.58,-56.594 -37.58,-91.7 0,-0.976 0,-1.933 0,-2.968 0.51,-35.938 14.59,-68.938 39.67,-92.727 27.24,-25.789 65.27,-39.168 107.2,-37.559 l 8.24,0.254 c 22.73,0.774 40.77,1.282 64.69,10.871 -0.09,0 2,0.782 2,0.782 l 2.86,1.082 10.19,59.543 -18.45,-13.301"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path16" />
<path
d="m 2307.27,311.461 c -43.61,0 -78.04,38.457 -78.46,87.586 -0.28,26.301 9.91,52.219 27.18,69.191 14.29,14.024 32.21,21.16 51.82,20.645 44.05,-2.121 78.5,-40.957 78.5,-88.418 v -2.832 c -0.97,-47.52 -36.4,-86.172 -79.04,-86.172 z m 97.56,180.391 c -25.27,26.425 -59.14,41.347 -95.41,42.109 -35.86,0.527 -71.16,-13.75 -96.95,-39.16 -25.59,-25.215 -39.75,-58.586 -39.75,-93.887 0,-72.551 59.43,-132.48 132.43,-133.516 36.39,-0.566 70.68,12.997 96.65,38.204 25.28,24.57 39.45,57.304 39.94,92.156 0.06,1.027 0.06,1.992 0.06,2.961 0,33.953 -13.05,66.238 -36.97,91.133"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path18" />
<path
d="m 3540.69,397.438 c 0,-10.352 0,-45.469 0,-45.469 0,-27.071 -29.12,-43.606 -57.15,-44.043 -13.89,-0.196 -27.27,5.137 -35.78,14.277 -6.21,6.746 -9.38,14.395 -9.38,23.016 l 0.2,2.902 c 1.11,18.574 14.45,31.824 35.7,35.613 0.18,0 45.49,8.489 45.49,8.489 0.29,0.066 12.83,3.222 20.92,5.215 z m 66.64,-126.172 -7.27,13.379 c -3.02,5.585 -4.2,8.808 -5.52,14.921 -1.78,5.977 -2.25,9.454 -2.25,16.075 v 130.156 c 0,58.262 -32.68,86.562 -102.83,89.129 h -0.06 c -26.06,0 -51.43,-1.348 -77.44,-17.293 l -4.46,-2.774 v -54.015 l 15.36,13.371 c 13.41,11.523 34.72,17.176 65.27,17.176 28.85,0 50.59,-14.403 50.59,-33.633 0,-16.785 -8.72,-21.024 -28.11,-24.188 -0.12,-0.058 -4.43,-0.761 -50,-8.547 -49.94,-7.722 -71.99,-30.027 -73.59,-74.656 -0.06,-1.601 -0.06,-3.156 -0.06,-4.699 0,-20.066 6.93,-37.879 20.27,-51.824 16.8,-17.434 42.48,-27.344 70.53,-27.012 18.96,0.371 40.66,3.398 61.91,17.031 0,-4.375 0,-14.211 0,-14.211 l 67.66,1.614"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path20" />
<path
d="m 1704.88,280.133 -12.73,-16.074 h 90.81 l -11.78,15.058 c -3.05,3.985 -4.04,5.653 -4.65,8.992 -2.55,8.684 -2.77,12.805 -2.77,20.254 v 124.25 c 0,25.594 -10.49,49.715 -29.49,67.852 -20.51,19.609 -49.19,30.098 -78.62,28.75 -26.11,-0.91 -45.58,-7.531 -63.18,-20.91 0.06,3.156 0.25,12.414 0.25,12.414 l -5.45,0.058 h -59.23 l 8.49,-24.238 c 0,0 0.12,0.313 0.16,0.379 0.16,-1.152 0.35,-2.188 0.66,-3.34 l 1.68,-9.129 V 293.902 c 0,-2.89 -0.32,-4.629 -1.25,-6.816 -0.13,-0.254 -3.63,-7.715 -3.67,-7.793 -0.06,0 -4.53,-7.004 -4.53,-7.004 l -5.24,-8.23 h 83.19 l -11.74,24.57 c -2.25,7.266 -2.7,12.09 -2.7,21.738 v 120.196 c 0,31.894 22.31,54.785 54.28,55.625 18.67,0.449 37.71,-6.368 49.64,-17.95 8.26,-8.027 12.64,-17.941 12.64,-28.672 V 309.332 c 0,-0.129 0.26,-7.578 0.26,-7.578 0,0.195 -0.19,-13.449 -0.19,-13.449 -0.27,-2.383 -1.36,-3.856 -4.84,-8.172"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path22" />
<path
d="m 2685.59,537.309 c -19.02,3.281 -35.27,0.714 -51,-8.036 -6.67,-3.925 -11.99,-7.91 -16.58,-12.148 0,1.66 0,9.902 0,9.902 h -75.33 l 10.37,-12.734 c 4.32,-5.285 6.56,-8.359 8.46,-13.711 2.09,-5.012 2.42,-8.73 2.42,-14.336 V 315.641 c 0,-0.137 0.1,-4.055 0.1,-4.055 0.02,-6.563 0.1,-10.938 -1.64,-16.844 -0.65,-2.89 -1.58,-4.375 -3.52,-7.402 -0.15,-0.254 -10.94,-17.688 -10.94,-17.688 l 16.88,0.196 h 74.45 l -9.26,14.336 c -3.96,6.183 -5.62,9.855 -7.24,16.281 -2.44,8.555 -3.26,13.113 -3.26,22.109 v 106.309 c 0,23.476 10.5,45.273 26.19,54.219 12.07,6.621 21.78,7.519 35.56,3.203 0.04,0 12.13,-3.723 12.13,-3.723 v 53.254 l -7.79,1.473"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path24" />
<path
d="m 3187.21,284.957 -11.13,-15.625 h 83.53 l -9.7,16.914 -3.09,6.953 c -0.98,3.34 -0.98,5.078 -0.98,10.41 v 223.418 h -72.79 l 11.06,-10.996 c 2.56,-2.578 3.9,-4.57 5.6,-8.242 1.06,-2.754 1.19,-5.215 1.19,-8.75 0,-0.508 -0.04,-4.816 -0.04,-4.816 V 302.652 c 0,-0.07 0.04,-3.8 0.04,-3.8 l -0.54,-8.555 c -0.32,-1.414 -1.19,-2.625 -3.15,-5.34 z m 58.17,345.801 h -61.51 v -63.547 h 61.51 v 63.547"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path26" />
<path
d="m 2969.65,430.367 v -56.914 c 0,-19.875 -6.11,-36.144 -17.69,-47.082 -11.17,-10.535 -26.88,-15.496 -45.37,-14.461 -18.26,0.899 -34.4,8.934 -46.78,23.406 -16.58,19.348 -24.71,47.59 -21.8,75.559 3.91,34.668 19.03,76.523 69.07,79.043 17.65,0.645 33.78,-5.09 45.33,-16.211 11.33,-10.871 17.24,-25.781 17.24,-43.34 z m 73.15,-160.519 -12.13,18.136 c -2.25,3.34 -3.17,4.754 -3.63,7.137 -2.8,19.738 -2.8,31.184 -2.8,51.895 v 312.668 h -74.04 l 12.81,-15.176 c 0,-0.059 2.91,-4.238 3.58,-5.207 0.04,-0.125 0.13,-0.574 0.13,-0.574 v 0 l 1.45,-6.875 c 0,0 -0.29,-85.02 -0.41,-114.922 -20.04,14.199 -40.24,20.254 -65.65,19.023 -74,-2.754 -117.26,-51.183 -118.51,-132.93 -0.35,-41.601 15.15,-81.535 41.4,-106.808 22.27,-21.348 50.98,-31.836 83.07,-30.36 23.63,0.84 41.78,6.434 60.1,17.95 0,-4.239 0,-13.957 0,-13.957 h 74.63"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path28" />
<path
d="m 1227.59,814.801 v -49.004 c 0,-28.684 -19.48,-38.516 -43.19,-38.516 -25.11,0 -43.21,11.641 -43.21,38.387 v 49.133 h 21.53 v -49.649 c 0,-12.414 9.02,-19.863 21.43,-19.863 11.41,0 21.89,5.918 21.89,21.406 v 48.106 h 21.55"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path30" />
<path
d="m 1436.4,728.434 h -18.14 l -47.74,55.312 v -55.312 h -21.56 v 86.367 h 19.79 l 46.1,-52.793 v 52.793 h 21.55 v -86.367"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path32" />
<path
d="m 1580.7,728.434 h -21.53 v 86.367 h 21.53 v -86.367"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path34" />
<path
d="m 1744.76,727.281 h -9.39 l -41.81,87.52 h 23.45 l 22.8,-49.258 21.66,49.258 h 23.19 l -39.9,-87.52"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path36" />
<path
d="m 1960.9,728.434 h -63.73 v 86.367 H 1960 V 798.98 h -41.28 v -18.136 h 39.38 v -15.821 h -39.38 v -20.769 h 42.18 v -15.82"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path38" />
<path
d="m 2101.53,779.301 h 11.39 c 5.99,0 11.78,2.57 11.78,9.914 0,6.484 -4.18,9.765 -12.29,9.765 h -10.88 z m 17.08,35.5 c 17.77,0 28.27,-11.895 28.27,-24.824 0,-9.512 -4.95,-16.594 -14.82,-21.153 8.87,-4.433 11.54,-15.051 23.69,-40.39 h -23.69 c -9.24,18.457 -12.68,35.046 -24.34,35.046 h -6.19 V 728.434 H 2080 v 86.367 h 38.61"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path40" />
<path
d="m 2326.4,792.359 c -12.54,5.586 -20.03,7.774 -27.37,7.774 -7.71,0 -12.67,-2.824 -12.67,-7.129 0,-13.059 43.96,-9.336 43.96,-39.492 0,-16.582 -13.92,-26.231 -33.22,-26.231 -15.04,0 -22.5,3.926 -31.11,8.36 v 18.574 c 12.4,-8.223 20,-11.113 29.51,-11.113 8.23,0 12.67,2.89 12.67,7.968 0,14.219 -43.98,9.004 -43.98,40.059 0,14.922 12.91,24.824 32.91,24.824 9.65,0 18.4,-2.051 29.3,-6.738 v -16.856"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path42" />
<path
d="m 2469.83,728.434 h -21.54 v 86.367 h 21.54 v -86.367"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path44" />
<path
d="m 2670.36,798.98 h -31.25 v -70.546 h -21.55 v 70.546 h -31.32 v 15.821 h 84.12 V 798.98"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path46" />
<path
d="m 2815.94,823.16 h -9.39 l 9.39,18.516 h 20.92 z m 34.08,-94.726 h -63.71 v 86.367 h 62.82 V 798.98 h -41.29 v -18.136 h 39.43 v -15.821 h -39.43 v -20.769 h 42.18 v -15.82"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path48" />
<path
d="M 2083.15,88.0469 V 38.9844 c 0,-28.6133 -19.55,-38.51565 -43.22,-38.51565 -25.08,0 -43.21,11.62105 -43.21,38.37895 v 49.1992 h 21.55 V 38.3398 c 0,-12.4023 9,-19.8828 21.41,-19.8828 11.38,0 21.92,5.9961 21.92,21.4258 v 48.1641 h 21.55"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path50" />
<path
d="M 2291.89,1.62109 H 2273.8 L 2226.04,56.9922 V 1.62109 H 2204.5 V 88.0469 h 19.75 l 46.1,-52.8516 v 52.8516 h 21.54 V 1.62109"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path52" />
<path
d="m 2436.22,1.62109 h -21.55 V 88.0469 h 21.55 V 1.62109"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path54" />
<path
d="m 2600.3,0.46875 h -9.4 l -41.79,87.57815 h 23.43 l 22.84,-49.3164 21.66,49.3164 h 23.14 L 2600.3,0.46875"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path56" />
<path
d="M 2816.43,1.62109 H 2752.7 V 88.0469 h 62.87 V 72.168 h -41.33 V 54.0234 h 39.4 V 38.2227 h -39.4 V 17.4414 h 42.19 V 1.62109"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path58" />
<path
d="m 2957.04,52.5391 h 11.42 c 5.94,0 11.76,2.5195 11.76,9.9023 0,6.4453 -4.14,9.7266 -12.25,9.7266 h -10.93 z m 17.11,35.5078 c 17.75,0 28.26,-11.9531 28.26,-24.8828 0,-9.4532 -4.94,-16.6016 -14.83,-21.1524 8.89,-4.4336 11.53,-15.0586 23.67,-40.39061 h -23.67 c -9.25,18.51561 -12.65,35.11721 -24.29,35.11721 h -6.25 V 1.62109 h -21.55 V 88.0469 h 38.66"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path60" />
<path
d="m 3181.94,65.6055 c -12.54,5.5859 -20.02,7.7148 -27.36,7.7148 -7.76,0 -12.68,-2.7734 -12.68,-7.0703 0,-13.0469 43.96,-9.3945 43.96,-39.5508 0,-16.6015 -13.94,-26.23045 -33.18,-26.23045 -15.1,0 -22.58,3.90625 -31.21,8.35938 V 27.4805 c 12.42,-8.2422 20.04,-11.1914 29.57,-11.1914 8.18,0 12.64,2.9492 12.64,8.0273 0,14.1406 -43.93,8.9453 -43.93,40 0,14.9805 12.89,24.8242 32.93,24.8242 9.61,0 18.38,-1.9922 29.26,-6.6797 V 65.6055"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path62" />
<path
d="m 3325.34,1.62109 h -21.55 V 88.0469 h 21.55 V 1.62109"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path64" />
<path
d="m 3525.92,72.168 h -31.33 V 1.62109 h -21.54 V 72.168 h -31.25 v 15.8789 h 84.12 V 72.168"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path66" />
<path
d="m 3666.02,42.0117 -34.08,46.0352 h 26.13 l 18.71,-27.1289 18.91,27.1289 h 25.96 L 3687.56,42.0117 V 1.62109 h -21.54 V 42.0117"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path68" />
<path
d="M 0,730.426 92.7578,574.641 C 86.7695,602.406 75.1758,656.09 75.1758,656.09 87.9102,646.117 227.52,597.563 256.074,588.559 l 0.266,-0.067 c -18.82,30.36 -48.559,59.297 -76.281,87.793 19.707,-20.265 55.019,-40.137 82.921,-57.812 10.458,-6.633 21.297,-13.254 32.899,-19.551 -1.223,32.09 -16.848,64.687 -28.645,95.43 9.036,-23.672 34.438,-49.258 53.989,-71.321 5.523,-6.172 11.316,-12.41 17.742,-18.582 15.691,31.055 21.379,64.571 21.805,95.879 -0.426,-29.199 5.683,-65.527 21.828,-95.754 7.976,7.531 14.953,15.371 21.672,23.086 17.722,20.774 41.511,44.504 49.968,66.692 -12.058,-31.641 -25.945,-63.868 -28.039,-96.075 45.18,22.95 80.676,52.793 115.219,78.008 -28.105,-20.527 -47.309,-48.555 -65.156,-71.836 -3.949,-5.148 -7.844,-10.547 -11.313,-15.949 l 0.903,0.188 c 28.582,9.003 165.918,49.98 165.918,49.98 l -216.961,-105.68 215.418,101.617 -11.836,-63.593 3.472,-7.715 100.766,167.129 H 0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path70" />
<path
d="M 355.82,880.621 C 143.047,895.836 24.6289,858.277 2.63672,854.156 V 794.41 c 62.21488,13.965 172.33628,32.801 328.87928,38.074 -0.078,0 -0.098,0 -0.137,0 l 0.379,0.071 c -0.125,0 -0.188,-0.071 -0.242,-0.071 214.785,4.18 346.621,-21.023 383.882,-30.164 0.098,0.782 -0.039,-0.761 0,-0.058 0,0 -123.601,57.488 -359.578,78.359"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path72" />
<path
d="M 633.242,295.563 C 541.797,184.703 415.559,105.156 364.246,82.1289 c 0.102,0 -0.035,0.0781 0,0 v 0 c 0.102,0.0781 -0.035,0 0,0 -77.625,35.8201 -263.16,163.2191 -346.5702,410.8051 -1.9219,6.945 -3.7617,13.898 -5.5586,20.968 1.1953,-9.14 2.4141,-18.261 3.7305,-27.336 l -0.0938,0.52 c 3.125,-15.695 6.3633,-31.25 10.125,-46.496 C 103.535,175.699 292.539,37.9492 363.977,0 418.895,29.1406 543.34,135.82 633.242,295.563"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path74" />
<path
d="M 87.4219,639.82 127.004,403.297 c 0,0 93.699,-140.586 226.922,-215.762 L 354.043,500.777 87.4219,639.82"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path76" />
<path
d="M 374.719,509.137 V 187.66 c 2.769,1.543 5.523,3.156 8.301,4.758 2.312,1.355 4.597,2.703 6.914,4.062 v 316.27 l -15.215,-3.613"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path78" />
<path
d="m 647.98,651.461 c 0,0 -218.886,-113.828 -285.285,-119.688 C 288.605,539.047 87.4531,639.82 87.4531,639.82 217.297,531.715 359.031,498.277 364.813,496.539 l -0.055,0.125 c 0,0 107.012,20.899 254.082,125.852 -1.352,-22.696 -8.11,-90.215 -20.324,-166.485 l 49.464,195.43 c 0.567,0.703 -0.585,-0.391 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path80" />
<path
d="m 4369.62,563.879 h -32.63 l -86.63,96.973 v -96.973 h -38.84 v 156.719 h 35.62 l 83.87,-92.375 v 92.375 h 38.61 V 563.879"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path82" />
<path
d="M 4531.59,563.879 H 4416 v 156.719 h 113.98 v -29.18 h -74.46 v -31.711 h 71.02 v -29.414 h -71.02 v -37.695 h 76.07 v -28.719"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path84" />
<path
d="m 4673.1,645 68.03,-81.121 h -50.56 l -42.51,51.707 -41.82,-51.707 h -49.88 l 66.42,81.121 -62.74,75.598 h 50.56 l 37.46,-46.184 36.76,46.184 h 49.65 L 4673.1,645"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path86" />
<path
d="m 4903.32,691.184 h -56.53 V 563.879 h -39.75 v 127.305 h -56.76 v 29.414 h 153.04 v -29.414"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path88" />
<path
d="m 4959.36,601.797 h -59.98 v 30.558 h 59.98 v -30.558"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path90" />
<path
d="m 5143.4,675.793 c -18.39,8.492 -38.15,14.246 -58.37,14.246 -18.15,0 -28.95,-4.601 -35.85,-8.965 -11.26,-6.894 -21.37,-20.449 -21.37,-40.215 0,-29.648 24.82,-46.418 51.71,-46.418 9.65,0 19.07,2.063 28.03,5.508 v 18.391 h -22.52 v 29.18 h 62.28 v -64.571 c -16.08,-13.554 -41.59,-21.14 -67.1,-21.14 -50.33,0 -93.07,29.871 -93.07,80.425 0,48.95 39.3,80.434 94.67,80.434 31.03,0 52.17,-8.969 61.59,-12.871 v -34.004"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path92" />
<path
d="m 5308.35,563.879 h -115.58 v 156.719 h 113.97 v -29.18 h -74.46 v -31.711 h 71.02 v -29.414 h -71.02 v -37.695 h 76.07 v -28.719"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path94" />
<path
d="m 5507.78,563.879 h -32.63 l -86.64,96.973 v -96.973 h -38.83 v 156.719 h 35.61 l 83.88,-92.375 v 92.375 h 38.61 V 563.879"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path96" />
<path
d="m 5669.74,563.879 h -115.58 v 156.719 h 113.98 v -29.18 h -74.45 v -31.711 h 70.99 v -29.414 h -70.99 v -37.695 h 76.05 v -28.719"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path98" />
<path
d="m 5750.6,692.102 v -35.84 h 16.31 c 10.12,0.457 12.64,0.457 16.78,2.754 5.74,2.988 8.5,8.726 8.5,15.164 0,17.922 -17.47,17.922 -21.82,17.922 z m 20.68,28.496 c 14.24,0 28.5,0 41.14,-7.817 8.26,-5.515 20.45,-18.379 20.45,-36.988 0,-26.203 -20.22,-35.395 -26.9,-38.613 11.27,-5.508 19.08,-21.367 22.52,-29.414 4.38,-8.957 11.04,-23.664 15.18,-32.629 l 5.29,-11.258 h -42.99 c -3.44,6.894 -16.99,37.918 -20.21,44.117 -10.57,19.77 -18.38,19.77 -29.42,19.77 h -5.74 v -63.887 h -39.53 v 156.719 h 60.21"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path100" />
<path
d="m 5943.59,682.91 -22.99,-60.664 h 48.26 z m 91.68,-119.031 h -42.05 l -12.87,31.023 h -70.08 l -11.72,-31.023 h -41.37 l 63.21,156.719 h 45.25 l 69.63,-156.719"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path102" />
<path
d="m 6174.27,691.184 h -56.52 V 563.879 h -39.77 v 127.305 h -56.75 v 29.414 h 153.04 v -29.414"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path104" />
<path
d="m 6239.72,563.879 h -39.53 v 156.719 h 39.53 V 563.879"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path106" />
<path
d="m 6357.36,689.348 c -28.03,0 -49.18,-17.004 -49.18,-48.032 0,-37.461 30.8,-47.793 49.41,-47.793 25.04,0 49.4,16.543 49.4,47.571 0,29.179 -19.07,48.254 -49.63,48.254 z m -0.47,-127.539 c -54.22,0 -89.38,39.296 -89.38,80.203 0,36.535 30.34,80.656 90.08,80.656 55.37,0 89.85,-39.758 89.85,-80.656 0,-36.309 -29.65,-80.203 -90.55,-80.203"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path108" />
<path
d="m 6633.32,563.879 h -32.64 l -86.64,96.973 v -96.973 h -38.83 v 156.719 h 35.62 l 83.87,-92.375 v 92.375 h 38.62 V 563.879"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path110" />
<path
d="m 4354.92,282.043 c -22.99,-12.18 -41.6,-15.625 -61.59,-15.625 -60.89,0 -91.23,39.754 -91.23,79.969 0,39.519 31.02,80.886 94.67,80.886 28.5,0 48.26,-8.96 56.31,-13.789 V 377.41 c -6.44,4.824 -26.42,17.004 -53.54,17.004 -32.63,0 -56.77,-18.84 -56.77,-47.566 0,-30.793 26.2,-48.032 55.61,-48.032 14.71,0 28.5,4.145 41.6,10.801 l 14.94,8.508 v -36.082"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path112" />
<path
d="m 4432.32,268.484 h -39.53 v 156.719 h 39.53 V 268.484"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path114" />
<path
d="m 4615.68,395.793 h -56.53 V 268.484 h -39.76 v 127.309 h -56.76 v 29.41 h 153.05 v -29.41"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path116" />
<path
d="m 4685.72,268.484 h -39.51 v 156.719 h 39.51 V 268.484"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path118" />
<path
d="m 4847.71,268.484 h -115.59 v 156.719 h 113.98 v -29.18 h -74.46 v -31.707 h 71.01 v -29.414 h -71.01 v -37.695 h 76.07 v -28.723"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path120" />
<path
d="m 4993.82,382.93 c -10.8,5.285 -30.33,15.168 -50.32,15.168 -22.98,0 -23.67,-11.262 -23.67,-12.871 0,-9.426 15.4,-14.946 37.92,-22.981 19.76,-7.129 43.2,-19.07 43.2,-49.402 0,-36.313 -37.92,-46.426 -61.37,-46.426 -26.42,0 -51.46,12.41 -55.37,15.164 v 33.777 c 13.56,-8.496 31.49,-19.531 54.46,-19.531 5.06,0 23.44,0.238 23.44,14.25 0,10.344 -8.96,13.555 -29.63,20.684 -22.53,7.812 -51.02,18.847 -51.02,51.933 0,23.899 19.98,44.578 59.28,44.578 12.41,0 28.03,-1.375 53.08,-12.175 V 382.93"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path122" />
<path
d="m 5158.32,268.484 h -39.54 v 156.719 h 39.54 V 268.484"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path124" />
<path
d="m 5358.22,268.484 h -32.64 l -86.64,96.977 v -96.977 h -38.83 v 156.719 h 35.62 l 83.87,-92.371 v 92.371 h 38.62 V 268.484"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path126" />
<path
d="m 5504.78,382.93 c -10.8,5.285 -30.33,15.168 -50.33,15.168 -22.98,0 -23.67,-11.262 -23.67,-12.871 0,-9.426 15.4,-14.946 37.92,-22.981 19.76,-7.129 43.2,-19.07 43.2,-49.402 0,-36.313 -37.92,-46.426 -61.36,-46.426 -26.42,0 -51.46,12.41 -55.38,15.164 v 33.777 c 13.57,-8.496 31.49,-19.531 54.46,-19.531 5.06,0 23.44,0.238 23.44,14.25 0,10.344 -8.96,13.555 -29.64,20.684 -22.53,7.812 -51.01,18.847 -51.01,51.933 0,23.899 19.99,44.578 59.28,44.578 12.41,0 28.03,-1.375 53.09,-12.175 V 382.93"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path128" />
<path
d="m 5686.74,395.793 h -56.53 V 268.484 h -39.75 v 127.309 h -56.75 v 29.41 h 153.03 v -29.41"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path130" />
<path
d="m 5756.79,268.484 h -39.53 v 156.719 h 39.53 V 268.484"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path132" />
<path
d="m 5930.97,395.793 h -56.54 V 268.484 h -39.75 v 127.309 h -56.76 v 29.41 h 153.05 v -29.41"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path134" />
<path
d="m 6108.33,339.949 c 0,-12.398 -0.23,-31.941 -13.55,-48.25 -16.09,-19.304 -41.84,-25.281 -65.96,-25.281 -12.18,0 -44.8,0.457 -65.95,27.801 -6.21,8.281 -11.96,19.304 -11.96,44.59 v 86.394 h 39.53 v -77.664 c 0,-6.434 0,-15.625 2.76,-24.363 5.06,-17.461 20.92,-25.278 36.31,-25.278 22.75,0 33.32,14.946 36.54,22.981 2.75,6.894 2.75,12.871 2.75,26.66 v 77.664 h 39.53 v -85.254"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path136" />
<path
d="m 6281.32,395.793 h -56.54 V 268.484 h -39.75 v 127.309 h -56.75 v 29.41 h 153.04 v -29.41"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path138" />
<path
d="m 6422.85,268.484 h -115.61 v 156.719 h 113.99 v -29.18 h -74.46 v -31.707 h 71.02 v -29.414 h -71.02 v -37.695 h 76.08 v -28.723"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path140" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,178 @@
/* schedule-styles.css */
:root {
--font-size: 1vw;
--width: 65vw;
--img-margin: -2vw;
}
@media (orientation: landscape) {
:root {
--font-size: 1vh;
--width: 65vh;
--img-margin: -2vh;
}
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
height: 100%;
font-size: var(--font-size);
}
body {
height: 100%;
font-family: "Calibri", sans-serif;
background-color: black;
color: #FFFFFF;
}
.header {
text-align: center;
width: 100%;
}
.resource-wrapper {
/* display: flex; */
/* flex-direction: column; */
/* justify-content: space-around; */
width: 100%;
/* overflow-x: hidden; */
}
.title-row {
font-weight: bold;
font-size: 3em;
padding: 0.25em 0;
}
.event-row {
display: flex;
flex-wrap: nowrap;
overflow-x: hidden;
font-size: 3em;
}
.flex-row {
display: flex;
flex-direction: row;
}
.flex-cell {
display: flex;
flex-direction: column;
justify-content: start;
align-items: left;
flex: 0 0 633px;
margin-right: 0.5em;
}
.organizer {
font-weight: lighter;
font-style: italic;
}
#horizontal-logo {
width: 100%;
/* margin: 2em 0 1em 0; */
}
#resources-container {
width: 100%;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: start;
}
.time-range {
font-weight: lighter;
}
#grid {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
gap: 1em;
height: 100%;
}
#schedule-container {
height: 100%;
grid-column: 1;
padding: 2em;
}
#homepage-container {
grid-column: 3;
padding: 2em;
text-align: center;
display: flex;
flex-direction: column;
height: 100%;
}
.top-container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 50%;
}
#time-weather-container {
display: grid;
grid-template-columns: 1fr 1fr;
align-items: center;
width: 100%;
height: 100%;
font-size: 5em;
font-weight: bold;
}
.time {
font-family: 'Calibri', sans-serif;
}
.separator {
font-family: 'Courier New', monospace;
}
#slideshow {
grid-column: 2;
overflow: hidden;
}
.slideshow-img {
transition: opacity 1s ease-in-out;
opacity: 0;
}
#weather-icon {
align-self: end; /* Aligns the icon to the end of its grid cell */
width: 2em;
margin: var(--img-margin);
}
#temperature {
align-self: start; /* Aligns the temperature text to the start of its grid cell */
}
#description {
font-weight: lighter;
}
#quote {
font-size: 5em;
margin: 0 10%;
max-height: 40vh;
text-align: left;
}
#author {
margin-top: 2.5%;
font-size: 4em;
width: 75%;
text-align: right;
}

View File

@ -0,0 +1,9 @@
import { defineConfig } from 'vite';
export default defineConfig({
server: {
proxy: {
'/api': 'http://localhost:8080',
},
},
});

109
msGraphHelper.js Normal file
View File

@ -0,0 +1,109 @@
require('isomorphic-fetch');
// const { PublicClientApplication } = require('@azure/msal-node');
// const { TokenCredentialAuthenticationProvider } = require('@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials');
const graph = require('@microsoft/microsoft-graph-client');
const azure = require('@azure/identity');
const authProviders = require('@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials');
let _settings = undefined;
let _clientSecretCredential = undefined;
let _appClient = undefined;
function initializeGraphForAppOnlyAuth(settings) {
// Ensure settings isn't null
if (!settings) {
throw new Error('Settings cannot be undefined');
}
_settings = settings;
// Ensure settings isn't null
if (!_settings) {
throw new Error('Settings cannot be undefined');
}
if (!_clientSecretCredential) {
_clientSecretCredential = new azure.ClientSecretCredential(
_settings.tenantId,
_settings.clientId,
_settings.clientSecret
);
}
if (!_appClient) {
const authProvider = new authProviders.TokenCredentialAuthenticationProvider(
_clientSecretCredential, {
scopes: ['https://graph.microsoft.com/.default']
});
_appClient = graph.Client.initWithMiddleware({
authProvider: authProvider
});
}
}
module.exports.initializeGraphForAppOnlyAuth = initializeGraphForAppOnlyAuth;
let _userClient = undefined;
function initializeGraphForUserAuth(settings, deviceCodeCallback) {
if (!settings) {
throw new Error('Settings cannot be undefined');
}
const msalConfig = {
auth: {
clientId: settings.clientId,
authority: `https://login.microsoftonline.com/${settings.tenantId}`
}
};
const pca = new PublicClientApplication(msalConfig);
const deviceCodeRequest = {
scopes: settings.graphUserScopes,
deviceCodeCallback: (response) => {
// console.log(response.message);
deviceCodeCallback(response);
}, // Your callback function to handle the message
scopes: settings.graphUserScopes
};
pca.acquireTokenByDeviceCode(deviceCodeRequest).then((response) => {
const authProvider = new TokenCredentialAuthenticationProvider(pca, {
scopes: settings.graphUserScopes,
getToken: async () => response.accessToken
});
_userClient = graph.Client.initWithMiddleware({ authProvider });
}).catch((error) => {
console.error("Error acquiring token by device code", error);
});
}
module.exports.initializeGraphForUserAuth = initializeGraphForUserAuth;
async function getCalendarView(resourceUPN, startDateTime, endDateTime) {
if (!_userClient) {
throw new Error('Graph has not been initialized for user auth');
}
try {
const apiUrl = `/users/${resourceUPN}/calendarView?startDateTime=${startDateTime}&endDateTime=${endDateTime}`;
console.log(apiUrl);
const calendarView =
await _userClient?.api(apiUrl)
.get();
if (calendarView && calendarView.value) {
return calendarView.value;
} else {
return [];
}
} catch (error) {
console.error('Error in getCalendarView:', error);
}
}
module.exports.getCalendarView = getCalendarView;

1536
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

26
package.json Normal file
View File

@ -0,0 +1,26 @@
{
"name": "vizwall_screensaver",
"version": "1.0.0",
"description": "Screensaver that marries the slideshow, the daily schedule, and the vizwall_homepage",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js",
"dev": "nodemon server.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"@azure/identity": "^3.3.2",
"@azure/msal-node": "^2.6.1",
"@microsoft/microsoft-graph-client": "^3.0.7",
"cors": "^2.8.5",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"fs": "^0.0.1-security",
"http": "^0.0.1-security",
"http-proxy-middleware": "^2.0.6",
"https": "^1.0.0",
"isomorphic-fetch": "^3.0.0"
}
}

7
resourceUPNs.json Normal file
View File

@ -0,0 +1,7 @@
[
"s-er-1431-00@liveconcordia.onmicrosoft.com",
"s-er-1431-03@liveconcordia.onmicrosoft.com",
"s-er-1431-33@liveconcordia.onmicrosoft.com",
"s-er-1431-37@liveconcordia.onmicrosoft.com",
"s-er-1431-39@liveconcordia.onmicrosoft.com"
]

129
server.js Normal file
View File

@ -0,0 +1,129 @@
const express = require('express');
const http = require('http');
const fs = require('fs');
const fetch = require('isomorphic-fetch');
const path = require('path');
const cors = require('cors');
require('dotenv').config();
const msGraphHelper = require('./msGraphHelper');
const settings = require('./settings');
const HTTP_PORT = process.env.HTTP_PORT || 8080;
const app = express();
const slideshowDir = './slideshow';
app.use(cors({
origin: 'http://localhost:5173'
}));
app.use(express.json());
app.use(express.static('public'));
// GRAPH API SECTION - USER AUTH
//
// msGraphHelper.initializeGraphForUserAuth(settings, async (deviceCodeResponse) => {
// if (!deviceCodeResponse) {
// throw new Error("Device code response is undefined.");
// }
// console.log(deviceCodeResponse.message);
// });
//
// GRAPH API SECTION - APP ONLY AUTH
//
// msGraphHelper.initializeGraphForAppOnlyAuth(settings);
const data = fs.readFileSync('./resourceUPNs.json', 'utf8');
const resourceUPNs = JSON.parse(data);
function pollAPI() {
events = {};
}
app.get('/api/events', async (req, res) => {
try {
let events = {};
let now = new Date();
let startDateTime = new Date(now);
startDateTime.setHours(8, 0, 0, 0);
let endDateTime = new Date(now);
endDateTime.setHours(17, 0, 0, 0);
for (const resource of resourceUPNs) {
try {
const data =
// msGraphHelper.getCalendarView(resource, startDateTime.toISOString(), endDateTime.toISOString());
fs.readFileSync(`./events/${resource}.json`, 'utf8');
const resourceEvents = JSON.parse(data);
events[resource] = resourceEvents;
// console.log(`${new Date()}: Grabbed events for ${resource}`);
} catch (error) {
console.error(error);
}
}
res.json(events);
} catch (err) {
res.status(500).json({ message: err.message });
}
});
app.get('/api/weather', async (req, res) => {
try {
const lat = 45.49;
const lon = -73.58;
const appid = process.env.OPENWEATHER_APPID;
const url = `https://api.openweathermap.org/data/2.5/weather?units=metric&lat=${lat}&lon=${lon}&appid=${appid}`;
const response = await fetch(url);
if (response.ok) {
const json = await response.json();
res.json(json);
} else {
res.status(500).json({ message: 'Error in /weather' });
}
} catch (err) {
res.status(500).json({ message: err.message });
}
});
app.get('/api/quotes', async (req, res) => {
try {
const url = `https://api.quotable.io/quotes?limit=150&tags=urban|city|technology|future`
const response = await fetch(url);
if (response.ok) {
const json = await response.json();
res.json(json);
} else {
res.status(500).json({ message: 'Error in /quotes' });
}
} catch (err) {
res.status(500).json({ message: err.message });
}
});
app.use('/slideshow', express.static(slideshowDir));
app.get('/api/slideshow', (req, res) => {
fs.readdir(slideshowDir, (err, files) => {
if (err) {
console.error('Failed to list slideshow images: ', err.message);
res.status(500).json({ message: err.message });
return;
} else {
const imagePaths = files
.filter(file => /\.(jpg|jpeg|png|gif)$/i.test(file))
.map(file => `/slideshow/${file}`);
res.json(imagePaths);
}
});
});
const httpServer = http.createServer(app);
httpServer.listen(HTTP_PORT, () => console.log(`HTTP Server listening on http://localhost:${HTTP_PORT}`));

11
settings.js Normal file
View File

@ -0,0 +1,11 @@
const settings = {
'clientId': process.env.AZURE_CLIENT_ID,
'clientSecret': process.env.AZURE_CLIENT_SECRET,
'tenantId': process.env.AZURE_TENANT_ID,
'graphUserScopes': [
'calendars.read',
'calendars.read.shared'
]
};
module.exports = settings;

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

BIN
slideshow/20220305_Alps.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

BIN
slideshow/ChukchiSea.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

BIN
slideshow/IceGreatLakes.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

BIN
slideshow/Image_006.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

BIN
slideshow/Image_013.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

BIN
slideshow/Layout 1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\suhanna\Pictures\wetransfer_some-special-mission-for-you_2023-04-13_1213.zip

Some files were not shown because too many files have changed in this diff Show More