diff --git a/cypress.config.js b/cypress.config.js index dd16b64..81ccad1 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -1,4 +1,16 @@ /* eslint-env node */ +// The Lucia project. +// Copyright 2023-2026 DSP, inc. All rights reserved. +// Authors: +// chiayin.kuo@dsp.im (chiayin), 2023/1/31 +// cindy.chang@dsp.im (Cindy Chang), 2024/8/12 +// imacat.yang@dsp.im (imacat), 2026/3/5 +/** + * @module cypress.config + * Cypress E2E test configuration with viewport + * settings and base URL. + */ + const { defineConfig } = require("cypress"); module.exports = defineConfig({ diff --git a/cypress/e2e/accountAdmin.cy.js b/cypress/e2e/accountAdmin.cy.js index 32f2329..2038923 100644 --- a/cypress/e2e/accountAdmin.cy.js +++ b/cypress/e2e/accountAdmin.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Account Management', () => { diff --git a/cypress/e2e/accountAdmin/accountDuplicationCheck.cy.js b/cypress/e2e/accountAdmin/accountDuplicationCheck.cy.js index 43717af..e20aa7e 100644 --- a/cypress/e2e/accountAdmin/accountDuplicationCheck.cy.js +++ b/cypress/e2e/accountAdmin/accountDuplicationCheck.cy.js @@ -1,3 +1,9 @@ +// The Lucia project. +// Copyright 2024-2026 DSP, inc. All rights reserved. +// Authors: +// cindy.chang@dsp.im (Cindy Chang), 2024/07/03 +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../../support/intercept'; const MSG_ACCOUNT_NOT_UNIQUE = 'Account has already been registered.'; diff --git a/cypress/e2e/accountAdmin/confirmPasswordMessage.cy.js b/cypress/e2e/accountAdmin/confirmPasswordMessage.cy.js index be1231d..ed700df 100644 --- a/cypress/e2e/accountAdmin/confirmPasswordMessage.cy.js +++ b/cypress/e2e/accountAdmin/confirmPasswordMessage.cy.js @@ -1,3 +1,9 @@ +// The Lucia project. +// Copyright 2024-2026 DSP, inc. All rights reserved. +// Authors: +// cindy.chang@dsp.im (Cindy Chang), 2024/07/02 +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../../support/intercept'; describe('Password validation on create account.', () => { diff --git a/cypress/e2e/accountAdmin/createAccont.cy.js b/cypress/e2e/accountAdmin/createAccont.cy.js index 75e9def..cc9cf60 100644 --- a/cypress/e2e/accountAdmin/createAccont.cy.js +++ b/cypress/e2e/accountAdmin/createAccont.cy.js @@ -1,3 +1,9 @@ +// The Lucia project. +// Copyright 2024-2026 DSP, inc. All rights reserved. +// Authors: +// cindy.chang@dsp.im (Cindy Chang), 2024/07/02 +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../../support/intercept'; describe('Create an Account', () => { diff --git a/cypress/e2e/accountAdmin/deleteAccount.cy.js b/cypress/e2e/accountAdmin/deleteAccount.cy.js index b37b1ee..dbac1fc 100644 --- a/cypress/e2e/accountAdmin/deleteAccount.cy.js +++ b/cypress/e2e/accountAdmin/deleteAccount.cy.js @@ -1,3 +1,9 @@ +// The Lucia project. +// Copyright 2024-2026 DSP, inc. All rights reserved. +// Authors: +// cindy.chang@dsp.im (Cindy Chang), 2024/07/03 +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../../support/intercept'; describe('Delete an Account', () => { diff --git a/cypress/e2e/accountAdmin/editAccount.cy.js b/cypress/e2e/accountAdmin/editAccount.cy.js index 891945f..2ab6de0 100644 --- a/cypress/e2e/accountAdmin/editAccount.cy.js +++ b/cypress/e2e/accountAdmin/editAccount.cy.js @@ -1,3 +1,9 @@ +// The Lucia project. +// Copyright 2024-2026 DSP, inc. All rights reserved. +// Authors: +// cindy.chang@dsp.im (Cindy Chang), 2024/07/03 +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../../support/intercept'; const MODAL_TITLE_ACCOUNT_EDIT = 'Account Edit'; diff --git a/cypress/e2e/accountCrud.cy.js b/cypress/e2e/accountCrud.cy.js index bf138dc..00981d7 100644 --- a/cypress/e2e/accountCrud.cy.js +++ b/cypress/e2e/accountCrud.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Account Management CRUD', () => { diff --git a/cypress/e2e/accountInfo.cy.js b/cypress/e2e/accountInfo.cy.js index df8b1e4..30b6d36 100644 --- a/cypress/e2e/accountInfo.cy.js +++ b/cypress/e2e/accountInfo.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Account Info Modal', () => { diff --git a/cypress/e2e/compare.cy.js b/cypress/e2e/compare.cy.js index e9c37cf..0cfb486 100644 --- a/cypress/e2e/compare.cy.js +++ b/cypress/e2e/compare.cy.js @@ -1,3 +1,10 @@ +// The Lucia project. +// Copyright 2024-2026 DSP, inc. All rights reserved. +// Authors: +// chiayin.kuo@dsp.im (chiayin), 2024/02/22 +// cindy.chang@dsp.im (Cindy Chang), 2024/05/30 +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Compare', () => { diff --git a/cypress/e2e/discoverConformance.cy.js b/cypress/e2e/discoverConformance.cy.js index ff5a8b4..810b2c0 100644 --- a/cypress/e2e/discoverConformance.cy.js +++ b/cypress/e2e/discoverConformance.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Discover Conformance Page', () => { diff --git a/cypress/e2e/discoverMap.cy.js b/cypress/e2e/discoverMap.cy.js index d3531aa..6467171 100644 --- a/cypress/e2e/discoverMap.cy.js +++ b/cypress/e2e/discoverMap.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Discover Map Page', () => { diff --git a/cypress/e2e/discoverPerformance.cy.js b/cypress/e2e/discoverPerformance.cy.js index e3826b4..d690b75 100644 --- a/cypress/e2e/discoverPerformance.cy.js +++ b/cypress/e2e/discoverPerformance.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Discover Performance Page', () => { diff --git a/cypress/e2e/discoverTabs.cy.js b/cypress/e2e/discoverTabs.cy.js index e4d71eb..0cd55f3 100644 --- a/cypress/e2e/discoverTabs.cy.js +++ b/cypress/e2e/discoverTabs.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Discover Tab Navigation', () => { diff --git a/cypress/e2e/edgeCases.cy.js b/cypress/e2e/edgeCases.cy.js index 701f59a..c111f2d 100644 --- a/cypress/e2e/edgeCases.cy.js +++ b/cypress/e2e/edgeCases.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Edge Cases', () => { diff --git a/cypress/e2e/fileOperations.cy.js b/cypress/e2e/fileOperations.cy.js index 93f64cb..10c3959 100644 --- a/cypress/e2e/fileOperations.cy.js +++ b/cypress/e2e/fileOperations.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('File Operations', () => { diff --git a/cypress/e2e/files.cy.js b/cypress/e2e/files.cy.js index 570e31e..211e871 100644 --- a/cypress/e2e/files.cy.js +++ b/cypress/e2e/files.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Files Page', () => { diff --git a/cypress/e2e/filesCompare.cy.js b/cypress/e2e/filesCompare.cy.js index d65b348..7bdf398 100644 --- a/cypress/e2e/filesCompare.cy.js +++ b/cypress/e2e/filesCompare.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Files Page - COMPARE Tab', () => { diff --git a/cypress/e2e/filesToDiscover.cy.js b/cypress/e2e/filesToDiscover.cy.js index 6dbeebd..452ecc7 100644 --- a/cypress/e2e/filesToDiscover.cy.js +++ b/cypress/e2e/filesToDiscover.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Files to Discover Entry Flow', () => { diff --git a/cypress/e2e/login.cy.js b/cypress/e2e/login.cy.js index 4bb626b..2d26c1d 100644 --- a/cypress/e2e/login.cy.js +++ b/cypress/e2e/login.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { setupApiIntercepts, loginWithFixtures } from '../support/intercept'; describe('Login Flow', () => { diff --git a/cypress/e2e/logout.cy.js b/cypress/e2e/logout.cy.js index 6c2b5ef..1439b08 100644 --- a/cypress/e2e/logout.cy.js +++ b/cypress/e2e/logout.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Logout Flow', () => { diff --git a/cypress/e2e/myAccount.cy.js b/cypress/e2e/myAccount.cy.js index 5e022bf..c6b3bb4 100644 --- a/cypress/e2e/myAccount.cy.js +++ b/cypress/e2e/myAccount.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('My Account Page', () => { diff --git a/cypress/e2e/navigation.cy.js b/cypress/e2e/navigation.cy.js index d8fdc3e..82088c1 100644 --- a/cypress/e2e/navigation.cy.js +++ b/cypress/e2e/navigation.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures, setupApiIntercepts } from '../support/intercept'; describe('Navigation and Routing', () => { diff --git a/cypress/e2e/notFound404.cy.js b/cypress/e2e/notFound404.cy.js index 74d256e..43e934e 100644 --- a/cypress/e2e/notFound404.cy.js +++ b/cypress/e2e/notFound404.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('404 Not Found Page', () => { diff --git a/cypress/e2e/pageAdmin.cy.js b/cypress/e2e/pageAdmin.cy.js index c58d088..7cbdec7 100644 --- a/cypress/e2e/pageAdmin.cy.js +++ b/cypress/e2e/pageAdmin.cy.js @@ -1,3 +1,9 @@ +// The Lucia project. +// Copyright 2024-2026 DSP, inc. All rights reserved. +// Authors: +// cindy.chang@dsp.im (Cindy Chang), 2024/06/03 +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('Discover page navigation tabs', () => { diff --git a/cypress/e2e/pasteUrlLoginRedirect.cy.js b/cypress/e2e/pasteUrlLoginRedirect.cy.js index bb3b785..be03807 100644 --- a/cypress/e2e/pasteUrlLoginRedirect.cy.js +++ b/cypress/e2e/pasteUrlLoginRedirect.cy.js @@ -1,3 +1,9 @@ +// The Lucia project. +// Copyright 2024-2026 DSP, inc. All rights reserved. +// Authors: +// cindy.chang@dsp.im (Cindy Chang), 2024/06/11 +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { setupApiIntercepts } from '../support/intercept'; describe('Paste URL login redirect', () => { diff --git a/cypress/e2e/sweetAlertModals.cy.js b/cypress/e2e/sweetAlertModals.cy.js index 4abaacb..8b1ec12 100644 --- a/cypress/e2e/sweetAlertModals.cy.js +++ b/cypress/e2e/sweetAlertModals.cy.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + import { loginWithFixtures } from '../support/intercept'; describe('SweetAlert2 Modals', () => { diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 374bf91..f93cdfb 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -1,3 +1,9 @@ +// The Lucia project. +// Copyright 2023-2026 DSP, inc. All rights reserved. +// Authors: +// chiayin.kuo@dsp.im (chiayin), 2023/01/31 +// imacat.yang@dsp.im (imacat), 2026/03/06 + // *********************************************** // This example commands.js shows you how to // create various custom commands and overwrite diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js index 7e53ad2..45bc455 100644 --- a/cypress/support/e2e.js +++ b/cypress/support/e2e.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2023-2026 DSP, inc. All rights reserved. +// Authors: +// chiayin.kuo@dsp.im (chiayin), 2023/01/31 + // *********************************************************** // This example support/index.js is processed and // loaded automatically before your test files. diff --git a/cypress/support/intercept.js b/cypress/support/intercept.js index 4960ce7..70744ef 100644 --- a/cypress/support/intercept.js +++ b/cypress/support/intercept.js @@ -1,3 +1,8 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/03/05 + /** * Sets up cy.intercept for all API endpoints using fixture files. * Call setupApiIntercepts() in beforeEach to mock the entire backend. diff --git a/eslint.config.mjs b/eslint.config.mjs index 3558b52..b28702e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,3 +1,13 @@ +// The Lucia project. +// Copyright 2026-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2026/3/6 +/** + * @module eslint.config + * ESLint flat configuration for Vue, Cypress, and + * Prettier integration. + */ + import js from "@eslint/js"; import pluginVue from "eslint-plugin-vue"; import pluginCypress from "eslint-plugin-cypress"; diff --git a/index.html b/index.html index 0f1a1b6..118efda 100644 --- a/index.html +++ b/index.html @@ -1,3 +1,10 @@ +
diff --git a/postcss.config.cjs b/postcss.config.cjs index 483f378..898dbf7 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -1,3 +1,13 @@ +// The Lucia project. +// Copyright 2023-2026 DSP, inc. All rights reserved. +// Authors: +// chiayin.kuo@dsp.im (chiayin), 2023/1/31 +// imacat.yang@dsp.im (imacat), 2026/3/6 +/** + * @module postcss.config + * PostCSS configuration with Tailwind CSS plugin. + */ + module.exports = { plugins: { "@tailwindcss/postcss": {}, diff --git a/src/App.vue b/src/App.vue index 543cfdb..22ced1e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,5 +3,14 @@ diff --git a/src/api/auth.js b/src/api/auth.js index c14f55e..4d65701 100644 --- a/src/api/auth.js +++ b/src/api/auth.js @@ -1,10 +1,21 @@ +// The Lucia project. +// Copyright 2023-2026 DSP, inc. All rights reserved. +// Authors: +// imacat.yang@dsp.im (imacat), 2023/9/23 +/** @module auth Authentication token refresh utilities. */ + import axios from 'axios'; import { getCookie, setCookie, setCookieWithoutExpiration } from '@/utils/cookieUtil.js'; /** - * Refresh the access token using the refresh token cookie. - * Uses plain axios (not apiClient) to avoid interceptor loops. + * Refreshes the access token using the stored refresh token cookie. + * + * Uses plain axios (not apiClient) to avoid interceptor loops. Updates + * both the access token (session cookie) and refresh token (6-month + * expiry) cookies. + * * @returns {Promise