workos 0.4.5 → 0.5.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/bin.js +32 -3
- package/dist/bin.js.map +1 -1
- package/dist/commands/doctor.d.ts +10 -0
- package/dist/commands/doctor.js +30 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/doctor/checks/connectivity.d.ts +2 -0
- package/dist/doctor/checks/connectivity.js +35 -0
- package/dist/doctor/checks/connectivity.js.map +1 -0
- package/dist/doctor/checks/dashboard.d.ts +3 -0
- package/dist/doctor/checks/dashboard.js +123 -0
- package/dist/doctor/checks/dashboard.js.map +1 -0
- package/dist/doctor/checks/environment.d.ts +2 -0
- package/dist/doctor/checks/environment.js +68 -0
- package/dist/doctor/checks/environment.js.map +1 -0
- package/dist/doctor/checks/framework.d.ts +2 -0
- package/dist/doctor/checks/framework.js +75 -0
- package/dist/doctor/checks/framework.js.map +1 -0
- package/dist/doctor/checks/runtime.d.ts +2 -0
- package/dist/doctor/checks/runtime.js +20 -0
- package/dist/doctor/checks/runtime.js.map +1 -0
- package/dist/doctor/checks/sdk.d.ts +2 -0
- package/dist/doctor/checks/sdk.js +111 -0
- package/dist/doctor/checks/sdk.js.map +1 -0
- package/dist/doctor/clipboard.d.ts +1 -0
- package/dist/doctor/clipboard.js +43 -0
- package/dist/doctor/clipboard.js.map +1 -0
- package/dist/doctor/index.d.ts +6 -0
- package/dist/doctor/index.js +94 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/issues.d.ts +58 -0
- package/dist/doctor/issues.js +134 -0
- package/dist/doctor/issues.js.map +1 -0
- package/dist/doctor/json-output.d.ts +2 -0
- package/dist/doctor/json-output.js +4 -0
- package/dist/doctor/json-output.js.map +1 -0
- package/dist/doctor/output.d.ts +5 -0
- package/dist/doctor/output.js +149 -0
- package/dist/doctor/output.js.map +1 -0
- package/dist/doctor/types.d.ts +105 -0
- package/dist/doctor/types.js +2 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/integrations/dotnet/index.d.ts +8 -0
- package/dist/integrations/dotnet/index.js +163 -0
- package/dist/integrations/dotnet/index.js.map +1 -0
- package/dist/integrations/elixir/index.d.ts +8 -0
- package/dist/integrations/elixir/index.js +152 -0
- package/dist/integrations/elixir/index.js.map +1 -0
- package/dist/integrations/go/index.d.ts +11 -0
- package/dist/integrations/go/index.js +220 -0
- package/dist/integrations/go/index.js.map +1 -0
- package/dist/integrations/kotlin/index.d.ts +4 -0
- package/dist/integrations/kotlin/index.js +53 -0
- package/dist/integrations/kotlin/index.js.map +1 -0
- package/dist/integrations/nextjs/index.d.ts +4 -0
- package/dist/integrations/nextjs/index.js +90 -0
- package/dist/integrations/nextjs/index.js.map +1 -0
- package/dist/integrations/nextjs/utils.d.ts +8 -0
- package/dist/integrations/nextjs/utils.js +53 -0
- package/dist/integrations/nextjs/utils.js.map +1 -0
- package/dist/integrations/node/index.d.ts +4 -0
- package/dist/integrations/node/index.js +52 -0
- package/dist/integrations/node/index.js.map +1 -0
- package/dist/integrations/php/index.d.ts +4 -0
- package/dist/integrations/php/index.js +51 -0
- package/dist/integrations/php/index.js.map +1 -0
- package/dist/integrations/php-laravel/index.d.ts +4 -0
- package/dist/integrations/php-laravel/index.js +51 -0
- package/dist/integrations/php-laravel/index.js.map +1 -0
- package/dist/integrations/python/index.d.ts +9 -0
- package/dist/integrations/python/index.js +254 -0
- package/dist/integrations/python/index.js.map +1 -0
- package/dist/integrations/react/index.d.ts +4 -0
- package/dist/integrations/react/index.js +49 -0
- package/dist/integrations/react/index.js.map +1 -0
- package/dist/integrations/react-router/index.d.ts +4 -0
- package/dist/integrations/react-router/index.js +94 -0
- package/dist/integrations/react-router/index.js.map +1 -0
- package/dist/integrations/react-router/utils.d.ts +10 -0
- package/dist/integrations/react-router/utils.js +146 -0
- package/dist/integrations/react-router/utils.js.map +1 -0
- package/dist/integrations/ruby/index.d.ts +8 -0
- package/dist/integrations/ruby/index.js +142 -0
- package/dist/integrations/ruby/index.js.map +1 -0
- package/dist/integrations/sveltekit/index.d.ts +4 -0
- package/dist/integrations/sveltekit/index.js +50 -0
- package/dist/integrations/sveltekit/index.js.map +1 -0
- package/dist/integrations/tanstack-start/index.d.ts +4 -0
- package/dist/integrations/tanstack-start/index.js +51 -0
- package/dist/integrations/tanstack-start/index.js.map +1 -0
- package/dist/integrations/vanilla-js/index.d.ts +4 -0
- package/dist/integrations/vanilla-js/index.js +49 -0
- package/dist/integrations/vanilla-js/index.js.map +1 -0
- package/dist/lib/agent-interface.js +66 -1
- package/dist/lib/agent-interface.js.map +1 -1
- package/dist/lib/config.d.ts +32 -58
- package/dist/lib/config.js +19 -70
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +17 -14
- package/dist/lib/constants.js +12 -31
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/framework-config.d.ts +13 -4
- package/dist/lib/framework-config.js.map +1 -1
- package/dist/lib/language-detection.d.ts +20 -0
- package/dist/lib/language-detection.js +96 -0
- package/dist/lib/language-detection.js.map +1 -0
- package/dist/lib/port-detection.js +4 -2
- package/dist/lib/port-detection.js.map +1 -1
- package/dist/lib/registry.d.ts +43 -0
- package/dist/lib/registry.js +96 -0
- package/dist/lib/registry.js.map +1 -0
- package/dist/lib/run-with-core.js +70 -26
- package/dist/lib/run-with-core.js.map +1 -1
- package/dist/nextjs/nextjs-installer-agent.d.ts +3 -4
- package/dist/nextjs/nextjs-installer-agent.js +3 -94
- package/dist/nextjs/nextjs-installer-agent.js.map +1 -1
- package/dist/nextjs/utils.d.ts +4 -8
- package/dist/nextjs/utils.js +4 -52
- package/dist/nextjs/utils.js.map +1 -1
- package/dist/react/react-installer-agent.d.ts +4 -2
- package/dist/react/react-installer-agent.js +4 -46
- package/dist/react/react-installer-agent.js.map +1 -1
- package/dist/react-router/react-router-installer-agent.d.ts +2 -4
- package/dist/react-router/react-router-installer-agent.js +2 -100
- package/dist/react-router/react-router-installer-agent.js.map +1 -1
- package/dist/react-router/utils.d.ts +2 -17
- package/dist/react-router/utils.js +2 -207
- package/dist/react-router/utils.js.map +1 -1
- package/dist/tanstack-start/tanstack-start-installer-agent.d.ts +4 -2
- package/dist/tanstack-start/tanstack-start-installer-agent.js +4 -48
- package/dist/tanstack-start/tanstack-start-installer-agent.js.map +1 -1
- package/dist/vanilla-js/vanilla-js-installer-agent.d.ts +4 -2
- package/dist/vanilla-js/vanilla-js-installer-agent.js +4 -46
- package/dist/vanilla-js/vanilla-js-installer-agent.js.map +1 -1
- package/package.json +6 -5
- package/skills/workos-authkit-sveltekit/SKILL.md +160 -0
- package/skills/workos-dotnet/SKILL.md +163 -0
- package/skills/workos-elixir/SKILL.md +194 -0
- package/skills/workos-go/SKILL.md +191 -0
- package/skills/workos-kotlin/SKILL.md +161 -0
- package/skills/workos-node/SKILL.md +164 -0
- package/skills/workos-php/SKILL.md +127 -0
- package/skills/workos-php-laravel/SKILL.md +147 -0
- package/skills/workos-python/SKILL.md +159 -0
- package/skills/workos-ruby/SKILL.md +163 -0
|
@@ -1,210 +1,5 @@
|
|
|
1
|
-
import { major } from 'semver';
|
|
2
|
-
import fg from 'fast-glob';
|
|
3
|
-
import { abortIfCancelled, getPackageDotJson } from '../utils/clack-utils.js';
|
|
4
|
-
import clack from '../utils/clack.js';
|
|
5
|
-
import { getVersionBucket } from '../utils/semver.js';
|
|
6
|
-
import { IGNORE_PATTERNS, Integration } from '../lib/constants.js';
|
|
7
|
-
import { getPackageVersion } from '../utils/package-json.js';
|
|
8
|
-
import chalk from 'chalk';
|
|
9
|
-
import * as fs from 'node:fs';
|
|
10
|
-
import * as path from 'node:path';
|
|
11
|
-
import * as semver from 'semver';
|
|
12
|
-
export var ReactRouterMode;
|
|
13
|
-
(function (ReactRouterMode) {
|
|
14
|
-
ReactRouterMode["V6"] = "v6";
|
|
15
|
-
ReactRouterMode["V7_FRAMEWORK"] = "v7-framework";
|
|
16
|
-
ReactRouterMode["V7_DATA"] = "v7-data";
|
|
17
|
-
ReactRouterMode["V7_DECLARATIVE"] = "v7-declarative";
|
|
18
|
-
})(ReactRouterMode || (ReactRouterMode = {}));
|
|
19
1
|
/**
|
|
20
|
-
*
|
|
2
|
+
* @deprecated Import from 'src/integrations/react-router/utils.js' instead.
|
|
21
3
|
*/
|
|
22
|
-
export
|
|
23
|
-
return getVersionBucket(version, 6);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Check if react-router.config.ts exists (indicates framework mode - React Router v7)
|
|
27
|
-
*/
|
|
28
|
-
async function hasReactRouterConfig({ installDir }) {
|
|
29
|
-
const configMatches = await fg('**/react-router.config.@(ts|js|tsx|jsx)', {
|
|
30
|
-
dot: true,
|
|
31
|
-
cwd: installDir,
|
|
32
|
-
ignore: IGNORE_PATTERNS,
|
|
33
|
-
});
|
|
34
|
-
return configMatches.length > 0;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Search for createBrowserRouter usage in source files
|
|
38
|
-
*/
|
|
39
|
-
async function hasCreateBrowserRouter({ installDir }) {
|
|
40
|
-
const sourceFiles = await fg('**/*.@(ts|tsx|js|jsx)', {
|
|
41
|
-
dot: true,
|
|
42
|
-
cwd: installDir,
|
|
43
|
-
ignore: IGNORE_PATTERNS,
|
|
44
|
-
});
|
|
45
|
-
for (const file of sourceFiles) {
|
|
46
|
-
try {
|
|
47
|
-
const filePath = path.join(installDir, file);
|
|
48
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
49
|
-
// Check for createBrowserRouter import or usage
|
|
50
|
-
if (content.includes('createBrowserRouter')) {
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
// Skip files that can't be read
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Search for declarative BrowserRouter usage
|
|
63
|
-
*/
|
|
64
|
-
async function hasDeclarativeRouter({ installDir }) {
|
|
65
|
-
const sourceFiles = await fg('**/*.@(ts|tsx|js|jsx)', {
|
|
66
|
-
dot: true,
|
|
67
|
-
cwd: installDir,
|
|
68
|
-
ignore: IGNORE_PATTERNS,
|
|
69
|
-
});
|
|
70
|
-
for (const file of sourceFiles) {
|
|
71
|
-
try {
|
|
72
|
-
const filePath = path.join(installDir, file);
|
|
73
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
74
|
-
// Check for BrowserRouter usage (JSX or import)
|
|
75
|
-
if (content.includes('<BrowserRouter') ||
|
|
76
|
-
(content.includes('BrowserRouter') &&
|
|
77
|
-
(content.includes('from "react-router-dom"') || content.includes("from 'react-router-dom'")))) {
|
|
78
|
-
return true;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
catch {
|
|
82
|
-
// Skip files that can't be read
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return false;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Detect React Router mode
|
|
90
|
-
*/
|
|
91
|
-
export async function getReactRouterMode(options) {
|
|
92
|
-
const { installDir } = options;
|
|
93
|
-
// First, get the React Router version
|
|
94
|
-
const packageJson = await getPackageDotJson(options);
|
|
95
|
-
const reactRouterVersion = getPackageVersion('react-router-dom', packageJson) || getPackageVersion('react-router', packageJson);
|
|
96
|
-
if (!reactRouterVersion) {
|
|
97
|
-
// If we can't detect version, ask the user
|
|
98
|
-
clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);
|
|
99
|
-
const result = await abortIfCancelled(clack.select({
|
|
100
|
-
message: 'What React Router version and mode are you using?',
|
|
101
|
-
options: [
|
|
102
|
-
{
|
|
103
|
-
label: 'React Router v6',
|
|
104
|
-
value: ReactRouterMode.V6,
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
label: 'React Router v7 - Framework mode',
|
|
108
|
-
value: ReactRouterMode.V7_FRAMEWORK,
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
label: 'React Router v7 - Data mode',
|
|
112
|
-
value: ReactRouterMode.V7_DATA,
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
label: 'React Router v7 - Declarative mode',
|
|
116
|
-
value: ReactRouterMode.V7_DECLARATIVE,
|
|
117
|
-
},
|
|
118
|
-
],
|
|
119
|
-
}), Integration.reactRouter);
|
|
120
|
-
return result;
|
|
121
|
-
}
|
|
122
|
-
const coercedVersion = semver.coerce(reactRouterVersion);
|
|
123
|
-
const majorVersion = coercedVersion ? major(coercedVersion) : null;
|
|
124
|
-
// If v6, return V6
|
|
125
|
-
if (majorVersion === 6) {
|
|
126
|
-
clack.log.info('Detected React Router v6');
|
|
127
|
-
return ReactRouterMode.V6;
|
|
128
|
-
}
|
|
129
|
-
// If v7, detect the mode
|
|
130
|
-
if (majorVersion === 7) {
|
|
131
|
-
// First check for framework mode (react-router.config.ts)
|
|
132
|
-
const hasConfig = await hasReactRouterConfig({ installDir });
|
|
133
|
-
if (hasConfig) {
|
|
134
|
-
clack.log.info('Detected React Router v7 - Framework mode');
|
|
135
|
-
return ReactRouterMode.V7_FRAMEWORK;
|
|
136
|
-
}
|
|
137
|
-
// Check for data mode (createBrowserRouter)
|
|
138
|
-
const hasDataMode = await hasCreateBrowserRouter({ installDir });
|
|
139
|
-
if (hasDataMode) {
|
|
140
|
-
clack.log.info('Detected React Router v7 - Data mode');
|
|
141
|
-
return ReactRouterMode.V7_DATA;
|
|
142
|
-
}
|
|
143
|
-
// Check for declarative mode (BrowserRouter)
|
|
144
|
-
const hasDeclarative = await hasDeclarativeRouter({ installDir });
|
|
145
|
-
if (hasDeclarative) {
|
|
146
|
-
clack.log.info('Detected React Router v7 - Declarative mode');
|
|
147
|
-
return ReactRouterMode.V7_DECLARATIVE;
|
|
148
|
-
}
|
|
149
|
-
// If v7 but can't detect mode, ask the user
|
|
150
|
-
clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);
|
|
151
|
-
const result = await abortIfCancelled(clack.select({
|
|
152
|
-
message: 'What React Router v7 mode are you using?',
|
|
153
|
-
options: [
|
|
154
|
-
{
|
|
155
|
-
label: 'Framework mode',
|
|
156
|
-
value: ReactRouterMode.V7_FRAMEWORK,
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
label: 'Data mode',
|
|
160
|
-
value: ReactRouterMode.V7_DATA,
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
label: 'Declarative mode',
|
|
164
|
-
value: ReactRouterMode.V7_DECLARATIVE,
|
|
165
|
-
},
|
|
166
|
-
],
|
|
167
|
-
}), Integration.reactRouter);
|
|
168
|
-
return result;
|
|
169
|
-
}
|
|
170
|
-
// If version is not 6 or 7, default to asking
|
|
171
|
-
clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);
|
|
172
|
-
const result = await abortIfCancelled(clack.select({
|
|
173
|
-
message: 'What React Router version and mode are you using?',
|
|
174
|
-
options: [
|
|
175
|
-
{
|
|
176
|
-
label: 'React Router v6',
|
|
177
|
-
value: ReactRouterMode.V6,
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
label: 'React Router v7 - Framework mode',
|
|
181
|
-
value: ReactRouterMode.V7_FRAMEWORK,
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
label: 'React Router v7 - Data mode',
|
|
185
|
-
value: ReactRouterMode.V7_DATA,
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
label: 'React Router v7 - Declarative mode',
|
|
189
|
-
value: ReactRouterMode.V7_DECLARATIVE,
|
|
190
|
-
},
|
|
191
|
-
],
|
|
192
|
-
}), Integration.reactRouter);
|
|
193
|
-
return result;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Get human-readable name for React Router mode
|
|
197
|
-
*/
|
|
198
|
-
export function getReactRouterModeName(mode) {
|
|
199
|
-
switch (mode) {
|
|
200
|
-
case ReactRouterMode.V6:
|
|
201
|
-
return 'v6';
|
|
202
|
-
case ReactRouterMode.V7_FRAMEWORK:
|
|
203
|
-
return 'v7 Framework mode';
|
|
204
|
-
case ReactRouterMode.V7_DATA:
|
|
205
|
-
return 'v7 Data mode';
|
|
206
|
-
case ReactRouterMode.V7_DECLARATIVE:
|
|
207
|
-
return 'v7 Declarative mode';
|
|
208
|
-
}
|
|
209
|
-
}
|
|
4
|
+
export { ReactRouterMode, getReactRouterVersionBucket, getReactRouterMode, getReactRouterModeName, } from '../integrations/react-router/utils.js';
|
|
210
5
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/react-router/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { major } from 'semver';\nimport fg from 'fast-glob';\nimport { abortIfCancelled, getPackageDotJson } from '../utils/clack-utils.js';\nimport clack from '../utils/clack.js';\nimport { getVersionBucket } from '../utils/semver.js';\nimport type { InstallerOptions } from '../utils/types.js';\nimport { IGNORE_PATTERNS, Integration } from '../lib/constants.js';\nimport { getPackageVersion } from '../utils/package-json.js';\nimport chalk from 'chalk';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as semver from 'semver';\n\nexport enum ReactRouterMode {\n V6 = 'v6', // React Router v6\n V7_FRAMEWORK = 'v7-framework', // React Router v7 with react-router.config.ts\n V7_DATA = 'v7-data', // React Router v7 with createBrowserRouter\n V7_DECLARATIVE = 'v7-declarative', // React Router v7 with BrowserRouter\n}\n\n/**\n * Get React Router version bucket for analytics\n */\nexport function getReactRouterVersionBucket(version: string | undefined): string {\n return getVersionBucket(version, 6);\n}\n\n/**\n * Check if react-router.config.ts exists (indicates framework mode - React Router v7)\n */\nasync function hasReactRouterConfig({ installDir }: Pick<InstallerOptions, 'installDir'>): Promise<boolean> {\n const configMatches = await fg('**/react-router.config.@(ts|js|tsx|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n\n return configMatches.length > 0;\n}\n\n/**\n * Search for createBrowserRouter usage in source files\n */\nasync function hasCreateBrowserRouter({ installDir }: Pick<InstallerOptions, 'installDir'>): Promise<boolean> {\n const sourceFiles = await fg('**/*.@(ts|tsx|js|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n\n for (const file of sourceFiles) {\n try {\n const filePath = path.join(installDir, file);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n // Check for createBrowserRouter import or usage\n if (content.includes('createBrowserRouter')) {\n return true;\n }\n } catch {\n // Skip files that can't be read\n continue;\n }\n }\n\n return false;\n}\n\n/**\n * Search for declarative BrowserRouter usage\n */\nasync function hasDeclarativeRouter({ installDir }: Pick<InstallerOptions, 'installDir'>): Promise<boolean> {\n const sourceFiles = await fg('**/*.@(ts|tsx|js|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n\n for (const file of sourceFiles) {\n try {\n const filePath = path.join(installDir, file);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n // Check for BrowserRouter usage (JSX or import)\n if (\n content.includes('<BrowserRouter') ||\n (content.includes('BrowserRouter') &&\n (content.includes('from \"react-router-dom\"') || content.includes(\"from 'react-router-dom'\")))\n ) {\n return true;\n }\n } catch {\n // Skip files that can't be read\n continue;\n }\n }\n\n return false;\n}\n\n/**\n * Detect React Router mode\n */\nexport async function getReactRouterMode(options: InstallerOptions): Promise<ReactRouterMode> {\n const { installDir } = options;\n\n // First, get the React Router version\n const packageJson = await getPackageDotJson(options);\n const reactRouterVersion =\n getPackageVersion('react-router-dom', packageJson) || getPackageVersion('react-router', packageJson);\n\n if (!reactRouterVersion) {\n // If we can't detect version, ask the user\n clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);\n const result: ReactRouterMode = await abortIfCancelled(\n clack.select({\n message: 'What React Router version and mode are you using?',\n options: [\n {\n label: 'React Router v6',\n value: ReactRouterMode.V6,\n },\n {\n label: 'React Router v7 - Framework mode',\n value: ReactRouterMode.V7_FRAMEWORK,\n },\n {\n label: 'React Router v7 - Data mode',\n value: ReactRouterMode.V7_DATA,\n },\n {\n label: 'React Router v7 - Declarative mode',\n value: ReactRouterMode.V7_DECLARATIVE,\n },\n ],\n }),\n Integration.reactRouter,\n );\n return result;\n }\n\n const coercedVersion = semver.coerce(reactRouterVersion);\n const majorVersion = coercedVersion ? major(coercedVersion) : null;\n\n // If v6, return V6\n if (majorVersion === 6) {\n clack.log.info('Detected React Router v6');\n return ReactRouterMode.V6;\n }\n\n // If v7, detect the mode\n if (majorVersion === 7) {\n // First check for framework mode (react-router.config.ts)\n const hasConfig = await hasReactRouterConfig({ installDir });\n if (hasConfig) {\n clack.log.info('Detected React Router v7 - Framework mode');\n return ReactRouterMode.V7_FRAMEWORK;\n }\n\n // Check for data mode (createBrowserRouter)\n const hasDataMode = await hasCreateBrowserRouter({ installDir });\n if (hasDataMode) {\n clack.log.info('Detected React Router v7 - Data mode');\n return ReactRouterMode.V7_DATA;\n }\n\n // Check for declarative mode (BrowserRouter)\n const hasDeclarative = await hasDeclarativeRouter({ installDir });\n if (hasDeclarative) {\n clack.log.info('Detected React Router v7 - Declarative mode');\n return ReactRouterMode.V7_DECLARATIVE;\n }\n\n // If v7 but can't detect mode, ask the user\n clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);\n const result: ReactRouterMode = await abortIfCancelled(\n clack.select({\n message: 'What React Router v7 mode are you using?',\n options: [\n {\n label: 'Framework mode',\n value: ReactRouterMode.V7_FRAMEWORK,\n },\n {\n label: 'Data mode',\n value: ReactRouterMode.V7_DATA,\n },\n {\n label: 'Declarative mode',\n value: ReactRouterMode.V7_DECLARATIVE,\n },\n ],\n }),\n Integration.reactRouter,\n );\n return result;\n }\n\n // If version is not 6 or 7, default to asking\n clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);\n const result: ReactRouterMode = await abortIfCancelled(\n clack.select({\n message: 'What React Router version and mode are you using?',\n options: [\n {\n label: 'React Router v6',\n value: ReactRouterMode.V6,\n },\n {\n label: 'React Router v7 - Framework mode',\n value: ReactRouterMode.V7_FRAMEWORK,\n },\n {\n label: 'React Router v7 - Data mode',\n value: ReactRouterMode.V7_DATA,\n },\n {\n label: 'React Router v7 - Declarative mode',\n value: ReactRouterMode.V7_DECLARATIVE,\n },\n ],\n }),\n Integration.reactRouter,\n );\n return result;\n}\n\n/**\n * Get human-readable name for React Router mode\n */\nexport function getReactRouterModeName(mode: ReactRouterMode): string {\n switch (mode) {\n case ReactRouterMode.V6:\n return 'v6';\n case ReactRouterMode.V7_FRAMEWORK:\n return 'v7 Framework mode';\n case ReactRouterMode.V7_DATA:\n return 'v7 Data mode';\n case ReactRouterMode.V7_DECLARATIVE:\n return 'v7 Declarative mode';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/react-router/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,uCAAuC,CAAC","sourcesContent":["/**\n * @deprecated Import from 'src/integrations/react-router/utils.js' instead.\n */\nexport {\n ReactRouterMode,\n getReactRouterVersionBucket,\n getReactRouterMode,\n getReactRouterModeName,\n} from '../integrations/react-router/utils.js';\n"]}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Import from 'src/integrations/tanstack-start/index.js' instead.
|
|
3
|
+
*/
|
|
4
|
+
export { run as runTanstackStartInstallerAgent, config as TANSTACK_START_AGENT_CONFIG, } from '../integrations/tanstack-start/index.js';
|
|
@@ -1,49 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const TANSTACK_START_AGENT_CONFIG = {
|
|
6
|
-
metadata: {
|
|
7
|
-
name: 'TanStack Start',
|
|
8
|
-
integration: Integration.tanstackStart,
|
|
9
|
-
docsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',
|
|
10
|
-
unsupportedVersionDocsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',
|
|
11
|
-
skillName: 'workos-authkit-tanstack-start',
|
|
12
|
-
},
|
|
13
|
-
detection: {
|
|
14
|
-
packageName: '@tanstack/react-start',
|
|
15
|
-
packageDisplayName: 'TanStack Start',
|
|
16
|
-
getVersion: (packageJson) => getPackageVersion('@tanstack/react-start', packageJson),
|
|
17
|
-
},
|
|
18
|
-
environment: {
|
|
19
|
-
uploadToHosting: false,
|
|
20
|
-
requiresApiKey: true, // Server-side framework
|
|
21
|
-
getEnvVars: (apiKey, clientId) => ({
|
|
22
|
-
WORKOS_API_KEY: apiKey,
|
|
23
|
-
WORKOS_CLIENT_ID: clientId,
|
|
24
|
-
}),
|
|
25
|
-
},
|
|
26
|
-
analytics: {
|
|
27
|
-
getTags: () => ({}),
|
|
28
|
-
},
|
|
29
|
-
prompts: {},
|
|
30
|
-
ui: {
|
|
31
|
-
successMessage: 'WorkOS AuthKit integration complete',
|
|
32
|
-
getOutroChanges: () => [
|
|
33
|
-
'Analyzed your TanStack Start project structure',
|
|
34
|
-
'Created and configured WorkOS AuthKit',
|
|
35
|
-
'Integrated authentication into your application',
|
|
36
|
-
],
|
|
37
|
-
getOutroNextSteps: () => [
|
|
38
|
-
'Start your development server to test authentication',
|
|
39
|
-
'Visit the WorkOS Dashboard to manage users and settings',
|
|
40
|
-
],
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
export async function runTanstackStartInstallerAgent(options) {
|
|
44
|
-
if (options.debug) {
|
|
45
|
-
enableDebugLogs();
|
|
46
|
-
}
|
|
47
|
-
return runAgentInstaller(TANSTACK_START_AGENT_CONFIG, options);
|
|
48
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Import from 'src/integrations/tanstack-start/index.js' instead.
|
|
3
|
+
*/
|
|
4
|
+
export { run as runTanstackStartInstallerAgent, config as TANSTACK_START_AGENT_CONFIG, } from '../integrations/tanstack-start/index.js';
|
|
49
5
|
//# sourceMappingURL=tanstack-start-installer-agent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack-start-installer-agent.js","sourceRoot":"","sources":["../../src/tanstack-start/tanstack-start-installer-agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tanstack-start-installer-agent.js","sourceRoot":"","sources":["../../src/tanstack-start/tanstack-start-installer-agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,GAAG,IAAI,8BAA8B,EACrC,MAAM,IAAI,2BAA2B,GACtC,MAAM,yCAAyC,CAAC","sourcesContent":["/**\n * @deprecated Import from 'src/integrations/tanstack-start/index.js' instead.\n */\nexport {\n run as runTanstackStartInstallerAgent,\n config as TANSTACK_START_AGENT_CONFIG,\n} from '../integrations/tanstack-start/index.js';\n"]}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Import from 'src/integrations/vanilla-js/index.js' instead.
|
|
3
|
+
*/
|
|
4
|
+
export { run as runVanillaJsInstallerAgent, config as VANILLA_JS_AGENT_CONFIG, } from '../integrations/vanilla-js/index.js';
|
|
@@ -1,47 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
metadata: {
|
|
6
|
-
name: 'Vanilla JavaScript',
|
|
7
|
-
integration: Integration.vanillaJs,
|
|
8
|
-
docsUrl: 'https://workos.com/docs/user-management/authkit/javascript',
|
|
9
|
-
unsupportedVersionDocsUrl: 'https://workos.com/docs/user-management/authkit/javascript',
|
|
10
|
-
skillName: 'workos-authkit-vanilla-js',
|
|
11
|
-
},
|
|
12
|
-
detection: {
|
|
13
|
-
packageName: 'workos',
|
|
14
|
-
packageDisplayName: 'Vanilla JavaScript',
|
|
15
|
-
getVersion: () => undefined,
|
|
16
|
-
},
|
|
17
|
-
environment: {
|
|
18
|
-
uploadToHosting: false,
|
|
19
|
-
requiresApiKey: false, // Client-only
|
|
20
|
-
getEnvVars: (apiKey, clientId) => ({
|
|
21
|
-
WORKOS_CLIENT_ID: clientId, // Only client ID needed
|
|
22
|
-
}),
|
|
23
|
-
},
|
|
24
|
-
analytics: {
|
|
25
|
-
getTags: () => ({}),
|
|
26
|
-
},
|
|
27
|
-
prompts: {},
|
|
28
|
-
ui: {
|
|
29
|
-
successMessage: 'WorkOS AuthKit integration complete',
|
|
30
|
-
getOutroChanges: () => [
|
|
31
|
-
'Created WorkOS AuthKit integration',
|
|
32
|
-
'Added authentication to your JavaScript application',
|
|
33
|
-
'Set up login/logout functionality',
|
|
34
|
-
],
|
|
35
|
-
getOutroNextSteps: () => [
|
|
36
|
-
'Start your development server to test authentication',
|
|
37
|
-
'Visit the WorkOS Dashboard to manage users and settings',
|
|
38
|
-
],
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
export async function runVanillaJsInstallerAgent(options) {
|
|
42
|
-
if (options.debug) {
|
|
43
|
-
enableDebugLogs();
|
|
44
|
-
}
|
|
45
|
-
return runAgentInstaller(VANILLA_JS_AGENT_CONFIG, options);
|
|
46
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Import from 'src/integrations/vanilla-js/index.js' instead.
|
|
3
|
+
*/
|
|
4
|
+
export { run as runVanillaJsInstallerAgent, config as VANILLA_JS_AGENT_CONFIG, } from '../integrations/vanilla-js/index.js';
|
|
47
5
|
//# sourceMappingURL=vanilla-js-installer-agent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vanilla-js-installer-agent.js","sourceRoot":"","sources":["../../src/vanilla-js/vanilla-js-installer-agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vanilla-js-installer-agent.js","sourceRoot":"","sources":["../../src/vanilla-js/vanilla-js-installer-agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,GAAG,IAAI,0BAA0B,EACjC,MAAM,IAAI,uBAAuB,GAClC,MAAM,qCAAqC,CAAC","sourcesContent":["/**\n * @deprecated Import from 'src/integrations/vanilla-js/index.js' instead.\n */\nexport {\n run as runVanillaJsInstallerAgent,\n config as VANILLA_JS_AGENT_CONFIG,\n} from '../integrations/vanilla-js/index.js';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workos",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "The Official Workos CLI",
|
|
6
6
|
"repository": {
|
|
@@ -73,8 +73,7 @@
|
|
|
73
73
|
"engines": {
|
|
74
74
|
"node": ">=20.20"
|
|
75
75
|
},
|
|
76
|
-
"
|
|
77
|
-
"license": "MIT",
|
|
76
|
+
"packageManager": "pnpm@10.28.2",
|
|
78
77
|
"scripts": {
|
|
79
78
|
"clean": "rm -rf ./dist",
|
|
80
79
|
"prebuild": "pnpm clean",
|
|
@@ -95,5 +94,7 @@
|
|
|
95
94
|
"eval:prune": "tsx tests/evals/index.ts prune",
|
|
96
95
|
"eval:logs": "tsx tests/evals/index.ts logs",
|
|
97
96
|
"eval:show": "tsx tests/evals/index.ts show"
|
|
98
|
-
}
|
|
99
|
-
|
|
97
|
+
},
|
|
98
|
+
"author": "WorkOS",
|
|
99
|
+
"license": "MIT"
|
|
100
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: workos-authkit-sveltekit
|
|
3
|
+
description: Integrate WorkOS AuthKit with SvelteKit. Server-side authentication with hooks and file-based routing.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# WorkOS AuthKit for SvelteKit
|
|
7
|
+
|
|
8
|
+
## Step 1: Fetch SDK Documentation (BLOCKING)
|
|
9
|
+
|
|
10
|
+
**STOP. Do not proceed until complete.**
|
|
11
|
+
|
|
12
|
+
WebFetch: `https://github.com/workos/authkit-sveltekit/blob/main/README.md`
|
|
13
|
+
|
|
14
|
+
The README is the source of truth. If this skill conflicts with README, follow README.
|
|
15
|
+
|
|
16
|
+
## Step 2: Pre-Flight Validation
|
|
17
|
+
|
|
18
|
+
### Project Structure
|
|
19
|
+
|
|
20
|
+
- Confirm `svelte.config.js` (or `svelte.config.ts`) exists
|
|
21
|
+
- Confirm `package.json` contains `@sveltejs/kit` dependency
|
|
22
|
+
- Confirm `src/routes/` directory exists
|
|
23
|
+
|
|
24
|
+
### Environment Variables
|
|
25
|
+
|
|
26
|
+
Check `.env` or `.env.local` for:
|
|
27
|
+
|
|
28
|
+
- `WORKOS_API_KEY` - starts with `sk_`
|
|
29
|
+
- `WORKOS_CLIENT_ID` - starts with `client_`
|
|
30
|
+
- `WORKOS_REDIRECT_URI` - valid callback URL
|
|
31
|
+
- `WORKOS_COOKIE_PASSWORD` - 32+ characters
|
|
32
|
+
|
|
33
|
+
SvelteKit uses `$env/static/private` and `$env/dynamic/private` natively. The agent should write env vars to `.env` (SvelteKit's default) or `.env.local`.
|
|
34
|
+
|
|
35
|
+
## Step 3: Install SDK
|
|
36
|
+
|
|
37
|
+
Detect package manager, install SDK package from README.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
pnpm-lock.yaml? → pnpm add @workos-inc/authkit-sveltekit
|
|
41
|
+
yarn.lock? → yarn add @workos-inc/authkit-sveltekit
|
|
42
|
+
bun.lockb? → bun add @workos-inc/authkit-sveltekit
|
|
43
|
+
else → npm install @workos-inc/authkit-sveltekit
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Verify:** SDK package exists in node_modules before continuing.
|
|
47
|
+
|
|
48
|
+
## Step 4: Configure Server Hooks
|
|
49
|
+
|
|
50
|
+
SvelteKit uses `src/hooks.server.ts` for server-side middleware. This is where the AuthKit handler is registered.
|
|
51
|
+
|
|
52
|
+
Create or update `src/hooks.server.ts` with the authkit handle function from the README.
|
|
53
|
+
|
|
54
|
+
### Existing Hooks (IMPORTANT)
|
|
55
|
+
|
|
56
|
+
If `src/hooks.server.ts` already exists with custom logic, use SvelteKit's `sequence()` helper to compose hooks:
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { sequence } from '@sveltejs/kit/hooks';
|
|
60
|
+
import { authkitHandle } from '@workos-inc/authkit-sveltekit'; // Check README for exact export
|
|
61
|
+
|
|
62
|
+
export const handle = sequence(authkitHandle, yourExistingHandle);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Check README for the exact export name and usage pattern.
|
|
66
|
+
|
|
67
|
+
## Step 5: Create Callback Route
|
|
68
|
+
|
|
69
|
+
Parse `WORKOS_REDIRECT_URI` to determine route path:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
URI path --> Route location
|
|
73
|
+
/callback --> src/routes/callback/+server.ts
|
|
74
|
+
/auth/callback --> src/routes/auth/callback/+server.ts
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Use the SDK's callback handler from the README. Do not write custom OAuth logic.
|
|
78
|
+
|
|
79
|
+
**Critical:** SvelteKit uses `+server.ts` for API routes, not `+page.server.ts`.
|
|
80
|
+
|
|
81
|
+
## Step 6: Layout Setup
|
|
82
|
+
|
|
83
|
+
Update `src/routes/+layout.server.ts` to load the auth session and pass it to all pages.
|
|
84
|
+
|
|
85
|
+
Check README for the exact pattern — typically a `load` function that returns the user session from locals.
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// src/routes/+layout.server.ts
|
|
89
|
+
import type { LayoutServerLoad } from './$types';
|
|
90
|
+
|
|
91
|
+
export const load: LayoutServerLoad = async (event) => {
|
|
92
|
+
// Check README for exact API — session is typically on event.locals
|
|
93
|
+
return {
|
|
94
|
+
user: event.locals.user, // or similar from README
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Step 7: UI Integration
|
|
100
|
+
|
|
101
|
+
Add auth UI to `src/routes/+page.svelte` using the session data from the layout.
|
|
102
|
+
|
|
103
|
+
- Show user info when authenticated
|
|
104
|
+
- Show sign-in link/button when not authenticated
|
|
105
|
+
- Add sign-out functionality
|
|
106
|
+
|
|
107
|
+
Check README for sign-in URL generation and sign-out patterns.
|
|
108
|
+
|
|
109
|
+
## Verification Checklist (ALL MUST PASS)
|
|
110
|
+
|
|
111
|
+
Run these commands to confirm integration. **Do not mark complete until all pass:**
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# 1. Check hooks.server.ts exists and has authkit
|
|
115
|
+
grep -i "workos\|authkit" src/hooks.server.ts || echo "FAIL: authkit missing from hooks.server.ts"
|
|
116
|
+
|
|
117
|
+
# 2. Check callback route exists
|
|
118
|
+
find src/routes -name "+server.ts" -path "*/callback/*"
|
|
119
|
+
|
|
120
|
+
# 3. Check layout loads auth session
|
|
121
|
+
grep -i "user\|auth\|session" src/routes/+layout.server.ts || echo "FAIL: auth session missing from layout"
|
|
122
|
+
|
|
123
|
+
# 4. Build succeeds
|
|
124
|
+
pnpm build || npm run build
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Error Recovery
|
|
128
|
+
|
|
129
|
+
### "Cannot find module '@workos-inc/authkit-sveltekit'"
|
|
130
|
+
|
|
131
|
+
- Check: SDK installed before writing imports
|
|
132
|
+
- Check: SDK package directory exists in node_modules
|
|
133
|
+
- Re-run install if missing
|
|
134
|
+
|
|
135
|
+
### hooks.server.ts not taking effect
|
|
136
|
+
|
|
137
|
+
- Check: File is at `src/hooks.server.ts`, not `src/hooks.ts` or elsewhere
|
|
138
|
+
- Check: Named export is `handle` (SvelteKit requirement)
|
|
139
|
+
- Check: If using `sequence()`, all handles are properly composed
|
|
140
|
+
|
|
141
|
+
### Callback route not found (404)
|
|
142
|
+
|
|
143
|
+
- Check: File uses `+server.ts` (not `+page.server.ts`)
|
|
144
|
+
- Check: Route path matches `WORKOS_REDIRECT_URI` path exactly
|
|
145
|
+
- Check: Exports `GET` handler (SvelteKit convention)
|
|
146
|
+
|
|
147
|
+
### "locals" type errors
|
|
148
|
+
|
|
149
|
+
- Check: App.Locals interface is augmented in `src/app.d.ts`
|
|
150
|
+
- Check README for TypeScript setup instructions
|
|
151
|
+
|
|
152
|
+
### Cookie password error
|
|
153
|
+
|
|
154
|
+
- Verify `WORKOS_COOKIE_PASSWORD` is 32+ characters
|
|
155
|
+
- Generate new: `openssl rand -base64 32`
|
|
156
|
+
|
|
157
|
+
### Auth state not available in pages
|
|
158
|
+
|
|
159
|
+
- Check: `+layout.server.ts` load function returns user data
|
|
160
|
+
- Check: Pages access data via `export let data` (Svelte 4) or `$page.data` (Svelte 5)
|