@rudderjs/auth 6.0.3 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/doctor.d.ts +2 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +139 -0
- package/dist/doctor.js.map +1 -0
- package/package.json +16 -11
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":""}
|
package/dist/doctor.js
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// Doctor checks contributed by @rudderjs/auth. Loaded by @rudderjs/cli's
|
|
2
|
+
// doctor command when `rudder doctor` runs — side-effect imports below
|
|
3
|
+
// register each check on the shared CommandRegistry.
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { registerDoctorCheck } from '@rudderjs/console';
|
|
7
|
+
function fileExists(rel) {
|
|
8
|
+
try {
|
|
9
|
+
return fs.statSync(path.join(process.cwd(), rel)).isFile();
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function isResolvable(pkg) {
|
|
16
|
+
const target = path.join(process.cwd(), 'node_modules', pkg, 'package.json');
|
|
17
|
+
try {
|
|
18
|
+
return fs.statSync(target).isFile();
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Decide which framework directory under `@rudderjs/auth/views/` to vendor from.
|
|
26
|
+
* Today the package only ships a `react/` directory; vue/solid fall back to
|
|
27
|
+
* react (the views are TSX, not framework-specific in any meaningful way).
|
|
28
|
+
* This keeps the fixer working even before the per-framework view sets land.
|
|
29
|
+
*/
|
|
30
|
+
function detectAuthFramework() {
|
|
31
|
+
if (isResolvable('vike-vue'))
|
|
32
|
+
return 'vue';
|
|
33
|
+
if (isResolvable('vike-solid'))
|
|
34
|
+
return 'solid';
|
|
35
|
+
return 'react';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Idempotent copy from `node_modules/@rudderjs/auth/views/<fw>/` to
|
|
39
|
+
* `app/Views/Auth/`. Never overwrites — files that already exist are left as
|
|
40
|
+
* the user authored them (or as the prior vendoring left them). Files copied
|
|
41
|
+
* are reported in the message.
|
|
42
|
+
*/
|
|
43
|
+
function vendorAuthViews() {
|
|
44
|
+
const fw = detectAuthFramework();
|
|
45
|
+
const srcRoot = path.join(process.cwd(), 'node_modules', '@rudderjs', 'auth', 'views', fw);
|
|
46
|
+
if (!fs.existsSync(srcRoot)) {
|
|
47
|
+
// No per-framework set ships for vue/solid yet — fall back to react.
|
|
48
|
+
const fallback = path.join(process.cwd(), 'node_modules', '@rudderjs', 'auth', 'views', 'react');
|
|
49
|
+
if (!fs.existsSync(fallback)) {
|
|
50
|
+
return {
|
|
51
|
+
status: 'error',
|
|
52
|
+
message: `node_modules/@rudderjs/auth/views/${fw}/ not found (and no react fallback)`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return vendorFromDir(fallback, 'react');
|
|
56
|
+
}
|
|
57
|
+
return vendorFromDir(srcRoot, fw);
|
|
58
|
+
}
|
|
59
|
+
function vendorFromDir(srcRoot, fwLabel) {
|
|
60
|
+
const destRoot = path.join(process.cwd(), 'app', 'Views', 'Auth');
|
|
61
|
+
fs.mkdirSync(destRoot, { recursive: true });
|
|
62
|
+
const copied = [];
|
|
63
|
+
const skipped = [];
|
|
64
|
+
for (const file of fs.readdirSync(srcRoot)) {
|
|
65
|
+
const src = path.join(srcRoot, file);
|
|
66
|
+
const dest = path.join(destRoot, file);
|
|
67
|
+
if (!fs.statSync(src).isFile())
|
|
68
|
+
continue;
|
|
69
|
+
if (fs.existsSync(dest)) {
|
|
70
|
+
skipped.push(file);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
fs.copyFileSync(src, dest);
|
|
74
|
+
copied.push(file);
|
|
75
|
+
}
|
|
76
|
+
if (copied.length === 0 && skipped.length === 0) {
|
|
77
|
+
return { status: 'warn', message: `no files in node_modules/@rudderjs/auth/views/${fwLabel}/` };
|
|
78
|
+
}
|
|
79
|
+
const parts = [];
|
|
80
|
+
if (copied.length)
|
|
81
|
+
parts.push(`${copied.length} copied`);
|
|
82
|
+
if (skipped.length)
|
|
83
|
+
parts.push(`${skipped.length} already present, left untouched`);
|
|
84
|
+
return { status: 'ok', message: `${fwLabel} views: ${parts.join(', ')}` };
|
|
85
|
+
}
|
|
86
|
+
registerDoctorCheck({
|
|
87
|
+
id: 'auth:secret',
|
|
88
|
+
category: 'auth',
|
|
89
|
+
title: 'AUTH_SECRET',
|
|
90
|
+
run() {
|
|
91
|
+
const v = process.env['AUTH_SECRET'];
|
|
92
|
+
if (!v) {
|
|
93
|
+
return {
|
|
94
|
+
status: 'error',
|
|
95
|
+
message: 'unset — required for session signing',
|
|
96
|
+
fix: 'Add `AUTH_SECRET=<random string >= 32 chars>` to .env (e.g. `node -e "console.log(require(\'crypto\').randomBytes(32).toString(\'base64\'))"`)',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (v.length < 32) {
|
|
100
|
+
return {
|
|
101
|
+
status: 'warn',
|
|
102
|
+
message: `set but only ${v.length} chars — recommend ≥ 32`,
|
|
103
|
+
fix: 'Regenerate AUTH_SECRET with `node -e "console.log(require(\'crypto\').randomBytes(32).toString(\'base64\'))"`',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return { status: 'ok', message: `set, ${v.length} chars` };
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
registerDoctorCheck({
|
|
110
|
+
id: 'auth:views-vendored',
|
|
111
|
+
category: 'auth',
|
|
112
|
+
title: 'Auth views vendored',
|
|
113
|
+
run() {
|
|
114
|
+
// Only relevant when a frontend renderer is installed — otherwise the
|
|
115
|
+
// app has no UI and AUTH_SECRET alone is enough.
|
|
116
|
+
const hasFrontend = isResolvable('vike-react') ||
|
|
117
|
+
isResolvable('vike-vue') ||
|
|
118
|
+
isResolvable('vike-solid');
|
|
119
|
+
if (!hasFrontend) {
|
|
120
|
+
return { status: 'ok', message: 'no frontend installed — skip' };
|
|
121
|
+
}
|
|
122
|
+
const have = fileExists('app/Views/Auth/Login.tsx') ||
|
|
123
|
+
fileExists('app/Views/Auth/Login.jsx') ||
|
|
124
|
+
fileExists('app/Views/Auth/Login.vue') ||
|
|
125
|
+
fileExists('app/Views/Auth/Login.ts');
|
|
126
|
+
if (!have) {
|
|
127
|
+
return {
|
|
128
|
+
status: 'warn',
|
|
129
|
+
message: 'frontend installed but app/Views/Auth/ missing',
|
|
130
|
+
fix: 'Vendor the auth views: copy node_modules/@rudderjs/auth/views/<fw>/ → app/Views/Auth/ (or re-run `pnpm create rudder@latest` with auth enabled)',
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return { status: 'ok', message: 'app/Views/Auth/ populated' };
|
|
134
|
+
},
|
|
135
|
+
fixer() {
|
|
136
|
+
return vendorAuthViews();
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rudderjs/auth",
|
|
3
|
-
"version": "6.0
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"rudderjs": {
|
|
5
5
|
"provider": "AuthProvider",
|
|
6
6
|
"stage": "infrastructure",
|
|
@@ -40,6 +40,10 @@
|
|
|
40
40
|
"import": "./dist/gate-observers.js",
|
|
41
41
|
"types": "./dist/gate-observers.d.ts"
|
|
42
42
|
},
|
|
43
|
+
"./doctor": {
|
|
44
|
+
"import": "./dist/doctor.js",
|
|
45
|
+
"types": "./dist/doctor.d.ts"
|
|
46
|
+
},
|
|
43
47
|
"./views/react/Login": "./views/react/Login.tsx",
|
|
44
48
|
"./views/react/Register": "./views/react/Register.tsx",
|
|
45
49
|
"./views/react/ForgotPassword": "./views/react/ForgotPassword.tsx",
|
|
@@ -47,15 +51,16 @@
|
|
|
47
51
|
"./package.json": "./package.json"
|
|
48
52
|
},
|
|
49
53
|
"dependencies": {
|
|
50
|
-
"@rudderjs/
|
|
51
|
-
"@rudderjs/contracts": "^1.7.0"
|
|
54
|
+
"@rudderjs/console": "^1.1.0",
|
|
55
|
+
"@rudderjs/contracts": "^1.7.0",
|
|
56
|
+
"@rudderjs/core": "^1.1.7"
|
|
52
57
|
},
|
|
53
58
|
"peerDependencies": {
|
|
54
|
-
"@rudderjs/hash": "^1.0
|
|
55
|
-
"@rudderjs/
|
|
59
|
+
"@rudderjs/hash": "^1.1.0",
|
|
60
|
+
"@rudderjs/router": "^1.3.2",
|
|
61
|
+
"@rudderjs/session": "^2.1.0",
|
|
56
62
|
"@rudderjs/view": "^1.2.1",
|
|
57
|
-
"@rudderjs/vite": "^2.2.1"
|
|
58
|
-
"@rudderjs/router": "^1.3.2"
|
|
63
|
+
"@rudderjs/vite": "^2.2.1"
|
|
59
64
|
},
|
|
60
65
|
"peerDependenciesMeta": {
|
|
61
66
|
"@rudderjs/hash": {
|
|
@@ -78,11 +83,11 @@
|
|
|
78
83
|
"@types/node": "^20.0.0",
|
|
79
84
|
"reflect-metadata": "^0.2.2",
|
|
80
85
|
"typescript": "^5.4.0",
|
|
81
|
-
"@rudderjs/hash": "^1.0
|
|
82
|
-
"@rudderjs/
|
|
86
|
+
"@rudderjs/hash": "^1.1.0",
|
|
87
|
+
"@rudderjs/router": "^1.3.2",
|
|
88
|
+
"@rudderjs/session": "^2.1.0",
|
|
83
89
|
"@rudderjs/view": "^1.2.1",
|
|
84
|
-
"@rudderjs/vite": "^2.2.1"
|
|
85
|
-
"@rudderjs/router": "^1.3.2"
|
|
90
|
+
"@rudderjs/vite": "^2.2.1"
|
|
86
91
|
},
|
|
87
92
|
"author": "Suleiman Shahbari",
|
|
88
93
|
"scripts": {
|