@decohere/create 0.0.1-dev.20 → 0.0.1-dev.20261105.110

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.
Files changed (94) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +255 -0
  3. package/es6/src/cli.js +1 -34
  4. package/es6/src/index.js +2 -0
  5. package/es6/src/resolve-launch.js +87 -0
  6. package/es6/src/runner.js +67 -24
  7. package/es6/src/version.js +14 -6
  8. package/pack-builder-tgz.mjs +177 -0
  9. package/package.json +23 -11
  10. package/types/src/index.d.ts +3 -0
  11. package/types/src/resolve-launch.d.ts +20 -0
  12. package/types/src/runner.d.ts +3 -11
  13. package/types/src/version.d.ts +1 -1
  14. package/commonjs/src/cli.js +0 -40
  15. package/commonjs/src/domain/prompt.js +0 -55
  16. package/commonjs/src/models/compose.model.js +0 -82
  17. package/commonjs/src/models/config-yaml.model.js +0 -34
  18. package/commonjs/src/models/const.js +0 -29
  19. package/commonjs/src/models/container-image.model.js +0 -88
  20. package/commonjs/src/models/dev-container.model.js +0 -73
  21. package/commonjs/src/models/env-file.model.js +0 -33
  22. package/commonjs/src/models/gitignore.model.js +0 -32
  23. package/commonjs/src/models/launch-json.model.js +0 -52
  24. package/commonjs/src/models/package-json.model.js +0 -64
  25. package/commonjs/src/models/project.model.js +0 -126
  26. package/commonjs/src/models/source-file.js +0 -6
  27. package/commonjs/src/models/tsconfig.model.js +0 -34
  28. package/commonjs/src/models/vscode-settings.model.js +0 -31
  29. package/commonjs/src/runner.js +0 -56
  30. package/commonjs/src/services/scaffold.service.js +0 -62
  31. package/commonjs/src/version.js +0 -32
  32. package/commonjs/src/webapi/create-api.js +0 -169
  33. package/commonjs/src/webapi/features/auth.feature.js +0 -166
  34. package/commonjs/src/webapi/features/auth0-cli.js +0 -151
  35. package/commonjs/src/webapi/features/database.feature.js +0 -151
  36. package/commonjs/src/webapi/features/finalize.feature.js +0 -51
  37. package/commonjs/src/webapi/features/postman.feature.js +0 -309
  38. package/commonjs/src/webapi/models/api-package-json.model.js +0 -57
  39. package/commonjs/src/webapi/models/auth-config.model.js +0 -23
  40. package/commonjs/src/webapi/models/controller-source-file.model.js +0 -180
  41. package/commonjs/src/webapi/models/main-source-file.model.js +0 -132
  42. package/commonjs/src/webapi/models/sample-files.model.js +0 -60
  43. package/es6/src/domain/prompt.js +0 -37
  44. package/es6/src/models/compose.model.js +0 -77
  45. package/es6/src/models/config-yaml.model.js +0 -30
  46. package/es6/src/models/const.js +0 -19
  47. package/es6/src/models/container-image.model.js +0 -84
  48. package/es6/src/models/dev-container.model.js +0 -68
  49. package/es6/src/models/env-file.model.js +0 -29
  50. package/es6/src/models/gitignore.model.js +0 -22
  51. package/es6/src/models/launch-json.model.js +0 -42
  52. package/es6/src/models/package-json.model.js +0 -60
  53. package/es6/src/models/project.model.js +0 -111
  54. package/es6/src/models/source-file.js +0 -3
  55. package/es6/src/models/tsconfig.model.js +0 -24
  56. package/es6/src/models/vscode-settings.model.js +0 -21
  57. package/es6/src/services/scaffold.service.js +0 -52
  58. package/es6/src/webapi/create-api.js +0 -151
  59. package/es6/src/webapi/features/auth.feature.js +0 -115
  60. package/es6/src/webapi/features/auth0-cli.js +0 -116
  61. package/es6/src/webapi/features/database.feature.js +0 -141
  62. package/es6/src/webapi/features/finalize.feature.js +0 -41
  63. package/es6/src/webapi/features/postman.feature.js +0 -258
  64. package/es6/src/webapi/models/api-package-json.model.js +0 -52
  65. package/es6/src/webapi/models/auth-config.model.js +0 -19
  66. package/es6/src/webapi/models/controller-source-file.model.js +0 -171
  67. package/es6/src/webapi/models/main-source-file.model.js +0 -128
  68. package/es6/src/webapi/models/sample-files.model.js +0 -42
  69. package/types/src/domain/prompt.d.ts +0 -2
  70. package/types/src/models/compose.model.d.ts +0 -32
  71. package/types/src/models/config-yaml.model.d.ts +0 -16
  72. package/types/src/models/const.d.ts +0 -17
  73. package/types/src/models/container-image.model.d.ts +0 -15
  74. package/types/src/models/dev-container.model.d.ts +0 -21
  75. package/types/src/models/env-file.model.d.ts +0 -14
  76. package/types/src/models/gitignore.model.d.ts +0 -6
  77. package/types/src/models/launch-json.model.d.ts +0 -5
  78. package/types/src/models/package-json.model.d.ts +0 -18
  79. package/types/src/models/project.model.d.ts +0 -55
  80. package/types/src/models/source-file.d.ts +0 -11
  81. package/types/src/models/tsconfig.model.d.ts +0 -5
  82. package/types/src/models/vscode-settings.model.d.ts +0 -7
  83. package/types/src/services/scaffold.service.d.ts +0 -22
  84. package/types/src/webapi/create-api.d.ts +0 -7
  85. package/types/src/webapi/features/auth.feature.d.ts +0 -7
  86. package/types/src/webapi/features/auth0-cli.d.ts +0 -22
  87. package/types/src/webapi/features/database.feature.d.ts +0 -5
  88. package/types/src/webapi/features/finalize.feature.d.ts +0 -2
  89. package/types/src/webapi/features/postman.feature.d.ts +0 -7
  90. package/types/src/webapi/models/api-package-json.model.d.ts +0 -17
  91. package/types/src/webapi/models/auth-config.model.d.ts +0 -18
  92. package/types/src/webapi/models/controller-source-file.model.d.ts +0 -42
  93. package/types/src/webapi/models/main-source-file.model.d.ts +0 -36
  94. package/types/src/webapi/models/sample-files.model.d.ts +0 -7
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "CREATE_VERSION", {
6
- enumerable: true,
7
- get: function() {
8
- return CREATE_VERSION;
9
- }
10
- });
11
- const _nodemodule = require("node:module");
12
- const _nodepath = require("node:path");
13
- const _nodeurl = require("node:url");
14
- const _require = (0, _nodemodule.createRequire)(require("url").pathToFileURL(__filename).toString());
15
- function resolveCreateVersion() {
16
- let dir = (0, _nodepath.dirname)((0, _nodeurl.fileURLToPath)(require("url").pathToFileURL(__filename).toString()));
17
- for(let i = 0; i < 5; i++){
18
- try {
19
- const pkg = _require((0, _nodepath.join)(dir, "package.json"));
20
- if (pkg.name === "@decohere/create") {
21
- return pkg.version ?? "0.0.1-dev";
22
- }
23
- } catch {}
24
- const parent = (0, _nodepath.dirname)(dir);
25
- if (parent === dir) break;
26
- dir = parent;
27
- }
28
- return "0.0.1-dev";
29
- }
30
- const CREATE_VERSION = resolveCreateVersion();
31
-
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvdmVyc2lvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5jb25zdCBfcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZnVuY3Rpb24gcmVzb2x2ZUNyZWF0ZVZlcnNpb24oKTogc3RyaW5nIHtcblx0bGV0IGRpciA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcGtnID0gX3JlcXVpcmUoam9pbihkaXIsIFwicGFja2FnZS5qc29uXCIpKSBhcyB7XG5cdFx0XHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0XHRcdHZlcnNpb24/OiBzdHJpbmc7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHBrZy5uYW1lID09PSBcIkBkZWNvaGVyZS9jcmVhdGVcIikge1xuXHRcdFx0XHRyZXR1cm4gcGtnLnZlcnNpb24gPz8gXCIwLjAuMS1kZXZcIjtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHt9XG5cdFx0Y29uc3QgcGFyZW50ID0gZGlybmFtZShkaXIpO1xuXHRcdGlmIChwYXJlbnQgPT09IGRpcikgYnJlYWs7XG5cdFx0ZGlyID0gcGFyZW50O1xuXHR9XG5cdHJldHVybiBcIjAuMC4xLWRldlwiO1xufVxuXG4vKiogVmVyc2lvbiBvZiBAZGVjb2hlcmUvY3JlYXRlLCB1c2VkIHRvIHBpbiBzY2FmZm9sZGVkIEBkZWNvaGVyZS8qIGRlcGVuZGVuY2llcy4gKi9cbmV4cG9ydCBjb25zdCBDUkVBVEVfVkVSU0lPTiA9IHJlc29sdmVDcmVhdGVWZXJzaW9uKCk7XG4iXSwibmFtZXMiOlsiQ1JFQVRFX1ZFUlNJT04iLCJfcmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJyZXNvbHZlQ3JlYXRlVmVyc2lvbiIsImRpciIsImRpcm5hbWUiLCJmaWxlVVJMVG9QYXRoIiwiaSIsInBrZyIsImpvaW4iLCJuYW1lIiwidmVyc2lvbiIsInBhcmVudCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkEwQmFBOzs7ZUFBQUE7Ozs0QkExQmlCOzBCQUNBO3lCQUNBO0FBRTlCLE1BQU1DLFdBQVdDLElBQUFBLHlCQUFhLEVBQUM7QUFFL0IsU0FBU0M7SUFDUixJQUFJQyxNQUFNQyxJQUFBQSxpQkFBTyxFQUFDQyxJQUFBQSxzQkFBYSxFQUFDO0lBQ2hDLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLElBQUs7UUFDM0IsSUFBSTtZQUNILE1BQU1DLE1BQU1QLFNBQVNRLElBQUFBLGNBQUksRUFBQ0wsS0FBSztZQUkvQixJQUFJSSxJQUFJRSxJQUFJLEtBQUssb0JBQW9CO2dCQUNwQyxPQUFPRixJQUFJRyxPQUFPLElBQUk7WUFDdkI7UUFDRCxFQUFFLE9BQU0sQ0FBQztRQUNULE1BQU1DLFNBQVNQLElBQUFBLGlCQUFPLEVBQUNEO1FBQ3ZCLElBQUlRLFdBQVdSLEtBQUs7UUFDcEJBLE1BQU1RO0lBQ1A7SUFDQSxPQUFPO0FBQ1I7QUFHTyxNQUFNWixpQkFBaUJHIn0=
@@ -1,169 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get WEBAPI_PROJECT_DIR () {
13
- return WEBAPI_PROJECT_DIR;
14
- },
15
- get scaffoldApi () {
16
- return scaffoldApi;
17
- }
18
- });
19
- const _nodepath = require("node:path");
20
- const _composemodel = require("../models/compose.model.js");
21
- const _configyamlmodel = require("../models/config-yaml.model.js");
22
- const _const = require("../models/const.js");
23
- const _containerimagemodel = require("../models/container-image.model.js");
24
- const _devcontainermodel = require("../models/dev-container.model.js");
25
- const _envfilemodel = require("../models/env-file.model.js");
26
- const _gitignoremodel = require("../models/gitignore.model.js");
27
- const _launchjsonmodel = require("../models/launch-json.model.js");
28
- const _packagejsonmodel = require("../models/package-json.model.js");
29
- const _projectmodel = require("../models/project.model.js");
30
- const _tsconfigmodel = require("../models/tsconfig.model.js");
31
- const _vscodesettingsmodel = require("../models/vscode-settings.model.js");
32
- const _scaffoldservice = require("../services/scaffold.service.js");
33
- const _authfeature = require("./features/auth.feature.js");
34
- const _databasefeature = require("./features/database.feature.js");
35
- const _finalizefeature = require("./features/finalize.feature.js");
36
- const _postmanfeature = require("./features/postman.feature.js");
37
- const _apipackagejsonmodel = require("./models/api-package-json.model.js");
38
- const _controllersourcefilemodel = require("./models/controller-source-file.model.js");
39
- const _mainsourcefilemodel = require("./models/main-source-file.model.js");
40
- const _samplefilesmodel = require("./models/sample-files.model.js");
41
- const WEBAPI_PROJECT_DIR = "projects/api";
42
- const features = [
43
- _databasefeature.DatabaseFeature,
44
- _authfeature.AuthFeature,
45
- _postmanfeature.PostmanFeature,
46
- _finalizefeature.FinalizeFeature
47
- ];
48
- async function scaffoldApi(cliOptions) {
49
- const targetDir = (0, _nodepath.resolve)(cliOptions.d ?? ".");
50
- const workspace = createWorkspace(targetDir);
51
- await _scaffoldservice.ScaffoldService.scaffold(workspace, cliOptions, features);
52
- }
53
- function createWorkspace(targetDir) {
54
- const monoRepo = new _projectmodel.MonoRepoScaffold();
55
- monoRepo.targetDir = targetDir;
56
- const name = monoRepo.name;
57
- const compose = new _composemodel.DockerCompose().addService("devcontainer", {
58
- build: ".",
59
- volumes: [
60
- `\${HOME}/.npm/${name}:/home/node/.npm-config`,
61
- "webapi-node-modules:/workspace/node_modules"
62
- ],
63
- environment: {
64
- NPM_CONFIG_USERCONFIG: "/home/node/.npm-config/.npmrc"
65
- },
66
- command: "sleep infinity"
67
- }).addVolume("webapi-node-modules");
68
- const devContainer = new _devcontainermodel.DevContainer().addExtension("biomejs.biome", "vitest.explorer").setPostStartCommand("npm whoami 2>/dev/null || npm login").useCompose();
69
- // Workspace-level models (repo root)
70
- monoRepo.addModel(compose);
71
- monoRepo.addModel(devContainer);
72
- monoRepo.addModel(new _containerimagemodel.DockerfileModel());
73
- monoRepo.addModel(new _vscodesettingsmodel.VSCodeSettings(name));
74
- monoRepo.addModel(new _launchjsonmodel.LaunchJson());
75
- monoRepo.addModel(new _tsconfigmodel.TsConfig());
76
- monoRepo.addModel(new _packagejsonmodel.PackageJson(`${name}.api`));
77
- monoRepo.addModel(new _configyamlmodel.ConfigYaml(_const.WELL_KNOWN_FILES.CONFIG_YAML, "config/config.yaml", ""));
78
- monoRepo.addModel(new _configyamlmodel.ConfigYaml(_const.WELL_KNOWN_FILES.CONFIG_DEV_YAML, "config/config.dev.yaml", ""));
79
- monoRepo.addModel(new _gitignoremodel.Gitignore());
80
- monoRepo.addModel(new _envfilemodel.EnvFile());
81
- // Biome formatter/linter config
82
- monoRepo.addFile({
83
- files: ()=>[
84
- {
85
- filePath: "biome.json",
86
- content: JSON.stringify({
87
- $schema: "https://biomejs.dev/schemas/2.0.0/schema.json",
88
- files: {
89
- includes: [
90
- "**/*.ts",
91
- "**/*.js",
92
- "**/*.json",
93
- "**/*.yml",
94
- "**/*.yaml"
95
- ]
96
- },
97
- assist: {
98
- actions: {
99
- source: {
100
- organizeImports: "on"
101
- }
102
- }
103
- },
104
- vcs: {
105
- enabled: true,
106
- clientKind: "git",
107
- useIgnoreFile: true
108
- },
109
- formatter: {
110
- enabled: true,
111
- formatWithErrors: true,
112
- indentStyle: "tab",
113
- lineWidth: 95
114
- },
115
- javascript: {
116
- parser: {
117
- unsafeParameterDecoratorsEnabled: true
118
- }
119
- },
120
- linter: {
121
- rules: {
122
- style: {
123
- useConsistentMemberAccessibility: {
124
- level: "error",
125
- options: {
126
- accessibility: "explicit"
127
- }
128
- }
129
- }
130
- }
131
- },
132
- overrides: [
133
- {
134
- includes: [
135
- "**/*.json"
136
- ],
137
- formatter: {
138
- indentStyle: "space",
139
- indentWidth: 2
140
- }
141
- }
142
- ]
143
- }, null, 2)
144
- }
145
- ]
146
- });
147
- // NPM token placeholder — gitignored, set manually after scaffold
148
- monoRepo.addFile({
149
- files: ()=>[
150
- {
151
- filePath: ".env.local",
152
- content: "# Set your npm access token here (created with: npm token create)\nNPM_TOKEN=\n"
153
- }
154
- ]
155
- });
156
- // Project-level models (paths relative to projects/api)
157
- const apiProject = new _projectmodel.ProjectScaffold(WEBAPI_PROJECT_DIR);
158
- apiProject.addModel(new _apipackagejsonmodel.ApiPackageJson(name));
159
- apiProject.addModel(new _mainsourcefilemodel.MainSourceFile(`${name}.api`));
160
- apiProject.addModel(new _controllersourcefilemodel.ControllerSourceFile());
161
- // SampleService + SampleConfig are part of the core scaffold — HelloController
162
- // injects SampleService to demonstrate config-driven behaviour out of the box.
163
- apiProject.addFile(new _samplefilesmodel.SampleConfigModel());
164
- apiProject.addFile(new _samplefilesmodel.SampleServiceModel());
165
- monoRepo.addProject(apiProject);
166
- return monoRepo;
167
- }
168
-
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRG9ja2VyZmlsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9jb250YWluZXItaW1hZ2UubW9kZWwuanNcIjtcbmltcG9ydCB7IERldkNvbnRhaW5lciB9IGZyb20gXCIuLi9tb2RlbHMvZGV2LWNvbnRhaW5lci5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRW52RmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IEdpdGlnbm9yZSB9IGZyb20gXCIuLi9tb2RlbHMvZ2l0aWdub3JlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBMYXVuY2hKc29uIH0gZnJvbSBcIi4uL21vZGVscy9sYXVuY2gtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTW9ub1JlcG9TY2FmZm9sZCwgUHJvamVjdFNjYWZmb2xkIH0gZnJvbSBcIi4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBUc0NvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvdHNjb25maWcubW9kZWwuanNcIjtcbmltcG9ydCB7IFZTQ29kZVNldHRpbmdzIH0gZnJvbSBcIi4uL21vZGVscy92c2NvZGUtc2V0dGluZ3MubW9kZWwuanNcIjtcbmltcG9ydCB7IFNjYWZmb2xkU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBBdXRoRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRGF0YWJhc2VGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZGF0YWJhc2UuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRmluYWxpemVGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZmluYWxpemUuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgUG9zdG1hbkZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9wb3N0bWFuLmZlYXR1cmUuanNcIjtcbmltcG9ydCB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4vbW9kZWxzL2FwaS1wYWNrYWdlLWpzb24ubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbnRyb2xsZXJTb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL2NvbnRyb2xsZXItc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IE1haW5Tb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL21haW4tc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IFNhbXBsZUNvbmZpZ01vZGVsLCBTYW1wbGVTZXJ2aWNlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2FtcGxlLWZpbGVzLm1vZGVsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBXRUJBUElfUFJPSkVDVF9ESVIgPSBcInByb2plY3RzL2FwaVwiO1xuXG5leHBvcnQgdHlwZSBBcGlPcHRpb25zID0ge1xuXHRkPzogc3RyaW5nO1xuXHRhdXRoUHJvdmlkZXI/OiBzdHJpbmc7XG5cdGRhdGFiYXNlUHJvdmlkZXI/OiBcIm5vbmVcIiB8IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xufTtcblxuY29uc3QgZmVhdHVyZXMgPSBbRGF0YWJhc2VGZWF0dXJlLCBBdXRoRmVhdHVyZSwgUG9zdG1hbkZlYXR1cmUsIEZpbmFsaXplRmVhdHVyZV07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzY2FmZm9sZEFwaShjbGlPcHRpb25zOiBBcGlPcHRpb25zKSB7XG5cdGNvbnN0IHRhcmdldERpciA9IHJlc29sdmUoY2xpT3B0aW9ucy5kID8/IFwiLlwiKTtcblx0Y29uc3Qgd29ya3NwYWNlID0gY3JlYXRlV29ya3NwYWNlKHRhcmdldERpcik7XG5cdGF3YWl0IFNjYWZmb2xkU2VydmljZS5zY2FmZm9sZCh3b3Jrc3BhY2UsIGNsaU9wdGlvbnMsIGZlYXR1cmVzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlKHRhcmdldERpcjogc3RyaW5nKTogTW9ub1JlcG9TY2FmZm9sZCB7XG5cdGNvbnN0IG1vbm9SZXBvID0gbmV3IE1vbm9SZXBvU2NhZmZvbGQoKTtcblx0bW9ub1JlcG8udGFyZ2V0RGlyID0gdGFyZ2V0RGlyO1xuXHRjb25zdCBuYW1lID0gbW9ub1JlcG8ubmFtZTtcblxuXHRjb25zdCBjb21wb3NlID0gbmV3IERvY2tlckNvbXBvc2UoKVxuXHRcdC5hZGRTZXJ2aWNlKFwiZGV2Y29udGFpbmVyXCIsIHtcblx0XHRcdGJ1aWxkOiBcIi5cIixcblx0XHRcdHZvbHVtZXM6IFtcblx0XHRcdFx0YFxcJHtIT01FfS8ubnBtLyR7bmFtZX06L2hvbWUvbm9kZS8ubnBtLWNvbmZpZ2AsXG5cdFx0XHRcdFwid2ViYXBpLW5vZGUtbW9kdWxlczovd29ya3NwYWNlL25vZGVfbW9kdWxlc1wiLFxuXHRcdFx0XSxcblx0XHRcdGVudmlyb25tZW50OiB7IE5QTV9DT05GSUdfVVNFUkNPTkZJRzogXCIvaG9tZS9ub2RlLy5ucG0tY29uZmlnLy5ucG1yY1wiIH0sXG5cdFx0XHRjb21tYW5kOiBcInNsZWVwIGluZmluaXR5XCIsXG5cdFx0fSlcblx0XHQuYWRkVm9sdW1lKFwid2ViYXBpLW5vZGUtbW9kdWxlc1wiKTtcblxuXHRjb25zdCBkZXZDb250YWluZXIgPSBuZXcgRGV2Q29udGFpbmVyKClcblx0XHQuYWRkRXh0ZW5zaW9uKFwiYmlvbWVqcy5iaW9tZVwiLCBcInZpdGVzdC5leHBsb3JlclwiKVxuXHRcdC5zZXRQb3N0U3RhcnRDb21tYW5kKFwibnBtIHdob2FtaSAyPi9kZXYvbnVsbCB8fCBucG0gbG9naW5cIilcblx0XHQudXNlQ29tcG9zZSgpO1xuXG5cdC8vIFdvcmtzcGFjZS1sZXZlbCBtb2RlbHMgKHJlcG8gcm9vdClcblx0bW9ub1JlcG8uYWRkTW9kZWwoY29tcG9zZSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKGRldkNvbnRhaW5lcik7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBEb2NrZXJmaWxlTW9kZWwoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBWU0NvZGVTZXR0aW5ncyhuYW1lKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBMYXVuY2hKc29uKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVHNDb25maWcoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBQYWNrYWdlSnNvbihgJHtuYW1lfS5hcGlgKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBDb25maWdZYW1sKFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwsIFwiY29uZmlnL2NvbmZpZy55YW1sXCIsIFwiXCIpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoXG5cdFx0bmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfREVWX1lBTUwsIFwiY29uZmlnL2NvbmZpZy5kZXYueWFtbFwiLCBcIlwiKSxcblx0KTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IEdpdGlnbm9yZSgpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IEVudkZpbGUoKSk7XG5cblx0Ly8gQmlvbWUgZm9ybWF0dGVyL2xpbnRlciBjb25maWdcblx0bW9ub1JlcG8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiYmlvbWUuanNvblwiLFxuXHRcdFx0XHRjb250ZW50OiBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQkc2NoZW1hOiBcImh0dHBzOi8vYmlvbWVqcy5kZXYvc2NoZW1hcy8yLjAuMC9zY2hlbWEuanNvblwiLFxuXHRcdFx0XHRcdFx0ZmlsZXM6IHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyoudHNcIiwgXCIqKi8qLmpzXCIsIFwiKiovKi5qc29uXCIsIFwiKiovKi55bWxcIiwgXCIqKi8qLnlhbWxcIl0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXNzaXN0OiB7IGFjdGlvbnM6IHsgc291cmNlOiB7IG9yZ2FuaXplSW1wb3J0czogXCJvblwiIH0gfSB9LFxuXHRcdFx0XHRcdFx0dmNzOiB7IGVuYWJsZWQ6IHRydWUsIGNsaWVudEtpbmQ6IFwiZ2l0XCIsIHVzZUlnbm9yZUZpbGU6IHRydWUgfSxcblx0XHRcdFx0XHRcdGZvcm1hdHRlcjoge1xuXHRcdFx0XHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRmb3JtYXRXaXRoRXJyb3JzOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbmRlbnRTdHlsZTogXCJ0YWJcIixcblx0XHRcdFx0XHRcdFx0bGluZVdpZHRoOiA5NSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRqYXZhc2NyaXB0OiB7IHBhcnNlcjogeyB1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZDogdHJ1ZSB9IH0sXG5cdFx0XHRcdFx0XHRsaW50ZXI6IHtcblx0XHRcdFx0XHRcdFx0cnVsZXM6IHtcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0dXNlQ29uc2lzdGVudE1lbWJlckFjY2Vzc2liaWxpdHk6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczogeyBhY2Nlc3NpYmlsaXR5OiBcImV4cGxpY2l0XCIgfSxcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvdmVycmlkZXM6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGluY2x1ZGVzOiBbXCIqKi8qLmpzb25cIl0sXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7IGluZGVudFN0eWxlOiBcInNwYWNlXCIsIGluZGVudFdpZHRoOiAyIH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHQyLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9KTtcblxuXHQvLyBOUE0gdG9rZW4gcGxhY2Vob2xkZXIg4oCUIGdpdGlnbm9yZWQsIHNldCBtYW51YWxseSBhZnRlciBzY2FmZm9sZFxuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZW52LmxvY2FsXCIsXG5cdFx0XHRcdGNvbnRlbnQ6XG5cdFx0XHRcdFx0XCIjIFNldCB5b3VyIG5wbSBhY2Nlc3MgdG9rZW4gaGVyZSAoY3JlYXRlZCB3aXRoOiBucG0gdG9rZW4gY3JlYXRlKVxcbk5QTV9UT0tFTj1cXG5cIixcblx0XHRcdH0sXG5cdFx0XSxcblx0fSk7XG5cblx0Ly8gUHJvamVjdC1sZXZlbCBtb2RlbHMgKHBhdGhzIHJlbGF0aXZlIHRvIHByb2plY3RzL2FwaSlcblx0Y29uc3QgYXBpUHJvamVjdCA9IG5ldyBQcm9qZWN0U2NhZmZvbGQoV0VCQVBJX1BST0pFQ1RfRElSKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQXBpUGFja2FnZUpzb24obmFtZSkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBNYWluU291cmNlRmlsZShgJHtuYW1lfS5hcGlgKSk7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IENvbnRyb2xsZXJTb3VyY2VGaWxlKCkpO1xuXG5cdC8vIFNhbXBsZVNlcnZpY2UgKyBTYW1wbGVDb25maWcgYXJlIHBhcnQgb2YgdGhlIGNvcmUgc2NhZmZvbGQg4oCUIEhlbGxvQ29udHJvbGxlclxuXHQvLyBpbmplY3RzIFNhbXBsZVNlcnZpY2UgdG8gZGVtb25zdHJhdGUgY29uZmlnLWRyaXZlbiBiZWhhdmlvdXIgb3V0IG9mIHRoZSBib3guXG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlQ29uZmlnTW9kZWwoKSk7XG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlU2VydmljZU1vZGVsKCkpO1xuXG5cdG1vbm9SZXBvLmFkZFByb2plY3QoYXBpUHJvamVjdCk7XG5cblx0cmV0dXJuIG1vbm9SZXBvO1xufVxuIl0sIm5hbWVzIjpbIldFQkFQSV9QUk9KRUNUX0RJUiIsInNjYWZmb2xkQXBpIiwiZmVhdHVyZXMiLCJEYXRhYmFzZUZlYXR1cmUiLCJBdXRoRmVhdHVyZSIsIlBvc3RtYW5GZWF0dXJlIiwiRmluYWxpemVGZWF0dXJlIiwiY2xpT3B0aW9ucyIsInRhcmdldERpciIsInJlc29sdmUiLCJkIiwid29ya3NwYWNlIiwiY3JlYXRlV29ya3NwYWNlIiwiU2NhZmZvbGRTZXJ2aWNlIiwic2NhZmZvbGQiLCJtb25vUmVwbyIsIk1vbm9SZXBvU2NhZmZvbGQiLCJuYW1lIiwiY29tcG9zZSIsIkRvY2tlckNvbXBvc2UiLCJhZGRTZXJ2aWNlIiwiYnVpbGQiLCJ2b2x1bWVzIiwiZW52aXJvbm1lbnQiLCJOUE1fQ09ORklHX1VTRVJDT05GSUciLCJjb21tYW5kIiwiYWRkVm9sdW1lIiwiZGV2Q29udGFpbmVyIiwiRGV2Q29udGFpbmVyIiwiYWRkRXh0ZW5zaW9uIiwic2V0UG9zdFN0YXJ0Q29tbWFuZCIsInVzZUNvbXBvc2UiLCJhZGRNb2RlbCIsIkRvY2tlcmZpbGVNb2RlbCIsIlZTQ29kZVNldHRpbmdzIiwiTGF1bmNoSnNvbiIsIlRzQ29uZmlnIiwiUGFja2FnZUpzb24iLCJDb25maWdZYW1sIiwiV0VMTF9LTk9XTl9GSUxFUyIsIkNPTkZJR19ZQU1MIiwiQ09ORklHX0RFVl9ZQU1MIiwiR2l0aWdub3JlIiwiRW52RmlsZSIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCIkc2NoZW1hIiwiaW5jbHVkZXMiLCJhc3Npc3QiLCJhY3Rpb25zIiwic291cmNlIiwib3JnYW5pemVJbXBvcnRzIiwidmNzIiwiZW5hYmxlZCIsImNsaWVudEtpbmQiLCJ1c2VJZ25vcmVGaWxlIiwiZm9ybWF0dGVyIiwiZm9ybWF0V2l0aEVycm9ycyIsImluZGVudFN0eWxlIiwibGluZVdpZHRoIiwiamF2YXNjcmlwdCIsInBhcnNlciIsInVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkIiwibGludGVyIiwicnVsZXMiLCJzdHlsZSIsInVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5IiwibGV2ZWwiLCJvcHRpb25zIiwiYWNjZXNzaWJpbGl0eSIsIm92ZXJyaWRlcyIsImluZGVudFdpZHRoIiwiYXBpUHJvamVjdCIsIlByb2plY3RTY2FmZm9sZCIsIkFwaVBhY2thZ2VKc29uIiwiTWFpblNvdXJjZUZpbGUiLCJDb250cm9sbGVyU291cmNlRmlsZSIsIlNhbXBsZUNvbmZpZ01vZGVsIiwiU2FtcGxlU2VydmljZU1vZGVsIiwiYWRkUHJvamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUF1QmFBO2VBQUFBOztRQVVTQztlQUFBQTs7OzBCQWpDRTs4QkFDTTtpQ0FDSDt1QkFDTTtxQ0FDRDttQ0FDSDs4QkFDTDtnQ0FDRTtpQ0FDQztrQ0FDQzs4QkFDc0I7K0JBQ3pCO3FDQUNNO2lDQUNDOzZCQUNKO2lDQUNJO2lDQUNBO2dDQUNEO3FDQUNBOzJDQUNNO3FDQUNOO2tDQUN1QjtBQUUvQyxNQUFNRCxxQkFBcUI7QUFRbEMsTUFBTUUs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
@@ -1,166 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "AuthFeature", {
6
- enumerable: true,
7
- get: function() {
8
- return AuthFeature;
9
- }
10
- });
11
- const _prompt = require("../../domain/prompt.js");
12
- const _const = require("../../models/const.js");
13
- const _authconfigmodel = require("../models/auth-config.model.js");
14
- const _controllersourcefilemodel = require("../models/controller-source-file.model.js");
15
- const _auth0cli = /*#__PURE__*/ _interop_require_wildcard(require("./auth0-cli.js"));
16
- function _getRequireWildcardCache(nodeInterop) {
17
- if (typeof WeakMap !== "function") return null;
18
- var cacheBabelInterop = new WeakMap();
19
- var cacheNodeInterop = new WeakMap();
20
- return (_getRequireWildcardCache = function(nodeInterop) {
21
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
22
- })(nodeInterop);
23
- }
24
- function _interop_require_wildcard(obj, nodeInterop) {
25
- if (!nodeInterop && obj && obj.__esModule) {
26
- return obj;
27
- }
28
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
29
- return {
30
- default: obj
31
- };
32
- }
33
- var cache = _getRequireWildcardCache(nodeInterop);
34
- if (cache && cache.has(obj)) {
35
- return cache.get(obj);
36
- }
37
- var newObj = {
38
- __proto__: null
39
- };
40
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
41
- for(var key in obj){
42
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
43
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
44
- if (desc && (desc.get || desc.set)) {
45
- Object.defineProperty(newObj, key, desc);
46
- } else {
47
- newObj[key] = obj[key];
48
- }
49
- }
50
- }
51
- newObj.default = obj;
52
- if (cache) {
53
- cache.set(obj, newObj);
54
- }
55
- return newObj;
56
- }
57
- async function getOptions(workspace, cliOptions) {
58
- if (cliOptions.authProvider != null) return {};
59
- const choices = [
60
- {
61
- label: "none"
62
- },
63
- {
64
- label: "auth0"
65
- }
66
- ];
67
- const selected = await (0, _prompt.pick)("\n Auth provider: ", choices, (c)=>c.label);
68
- const provider = selected?.label ?? "none";
69
- if (provider !== "auth0") return {
70
- authProvider: "none"
71
- };
72
- return getAuth0Options(workspace);
73
- }
74
- async function getAuth0Options(workspace) {
75
- if (!_auth0cli.isInstalled()) {
76
- console.error("\n The Auth0 CLI is required for automated setup.\n" + " Install: brew install auth0/auth0-cli/auth0\n" + " Or visit: https://github.com/auth0/auth0-cli\n");
77
- process.exit(1);
78
- }
79
- process.stdout.write("\n Checking Auth0 credentials...");
80
- let tenants = _auth0cli.listTenants();
81
- if (tenants.length === 0) {
82
- process.stdout.write(" not logged in.\n");
83
- console.log(" Logging in to Auth0 (your browser will open)...");
84
- if (!_auth0cli.login()) {
85
- console.error("\n Auth0 login failed.");
86
- process.exit(1);
87
- }
88
- tenants = _auth0cli.listTenants();
89
- }
90
- try {
91
- _auth0cli.listApis();
92
- process.stdout.write(" ok.\n");
93
- } catch (err) {
94
- if (err instanceof _auth0cli.Auth0AuthError) {
95
- process.stdout.write(" token expired.\n");
96
- console.log(" Re-authenticating (your browser will open)...");
97
- if (!_auth0cli.login()) {
98
- console.error("\n Auth0 login failed.");
99
- process.exit(1);
100
- }
101
- }
102
- }
103
- const active = tenants.find((t)=>t.active) ?? tenants[0];
104
- const issuerBaseUrl = `https://${active.name}`;
105
- console.log(`\n ✓ Auth0 tenant: ${issuerBaseUrl}`);
106
- process.stdout.write("\n Fetching Auth0 APIs...");
107
- const userApis = _auth0cli.listApis().filter((a)=>!a.name.includes("Management API"));
108
- process.stdout.write(` found ${userApis.length}.\n`);
109
- const projectName = workspace.name;
110
- const apiChoices = [
111
- {
112
- label: `<new> https://api.${projectName}`,
113
- existing: null
114
- },
115
- ...userApis.map((a)=>({
116
- label: `${a.name} — ${a.identifier}`,
117
- existing: a.identifier
118
- }))
119
- ];
120
- const apiSelected = await (0, _prompt.pick)("\n Select Auth0 API: ", apiChoices, (c)=>c.label);
121
- let audience;
122
- if (!apiSelected || apiSelected.existing === null) {
123
- const defaultId = `https://api.${projectName}`;
124
- audience = await (0, _prompt.ask)(` API Identifier [${defaultId}]: `, defaultId);
125
- console.log("\n Creating Auth0 API...");
126
- audience = _auth0cli.createApi(`${projectName} API`, audience).identifier;
127
- console.log(` \u2713 API created: ${audience}`);
128
- } else {
129
- audience = apiSelected.existing;
130
- console.log(` \u2713 Selected: ${audience}`);
131
- }
132
- return {
133
- authProvider: "auth0",
134
- issuerBaseUrl,
135
- audience
136
- };
137
- }
138
- function scaffold(workspace, options) {
139
- if (options.authProvider !== "auth0") return;
140
- const resource = "Hello";
141
- for (const controller of workspace.getModels(_controllersourcefilemodel.ControllerSourceFile)){
142
- controller.addDecorator(`@Authorize("read", "${resource}")`).addCortexImport("AllowAnonymous").addCortexImport("Authorize").addCortexImport("IPrincipalProviderToken").addCortexImport("IPrincipalProvider", true).addImport("inject", "@decohere/crucible/decorators").addConstructorParam(`@inject(IPrincipalProviderToken) private readonly principalProvider: IPrincipalProvider`);
143
- controller.getMethod("getAll").addDecorator("@AllowAnonymous()");
144
- controller.getMethod("create").addDecorator(`@Authorize("create", "${resource}")`);
145
- controller.getMethod("update").addDecorator(`@Authorize("update", "${resource}")`);
146
- controller.getMethod("remove").addDecorator(`@Authorize("delete", "${resource}")`);
147
- }
148
- workspace.getModel(_const.WELL_KNOWN_FILES.MAIN_TS)?.addSideEffectImport("@decohere/cortex/auth").addBuilderCall(".withAuth()");
149
- // biome-ignore lint/suspicious/noTemplateCurlyInString: intentional YAML env-var placeholders
150
- const issuerPlaceholder = "${AUTH0_ISSUER_BASE_URL}";
151
- // biome-ignore lint/suspicious/noTemplateCurlyInString: intentional YAML env-var placeholders
152
- const audPlaceholder = "${AUTH0_AUDIENCE}";
153
- const configSection = `auth:\n discoveryUrl: ${issuerPlaceholder}\n audience: ${audPlaceholder}\n`;
154
- workspace.getModel(_const.WELL_KNOWN_FILES.CONFIG_YAML)?.addSection(configSection);
155
- workspace.getModel(_const.WELL_KNOWN_FILES.ENV_FILE)?.addEntry("AUTH0_ISSUER_BASE_URL", options.issuerBaseUrl ?? "").addEntry("AUTH0_AUDIENCE", options.audience ?? "");
156
- workspace.addModel(new _authconfigmodel.AuthConfigModel({
157
- issuerBaseUrl: options.issuerBaseUrl ?? "",
158
- audience: options.audience ?? ""
159
- }));
160
- }
161
- const AuthFeature = {
162
- getOptions,
163
- scaffold
164
- };
165
-
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc2ssIHBpY2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWdZYW1sIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25maWcteWFtbC5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgRW52RmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlU2NhZmZvbGQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgRmVhdHVyZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBBdXRoQ29uZmlnTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2F1dGgtY29uZmlnLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBDb250cm9sbGVyU291cmNlRmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNYWluU291cmNlRmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0ICogYXMgYXV0aDBDbGkgZnJvbSBcIi4vYXV0aDAtY2xpLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEF1dGhPcHRpb25zID0ge1xuXHRhdXRoUHJvdmlkZXI/OiBcImF1dGgwXCIgfCBcIm5vbmVcIjtcblx0aXNzdWVyQmFzZVVybD86IHN0cmluZztcblx0YXVkaWVuY2U/OiBzdHJpbmc7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRPcHRpb25zKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRjbGlPcHRpb25zOiBQYXJ0aWFsPEF1dGhPcHRpb25zPixcbik6IFByb21pc2U8UGFydGlhbDxBdXRoT3B0aW9ucz4+IHtcblx0aWYgKGNsaU9wdGlvbnMuYXV0aFByb3ZpZGVyICE9IG51bGwpIHJldHVybiB7fTtcblxuXHRjb25zdCBjaG9pY2VzID0gW3sgbGFiZWw6IFwibm9uZVwiIGFzIGNvbnN0IH0sIHsgbGFiZWw6IFwiYXV0aDBcIiBhcyBjb25zdCB9XTtcblx0Y29uc3Qgc2VsZWN0ZWQgPSBhd2FpdCBwaWNrKFwiXFxuICBBdXRoIHByb3ZpZGVyOiBcIiwgY2hvaWNlcywgKGMpID0+IGMubGFiZWwpO1xuXHRjb25zdCBwcm92aWRlciA9IHNlbGVjdGVkPy5sYWJlbCA/PyBcIm5vbmVcIjtcblxuXHRpZiAocHJvdmlkZXIgIT09IFwiYXV0aDBcIikgcmV0dXJuIHsgYXV0aFByb3ZpZGVyOiBcIm5vbmVcIiB9O1xuXG5cdHJldHVybiBnZXRBdXRoME9wdGlvbnMod29ya3NwYWNlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0aDBPcHRpb25zKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQpOiBQcm9taXNlPFBhcnRpYWw8QXV0aE9wdGlvbnM+PiB7XG5cdGlmICghYXV0aDBDbGkuaXNJbnN0YWxsZWQoKSkge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlxcbiAgVGhlIEF1dGgwIENMSSBpcyByZXF1aXJlZCBmb3IgYXV0b21hdGVkIHNldHVwLlxcblwiICtcblx0XHRcdFx0XCIgIEluc3RhbGw6IGJyZXcgaW5zdGFsbCBhdXRoMC9hdXRoMC1jbGkvYXV0aDBcXG5cIiArXG5cdFx0XHRcdFwiICBPciB2aXNpdDogaHR0cHM6Ly9naXRodWIuY29tL2F1dGgwL2F1dGgwLWNsaVxcblwiLFxuXHRcdCk7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCJcXG4gIENoZWNraW5nIEF1dGgwIGNyZWRlbnRpYWxzLi4uXCIpO1xuXHRsZXQgdGVuYW50cyA9IGF1dGgwQ2xpLmxpc3RUZW5hbnRzKCk7XG5cdGlmICh0ZW5hbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG5vdCBsb2dnZWQgaW4uXFxuXCIpO1xuXHRcdGNvbnNvbGUubG9nKFwiICBMb2dnaW5nIGluIHRvIEF1dGgwICh5b3VyIGJyb3dzZXIgd2lsbCBvcGVuKS4uLlwiKTtcblx0XHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJcXG4gIEF1dGgwIGxvZ2luIGZhaWxlZC5cIik7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdFx0fVxuXHRcdHRlbmFudHMgPSBhdXRoMENsaS5saXN0VGVuYW50cygpO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRhdXRoMENsaS5saXN0QXBpcygpO1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG9rLlxcblwiKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIGF1dGgwQ2xpLkF1dGgwQXV0aEVycm9yKSB7XG5cdFx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiB0b2tlbiBleHBpcmVkLlxcblwiKTtcblx0XHRcdGNvbnNvbGUubG9nKFwiICBSZS1hdXRoZW50aWNhdGluZyAoeW91ciBicm93c2VyIHdpbGwgb3BlbikuLi5cIik7XG5cdFx0XHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcIlxcbiAgQXV0aDAgbG9naW4gZmFpbGVkLlwiKTtcblx0XHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFjdGl2ZSA9IHRlbmFudHMuZmluZCgodCkgPT4gdC5hY3RpdmUpID8/IHRlbmFudHNbMF07XG5cdGNvbnN0IGlzc3VlckJhc2VVcmwgPSBgaHR0cHM6Ly8ke2FjdGl2ZS5uYW1lfWA7XG5cdGNvbnNvbGUubG9nKGBcXG4gIOKckyBBdXRoMCB0ZW5hbnQ6ICR7aXNzdWVyQmFzZVVybH1gKTtcblxuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcbiAgRmV0Y2hpbmcgQXV0aDAgQVBJcy4uLlwiKTtcblx0Y29uc3QgdXNlckFwaXMgPSBhdXRoMENsaS5saXN0QXBpcygpLmZpbHRlcigoYSkgPT4gIWEubmFtZS5pbmNsdWRlcyhcIk1hbmFnZW1lbnQgQVBJXCIpKTtcblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoYCBmb3VuZCAke3VzZXJBcGlzLmxlbmd0aH0uXFxuYCk7XG5cblx0dHlwZSBBcGlDaG9pY2UgPSB7IGxhYmVsOiBzdHJpbmc7IGV4aXN0aW5nOiBzdHJpbmcgfCBudWxsIH07XG5cdGNvbnN0IHByb2plY3ROYW1lID0gd29ya3NwYWNlLm5hbWU7XG5cdGNvbnN0IGFwaUNob2ljZXM6IEFwaUNob2ljZVtdID0gW1xuXHRcdHsgbGFiZWw6IGA8bmV3PiBodHRwczovL2FwaS4ke3Byb2plY3ROYW1lfWAsIGV4aXN0aW5nOiBudWxsIH0sXG5cdFx0Li4udXNlckFwaXMubWFwKChhKSA9PiAoeyBsYWJlbDogYCR7YS5uYW1lfSDigJQgJHthLmlkZW50aWZpZXJ9YCwgZXhpc3Rpbmc6IGEuaWRlbnRpZmllciB9KSksXG5cdF07XG5cblx0Y29uc3QgYXBpU2VsZWN0ZWQgPSBhd2FpdCBwaWNrKFwiXFxuICBTZWxlY3QgQXV0aDAgQVBJOiBcIiwgYXBpQ2hvaWNlcywgKGMpID0+IGMubGFiZWwpO1xuXG5cdGxldCBhdWRpZW5jZTogc3RyaW5nO1xuXHRpZiAoIWFwaVNlbGVjdGVkIHx8IGFwaVNlbGVjdGVkLmV4aXN0aW5nID09PSBudWxsKSB7XG5cdFx0Y29uc3QgZGVmYXVsdElkID0gYGh0dHBzOi8vYXBpLiR7cHJvamVjdE5hbWV9YDtcblx0XHRhdWRpZW5jZSA9IGF3YWl0IGFzayhgICBBUEkgSWRlbnRpZmllciBbJHtkZWZhdWx0SWR9XTogYCwgZGVmYXVsdElkKTtcblx0XHRjb25zb2xlLmxvZyhcIlxcbiAgQ3JlYXRpbmcgQXV0aDAgQVBJLi4uXCIpO1xuXHRcdGF1ZGllbmNlID0gYXV0aDBDbGkuY3JlYXRlQXBpKGAke3Byb2plY3ROYW1lfSBBUElgLCBhdWRpZW5jZSkuaWRlbnRpZmllcjtcblx0XHRjb25zb2xlLmxvZyhgICBcXHUyNzEzIEFQSSBjcmVhdGVkOiAke2F1ZGllbmNlfWApO1xuXHR9IGVsc2Uge1xuXHRcdGF1ZGllbmNlID0gYXBpU2VsZWN0ZWQuZXhpc3Rpbmc7XG5cdFx0Y29uc29sZS5sb2coYCAgXFx1MjcxMyBTZWxlY3RlZDogJHthdWRpZW5jZX1gKTtcblx0fVxuXG5cdHJldHVybiB7IGF1dGhQcm92aWRlcjogXCJhdXRoMFwiLCBpc3N1ZXJCYXNlVXJsLCBhdWRpZW5jZSB9O1xufVxuXG5mdW5jdGlvbiBzY2FmZm9sZCh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBvcHRpb25zOiBBdXRoT3B0aW9ucyk6IHZvaWQge1xuXHRpZiAob3B0aW9ucy5hdXRoUHJvdmlkZXIgIT09IFwiYXV0aDBcIikgcmV0dXJuO1xuXG5cdGNvbnN0IHJlc291cmNlID0gXCJIZWxsb1wiO1xuXG5cdGZvciAoY29uc3QgY29udHJvbGxlciBvZiB3b3Jrc3BhY2UuZ2V0TW9kZWxzKENvbnRyb2xsZXJTb3VyY2VGaWxlKSkge1xuXHRcdGNvbnRyb2xsZXJcblx0XHRcdC5hZGREZWNvcmF0b3IoYEBBdXRob3JpemUoXCJyZWFkXCIsIFwiJHtyZXNvdXJjZX1cIilgKVxuXHRcdFx0LmFkZENvcnRleEltcG9ydChcIkFsbG93QW5vbnltb3VzXCIpXG5cdFx0XHQuYWRkQ29ydGV4SW1wb3J0KFwiQXV0aG9yaXplXCIpXG5cdFx0XHQuYWRkQ29ydGV4SW1wb3J0KFwiSVByaW5jaXBhbFByb3ZpZGVyVG9rZW5cIilcblx0XHRcdC5hZGRDb3J0ZXhJbXBvcnQoXCJJUHJpbmNpcGFsUHJvdmlkZXJcIiwgdHJ1ZSlcblx0XHRcdC5hZGRJbXBvcnQoXCJpbmplY3RcIiwgXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiKVxuXHRcdFx0LmFkZENvbnN0cnVjdG9yUGFyYW0oXG5cdFx0XHRcdGBAaW5qZWN0KElQcmluY2lwYWxQcm92aWRlclRva2VuKSBwcml2YXRlIHJlYWRvbmx5IHByaW5jaXBhbFByb3ZpZGVyOiBJUHJpbmNpcGFsUHJvdmlkZXJgLFxuXHRcdFx0KTtcblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcImdldEFsbFwiKS5hZGREZWNvcmF0b3IoXCJAQWxsb3dBbm9ueW1vdXMoKVwiKTtcblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcImNyZWF0ZVwiKS5hZGREZWNvcmF0b3IoYEBBdXRob3JpemUoXCJjcmVhdGVcIiwgXCIke3Jlc291cmNlfVwiKWApO1xuXHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwidXBkYXRlXCIpLmFkZERlY29yYXRvcihgQEF1dGhvcml6ZShcInVwZGF0ZVwiLCBcIiR7cmVzb3VyY2V9XCIpYCk7XG5cdFx0Y29udHJvbGxlci5nZXRNZXRob2QoXCJyZW1vdmVcIikuYWRkRGVjb3JhdG9yKGBAQXV0aG9yaXplKFwiZGVsZXRlXCIsIFwiJHtyZXNvdXJjZX1cIilgKTtcblx0fVxuXG5cdHdvcmtzcGFjZVxuXHRcdC5nZXRNb2RlbDxNYWluU291cmNlRmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5NQUlOX1RTKVxuXHRcdD8uYWRkU2lkZUVmZmVjdEltcG9ydChcIkBkZWNvaGVyZS9jb3J0ZXgvYXV0aFwiKVxuXHRcdC5hZGRCdWlsZGVyQ2FsbChcIi53aXRoQXV0aCgpXCIpO1xuXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IGludGVudGlvbmFsIFlBTUwgZW52LXZhciBwbGFjZWhvbGRlcnNcblx0Y29uc3QgaXNzdWVyUGxhY2Vob2xkZXIgPSBcIiR7QVVUSDBfSVNTVUVSX0JBU0VfVVJMfVwiO1xuXHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGVtcGxhdGVDdXJseUluU3RyaW5nOiBpbnRlbnRpb25hbCBZQU1MIGVudi12YXIgcGxhY2Vob2xkZXJzXG5cdGNvbnN0IGF1ZFBsYWNlaG9sZGVyID0gXCIke0FVVEgwX0FVRElFTkNFfVwiO1xuXG5cdGNvbnN0IGNvbmZpZ1NlY3Rpb24gPSBgYXV0aDpcXG4gIGRpc2NvdmVyeVVybDogJHtpc3N1ZXJQbGFjZWhvbGRlcn1cXG4gIGF1ZGllbmNlOiAke2F1ZFBsYWNlaG9sZGVyfVxcbmA7XG5cblx0d29ya3NwYWNlLmdldE1vZGVsPENvbmZpZ1lhbWw+KFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwpPy5hZGRTZWN0aW9uKGNvbmZpZ1NlY3Rpb24pO1xuXG5cdHdvcmtzcGFjZVxuXHRcdC5nZXRNb2RlbDxFbnZGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLkVOVl9GSUxFKVxuXHRcdD8uYWRkRW50cnkoXCJBVVRIMF9JU1NVRVJfQkFTRV9VUkxcIiwgb3B0aW9ucy5pc3N1ZXJCYXNlVXJsID8/IFwiXCIpXG5cdFx0LmFkZEVudHJ5KFwiQVVUSDBfQVVESUVOQ0VcIiwgb3B0aW9ucy5hdWRpZW5jZSA/PyBcIlwiKTtcblxuXHR3b3Jrc3BhY2UuYWRkTW9kZWwoXG5cdFx0bmV3IEF1dGhDb25maWdNb2RlbCh7XG5cdFx0XHRpc3N1ZXJCYXNlVXJsOiBvcHRpb25zLmlzc3VlckJhc2VVcmwgPz8gXCJcIixcblx0XHRcdGF1ZGllbmNlOiBvcHRpb25zLmF1ZGllbmNlID8/IFwiXCIsXG5cdFx0fSksXG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBBdXRoRmVhdHVyZTogRmVhdHVyZTxBdXRoT3B0aW9ucz4gPSB7IGdldE9wdGlvbnMsIHNjYWZmb2xkIH07XG4iXSwibmFtZXMiOlsiQXV0aEZlYXR1cmUiLCJnZXRPcHRpb25zIiwid29ya3NwYWNlIiwiY2xpT3B0aW9ucyIsImF1dGhQcm92aWRlciIsImNob2ljZXMiLCJsYWJlbCIsInNlbGVjdGVkIiwicGljayIsImMiLCJwcm92aWRlciIsImdldEF1dGgwT3B0aW9ucyIsImF1dGgwQ2xpIiwiaXNJbnN0YWxsZWQiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsInN0ZG91dCIsIndyaXRlIiwidGVuYW50cyIsImxpc3RUZW5hbnRzIiwibGVuZ3RoIiwibG9nIiwibG9naW4iLCJsaXN0QXBpcyIsImVyciIsIkF1dGgwQXV0aEVycm9yIiwiYWN0aXZlIiwiZmluZCIsInQiLCJpc3N1ZXJCYXNlVXJsIiwibmFtZSIsInVzZXJBcGlzIiwiZmlsdGVyIiwiYSIsImluY2x1ZGVzIiwicHJvamVjdE5hbWUiLCJhcGlDaG9pY2VzIiwiZXhpc3RpbmciLCJtYXAiLCJpZGVudGlmaWVyIiwiYXBpU2VsZWN0ZWQiLCJhdWRpZW5jZSIsImRlZmF1bHRJZCIsImFzayIsImNyZWF0ZUFwaSIsInNjYWZmb2xkIiwib3B0aW9ucyIsInJlc291cmNlIiwiY29udHJvbGxlciIsImdldE1vZGVscyIsIkNvbnRyb2xsZXJTb3VyY2VGaWxlIiwiYWRkRGVjb3JhdG9yIiwiYWRkQ29ydGV4SW1wb3J0IiwiYWRkSW1wb3J0IiwiYWRkQ29uc3RydWN0b3JQYXJhbSIsImdldE1ldGhvZCIsImdldE1vZGVsIiwiV0VMTF9LTk9XTl9GSUxFUyIsIk1BSU5fVFMiLCJhZGRTaWRlRWZmZWN0SW1wb3J0IiwiYWRkQnVpbGRlckNhbGwiLCJpc3N1ZXJQbGFjZWhvbGRlciIsImF1ZFBsYWNlaG9sZGVyIiwiY29uZmlnU2VjdGlvbiIsIkNPTkZJR19ZQU1MIiwiYWRkU2VjdGlvbiIsIkVOVl9GSUxFIiwiYWRkRW50cnkiLCJhZGRNb2RlbCIsIkF1dGhDb25maWdNb2RlbCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFxSmFBOzs7ZUFBQUE7Ozt3QkFySmE7dUJBRU87aUNBSUQ7MkNBQ0s7a0VBRVg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVEx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
@@ -1,151 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get Auth0AuthError () {
13
- return Auth0AuthError;
14
- },
15
- get REQUIRED_SCOPES () {
16
- return REQUIRED_SCOPES;
17
- },
18
- get createApi () {
19
- return createApi;
20
- },
21
- get createSpaApp () {
22
- return createSpaApp;
23
- },
24
- get isInstalled () {
25
- return isInstalled;
26
- },
27
- get listApis () {
28
- return listApis;
29
- },
30
- get listTenants () {
31
- return listTenants;
32
- },
33
- get login () {
34
- return login;
35
- }
36
- });
37
- const _nodechild_process = require("node:child_process");
38
- const REQUIRED_SCOPES = "create:clients";
39
- /** Hard timeout for any Management API call. Prevents indefinite hangs on token re-auth. */ const API_TIMEOUT_MS = 8_000;
40
- class Auth0AuthError extends Error {
41
- constructor(message){
42
- super(message);
43
- this.name = "Auth0AuthError";
44
- }
45
- }
46
- /** Returns true if an error or stderr output looks like an expired/missing token. */ function isAuthError(text) {
47
- return text.includes("renew access token") || text.includes("log in") || text.includes("Unauthorized");
48
- }
49
- /** Run an auth0 CLI command with a hard timeout. Returns stdout on success, throws on failure. */ function runAuth0(args) {
50
- const result = (0, _nodechild_process.spawnSync)("auth0", args, {
51
- encoding: "utf8",
52
- timeout: API_TIMEOUT_MS,
53
- input: "",
54
- stdio: "pipe"
55
- });
56
- if (result.error) {
57
- // ETIMEDOUT means the process was killed by the timeout
58
- const msg = result.error.message;
59
- if (isAuthError(msg) || result.error.code === "ETIMEDOUT") {
60
- throw new Auth0AuthError(msg);
61
- }
62
- throw result.error;
63
- }
64
- if (result.status !== 0) {
65
- const stderr = result.stderr ?? "";
66
- if (isAuthError(stderr)) throw new Auth0AuthError(stderr);
67
- throw new Error(stderr || `auth0 exited with code ${result.status}`);
68
- }
69
- return result.stdout;
70
- }
71
- function isInstalled() {
72
- try {
73
- (0, _nodechild_process.execFileSync)("auth0", [
74
- "--version"
75
- ], {
76
- stdio: "pipe"
77
- });
78
- return true;
79
- } catch {
80
- return false;
81
- }
82
- }
83
- function listTenants() {
84
- try {
85
- const out = (0, _nodechild_process.execFileSync)("auth0", [
86
- "tenants",
87
- "list",
88
- "--json"
89
- ], {
90
- encoding: "utf8",
91
- stdio: "pipe"
92
- });
93
- return JSON.parse(out);
94
- } catch {
95
- return [];
96
- }
97
- }
98
- function login() {
99
- const result = (0, _nodechild_process.spawnSync)("auth0", [
100
- "login",
101
- "--scopes",
102
- REQUIRED_SCOPES
103
- ], {
104
- stdio: "inherit"
105
- });
106
- return result.status === 0;
107
- }
108
- function listApis() {
109
- try {
110
- const out = runAuth0([
111
- "apis",
112
- "list",
113
- "--json",
114
- "--no-input"
115
- ]);
116
- return JSON.parse(out);
117
- } catch (err) {
118
- if (err instanceof Auth0AuthError) throw err;
119
- return [];
120
- }
121
- }
122
- function createApi(name, identifier) {
123
- const out = runAuth0([
124
- "apis",
125
- "create",
126
- "--name",
127
- name,
128
- "--identifier",
129
- identifier,
130
- "--json",
131
- "--no-input"
132
- ]);
133
- return JSON.parse(out);
134
- }
135
- function createSpaApp(name, callbackUrl) {
136
- const out = runAuth0([
137
- "apps",
138
- "create",
139
- "--name",
140
- name,
141
- "--type",
142
- "spa",
143
- "--callbacks",
144
- callbackUrl,
145
- "--json",
146
- "--no-input"
147
- ]);
148
- return JSON.parse(out);
149
- }
150
-
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2F1dGgwLWNsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjRmlsZVN5bmMsIHNwYXduU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcblxuY29uc3QgUkVRVUlSRURfU0NPUEVTID0gXCJjcmVhdGU6Y2xpZW50c1wiO1xuLyoqIEhhcmQgdGltZW91dCBmb3IgYW55IE1hbmFnZW1lbnQgQVBJIGNhbGwuIFByZXZlbnRzIGluZGVmaW5pdGUgaGFuZ3Mgb24gdG9rZW4gcmUtYXV0aC4gKi9cbmNvbnN0IEFQSV9USU1FT1VUX01TID0gOF8wMDA7XG5cbmV4cG9ydCBjbGFzcyBBdXRoMEF1dGhFcnJvciBleHRlbmRzIEVycm9yIHtcblx0cHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuXHRcdHN1cGVyKG1lc3NhZ2UpO1xuXHRcdHRoaXMubmFtZSA9IFwiQXV0aDBBdXRoRXJyb3JcIjtcblx0fVxufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIGFuIGVycm9yIG9yIHN0ZGVyciBvdXRwdXQgbG9va3MgbGlrZSBhbiBleHBpcmVkL21pc3NpbmcgdG9rZW4uICovXG5mdW5jdGlvbiBpc0F1dGhFcnJvcih0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHR0ZXh0LmluY2x1ZGVzKFwicmVuZXcgYWNjZXNzIHRva2VuXCIpIHx8XG5cdFx0dGV4dC5pbmNsdWRlcyhcImxvZyBpblwiKSB8fFxuXHRcdHRleHQuaW5jbHVkZXMoXCJVbmF1dGhvcml6ZWRcIilcblx0KTtcbn1cblxuLyoqIFJ1biBhbiBhdXRoMCBDTEkgY29tbWFuZCB3aXRoIGEgaGFyZCB0aW1lb3V0LiBSZXR1cm5zIHN0ZG91dCBvbiBzdWNjZXNzLCB0aHJvd3Mgb24gZmFpbHVyZS4gKi9cbmZ1bmN0aW9uIHJ1bkF1dGgwKGFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKFwiYXV0aDBcIiwgYXJncywge1xuXHRcdGVuY29kaW5nOiBcInV0ZjhcIixcblx0XHR0aW1lb3V0OiBBUElfVElNRU9VVF9NUyxcblx0XHRpbnB1dDogXCJcIixcblx0XHRzdGRpbzogXCJwaXBlXCIsXG5cdH0pO1xuXG5cdGlmIChyZXN1bHQuZXJyb3IpIHtcblx0XHQvLyBFVElNRURPVVQgbWVhbnMgdGhlIHByb2Nlc3Mgd2FzIGtpbGxlZCBieSB0aGUgdGltZW91dFxuXHRcdGNvbnN0IG1zZyA9IHJlc3VsdC5lcnJvci5tZXNzYWdlO1xuXHRcdGlmIChpc0F1dGhFcnJvcihtc2cpIHx8IChyZXN1bHQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVUSU1FRE9VVFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgQXV0aDBBdXRoRXJyb3IobXNnKTtcblx0XHR9XG5cdFx0dGhyb3cgcmVzdWx0LmVycm9yO1xuXHR9XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcblx0XHRjb25zdCBzdGRlcnIgPSByZXN1bHQuc3RkZXJyID8/IFwiXCI7XG5cdFx0aWYgKGlzQXV0aEVycm9yKHN0ZGVycikpIHRocm93IG5ldyBBdXRoMEF1dGhFcnJvcihzdGRlcnIpO1xuXHRcdHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgYGF1dGgwIGV4aXRlZCB3aXRoIGNvZGUgJHtyZXN1bHQuc3RhdHVzfWApO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdC5zdGRvdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aDBUZW5hbnQge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGFjdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0luc3RhbGxlZCgpOiBib29sZWFuIHtcblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJhdXRoMFwiLCBbXCItLXZlcnNpb25cIl0sIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RUZW5hbnRzKCk6IEF1dGgwVGVuYW50W10ge1xuXHR0cnkge1xuXHRcdGNvbnN0IG91dCA9IGV4ZWNGaWxlU3luYyhcImF1dGgwXCIsIFtcInRlbmFudHNcIiwgXCJsaXN0XCIsIFwiLS1qc29uXCJdLCB7XG5cdFx0XHRlbmNvZGluZzogXCJ1dGY4XCIsXG5cdFx0XHRzdGRpbzogXCJwaXBlXCIsXG5cdFx0fSk7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2Uob3V0KSBhcyBBdXRoMFRlbmFudFtdO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2luKCk6IGJvb2xlYW4ge1xuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXCJhdXRoMFwiLCBbXCJsb2dpblwiLCBcIi0tc2NvcGVzXCIsIFJFUVVJUkVEX1NDT1BFU10sIHtcblx0XHRzdGRpbzogXCJpbmhlcml0XCIsXG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0LnN0YXR1cyA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBcGlzKCk6IEFycmF5PHsgaWRlbnRpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcImFwaXNcIiwgXCJsaXN0XCIsIFwiLS1qc29uXCIsIFwiLS1uby1pbnB1dFwiXSk7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2Uob3V0KSBhcyBBcnJheTx7IGlkZW50aWZpZXI6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+O1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoZXJyIGluc3RhbmNlb2YgQXV0aDBBdXRoRXJyb3IpIHRocm93IGVycjtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwaShuYW1lOiBzdHJpbmcsIGlkZW50aWZpZXI6IHN0cmluZyk6IHsgaWRlbnRpZmllcjogc3RyaW5nIH0ge1xuXHRjb25zdCBvdXQgPSBydW5BdXRoMChbXG5cdFx0XCJhcGlzXCIsXG5cdFx0XCJjcmVhdGVcIixcblx0XHRcIi0tbmFtZVwiLFxuXHRcdG5hbWUsXG5cdFx0XCItLWlkZW50aWZpZXJcIixcblx0XHRpZGVudGlmaWVyLFxuXHRcdFwiLS1qc29uXCIsXG5cdFx0XCItLW5vLWlucHV0XCIsXG5cdF0pO1xuXHRyZXR1cm4gSlNPTi5wYXJzZShvdXQpIGFzIHsgaWRlbnRpZmllcjogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGFBcHAobmFtZTogc3RyaW5nLCBjYWxsYmFja1VybDogc3RyaW5nKTogeyBjbGllbnRfaWQ6IHN0cmluZyB9IHtcblx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBwc1wiLFxuXHRcdFwiY3JlYXRlXCIsXG5cdFx0XCItLW5hbWVcIixcblx0XHRuYW1lLFxuXHRcdFwiLS10eXBlXCIsXG5cdFx0XCJzcGFcIixcblx0XHRcIi0tY2FsbGJhY2tzXCIsXG5cdFx0Y2FsbGJhY2tVcmwsXG5cdFx0XCItLWpzb25cIixcblx0XHRcIi0tbm8taW5wdXRcIixcblx0XSk7XG5cdHJldHVybiBKU09OLnBhcnNlKG91dCkgYXMgeyBjbGllbnRfaWQ6IHN0cmluZyB9O1xufVxuXG5leHBvcnQgeyBSRVFVSVJFRF9TQ09QRVMgfTtcbiJdLCJuYW1lcyI6WyJBdXRoMEF1dGhFcnJvciIsIlJFUVVJUkVEX1NDT1BFUyIsImNyZWF0ZUFwaSIsImNyZWF0ZVNwYUFwcCIsImlzSW5zdGFsbGVkIiwibGlzdEFwaXMiLCJsaXN0VGVuYW50cyIsImxvZ2luIiwiQVBJX1RJTUVPVVRfTVMiLCJFcnJvciIsIm1lc3NhZ2UiLCJuYW1lIiwiaXNBdXRoRXJyb3IiLCJ0ZXh0IiwiaW5jbHVkZXMiLCJydW5BdXRoMCIsImFyZ3MiLCJyZXN1bHQiLCJzcGF3blN5bmMiLCJlbmNvZGluZyIsInRpbWVvdXQiLCJpbnB1dCIsInN0ZGlvIiwiZXJyb3IiLCJtc2ciLCJjb2RlIiwic3RhdHVzIiwic3RkZXJyIiwic3Rkb3V0IiwiZXhlY0ZpbGVTeW5jIiwib3V0IiwiSlNPTiIsInBhcnNlIiwiZXJyIiwiaWRlbnRpZmllciIsImNhbGxiYWNrVXJsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQU1hQTtlQUFBQTs7UUFvSEpDO2VBQUFBOztRQTlCT0M7ZUFBQUE7O1FBY0FDO2VBQUFBOztRQXBEQUM7ZUFBQUE7O1FBNEJBQztlQUFBQTs7UUFuQkFDO2VBQUFBOztRQVlBQztlQUFBQTs7O21DQTNFd0I7QUFFeEMsTUFBTU4sa0JBQWtCO0FBQ3hCLDBGQUEwRixHQUMxRixNQUFNTyxpQkFBaUI7QUFFaEIsTUFBTVIsdUJBQXVCUztJQUNuQyxZQUFtQkMsT0FBZSxDQUFFO1FBQ25DLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLElBQUksR0FBRztJQUNiO0FBQ0Q7QUFFQSxtRkFBbUYsR0FDbkYsU0FBU0MsWUFBWUMsSUFBWTtJQUNoQyxPQUNDQSxLQUFLQyxRQUFRLENBQUMseUJBQ2RELEtBQUtDLFFBQVEsQ0FBQyxhQUNkRCxLQUFLQyxRQUFRLENBQUM7QUFFaEI7QUFFQSxnR0FBZ0csR0FDaEcsU0FBU0MsU0FBU0MsSUFBYztJQUMvQixNQUFNQyxTQUFTQyxJQUFBQSw0QkFBUyxFQUFDLFNBQVNGLE1BQU07UUFDdkNHLFVBQVU7UUFDVkMsU0FBU1o7UUFDVGEsT0FBTztRQUNQQyxPQUFPO0lBQ1I7SUFFQSxJQUFJTCxPQUFPTSxLQUFLLEVBQUU7UUFDakIsd0RBQXdEO1FBQ3hELE1BQU1DLE1BQU1QLE9BQU9NLEtBQUssQ0FBQ2IsT0FBTztRQUNoQyxJQUFJRSxZQUFZWSxRQUFRLEFBQUNQLE9BQU9NLEtBQUssQ0FBMkJFLElBQUksS0FBSyxhQUFhO1lBQ3JGLE1BQU0sSUFBSXpCLGVBQWV3QjtRQUMxQjtRQUNBLE1BQU1QLE9BQU9NLEtBQUs7SUFDbkI7SUFFQSxJQUFJTixPQUFPUyxNQUFNLEtBQUssR0FBRztRQUN4QixNQUFNQyxTQUFTVixPQUFPVSxNQUFNLElBQUk7UUFDaEMsSUFBSWYsWUFBWWUsU0FBUyxNQUFNLElBQUkzQixlQUFlMkI7UUFDbEQsTUFBTSxJQUFJbEIsTUFBTWtCLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRVYsT0FBT1MsTUFBTSxFQUFFO0lBQ3BFO0lBRUEsT0FBT1QsT0FBT1csTUFBTTtBQUNyQjtBQU9PLFNBQVN4QjtJQUNmLElBQUk7UUFDSHlCLElBQUFBLCtCQUFZLEVBQUMsU0FBUztZQUFDO1NBQVksRUFBRTtZQUFFUCxPQUFPO1FBQU87UUFDckQsT0FBTztJQUNSLEVBQUUsT0FBTTtRQUNQLE9BQU87SUFDUjtBQUNEO0FBRU8sU0FBU2hCO0lBQ2YsSUFBSTtRQUNILE1BQU13QixNQUFNRCxJQUFBQSwrQkFBWSxFQUFDLFNBQVM7WUFBQztZQUFXO1lBQVE7U0FBUyxFQUFFO1lBQ2hFVixVQUFVO1lBQ1ZHLE9BQU87UUFDUjtRQUNBLE9BQU9TLEtBQUtDLEtBQUssQ0FBQ0Y7SUFDbkIsRUFBRSxPQUFNO1FBQ1AsT0FBTyxFQUFFO0lBQ1Y7QUFDRDtBQUVPLFNBQVN2QjtJQUNmLE1BQU1VLFNBQVNDLElBQUFBLDRCQUFTLEVBQUMsU0FBUztRQUFDO1FBQVM7UUFBWWpCO0tBQWdCLEVBQUU7UUFDekVxQixPQUFPO0lBQ1I7SUFDQSxPQUFPTCxPQUFPUyxNQUFNLEtBQUs7QUFDMUI7QUFFTyxTQUFTckI7SUFDZixJQUFJO1FBQ0gsTUFBTXlCLE1BQU1mLFNBQVM7WUFBQztZQUFRO1lBQVE7WUFBVTtTQUFhO1FBQzdELE9BQU9nQixLQUFLQyxLQUFLLENBQUNGO0lBQ25CLEVBQUUsT0FBT0csS0FBSztRQUNiLElBQUlBLGVBQWVqQyxnQkFBZ0IsTUFBTWlDO1FBQ3pDLE9BQU8sRUFBRTtJQUNWO0FBQ0Q7QUFFTyxTQUFTL0IsVUFBVVMsSUFBWSxFQUFFdUIsVUFBa0I7SUFDekQsTUFBTUosTUFBTWYsU0FBUztRQUNwQjtRQUNBO1FBQ0E7UUFDQUo7UUFDQTtRQUNBdUI7UUFDQTtRQUNBO0tBQ0E7SUFDRCxPQUFPSCxLQUFLQyxLQUFLLENBQUNGO0FBQ25CO0FBRU8sU0FBUzNCLGFBQWFRLElBQVksRUFBRXdCLFdBQW1CO0lBQzdELE1BQU1MLE1BQU1mLFNBQVM7UUFDcEI7UUFDQTtRQUNBO1FBQ0FKO1FBQ0E7UUFDQTtRQUNBO1FBQ0F3QjtRQUNBO1FBQ0E7S0FDQTtJQUNELE9BQU9KLEtBQUtDLEtBQUssQ0FBQ0Y7QUFDbkIifQ==