@decohere/scaffold 0.0.1-dev.18 → 0.0.1-dev.80

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 (240) hide show
  1. package/commonjs/src/add-api.action.js +39 -0
  2. package/commonjs/src/add-api.command.js +41 -0
  3. package/commonjs/src/add.command.js +24 -0
  4. package/commonjs/src/add.module.js +26 -0
  5. package/commonjs/src/cli.js +9 -0
  6. package/commonjs/src/create.command.js +24 -0
  7. package/commonjs/src/create.module.js +26 -0
  8. package/commonjs/src/domain/prompt.js +64 -0
  9. package/commonjs/src/index.js +38 -0
  10. package/commonjs/src/models/compose.model.js +150 -0
  11. package/commonjs/src/models/config-yaml.model.js +88 -0
  12. package/commonjs/src/models/const.js +32 -0
  13. package/commonjs/src/models/dev-container.model.js +116 -0
  14. package/commonjs/src/models/docker-image.model.js +259 -0
  15. package/commonjs/src/models/env-file.model.js +50 -0
  16. package/commonjs/src/models/gitignore.model.js +43 -0
  17. package/commonjs/src/models/launch-json.model.js +74 -0
  18. package/commonjs/src/models/package-json.model.js +149 -0
  19. package/commonjs/src/models/project.model.js +134 -0
  20. package/commonjs/src/models/source-file.js +6 -0
  21. package/commonjs/src/models/tsconfig.model.js +34 -0
  22. package/commonjs/src/models/vitest-config.model.js +35 -0
  23. package/commonjs/src/models/vscode-settings.model.js +31 -0
  24. package/commonjs/src/program.js +57 -0
  25. package/commonjs/src/resolve-target-dir.js +19 -0
  26. package/commonjs/src/services/scaffold.service.js +62 -0
  27. package/commonjs/src/version.js +57 -0
  28. package/commonjs/src/webapi/api-name.js +95 -0
  29. package/commonjs/src/webapi/cli-options.js +101 -0
  30. package/commonjs/src/webapi/const.js +50 -0
  31. package/commonjs/src/webapi/create-api.js +237 -0
  32. package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.js +166 -0
  33. package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
  34. package/commonjs/src/webapi/devcontainer/host-scripts.js +52 -0
  35. package/commonjs/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
  36. package/commonjs/src/webapi/devcontainer/templates/initialize.sh +169 -0
  37. package/commonjs/src/webapi/devcontainer/templates/post-create.sh +35 -0
  38. package/commonjs/src/webapi/devcontainer/templates/post-start.sh +65 -0
  39. package/commonjs/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
  40. package/commonjs/src/webapi/features/auth.feature.js +441 -0
  41. package/commonjs/src/webapi/features/auth0-cli.js +435 -0
  42. package/commonjs/src/webapi/features/biome-format.js +49 -0
  43. package/commonjs/src/webapi/features/database.feature.js +433 -0
  44. package/commonjs/src/webapi/features/finalize.feature.js +95 -0
  45. package/commonjs/src/webapi/features/postman.feature.js +324 -0
  46. package/commonjs/src/webapi/models/api-package-json.model.js +60 -0
  47. package/commonjs/src/webapi/models/auth-config.model.js +26 -0
  48. package/commonjs/src/webapi/models/controller-source-file.model.js +193 -0
  49. package/commonjs/src/webapi/models/github-ci.model.js +193 -0
  50. package/commonjs/src/webapi/models/main-source-file.model.js +167 -0
  51. package/commonjs/src/webapi/models/production-dockerfile.model.js +157 -0
  52. package/commonjs/src/webapi/models/sample-files.model.js +60 -0
  53. package/commonjs/src/webapi/models/webapi-image.model.js +27 -0
  54. package/commonjs/src/webapi/postman/hello-openapi.js +175 -0
  55. package/commonjs/src/webapi/postman/local-view.js +184 -0
  56. package/commonjs/src/webapi/postman/openapi-to-postman.js +202 -0
  57. package/commonjs/src/webapi/workspace-readme.js +110 -0
  58. package/commonjs/src/webapi.action.js +30 -0
  59. package/commonjs/src/webapi.command.js +45 -0
  60. package/es6/src/add-api.action.js +29 -0
  61. package/es6/src/add-api.command.js +31 -0
  62. package/es6/src/add.command.js +14 -0
  63. package/es6/src/add.module.js +16 -0
  64. package/es6/src/cli.js +5 -0
  65. package/es6/src/create.command.js +14 -0
  66. package/es6/src/create.module.js +16 -0
  67. package/es6/src/domain/prompt.js +43 -0
  68. package/es6/src/index.js +8 -0
  69. package/es6/src/models/compose.model.js +144 -0
  70. package/es6/src/models/config-yaml.model.js +76 -0
  71. package/es6/src/models/const.js +22 -0
  72. package/es6/src/models/dev-container.model.js +106 -0
  73. package/es6/src/models/docker-image.model.js +217 -0
  74. package/es6/src/models/env-file.model.js +46 -0
  75. package/es6/src/models/gitignore.model.js +33 -0
  76. package/es6/src/models/launch-json.model.js +64 -0
  77. package/es6/src/models/package-json.model.js +137 -0
  78. package/es6/src/models/project.model.js +119 -0
  79. package/es6/src/models/source-file.js +3 -0
  80. package/es6/src/models/tsconfig.model.js +24 -0
  81. package/es6/src/models/vitest-config.model.js +25 -0
  82. package/es6/src/models/vscode-settings.model.js +21 -0
  83. package/es6/src/program.js +39 -0
  84. package/es6/src/resolve-target-dir.js +9 -0
  85. package/es6/src/services/scaffold.service.js +52 -0
  86. package/es6/src/version.js +36 -0
  87. package/es6/src/webapi/api-name.js +59 -0
  88. package/es6/src/webapi/cli-options.js +36 -0
  89. package/es6/src/webapi/const.js +20 -0
  90. package/es6/src/webapi/create-api.js +217 -0
  91. package/es6/src/webapi/devcontainer/codebase-rag-mcp.js +156 -0
  92. package/es6/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
  93. package/es6/src/webapi/devcontainer/host-scripts.js +31 -0
  94. package/es6/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
  95. package/es6/src/webapi/devcontainer/templates/initialize.sh +169 -0
  96. package/es6/src/webapi/devcontainer/templates/post-create.sh +35 -0
  97. package/es6/src/webapi/devcontainer/templates/post-start.sh +65 -0
  98. package/es6/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
  99. package/es6/src/webapi/features/auth.feature.js +390 -0
  100. package/es6/src/webapi/features/auth0-cli.js +375 -0
  101. package/es6/src/webapi/features/biome-format.js +42 -0
  102. package/es6/src/webapi/features/database.feature.js +423 -0
  103. package/es6/src/webapi/features/finalize.feature.js +85 -0
  104. package/es6/src/webapi/features/postman.feature.js +258 -0
  105. package/es6/src/webapi/models/api-package-json.model.js +55 -0
  106. package/es6/src/webapi/models/auth-config.model.js +22 -0
  107. package/es6/src/webapi/models/controller-source-file.model.js +184 -0
  108. package/es6/src/webapi/models/github-ci.model.js +186 -0
  109. package/es6/src/webapi/models/main-source-file.model.js +163 -0
  110. package/es6/src/webapi/models/production-dockerfile.model.js +148 -0
  111. package/es6/src/webapi/models/sample-files.model.js +42 -0
  112. package/es6/src/webapi/models/webapi-image.model.js +20 -0
  113. package/es6/src/webapi/postman/hello-openapi.js +168 -0
  114. package/es6/src/webapi/postman/local-view.js +169 -0
  115. package/es6/src/webapi/postman/openapi-to-postman.js +179 -0
  116. package/es6/src/webapi/workspace-readme.js +89 -0
  117. package/es6/src/webapi.action.js +20 -0
  118. package/es6/src/webapi.command.js +35 -0
  119. package/package.json +8 -8
  120. package/types/src/add-api.action.d.ts +13 -0
  121. package/types/src/add-api.command.d.ts +7 -0
  122. package/types/src/add.command.d.ts +6 -0
  123. package/types/src/add.module.d.ts +14 -0
  124. package/types/src/cli.d.ts +2 -0
  125. package/types/src/create.command.d.ts +6 -0
  126. package/types/src/create.module.d.ts +14 -0
  127. package/types/src/domain/prompt.d.ts +4 -0
  128. package/types/src/models/compose.model.d.ts +64 -0
  129. package/types/src/models/config-yaml.model.d.ts +27 -0
  130. package/types/src/models/const.d.ts +20 -0
  131. package/types/src/models/dev-container.model.d.ts +37 -0
  132. package/types/src/models/docker-image.model.d.ts +84 -0
  133. package/types/src/models/env-file.model.d.ts +16 -0
  134. package/types/src/models/gitignore.model.d.ts +7 -0
  135. package/types/src/models/launch-json.model.d.ts +7 -0
  136. package/types/src/models/package-json.model.d.ts +35 -0
  137. package/types/src/models/project.model.d.ts +60 -0
  138. package/{src/models/source-file.ts → types/src/models/source-file.d.ts} +4 -6
  139. package/types/src/models/tsconfig.model.d.ts +5 -0
  140. package/types/src/models/vitest-config.model.d.ts +5 -0
  141. package/types/src/models/vscode-settings.model.d.ts +7 -0
  142. package/types/src/program.d.ts +3 -0
  143. package/{src/resolve-target-dir.ts → types/src/resolve-target-dir.d.ts} +1 -4
  144. package/types/src/services/scaffold.service.d.ts +22 -0
  145. package/types/src/version.d.ts +6 -0
  146. package/types/src/webapi/api-name.d.ts +14 -0
  147. package/types/src/webapi/cli-options.d.ts +6 -0
  148. package/{src/webapi/const.ts → types/src/webapi/const.d.ts} +7 -21
  149. package/types/src/webapi/create-api.d.ts +15 -0
  150. package/types/src/webapi/devcontainer/codebase-rag-mcp.d.ts +32 -0
  151. package/types/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
  152. package/types/src/webapi/devcontainer/host-scripts.d.ts +7 -0
  153. package/types/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
  154. package/types/src/webapi/devcontainer/templates/initialize.sh +169 -0
  155. package/types/src/webapi/devcontainer/templates/post-create.sh +35 -0
  156. package/types/src/webapi/devcontainer/templates/post-start.sh +65 -0
  157. package/types/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
  158. package/types/src/webapi/features/auth.feature.d.ts +10 -0
  159. package/types/src/webapi/features/auth0-cli.d.ts +80 -0
  160. package/types/src/webapi/features/biome-format.d.ts +5 -0
  161. package/types/src/webapi/features/database.feature.d.ts +7 -0
  162. package/types/src/webapi/features/finalize.feature.d.ts +2 -0
  163. package/types/src/webapi/features/postman.feature.d.ts +16 -0
  164. package/types/src/webapi/models/api-package-json.model.d.ts +18 -0
  165. package/types/src/webapi/models/auth-config.model.d.ts +26 -0
  166. package/types/src/webapi/models/controller-source-file.model.d.ts +46 -0
  167. package/types/src/webapi/models/github-ci.model.d.ts +9 -0
  168. package/types/src/webapi/models/main-source-file.model.d.ts +54 -0
  169. package/types/src/webapi/models/production-dockerfile.model.d.ts +23 -0
  170. package/types/src/webapi/models/sample-files.model.d.ts +7 -0
  171. package/types/src/webapi/models/webapi-image.model.d.ts +12 -0
  172. package/types/src/webapi/postman/hello-openapi.d.ts +19 -0
  173. package/types/src/webapi/postman/local-view.d.ts +17 -0
  174. package/types/src/webapi/postman/openapi-to-postman.d.ts +62 -0
  175. package/types/src/webapi/workspace-readme.d.ts +18 -0
  176. package/types/src/webapi.action.d.ts +14 -0
  177. package/types/src/webapi.command.d.ts +11 -0
  178. package/src/add-api.action.ts +0 -25
  179. package/src/add-api.command.ts +0 -31
  180. package/src/add.command.ts +0 -20
  181. package/src/add.module.ts +0 -11
  182. package/src/cli.ts +0 -4
  183. package/src/create.command.ts +0 -20
  184. package/src/create.module.ts +0 -11
  185. package/src/domain/prompt.ts +0 -50
  186. package/src/models/compose.model.ts +0 -205
  187. package/src/models/config-yaml.model.ts +0 -83
  188. package/src/models/const.ts +0 -20
  189. package/src/models/dev-container.model.ts +0 -136
  190. package/src/models/docker-image.model.ts +0 -343
  191. package/src/models/env-file.model.ts +0 -45
  192. package/src/models/gitignore.model.ts +0 -35
  193. package/src/models/launch-json.model.ts +0 -60
  194. package/src/models/package-json.model.ts +0 -169
  195. package/src/models/project.model.ts +0 -141
  196. package/src/models/tsconfig.model.ts +0 -29
  197. package/src/models/vitest-config.model.ts +0 -26
  198. package/src/models/vscode-settings.model.ts +0 -24
  199. package/src/program.ts +0 -63
  200. package/src/services/scaffold.service.ts +0 -89
  201. package/src/version.ts +0 -56
  202. package/src/webapi/api-name.ts +0 -73
  203. package/src/webapi/cli-options.ts +0 -56
  204. package/src/webapi/create-api.ts +0 -275
  205. package/src/webapi/devcontainer/host-scripts.ts +0 -35
  206. package/src/webapi/features/auth.feature.ts +0 -454
  207. package/src/webapi/features/auth0-cli.ts +0 -421
  208. package/src/webapi/features/biome-format.ts +0 -34
  209. package/src/webapi/features/database.feature.ts +0 -522
  210. package/src/webapi/features/finalize.feature.ts +0 -112
  211. package/src/webapi/features/postman.feature.ts +0 -287
  212. package/src/webapi/models/api-package-json.model.ts +0 -60
  213. package/src/webapi/models/auth-config.model.ts +0 -36
  214. package/src/webapi/models/controller-source-file.model.ts +0 -232
  215. package/src/webapi/models/github-ci.model.ts +0 -188
  216. package/src/webapi/models/main-source-file.model.ts +0 -208
  217. package/src/webapi/models/production-dockerfile.model.ts +0 -162
  218. package/src/webapi/models/sample-files.model.ts +0 -45
  219. package/src/webapi/models/webapi-image.model.ts +0 -21
  220. package/src/webapi/postman/hello-openapi.ts +0 -92
  221. package/src/webapi/postman/local-view.ts +0 -195
  222. package/src/webapi/postman/openapi-to-postman.ts +0 -208
  223. package/src/webapi/workspace-readme.ts +0 -192
  224. package/src/webapi.action.ts +0 -22
  225. package/src/webapi.command.ts +0 -41
  226. package/tests/auth-postman.wiring.spec.ts +0 -263
  227. package/tests/auth0-cli.spec.ts +0 -232
  228. package/tests/biome-format.spec.ts +0 -49
  229. package/tests/cli.integration.spec.ts +0 -658
  230. package/tests/compose.model.spec.ts +0 -51
  231. package/tests/container-image.model.spec.ts +0 -162
  232. package/tests/dev-container.model.spec.ts +0 -29
  233. package/tests/devcontainer-base-image.spec.ts +0 -32
  234. package/tests/hello-di-inject.scaffold.spec.ts +0 -18
  235. package/tests/hello-route.contract.spec.ts +0 -94
  236. package/tests/package-json.order.spec.ts +0 -59
  237. package/tests/postman-from-openapi.spec.ts +0 -197
  238. package/tests/seed-devcontainer-templates.ts +0 -40
  239. package/tests/webapi/devcontainer/codebase-rag-mcp.spec.ts +0 -96
  240. /package/{src/index.ts → types/src/index.d.ts} +0 -0
