@authon/create-app
Advanced tools
| export {}; |
| import { describe, expect, it } from 'vitest'; | ||
| import { generateNuxt } from './index.js'; | ||
| const options = { | ||
| template: 'nuxt', | ||
| projectName: 'nuxt-contract', | ||
| features: { | ||
| oauth: false, | ||
| oauthProviders: [], | ||
| emailPassword: true, | ||
| mfa: false, | ||
| passkeys: false, | ||
| }, | ||
| }; | ||
| function generated(path) { | ||
| const file = generateNuxt(options).find((entry) => entry.path === path); | ||
| if (!file) | ||
| throw new Error(`Missing generated file: ${path}`); | ||
| return file.content; | ||
| } | ||
| describe('Nuxt create-app template', () => { | ||
| it('generates a client-ready auth guard that leaves SSR undecided', () => { | ||
| const middleware = generated('middleware/auth.ts'); | ||
| expect(middleware).toContain('import.meta.server'); | ||
| expect(middleware).toContain('await authon.client.waitUntilReady()'); | ||
| expect(middleware).toMatch(/!authon\.isSignedIn[\s\S]*navigateTo\(['"]\/sign-in/); | ||
| }); | ||
| it('attaches the auth middleware to the dashboard', () => { | ||
| expect(generated('pages/dashboard.vue')) | ||
| .toContain("definePageMeta({ middleware: 'auth' })"); | ||
| }); | ||
| it('generates the sign-in destination used by the auth guard', () => { | ||
| const signIn = generated('pages/sign-in.vue'); | ||
| expect(signIn).toContain('authon.client?.openSignIn()'); | ||
| expect(signIn).toContain('route.query.redirect_url'); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=index.test.js.map |
| {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/templates/nuxt/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,OAAO,GAAmB;IAC9B,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,eAAe;IAC5B,QAAQ,EAAE;QACR,KAAK,EAAE,KAAK;QACZ,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,IAAI;QACnB,GAAG,EAAE,KAAK;QACV,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC;AAEF,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,UAAU,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAEnD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACnD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACrE,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;aACrC,SAAS,CAAC,wCAAwC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAE9C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
+21
| MIT License | ||
| Copyright (c) 2026 Authon | ||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
| The above copyright notice and this permission notice shall be included in all | ||
| copies or substantial portions of the Software. | ||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| SOFTWARE. |
+4
-4
@@ -31,3 +31,3 @@ export function parseArgs(argv) { | ||
| console.log(` | ||
| Usage: create-authon-app [project-name] [options] | ||
| Usage: @authon/create-app [project-name] [options] | ||
@@ -51,7 +51,7 @@ Options: | ||
| Examples: | ||
| npx create-authon-app | ||
| npx create-authon-app my-app | ||
| npx create-authon-app my-app --template nextjs-app | ||
| npx @authon/create-app | ||
| npx @authon/create-app my-app | ||
| npx @authon/create-app my-app --template nextjs-app | ||
| `); | ||
| } | ||
| //# sourceMappingURL=args.js.map |
+1
-1
@@ -8,3 +8,3 @@ #!/usr/bin/env node | ||
| console.log(); | ||
| console.log(pc.bold(pc.magenta(' create-authon-app')) + pc.dim(' — scaffold a new Authon project')); | ||
| console.log(pc.bold(pc.magenta(' @authon/create-app')) + pc.dim(' — scaffold a new Authon project')); | ||
| console.log(); | ||
@@ -11,0 +11,0 @@ try { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;IACrG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAE9C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAE/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,yBAAyB,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAAyB,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,cAAe,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;IACtG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAE9C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAE/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,yBAAyB,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAAyB,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,cAAe,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"} |
@@ -80,7 +80,7 @@ import { generateEnvExampleServer, generateGitignore, generateClaudeMd } from '../shared.js'; | ||
| // Protected routes (auth required) | ||
| const authMiddleware = expressMiddleware({ | ||
| const authonMiddleware = expressMiddleware({ | ||
| secretKey: process.env.AUTHON_SECRET_KEY!, | ||
| }); | ||
| app.use('/api/user', authMiddleware, userRouter); | ||
| app.use('/api/user', authonMiddleware, userRouter); | ||
@@ -87,0 +87,0 @@ // Start server |
@@ -100,3 +100,3 @@ import { generateEnvExample, generateGitignore, generateClaudeMd } from '../shared.js'; | ||
| <body> | ||
| <AuthonProvider publishableKey={process.env.NEXT_PUBLIC_AUTHON_KEY!}> | ||
| <AuthonProvider publishableKey={process.env.NEXT_PUBLIC_AUTHON_PUBLISHABLE_KEY!}> | ||
| {children} | ||
@@ -103,0 +103,0 @@ </AuthonProvider> |
@@ -88,3 +88,3 @@ import { generateEnvExample, generateGitignore, generateClaudeMd } from '../shared.js'; | ||
| return ( | ||
| <AuthonProvider publishableKey={process.env.NEXT_PUBLIC_AUTHON_KEY!}> | ||
| <AuthonProvider publishableKey={process.env.NEXT_PUBLIC_AUTHON_PUBLISHABLE_KEY!}> | ||
| <Component {...pageProps} /> | ||
@@ -268,26 +268,2 @@ </AuthonProvider> | ||
| }); | ||
| // pages/api/user.ts | ||
| files.push({ | ||
| path: 'pages/api/user.ts', | ||
| content: `import type { NextApiRequest, NextApiResponse } from 'next'; | ||
| import { AuthonBackend } from '@authon/node'; | ||
| const authon = new AuthonBackend(process.env.AUTHON_SECRET_KEY!); | ||
| export default async function handler(req: NextApiRequest, res: NextApiResponse) { | ||
| const token = req.headers.authorization?.replace('Bearer ', ''); | ||
| if (!token) { | ||
| return res.status(401).json({ error: 'Unauthorized' }); | ||
| } | ||
| try { | ||
| const user = await authon.verifyToken(token); | ||
| return res.status(200).json({ user }); | ||
| } catch { | ||
| return res.status(401).json({ error: 'Invalid token' }); | ||
| } | ||
| } | ||
| `, | ||
| }); | ||
| // .env.example | ||
@@ -294,0 +270,0 @@ files.push({ path: '.env.example', content: generateEnvExample(options) }); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/nextjs-pages/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/nextjs-pages/index.ts"],"names":[],"mappings":"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"} |
@@ -19,4 +19,3 @@ import { generateEnvExampleNuxt, generateGitignore, generateClaudeMd } from '../shared.js'; | ||
| dependencies: { | ||
| '@authon/vue': '^0.3.0', | ||
| '@authon/js': '^0.3.0', | ||
| '@authon/nuxt': '^0.3.3', | ||
| nuxt: '^3.15.0', | ||
@@ -44,6 +43,8 @@ vue: '^3.5.0', | ||
| devtools: { enabled: true }, | ||
| modules: ['@authon/nuxt'], | ||
| runtimeConfig: { | ||
| authonSecretKey: process.env.AUTHON_SECRET_KEY || '', | ||
| public: { | ||
| authonKey: process.env.NUXT_PUBLIC_AUTHON_KEY || '', | ||
| authon: { | ||
| publishableKey: process.env.NUXT_PUBLIC_AUTHON_PUBLISHABLE_KEY || '', | ||
| }, | ||
| }, | ||
@@ -55,29 +56,18 @@ }, | ||
| }); | ||
| // plugins/authon.client.ts | ||
| files.push({ | ||
| path: 'plugins/authon.client.ts', | ||
| content: `import { createAuthon } from '@authon/vue'; | ||
| export default defineNuxtPlugin((nuxtApp) => { | ||
| const config = useRuntimeConfig(); | ||
| const authon = createAuthon({ | ||
| publishableKey: config.public.authonKey, | ||
| }); | ||
| nuxtApp.vueApp.use(authon); | ||
| }); | ||
| `, | ||
| }); | ||
| // middleware/auth.ts | ||
| files.push({ | ||
| path: 'middleware/auth.ts', | ||
| content: `export default defineNuxtRouteMiddleware((to) => { | ||
| // This middleware redirects unauthenticated users | ||
| // For client-side protection, use the AuthonSignedIn / AuthonSignedOut components | ||
| // For server-side protection, verify tokens in your API routes | ||
| const publicRoutes = ['/', '/sign-in']; | ||
| if (publicRoutes.includes(to.path)) { | ||
| content: `export default defineNuxtRouteMiddleware(async (to) => { | ||
| const authon = useAuthon(); | ||
| // The browser SDK owns the session. SSR cannot decide authentication while | ||
| // the client is intentionally absent, so defer the decision to hydration. | ||
| if (import.meta.server || !authon.client) { | ||
| return; | ||
| } | ||
| await authon.client.waitUntilReady(); | ||
| if (!authon.isSignedIn) { | ||
| return navigateTo('/sign-in?redirect_url=' + encodeURIComponent(to.fullPath)); | ||
| } | ||
| }); | ||
@@ -133,6 +123,6 @@ `, | ||
| content: `<script setup lang="ts"> | ||
| import { useAuthon } from '@authon/vue'; | ||
| import { AuthonSignedIn, AuthonSignedOut, AuthonUserButton } from '@authon/vue'; | ||
| import { AuthonSignedIn, AuthonSignedOut, AuthonUserButton } from '@authon/nuxt'; | ||
| import { useAuthon } from '@authon/nuxt/composables'; | ||
| const { openSignIn } = useAuthon(); | ||
| const authon = useAuthon(); | ||
| </script> | ||
@@ -151,3 +141,3 @@ | ||
| <button | ||
| @click="openSignIn()" | ||
| @click="authon.client?.openSignIn()" | ||
| style="padding: 12px 32px; font-size: 1rem; font-weight: 600; color: #fff; background: linear-gradient(135deg, #7c3aed, #4f46e5); border: none; border-radius: 8px; cursor: pointer;" | ||
@@ -180,2 +170,41 @@ > | ||
| }); | ||
| // pages/sign-in.vue | ||
| files.push({ | ||
| path: 'pages/sign-in.vue', | ||
| content: `<script setup lang="ts"> | ||
| import { useAuthon } from '@authon/nuxt/composables'; | ||
| import { onMounted, watch } from 'vue'; | ||
| const authon = useAuthon(); | ||
| const route = useRoute(); | ||
| function redirectTarget(): string { | ||
| const requested = route.query.redirect_url; | ||
| return typeof requested === 'string' && requested.startsWith('/') && !requested.startsWith('//') | ||
| ? requested | ||
| : '/dashboard'; | ||
| } | ||
| watch(() => authon.isSignedIn, (signedIn) => { | ||
| if (signedIn) void navigateTo(redirectTarget()); | ||
| }, { immediate: true }); | ||
| onMounted(() => { | ||
| if (!authon.isSignedIn) void authon.client?.openSignIn(); | ||
| }); | ||
| </script> | ||
| <template> | ||
| <main style="min-height: 100vh; display: flex; align-items: center; justify-content: center;"> | ||
| <button | ||
| type="button" | ||
| style="padding: 12px 32px; font-size: 1rem; font-weight: 600; color: #fff; background: var(--primary); border: none; border-radius: 8px; cursor: pointer;" | ||
| @click="authon.client?.openSignIn()" | ||
| > | ||
| Sign In | ||
| </button> | ||
| </main> | ||
| </template> | ||
| `, | ||
| }); | ||
| // pages/dashboard.vue | ||
@@ -185,19 +214,13 @@ files.push({ | ||
| content: `<script setup lang="ts"> | ||
| import { useAuthon, useUser } from '@authon/vue'; | ||
| import { AuthonUserButton } from '@authon/vue'; | ||
| import { watch } from 'vue'; | ||
| import { AuthonUserButton } from '@authon/nuxt'; | ||
| import { useAuthon, useUser } from '@authon/nuxt/composables'; | ||
| const { isSignedIn, isLoading } = useAuthon(); | ||
| definePageMeta({ middleware: 'auth' }); | ||
| const authon = useAuthon(); | ||
| const { user } = useUser(); | ||
| const router = useRouter(); | ||
| watch([() => isLoading, () => isSignedIn], ([loading, signedIn]) => { | ||
| if (!loading && !signedIn) { | ||
| router.push('/'); | ||
| } | ||
| }, { immediate: true }); | ||
| </script> | ||
| <template> | ||
| <main v-if="!isLoading && isSignedIn" style="min-height: 100vh; padding: 2rem; max-width: 800px; margin: 0 auto;"> | ||
| <main v-if="!authon.isLoading && authon.isSignedIn" style="min-height: 100vh; padding: 2rem; max-width: 800px; margin: 0 auto;"> | ||
| <header style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border);"> | ||
@@ -231,27 +254,2 @@ <NuxtLink to="/" style="font-size: 1.25rem; font-weight: 700; color: var(--primary); text-decoration: none;"> | ||
| }); | ||
| // server/api/user.get.ts | ||
| files.push({ | ||
| path: 'server/api/user.get.ts', | ||
| content: `import { AuthonBackend } from '@authon/node'; | ||
| export default defineEventHandler(async (event) => { | ||
| const config = useRuntimeConfig(); | ||
| const authon = new AuthonBackend(config.authonSecretKey); | ||
| const authHeader = getRequestHeader(event, 'authorization'); | ||
| const token = authHeader?.replace('Bearer ', ''); | ||
| if (!token) { | ||
| throw createError({ statusCode: 401, message: 'Unauthorized' }); | ||
| } | ||
| try { | ||
| const user = await authon.verifyToken(token); | ||
| return { user }; | ||
| } catch { | ||
| throw createError({ statusCode: 401, message: 'Invalid token' }); | ||
| } | ||
| }); | ||
| `, | ||
| }); | ||
| // .env.example | ||
@@ -258,0 +256,0 @@ files.push({ path: '.env.example', content: generateEnvExampleNuxt(options) }); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/nuxt/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/nuxt/index.ts"],"names":[],"mappings":"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"} |
@@ -97,3 +97,3 @@ import { generateEnvExampleVite, generateGitignore, generateClaudeMd } from '../shared.js'; | ||
| <BrowserRouter> | ||
| <AuthonProvider publishableKey={import.meta.env.VITE_AUTHON_KEY}> | ||
| <AuthonProvider publishableKey={import.meta.env.VITE_AUTHON_PUBLISHABLE_KEY}> | ||
| <App /> | ||
@@ -277,3 +277,3 @@ </AuthonProvider> | ||
| interface ImportMetaEnv { | ||
| readonly VITE_AUTHON_KEY: string; | ||
| readonly VITE_AUTHON_PUBLISHABLE_KEY: string; | ||
| } | ||
@@ -280,0 +280,0 @@ |
@@ -5,4 +5,5 @@ import type { ProjectOptions } from '../prompts.js'; | ||
| export declare function generateEnvExampleNuxt(options: ProjectOptions): string; | ||
| export declare function generateEnvExampleSvelte(options: ProjectOptions): string; | ||
| export declare function generateEnvExampleServer(options: ProjectOptions): string; | ||
| export declare function generateGitignore(): string; | ||
| export declare function generateClaudeMd(template: string): string; |
+24
-15
@@ -7,6 +7,6 @@ export function generateEnvExample(options) { | ||
| '# Your Authon publishable key (safe for client-side)', | ||
| 'NEXT_PUBLIC_AUTHON_KEY=pk_test_your_publishable_key_here', | ||
| 'NEXT_PUBLIC_AUTHON_PUBLISHABLE_KEY=pk_test_your_publishable_key_here', | ||
| '', | ||
| '# Your Authon secret key (server-side only)', | ||
| 'AUTHON_SECRET_KEY=sk_test_your_secret_key_here', | ||
| '# Optional Authon secret key (server-side only; never expose it to the browser)', | ||
| '# AUTHON_SECRET_KEY=sk_test_your_secret_key_here', | ||
| '', | ||
@@ -24,8 +24,12 @@ '# Authon API URL (defaults to https://api.authon.dev)', | ||
| return generateEnvExample(options) | ||
| .replace(/NEXT_PUBLIC_AUTHON_KEY/g, 'VITE_AUTHON_KEY'); | ||
| .replace(/NEXT_PUBLIC_AUTHON_PUBLISHABLE_KEY/g, 'VITE_AUTHON_PUBLISHABLE_KEY'); | ||
| } | ||
| export function generateEnvExampleNuxt(options) { | ||
| return generateEnvExample(options) | ||
| .replace(/NEXT_PUBLIC_AUTHON_KEY/g, 'NUXT_PUBLIC_AUTHON_KEY'); | ||
| .replace(/NEXT_PUBLIC_AUTHON_PUBLISHABLE_KEY/g, 'NUXT_PUBLIC_AUTHON_PUBLISHABLE_KEY'); | ||
| } | ||
| export function generateEnvExampleSvelte(options) { | ||
| return generateEnvExample(options) | ||
| .replace(/NEXT_PUBLIC_AUTHON_PUBLISHABLE_KEY/g, 'PUBLIC_AUTHON_PUBLISHABLE_KEY'); | ||
| } | ||
| export function generateEnvExampleServer(options) { | ||
@@ -78,4 +82,4 @@ const lines = [ | ||
| svelte: '@authon/svelte', | ||
| express: '@authon/node', | ||
| node: '@authon/node', | ||
| // express: '@authon/node', // DEPRECATED: @authon/node is no longer maintained | ||
| // node: '@authon/node', // DEPRECATED: @authon/node is no longer maintained | ||
| }; | ||
@@ -112,3 +116,2 @@ const isServer = template === 'express' || template === 'node'; | ||
| - \`pages/dashboard.tsx\` — Protected dashboard page | ||
| - \`pages/api/user.ts\` — Server-side user verification | ||
| `; | ||
@@ -135,3 +138,2 @@ } | ||
| - \`nuxt.config.ts\` — Authon module configuration | ||
| - \`plugins/authon.client.ts\` — Client-side Authon setup | ||
| - \`middleware/auth.ts\` — Route protection middleware | ||
@@ -179,9 +181,16 @@ - \`pages/index.vue\` — Landing page with sign-in | ||
| ### Server-side (@authon/node) | ||
| ### Server-side (webhook sync) | ||
| > **Note**: @authon/node is deprecated. Authon is a frontend-only platform. | ||
| > For webhook handling, use a plain HTTP endpoint in your backend framework. | ||
| \`\`\`ts | ||
| import { AuthonBackend, expressMiddleware } from '@authon/node'; | ||
| const authon = new AuthonBackend(process.env.AUTHON_SECRET_KEY); | ||
| const user = await authon.verifyToken(token); | ||
| // POST /api/webhook/authon — sync Authon events to your database | ||
| app.post('/api/webhook/authon', async (req, res) => { | ||
| const { type, data } = req.body; | ||
| if (type === 'user.created') { | ||
| await db.users.create({ email: data.user.email }); | ||
| } | ||
| res.json({ ok: true }); | ||
| }); | ||
| \`\`\` | ||
@@ -191,3 +200,3 @@ | ||
| - \`${isServer ? 'AUTHON_SECRET_KEY' : template === 'nuxt' ? 'NUXT_PUBLIC_AUTHON_KEY' : template.includes('vite') ? 'VITE_AUTHON_KEY' : 'NEXT_PUBLIC_AUTHON_KEY'}\` — ${isServer ? 'Secret key for server-side operations' : 'Publishable key (safe for client)'} | ||
| - \`${isServer ? 'AUTHON_SECRET_KEY' : template === 'nuxt' ? 'NUXT_PUBLIC_AUTHON_PUBLISHABLE_KEY' : template.includes('vite') ? 'VITE_AUTHON_PUBLISHABLE_KEY' : 'NEXT_PUBLIC_AUTHON_PUBLISHABLE_KEY'}\` — ${isServer ? 'Secret key for server-side operations' : 'Publishable key (safe for client)'} | ||
| ${!isServer ? `- \`AUTHON_SECRET_KEY\` — Secret key for server-side operations` : ''} | ||
@@ -194,0 +203,0 @@ `; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"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"} |
@@ -1,2 +0,2 @@ | ||
| import { generateEnvExampleVite, generateGitignore, generateClaudeMd } from '../shared.js'; | ||
| import { generateEnvExampleSvelte, generateGitignore, generateClaudeMd } from '../shared.js'; | ||
| export function generateSvelte(options) { | ||
@@ -80,2 +80,3 @@ const files = []; | ||
| import { browser } from '$app/environment'; | ||
| import { PUBLIC_AUTHON_PUBLISHABLE_KEY } from '$env/static/public'; | ||
@@ -88,5 +89,5 @@ let authonStore: ReturnType<typeof createAuthonStore> | null = null; | ||
| if (!authonStore) { | ||
| const key = import.meta.env.VITE_AUTHON_KEY; | ||
| const key = PUBLIC_AUTHON_PUBLISHABLE_KEY; | ||
| if (!key) { | ||
| console.warn('VITE_AUTHON_KEY is not set. Check your .env file.'); | ||
| console.warn('PUBLIC_AUTHON_PUBLISHABLE_KEY is not set. Check your .env file.'); | ||
| return null; | ||
@@ -304,4 +305,4 @@ } | ||
| // .env.example | ||
| files.push({ path: '.env.example', content: generateEnvExampleVite(options) }); | ||
| files.push({ path: '.env', content: generateEnvExampleVite(options) }); | ||
| files.push({ path: '.env.example', content: generateEnvExampleSvelte(options) }); | ||
| files.push({ path: '.env', content: generateEnvExampleSvelte(options) }); | ||
| // .gitignore | ||
@@ -308,0 +309,0 @@ files.push({ path: '.gitignore', content: generateGitignore() }); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/svelte/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/svelte/index.ts"],"names":[],"mappings":"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"} |
@@ -88,3 +88,3 @@ import { generateEnvExampleVite, generateGitignore, generateClaudeMd } from '../shared.js'; | ||
| interface ImportMetaEnv { | ||
| readonly VITE_AUTHON_KEY: string; | ||
| readonly VITE_AUTHON_PUBLISHABLE_KEY: string; | ||
| } | ||
@@ -115,3 +115,3 @@ | ||
| const authon = createAuthon({ | ||
| publishableKey: import.meta.env.VITE_AUTHON_KEY, | ||
| publishableKey: import.meta.env.VITE_AUTHON_PUBLISHABLE_KEY, | ||
| }); | ||
@@ -118,0 +118,0 @@ |
+9
-7
| { | ||
| "name": "@authon/create-app", | ||
| "version": "0.1.0", | ||
| "version": "0.1.1", | ||
| "description": "Create a new project with Authon authentication pre-configured", | ||
| "type": "module", | ||
| "bin": { | ||
| "create-authon-app": "dist/index.js", | ||
| "@authon/create-app": "dist/index.js", | ||
| "create-authon": "dist/index.js" | ||
@@ -13,6 +13,2 @@ }, | ||
| ], | ||
| "scripts": { | ||
| "build": "tsc", | ||
| "dev": "tsx src/index.ts" | ||
| }, | ||
| "license": "MIT", | ||
@@ -46,3 +42,9 @@ "repository": { | ||
| "typescript": "^5.9.3" | ||
| }, | ||
| "scripts": { | ||
| "build": "tsc", | ||
| "dev": "tsx src/index.ts", | ||
| "test": "vitest run --root ../.. --passWithNoTests packages/create-authon-app", | ||
| "typecheck": "tsc --noEmit" | ||
| } | ||
| } | ||
| } |
+22
-7
@@ -1,9 +0,27 @@ | ||
| # create-authon-app | ||
| # @authon/create-app | ||
| Scaffold a new project with [Authon](https://authon.dev) authentication pre-configured. | ||
| ## Prerequisites | ||
| Before using this CLI, create an Authon project and get your API keys: | ||
| 1. **Create a project** at [Authon Dashboard](https://authon.dev/dashboard/overview) | ||
| - Click "Create Project" and enter your app name | ||
| - Select the authentication methods you want (Email/Password, OAuth providers, etc.) | ||
| 2. **Get your API keys** from Project Settings → API Keys | ||
| - **Publishable Key** (`pk_live_...`) — use in your frontend code | ||
| - **Test Key** (`pk_test_...`) — for development, enables Dev Teleport | ||
| 3. **Configure OAuth providers** (optional) in Project Settings → OAuth | ||
| - Add Google, Apple, GitHub, etc. with their respective Client ID and Secret | ||
| - Set the redirect URL to `https://api.authon.dev/v1/auth/oauth/redirect` | ||
| > **Test vs Live keys:** Use `pk_test_...` during development. Switch to `pk_live_...` before deploying to production. Test keys use a sandbox environment with no rate limits. | ||
| ## Usage | ||
| ```bash | ||
| npx create-authon-app | ||
| npx @authon/create-app | ||
| ``` | ||
@@ -14,3 +32,3 @@ | ||
| ```bash | ||
| npx create-authon-app my-app --template nextjs-app --yes | ||
| npx @authon/create-app my-app --template nextjs-app --yes | ||
| ``` | ||
@@ -26,6 +44,4 @@ | ||
| | `vue-vite` | Vue 3 + Vite | `@authon/vue` | | ||
| | `nuxt` | Nuxt 3 | `@authon/vue` | | ||
| | `nuxt` | Nuxt 3 | `@authon/nuxt` | | ||
| | `svelte` | SvelteKit | `@authon/svelte` | | ||
| | `express` | Express.js | `@authon/node` | | ||
| | `node` | Plain Node.js | `@authon/node` | | ||
@@ -40,3 +56,2 @@ ## What's included | ||
| - Protected dashboard page | ||
| - Server-side token verification (where applicable) | ||
| - `.env.example` with Authon configuration | ||
@@ -43,0 +58,0 @@ - `CLAUDE.md` for AI agent context |
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
118853
4.23%45
9.76%2418
1.13%1
-50%69
27.78%