workos 0.4.5 → 0.5.1
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/lib/validation/validator.js +43 -13
- package/dist/lib/validation/validator.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-nextjs/SKILL.md +41 -11
- 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
|
@@ -0,0 +1,146 @@
|
|
|
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 } 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
|
+
export function getReactRouterVersionBucket(version) {
|
|
20
|
+
return getVersionBucket(version, 6);
|
|
21
|
+
}
|
|
22
|
+
async function hasReactRouterConfig({ installDir }) {
|
|
23
|
+
const configMatches = await fg('**/react-router.config.@(ts|js|tsx|jsx)', {
|
|
24
|
+
dot: true,
|
|
25
|
+
cwd: installDir,
|
|
26
|
+
ignore: IGNORE_PATTERNS,
|
|
27
|
+
});
|
|
28
|
+
return configMatches.length > 0;
|
|
29
|
+
}
|
|
30
|
+
async function hasCreateBrowserRouter({ installDir }) {
|
|
31
|
+
const sourceFiles = await fg('**/*.@(ts|tsx|js|jsx)', {
|
|
32
|
+
dot: true,
|
|
33
|
+
cwd: installDir,
|
|
34
|
+
ignore: IGNORE_PATTERNS,
|
|
35
|
+
});
|
|
36
|
+
for (const file of sourceFiles) {
|
|
37
|
+
try {
|
|
38
|
+
const filePath = path.join(installDir, file);
|
|
39
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
40
|
+
if (content.includes('createBrowserRouter')) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
async function hasDeclarativeRouter({ installDir }) {
|
|
51
|
+
const sourceFiles = await fg('**/*.@(ts|tsx|js|jsx)', {
|
|
52
|
+
dot: true,
|
|
53
|
+
cwd: installDir,
|
|
54
|
+
ignore: IGNORE_PATTERNS,
|
|
55
|
+
});
|
|
56
|
+
for (const file of sourceFiles) {
|
|
57
|
+
try {
|
|
58
|
+
const filePath = path.join(installDir, file);
|
|
59
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
60
|
+
if (content.includes('<BrowserRouter') ||
|
|
61
|
+
(content.includes('BrowserRouter') &&
|
|
62
|
+
(content.includes('from "react-router-dom"') || content.includes("from 'react-router-dom'")))) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
export async function getReactRouterMode(options) {
|
|
73
|
+
const { installDir } = options;
|
|
74
|
+
const packageJson = await getPackageDotJson(options);
|
|
75
|
+
const reactRouterVersion = getPackageVersion('react-router-dom', packageJson) || getPackageVersion('react-router', packageJson);
|
|
76
|
+
if (!reactRouterVersion) {
|
|
77
|
+
clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);
|
|
78
|
+
const result = await abortIfCancelled(clack.select({
|
|
79
|
+
message: 'What React Router version and mode are you using?',
|
|
80
|
+
options: [
|
|
81
|
+
{ label: 'React Router v6', value: ReactRouterMode.V6 },
|
|
82
|
+
{ label: 'React Router v7 - Framework mode', value: ReactRouterMode.V7_FRAMEWORK },
|
|
83
|
+
{ label: 'React Router v7 - Data mode', value: ReactRouterMode.V7_DATA },
|
|
84
|
+
{ label: 'React Router v7 - Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },
|
|
85
|
+
],
|
|
86
|
+
}), 'react-router');
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
const coercedVersion = semver.coerce(reactRouterVersion);
|
|
90
|
+
const majorVersion = coercedVersion ? major(coercedVersion) : null;
|
|
91
|
+
if (majorVersion === 6) {
|
|
92
|
+
clack.log.info('Detected React Router v6');
|
|
93
|
+
return ReactRouterMode.V6;
|
|
94
|
+
}
|
|
95
|
+
if (majorVersion === 7) {
|
|
96
|
+
const hasConfig = await hasReactRouterConfig({ installDir });
|
|
97
|
+
if (hasConfig) {
|
|
98
|
+
clack.log.info('Detected React Router v7 - Framework mode');
|
|
99
|
+
return ReactRouterMode.V7_FRAMEWORK;
|
|
100
|
+
}
|
|
101
|
+
const hasDataMode = await hasCreateBrowserRouter({ installDir });
|
|
102
|
+
if (hasDataMode) {
|
|
103
|
+
clack.log.info('Detected React Router v7 - Data mode');
|
|
104
|
+
return ReactRouterMode.V7_DATA;
|
|
105
|
+
}
|
|
106
|
+
const hasDeclarative = await hasDeclarativeRouter({ installDir });
|
|
107
|
+
if (hasDeclarative) {
|
|
108
|
+
clack.log.info('Detected React Router v7 - Declarative mode');
|
|
109
|
+
return ReactRouterMode.V7_DECLARATIVE;
|
|
110
|
+
}
|
|
111
|
+
clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);
|
|
112
|
+
const result = await abortIfCancelled(clack.select({
|
|
113
|
+
message: 'What React Router v7 mode are you using?',
|
|
114
|
+
options: [
|
|
115
|
+
{ label: 'Framework mode', value: ReactRouterMode.V7_FRAMEWORK },
|
|
116
|
+
{ label: 'Data mode', value: ReactRouterMode.V7_DATA },
|
|
117
|
+
{ label: 'Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },
|
|
118
|
+
],
|
|
119
|
+
}), 'react-router');
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);
|
|
123
|
+
const result = await abortIfCancelled(clack.select({
|
|
124
|
+
message: 'What React Router version and mode are you using?',
|
|
125
|
+
options: [
|
|
126
|
+
{ label: 'React Router v6', value: ReactRouterMode.V6 },
|
|
127
|
+
{ label: 'React Router v7 - Framework mode', value: ReactRouterMode.V7_FRAMEWORK },
|
|
128
|
+
{ label: 'React Router v7 - Data mode', value: ReactRouterMode.V7_DATA },
|
|
129
|
+
{ label: 'React Router v7 - Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },
|
|
130
|
+
],
|
|
131
|
+
}), 'react-router');
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
export function getReactRouterModeName(mode) {
|
|
135
|
+
switch (mode) {
|
|
136
|
+
case ReactRouterMode.V6:
|
|
137
|
+
return 'v6';
|
|
138
|
+
case ReactRouterMode.V7_FRAMEWORK:
|
|
139
|
+
return 'v7 Framework mode';
|
|
140
|
+
case ReactRouterMode.V7_DATA:
|
|
141
|
+
return 'v7 Data mode';
|
|
142
|
+
case ReactRouterMode.V7_DECLARATIVE:
|
|
143
|
+
return 'v7 Declarative mode';
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/integrations/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 } 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',\n V7_FRAMEWORK = 'v7-framework',\n V7_DATA = 'v7-data',\n V7_DECLARATIVE = 'v7-declarative',\n}\n\nexport function getReactRouterVersionBucket(version: string | undefined): string {\n return getVersionBucket(version, 6);\n}\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 return configMatches.length > 0;\n}\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 if (content.includes('createBrowserRouter')) {\n return true;\n }\n } catch {\n continue;\n }\n }\n return false;\n}\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 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 continue;\n }\n }\n return false;\n}\n\nexport async function getReactRouterMode(options: InstallerOptions): Promise<ReactRouterMode> {\n const { installDir } = options;\n\n const packageJson = await getPackageDotJson(options);\n const reactRouterVersion =\n getPackageVersion('react-router-dom', packageJson) || getPackageVersion('react-router', packageJson);\n\n if (!reactRouterVersion) {\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 { label: 'React Router v6', value: ReactRouterMode.V6 },\n { label: 'React Router v7 - Framework mode', value: ReactRouterMode.V7_FRAMEWORK },\n { label: 'React Router v7 - Data mode', value: ReactRouterMode.V7_DATA },\n { label: 'React Router v7 - Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },\n ],\n }),\n 'react-router',\n );\n return result;\n }\n\n const coercedVersion = semver.coerce(reactRouterVersion);\n const majorVersion = coercedVersion ? major(coercedVersion) : null;\n\n if (majorVersion === 6) {\n clack.log.info('Detected React Router v6');\n return ReactRouterMode.V6;\n }\n\n if (majorVersion === 7) {\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 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 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 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 { label: 'Framework mode', value: ReactRouterMode.V7_FRAMEWORK },\n { label: 'Data mode', value: ReactRouterMode.V7_DATA },\n { label: 'Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },\n ],\n }),\n 'react-router',\n );\n return result;\n }\n\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 { label: 'React Router v6', value: ReactRouterMode.V6 },\n { label: 'React Router v7 - Framework mode', value: ReactRouterMode.V7_FRAMEWORK },\n { label: 'React Router v7 - Data mode', value: ReactRouterMode.V7_DATA },\n { label: 'React Router v7 - Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },\n ],\n }),\n 'react-router',\n );\n return result;\n}\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"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FrameworkConfig } from '../../lib/framework-config.js';
|
|
2
|
+
import type { InstallerOptions } from '../../utils/types.js';
|
|
3
|
+
export declare const config: FrameworkConfig;
|
|
4
|
+
/**
|
|
5
|
+
* Custom run function for Ruby/Rails — bypasses runAgentInstaller
|
|
6
|
+
* since that assumes a JS project (package.json, node_modules, .env.local).
|
|
7
|
+
*/
|
|
8
|
+
export declare function run(options: InstallerOptions): Promise<string>;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { enableDebugLogs } from '../../utils/debug.js';
|
|
2
|
+
import { SPINNER_MESSAGE } from '../../lib/framework-config.js';
|
|
3
|
+
import { analytics } from '../../utils/analytics.js';
|
|
4
|
+
import { INSTALLER_INTERACTION_EVENT_NAME } from '../../lib/constants.js';
|
|
5
|
+
import { initializeAgent, runAgent } from '../../lib/agent-interface.js';
|
|
6
|
+
import { getOrAskForWorkOSCredentials } from '../../utils/clack-utils.js';
|
|
7
|
+
import { autoConfigureWorkOSEnvironment } from '../../lib/workos-management.js';
|
|
8
|
+
export const config = {
|
|
9
|
+
metadata: {
|
|
10
|
+
name: 'Ruby (Rails)',
|
|
11
|
+
integration: 'ruby',
|
|
12
|
+
docsUrl: 'https://workos.com/docs/authkit/vanilla/ruby',
|
|
13
|
+
skillName: 'workos-ruby',
|
|
14
|
+
language: 'ruby',
|
|
15
|
+
stability: 'experimental',
|
|
16
|
+
priority: 55,
|
|
17
|
+
packageManager: 'bundle',
|
|
18
|
+
manifestFile: 'Gemfile',
|
|
19
|
+
},
|
|
20
|
+
detection: {
|
|
21
|
+
packageName: 'rails',
|
|
22
|
+
packageDisplayName: 'Rails',
|
|
23
|
+
getVersion: () => undefined,
|
|
24
|
+
},
|
|
25
|
+
environment: {
|
|
26
|
+
uploadToHosting: false,
|
|
27
|
+
requiresApiKey: true,
|
|
28
|
+
getEnvVars: (apiKey, clientId) => ({
|
|
29
|
+
WORKOS_API_KEY: apiKey,
|
|
30
|
+
WORKOS_CLIENT_ID: clientId,
|
|
31
|
+
}),
|
|
32
|
+
},
|
|
33
|
+
analytics: {
|
|
34
|
+
getTags: () => ({}),
|
|
35
|
+
},
|
|
36
|
+
prompts: {},
|
|
37
|
+
ui: {
|
|
38
|
+
successMessage: 'WorkOS AuthKit integration complete',
|
|
39
|
+
getOutroChanges: () => [
|
|
40
|
+
'Analyzed your Rails project structure',
|
|
41
|
+
'Installed and configured the WorkOS Ruby SDK',
|
|
42
|
+
'Created authentication controller with login, callback, and logout',
|
|
43
|
+
'Added authentication routes to config/routes.rb',
|
|
44
|
+
],
|
|
45
|
+
getOutroNextSteps: () => [
|
|
46
|
+
'Start your Rails server with `rails server` to test authentication',
|
|
47
|
+
'Visit the WorkOS Dashboard to manage users and settings',
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Custom run function for Ruby/Rails — bypasses runAgentInstaller
|
|
53
|
+
* since that assumes a JS project (package.json, node_modules, .env.local).
|
|
54
|
+
*/
|
|
55
|
+
export async function run(options) {
|
|
56
|
+
if (options.debug) {
|
|
57
|
+
enableDebugLogs();
|
|
58
|
+
}
|
|
59
|
+
options.emitter?.emit('status', {
|
|
60
|
+
message: `Setting up WorkOS AuthKit for ${config.metadata.name}`,
|
|
61
|
+
});
|
|
62
|
+
analytics.capture(INSTALLER_INTERACTION_EVENT_NAME, {
|
|
63
|
+
action: 'started agent integration',
|
|
64
|
+
integration: config.metadata.integration,
|
|
65
|
+
});
|
|
66
|
+
// Get WorkOS credentials
|
|
67
|
+
const { apiKey, clientId } = await getOrAskForWorkOSCredentials(options, config.environment.requiresApiKey);
|
|
68
|
+
// Auto-configure WorkOS environment (redirect URI, CORS, homepage) if not already done
|
|
69
|
+
const callerHandledConfig = Boolean(options.apiKey || options.clientId);
|
|
70
|
+
if (!callerHandledConfig && apiKey) {
|
|
71
|
+
const port = 3000; // Rails default
|
|
72
|
+
await autoConfigureWorkOSEnvironment(apiKey, config.metadata.integration, port, {
|
|
73
|
+
homepageUrl: options.homepageUrl,
|
|
74
|
+
redirectUri: options.redirectUri,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
// Build prompt for the agent
|
|
78
|
+
const redirectUri = options.redirectUri || 'http://localhost:3000/auth/callback';
|
|
79
|
+
const prompt = `You are integrating WorkOS AuthKit into this Ruby on Rails application.
|
|
80
|
+
|
|
81
|
+
## Project Context
|
|
82
|
+
|
|
83
|
+
- Framework: Ruby (Rails)
|
|
84
|
+
- Language: Ruby
|
|
85
|
+
|
|
86
|
+
## Environment
|
|
87
|
+
|
|
88
|
+
The following environment variables should be configured in a .env file:
|
|
89
|
+
- WORKOS_API_KEY=${apiKey ? '(provided)' : '(not set)'}
|
|
90
|
+
- WORKOS_CLIENT_ID=${clientId || '(not set)'}
|
|
91
|
+
- WORKOS_REDIRECT_URI=${redirectUri}
|
|
92
|
+
|
|
93
|
+
## Your Task
|
|
94
|
+
|
|
95
|
+
Use the \`workos-ruby\` skill to integrate WorkOS AuthKit into this application.
|
|
96
|
+
|
|
97
|
+
The skill contains step-by-step instructions including:
|
|
98
|
+
1. Fetching the SDK documentation
|
|
99
|
+
2. Installing the WorkOS Ruby gem
|
|
100
|
+
3. Creating the WorkOS initializer
|
|
101
|
+
4. Creating the AuthController with login, callback, and logout
|
|
102
|
+
5. Adding authentication routes
|
|
103
|
+
|
|
104
|
+
Report your progress using [STATUS] prefixes.
|
|
105
|
+
|
|
106
|
+
Begin by invoking the workos-ruby skill.`;
|
|
107
|
+
// Initialize and run agent
|
|
108
|
+
const agent = await initializeAgent({
|
|
109
|
+
workingDirectory: options.installDir,
|
|
110
|
+
workOSApiKey: apiKey,
|
|
111
|
+
workOSApiHost: 'https://api.workos.com',
|
|
112
|
+
}, options);
|
|
113
|
+
const agentResult = await runAgent(agent, prompt, options, {
|
|
114
|
+
spinnerMessage: SPINNER_MESSAGE,
|
|
115
|
+
successMessage: config.ui.successMessage,
|
|
116
|
+
errorMessage: 'Integration failed',
|
|
117
|
+
}, options.emitter);
|
|
118
|
+
if (agentResult.error) {
|
|
119
|
+
await analytics.shutdown('error');
|
|
120
|
+
const message = agentResult.errorMessage || agentResult.error;
|
|
121
|
+
throw new Error(`Agent SDK error: ${message}`);
|
|
122
|
+
}
|
|
123
|
+
// Build completion summary
|
|
124
|
+
const changes = config.ui.getOutroChanges({});
|
|
125
|
+
const nextSteps = config.ui.getOutroNextSteps({});
|
|
126
|
+
const lines = [
|
|
127
|
+
'Successfully installed WorkOS AuthKit!',
|
|
128
|
+
'',
|
|
129
|
+
'What the agent did:',
|
|
130
|
+
...changes.map((c) => `• ${c}`),
|
|
131
|
+
'',
|
|
132
|
+
'Next steps:',
|
|
133
|
+
...nextSteps.map((s) => `• ${s}`),
|
|
134
|
+
'',
|
|
135
|
+
`Learn more: ${config.metadata.docsUrl}`,
|
|
136
|
+
'',
|
|
137
|
+
'Note: This installer uses an LLM agent to analyze and modify your project. Please review the changes made.',
|
|
138
|
+
];
|
|
139
|
+
await analytics.shutdown('success');
|
|
140
|
+
return lines.join('\n');
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/ruby/index.ts"],"names":[],"mappings":"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","sourcesContent":["/* Ruby/Rails integration — auto-discovered by registry */\nimport type { FrameworkConfig } from '../../lib/framework-config.js';\nimport type { InstallerOptions } from '../../utils/types.js';\nimport { enableDebugLogs } from '../../utils/debug.js';\nimport { SPINNER_MESSAGE } from '../../lib/framework-config.js';\nimport { analytics } from '../../utils/analytics.js';\nimport { INSTALLER_INTERACTION_EVENT_NAME } from '../../lib/constants.js';\nimport { initializeAgent, runAgent } from '../../lib/agent-interface.js';\nimport { getOrAskForWorkOSCredentials } from '../../utils/clack-utils.js';\nimport { autoConfigureWorkOSEnvironment } from '../../lib/workos-management.js';\n\nexport const config: FrameworkConfig = {\n metadata: {\n name: 'Ruby (Rails)',\n integration: 'ruby',\n docsUrl: 'https://workos.com/docs/authkit/vanilla/ruby',\n skillName: 'workos-ruby',\n language: 'ruby',\n stability: 'experimental',\n priority: 55,\n packageManager: 'bundle',\n manifestFile: 'Gemfile',\n },\n\n detection: {\n packageName: 'rails',\n packageDisplayName: 'Rails',\n getVersion: () => undefined,\n },\n\n environment: {\n uploadToHosting: false,\n requiresApiKey: true,\n getEnvVars: (apiKey: string, clientId: string) => ({\n WORKOS_API_KEY: apiKey,\n WORKOS_CLIENT_ID: clientId,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {},\n\n ui: {\n successMessage: 'WorkOS AuthKit integration complete',\n getOutroChanges: () => [\n 'Analyzed your Rails project structure',\n 'Installed and configured the WorkOS Ruby SDK',\n 'Created authentication controller with login, callback, and logout',\n 'Added authentication routes to config/routes.rb',\n ],\n getOutroNextSteps: () => [\n 'Start your Rails server with `rails server` to test authentication',\n 'Visit the WorkOS Dashboard to manage users and settings',\n ],\n },\n};\n\n/**\n * Custom run function for Ruby/Rails — bypasses runAgentInstaller\n * since that assumes a JS project (package.json, node_modules, .env.local).\n */\nexport async function run(options: InstallerOptions): Promise<string> {\n if (options.debug) {\n enableDebugLogs();\n }\n\n options.emitter?.emit('status', {\n message: `Setting up WorkOS AuthKit for ${config.metadata.name}`,\n });\n\n analytics.capture(INSTALLER_INTERACTION_EVENT_NAME, {\n action: 'started agent integration',\n integration: config.metadata.integration,\n });\n\n // Get WorkOS credentials\n const { apiKey, clientId } = await getOrAskForWorkOSCredentials(options, config.environment.requiresApiKey);\n\n // Auto-configure WorkOS environment (redirect URI, CORS, homepage) if not already done\n const callerHandledConfig = Boolean(options.apiKey || options.clientId);\n if (!callerHandledConfig && apiKey) {\n const port = 3000; // Rails default\n await autoConfigureWorkOSEnvironment(apiKey, config.metadata.integration, port, {\n homepageUrl: options.homepageUrl,\n redirectUri: options.redirectUri,\n });\n }\n\n // Build prompt for the agent\n const redirectUri = options.redirectUri || 'http://localhost:3000/auth/callback';\n const prompt = `You are integrating WorkOS AuthKit into this Ruby on Rails application.\n\n## Project Context\n\n- Framework: Ruby (Rails)\n- Language: Ruby\n\n## Environment\n\nThe following environment variables should be configured in a .env file:\n- WORKOS_API_KEY=${apiKey ? '(provided)' : '(not set)'}\n- WORKOS_CLIENT_ID=${clientId || '(not set)'}\n- WORKOS_REDIRECT_URI=${redirectUri}\n\n## Your Task\n\nUse the \\`workos-ruby\\` skill to integrate WorkOS AuthKit into this application.\n\nThe skill contains step-by-step instructions including:\n1. Fetching the SDK documentation\n2. Installing the WorkOS Ruby gem\n3. Creating the WorkOS initializer\n4. Creating the AuthController with login, callback, and logout\n5. Adding authentication routes\n\nReport your progress using [STATUS] prefixes.\n\nBegin by invoking the workos-ruby skill.`;\n\n // Initialize and run agent\n const agent = await initializeAgent(\n {\n workingDirectory: options.installDir,\n workOSApiKey: apiKey,\n workOSApiHost: 'https://api.workos.com',\n },\n options,\n );\n\n const agentResult = await runAgent(\n agent,\n prompt,\n options,\n {\n spinnerMessage: SPINNER_MESSAGE,\n successMessage: config.ui.successMessage,\n errorMessage: 'Integration failed',\n },\n options.emitter,\n );\n\n if (agentResult.error) {\n await analytics.shutdown('error');\n const message = agentResult.errorMessage || agentResult.error;\n throw new Error(`Agent SDK error: ${message}`);\n }\n\n // Build completion summary\n const changes = config.ui.getOutroChanges({});\n const nextSteps = config.ui.getOutroNextSteps({});\n\n const lines: string[] = [\n 'Successfully installed WorkOS AuthKit!',\n '',\n 'What the agent did:',\n ...changes.map((c) => `• ${c}`),\n '',\n 'Next steps:',\n ...nextSteps.map((s) => `• ${s}`),\n '',\n `Learn more: ${config.metadata.docsUrl}`,\n '',\n 'Note: This installer uses an LLM agent to analyze and modify your project. Please review the changes made.',\n ];\n\n await analytics.shutdown('success');\n\n return lines.join('\\n');\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { enableDebugLogs } from '../../utils/debug.js';
|
|
2
|
+
import { getPackageVersion } from '../../utils/package-json.js';
|
|
3
|
+
export const config = {
|
|
4
|
+
metadata: {
|
|
5
|
+
name: 'SvelteKit',
|
|
6
|
+
integration: 'sveltekit',
|
|
7
|
+
docsUrl: 'https://github.com/workos/authkit-sveltekit',
|
|
8
|
+
skillName: 'workos-authkit-sveltekit',
|
|
9
|
+
language: 'javascript',
|
|
10
|
+
stability: 'experimental',
|
|
11
|
+
priority: 85,
|
|
12
|
+
},
|
|
13
|
+
detection: {
|
|
14
|
+
packageName: '@sveltejs/kit',
|
|
15
|
+
packageDisplayName: 'SvelteKit',
|
|
16
|
+
getVersion: (packageJson) => getPackageVersion('@sveltejs/kit', packageJson),
|
|
17
|
+
},
|
|
18
|
+
environment: {
|
|
19
|
+
uploadToHosting: true,
|
|
20
|
+
requiresApiKey: true,
|
|
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 SvelteKit 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 run(options) {
|
|
44
|
+
if (options.debug) {
|
|
45
|
+
enableDebugLogs();
|
|
46
|
+
}
|
|
47
|
+
const { runAgentInstaller } = await import('../../lib/agent-runner.js');
|
|
48
|
+
return runAgentInstaller(config, options);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/sveltekit/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,QAAQ,EAAE;QACR,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,6CAA6C;QACtD,SAAS,EAAE,0BAA0B;QACrC,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,cAAc;QACzB,QAAQ,EAAE,EAAE;KACb;IAED,SAAS,EAAE;QACT,WAAW,EAAE,eAAe;QAC5B,kBAAkB,EAAE,WAAW;QAC/B,UAAU,EAAE,CAAC,WAAgB,EAAE,EAAE,CAAC,iBAAiB,CAAC,eAAe,EAAE,WAAW,CAAC;KAClF;IAED,WAAW,EAAE;QACX,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,CAAC,MAAc,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC;YACjD,cAAc,EAAE,MAAM;YACtB,gBAAgB,EAAE,QAAQ;SAC3B,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE,EAAE;IAEX,EAAE,EAAE;QACF,cAAc,EAAE,qCAAqC;QACrD,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,2CAA2C;YAC3C,uCAAuC;YACvC,iDAAiD;SAClD;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,sDAAsD;YACtD,yDAAyD;SAC1D;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAyB;IACjD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,eAAe,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACxE,OAAO,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["/* SvelteKit integration — auto-discovered by registry */\nimport type { FrameworkConfig } from '../../lib/framework-config.js';\nimport type { InstallerOptions } from '../../utils/types.js';\nimport { enableDebugLogs } from '../../utils/debug.js';\nimport { getPackageVersion } from '../../utils/package-json.js';\n\nexport const config: FrameworkConfig = {\n metadata: {\n name: 'SvelteKit',\n integration: 'sveltekit',\n docsUrl: 'https://github.com/workos/authkit-sveltekit',\n skillName: 'workos-authkit-sveltekit',\n language: 'javascript',\n stability: 'experimental',\n priority: 85,\n },\n\n detection: {\n packageName: '@sveltejs/kit',\n packageDisplayName: 'SvelteKit',\n getVersion: (packageJson: any) => getPackageVersion('@sveltejs/kit', packageJson),\n },\n\n environment: {\n uploadToHosting: true,\n requiresApiKey: true,\n getEnvVars: (apiKey: string, clientId: string) => ({\n WORKOS_API_KEY: apiKey,\n WORKOS_CLIENT_ID: clientId,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {},\n\n ui: {\n successMessage: 'WorkOS AuthKit integration complete',\n getOutroChanges: () => [\n 'Analyzed your SvelteKit project structure',\n 'Created and configured WorkOS AuthKit',\n 'Integrated authentication into your application',\n ],\n getOutroNextSteps: () => [\n 'Start your development server to test authentication',\n 'Visit the WorkOS Dashboard to manage users and settings',\n ],\n },\n};\n\nexport async function run(options: InstallerOptions): Promise<string> {\n if (options.debug) {\n enableDebugLogs();\n }\n\n const { runAgentInstaller } = await import('../../lib/agent-runner.js');\n return runAgentInstaller(config, options);\n}\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { enableDebugLogs } from '../../utils/debug.js';
|
|
2
|
+
import { getPackageVersion } from '../../utils/package-json.js';
|
|
3
|
+
export const config = {
|
|
4
|
+
metadata: {
|
|
5
|
+
name: 'TanStack Start',
|
|
6
|
+
integration: 'tanstack-start',
|
|
7
|
+
docsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',
|
|
8
|
+
unsupportedVersionDocsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',
|
|
9
|
+
skillName: 'workos-authkit-tanstack-start',
|
|
10
|
+
language: 'javascript',
|
|
11
|
+
stability: 'stable',
|
|
12
|
+
priority: 90,
|
|
13
|
+
},
|
|
14
|
+
detection: {
|
|
15
|
+
packageName: '@tanstack/react-start',
|
|
16
|
+
packageDisplayName: 'TanStack Start',
|
|
17
|
+
getVersion: (packageJson) => getPackageVersion('@tanstack/react-start', packageJson),
|
|
18
|
+
},
|
|
19
|
+
environment: {
|
|
20
|
+
uploadToHosting: false,
|
|
21
|
+
requiresApiKey: true,
|
|
22
|
+
getEnvVars: (apiKey, clientId) => ({
|
|
23
|
+
WORKOS_API_KEY: apiKey,
|
|
24
|
+
WORKOS_CLIENT_ID: clientId,
|
|
25
|
+
}),
|
|
26
|
+
},
|
|
27
|
+
analytics: {
|
|
28
|
+
getTags: () => ({}),
|
|
29
|
+
},
|
|
30
|
+
prompts: {},
|
|
31
|
+
ui: {
|
|
32
|
+
successMessage: 'WorkOS AuthKit integration complete',
|
|
33
|
+
getOutroChanges: () => [
|
|
34
|
+
'Analyzed your TanStack Start project structure',
|
|
35
|
+
'Created and configured WorkOS AuthKit',
|
|
36
|
+
'Integrated authentication into your application',
|
|
37
|
+
],
|
|
38
|
+
getOutroNextSteps: () => [
|
|
39
|
+
'Start your development server to test authentication',
|
|
40
|
+
'Visit the WorkOS Dashboard to manage users and settings',
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
export async function run(options) {
|
|
45
|
+
if (options.debug) {
|
|
46
|
+
enableDebugLogs();
|
|
47
|
+
}
|
|
48
|
+
const { runAgentInstaller } = await import('../../lib/agent-runner.js');
|
|
49
|
+
return runAgentInstaller(config, options);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/tanstack-start/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,gBAAgB;QAC7B,OAAO,EAAE,gEAAgE;QACzE,yBAAyB,EAAE,gEAAgE;QAC3F,SAAS,EAAE,+BAA+B;QAC1C,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,EAAE;KACb;IAED,SAAS,EAAE;QACT,WAAW,EAAE,uBAAuB;QACpC,kBAAkB,EAAE,gBAAgB;QACpC,UAAU,EAAE,CAAC,WAAgB,EAAE,EAAE,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,WAAW,CAAC;KAC1F;IAED,WAAW,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,CAAC,MAAc,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC;YACjD,cAAc,EAAE,MAAM;YACtB,gBAAgB,EAAE,QAAQ;SAC3B,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE,EAAE;IAEX,EAAE,EAAE;QACF,cAAc,EAAE,qCAAqC;QACrD,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,gDAAgD;YAChD,uCAAuC;YACvC,iDAAiD;SAClD;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,sDAAsD;YACtD,yDAAyD;SAC1D;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAyB;IACjD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,eAAe,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACxE,OAAO,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["/* TanStack Start integration — auto-discovered by registry */\nimport type { FrameworkConfig } from '../../lib/framework-config.js';\nimport type { InstallerOptions } from '../../utils/types.js';\nimport { enableDebugLogs } from '../../utils/debug.js';\nimport { getPackageVersion } from '../../utils/package-json.js';\n\nexport const config: FrameworkConfig = {\n metadata: {\n name: 'TanStack Start',\n integration: 'tanstack-start',\n docsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',\n unsupportedVersionDocsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',\n skillName: 'workos-authkit-tanstack-start',\n language: 'javascript',\n stability: 'stable',\n priority: 90,\n },\n\n detection: {\n packageName: '@tanstack/react-start',\n packageDisplayName: 'TanStack Start',\n getVersion: (packageJson: any) => getPackageVersion('@tanstack/react-start', packageJson),\n },\n\n environment: {\n uploadToHosting: false,\n requiresApiKey: true,\n getEnvVars: (apiKey: string, clientId: string) => ({\n WORKOS_API_KEY: apiKey,\n WORKOS_CLIENT_ID: clientId,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {},\n\n ui: {\n successMessage: 'WorkOS AuthKit integration complete',\n getOutroChanges: () => [\n 'Analyzed your TanStack Start project structure',\n 'Created and configured WorkOS AuthKit',\n 'Integrated authentication into your application',\n ],\n getOutroNextSteps: () => [\n 'Start your development server to test authentication',\n 'Visit the WorkOS Dashboard to manage users and settings',\n ],\n },\n};\n\nexport async function run(options: InstallerOptions): Promise<string> {\n if (options.debug) {\n enableDebugLogs();\n }\n\n const { runAgentInstaller } = await import('../../lib/agent-runner.js');\n return runAgentInstaller(config, options);\n}\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { enableDebugLogs } from '../../utils/debug.js';
|
|
2
|
+
export const config = {
|
|
3
|
+
metadata: {
|
|
4
|
+
name: 'Vanilla JavaScript',
|
|
5
|
+
integration: 'vanilla-js',
|
|
6
|
+
docsUrl: 'https://workos.com/docs/user-management/authkit/javascript',
|
|
7
|
+
unsupportedVersionDocsUrl: 'https://workos.com/docs/user-management/authkit/javascript',
|
|
8
|
+
skillName: 'workos-authkit-vanilla-js',
|
|
9
|
+
language: 'javascript',
|
|
10
|
+
stability: 'stable',
|
|
11
|
+
priority: 10, // Lowest — fallback for any JS project
|
|
12
|
+
},
|
|
13
|
+
detection: {
|
|
14
|
+
packageName: 'workos',
|
|
15
|
+
packageDisplayName: 'Vanilla JavaScript',
|
|
16
|
+
getVersion: () => undefined,
|
|
17
|
+
},
|
|
18
|
+
environment: {
|
|
19
|
+
uploadToHosting: false,
|
|
20
|
+
requiresApiKey: false,
|
|
21
|
+
getEnvVars: (_apiKey, clientId) => ({
|
|
22
|
+
WORKOS_CLIENT_ID: clientId,
|
|
23
|
+
}),
|
|
24
|
+
},
|
|
25
|
+
analytics: {
|
|
26
|
+
getTags: () => ({}),
|
|
27
|
+
},
|
|
28
|
+
prompts: {},
|
|
29
|
+
ui: {
|
|
30
|
+
successMessage: 'WorkOS AuthKit integration complete',
|
|
31
|
+
getOutroChanges: () => [
|
|
32
|
+
'Created WorkOS AuthKit integration',
|
|
33
|
+
'Added authentication to your JavaScript application',
|
|
34
|
+
'Set up login/logout functionality',
|
|
35
|
+
],
|
|
36
|
+
getOutroNextSteps: () => [
|
|
37
|
+
'Start your development server to test authentication',
|
|
38
|
+
'Visit the WorkOS Dashboard to manage users and settings',
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
export async function run(options) {
|
|
43
|
+
if (options.debug) {
|
|
44
|
+
enableDebugLogs();
|
|
45
|
+
}
|
|
46
|
+
const { runAgentInstaller } = await import('../../lib/agent-runner.js');
|
|
47
|
+
return runAgentInstaller(config, options);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/vanilla-js/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,QAAQ,EAAE;QACR,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,4DAA4D;QACrE,yBAAyB,EAAE,4DAA4D;QACvF,SAAS,EAAE,2BAA2B;QACtC,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,EAAE,EAAE,uCAAuC;KACtD;IAED,SAAS,EAAE;QACT,WAAW,EAAE,QAAQ;QACrB,kBAAkB,EAAE,oBAAoB;QACxC,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;KAC5B;IAED,WAAW,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,KAAK;QACrB,UAAU,EAAE,CAAC,OAAe,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC;YAClD,gBAAgB,EAAE,QAAQ;SAC3B,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE,EAAE;IAEX,EAAE,EAAE;QACF,cAAc,EAAE,qCAAqC;QACrD,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,oCAAoC;YACpC,qDAAqD;YACrD,mCAAmC;SACpC;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,sDAAsD;YACtD,yDAAyD;SAC1D;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAyB;IACjD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,eAAe,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACxE,OAAO,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["/* Vanilla JavaScript integration — auto-discovered by registry */\nimport type { FrameworkConfig } from '../../lib/framework-config.js';\nimport type { InstallerOptions } from '../../utils/types.js';\nimport { enableDebugLogs } from '../../utils/debug.js';\n\nexport const config: FrameworkConfig = {\n metadata: {\n name: 'Vanilla JavaScript',\n integration: 'vanilla-js',\n docsUrl: 'https://workos.com/docs/user-management/authkit/javascript',\n unsupportedVersionDocsUrl: 'https://workos.com/docs/user-management/authkit/javascript',\n skillName: 'workos-authkit-vanilla-js',\n language: 'javascript',\n stability: 'stable',\n priority: 10, // Lowest — fallback for any JS project\n },\n\n detection: {\n packageName: 'workos',\n packageDisplayName: 'Vanilla JavaScript',\n getVersion: () => undefined,\n },\n\n environment: {\n uploadToHosting: false,\n requiresApiKey: false,\n getEnvVars: (_apiKey: string, clientId: string) => ({\n WORKOS_CLIENT_ID: clientId,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {},\n\n ui: {\n successMessage: 'WorkOS AuthKit integration complete',\n getOutroChanges: () => [\n 'Created WorkOS AuthKit integration',\n 'Added authentication to your JavaScript application',\n 'Set up login/logout functionality',\n ],\n getOutroNextSteps: () => [\n 'Start your development server to test authentication',\n 'Visit the WorkOS Dashboard to manage users and settings',\n ],\n },\n};\n\nexport async function run(options: InstallerOptions): Promise<string> {\n if (options.debug) {\n enableDebugLogs();\n }\n\n const { runAgentInstaller } = await import('../../lib/agent-runner.js');\n return runAgentInstaller(config, options);\n}\n"]}
|
|
@@ -53,8 +53,48 @@ export var AgentErrorType;
|
|
|
53
53
|
})(AgentErrorType || (AgentErrorType = {}));
|
|
54
54
|
/**
|
|
55
55
|
* Package managers that can be used to run commands.
|
|
56
|
+
* Includes JS and non-JS ecosystem package managers for multi-SDK support.
|
|
56
57
|
*/
|
|
57
|
-
const PACKAGE_MANAGERS = [
|
|
58
|
+
const PACKAGE_MANAGERS = [
|
|
59
|
+
// JavaScript
|
|
60
|
+
'npm',
|
|
61
|
+
'pnpm',
|
|
62
|
+
'yarn',
|
|
63
|
+
'bun',
|
|
64
|
+
'npx',
|
|
65
|
+
'pnpx',
|
|
66
|
+
'bunx',
|
|
67
|
+
// Python
|
|
68
|
+
'pip',
|
|
69
|
+
'pip3',
|
|
70
|
+
'poetry',
|
|
71
|
+
'uv',
|
|
72
|
+
'pipx',
|
|
73
|
+
'python',
|
|
74
|
+
'python3',
|
|
75
|
+
// Ruby
|
|
76
|
+
'gem',
|
|
77
|
+
'bundle',
|
|
78
|
+
'bundler',
|
|
79
|
+
'ruby',
|
|
80
|
+
// PHP
|
|
81
|
+
'composer',
|
|
82
|
+
'php',
|
|
83
|
+
// Go
|
|
84
|
+
'go',
|
|
85
|
+
// .NET
|
|
86
|
+
'dotnet',
|
|
87
|
+
'nuget',
|
|
88
|
+
// Elixir
|
|
89
|
+
'mix',
|
|
90
|
+
'hex',
|
|
91
|
+
'elixir',
|
|
92
|
+
// Kotlin/Java
|
|
93
|
+
'gradle',
|
|
94
|
+
'gradlew',
|
|
95
|
+
'./gradlew',
|
|
96
|
+
'mvn',
|
|
97
|
+
];
|
|
58
98
|
/**
|
|
59
99
|
* Safe scripts/commands that can be run with any package manager.
|
|
60
100
|
* Uses startsWith matching, so 'build' matches 'build', 'build:prod', etc.
|
|
@@ -76,6 +116,31 @@ const SAFE_SCRIPTS = [
|
|
|
76
116
|
// Linting/formatting script names (actual tools are in LINTING_TOOLS)
|
|
77
117
|
'lint',
|
|
78
118
|
'format',
|
|
119
|
+
// Common cross-language commands
|
|
120
|
+
'check',
|
|
121
|
+
'test',
|
|
122
|
+
'run',
|
|
123
|
+
'serve',
|
|
124
|
+
'dev',
|
|
125
|
+
'start',
|
|
126
|
+
'compile',
|
|
127
|
+
'vet',
|
|
128
|
+
// Python-specific
|
|
129
|
+
'manage.py',
|
|
130
|
+
'pytest',
|
|
131
|
+
// Ruby-specific
|
|
132
|
+
'rspec',
|
|
133
|
+
'rake',
|
|
134
|
+
'routes',
|
|
135
|
+
// PHP-specific
|
|
136
|
+
'artisan',
|
|
137
|
+
'phpunit',
|
|
138
|
+
// Elixir-specific
|
|
139
|
+
'deps.get',
|
|
140
|
+
'credo',
|
|
141
|
+
'dialyzer',
|
|
142
|
+
// .NET-specific
|
|
143
|
+
'restore',
|
|
79
144
|
];
|
|
80
145
|
/**
|
|
81
146
|
* Dangerous shell operators that could allow command injection.
|