-
-
-
-
-
-
-
-
- Your Social Campaigns
-
-
- New to Matdash?
-
- Create an account
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ Finance Information System
+
+
+
+ © {{ new Date().getFullYear() }} FIS. All rights reserved.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/auth/Loginn.vue b/pages/auth/Loginn.vue
new file mode 100644
index 0000000..48e47a8
--- /dev/null
+++ b/pages/auth/Loginn.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+ Your Social Campaigns
+
+
+ New to Matdash?
+
+ Create an account
+
+
+
+
+
+
+
+
diff --git a/pages/callback.vue b/pages/callback.vue
new file mode 100644
index 0000000..daea90d
--- /dev/null
+++ b/pages/callback.vue
@@ -0,0 +1,61 @@
+
+
+
User Profil:
+
{{ tokenUser }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/coba2.vue b/pages/coba2.vue
index bc440a5..e8fdf05 100644
--- a/pages/coba2.vue
+++ b/pages/coba2.vue
@@ -3,6 +3,7 @@
+
diff --git a/pages/master/index.vue b/pages/master/index.vue
new file mode 100644
index 0000000..96ea215
--- /dev/null
+++ b/pages/master/index.vue
@@ -0,0 +1,3 @@
+
+ master
+
\ No newline at end of file
diff --git a/pages/signin.vue b/pages/signin.vue
new file mode 100644
index 0000000..b9b4da4
--- /dev/null
+++ b/pages/signin.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/base46.ts b/plugins/base46.ts
new file mode 100644
index 0000000..4c1b391
--- /dev/null
+++ b/plugins/base46.ts
@@ -0,0 +1,24 @@
+function encodeBase64(value: string): string {
+ if (process.client) {
+ return window.btoa(unescape(encodeURIComponent(value)))
+ } else {
+ return Buffer.from(value, 'ascii').toString('base64')
+ }
+}
+
+function decodeBase64(value: string): string {
+ if (process.client) {
+ return decodeURIComponent(escape(window.atob(value)))
+ } else {
+ return Buffer.from(value, 'base64').toString('ascii')
+ }
+}
+
+export default defineNuxtPlugin(() => {
+ return {
+ provide: {
+ encodeBase64,
+ decodeBase64
+ }
+ }
+})
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9ff65dc..1ae84f0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -20,6 +20,21 @@ dependencies:
apexcharts:
specifier: 4.5.0
version: 4.5.0
+ axios:
+ specifier: ^1.9.0
+ version: 1.9.0
+ cors:
+ specifier: ^2.8.5
+ version: 2.8.5
+ nuxt-auth-utils:
+ specifier: ^0.5.16
+ version: 0.5.20
+ openid-client:
+ specifier: ^5.7.1
+ version: 5.7.1
+ pinia:
+ specifier: ^3.0.2
+ version: 3.0.2(typescript@5.8.3)(vue@3.5.13)
sass:
specifier: 1.70.0
version: 1.70.0
@@ -38,14 +53,36 @@ dependencies:
vuetify:
specifier: 3.7.18
version: 3.7.18(typescript@5.8.3)(vue@3.5.13)
+ zod:
+ specifier: ^3.25.46
+ version: 3.25.46
devDependencies:
+ '@sidebase/nuxt-auth':
+ specifier: ^0.10.1
+ version: 0.10.1(next-auth@4.21.1)
nuxt:
specifier: 3.16.2
version: 3.16.2(sass@1.70.0)(typescript@5.8.3)(vite@6.3.5)
packages:
+ /@adonisjs/hash@9.1.1:
+ resolution: {integrity: sha512-ZkRguwjAp4skKvKDdRAfdJ2oqQ0N7p9l3sioyXO1E8o0WcsyDgEpsTQtuVNoIdMiw4sn4gJlmL3nyF4BcK1ZDQ==}
+ engines: {node: '>=20.6.0'}
+ peerDependencies:
+ argon2: ^0.31.2 || ^0.41.0 || ^0.43.0
+ bcrypt: ^5.1.1 || ^6.0.0
+ peerDependenciesMeta:
+ argon2:
+ optional: true
+ bcrypt:
+ optional: true
+ dependencies:
+ '@phc/format': 1.0.0
+ '@poppinss/utils': 6.9.4
+ dev: false
+
/@ampproject/remapping@2.3.0:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
@@ -252,6 +289,11 @@ packages:
transitivePeerDependencies:
- supports-color
+ /@babel/runtime@7.27.1:
+ resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
/@babel/template@7.27.2:
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
@@ -618,6 +660,11 @@ packages:
resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
dev: true
+ /@lukeed/ms@2.0.2:
+ resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==}
+ engines: {node: '>=8'}
+ dev: false
+
/@mapbox/node-pre-gyp@1.0.11:
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
hasBin: true
@@ -771,13 +818,98 @@ packages:
unixify: 1.0.0
urlpattern-polyfill: 8.0.2
yargs: 17.7.2
- zod: 3.25.23
+ zod: 3.25.46
transitivePeerDependencies:
- encoding
- rollup
- supports-color
dev: true
+ /@next/env@13.5.11:
+ resolution: {integrity: sha512-fbb2C7HChgM7CemdCY+y3N1n8pcTKdqtQLbC7/EQtPdLvlMUT9JX/dBYl8MMZAtYG4uVMyPFHXckb68q/NRwqg==}
+ dev: true
+
+ /@next/swc-darwin-arm64@13.5.9:
+ resolution: {integrity: sha512-pVyd8/1y1l5atQRvOaLOvfbmRwefxLhqQOzYo/M7FQ5eaRwA1+wuCn7t39VwEgDd7Aw1+AIWwd+MURXUeXhwDw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@next/swc-darwin-x64@13.5.9:
+ resolution: {integrity: sha512-DwdeJqP7v8wmoyTWPbPVodTwCybBZa02xjSJ6YQFIFZFZ7dFgrieKW4Eo0GoIcOJq5+JxkQyejmI+8zwDp3pwA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@next/swc-linux-arm64-gnu@13.5.9:
+ resolution: {integrity: sha512-wdQsKsIsGSNdFojvjW3Ozrh8Q00+GqL3wTaMjDkQxVtRbAqfFBtrLPO0IuWChVUP2UeuQcHpVeUvu0YgOP00+g==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@next/swc-linux-arm64-musl@13.5.9:
+ resolution: {integrity: sha512-6VpS+bodQqzOeCwGxoimlRoosiWlSc0C224I7SQWJZoyJuT1ChNCo+45QQH+/GtbR/s7nhaUqmiHdzZC9TXnXA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@next/swc-linux-x64-gnu@13.5.9:
+ resolution: {integrity: sha512-XxG3yj61WDd28NA8gFASIR+2viQaYZEFQagEodhI/R49gXWnYhiflTeeEmCn7Vgnxa/OfK81h1gvhUZ66lozpw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@next/swc-linux-x64-musl@13.5.9:
+ resolution: {integrity: sha512-/dnscWqfO3+U8asd+Fc6dwL2l9AZDl7eKtPNKW8mKLh4Y4wOpjJiamhe8Dx+D+Oq0GYVjuW0WwjIxYWVozt2bA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@next/swc-win32-arm64-msvc@13.5.9:
+ resolution: {integrity: sha512-T/iPnyurOK5a4HRUcxAlss8uzoEf5h9tkd+W2dSWAfzxv8WLKlUgbfk+DH43JY3Gc2xK5URLuXrxDZ2mGfk/jw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@next/swc-win32-ia32-msvc@13.5.9:
+ resolution: {integrity: sha512-BLiPKJomaPrTAb7ykjA0LPcuuNMLDVK177Z1xe0nAem33+9FIayU4k/OWrtSn9SAJW/U60+1hoey5z+KCHdRLQ==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@next/swc-win32-x64-msvc@13.5.9:
+ resolution: {integrity: sha512-/72/dZfjXXNY/u+n8gqZDjI6rxKMpYsgBBYNZKWOQw0BpBF7WCnPflRy3ZtvQ2+IYI3ZH2bPyj7K+6a6wNk90Q==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@nodelib/fs.scandir@2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -1177,6 +1309,10 @@ packages:
resolution: {integrity: sha512-prhfNnb3ATFHOCv7mzKFfwLij5RzoUz6Y1n525ZhCEqfq5wreCXL+DyVoq3ShukPo7q45ZjYIdjFUgjj+WKzng==}
dev: true
+ /@panva/hkdf@1.2.1:
+ resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==}
+ dev: true
+
/@parcel/watcher-android-arm64@2.5.1:
resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
engines: {node: '>= 10.0.0'}
@@ -1315,6 +1451,11 @@ packages:
'@parcel/watcher-win32-ia32': 2.5.1
'@parcel/watcher-win32-x64': 2.5.1
+ /@phc/format@1.0.0:
+ resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==}
+ engines: {node: '>=10'}
+ dev: false
+
/@pkgjs/parseargs@0.11.0:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -1348,7 +1489,36 @@ packages:
/@poppinss/exception@1.2.1:
resolution: {integrity: sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A==}
engines: {node: '>=18'}
- dev: true
+
+ /@poppinss/object-builder@1.1.0:
+ resolution: {integrity: sha512-FOrOq52l7u8goR5yncX14+k+Ewi5djnrt1JwXeS/FvnwAPOiveFhiczCDuvXdssAwamtrV2hp5Rw9v+n2T7hQg==}
+ engines: {node: '>=20.6.0'}
+ dev: false
+
+ /@poppinss/string@1.6.0:
+ resolution: {integrity: sha512-HfAf9VqTvo31BsruwgwEauQ316RNODdryk6QgYZo4qTV50s0h1H9HmIr+QjwwI3u4Sz7r4Q1dd1EVaLB7pWlaw==}
+ dependencies:
+ '@lukeed/ms': 2.0.2
+ '@types/bytes': 3.1.5
+ '@types/pluralize': 0.0.33
+ bytes: 3.1.2
+ case-anything: 3.1.2
+ pluralize: 8.0.0
+ slugify: 1.6.6
+ truncatise: 0.0.8
+ dev: false
+
+ /@poppinss/utils@6.9.4:
+ resolution: {integrity: sha512-KJe9/ebFBqb4fFBdadgN4YgT4bHAKdWhLAFzjaeDqx5vOCtD3C+byN5DrORVNbwAjt+rb8beP8pXaWZWx+WmTA==}
+ engines: {node: '>=18.16.0'}
+ dependencies:
+ '@poppinss/exception': 1.2.1
+ '@poppinss/object-builder': 1.1.0
+ '@poppinss/string': 1.6.0
+ flattie: 1.1.1
+ safe-stable-stringify: 2.5.0
+ secure-json-parse: 4.0.0
+ dev: false
/@rolldown/pluginutils@1.0.0-beta.9:
resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==}
@@ -1611,6 +1781,51 @@ packages:
requiresBuild: true
optional: true
+ /@sidebase/nuxt-auth@0.10.1(next-auth@4.21.1):
+ resolution: {integrity: sha512-fCSDfGl6npVIWrb//NbeKA16ATk1CpjzfRrNAdJ2PRr0BF5aJz6KCvDI8dSzs5VLMJBIRLR39G2rWYq5q+v5iA==}
+ engines: {node: '>=20', pnpm: '>=9.4.0'}
+ peerDependencies:
+ next-auth: ~4.21.1
+ dependencies:
+ '@nuxt/kit': 3.17.4(magicast@0.3.5)
+ defu: 6.1.4
+ h3: 1.15.3
+ knitwork: 1.2.0
+ next-auth: 4.21.1(next@13.5.11)(react-dom@18.3.1)(react@18.3.1)
+ nitropack: 2.11.12
+ requrl: 3.0.2
+ scule: 1.3.0
+ ufo: 1.6.1
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@electric-sql/pglite'
+ - '@libsql/client'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/kv'
+ - aws4fetch
+ - better-sqlite3
+ - drizzle-orm
+ - encoding
+ - idb-keyval
+ - magicast
+ - mysql2
+ - rolldown
+ - sqlite3
+ - supports-color
+ - uploadthing
+ - xml2js
+ dev: true
+
/@sindresorhus/is@7.0.1:
resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==}
engines: {node: '>=18'}
@@ -1663,6 +1878,12 @@ packages:
'@svgdotjs/svg.js': 3.2.4
dev: false
+ /@swc/helpers@0.5.2:
+ resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==}
+ dependencies:
+ tslib: 2.8.1
+ dev: true
+
/@trysound/sax@0.2.0:
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'}
@@ -1675,6 +1896,10 @@ packages:
dev: true
optional: true
+ /@types/bytes@3.1.5:
+ resolution: {integrity: sha512-VgZkrJckypj85YxEsEavcMmmSOIzkUHqWmM4CCyia5dc54YwsXzJ5uT4fYxBQNEXx+oF1krlhgCbvfubXqZYsQ==}
+ dev: false
+
/@types/estree@1.0.7:
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
@@ -1697,6 +1922,10 @@ packages:
parse-path: 7.1.0
dev: true
+ /@types/pluralize@0.0.33:
+ resolution: {integrity: sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==}
+ dev: false
+
/@types/resolve@1.20.2:
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
dev: true
@@ -1963,6 +2192,12 @@ packages:
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
dev: true
+ /@vue/devtools-api@7.7.6:
+ resolution: {integrity: sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==}
+ dependencies:
+ '@vue/devtools-kit': 7.7.6
+ dev: false
+
/@vue/devtools-core@7.7.6(vite@6.3.5)(vue@3.5.13):
resolution: {integrity: sha512-ghVX3zjKPtSHu94Xs03giRIeIWlb9M+gvDRVpIZ/cRIxKHdW6HE/sm1PT3rUYS3aV92CazirT93ne+7IOvGUWg==}
peerDependencies:
@@ -1989,13 +2224,11 @@ packages:
perfect-debounce: 1.0.0
speakingurl: 14.0.1
superjson: 2.2.2
- dev: true
/@vue/devtools-shared@7.7.6:
resolution: {integrity: sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==}
dependencies:
rfdc: 1.4.1
- dev: true
/@vue/reactivity@3.5.13:
resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
@@ -2389,7 +2622,6 @@ packages:
/birpc@2.3.0:
resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==}
- dev: true
/bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
@@ -2470,6 +2702,18 @@ packages:
run-applescript: 7.0.0
dev: true
+ /busboy@1.6.0:
+ resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
+ engines: {node: '>=10.16.0'}
+ dependencies:
+ streamsearch: 1.1.0
+ dev: true
+
+ /bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+ dev: false
+
/c12@3.0.4(magicast@0.3.5):
resolution: {integrity: sha512-t5FaZTYbbCtvxuZq9xxIruYydrAGsJ+8UdP0pZzMiK2xl/gNiSOy0OxhLzHUEEb0m1QXYqfzfvyIFEmz/g9lqg==}
peerDependencies:
@@ -2526,6 +2770,11 @@ packages:
/caniuse-lite@1.0.30001718:
resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==}
+ /case-anything@3.1.2:
+ resolution: {integrity: sha512-wljhAjDDIv/hM2FzgJnYQg90AWmZMNtESCjTeLH680qTzdo0nErlCxOmgzgX4ZsZAtIvqHyD87ES8QyriXB+BQ==}
+ engines: {node: '>=18'}
+ dev: false
+
/chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@@ -2561,6 +2810,10 @@ packages:
dependencies:
consola: 3.4.2
+ /client-only@0.0.1:
+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+ dev: true
+
/clipboardy@4.0.0:
resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==}
engines: {node: '>=18'}
@@ -2723,6 +2976,11 @@ packages:
resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==}
dev: true
+ /cookie@0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
/cookie@1.0.2:
resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
engines: {node: '>=18'}
@@ -2733,12 +2991,19 @@ packages:
engines: {node: '>=12.13'}
dependencies:
is-what: 4.1.16
- dev: true
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: true
+ /cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+ dev: false
+
/cp-file@10.0.0:
resolution: {integrity: sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==}
engines: {node: '>=14.16'}
@@ -3591,6 +3856,11 @@ packages:
unicorn-magic: 0.1.0
dev: true
+ /flattie@1.1.1:
+ resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==}
+ engines: {node: '>=8'}
+ dev: false
+
/fn.name@1.1.0:
resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==}
dev: true
@@ -3772,6 +4042,10 @@ packages:
dependencies:
is-glob: 4.0.3
+ /glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+ dev: true
+
/glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
@@ -3900,7 +4174,6 @@ packages:
/hookable@5.5.3:
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
- dev: true
/hosted-git-info@7.0.2:
resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
@@ -4162,7 +4435,6 @@ packages:
/is-what@4.1.16:
resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
engines: {node: '>=12.13'}
- dev: true
/is-wsl@2.2.0:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
@@ -4209,6 +4481,17 @@ packages:
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
hasBin: true
+ /jose@4.15.9:
+ resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==}
+
+ /jose@5.10.0:
+ resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==}
+ dev: false
+
+ /jose@6.0.11:
+ resolution: {integrity: sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg==}
+ dev: false
+
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -4381,6 +4664,13 @@ packages:
triple-beam: 1.4.1
dev: true
+ /loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+ dependencies:
+ js-tokens: 4.0.0
+ dev: true
+
/lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
dev: true
@@ -4390,6 +4680,12 @@ packages:
dependencies:
yallist: 3.1.1
+ /lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+ dependencies:
+ yallist: 4.0.0
+
/luxon@3.6.1:
resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==}
engines: {node: '>=12'}
@@ -4565,7 +4861,6 @@ packages:
/mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
- dev: true
/mkdirp@1.0.4:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
@@ -4642,6 +4937,71 @@ packages:
qs: 6.14.0
dev: true
+ /next-auth@4.21.1(next@13.5.11)(react-dom@18.3.1)(react@18.3.1):
+ resolution: {integrity: sha512-NYkU4jAPSVxWhCblE8dDFAnKM7kOoO/QEobQ0RoEVP9Wox99A3PKHwOAsWhSg8ahJG/iKIWk2Bo1xHvsS4R39Q==}
+ peerDependencies:
+ next: ^12.2.5 || ^13
+ nodemailer: ^6.6.5
+ react: ^17.0.2 || ^18
+ react-dom: ^17.0.2 || ^18
+ peerDependenciesMeta:
+ nodemailer:
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.27.1
+ '@panva/hkdf': 1.2.1
+ cookie: 0.5.0
+ jose: 4.15.9
+ next: 13.5.11(@babel/core@7.27.1)(react-dom@18.3.1)(react@18.3.1)(sass@1.70.0)
+ oauth: 0.9.15
+ openid-client: 5.7.1
+ preact: 10.26.7
+ preact-render-to-string: 5.2.6(preact@10.26.7)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ uuid: 8.3.2
+ dev: true
+
+ /next@13.5.11(@babel/core@7.27.1)(react-dom@18.3.1)(react@18.3.1)(sass@1.70.0):
+ resolution: {integrity: sha512-WUPJ6WbAX9tdC86kGTu92qkrRdgRqVrY++nwM+shmWQwmyxt4zhZfR59moXSI4N8GDYCBY3lIAqhzjDd4rTC8Q==}
+ engines: {node: '>=16.14.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ react: ^18.2.0
+ react-dom: ^18.2.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ sass:
+ optional: true
+ dependencies:
+ '@next/env': 13.5.11
+ '@swc/helpers': 0.5.2
+ busboy: 1.6.0
+ caniuse-lite: 1.0.30001718
+ postcss: 8.4.31
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ sass: 1.70.0
+ styled-jsx: 5.1.1(@babel/core@7.27.1)(react@18.3.1)
+ watchpack: 2.4.0
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 13.5.9
+ '@next/swc-darwin-x64': 13.5.9
+ '@next/swc-linux-arm64-gnu': 13.5.9
+ '@next/swc-linux-arm64-musl': 13.5.9
+ '@next/swc-linux-x64-gnu': 13.5.9
+ '@next/swc-linux-x64-musl': 13.5.9
+ '@next/swc-win32-arm64-msvc': 13.5.9
+ '@next/swc-win32-ia32-msvc': 13.5.9
+ '@next/swc-win32-x64-msvc': 13.5.9
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+ dev: true
+
/nitropack@2.11.12:
resolution: {integrity: sha512-e2AdQrEY1IVoNTdyjfEQV93xkqz4SQxAMR0xWF8mZUUHxMLm6S4nPzpscjksmT4OdUxl0N8/DCaGjKQ9ghdodA==}
engines: {node: ^16.11.0 || >=17.0.0}
@@ -4885,6 +5245,40 @@ packages:
dependencies:
boolbase: 1.0.0
+ /nuxt-auth-utils@0.5.20:
+ resolution: {integrity: sha512-hoXopfYeK4Cdu17WxxDWYc66EH7ZYG8JUodPxxef9vjfXOXqz3s1gxi/JWsiqkwN6s7K1RpKEESZGg1EopCgAA==}
+ peerDependencies:
+ '@atproto/api': ^0.13.15
+ '@atproto/oauth-client-node': ^0.2.0
+ '@simplewebauthn/browser': ^11.0.0
+ '@simplewebauthn/server': ^11.0.0
+ peerDependenciesMeta:
+ '@atproto/api':
+ optional: true
+ '@atproto/oauth-client-node':
+ optional: true
+ '@simplewebauthn/browser':
+ optional: true
+ '@simplewebauthn/server':
+ optional: true
+ dependencies:
+ '@adonisjs/hash': 9.1.1
+ '@nuxt/kit': 3.17.4(magicast@0.3.5)
+ defu: 6.1.4
+ h3: 1.15.3
+ hookable: 5.5.3
+ jose: 5.10.0
+ ofetch: 1.4.1
+ openid-client: 6.5.0
+ pathe: 2.0.3
+ scule: 1.3.0
+ uncrypto: 0.1.3
+ transitivePeerDependencies:
+ - argon2
+ - bcrypt
+ - magicast
+ dev: false
+
/nuxt@3.16.2(sass@1.70.0)(typescript@5.8.3)(vite@6.3.5):
resolution: {integrity: sha512-yjIC/C4HW8Pd+m0ACGliEF0HnimXYGYvUzjOsTiLQKkDDt2T+djyZ+pCl9BfhQBA8rYmnsym2jUI+ubjv1iClw==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0.0}
@@ -5026,10 +5420,21 @@ packages:
pkg-types: 2.1.0
tinyexec: 0.3.2
+ /oauth4webapi@3.5.1:
+ resolution: {integrity: sha512-txg/jZQwcbaF7PMJgY7aoxc9QuCxHVFMiEkDIJ60DwDz3PbtXPQnrzo+3X4IRYGChIwWLabRBRpf1k9hO9+xrQ==}
+ dev: false
+
+ /oauth@0.9.15:
+ resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==}
+ dev: true
+
/object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
- dev: true
+
+ /object-hash@2.2.0:
+ resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
+ engines: {node: '>= 6'}
/object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
@@ -5042,11 +5447,14 @@ packages:
destr: 2.0.5
node-fetch-native: 1.6.6
ufo: 1.6.1
- dev: true
/ohash@2.0.11:
resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
+ /oidc-token-hash@5.1.0:
+ resolution: {integrity: sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA==}
+ engines: {node: ^10.13.0 || >=12.0.0}
+
/on-change@5.0.1:
resolution: {integrity: sha512-n7THCP7RkyReRSLkJb8kUWoNsxUIBxTkIp3JKno+sEz6o/9AJ3w3P9fzQkITEkMwyTKJjZciF3v/pVoouxZZMg==}
engines: {node: '>=18'}
@@ -5096,6 +5504,21 @@ packages:
is-docker: 2.2.1
is-wsl: 2.2.0
+ /openid-client@5.7.1:
+ resolution: {integrity: sha512-jDBPgSVfTnkIh71Hg9pRvtJc6wTwqjRkN88+gCFtYWrlP4Yx2Dsrow8uPi3qLr/aeymPF3o2+dS+wOpglK04ew==}
+ dependencies:
+ jose: 4.15.9
+ lru-cache: 6.0.0
+ object-hash: 2.2.0
+ oidc-token-hash: 5.1.0
+
+ /openid-client@6.5.0:
+ resolution: {integrity: sha512-fAfYaTnOYE2kQCqEJGX9KDObW2aw7IQy4jWpU/+3D3WoCFLbix5Hg6qIPQ6Js9r7f8jDUmsnnguRNCSw4wU/IQ==}
+ dependencies:
+ jose: 6.0.11
+ oauth4webapi: 3.5.1
+ dev: false
+
/oxc-parser@0.56.5:
resolution: {integrity: sha512-MNT32sqiTFeSbQZP2WZIRQ/mlIpNNq4sua+/4hBG4qT5aef2iQe+1/BjezZURPlvucZeSfN1Y6b60l7OgBdyUA==}
engines: {node: '>=14.0.0'}
@@ -5274,6 +5697,20 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
+ /pinia@3.0.2(typescript@5.8.3)(vue@3.5.13):
+ resolution: {integrity: sha512-sH2JK3wNY809JOeiiURUR0wehJ9/gd9qFN2Y828jCbxEzKEmEt0pzCXwqiSTfuRsK9vQsOflSdnbdBOGrhtn+g==}
+ peerDependencies:
+ typescript: '>=4.4.4'
+ vue: ^2.7.0 || ^3.5.11
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/devtools-api': 7.7.6
+ typescript: 5.8.3
+ vue: 3.5.13(typescript@5.8.3)
+ dev: false
+
/pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
dependencies:
@@ -5288,6 +5725,11 @@ packages:
exsolve: 1.0.5
pathe: 2.0.3
+ /pluralize@8.0.0:
+ resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
+ engines: {node: '>=4'}
+ dev: false
+
/postcss-calc@10.1.1(postcss@8.5.3):
resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==}
engines: {node: ^18.12 || ^20.9 || >=22.0}
@@ -5879,6 +6321,15 @@ packages:
source-map: 0.6.1
dev: false
+ /postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+ dev: true
+
/postcss@8.5.3:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
@@ -5887,6 +6338,19 @@ packages:
picocolors: 1.1.1
source-map-js: 1.2.1
+ /preact-render-to-string@5.2.6(preact@10.26.7):
+ resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==}
+ peerDependencies:
+ preact: '>=10'
+ dependencies:
+ preact: 10.26.7
+ pretty-format: 3.8.0
+ dev: true
+
+ /preact@10.26.7:
+ resolution: {integrity: sha512-43xS+QYc1X1IPbw03faSgY6I6OYWcLrJRv3hU0+qMOfh/XCHcP0MX2CVjNARYR2cC/guu975sta4OcjlczxD7g==}
+ dev: true
+
/precinct@11.0.5:
resolution: {integrity: sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w==}
engines: {node: ^14.14.0 || >=16.0.0}
@@ -5913,6 +6377,10 @@ packages:
engines: {node: ^14.13.1 || >=16.0.0}
dev: true
+ /pretty-format@3.8.0:
+ resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
+ dev: true
+
/process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: true
@@ -5982,6 +6450,23 @@ packages:
defu: 6.1.4
destr: 2.0.5
+ /react-dom@18.3.1(react@18.3.1):
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+ dev: true
+
+ /react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: true
+
/read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
dependencies:
@@ -6080,6 +6565,10 @@ packages:
resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==}
dev: true
+ /requrl@3.0.2:
+ resolution: {integrity: sha512-f3gjR6d8MhOpn46PP+DSJywbmxi95fxQm3coXBFwognjFLla9X6tr8BdNyaIKNOEkaRbRcm0/zYAqN19N1oyhg==}
+ dev: true
+
/resolve-from@5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
@@ -6109,7 +6598,6 @@ packages:
/rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
- dev: true
/rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
@@ -6188,7 +6676,6 @@ packages:
/safe-stable-stringify@2.5.0:
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
engines: {node: '>=10'}
- dev: true
/sass@1.70.0:
resolution: {integrity: sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==}
@@ -6211,9 +6698,19 @@ packages:
'@parcel/watcher': 2.5.1
dev: false
+ /scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: true
+
/scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
+ /secure-json-parse@4.0.0:
+ resolution: {integrity: sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==}
+ dev: false
+
/semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -6377,6 +6874,11 @@ packages:
resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
engines: {node: '>=14.16'}
+ /slugify@1.6.6:
+ resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
+ engines: {node: '>=8.0.0'}
+ dev: false
+
/smob@1.5.0:
resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==}
dev: true
@@ -6425,7 +6927,6 @@ packages:
/speakingurl@14.0.1:
resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
engines: {node: '>=0.10.0'}
- dev: true
/stable@0.1.8:
resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
@@ -6448,6 +6949,11 @@ packages:
/std-env@3.9.0:
resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
+ /streamsearch@1.1.0:
+ resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
+ engines: {node: '>=10.0.0'}
+ dev: true
+
/streamx@2.22.0:
resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==}
dependencies:
@@ -6512,6 +7018,24 @@ packages:
resolution: {integrity: sha512-FL8EeKFFyNQv5cMnXI31CIMCsFarSVI2bF0U0ImeNE3g/F1IvJQyqzOXxPBRXiwQfyBTlbNe88jh1jFW0O/jiQ==}
dev: true
+ /styled-jsx@5.1.1(@babel/core@7.27.1)(react@18.3.1):
+ resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
+ engines: {node: '>= 12.0.0'}
+ peerDependencies:
+ '@babel/core': '*'
+ babel-plugin-macros: '*'
+ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ babel-plugin-macros:
+ optional: true
+ dependencies:
+ '@babel/core': 7.27.1
+ client-only: 0.0.1
+ react: 18.3.1
+ dev: true
+
/stylehacks@5.1.1(postcss@8.5.3):
resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -6538,7 +7062,6 @@ packages:
engines: {node: '>=16'}
dependencies:
copy-anything: 3.0.5
- dev: true
/supports-color@10.0.0:
resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==}
@@ -6719,6 +7242,10 @@ packages:
dompurify: 3.2.6
dev: false
+ /truncatise@0.0.8:
+ resolution: {integrity: sha512-cXzueh9pzBCsLzhToB4X4gZCb3KYkrsAcBAX97JnazE74HOl3cpBJYEV7nabHeG/6/WXCU5Yujlde/WPBUwnsg==}
+ dev: false
+
/tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
dev: true
@@ -7022,6 +7549,11 @@ packages:
hasBin: true
dev: true
+ /uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+ dev: true
+
/validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
dependencies:
@@ -7029,6 +7561,11 @@ packages:
spdx-expression-parse: 3.0.1
dev: true
+ /vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+ dev: false
+
/vite-dev-rpc@1.0.7(vite@6.3.5):
resolution: {integrity: sha512-FxSTEofDbUi2XXujCA+hdzCDkXFG1PXktMjSk1efq9Qb5lOYaaM9zNSvKvPPF7645Bak79kSp1PTooMW2wktcA==}
peerDependencies:
@@ -7288,6 +7825,14 @@ packages:
vue: 3.5.13(typescript@5.8.3)
dev: false
+ /watchpack@2.4.0:
+ resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ dev: true
+
/web-streams-polyfill@3.3.3:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
@@ -7410,7 +7955,6 @@ packages:
/yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
- dev: true
/yallist@5.0.0:
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
@@ -7492,6 +8036,5 @@ packages:
readable-stream: 4.7.0
dev: true
- /zod@3.25.23:
- resolution: {integrity: sha512-Od2bdMosahjSrSgJtakrwjMDb1zM1A3VIHCPGveZt/3/wlrTWBya2lmEh2OYe4OIu8mPTmmr0gnLHIWQXdtWBg==}
- dev: true
+ /zod@3.25.46:
+ resolution: {integrity: sha512-IqRxcHEIjqLd4LNS/zKffB3Jzg3NwqJxQQ0Ns7pdrvgGkwQsEBdEQcOHaBVqvvZArShRzI39+aMST3FBGmTrLQ==}
diff --git a/server/api/auth/[...].ts b/server/api/auth/[...].ts
new file mode 100644
index 0000000..2281299
--- /dev/null
+++ b/server/api/auth/[...].ts
@@ -0,0 +1,58 @@
+// import CredentialsProvider from 'next-auth/providers/credentials'
+import KeycloakProvider from 'next-auth/providers/keycloak'
+import { NuxtAuthHandler } from '#auth'
+console.log(KeycloakProvider)
+export default NuxtAuthHandler({
+ // TODO: SET A STRONG SECRET, SEE https://sidebase.io/nuxt-auth/configuration/nuxt-auth-handler#secret
+ secret: process.env.AUTH_SECRET || '32HslhZ8Hn97SsbxcmowhXvmNZ9cPGNE',
+ // TODO: ADD YOUR OWN AUTHENTICATION PROVIDER HERE, READ THE DOCS FOR MORE: https://sidebase.io/nuxt-auth
+ providers: [
+ // @ts-expect-error You need to use .default here for it to work during SSR. May be fixed via Vite at some point
+ KeycloakProvider.default({
+ clientId: process.env.KEYCLOAK_ID,
+ clientSecret: process.env.KEYCLOAK_SECRET,
+ issuer: process.env.KEYCLOAK_ISSUER,
+ }),
+ // // @ts-expect-error You need to use .default here for it to work during SSR. May be fixed via Vite at some point
+ // CredentialsProvider.default({
+ // // The name to display on the sign in form (e.g. 'Sign in with...')
+ // name: 'Credentials',
+ // // The credentials is used to generate a suitable form on the sign in page.
+ // // You can specify whatever fields you are expecting to be submitted.
+ // // e.g. domain, username, password, 2FA token, etc.
+ // // You can pass any HTML attribute to the
tag through the object.
+ // credentials: {
+ // username: { label: 'Username', type: 'text', placeholder: '(hint: jsmith)' },
+ // password: { label: 'Password', type: 'password', placeholder: '(hint: hunter2)' }
+ // },
+ // authorize (credentials: any) {
+ // console.warn('ATTENTION: You should replace this with your real providers or credential provider logic! The current setup is not safe')
+ // // You need to provide your own logic here that takes the credentials
+ // // submitted and returns either a object representing a user or value
+ // // that is false/null if the credentials are invalid.
+ // // NOTE: THE BELOW LOGIC IS NOT SAFE OR PROPER FOR AUTHENTICATION!
+
+ // const user = { id: '1', name: 'J Smith', username: 'jsmith', password: 'hunter2' }
+
+ // if (credentials?.username === user.username && credentials?.password === user.password) {
+ // // Any object returned will be saved in `user` property of the JWT
+ // return user
+ // } else {
+ // console.error('Warning: Malicious login attempt registered, bad credentials provided')
+
+ // // If you return null then an error will be displayed advising the user to check their details.
+ // return null
+
+ // // You can also Reject this callback with an Error thus the user will be sent to the error page with the error message as a query parameter
+ // }
+ // }
+ // })
+ ],
+ pages: {
+ signIn: '/auth/login',
+ // signOut: '/auth/signOut',
+ // error: '/auth/error',
+ // verifyRequest: '/auth/verify-request',
+ // newUser: '/auth/new-user'
+ },
+})
diff --git a/server/api/auth/login.js b/server/api/auth/login.js
new file mode 100644
index 0000000..61aa89a
--- /dev/null
+++ b/server/api/auth/login.js
@@ -0,0 +1,73 @@
+import client from "~/server/utils/auth";
+import { sendRedirect } from 'h3';
+import cors from 'cors';
+
+export default defineEventHandler(async (event) => {
+ const runtimeconfig = useRuntimeConfig();
+ const redirectUri = `${runtimeconfig.public.keycloakRedirectURI}/callback`; // Ganti dengan URL yang sesuai jika perlu
+ const responseType = 'code';
+ const scope = 'openid';
+ // Apply CORS middleware
+ await new Promise((resolve, reject) => {
+ cors({
+ origin: redirectUri,
+ methods: ['POST'],
+ })(event.node.req, event.node.res, resolve);
+ });
+ // await new Promise((resolve, reject) => {
+ // cors({
+ // origin: runtimeConfig.public.keycloakRedirectURI,
+ // methods: ['GET', 'POST'],
+ // })(event.node.req, event.node.res, (err: any) => {
+ // if (err) reject(err);
+ // else resolve(true);
+ // });
+ // });
+
+ const authClient = await client();
+ const authorizationUrl = authClient.authorizationUrl({
+ scope: 'openid profile email',
+ // scope: 'login-required',
+ });
+ // console.log(authorizationUrl)
+ // const baseURL = new URL(authorizationUrl)
+ // // console.log(baseURL.searchParams)
+ // const urlParam = baseURL.searchParams
+ // console.log(urlParam.get('code'))
+ // if (event.node.req.url?.startsWith('/callback')) {
+ // try {
+ // const params = authClient.callbackParams(event.node.req);
+ // const tokenSet = await authClient.callback(redirectUri, params, {
+ // response_type: responseType,
+ // });
+ //
+ // const userInfo = await authClient.userinfo(tokenSet);
+ // console.log(userInfo);
+ // Simpan user info di session
+ // await setCookie(event).update({
+ // user: {
+ // id: userInfo.sub,
+ // name: userInfo.name || userInfo.preferred_username,
+ // email: userInfo.email,
+ // roles: userInfo.roles || [],
+ // accessToken: tokenSet.access_token,
+ // refreshToken: tokenSet.refresh_token,
+ // }
+ // });
+
+ // Redirect setelah login sukses
+ // return sendRedirect(event, runtimeConfig.public.afterLoginRedirect || '/');
+ //
+ // } catch (error) {
+ // console.error('Keycloak authentication error:', error);
+ // throw createError({
+ // statusCode: 401,
+ // statusMessage: 'Authentication failed',
+ // });
+ // }
+ // }
+ console.log(authorizationUrl)
+
+ return { callbackURL: authorizationUrl }
+ // return { callbackURL: authorizationUrl+`&response_type=${responseType}&scope=${scope}` }
+});
diff --git a/server/api/sidebarItem.ts b/server/api/sidebarItem.ts
new file mode 100644
index 0000000..2b6b7f2
--- /dev/null
+++ b/server/api/sidebarItem.ts
@@ -0,0 +1,19 @@
+import axios from "axios";
+
+export default defineEventHandler(async (event) => {
+ const read_body = await readBody(event)
+ console.log(`ini ${read_body}`)
+ try {
+ const response = await axios.get(`http://10.10.150.131:8080/api/login/${read_body.key}`)
+ // console.log(response.data.data)
+
+ return response.data.data
+ } catch (error) {
+ console.log(`Messages Err: ${error.response.data.message} || nullable`)
+ throw createError({
+ statusCode: error.response?.status || 500,
+ statusMessage: error.message || 'Internal Server Error',
+ });
+ }
+
+})
diff --git a/server/middleware/auth.ts b/server/middleware/auth.ts
new file mode 100644
index 0000000..f83ff75
--- /dev/null
+++ b/server/middleware/auth.ts
@@ -0,0 +1,17 @@
+import { getServerSession, getToken } from '#auth'
+
+export default eventHandler(async (event) => {
+ return
+ const session = await getServerSession(event)
+ if (!session) {
+ event.context.auth = false
+ } else {
+ const token = await getToken({ event })
+ event.context.auth = { token }
+ }
+})
+// export default defineEventHandler((event) => {
+// if (!event.node.req.headers.origin) {
+// event.node.req.headers.origin = process.env.NUXT_AUTH_ORIGIN
+// }
+// })
\ No newline at end of file
diff --git a/server/utils/auth.js b/server/utils/auth.js
new file mode 100644
index 0000000..51f014e
--- /dev/null
+++ b/server/utils/auth.js
@@ -0,0 +1,29 @@
+import { Issuer } from 'openid-client';
+
+export default async function initializeAuth() {
+ const runtimeconfig = useRuntimeConfig();
+ try {
+ // console.log('Discovering Keycloak issuer...');
+ const baseUrl = typeof window !== 'undefined' ? window.location.origin : runtimeconfig.public.keycloakRedirectURI || 'http://localhost:3000';
+
+ // const keycloakIssuer = await Issuer.discover('http://localhost:8080/realms/cobalah');
+ const keycloakIssuer = await Issuer.discover(`${runtimeconfig.public.keycloakUrl}/realms/${runtimeconfig.public.keycloakRealm}`);
+ // const keycloakIssuer = await Issuer.discover(process.env.KEYCLOAK_ISSUER);
+ // console.log('Discovered issuer:', keycloakIssuer);
+
+ const client = new keycloakIssuer.Client({
+ client_id: `${runtimeconfig.public.keycloakClient}`,
+ // client_id: 'cobasaja',
+ // client_id: process.env.KEYCLOAK_CLIENT_ID,
+ redirect_uris: [`${baseUrl}`],
+ post_logout_redirect_uris: [`${baseUrl}`],
+ response_types: ['code'],
+ });
+
+ console.log('Client initialized successfully');
+ return client;
+ } catch (error) {
+ console.error('Error initializing OpenID client:', error);
+ throw error;
+ }
+}
\ No newline at end of file