···7373 return { branch, commit, shortCommit }
7474}
75757676+export async function getFileLastUpdated(path: string) {
7777+ try {
7878+ // Get ISO date of last commit for file
7979+ const date = await git.log(['-1', '--format=%cI', '--', path])
8080+ return date.latest?.date || new Date().toISOString()
8181+ } catch {
8282+ return new Date().toISOString()
8383+ }
8484+}
8585+7686export async function getEnv(isDevelopment: boolean) {
7787 const { commit, shortCommit, branch } = await getGitInfo()
7888 const env = isDevelopment
+81
i18n/locales/en.json
···971971 "up_to_you": "Up to you!"
972972 }
973973 }
974974+ },
975975+ "privacy_policy": {
976976+ "title": "privacy policy",
977977+ "last_updated": "Last updated: {date}",
978978+ "welcome": "Welcome to {app}. We are committed to protecting your privacy. This policy explains what data we collect, how we use it, and your rights regarding your information.",
979979+ "cookies": {
980980+ "title": "Cookies",
981981+ "what_are": {
982982+ "title": "What are cookies?",
983983+ "p1": "Cookies are small text files stored on your device when you visit a website. Their purpose is to enhance your browsing experience by remembering certain preferences and settings."
984984+ },
985985+ "types": {
986986+ "title": "What cookies do we use?",
987987+ "p1": "We only use {bold} for purposes strictly necessary for the site's functionality. We do not use third-party or advertising cookies.",
988988+ "bold": "essential technical cookies",
989989+ "li1": "{li11}{separator} {li12}",
990990+ "li2": "{li21}{separator} {li22}",
991991+ "separator": ":",
992992+ "cookie_vdpl": "__vdpl",
993993+ "cookie_vdpl_desc": "This cookie is used by our hosting provider (Vercel) for skew protection. It ensures you fetch assets from the correct deployment version if a new update is released while you are browsing. It does not track you.",
994994+ "cookie_h3": "h3",
995995+ "cookie_h3_desc": "This is our secure session cookie. It stores the OAuth access token when you connect your Atmosphere account. It is essential for maintaining your authenticated session."
996996+ },
997997+ "local_storage": {
998998+ "title": "Local storage",
999999+ "p1": "In addition to session cookies, we use your browser's {bold} to save your display preferences. This allows us to remember the theme (light/dark) and some other {settings} you have selected, so you don't have to reconfigure them on each visit.",
10001000+ "bold": "Local Storage",
10011001+ "p2": "This information is purely functional, stored only on your device, and {bold2}. We use it exclusively to improve your experience on our website.",
10021002+ "bold2": "contains no personal data nor is it used to track you",
10031003+ "settings": "settings"
10041004+ },
10051005+ "management": {
10061006+ "title": "Managing cookies",
10071007+ "p1": "You can configure your browser to accept, reject, or delete cookies according to your preferences. However, please note that {bold}.",
10081008+ "bold": "rejecting essential cookies may prevent full access to the application",
10091009+ "p2": "Below are links with instructions for cookie management in the most commonly used browsers:",
10101010+ "chrome": "Google Chrome (opens in a new window)",
10111011+ "firefox": "Mozilla Firefox (opens in a new window)",
10121012+ "edge": "Microsoft Edge (opens in a new window)"
10131013+ }
10141014+ },
10151015+ "analytics": {
10161016+ "title": "Analytics",
10171017+ "p1": "We use {bold} to understand how visitors use our website. This helps us improve the user experience and identify issues.",
10181018+ "bold": "Vercel Web Analytics",
10191019+ "p2": "Vercel Analytics is designed with privacy in mind:",
10201020+ "li1": "It does not use cookies",
10211021+ "li2": "It does not collect personal identifiers",
10221022+ "li3": "It does not track users across websites",
10231023+ "li4": "All data is aggregated and anonymised",
10241024+ "p3": "The only information collected includes: page URLs, referrer, country/region, device type, browser, and operating system. This data cannot be used to identify individual users."
10251025+ },
10261026+ "authenticated": {
10271027+ "title": "Authenticated users",
10281028+ "p1": "When you connect your {bold} account to npmx, we store your OAuth access token in a secure, HTTP-only session cookie. This token is used solely to authenticate requests on your behalf.",
10291029+ "bold": "Atmosphere",
10301030+ "p2": "We do not store your credentials, and we do not access any data beyond what is necessary to provide the features you use. You can disconnect your account at any time from the {settings} page.",
10311031+ "settings": "settings"
10321032+ },
10331033+ "data_retention": {
10341034+ "title": "Data retention",
10351035+ "p1": "Session cookies are automatically deleted when you close your browser or after a period of inactivity. Local storage preferences remain on your device until you clear your browser data. Analytics data is retained in aggregate form and cannot be linked to individual users."
10361036+ },
10371037+ "your_rights": {
10381038+ "title": "Your rights",
10391039+ "p1": "You have the right to:",
10401040+ "li1": "Access information about what data we collect",
10411041+ "li2": "Clear your local storage and cookies at any time",
10421042+ "li3": "Disconnect your authenticated session",
10431043+ "li4": "Request information about our data practices",
10441044+ "p2": "Since we do not collect personal data, there is typically no personal information to delete or export."
10451045+ },
10461046+ "contact": {
10471047+ "title": "Contact us",
10481048+ "p1": "For any questions or concerns about this privacy policy, you can contact us by opening an issue on our {link}.",
10491049+ "link": "GitHub repository"
10501050+ },
10511051+ "changes": {
10521052+ "title": "Changes to this policy",
10531053+ "p1": "We may update this privacy policy from time to time. Any changes will be published on this page with an updated revision date."
10541054+ }
9741055 }
9751056}
+81
lunaria/files/en-GB.json
···971971 "up_to_you": "Up to you!"
972972 }
973973 }
974974+ },
975975+ "privacy_policy": {
976976+ "title": "privacy policy",
977977+ "last_updated": "Last updated: {date}",
978978+ "welcome": "Welcome to {app}. We are committed to protecting your privacy. This policy explains what data we collect, how we use it, and your rights regarding your information.",
979979+ "cookies": {
980980+ "title": "Cookies",
981981+ "what_are": {
982982+ "title": "What are cookies?",
983983+ "p1": "Cookies are small text files stored on your device when you visit a website. Their purpose is to enhance your browsing experience by remembering certain preferences and settings."
984984+ },
985985+ "types": {
986986+ "title": "What cookies do we use?",
987987+ "p1": "We only use {bold} for purposes strictly necessary for the site's functionality. We do not use third-party or advertising cookies.",
988988+ "bold": "essential technical cookies",
989989+ "li1": "{li11}{separator} {li12}",
990990+ "li2": "{li21}{separator} {li22}",
991991+ "separator": ":",
992992+ "cookie_vdpl": "__vdpl",
993993+ "cookie_vdpl_desc": "This cookie is used by our hosting provider (Vercel) for skew protection. It ensures you fetch assets from the correct deployment version if a new update is released while you are browsing. It does not track you.",
994994+ "cookie_h3": "h3",
995995+ "cookie_h3_desc": "This is our secure session cookie. It stores the OAuth access token when you connect your Atmosphere account. It is essential for maintaining your authenticated session."
996996+ },
997997+ "local_storage": {
998998+ "title": "Local storage",
999999+ "p1": "In addition to session cookies, we use your browser's {bold} to save your display preferences. This allows us to remember the theme (light/dark) and some other {settings} you have selected, so you don't have to reconfigure them on each visit.",
10001000+ "bold": "Local Storage",
10011001+ "p2": "This information is purely functional, stored only on your device, and {bold2}. We use it exclusively to improve your experience on our website.",
10021002+ "bold2": "contains no personal data nor is it used to track you",
10031003+ "settings": "settings"
10041004+ },
10051005+ "management": {
10061006+ "title": "Managing cookies",
10071007+ "p1": "You can configure your browser to accept, reject, or delete cookies according to your preferences. However, please note that {bold}.",
10081008+ "bold": "rejecting essential cookies may prevent full access to the application",
10091009+ "p2": "Below are links with instructions for cookie management in the most commonly used browsers:",
10101010+ "chrome": "Google Chrome (opens in a new window)",
10111011+ "firefox": "Mozilla Firefox (opens in a new window)",
10121012+ "edge": "Microsoft Edge (opens in a new window)"
10131013+ }
10141014+ },
10151015+ "analytics": {
10161016+ "title": "Analytics",
10171017+ "p1": "We use {bold} to understand how visitors use our website. This helps us improve the user experience and identify issues.",
10181018+ "bold": "Vercel Web Analytics",
10191019+ "p2": "Vercel Analytics is designed with privacy in mind:",
10201020+ "li1": "It does not use cookies",
10211021+ "li2": "It does not collect personal identifiers",
10221022+ "li3": "It does not track users across websites",
10231023+ "li4": "All data is aggregated and anonymised",
10241024+ "p3": "The only information collected includes: page URLs, referrer, country/region, device type, browser, and operating system. This data cannot be used to identify individual users."
10251025+ },
10261026+ "authenticated": {
10271027+ "title": "Authenticated users",
10281028+ "p1": "When you connect your {bold} account to npmx, we store your OAuth access token in a secure, HTTP-only session cookie. This token is used solely to authenticate requests on your behalf.",
10291029+ "bold": "Atmosphere",
10301030+ "p2": "We do not store your credentials, and we do not access any data beyond what is necessary to provide the features you use. You can disconnect your account at any time from the {settings} page.",
10311031+ "settings": "settings"
10321032+ },
10331033+ "data_retention": {
10341034+ "title": "Data retention",
10351035+ "p1": "Session cookies are automatically deleted when you close your browser or after a period of inactivity. Local storage preferences remain on your device until you clear your browser data. Analytics data is retained in aggregate form and cannot be linked to individual users."
10361036+ },
10371037+ "your_rights": {
10381038+ "title": "Your rights",
10391039+ "p1": "You have the right to:",
10401040+ "li1": "Access information about what data we collect",
10411041+ "li2": "Clear your local storage and cookies at any time",
10421042+ "li3": "Disconnect your authenticated session",
10431043+ "li4": "Request information about our data practices",
10441044+ "p2": "Since we do not collect personal data, there is typically no personal information to delete or export."
10451045+ },
10461046+ "contact": {
10471047+ "title": "Contact us",
10481048+ "p1": "For any questions or concerns about this privacy policy, you can contact us by opening an issue on our {link}.",
10491049+ "link": "GitHub repository"
10501050+ },
10511051+ "changes": {
10521052+ "title": "Changes to this policy",
10531053+ "p1": "We may update this privacy policy from time to time. Any changes will be published on this page with an updated revision date."
10541054+ }
9741055 }
9751056}
+81
lunaria/files/en-US.json
···971971 "up_to_you": "Up to you!"
972972 }
973973 }
974974+ },
975975+ "privacy_policy": {
976976+ "title": "privacy policy",
977977+ "last_updated": "Last updated: {date}",
978978+ "welcome": "Welcome to {app}. We are committed to protecting your privacy. This policy explains what data we collect, how we use it, and your rights regarding your information.",
979979+ "cookies": {
980980+ "title": "Cookies",
981981+ "what_are": {
982982+ "title": "What are cookies?",
983983+ "p1": "Cookies are small text files stored on your device when you visit a website. Their purpose is to enhance your browsing experience by remembering certain preferences and settings."
984984+ },
985985+ "types": {
986986+ "title": "What cookies do we use?",
987987+ "p1": "We only use {bold} for purposes strictly necessary for the site's functionality. We do not use third-party or advertising cookies.",
988988+ "bold": "essential technical cookies",
989989+ "li1": "{li11}{separator} {li12}",
990990+ "li2": "{li21}{separator} {li22}",
991991+ "separator": ":",
992992+ "cookie_vdpl": "__vdpl",
993993+ "cookie_vdpl_desc": "This cookie is used by our hosting provider (Vercel) for skew protection. It ensures you fetch assets from the correct deployment version if a new update is released while you are browsing. It does not track you.",
994994+ "cookie_h3": "h3",
995995+ "cookie_h3_desc": "This is our secure session cookie. It stores the OAuth access token when you connect your Atmosphere account. It is essential for maintaining your authenticated session."
996996+ },
997997+ "local_storage": {
998998+ "title": "Local storage",
999999+ "p1": "In addition to session cookies, we use your browser's {bold} to save your display preferences. This allows us to remember the theme (light/dark) and some other {settings} you have selected, so you don't have to reconfigure them on each visit.",
10001000+ "bold": "Local Storage",
10011001+ "p2": "This information is purely functional, stored only on your device, and {bold2}. We use it exclusively to improve your experience on our website.",
10021002+ "bold2": "contains no personal data nor is it used to track you",
10031003+ "settings": "settings"
10041004+ },
10051005+ "management": {
10061006+ "title": "Managing cookies",
10071007+ "p1": "You can configure your browser to accept, reject, or delete cookies according to your preferences. However, please note that {bold}.",
10081008+ "bold": "rejecting essential cookies may prevent full access to the application",
10091009+ "p2": "Below are links with instructions for cookie management in the most commonly used browsers:",
10101010+ "chrome": "Google Chrome (opens in a new window)",
10111011+ "firefox": "Mozilla Firefox (opens in a new window)",
10121012+ "edge": "Microsoft Edge (opens in a new window)"
10131013+ }
10141014+ },
10151015+ "analytics": {
10161016+ "title": "Analytics",
10171017+ "p1": "We use {bold} to understand how visitors use our website. This helps us improve the user experience and identify issues.",
10181018+ "bold": "Vercel Web Analytics",
10191019+ "p2": "Vercel Analytics is designed with privacy in mind:",
10201020+ "li1": "It does not use cookies",
10211021+ "li2": "It does not collect personal identifiers",
10221022+ "li3": "It does not track users across websites",
10231023+ "li4": "All data is aggregated and anonymised",
10241024+ "p3": "The only information collected includes: page URLs, referrer, country/region, device type, browser, and operating system. This data cannot be used to identify individual users."
10251025+ },
10261026+ "authenticated": {
10271027+ "title": "Authenticated users",
10281028+ "p1": "When you connect your {bold} account to npmx, we store your OAuth access token in a secure, HTTP-only session cookie. This token is used solely to authenticate requests on your behalf.",
10291029+ "bold": "Atmosphere",
10301030+ "p2": "We do not store your credentials, and we do not access any data beyond what is necessary to provide the features you use. You can disconnect your account at any time from the {settings} page.",
10311031+ "settings": "settings"
10321032+ },
10331033+ "data_retention": {
10341034+ "title": "Data retention",
10351035+ "p1": "Session cookies are automatically deleted when you close your browser or after a period of inactivity. Local storage preferences remain on your device until you clear your browser data. Analytics data is retained in aggregate form and cannot be linked to individual users."
10361036+ },
10371037+ "your_rights": {
10381038+ "title": "Your rights",
10391039+ "p1": "You have the right to:",
10401040+ "li1": "Access information about what data we collect",
10411041+ "li2": "Clear your local storage and cookies at any time",
10421042+ "li3": "Disconnect your authenticated session",
10431043+ "li4": "Request information about our data practices",
10441044+ "p2": "Since we do not collect personal data, there is typically no personal information to delete or export."
10451045+ },
10461046+ "contact": {
10471047+ "title": "Contact us",
10481048+ "p1": "For any questions or concerns about this privacy policy, you can contact us by opening an issue on our {link}.",
10491049+ "link": "GitHub repository"
10501050+ },
10511051+ "changes": {
10521052+ "title": "Changes to this policy",
10531053+ "p1": "We may update this privacy policy from time to time. Any changes will be published on this page with an updated revision date."
10541054+ }
9741055 }
9751056}