New:Socket for Asana Is Now Available.Learn more
Get Started

@authon/create-app

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@authon/create-app - npm Package Compare versions

Comparing version
0.1.0
to
0.1.1
+1
dist/templates/nuxt/index.test.d.ts
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"}
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

@@ -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":"AAEA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEvF,MAAM,UAAU,mBAAmB,CAAC,OAAuB;IACzD,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,eAAe;IACf,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;YACE,IAAI,EAAE,OAAO,CAAC,WAAW;YACzB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,WAAW;aAClB;YACD,YAAY,EAAE;gBACZ,gBAAgB,EAAE,QAAQ;gBAC1B,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,SAAS;aACvB;YACD,eAAe,EAAE;gBACf,aAAa,EAAE,SAAS;gBACxB,cAAc,EAAE,SAAS;gBACzB,kBAAkB,EAAE,SAAS;gBAC7B,UAAU,EAAE,QAAQ;aACrB;SACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;KACT,CAAC,CAAC;IAEH,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;YACE,eAAe,EAAE;gBACf,MAAM,EAAE,QAAQ;gBAChB,GAAG,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC;gBACtC,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,IAAI;gBAClB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI;gBACZ,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,QAAQ;gBAChB,gBAAgB,EAAE,SAAS;gBAC3B,iBAAiB,EAAE,IAAI;gBACvB,eAAe,EAAE,IAAI;gBACrB,GAAG,EAAE,UAAU;gBACf,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;aAC1B;YACD,OAAO,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,UAAU,CAAC;YACjD,OAAO,EAAE,CAAC,cAAc,CAAC;SAC1B,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;KACT,CAAC,CAAC;IAEH,iBAAiB;IACjB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE;;;;;CAKZ;KACE,CAAC,CAAC;IAEH,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE;;;;;;;;;CASZ;KACE,CAAC,CAAC;IAEH,iBAAiB;IACjB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE;;;;;;;;;;;CAWZ;KACE,CAAC,CAAC;IAEH,qBAAqB;IACrB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BZ;KACE,CAAC,CAAC;IAEH,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE;;;;;;;;;;;mEAWsD,OAAO,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDrF;KACE,CAAC,CAAC;IAEH,sBAAsB;IACtB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE;;;;;;;;;;;;;;;;;;YAkBD,OAAO,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;CAqB9B;KACE,CAAC,CAAC;IAEH,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;CAsBZ;KACE,CAAC,CAAC;IAEH,eAAe;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAEzE,aAAa;IACb,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAEjE,YAAY;IACZ,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAE7E,OAAO,KAAK,CAAC;AACf,CAAC"}

@@ -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;

@@ -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":"AAEA,MAAM,UAAU,kBAAkB,CAAC,OAAuB;IACxD,MAAM,KAAK,GAAG;QACZ,wBAAwB;QACxB,iDAAiD;QACjD,EAAE;QACF,sDAAsD;QACtD,sEAAsE;QACtE,EAAE;QACF,iFAAiF;QACjF,kDAAkD;QAClD,EAAE;QACF,uDAAuD;QACvD,yCAAyC;KAC1C,CAAC;IAEF,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,0DAA0D,CAAC,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAuB;IAC5D,OAAO,kBAAkB,CAAC,OAAO,CAAC;SAC/B,OAAO,CAAC,qCAAqC,EAAE,6BAA6B,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAuB;IAC5D,OAAO,kBAAkB,CAAC,OAAO,CAAC;SAC/B,OAAO,CAAC,qCAAqC,EAAE,oCAAoC,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAuB;IAC9D,OAAO,kBAAkB,CAAC,OAAO,CAAC;SAC/B,OAAO,CAAC,qCAAqC,EAAE,+BAA+B,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAuB;IAC9D,MAAM,KAAK,GAAG;QACZ,wBAAwB;QACxB,iDAAiD;QACjD,EAAE;QACF,wCAAwC;QACxC,gDAAgD;QAChD,EAAE;QACF,uDAAuD;QACvD,yCAAyC;QACzC,EAAE;QACF,eAAe;QACf,WAAW;KACZ,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;;;CAUR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,cAAc,GAA2B;QAC7C,YAAY,EAAE,sBAAsB;QACpC,cAAc,EAAE,wBAAwB;QACxC,YAAY,EAAE,cAAc;QAC5B,UAAU,EAAE,YAAY;QACxB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;KAChB,CAAC;IAEF,MAAM,WAAW,GAA2B;QAC1C,YAAY,EAAE,gBAAgB;QAC9B,cAAc,EAAE,gBAAgB;QAChC,YAAY,EAAE,eAAe;QAC7B,UAAU,EAAE,aAAa;QACzB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,gBAAgB;QACxB,gFAAgF;QAChF,gFAAgF;KACjF,CAAC;IAEF,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,MAAM,CAAC;IAC/D,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IACvD,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC;IAElD,IAAI,OAAO,GAAG;;YAEJ,SAAS;;;;eAIN,GAAG;;;;;CAKjB,CAAC;IAEA,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,OAAO,IAAI;;;;;;CAMd,CAAC;IACA,CAAC;SAAM,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QACvC,OAAO,IAAI;;;;;CAKd,CAAC;IACA,CAAC;SAAM,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACrC,OAAO,IAAI;;;;;CAKd,CAAC;IACA,CAAC;SAAM,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,IAAI;;;;;CAKd,CAAC;IACA,CAAC;SAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,IAAI;;;;;CAKd,CAAC;IACA,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,IAAI;;;;;CAKd,CAAC;IACA,CAAC;SAAM,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,IAAI;;;;CAId,CAAC;IACA,CAAC;SAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,IAAI;;CAEd,CAAC;IACA,CAAC;IAED,OAAO,IAAI;;;mBAGM,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,GAAG;EAC/D,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;;2EAGyD,GAAG;;;oDAG1B,GAAG;;;qCAGlB,GAAG;;CAEvC;;;;;;;;;;;;;;;;;;;;MAoBK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,oCAAoC,QAAQ,QAAQ,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,mCAAmC;EAClS,CAAC,QAAQ,CAAC,CAAC,CAAC,iEAAiE,CAAC,CAAC,CAAC,EAAE;CACnF,CAAC;IAEA,OAAO,OAAO,CAAC;AACjB,CAAC"}

@@ -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 @@

{
"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"
}
}
}

@@ -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