@@ -0,0 +1,324 @@
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 POSTMAN_CALLBACKS () {
13
+ return POSTMAN_CALLBACKS;
14
+ },
15
+ get POSTMAN_SCOPES () {
16
+ return POSTMAN_SCOPES;
17
+ },
18
+ get PostmanFeature () {
19
+ return PostmanFeature;
20
+ },
21
+ get buildHelloOpenApiDocument () {
22
+ return _helloopenapi.buildHelloOpenApiDocument;
23
+ },
24
+ get buildHybridPostmanCollection () {
25
+ return buildHybridPostmanCollection;
26
+ }
27
+ });
28
+ const _nodecrypto = require("node:crypto");
29
+ const _nodefs = require("node:fs");
30
+ const _nodepath = require("node:path");
31
+ const _prompt = require("../../domain/prompt.js");
32
+ const _const = require("../../models/const.js");
33
+ const _helloopenapi = require("../postman/hello-openapi.js");
34
+ const _localview = require("../postman/local-view.js");
35
+ const _openapitopostman = require("../postman/openapi-to-postman.js");
36
+ const _auth0cli = /*#__PURE__*/ _interop_require_wildcard(require("./auth0-cli.js"));
37
+ function _getRequireWildcardCache(nodeInterop) {
38
+ if (typeof WeakMap !== "function") return null;
39
+ var cacheBabelInterop = new WeakMap();
40
+ var cacheNodeInterop = new WeakMap();
41
+ return (_getRequireWildcardCache = function(nodeInterop) {
42
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
43
+ })(nodeInterop);
44
+ }
45
+ function _interop_require_wildcard(obj, nodeInterop) {
46
+ if (!nodeInterop && obj && obj.__esModule) {
47
+ return obj;
48
+ }
49
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
50
+ return {
51
+ default: obj
52
+ };
53
+ }
54
+ var cache = _getRequireWildcardCache(nodeInterop);
55
+ if (cache && cache.has(obj)) {
56
+ return cache.get(obj);
57
+ }
58
+ var newObj = {
59
+ __proto__: null
60
+ };
61
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
62
+ for(var key in obj){
63
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
64
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
65
+ if (desc && (desc.get || desc.set)) {
66
+ Object.defineProperty(newObj, key, desc);
67
+ } else {
68
+ newObj[key] = obj[key];
69
+ }
70
+ }
71
+ }
72
+ newObj.default = obj;
73
+ if (cache) {
74
+ cache.set(obj, newObj);
75
+ }
76
+ return newObj;
77
+ }
78
+ /** Postman OAuth callback URLs (popup + "Authorize using browser"). */ const POSTMAN_CALLBACKS = [
79
+ "https://oauth.pstmn.io/v1/callback",
80
+ "https://oauth.pstmn.io/v1/browser-callback"
81
+ ];
82
+ /** Scopes requested for Auth0 access tokens (OIDC + Hello CASL permissions). */ const POSTMAN_SCOPES = [
83
+ "openid",
84
+ "profile",
85
+ "email",
86
+ "read:Hello",
87
+ "create:Hello",
88
+ "update:Hello",
89
+ "delete:Hello"
90
+ ].join(" ");
91
+ const COLLECTION_DESCRIPTION = "Open the project root in Postman Local View (not the postman/ folder). " + "Select the Local environment, then Authorization → Get New Access Token (PKCE). " + "Routes are generated from OpenAPI; Auth0 overlay is hand-authored.";
92
+ async function getOptions(_workspace, cliOptions) {
93
+ if (cliOptions.postmanProvider != null) return {};
94
+ const choices = [
95
+ {
96
+ label: "none",
97
+ description: "skip"
98
+ },
99
+ {
100
+ label: "local",
101
+ description: "Local View / Native Git files (no API key)"
102
+ },
103
+ {
104
+ label: "api",
105
+ description: "also upload to Postman.com (needs API key)"
106
+ }
107
+ ];
108
+ const selected = await (0, _prompt.pick)("\n Postman: ", choices, (c)=>`${c.label} — ${c.description}`);
109
+ const provider = selected?.label ?? "none";
110
+ if (provider === "none") return {
111
+ postmanProvider: "none"
112
+ };
113
+ if (provider === "local") return {
114
+ postmanProvider: "local"
115
+ };
116
+ const apiKey = process.env.POSTMAN_API_KEY ?? await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../../domain/prompt.js"))).then((m)=>m.ask("\n Postman API key (app.getpostman.com/settings/me/api-keys): "));
117
+ const headers = {
118
+ "X-Api-Key": apiKey,
119
+ "Content-Type": "application/json"
120
+ };
121
+ const wsRes = await fetch("https://api.getpostman.com/workspaces", {
122
+ headers
123
+ });
124
+ if (!wsRes.ok) {
125
+ console.error("\n Postman API key invalid — falling back to local files.");
126
+ return {
127
+ postmanProvider: "local"
128
+ };
129
+ }
130
+ const { workspaces } = await wsRes.json();
131
+ const wsChoices = [
132
+ {
133
+ label: "<new workspace>",
134
+ id: null
135
+ },
136
+ ...workspaces.map((w)=>({
137
+ label: `${w.name} (${w.type})`,
138
+ id: w.id
139
+ }))
140
+ ];
141
+ const wsPicked = await (0, _prompt.pick)("\n Postman workspace: ", wsChoices, (c)=>c.label);
142
+ let workspaceId;
143
+ if (!wsPicked || wsPicked.id === null) {
144
+ const { ask } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../../domain/prompt.js")));
145
+ const wsName = await ask(` Workspace name: `);
146
+ const createRes = await fetch("https://api.getpostman.com/workspaces", {
147
+ method: "POST",
148
+ headers,
149
+ body: JSON.stringify({
150
+ workspace: {
151
+ name: wsName,
152
+ type: "personal"
153
+ }
154
+ })
155
+ });
156
+ const { workspace: ws } = await createRes.json();
157
+ workspaceId = ws.id;
158
+ console.log(` ✓ Workspace created: ${wsName}`);
159
+ } else {
160
+ workspaceId = wsPicked.id;
161
+ }
162
+ return {
163
+ postmanProvider: "api",
164
+ apiKey,
165
+ workspaceId
166
+ };
167
+ }
168
+ async function buildHybridPostmanCollection(projectName, auth) {
169
+ const openapi = (0, _helloopenapi.buildHelloOpenApiDocument)(projectName);
170
+ const base = await (0, _openapitopostman.openApiToPostmanCollection)(openapi);
171
+ if (base.info._postman_id == null) {
172
+ base.info._postman_id = (0, _nodecrypto.randomUUID)();
173
+ }
174
+ return (0, _openapitopostman.applyPostmanAuthOverlay)(base, projectName, auth, {
175
+ callbacks: POSTMAN_CALLBACKS,
176
+ scopes: POSTMAN_SCOPES,
177
+ description: COLLECTION_DESCRIPTION
178
+ });
179
+ }
180
+ /** Read a previously scaffolded auth0ClientId so re-scaffold never blanks it. */ function readExistingSpaClientId(targetDir, projectName) {
181
+ const envPath = (0, _nodepath.join)(targetDir, "postman/environments", `${projectName}-Local.environment.yaml`);
182
+ if (!(0, _nodefs.existsSync)(envPath)) return undefined;
183
+ const text = (0, _nodefs.readFileSync)(envPath, "utf8");
184
+ const match = text.match(/key:\s*auth0ClientId\s*\n\s*value:\s*["']?([^"'\n]+)/);
185
+ const value = match?.[1]?.trim();
186
+ return value && value.length > 0 ? value : undefined;
187
+ }
188
+ /**
189
+ * Resolve the Postman SPA client id. Never returns empty — preserves an existing
190
+ * env value on Auth0 failure, otherwise throws so we do not write a blank env.
191
+ */ function resolveSpaClientId(workspace) {
192
+ const appName = `${workspace.name} Postman`;
193
+ try {
194
+ const app = _auth0cli.ensureSpaApp(appName, [
195
+ ...POSTMAN_CALLBACKS
196
+ ]);
197
+ console.log(app.reused ? ` ✓ Reusing Auth0 SPA app for Postman PKCE (${app.client_id})` : ` ✓ Auth0 SPA app created for Postman PKCE (${app.client_id})`);
198
+ try {
199
+ _auth0cli.enableConnectionForClient(_auth0cli.DB_CONNECTION_NAME, app.client_id);
200
+ console.log(` ✓ Enabled ${_auth0cli.DB_CONNECTION_NAME} on Postman SPA`);
201
+ } catch (err) {
202
+ console.error(` ✗ Failed to enable DB connection on SPA: ${err instanceof Error ? err.message : err}`);
203
+ }
204
+ return app.client_id;
205
+ } catch (err) {
206
+ const existing = readExistingSpaClientId(workspace.targetDir, workspace.name);
207
+ if (existing) {
208
+ console.error(` ✗ Failed to ensure Auth0 SPA app (${err instanceof Error ? err.message : err})`);
209
+ console.log(` ✓ Keeping existing auth0ClientId from Postman environment (${existing})`);
210
+ return existing;
211
+ }
212
+ const detail = err instanceof Error ? err.message : String(err);
213
+ // Entity-limit messages are already actionable; avoid burying them.
214
+ if (_auth0cli.isAuth0EntityLimitError(err)) {
215
+ throw new Error(detail);
216
+ }
217
+ throw new Error(`Failed to ensure Auth0 SPA app for Postman — auth0ClientId would be empty: ${detail}`);
218
+ }
219
+ }
220
+ async function scaffold(workspace, options) {
221
+ if (options.postmanProvider === "none" || options.postmanProvider == null) return;
222
+ const authConfigModel = workspace.getModel(_const.WELL_KNOWN_FILES.AUTH_CONFIG);
223
+ const authCfg = authConfigModel?.config;
224
+ const spaClientId = authCfg?.issuerBaseUrl ? resolveSpaClientId(workspace) : undefined;
225
+ const auth0Env = authCfg?.issuerBaseUrl ? {
226
+ auth0Domain: authCfg.issuerBaseUrl.replace(/^https?:\/\//, ""),
227
+ auth0Audience: authCfg.audience,
228
+ auth0ClientId: spaClientId
229
+ } : undefined;
230
+ const projectName = workspace.name;
231
+ const envName = `${projectName} Local`;
232
+ const collection = await buildHybridPostmanCollection(projectName, auth0Env);
233
+ const localFiles = (0, _localview.buildLocalViewFilesFromCollection)(collection, projectName, auth0Env, {
234
+ callbacks: POSTMAN_CALLBACKS,
235
+ scopes: POSTMAN_SCOPES
236
+ });
237
+ const envYaml = (0, _localview.buildEnvironmentYaml)(envName, auth0Env, {
238
+ callbacks: POSTMAN_CALLBACKS,
239
+ scopes: POSTMAN_SCOPES
240
+ });
241
+ workspace.addFile({
242
+ files: ()=>[
243
+ {
244
+ filePath: ".postman/resources.yaml",
245
+ content: [
246
+ "# Open this project root in Postman (Files → Open folder), not the postman/ subfolder.",
247
+ "# Postman fills workspace.id when you connect Local View.",
248
+ "#",
249
+ "# All resources under postman/ are registered automatically.",
250
+ "# Route requests are generated from OpenAPI; Auth0 overlay is hand-authored.",
251
+ ""
252
+ ].join("\n")
253
+ },
254
+ {
255
+ filePath: `postman/environments/${projectName}-Local.environment.yaml`,
256
+ content: envYaml
257
+ },
258
+ ...localFiles
259
+ ]
260
+ });
261
+ if (options.postmanProvider === "api" && options.apiKey) {
262
+ const headers = {
263
+ "X-Api-Key": options.apiKey,
264
+ "Content-Type": "application/json"
265
+ };
266
+ const colRes = await fetch(`https://api.getpostman.com/collections?workspace=${options.workspaceId}`, {
267
+ method: "POST",
268
+ headers,
269
+ body: JSON.stringify({
270
+ collection
271
+ })
272
+ });
273
+ if (colRes.ok) {
274
+ console.log(" ✓ Postman collection uploaded");
275
+ } else {
276
+ console.error(" ✗ Failed to upload Postman collection");
277
+ }
278
+ const envValues = [
279
+ {
280
+ key: "baseUrl",
281
+ value: "http://localhost:3000",
282
+ enabled: true
283
+ },
284
+ ...auth0Env?.auth0Domain ? [
285
+ {
286
+ key: "auth0Domain",
287
+ value: auth0Env.auth0Domain,
288
+ enabled: true
289
+ },
290
+ {
291
+ key: "auth0Audience",
292
+ value: auth0Env.auth0Audience ?? "",
293
+ enabled: true
294
+ },
295
+ {
296
+ key: "auth0ClientId",
297
+ value: auth0Env.auth0ClientId ?? "",
298
+ enabled: true
299
+ }
300
+ ] : []
301
+ ];
302
+ const envRes = await fetch(`https://api.getpostman.com/environments?workspace=${options.workspaceId}`, {
303
+ method: "POST",
304
+ headers,
305
+ body: JSON.stringify({
306
+ environment: {
307
+ name: envName,
308
+ values: envValues
309
+ }
310
+ })
311
+ });
312
+ if (envRes.ok) {
313
+ console.log(" ✓ Postman environment uploaded");
314
+ } else {
315
+ console.error(" ✗ Failed to upload Postman environment");
316
+ }
317
+ }
318
+ }
319
+ const PostmanFeature = {
320
+ getOptions,
321
+ scaffold
322
+ };
323
+
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvZmVhdHVyZXMvcG9zdG1hbi5mZWF0dXJlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGljayB9IGZyb20gXCIuLi8uLi9kb21haW4vcHJvbXB0LmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB0eXBlIHsgQXV0aENvbmZpZ01vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9hdXRoLWNvbmZpZy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgYnVpbGRIZWxsb09wZW5BcGlEb2N1bWVudCB9IGZyb20gXCIuLi9wb3N0bWFuL2hlbGxvLW9wZW5hcGkuanNcIjtcbmltcG9ydCB7XG5cdGJ1aWxkRW52aXJvbm1lbnRZYW1sLFxuXHRidWlsZExvY2FsVmlld0ZpbGVzRnJvbUNvbGxlY3Rpb24sXG59IGZyb20gXCIuLi9wb3N0bWFuL2xvY2FsLXZpZXcuanNcIjtcbmltcG9ydCB7XG5cdHR5cGUgQXV0aDBFbnYsXG5cdGFwcGx5UG9zdG1hbkF1dGhPdmVybGF5LFxuXHRvcGVuQXBpVG9Qb3N0bWFuQ29sbGVjdGlvbixcbn0gZnJvbSBcIi4uL3Bvc3RtYW4vb3BlbmFwaS10by1wb3N0bWFuLmpzXCI7XG5pbXBvcnQgKiBhcyBhdXRoMENsaSBmcm9tIFwiLi9hdXRoMC1jbGkuanNcIjtcblxuLyoqIFBvc3RtYW4gT0F1dGggY2FsbGJhY2sgVVJMcyAocG9wdXAgKyBcIkF1dGhvcml6ZSB1c2luZyBicm93c2VyXCIpLiAqL1xuY29uc3QgUE9TVE1BTl9DQUxMQkFDS1MgPSBbXG5cdFwiaHR0cHM6Ly9vYXV0aC5wc3Rtbi5pby92MS9jYWxsYmFja1wiLFxuXHRcImh0dHBzOi8vb2F1dGgucHN0bW4uaW8vdjEvYnJvd3Nlci1jYWxsYmFja1wiLFxuXSBhcyBjb25zdDtcblxuLyoqIFNjb3BlcyByZXF1ZXN0ZWQgZm9yIEF1dGgwIGFjY2VzcyB0b2tlbnMgKE9JREMgKyBIZWxsbyBDQVNMIHBlcm1pc3Npb25zKS4gKi9cbmNvbnN0IFBPU1RNQU5fU0NPUEVTID0gW1xuXHRcIm9wZW5pZFwiLFxuXHRcInByb2ZpbGVcIixcblx0XCJlbWFpbFwiLFxuXHRcInJlYWQ6SGVsbG9cIixcblx0XCJjcmVhdGU6SGVsbG9cIixcblx0XCJ1cGRhdGU6SGVsbG9cIixcblx0XCJkZWxldGU6SGVsbG9cIixcbl0uam9pbihcIiBcIik7XG5cbmNvbnN0IENPTExFQ1RJT05fREVTQ1JJUFRJT04gPVxuXHRcIk9wZW4gdGhlIHByb2plY3Qgcm9vdCBpbiBQb3N0bWFuIExvY2FsIFZpZXcgKG5vdCB0aGUgcG9zdG1hbi8gZm9sZGVyKS4gXCIgK1xuXHRcIlNlbGVjdCB0aGUgTG9jYWwgZW52aXJvbm1lbnQsIHRoZW4gQXV0aG9yaXphdGlvbiDihpIgR2V0IE5ldyBBY2Nlc3MgVG9rZW4gKFBLQ0UpLiBcIiArXG5cdFwiUm91dGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSBPcGVuQVBJOyBBdXRoMCBvdmVybGF5IGlzIGhhbmQtYXV0aG9yZWQuXCI7XG5cbmV4cG9ydCB0eXBlIFBvc3RtYW5PcHRpb25zID0ge1xuXHRwb3N0bWFuUHJvdmlkZXI/OiBcImFwaVwiIHwgXCJsb2NhbFwiIHwgXCJub25lXCI7XG5cdGFwaUtleT86IHN0cmluZztcblx0d29ya3NwYWNlSWQ/OiBzdHJpbmc7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRPcHRpb25zKFxuXHRfd29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogUGFydGlhbDxQb3N0bWFuT3B0aW9ucz4sXG4pOiBQcm9taXNlPFBhcnRpYWw8UG9zdG1hbk9wdGlvbnM+PiB7XG5cdGlmIChjbGlPcHRpb25zLnBvc3RtYW5Qcm92aWRlciAhPSBudWxsKSByZXR1cm4ge307XG5cblx0Y29uc3QgY2hvaWNlcyA9IFtcblx0XHR7IGxhYmVsOiBcIm5vbmVcIiBhcyBjb25zdCwgZGVzY3JpcHRpb246IFwic2tpcFwiIH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IFwibG9jYWxcIiBhcyBjb25zdCxcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkxvY2FsIFZpZXcgLyBOYXRpdmUgR2l0IGZpbGVzIChubyBBUEkga2V5KVwiLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bGFiZWw6IFwiYXBpXCIgYXMgY29uc3QsXG5cdFx0XHRkZXNjcmlwdGlvbjogXCJhbHNvIHVwbG9hZCB0byBQb3N0bWFuLmNvbSAobmVlZHMgQVBJIGtleSlcIixcblx0XHR9LFxuXHRdO1xuXHRjb25zdCBzZWxlY3RlZCA9IGF3YWl0IHBpY2soXG5cdFx0XCJcXG4gIFBvc3RtYW46IFwiLFxuXHRcdGNob2ljZXMsXG5cdFx0KGMpID0+IGAke2MubGFiZWx9IOKAlCAke2MuZGVzY3JpcHRpb259YCxcblx0KTtcblx0Y29uc3QgcHJvdmlkZXIgPSBzZWxlY3RlZD8ubGFiZWwgPz8gXCJub25lXCI7XG5cblx0aWYgKHByb3ZpZGVyID09PSBcIm5vbmVcIikgcmV0dXJuIHsgcG9zdG1hblByb3ZpZGVyOiBcIm5vbmVcIiB9O1xuXHRpZiAocHJvdmlkZXIgPT09IFwibG9jYWxcIikgcmV0dXJuIHsgcG9zdG1hblByb3ZpZGVyOiBcImxvY2FsXCIgfTtcblxuXHRjb25zdCBhcGlLZXkgPVxuXHRcdHByb2Nlc3MuZW52LlBPU1RNQU5fQVBJX0tFWSA/P1xuXHRcdChhd2FpdCBpbXBvcnQoXCIuLi8uLi9kb21haW4vcHJvbXB0LmpzXCIpLnRoZW4oKG0pID0+XG5cdFx0XHRtLmFzayhcIlxcbiAgUG9zdG1hbiBBUEkga2V5IChhcHAuZ2V0cG9zdG1hbi5jb20vc2V0dGluZ3MvbWUvYXBpLWtleXMpOiBcIiksXG5cdFx0KSk7XG5cblx0Y29uc3QgaGVhZGVycyA9IHsgXCJYLUFwaS1LZXlcIjogYXBpS2V5LCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9O1xuXHRjb25zdCB3c1JlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vd29ya3NwYWNlc1wiLCB7IGhlYWRlcnMgfSk7XG5cblx0aWYgKCF3c1Jlcy5vaykge1xuXHRcdGNvbnNvbGUuZXJyb3IoXCJcXG4gIFBvc3RtYW4gQVBJIGtleSBpbnZhbGlkIOKAlCBmYWxsaW5nIGJhY2sgdG8gbG9jYWwgZmlsZXMuXCIpO1xuXHRcdHJldHVybiB7IHBvc3RtYW5Qcm92aWRlcjogXCJsb2NhbFwiIH07XG5cdH1cblxuXHRjb25zdCB7IHdvcmtzcGFjZXMgfSA9IChhd2FpdCB3c1Jlcy5qc29uKCkpIGFzIHtcblx0XHR3b3Jrc3BhY2VzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nIH0+O1xuXHR9O1xuXG5cdHR5cGUgV3NDaG9pY2UgPSB7IGxhYmVsOiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudWxsIH07XG5cdGNvbnN0IHdzQ2hvaWNlczogV3NDaG9pY2VbXSA9IFtcblx0XHR7IGxhYmVsOiBcIjxuZXcgd29ya3NwYWNlPlwiLCBpZDogbnVsbCB9LFxuXHRcdC4uLndvcmtzcGFjZXMubWFwKCh3KSA9PiAoeyBsYWJlbDogYCR7dy5uYW1lfSAoJHt3LnR5cGV9KWAsIGlkOiB3LmlkIH0pKSxcblx0XTtcblxuXHRjb25zdCB3c1BpY2tlZCA9IGF3YWl0IHBpY2soXCJcXG4gIFBvc3RtYW4gd29ya3NwYWNlOiBcIiwgd3NDaG9pY2VzLCAoYykgPT4gYy5sYWJlbCk7XG5cblx0bGV0IHdvcmtzcGFjZUlkOiBzdHJpbmc7XG5cdGlmICghd3NQaWNrZWQgfHwgd3NQaWNrZWQuaWQgPT09IG51bGwpIHtcblx0XHRjb25zdCB7IGFzayB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiKTtcblx0XHRjb25zdCB3c05hbWUgPSBhd2FpdCBhc2soYCAgV29ya3NwYWNlIG5hbWU6IGApO1xuXHRcdGNvbnN0IGNyZWF0ZVJlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vd29ya3NwYWNlc1wiLCB7XG5cdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgd29ya3NwYWNlOiB7IG5hbWU6IHdzTmFtZSwgdHlwZTogXCJwZXJzb25hbFwiIH0gfSksXG5cdFx0fSk7XG5cdFx0Y29uc3QgeyB3b3Jrc3BhY2U6IHdzIH0gPSAoYXdhaXQgY3JlYXRlUmVzLmpzb24oKSkgYXMgeyB3b3Jrc3BhY2U6IHsgaWQ6IHN0cmluZyB9IH07XG5cdFx0d29ya3NwYWNlSWQgPSB3cy5pZDtcblx0XHRjb25zb2xlLmxvZyhgICDinJMgV29ya3NwYWNlIGNyZWF0ZWQ6ICR7d3NOYW1lfWApO1xuXHR9IGVsc2Uge1xuXHRcdHdvcmtzcGFjZUlkID0gd3NQaWNrZWQuaWQ7XG5cdH1cblxuXHRyZXR1cm4geyBwb3N0bWFuUHJvdmlkZXI6IFwiYXBpXCIsIGFwaUtleSwgd29ya3NwYWNlSWQgfTtcbn1cblxuLyoqIEJ1aWxkIFBvc3RtYW4gY29sbGVjdGlvbjogT3BlbkFQSSByb3V0ZXMgKyBBdXRoMCBhdXRoIG92ZXJsYXkuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRIeWJyaWRQb3N0bWFuQ29sbGVjdGlvbihwcm9qZWN0TmFtZTogc3RyaW5nLCBhdXRoPzogQXV0aDBFbnYpIHtcblx0Y29uc3Qgb3BlbmFwaSA9IGJ1aWxkSGVsbG9PcGVuQXBpRG9jdW1lbnQocHJvamVjdE5hbWUpO1xuXHRjb25zdCBiYXNlID0gYXdhaXQgb3BlbkFwaVRvUG9zdG1hbkNvbGxlY3Rpb24ob3BlbmFwaSk7XG5cdGlmIChiYXNlLmluZm8uX3Bvc3RtYW5faWQgPT0gbnVsbCkge1xuXHRcdGJhc2UuaW5mby5fcG9zdG1hbl9pZCA9IHJhbmRvbVVVSUQoKTtcblx0fVxuXHRyZXR1cm4gYXBwbHlQb3N0bWFuQXV0aE92ZXJsYXkoYmFzZSwgcHJvamVjdE5hbWUsIGF1dGgsIHtcblx0XHRjYWxsYmFja3M6IFBPU1RNQU5fQ0FMTEJBQ0tTLFxuXHRcdHNjb3BlczogUE9TVE1BTl9TQ09QRVMsXG5cdFx0ZGVzY3JpcHRpb246IENPTExFQ1RJT05fREVTQ1JJUFRJT04sXG5cdH0pO1xufVxuXG4vKiogUmVhZCBhIHByZXZpb3VzbHkgc2NhZmZvbGRlZCBhdXRoMENsaWVudElkIHNvIHJlLXNjYWZmb2xkIG5ldmVyIGJsYW5rcyBpdC4gKi9cbmZ1bmN0aW9uIHJlYWRFeGlzdGluZ1NwYUNsaWVudElkKHRhcmdldERpcjogc3RyaW5nLCBwcm9qZWN0TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZW52UGF0aCA9IGpvaW4oXG5cdFx0dGFyZ2V0RGlyLFxuXHRcdFwicG9zdG1hbi9lbnZpcm9ubWVudHNcIixcblx0XHRgJHtwcm9qZWN0TmFtZX0tTG9jYWwuZW52aXJvbm1lbnQueWFtbGAsXG5cdCk7XG5cdGlmICghZXhpc3RzU3luYyhlbnZQYXRoKSkgcmV0dXJuIHVuZGVmaW5lZDtcblx0Y29uc3QgdGV4dCA9IHJlYWRGaWxlU3luYyhlbnZQYXRoLCBcInV0ZjhcIik7XG5cdGNvbnN0IG1hdGNoID0gdGV4dC5tYXRjaCgva2V5OlxccyphdXRoMENsaWVudElkXFxzKlxcblxccyp2YWx1ZTpcXHMqW1wiJ10/KFteXCInXFxuXSspLyk7XG5cdGNvbnN0IHZhbHVlID0gbWF0Y2g/LlsxXT8udHJpbSgpO1xuXHRyZXR1cm4gdmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIFBvc3RtYW4gU1BBIGNsaWVudCBpZC4gTmV2ZXIgcmV0dXJucyBlbXB0eSDigJQgcHJlc2VydmVzIGFuIGV4aXN0aW5nXG4gKiBlbnYgdmFsdWUgb24gQXV0aDAgZmFpbHVyZSwgb3RoZXJ3aXNlIHRocm93cyBzbyB3ZSBkbyBub3Qgd3JpdGUgYSBibGFuayBlbnYuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTcGFDbGllbnRJZCh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkKTogc3RyaW5nIHtcblx0Y29uc3QgYXBwTmFtZSA9IGAke3dvcmtzcGFjZS5uYW1lfSBQb3N0bWFuYDtcblx0dHJ5IHtcblx0XHRjb25zdCBhcHAgPSBhdXRoMENsaS5lbnN1cmVTcGFBcHAoYXBwTmFtZSwgWy4uLlBPU1RNQU5fQ0FMTEJBQ0tTXSk7XG5cdFx0Y29uc29sZS5sb2coXG5cdFx0XHRhcHAucmV1c2VkXG5cdFx0XHRcdD8gYCAg4pyTIFJldXNpbmcgQXV0aDAgU1BBIGFwcCBmb3IgUG9zdG1hbiBQS0NFICgke2FwcC5jbGllbnRfaWR9KWBcblx0XHRcdFx0OiBgICDinJMgQXV0aDAgU1BBIGFwcCBjcmVhdGVkIGZvciBQb3N0bWFuIFBLQ0UgKCR7YXBwLmNsaWVudF9pZH0pYCxcblx0XHQpO1xuXHRcdHRyeSB7XG5cdFx0XHRhdXRoMENsaS5lbmFibGVDb25uZWN0aW9uRm9yQ2xpZW50KGF1dGgwQ2xpLkRCX0NPTk5FQ1RJT05fTkFNRSwgYXBwLmNsaWVudF9pZCk7XG5cdFx0XHRjb25zb2xlLmxvZyhgICDinJMgRW5hYmxlZCAke2F1dGgwQ2xpLkRCX0NPTk5FQ1RJT05fTkFNRX0gb24gUG9zdG1hbiBTUEFgKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdGAgIOKclyBGYWlsZWQgdG8gZW5hYmxlIERCIGNvbm5lY3Rpb24gb24gU1BBOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnJ9YCxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBhcHAuY2xpZW50X2lkO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRjb25zdCBleGlzdGluZyA9IHJlYWRFeGlzdGluZ1NwYUNsaWVudElkKHdvcmtzcGFjZS50YXJnZXREaXIsIHdvcmtzcGFjZS5uYW1lKTtcblx0XHRpZiAoZXhpc3RpbmcpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdGAgIOKclyBGYWlsZWQgdG8gZW5zdXJlIEF1dGgwIFNQQSBhcHAgKCR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycn0pYCxcblx0XHRcdCk7XG5cdFx0XHRjb25zb2xlLmxvZyhgICDinJMgS2VlcGluZyBleGlzdGluZyBhdXRoMENsaWVudElkIGZyb20gUG9zdG1hbiBlbnZpcm9ubWVudCAoJHtleGlzdGluZ30pYCk7XG5cdFx0XHRyZXR1cm4gZXhpc3Rpbmc7XG5cdFx0fVxuXHRcdGNvbnN0IGRldGFpbCA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHQvLyBFbnRpdHktbGltaXQgbWVzc2FnZXMgYXJlIGFscmVhZHkgYWN0aW9uYWJsZTsgYXZvaWQgYnVyeWluZyB0aGVtLlxuXHRcdGlmIChhdXRoMENsaS5pc0F1dGgwRW50aXR5TGltaXRFcnJvcihlcnIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZGV0YWlsKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0YEZhaWxlZCB0byBlbnN1cmUgQXV0aDAgU1BBIGFwcCBmb3IgUG9zdG1hbiDigJQgYXV0aDBDbGllbnRJZCB3b3VsZCBiZSBlbXB0eTogJHtkZXRhaWx9YCxcblx0XHQpO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIG9wdGlvbnM6IFBvc3RtYW5PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG5cdGlmIChvcHRpb25zLnBvc3RtYW5Qcm92aWRlciA9PT0gXCJub25lXCIgfHwgb3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT0gbnVsbCkgcmV0dXJuO1xuXG5cdGNvbnN0IGF1dGhDb25maWdNb2RlbCA9IHdvcmtzcGFjZS5nZXRNb2RlbDxBdXRoQ29uZmlnTW9kZWw+KFdFTExfS05PV05fRklMRVMuQVVUSF9DT05GSUcpO1xuXHRjb25zdCBhdXRoQ2ZnID0gYXV0aENvbmZpZ01vZGVsPy5jb25maWc7XG5cblx0Y29uc3Qgc3BhQ2xpZW50SWQgPSBhdXRoQ2ZnPy5pc3N1ZXJCYXNlVXJsID8gcmVzb2x2ZVNwYUNsaWVudElkKHdvcmtzcGFjZSkgOiB1bmRlZmluZWQ7XG5cblx0Y29uc3QgYXV0aDBFbnY6IEF1dGgwRW52IHwgdW5kZWZpbmVkID0gYXV0aENmZz8uaXNzdWVyQmFzZVVybFxuXHRcdD8ge1xuXHRcdFx0XHRhdXRoMERvbWFpbjogYXV0aENmZy5pc3N1ZXJCYXNlVXJsLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgXCJcIiksXG5cdFx0XHRcdGF1dGgwQXVkaWVuY2U6IGF1dGhDZmcuYXVkaWVuY2UsXG5cdFx0XHRcdGF1dGgwQ2xpZW50SWQ6IHNwYUNsaWVudElkLFxuXHRcdFx0fVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IHByb2plY3ROYW1lID0gd29ya3NwYWNlLm5hbWU7XG5cdGNvbnN0IGVudk5hbWUgPSBgJHtwcm9qZWN0TmFtZX0gTG9jYWxgO1xuXHRjb25zdCBjb2xsZWN0aW9uID0gYXdhaXQgYnVpbGRIeWJyaWRQb3N0bWFuQ29sbGVjdGlvbihwcm9qZWN0TmFtZSwgYXV0aDBFbnYpO1xuXHRjb25zdCBsb2NhbEZpbGVzID0gYnVpbGRMb2NhbFZpZXdGaWxlc0Zyb21Db2xsZWN0aW9uKGNvbGxlY3Rpb24sIHByb2plY3ROYW1lLCBhdXRoMEVudiwge1xuXHRcdGNhbGxiYWNrczogUE9TVE1BTl9DQUxMQkFDS1MsXG5cdFx0c2NvcGVzOiBQT1NUTUFOX1NDT1BFUyxcblx0fSk7XG5cdGNvbnN0IGVudllhbWwgPSBidWlsZEVudmlyb25tZW50WWFtbChlbnZOYW1lLCBhdXRoMEVudiwge1xuXHRcdGNhbGxiYWNrczogUE9TVE1BTl9DQUxMQkFDS1MsXG5cdFx0c2NvcGVzOiBQT1NUTUFOX1NDT1BFUyxcblx0fSk7XG5cblx0d29ya3NwYWNlLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5wb3N0bWFuL3Jlc291cmNlcy55YW1sXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IFtcblx0XHRcdFx0XHRcIiMgT3BlbiB0aGlzIHByb2plY3Qgcm9vdCBpbiBQb3N0bWFuIChGaWxlcyDihpIgT3BlbiBmb2xkZXIpLCBub3QgdGhlIHBvc3RtYW4vIHN1YmZvbGRlci5cIixcblx0XHRcdFx0XHRcIiMgUG9zdG1hbiBmaWxscyB3b3Jrc3BhY2UuaWQgd2hlbiB5b3UgY29ubmVjdCBMb2NhbCBWaWV3LlwiLFxuXHRcdFx0XHRcdFwiI1wiLFxuXHRcdFx0XHRcdFwiIyBBbGwgcmVzb3VyY2VzIHVuZGVyIHBvc3RtYW4vIGFyZSByZWdpc3RlcmVkIGF1dG9tYXRpY2FsbHkuXCIsXG5cdFx0XHRcdFx0XCIjIFJvdXRlIHJlcXVlc3RzIGFyZSBnZW5lcmF0ZWQgZnJvbSBPcGVuQVBJOyBBdXRoMCBvdmVybGF5IGlzIGhhbmQtYXV0aG9yZWQuXCIsXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XS5qb2luKFwiXFxuXCIpLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IGBwb3N0bWFuL2Vudmlyb25tZW50cy8ke3Byb2plY3ROYW1lfS1Mb2NhbC5lbnZpcm9ubWVudC55YW1sYCxcblx0XHRcdFx0Y29udGVudDogZW52WWFtbCxcblx0XHRcdH0sXG5cdFx0XHQuLi5sb2NhbEZpbGVzLFxuXHRcdF0sXG5cdH0pO1xuXG5cdGlmIChvcHRpb25zLnBvc3RtYW5Qcm92aWRlciA9PT0gXCJhcGlcIiAmJiBvcHRpb25zLmFwaUtleSkge1xuXHRcdGNvbnN0IGhlYWRlcnMgPSB7IFwiWC1BcGktS2V5XCI6IG9wdGlvbnMuYXBpS2V5LCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9O1xuXG5cdFx0Y29uc3QgY29sUmVzID0gYXdhaXQgZmV0Y2goXG5cdFx0XHRgaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vY29sbGVjdGlvbnM/d29ya3NwYWNlPSR7b3B0aW9ucy53b3Jrc3BhY2VJZH1gLFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeSh7IGNvbGxlY3Rpb24gfSksXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0aWYgKGNvbFJlcy5vaykge1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBQb3N0bWFuIGNvbGxlY3Rpb24gdXBsb2FkZWRcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCIgIOKclyBGYWlsZWQgdG8gdXBsb2FkIFBvc3RtYW4gY29sbGVjdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBlbnZWYWx1ZXMgPSBbXG5cdFx0XHR7IGtleTogXCJiYXNlVXJsXCIsIHZhbHVlOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiLCBlbmFibGVkOiB0cnVlIH0sXG5cdFx0XHQuLi4oYXV0aDBFbnY/LmF1dGgwRG9tYWluXG5cdFx0XHRcdD8gW1xuXHRcdFx0XHRcdFx0eyBrZXk6IFwiYXV0aDBEb21haW5cIiwgdmFsdWU6IGF1dGgwRW52LmF1dGgwRG9tYWluLCBlbmFibGVkOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHR7IGtleTogXCJhdXRoMEF1ZGllbmNlXCIsIHZhbHVlOiBhdXRoMEVudi5hdXRoMEF1ZGllbmNlID8/IFwiXCIsIGVuYWJsZWQ6IHRydWUgfSxcblx0XHRcdFx0XHRcdHsga2V5OiBcImF1dGgwQ2xpZW50SWRcIiwgdmFsdWU6IGF1dGgwRW52LmF1dGgwQ2xpZW50SWQgPz8gXCJcIiwgZW5hYmxlZDogdHJ1ZSB9LFxuXHRcdFx0XHRcdF1cblx0XHRcdFx0OiBbXSksXG5cdFx0XTtcblx0XHRjb25zdCBlbnZSZXMgPSBhd2FpdCBmZXRjaChcblx0XHRcdGBodHRwczovL2FwaS5nZXRwb3N0bWFuLmNvbS9lbnZpcm9ubWVudHM/d29ya3NwYWNlPSR7b3B0aW9ucy53b3Jrc3BhY2VJZH1gLFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0ZW52aXJvbm1lbnQ6IHsgbmFtZTogZW52TmFtZSwgdmFsdWVzOiBlbnZWYWx1ZXMgfSxcblx0XHRcdFx0fSksXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0aWYgKGVudlJlcy5vaykge1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBQb3N0bWFuIGVudmlyb25tZW50IHVwbG9hZGVkXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiICDinJcgRmFpbGVkIHRvIHVwbG9hZCBQb3N0bWFuIGVudmlyb25tZW50XCIpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgY29uc3QgUG9zdG1hbkZlYXR1cmU6IEZlYXR1cmU8UG9zdG1hbk9wdGlvbnM+ID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCB9O1xuZXhwb3J0IHsgYnVpbGRIZWxsb09wZW5BcGlEb2N1bWVudCB9IGZyb20gXCIuLi9wb3N0bWFuL2hlbGxvLW9wZW5hcGkuanNcIjtcbmV4cG9ydCB7IFBPU1RNQU5fQ0FMTEJBQ0tTLCBQT1NUTUFOX1NDT1BFUyB9O1xuIl0sIm5hbWVzIjpbIlBPU1RNQU5fQ0FMTEJBQ0tTIiwiUE9TVE1BTl9TQ09QRVMiLCJQb3N0bWFuRmVhdHVyZSIsImJ1aWxkSGVsbG9PcGVuQXBpRG9jdW1lbnQiLCJidWlsZEh5YnJpZFBvc3RtYW5Db2xsZWN0aW9uIiwiam9pbiIsIkNPTExFQ1RJT05fREVTQ1JJUFRJT04iLCJnZXRPcHRpb25zIiwiX3dvcmtzcGFjZSIsImNsaU9wdGlvbnMiLCJwb3N0bWFuUHJvdmlkZXIiLCJjaG9pY2VzIiwibGFiZWwiLCJkZXNjcmlwdGlvbiIsInNlbGVjdGVkIiwicGljayIsImMiLCJwcm92aWRlciIsImFwaUtleSIsInByb2Nlc3MiLCJlbnYiLCJQT1NUTUFOX0FQSV9LRVkiLCJ0aGVuIiwibSIsImFzayIsImhlYWRlcnMiLCJ3c1JlcyIsImZldGNoIiwib2siLCJjb25zb2xlIiwiZXJyb3IiLCJ3b3Jrc3BhY2VzIiwianNvbiIsIndzQ2hvaWNlcyIsImlkIiwibWFwIiwidyIsIm5hbWUiLCJ0eXBlIiwid3NQaWNrZWQiLCJ3b3Jrc3BhY2VJZCIsIndzTmFtZSIsImNyZWF0ZVJlcyIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5Iiwid29ya3NwYWNlIiwid3MiLCJsb2ciLCJwcm9qZWN0TmFtZSIsImF1dGgiLCJvcGVuYXBpIiwiYmFzZSIsIm9wZW5BcGlUb1Bvc3RtYW5Db2xsZWN0aW9uIiwiaW5mbyIsIl9wb3N0bWFuX2lkIiwicmFuZG9tVVVJRCIsImFwcGx5UG9zdG1hbkF1dGhPdmVybGF5IiwiY2FsbGJhY2tzIiwic2NvcGVzIiwicmVhZEV4aXN0aW5nU3BhQ2xpZW50SWQiLCJ0YXJnZXREaXIiLCJlbnZQYXRoIiwiZXhpc3RzU3luYyIsInVuZGVmaW5lZCIsInRleHQiLCJyZWFkRmlsZVN5bmMiLCJtYXRjaCIsInZhbHVlIiwidHJpbSIsImxlbmd0aCIsInJlc29sdmVTcGFDbGllbnRJZCIsImFwcE5hbWUiLCJhcHAiLCJhdXRoMENsaSIsImVuc3VyZVNwYUFwcCIsInJldXNlZCIsImNsaWVudF9pZCIsImVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQiLCJEQl9DT05ORUNUSU9OX05BTUUiLCJlcnIiLCJFcnJvciIsIm1lc3NhZ2UiLCJleGlzdGluZyIsImRldGFpbCIsIlN0cmluZyIsImlzQXV0aDBFbnRpdHlMaW1pdEVycm9yIiwic2NhZmZvbGQiLCJvcHRpb25zIiwiYXV0aENvbmZpZ01vZGVsIiwiZ2V0TW9kZWwiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiQVVUSF9DT05GSUciLCJhdXRoQ2ZnIiwiY29uZmlnIiwic3BhQ2xpZW50SWQiLCJpc3N1ZXJCYXNlVXJsIiwiYXV0aDBFbnYiLCJhdXRoMERvbWFpbiIsInJlcGxhY2UiLCJhdXRoMEF1ZGllbmNlIiwiYXVkaWVuY2UiLCJhdXRoMENsaWVudElkIiwiZW52TmFtZSIsImNvbGxlY3Rpb24iLCJsb2NhbEZpbGVzIiwiYnVpbGRMb2NhbFZpZXdGaWxlc0Zyb21Db2xsZWN0aW9uIiwiZW52WWFtbCIsImJ1aWxkRW52aXJvbm1lbnRZYW1sIiwiYWRkRmlsZSIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiY29sUmVzIiwiZW52VmFsdWVzIiwia2V5IiwiZW5hYmxlZCIsImVudlJlcyIsImVudmlyb25tZW50IiwidmFsdWVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQThSU0E7ZUFBQUE7O1FBQW1CQztlQUFBQTs7UUFGZkM7ZUFBQUE7O1FBQ0pDO2VBQUFBLHVDQUF5Qjs7UUFwS1pDO2VBQUFBOzs7NEJBekhLO3dCQUNjOzBCQUNwQjt3QkFDQTt1QkFDWTs4QkFJUzsyQkFJbkM7a0NBS0E7a0VBQ21COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFMUIscUVBQXFFLEdBQ3JFLE1BQU1KLG9CQUFvQjtJQUN6QjtJQUNBO0NBQ0E7QUFFRCw4RUFBOEUsR0FDOUUsTUFBTUMsaUJBQWlCO0lBQ3RCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0EsQ0FBQ0ksSUFBSSxDQUFDO0FBRVAsTUFBTUMseUJBQ0wsNEVBQ0EscUZBQ0E7QUFRRCxlQUFlQyxXQUNkQyxVQUE2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
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ApiPackageJson", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ApiPackageJson;
9
+ }
10
+ });
11
+ const _const = require("../../models/const.js");
12
+ const _packagejsonmodel = require("../../models/package-json.model.js");
13
+ const _version = require("../../version.js");
14
+ class ApiPackageJson {
15
+ workspaceName;
16
+ apiName;
17
+ key = _const.WELL_KNOWN_FILES.API_PACKAGE_JSON;
18
+ _dependencies;
19
+ _devDependencies = {};
20
+ constructor(workspaceName, apiName = "api"){
21
+ this.workspaceName = workspaceName;
22
+ this.apiName = apiName;
23
+ this._dependencies = {
24
+ "@decohere/cortex": _version.CREATE_VERSION,
25
+ "@decohere/crucible": _version.CREATE_VERSION
26
+ };
27
+ }
28
+ addDependency(name, version) {
29
+ this._dependencies[name] = version;
30
+ return this;
31
+ }
32
+ addDevDependency(name, version) {
33
+ this._devDependencies[name] = version;
34
+ return this;
35
+ }
36
+ files() {
37
+ const pkg = {
38
+ name: `@${this.workspaceName}/${this.apiName}`,
39
+ version: "0.0.1",
40
+ private: true,
41
+ type: "module",
42
+ main: "src/main.ts",
43
+ scripts: {
44
+ lint: "biome check --write ."
45
+ },
46
+ dependencies: (0, _packagejsonmodel.sortStringMap)(this._dependencies)
47
+ };
48
+ if (Object.keys(this._devDependencies).length > 0) {
49
+ pkg.devDependencies = (0, _packagejsonmodel.sortStringMap)(this._devDependencies);
50
+ }
51
+ return [
52
+ {
53
+ filePath: "package.json",
54
+ content: JSON.stringify(pkg, null, 2)
55
+ }
56
+ ];
57
+ }
58
+ }
59
+
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL2FwaS1wYWNrYWdlLWpzb24ubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uc3QuanNcIjtcbmltcG9ydCB7IHNvcnRTdHJpbmdNYXAgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zb3VyY2UtZmlsZS5qc1wiO1xuaW1wb3J0IHsgQ1JFQVRFX1ZFUlNJT04gfSBmcm9tIFwiLi4vLi4vdmVyc2lvbi5qc1wiO1xuXG4vKipcbiAqIEJ1aWxkZXIgZm9yIGBwcm9qZWN0cy88YXBpPi9wYWNrYWdlLmpzb25gLlxuICpcbiAqIFN0YXJ0cyB3aXRoIHRoZSBjb3JlIGNvcnRleCArIGNydWNpYmxlIGRlcHMuIEZlYXR1cmVzIGNhbiBjYWxsXG4gKiBgYWRkRGVwZW5kZW5jeWAgLyBgYWRkRGV2RGVwZW5kZW5jeWAgdG8gZXh0ZW5kLlxuICovXG5leHBvcnQgY2xhc3MgQXBpUGFja2FnZUpzb24gaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuQVBJX1BBQ0tBR0VfSlNPTjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9kZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHByaXZhdGUgcmVhZG9ubHkgX2RldkRlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IHdvcmtzcGFjZU5hbWU6IHN0cmluZyxcblx0XHRwcml2YXRlIHJlYWRvbmx5IGFwaU5hbWUgPSBcImFwaVwiLFxuXHQpIHtcblx0XHR0aGlzLl9kZXBlbmRlbmNpZXMgPSB7XG5cdFx0XHRcIkBkZWNvaGVyZS9jb3J0ZXhcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9jcnVjaWJsZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHR9O1xuXHR9XG5cblx0cHVibGljIGFkZERlcGVuZGVuY3kobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9kZXBlbmRlbmNpZXNbbmFtZV0gPSB2ZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZERldkRlcGVuZGVuY3kobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9kZXZEZXBlbmRlbmNpZXNbbmFtZV0gPSB2ZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgcGtnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcblx0XHRcdG5hbWU6IGBAJHt0aGlzLndvcmtzcGFjZU5hbWV9LyR7dGhpcy5hcGlOYW1lfWAsXG5cdFx0XHR2ZXJzaW9uOiBcIjAuMC4xXCIsXG5cdFx0XHRwcml2YXRlOiB0cnVlLFxuXHRcdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHRcdG1haW46IFwic3JjL21haW4udHNcIixcblx0XHRcdHNjcmlwdHM6IHtcblx0XHRcdFx0bGludDogXCJiaW9tZSBjaGVjayAtLXdyaXRlIC5cIixcblx0XHRcdH0sXG5cdFx0XHRkZXBlbmRlbmNpZXM6IHNvcnRTdHJpbmdNYXAodGhpcy5fZGVwZW5kZW5jaWVzKSxcblx0XHR9O1xuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLl9kZXZEZXBlbmRlbmNpZXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdHBrZy5kZXZEZXBlbmRlbmNpZXMgPSBzb3J0U3RyaW5nTWFwKHRoaXMuX2RldkRlcGVuZGVuY2llcyk7XG5cdFx0fVxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInBhY2thZ2UuanNvblwiLFxuXHRcdFx0XHRjb250ZW50OiBKU09OLnN0cmluZ2lmeShwa2csIG51bGwsIDIpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiQXBpUGFja2FnZUpzb24iLCJrZXkiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiQVBJX1BBQ0tBR0VfSlNPTiIsIl9kZXBlbmRlbmNpZXMiLCJfZGV2RGVwZW5kZW5jaWVzIiwid29ya3NwYWNlTmFtZSIsImFwaU5hbWUiLCJDUkVBVEVfVkVSU0lPTiIsImFkZERlcGVuZGVuY3kiLCJuYW1lIiwidmVyc2lvbiIsImFkZERldkRlcGVuZGVuY3kiLCJmaWxlcyIsInBrZyIsInByaXZhdGUiLCJ0eXBlIiwibWFpbiIsInNjcmlwdHMiLCJsaW50IiwiZGVwZW5kZW5jaWVzIiwic29ydFN0cmluZ01hcCIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJkZXZEZXBlbmRlbmNpZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7OytCQVdhQTs7O2VBQUFBOzs7dUJBWG9CO2tDQUNIO3lCQUVDO0FBUXhCLE1BQU1BOzs7SUFDSUMsTUFBTUMsdUJBQWdCLENBQUNDLGdCQUFnQixDQUFDO0lBRXZDQyxjQUFzQztJQUN0Q0MsbUJBQTJDLENBQUMsRUFBRTtJQUUvRCxZQUNDLEFBQWlCQyxhQUFxQixFQUN0QyxBQUFpQkMsVUFBVSxLQUFLLENBQy9CO2FBRmdCRCxnQkFBQUE7YUFDQUMsVUFBQUE7UUFFakIsSUFBSSxDQUFDSCxhQUFhLEdBQUc7WUFDcEIsb0JBQW9CSSx1QkFBYztZQUNsQyxzQkFBc0JBLHVCQUFjO1FBQ3JDO0lBQ0Q7SUFFT0MsY0FBY0MsSUFBWSxFQUFFQyxPQUFlLEVBQVE7UUFDekQsSUFBSSxDQUFDUCxhQUFhLENBQUNNLEtBQUssR0FBR0M7UUFDM0IsT0FBTyxJQUFJO0lBQ1o7SUFFT0MsaUJBQWlCRixJQUFZLEVBQUVDLE9BQWUsRUFBUTtRQUM1RCxJQUFJLENBQUNOLGdCQUFnQixDQUFDSyxLQUFLLEdBQUdDO1FBQzlCLE9BQU8sSUFBSTtJQUNaO0lBRU9FLFFBQXNCO1FBQzVCLE1BQU1DLE1BQStCO1lBQ3BDSixNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ0osYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNDLE9BQU8sRUFBRTtZQUM5Q0ksU0FBUztZQUNUSSxTQUFTO1lBQ1RDLE1BQU07WUFDTkMsTUFBTTtZQUNOQyxTQUFTO2dCQUNSQyxNQUFNO1lBQ1A7WUFDQUMsY0FBY0MsSUFBQUEsK0JBQWEsRUFBQyxJQUFJLENBQUNqQixhQUFhO1FBQy9DO1FBQ0EsSUFBSWtCLE9BQU9DLElBQUksQ0FBQyxJQUFJLENBQUNsQixnQkFBZ0IsRUFBRW1CLE1BQU0sR0FBRyxHQUFHO1lBQ2xEVixJQUFJVyxlQUFlLEdBQUdKLElBQUFBLCtCQUFhLEVBQUMsSUFBSSxDQUFDaEIsZ0JBQWdCO1FBQzFEO1FBQ0EsT0FBTztZQUNOO2dCQUNDcUIsVUFBVTtnQkFDVkMsU0FBU0MsS0FBS0MsU0FBUyxDQUFDZixLQUFLLE1BQU07WUFDcEM7U0FDQTtJQUNGO0FBQ0QifQ==
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "AuthConfigModel", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return AuthConfigModel;
9
+ }
10
+ });
11
+ const _const = require("../../models/const.js");
12
+ class AuthConfigModel {
13
+ config;
14
+ key = _const.WELL_KNOWN_FILES.AUTH_CONFIG;
15
+ constructor(config){
16
+ this.config = config;
17
+ }
18
+ setAdminUser(adminUser) {
19
+ this.config.adminUser = adminUser;
20
+ }
21
+ files() {
22
+ return [];
23
+ }
24
+ }
25
+
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL2F1dGgtY29uZmlnLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEFkbWluVXNlckNvbmZpZyA9IHtcblx0c3ViOiBzdHJpbmc7XG5cdGVtYWlsOiBzdHJpbmc7XG5cdHBhc3N3b3JkOiBzdHJpbmc7XG5cdHVzZXJuYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBdXRoQ29uZmlnID0ge1xuXHRpc3N1ZXJCYXNlVXJsOiBzdHJpbmc7XG5cdGF1ZGllbmNlOiBzdHJpbmc7XG5cdGFkbWluVXNlcj86IEFkbWluVXNlckNvbmZpZztcbn07XG5cbi8qKlxuICogRGF0YS1jYXJyaWVyIG1vZGVsIGZvciBhdXRoIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogUmVnaXN0ZXJlZCBieSBBdXRoRmVhdHVyZSB3aGVuIGF1dGgwIGlzIGNvbmZpZ3VyZWQuIE90aGVyIGZlYXR1cmVzIChlLmcuXG4gKiBQb3N0bWFuRmVhdHVyZSkgcmV0cmlldmUgaXQgdmlhIHdvcmtzcGFjZS5nZXRNb2RlbChXRUxMX0tOT1dOX0ZJTEVTLkFVVEhfQ09ORklHKS5cbiAqIFByb2R1Y2VzIG5vIGZpbGVzIOKAlCBleGlzdHMgc29sZWx5IHNvIGZlYXR1cmVzIGNhbiBjb21tdW5pY2F0ZSBhdXRoIGRldGFpbHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoQ29uZmlnTW9kZWwgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuQVVUSF9DT05GSUc7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjb25maWc6IEF1dGhDb25maWcpIHt9XG5cblx0cHVibGljIHNldEFkbWluVXNlcihhZG1pblVzZXI6IEFkbWluVXNlckNvbmZpZyk6IHZvaWQge1xuXHRcdHRoaXMuY29uZmlnLmFkbWluVXNlciA9IGFkbWluVXNlcjtcblx0fVxuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkF1dGhDb25maWdNb2RlbCIsImtleSIsIldFTExfS05PV05fRklMRVMiLCJBVVRIX0NPTkZJRyIsImNvbmZpZyIsInNldEFkbWluVXNlciIsImFkbWluVXNlciIsImZpbGVzIl0sIm1hcHBpbmdzIjoiOzs7OytCQXVCYUE7OztlQUFBQTs7O3VCQXZCb0I7QUF1QjFCLE1BQU1BOztJQUNJQyxNQUFNQyx1QkFBZ0IsQ0FBQ0MsV0FBVyxDQUFDO0lBRW5ELFlBQW1CLEFBQWdCQyxNQUFrQixDQUFFO2FBQXBCQSxTQUFBQTtJQUFxQjtJQUVqREMsYUFBYUMsU0FBMEIsRUFBUTtRQUNyRCxJQUFJLENBQUNGLE1BQU0sQ0FBQ0UsU0FBUyxHQUFHQTtJQUN6QjtJQUVPQyxRQUFzQjtRQUM1QixPQUFPLEVBQUU7SUFDVjtBQUNEIn0=