@decohere/scaffold 0.0.1-dev.88 → 0.0.1-dev.89

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 (37) hide show
  1. package/commonjs/src/auth0-configure.action.js +30 -0
  2. package/commonjs/src/auth0-configure.command.js +26 -0
  3. package/commonjs/src/auth0-login.action.js +30 -0
  4. package/commonjs/src/auth0-login.command.js +25 -0
  5. package/commonjs/src/auth0.command.js +24 -0
  6. package/commonjs/src/auth0.module.js +30 -0
  7. package/commonjs/src/index.js +13 -1
  8. package/commonjs/src/program.js +10 -1
  9. package/commonjs/src/webapi/auth0-commands.js +252 -0
  10. package/commonjs/src/webapi/authorize-scopes.js +81 -0
  11. package/commonjs/src/webapi/features/auth.feature.js +3 -30
  12. package/commonjs/src/webapi/features/auth0-cli.js +41 -2
  13. package/commonjs/src/webapi/workspace-readme.js +2 -2
  14. package/es6/src/auth0-configure.action.js +20 -0
  15. package/es6/src/auth0-configure.command.js +16 -0
  16. package/es6/src/auth0-login.action.js +20 -0
  17. package/es6/src/auth0-login.command.js +15 -0
  18. package/es6/src/auth0.command.js +14 -0
  19. package/es6/src/auth0.module.js +20 -0
  20. package/es6/src/index.js +4 -1
  21. package/es6/src/program.js +10 -1
  22. package/es6/src/webapi/auth0-commands.js +187 -0
  23. package/es6/src/webapi/authorize-scopes.js +57 -0
  24. package/es6/src/webapi/features/auth.feature.js +3 -30
  25. package/es6/src/webapi/features/auth0-cli.js +36 -3
  26. package/es6/src/webapi/workspace-readme.js +2 -2
  27. package/package.json +3 -3
  28. package/types/src/auth0-configure.action.d.ts +7 -0
  29. package/types/src/auth0-configure.command.d.ts +6 -0
  30. package/types/src/auth0-login.action.d.ts +4 -0
  31. package/types/src/auth0-login.command.d.ts +6 -0
  32. package/types/src/auth0.command.d.ts +6 -0
  33. package/types/src/auth0.module.d.ts +18 -0
  34. package/types/src/index.d.ts +4 -0
  35. package/types/src/webapi/auth0-commands.d.ts +11 -0
  36. package/types/src/webapi/authorize-scopes.d.ts +7 -0
  37. package/types/src/webapi/features/auth0-cli.d.ts +4 -0
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "Auth0ConfigureAction", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Auth0ConfigureAction;
9
+ }
10
+ });
11
+ const _decorators = require("@decohere/crucible/decorators");
12
+ const _cli = require("@decohere/nexus/cli");
13
+ const _auth0commands = require("./webapi/auth0-commands.js");
14
+ function _ts_decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ class Auth0ConfigureAction {
21
+ async run(options) {
22
+ (0, _auth0commands.runAuth0Configure)(typeof options.d === "string" ? options.d : ".");
23
+ return _cli.ActionResponse.Success("configure");
24
+ }
25
+ }
26
+ Auth0ConfigureAction = _ts_decorate([
27
+ (0, _decorators.injectable)()
28
+ ], Auth0ConfigureAction);
29
+
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9hdXRoMC1jb25maWd1cmUuYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IHR5cGUgQWN0aW9uLCBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBydW5BdXRoMENvbmZpZ3VyZSB9IGZyb20gXCIuL3dlYmFwaS9hdXRoMC1jb21tYW5kcy5qc1wiO1xuXG5leHBvcnQgdHlwZSBBdXRoMENvbmZpZ3VyZU9wdGlvbnMgPSB7XG5cdGQ/OiBzdHJpbmc7XG59O1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aDBDb25maWd1cmVBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb248QXV0aDBDb25maWd1cmVPcHRpb25zPiB7XG5cdHB1YmxpYyBhc3luYyBydW4ob3B0aW9uczogQXV0aDBDb25maWd1cmVPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRcdHJ1bkF1dGgwQ29uZmlndXJlKHR5cGVvZiBvcHRpb25zLmQgPT09IFwic3RyaW5nXCIgPyBvcHRpb25zLmQgOiBcIi5cIik7XG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoXCJjb25maWd1cmVcIik7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJBdXRoMENvbmZpZ3VyZUFjdGlvbiIsInJ1biIsIm9wdGlvbnMiLCJydW5BdXRoMENvbmZpZ3VyZSIsImQiLCJBY3Rpb25SZXNwb25zZSIsIlN1Y2Nlc3MiXSwibWFwcGluZ3MiOiI7Ozs7K0JBU2FBOzs7ZUFBQUE7Ozs0QkFUYztxQkFDaUI7K0JBQ1Y7Ozs7Ozs7QUFPM0IsTUFBTUE7SUFDWixNQUFhQyxJQUFJQyxPQUE4QixFQUEyQjtRQUN6RUMsSUFBQUEsZ0NBQWlCLEVBQUMsT0FBT0QsUUFBUUUsQ0FBQyxLQUFLLFdBQVdGLFFBQVFFLENBQUMsR0FBRztRQUM5RCxPQUFPQyxtQkFBYyxDQUFDQyxPQUFPLENBQUM7SUFDL0I7QUFDRCJ9
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "Auth0ConfigureCommand", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Auth0ConfigureCommand;
9
+ }
10
+ });
11
+ const _cli = require("@decohere/nexus/cli");
12
+ const _auth0configureaction = require("./auth0-configure.action.js");
13
+ class Auth0ConfigureCommand extends _cli.DecohereCommand {
14
+ get actions() {
15
+ return [
16
+ _auth0configureaction.Auth0ConfigureAction
17
+ ];
18
+ }
19
+ constructor(name){
20
+ super(name);
21
+ this.description("Update Auth0 API permissions and Postman SPA from @Authorize in this workspace");
22
+ this.option("-d <directory>", "Workspace directory (default: current directory)", ".");
23
+ }
24
+ }
25
+
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9hdXRoMC1jb25maWd1cmUuY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNvaGVyZUNvbW1hbmQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgQXV0aDBDb25maWd1cmVBY3Rpb24gfSBmcm9tIFwiLi9hdXRoMC1jb25maWd1cmUuYWN0aW9uLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBBdXRoMENvbmZpZ3VyZUNvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQge1xuXHRwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7XG5cdFx0cmV0dXJuIFtBdXRoMENvbmZpZ3VyZUFjdGlvbl07XG5cdH1cblxuXHRwdWJsaWMgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobmFtZSk7XG5cdFx0dGhpcy5kZXNjcmlwdGlvbihcblx0XHRcdFwiVXBkYXRlIEF1dGgwIEFQSSBwZXJtaXNzaW9ucyBhbmQgUG9zdG1hbiBTUEEgZnJvbSBAQXV0aG9yaXplIGluIHRoaXMgd29ya3NwYWNlXCIsXG5cdFx0KTtcblx0XHR0aGlzLm9wdGlvbihcIi1kIDxkaXJlY3Rvcnk+XCIsIFwiV29ya3NwYWNlIGRpcmVjdG9yeSAoZGVmYXVsdDogY3VycmVudCBkaXJlY3RvcnkpXCIsIFwiLlwiKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkF1dGgwQ29uZmlndXJlQ29tbWFuZCIsIkRlY29oZXJlQ29tbWFuZCIsImFjdGlvbnMiLCJBdXRoMENvbmZpZ3VyZUFjdGlvbiIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsIm9wdGlvbiJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFHYUE7OztlQUFBQTs7O3FCQUhtQjtzQ0FDSztBQUU5QixNQUFNQSw4QkFBOEJDLG9CQUFlO0lBQ3pELElBQW9CQyxVQUFVO1FBQzdCLE9BQU87WUFBQ0MsMENBQW9CO1NBQUM7SUFDOUI7SUFFQSxZQUFtQkMsSUFBWSxDQUFFO1FBQ2hDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLFdBQVcsQ0FDZjtRQUVELElBQUksQ0FBQ0MsTUFBTSxDQUFDLGtCQUFrQixvREFBb0Q7SUFDbkY7QUFDRCJ9
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "Auth0LoginAction", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Auth0LoginAction;
9
+ }
10
+ });
11
+ const _decorators = require("@decohere/crucible/decorators");
12
+ const _cli = require("@decohere/nexus/cli");
13
+ const _auth0commands = require("./webapi/auth0-commands.js");
14
+ function _ts_decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ class Auth0LoginAction {
21
+ async run() {
22
+ (0, _auth0commands.runAuth0Login)();
23
+ return _cli.ActionResponse.Success("login");
24
+ }
25
+ }
26
+ Auth0LoginAction = _ts_decorate([
27
+ (0, _decorators.injectable)()
28
+ ], Auth0LoginAction);
29
+
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9hdXRoMC1sb2dpbi5hY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgdHlwZSBBY3Rpb24sIEFjdGlvblJlc3BvbnNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IHJ1bkF1dGgwTG9naW4gfSBmcm9tIFwiLi93ZWJhcGkvYXV0aDAtY29tbWFuZHMuanNcIjtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGgwTG9naW5BY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xuXHRwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0XHRydW5BdXRoMExvZ2luKCk7XG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoXCJsb2dpblwiKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkF1dGgwTG9naW5BY3Rpb24iLCJydW4iLCJydW5BdXRoMExvZ2luIiwiQWN0aW9uUmVzcG9uc2UiLCJTdWNjZXNzIl0sIm1hcHBpbmdzIjoiOzs7OytCQUthQTs7O2VBQUFBOzs7NEJBTGM7cUJBQ2lCOytCQUNkOzs7Ozs7O0FBR3ZCLE1BQU1BO0lBQ1osTUFBYUMsTUFBK0I7UUFDM0NDLElBQUFBLDRCQUFhO1FBQ2IsT0FBT0MsbUJBQWMsQ0FBQ0MsT0FBTyxDQUFDO0lBQy9CO0FBQ0QifQ==
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "Auth0LoginCommand", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Auth0LoginCommand;
9
+ }
10
+ });
11
+ const _cli = require("@decohere/nexus/cli");
12
+ const _auth0loginaction = require("./auth0-login.action.js");
13
+ class Auth0LoginCommand extends _cli.DecohereCommand {
14
+ get actions() {
15
+ return [
16
+ _auth0loginaction.Auth0LoginAction
17
+ ];
18
+ }
19
+ constructor(name){
20
+ super(name);
21
+ this.description("Authenticate the Auth0 CLI (device URL; tokens persist on the host)");
22
+ }
23
+ }
24
+
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9hdXRoMC1sb2dpbi5jb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY29oZXJlQ29tbWFuZCB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBBdXRoMExvZ2luQWN0aW9uIH0gZnJvbSBcIi4vYXV0aDAtbG9naW4uYWN0aW9uLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBBdXRoMExvZ2luQ29tbWFuZCBleHRlbmRzIERlY29oZXJlQ29tbWFuZCB7XG5cdHB1YmxpYyBvdmVycmlkZSBnZXQgYWN0aW9ucygpIHtcblx0XHRyZXR1cm4gW0F1dGgwTG9naW5BY3Rpb25dO1xuXHR9XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuXHRcdHN1cGVyKG5hbWUpO1xuXHRcdHRoaXMuZGVzY3JpcHRpb24oXCJBdXRoZW50aWNhdGUgdGhlIEF1dGgwIENMSSAoZGV2aWNlIFVSTDsgdG9rZW5zIHBlcnNpc3Qgb24gdGhlIGhvc3QpXCIpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiQXV0aDBMb2dpbkNvbW1hbmQiLCJEZWNvaGVyZUNvbW1hbmQiLCJhY3Rpb25zIiwiQXV0aDBMb2dpbkFjdGlvbiIsIm5hbWUiLCJkZXNjcmlwdGlvbiJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFHYUE7OztlQUFBQTs7O3FCQUhtQjtrQ0FDQztBQUUxQixNQUFNQSwwQkFBMEJDLG9CQUFlO0lBQ3JELElBQW9CQyxVQUFVO1FBQzdCLE9BQU87WUFBQ0Msa0NBQWdCO1NBQUM7SUFDMUI7SUFFQSxZQUFtQkMsSUFBWSxDQUFFO1FBQ2hDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLFdBQVcsQ0FBQztJQUNsQjtBQUNEIn0=
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "Auth0Command", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Auth0Command;
9
+ }
10
+ });
11
+ const _cli = require("@decohere/nexus/cli");
12
+ class Auth0Command extends _cli.DecohereCommand {
13
+ constructor(commands, handler){
14
+ super(Auth0Command);
15
+ this.description("Log in to Auth0 and update a scaffolded client");
16
+ this.exitOverride();
17
+ this.registerSubcommand(commands, handler);
18
+ }
19
+ run(_actions, _options) {
20
+ return this.help();
21
+ }
22
+ }
23
+
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9hdXRoMC5jb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9ucyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQge1xuXHR0eXBlIENvbW1hbmRIYW5kbGVyLFxuXHR0eXBlIENvbW1hbmRSZXNwb25zZSxcblx0dHlwZSBDb21tYW5kVHlwZSxcblx0RGVjb2hlcmVDb21tYW5kLFxufSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuXG5leHBvcnQgY2xhc3MgQXV0aDBDb21tYW5kIGV4dGVuZHMgRGVjb2hlcmVDb21tYW5kIHtcblx0cHVibGljIGNvbnN0cnVjdG9yKGNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBDb21tYW5kVHlwZT4sIGhhbmRsZXI6IENvbW1hbmRIYW5kbGVyKSB7XG5cdFx0c3VwZXIoQXV0aDBDb21tYW5kKTtcblx0XHR0aGlzLmRlc2NyaXB0aW9uKFwiTG9nIGluIHRvIEF1dGgwIGFuZCB1cGRhdGUgYSBzY2FmZm9sZGVkIGNsaWVudFwiKTtcblx0XHR0aGlzLmV4aXRPdmVycmlkZSgpO1xuXHRcdHRoaXMucmVnaXN0ZXJTdWJjb21tYW5kKGNvbW1hbmRzLCBoYW5kbGVyKTtcblx0fVxuXG5cdHB1YmxpYyBydW4oX2FjdGlvbnM6IEFjdGlvbnMsIF9vcHRpb25zOiBuZXZlcik6IFByb21pc2U8Q29tbWFuZFJlc3BvbnNlPiB7XG5cdFx0cmV0dXJuIHRoaXMuaGVscCgpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiQXV0aDBDb21tYW5kIiwiRGVjb2hlcmVDb21tYW5kIiwiY29tbWFuZHMiLCJoYW5kbGVyIiwiZGVzY3JpcHRpb24iLCJleGl0T3ZlcnJpZGUiLCJyZWdpc3RlclN1YmNvbW1hbmQiLCJydW4iLCJfYWN0aW9ucyIsIl9vcHRpb25zIiwiaGVscCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFRYUE7OztlQUFBQTs7O3FCQUZOO0FBRUEsTUFBTUEscUJBQXFCQyxvQkFBZTtJQUNoRCxZQUFtQkMsUUFBcUMsRUFBRUMsT0FBdUIsQ0FBRTtRQUNsRixLQUFLLENBQUNIO1FBQ04sSUFBSSxDQUFDSSxXQUFXLENBQUM7UUFDakIsSUFBSSxDQUFDQyxZQUFZO1FBQ2pCLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNKLFVBQVVDO0lBQ25DO0lBRU9JLElBQUlDLFFBQWlCLEVBQUVDLFFBQWUsRUFBNEI7UUFDeEUsT0FBTyxJQUFJLENBQUNDLElBQUk7SUFDakI7QUFDRCJ9
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "Auth0Module", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Auth0Module;
9
+ }
10
+ });
11
+ const _cli = require("@decohere/nexus/cli");
12
+ const _auth0command = require("./auth0.command.js");
13
+ const _auth0configureaction = require("./auth0-configure.action.js");
14
+ const _auth0configurecommand = require("./auth0-configure.command.js");
15
+ const _auth0loginaction = require("./auth0-login.action.js");
16
+ const _auth0logincommand = require("./auth0-login.command.js");
17
+ class Auth0Module extends _cli.ModuleManifest {
18
+ id = "auth0";
19
+ command = _auth0command.Auth0Command;
20
+ commands = {
21
+ login: _auth0logincommand.Auth0LoginCommand,
22
+ configure: _auth0configurecommand.Auth0ConfigureCommand
23
+ };
24
+ actions = {
25
+ login: _auth0loginaction.Auth0LoginAction,
26
+ configure: _auth0configureaction.Auth0ConfigureAction
27
+ };
28
+ }
29
+
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9hdXRoMC5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlTWFuaWZlc3QgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgQXV0aDBDb21tYW5kIH0gZnJvbSBcIi4vYXV0aDAuY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgQXV0aDBDb25maWd1cmVBY3Rpb24gfSBmcm9tIFwiLi9hdXRoMC1jb25maWd1cmUuYWN0aW9uLmpzXCI7XG5pbXBvcnQgeyBBdXRoMENvbmZpZ3VyZUNvbW1hbmQgfSBmcm9tIFwiLi9hdXRoMC1jb25maWd1cmUuY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgQXV0aDBMb2dpbkFjdGlvbiB9IGZyb20gXCIuL2F1dGgwLWxvZ2luLmFjdGlvbi5qc1wiO1xuaW1wb3J0IHsgQXV0aDBMb2dpbkNvbW1hbmQgfSBmcm9tIFwiLi9hdXRoMC1sb2dpbi5jb21tYW5kLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBBdXRoME1vZHVsZSBleHRlbmRzIE1vZHVsZU1hbmlmZXN0IHtcblx0cHVibGljIHJlYWRvbmx5IGlkID0gXCJhdXRoMFwiO1xuXHRwdWJsaWMgcmVhZG9ubHkgY29tbWFuZCA9IEF1dGgwQ29tbWFuZDtcblx0cHVibGljIHJlYWRvbmx5IGNvbW1hbmRzID0geyBsb2dpbjogQXV0aDBMb2dpbkNvbW1hbmQsIGNvbmZpZ3VyZTogQXV0aDBDb25maWd1cmVDb21tYW5kIH07XG5cdHB1YmxpYyByZWFkb25seSBhY3Rpb25zID0geyBsb2dpbjogQXV0aDBMb2dpbkFjdGlvbiwgY29uZmlndXJlOiBBdXRoMENvbmZpZ3VyZUFjdGlvbiB9O1xufVxuIl0sIm5hbWVzIjpbIkF1dGgwTW9kdWxlIiwiTW9kdWxlTWFuaWZlc3QiLCJpZCIsImNvbW1hbmQiLCJBdXRoMENvbW1hbmQiLCJjb21tYW5kcyIsImxvZ2luIiwiQXV0aDBMb2dpbkNvbW1hbmQiLCJjb25maWd1cmUiLCJBdXRoMENvbmZpZ3VyZUNvbW1hbmQiLCJhY3Rpb25zIiwiQXV0aDBMb2dpbkFjdGlvbiIsIkF1dGgwQ29uZmlndXJlQWN0aW9uIl0sIm1hcHBpbmdzIjoiOzs7OytCQU9hQTs7O2VBQUFBOzs7cUJBUGtCOzhCQUNGO3NDQUNRO3VDQUNDO2tDQUNMO21DQUNDO0FBRTNCLE1BQU1BLG9CQUFvQkMsbUJBQWM7SUFDOUJDLEtBQUssUUFBUTtJQUNiQyxVQUFVQywwQkFBWSxDQUFDO0lBQ3ZCQyxXQUFXO1FBQUVDLE9BQU9DLG9DQUFpQjtRQUFFQyxXQUFXQyw0Q0FBcUI7SUFBQyxFQUFFO0lBQzFFQyxVQUFVO1FBQUVKLE9BQU9LLGtDQUFnQjtRQUFFSCxXQUFXSSwwQ0FBb0I7SUFBQyxFQUFFO0FBQ3hGIn0=
@@ -15,6 +15,15 @@ _export(exports, {
15
15
  get AddModule () {
16
16
  return _addmodule.AddModule;
17
17
  },
18
+ get Auth0ConfigureAction () {
19
+ return _auth0configureaction.Auth0ConfigureAction;
20
+ },
21
+ get Auth0LoginAction () {
22
+ return _auth0loginaction.Auth0LoginAction;
23
+ },
24
+ get Auth0Module () {
25
+ return _auth0module.Auth0Module;
26
+ },
18
27
  get CreateModule () {
19
28
  return _createmodule.CreateModule;
20
29
  },
@@ -30,9 +39,12 @@ _export(exports, {
30
39
  });
31
40
  const _addmodule = require("./add.module.js");
32
41
  const _addapiaction = require("./add-api.action.js");
42
+ const _auth0module = require("./auth0.module.js");
43
+ const _auth0configureaction = require("./auth0-configure.action.js");
44
+ const _auth0loginaction = require("./auth0-login.action.js");
33
45
  const _createmodule = require("./create.module.js");
34
46
  const _program = require("./program.js");
35
47
  const _createapi = require("./webapi/create-api.js");
36
48
  const _webapiaction = require("./webapi.action.js");
37
49
 
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBZGRNb2R1bGUgfSBmcm9tIFwiLi9hZGQubW9kdWxlLmpzXCI7XG5leHBvcnQgdHlwZSB7IEFkZEFwaU9wdGlvbnMgfSBmcm9tIFwiLi9hZGQtYXBpLmFjdGlvbi5qc1wiO1xuZXhwb3J0IHsgQWRkQXBpQWN0aW9uIH0gZnJvbSBcIi4vYWRkLWFwaS5hY3Rpb24uanNcIjtcbmV4cG9ydCB7IENyZWF0ZU1vZHVsZSB9IGZyb20gXCIuL2NyZWF0ZS5tb2R1bGUuanNcIjtcbmV4cG9ydCB7IHJ1bkNsaSB9IGZyb20gXCIuL3Byb2dyYW0uanNcIjtcbmV4cG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5leHBvcnQgeyBzY2FmZm9sZEFwaSB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5leHBvcnQgdHlwZSB7IFdlYmFwaU9wdGlvbnMgfSBmcm9tIFwiLi93ZWJhcGkuYWN0aW9uLmpzXCI7XG5leHBvcnQgeyBXZWJhcGlBY3Rpb24gfSBmcm9tIFwiLi93ZWJhcGkuYWN0aW9uLmpzXCI7XG4iXSwibmFtZXMiOlsiQWRkQXBpQWN0aW9uIiwiQWRkTW9kdWxlIiwiQ3JlYXRlTW9kdWxlIiwiV2ViYXBpQWN0aW9uIiwicnVuQ2xpIiwic2NhZmZvbGRBcGkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBRVNBO2VBQUFBLDBCQUFZOztRQUZaQztlQUFBQSxvQkFBUzs7UUFHVEM7ZUFBQUEsMEJBQVk7O1FBS1pDO2VBQUFBLDBCQUFZOztRQUpaQztlQUFBQSxlQUFNOztRQUVOQztlQUFBQSxzQkFBVzs7OzJCQU5NOzhCQUVHOzhCQUNBO3lCQUNOOzJCQUVLOzhCQUVDIn0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBZGRNb2R1bGUgfSBmcm9tIFwiLi9hZGQubW9kdWxlLmpzXCI7XG5leHBvcnQgdHlwZSB7IEFkZEFwaU9wdGlvbnMgfSBmcm9tIFwiLi9hZGQtYXBpLmFjdGlvbi5qc1wiO1xuZXhwb3J0IHsgQWRkQXBpQWN0aW9uIH0gZnJvbSBcIi4vYWRkLWFwaS5hY3Rpb24uanNcIjtcbmV4cG9ydCB7IEF1dGgwTW9kdWxlIH0gZnJvbSBcIi4vYXV0aDAubW9kdWxlLmpzXCI7XG5leHBvcnQgdHlwZSB7IEF1dGgwQ29uZmlndXJlT3B0aW9ucyB9IGZyb20gXCIuL2F1dGgwLWNvbmZpZ3VyZS5hY3Rpb24uanNcIjtcbmV4cG9ydCB7IEF1dGgwQ29uZmlndXJlQWN0aW9uIH0gZnJvbSBcIi4vYXV0aDAtY29uZmlndXJlLmFjdGlvbi5qc1wiO1xuZXhwb3J0IHsgQXV0aDBMb2dpbkFjdGlvbiB9IGZyb20gXCIuL2F1dGgwLWxvZ2luLmFjdGlvbi5qc1wiO1xuZXhwb3J0IHsgQ3JlYXRlTW9kdWxlIH0gZnJvbSBcIi4vY3JlYXRlLm1vZHVsZS5qc1wiO1xuZXhwb3J0IHsgcnVuQ2xpIH0gZnJvbSBcIi4vcHJvZ3JhbS5qc1wiO1xuZXhwb3J0IHR5cGUgeyBBcGlPcHRpb25zIH0gZnJvbSBcIi4vd2ViYXBpL2NyZWF0ZS1hcGkuanNcIjtcbmV4cG9ydCB7IHNjYWZmb2xkQXBpIH0gZnJvbSBcIi4vd2ViYXBpL2NyZWF0ZS1hcGkuanNcIjtcbmV4cG9ydCB0eXBlIHsgV2ViYXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS5hY3Rpb24uanNcIjtcbmV4cG9ydCB7IFdlYmFwaUFjdGlvbiB9IGZyb20gXCIuL3dlYmFwaS5hY3Rpb24uanNcIjtcbiJdLCJuYW1lcyI6WyJBZGRBcGlBY3Rpb24iLCJBZGRNb2R1bGUiLCJBdXRoMENvbmZpZ3VyZUFjdGlvbiIsIkF1dGgwTG9naW5BY3Rpb24iLCJBdXRoME1vZHVsZSIsIkNyZWF0ZU1vZHVsZSIsIldlYmFwaUFjdGlvbiIsInJ1bkNsaSIsInNjYWZmb2xkQXBpIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQUVTQTtlQUFBQSwwQkFBWTs7UUFGWkM7ZUFBQUEsb0JBQVM7O1FBS1RDO2VBQUFBLDBDQUFvQjs7UUFDcEJDO2VBQUFBLGtDQUFnQjs7UUFIaEJDO2VBQUFBLHdCQUFXOztRQUlYQztlQUFBQSwwQkFBWTs7UUFLWkM7ZUFBQUEsMEJBQVk7O1FBSlpDO2VBQUFBLGVBQU07O1FBRU5DO2VBQUFBLHNCQUFXOzs7MkJBVk07OEJBRUc7NkJBQ0Q7c0NBRVM7a0NBQ0o7OEJBQ0o7eUJBQ047MkJBRUs7OEJBRUMifQ==
@@ -18,6 +18,7 @@ _export(exports, {
18
18
  });
19
19
  const _commander = require("commander");
20
20
  const _apiname = require("./webapi/api-name.js");
21
+ const _auth0commands = require("./webapi/auth0-commands.js");
21
22
  const _clioptions = require("./webapi/cli-options.js");
22
23
  function createProgram() {
23
24
  const program = new _commander.Command();
@@ -35,6 +36,14 @@ function createProgram() {
35
36
  add: true
36
37
  }));
37
38
  });
39
+ const auth0 = program.command("auth0").description("Log in to Auth0 and update a scaffolded client");
40
+ auth0.command("login").description("Authenticate the Auth0 CLI (device URL; tokens persist on the host)").action(()=>{
41
+ (0, _auth0commands.runAuth0Login)();
42
+ });
43
+ auth0.command("configure").description("Update Auth0 API permissions and Postman SPA from @Authorize in this workspace").action((_opts, cmd)=>{
44
+ const d = cmd.optsWithGlobals().d;
45
+ (0, _auth0commands.runAuth0Configure)(typeof d === "string" ? d : ".");
46
+ });
38
47
  return program;
39
48
  }
40
49
  async function runCli(argv = process.argv) {
@@ -54,4 +63,4 @@ async function runCli(argv = process.argv) {
54
63
  process.exit(process.exitCode ?? 0);
55
64
  }
56
65
 
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9wcm9ncmFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIENvbW1hbmRlckVycm9yIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgQ3JlYXRlQ2xpRXJyb3IgfSBmcm9tIFwiLi93ZWJhcGkvYXBpLW5hbWUuanNcIjtcbmltcG9ydCB7XG5cdGFkZFdlYmFwaUZlYXR1cmVPcHRpb25zLFxuXHRjb2xsZWN0TmFtZSxcblx0cnVuU2NhZmZvbGRBcGksXG5cdHRvQXBpT3B0aW9ucyxcbn0gZnJvbSBcIi4vd2ViYXBpL2NsaS1vcHRpb25zLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9ncmFtKCk6IENvbW1hbmQge1xuXHRjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblx0cHJvZ3JhbS5leGl0T3ZlcnJpZGUoKTtcblx0cHJvZ3JhbVxuXHRcdC5uYW1lKFwiZGVjb2hlcmVcIilcblx0XHQuZGVzY3JpcHRpb24oXCJEZWNvaGVyZSBDTElcIilcblx0XHQub3B0aW9uKFwiLWQgPGRpcmVjdG9yeT5cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiBjdXJyZW50IGRpcmVjdG9yeSlcIiwgXCIuXCIpO1xuXG5cdGNvbnN0IGNyZWF0ZSA9IHByb2dyYW0uY29tbWFuZChcImNyZWF0ZVwiKS5kZXNjcmlwdGlvbihcIkNyZWF0ZSBhIG5ldyBEZWNvaGVyZSB3b3Jrc3BhY2VcIik7XG5cdGFkZFdlYmFwaUZlYXR1cmVPcHRpb25zKFxuXHRcdGNyZWF0ZVxuXHRcdFx0LmNvbW1hbmQoXCJ3ZWJhcGlcIilcblx0XHRcdC5hcmd1bWVudChcIltkaXJlY3RvcnldXCIsIFwiVGFyZ2V0IGRpcmVjdG9yeSAoZGVmYXVsdDogLWQgb3IgY3VycmVudCBkaXJlY3RvcnkpXCIpXG5cdFx0XHQub3B0aW9uKFxuXHRcdFx0XHRcIi0tbmFtZSA8c2x1Zz5cIixcblx0XHRcdFx0XCJBUEkgbmFtZSB1bmRlciBwcm9qZWN0cy8gKHJlcGVhdGFibGU7IGRlZmF1bHQ6IGFwaSlcIixcblx0XHRcdFx0Y29sbGVjdE5hbWUsXG5cdFx0XHRcdFtdIGFzIHN0cmluZ1tdLFxuXHRcdFx0KSxcblx0KS5hY3Rpb24oYXN5bmMgKGRpcmVjdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBfb3B0czogdW5rbm93biwgY21kOiBDb21tYW5kKSA9PiB7XG5cdFx0YXdhaXQgcnVuU2NhZmZvbGRBcGkodG9BcGlPcHRpb25zKGRpcmVjdG9yeSwgY21kLm9wdHNXaXRoR2xvYmFscygpKSk7XG5cdH0pO1xuXG5cdGFkZFdlYmFwaUZlYXR1cmVPcHRpb25zKFxuXHRcdHByb2dyYW1cblx0XHRcdC5jb21tYW5kKFwiYWRkXCIpXG5cdFx0XHQuZGVzY3JpcHRpb24oXCJBZGQgdG8gYW4gZXhpc3RpbmcgRGVjb2hlcmUgd29ya3NwYWNlXCIpXG5cdFx0XHQuY29tbWFuZChcImFwaVwiKVxuXHRcdFx0LmFyZ3VtZW50KFwiPG5hbWU+XCIsIFwiQVBJIG5hbWUgdW5kZXIgcHJvamVjdHMvXCIpLFxuXHQpLmFjdGlvbihhc3luYyAobmFtZTogc3RyaW5nLCBfb3B0czogdW5rbm93biwgY21kOiBDb21tYW5kKSA9PiB7XG5cdFx0YXdhaXQgcnVuU2NhZmZvbGRBcGkoXG5cdFx0XHR0b0FwaU9wdGlvbnModW5kZWZpbmVkLCBjbWQub3B0c1dpdGhHbG9iYWxzKCksIHsgbmFtZXM6IFtuYW1lXSwgYWRkOiB0cnVlIH0pLFxuXHRcdCk7XG5cdH0pO1xuXG5cdHJldHVybiBwcm9ncmFtO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ2xpKGFyZ3Y6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2KTogUHJvbWlzZTx2b2lkPiB7XG5cdHRyeSB7XG5cdFx0YXdhaXQgY3JlYXRlUHJvZ3JhbSgpLnBhcnNlQXN5bmMoYXJndik7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGlmIChlcnIgaW5zdGFuY2VvZiBDb21tYW5kZXJFcnJvcikge1xuXHRcdFx0cHJvY2Vzcy5leGl0KGVyci5leGl0Q29kZSk7XG5cdFx0fVxuXHRcdGlmIChlcnIgaW5zdGFuY2VvZiBDcmVhdGVDbGlFcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgXFxuICAke2Vyci5tZXNzYWdlfVxcbmApO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdH1cblx0XHRjb25zb2xlLmVycm9yKGVycik7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cdHByb2Nlc3MuZXhpdChwcm9jZXNzLmV4aXRDb2RlID8/IDApO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVByb2dyYW0iLCJydW5DbGkiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImV4aXRPdmVycmlkZSIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsIm9wdGlvbiIsImNyZWF0ZSIsImNvbW1hbmQiLCJhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyIsImFyZ3VtZW50IiwiY29sbGVjdE5hbWUiLCJhY3Rpb24iLCJkaXJlY3RvcnkiLCJfb3B0cyIsImNtZCIsInJ1blNjYWZmb2xkQXBpIiwidG9BcGlPcHRpb25zIiwib3B0c1dpdGhHbG9iYWxzIiwidW5kZWZpbmVkIiwibmFtZXMiLCJhZGQiLCJhcmd2IiwicHJvY2VzcyIsInBhcnNlQXN5bmMiLCJlcnIiLCJDb21tYW5kZXJFcnJvciIsImV4aXQiLCJleGl0Q29kZSIsIkNyZWF0ZUNsaUVycm9yIiwiY29uc29sZSIsImVycm9yIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFTZ0JBO2VBQUFBOztRQXNDTUM7ZUFBQUE7OzsyQkEvQ2tCO3lCQUNUOzRCQU14QjtBQUVBLFNBQVNEO0lBQ2YsTUFBTUUsVUFBVSxJQUFJQyxrQkFBTztJQUMzQkQsUUFBUUUsWUFBWTtJQUNwQkYsUUFDRUcsSUFBSSxDQUFDLFlBQ0xDLFdBQVcsQ0FBQyxnQkFDWkMsTUFBTSxDQUFDLGtCQUFrQixpREFBaUQ7SUFFNUUsTUFBTUMsU0FBU04sUUFBUU8sT0FBTyxDQUFDLFVBQVVILFdBQVcsQ0FBQztJQUNyREksSUFBQUEsbUNBQXVCLEVBQ3RCRixPQUNFQyxPQUFPLENBQUMsVUFDUkUsUUFBUSxDQUFDLGVBQWUsdURBQ3hCSixNQUFNLENBQ04saUJBQ0EsdURBQ0FLLHVCQUFXLEVBQ1gsRUFBRSxHQUVIQyxNQUFNLENBQUMsT0FBT0MsV0FBK0JDLE9BQWdCQztRQUM5RCxNQUFNQyxJQUFBQSwwQkFBYyxFQUFDQyxJQUFBQSx3QkFBWSxFQUFDSixXQUFXRSxJQUFJRyxlQUFlO0lBQ2pFO0lBRUFULElBQUFBLG1DQUF1QixFQUN0QlIsUUFDRU8sT0FBTyxDQUFDLE9BQ1JILFdBQVcsQ0FBQyx5Q0FDWkcsT0FBTyxDQUFDLE9BQ1JFLFFBQVEsQ0FBQyxVQUFVLDZCQUNwQkUsTUFBTSxDQUFDLE9BQU9SLE1BQWNVLE9BQWdCQztRQUM3QyxNQUFNQyxJQUFBQSwwQkFBYyxFQUNuQkMsSUFBQUEsd0JBQVksRUFBQ0UsV0FBV0osSUFBSUcsZUFBZSxJQUFJO1lBQUVFLE9BQU87Z0JBQUNoQjthQUFLO1lBQUVpQixLQUFLO1FBQUs7SUFFNUU7SUFFQSxPQUFPcEI7QUFDUjtBQUVPLGVBQWVELE9BQU9zQixPQUFpQkMsUUFBUUQsSUFBSTtJQUN6RCxJQUFJO1FBQ0gsTUFBTXZCLGdCQUFnQnlCLFVBQVUsQ0FBQ0Y7SUFDbEMsRUFBRSxPQUFPRyxLQUFLO1FBQ2IsSUFBSUEsZUFBZUMseUJBQWMsRUFBRTtZQUNsQ0gsUUFBUUksSUFBSSxDQUFDRixJQUFJRyxRQUFRO1FBQzFCO1FBQ0EsSUFBSUgsZUFBZUksdUJBQWMsRUFBRTtZQUNsQ0MsUUFBUUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFTixJQUFJTyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3BDVCxRQUFRSSxJQUFJLENBQUM7UUFDZDtRQUNBRyxRQUFRQyxLQUFLLENBQUNOO1FBQ2RGLFFBQVFJLElBQUksQ0FBQztJQUNkO0lBQ0FKLFFBQVFJLElBQUksQ0FBQ0osUUFBUUssUUFBUSxJQUFJO0FBQ2xDIn0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9wcm9ncmFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIENvbW1hbmRlckVycm9yIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgQ3JlYXRlQ2xpRXJyb3IgfSBmcm9tIFwiLi93ZWJhcGkvYXBpLW5hbWUuanNcIjtcbmltcG9ydCB7IHJ1bkF1dGgwQ29uZmlndXJlLCBydW5BdXRoMExvZ2luIH0gZnJvbSBcIi4vd2ViYXBpL2F1dGgwLWNvbW1hbmRzLmpzXCI7XG5pbXBvcnQge1xuXHRhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyxcblx0Y29sbGVjdE5hbWUsXG5cdHJ1blNjYWZmb2xkQXBpLFxuXHR0b0FwaU9wdGlvbnMsXG59IGZyb20gXCIuL3dlYmFwaS9jbGktb3B0aW9ucy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvZ3JhbSgpOiBDb21tYW5kIHtcblx0Y29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cdHByb2dyYW0uZXhpdE92ZXJyaWRlKCk7XG5cdHByb2dyYW1cblx0XHQubmFtZShcImRlY29oZXJlXCIpXG5cdFx0LmRlc2NyaXB0aW9uKFwiRGVjb2hlcmUgQ0xJXCIpXG5cdFx0Lm9wdGlvbihcIi1kIDxkaXJlY3Rvcnk+XCIsIFwiVGFyZ2V0IGRpcmVjdG9yeSAoZGVmYXVsdDogY3VycmVudCBkaXJlY3RvcnkpXCIsIFwiLlwiKTtcblxuXHRjb25zdCBjcmVhdGUgPSBwcm9ncmFtLmNvbW1hbmQoXCJjcmVhdGVcIikuZGVzY3JpcHRpb24oXCJDcmVhdGUgYSBuZXcgRGVjb2hlcmUgd29ya3NwYWNlXCIpO1xuXHRhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyhcblx0XHRjcmVhdGVcblx0XHRcdC5jb21tYW5kKFwid2ViYXBpXCIpXG5cdFx0XHQuYXJndW1lbnQoXCJbZGlyZWN0b3J5XVwiLCBcIlRhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQ6IC1kIG9yIGN1cnJlbnQgZGlyZWN0b3J5KVwiKVxuXHRcdFx0Lm9wdGlvbihcblx0XHRcdFx0XCItLW5hbWUgPHNsdWc+XCIsXG5cdFx0XHRcdFwiQVBJIG5hbWUgdW5kZXIgcHJvamVjdHMvIChyZXBlYXRhYmxlOyBkZWZhdWx0OiBhcGkpXCIsXG5cdFx0XHRcdGNvbGxlY3ROYW1lLFxuXHRcdFx0XHRbXSBhcyBzdHJpbmdbXSxcblx0XHRcdCksXG5cdCkuYWN0aW9uKGFzeW5jIChkaXJlY3Rvcnk6IHN0cmluZyB8IHVuZGVmaW5lZCwgX29wdHM6IHVua25vd24sIGNtZDogQ29tbWFuZCkgPT4ge1xuXHRcdGF3YWl0IHJ1blNjYWZmb2xkQXBpKHRvQXBpT3B0aW9ucyhkaXJlY3RvcnksIGNtZC5vcHRzV2l0aEdsb2JhbHMoKSkpO1xuXHR9KTtcblxuXHRhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyhcblx0XHRwcm9ncmFtXG5cdFx0XHQuY29tbWFuZChcImFkZFwiKVxuXHRcdFx0LmRlc2NyaXB0aW9uKFwiQWRkIHRvIGFuIGV4aXN0aW5nIERlY29oZXJlIHdvcmtzcGFjZVwiKVxuXHRcdFx0LmNvbW1hbmQoXCJhcGlcIilcblx0XHRcdC5hcmd1bWVudChcIjxuYW1lPlwiLCBcIkFQSSBuYW1lIHVuZGVyIHByb2plY3RzL1wiKSxcblx0KS5hY3Rpb24oYXN5bmMgKG5hbWU6IHN0cmluZywgX29wdHM6IHVua25vd24sIGNtZDogQ29tbWFuZCkgPT4ge1xuXHRcdGF3YWl0IHJ1blNjYWZmb2xkQXBpKFxuXHRcdFx0dG9BcGlPcHRpb25zKHVuZGVmaW5lZCwgY21kLm9wdHNXaXRoR2xvYmFscygpLCB7IG5hbWVzOiBbbmFtZV0sIGFkZDogdHJ1ZSB9KSxcblx0XHQpO1xuXHR9KTtcblxuXHRjb25zdCBhdXRoMCA9IHByb2dyYW1cblx0XHQuY29tbWFuZChcImF1dGgwXCIpXG5cdFx0LmRlc2NyaXB0aW9uKFwiTG9nIGluIHRvIEF1dGgwIGFuZCB1cGRhdGUgYSBzY2FmZm9sZGVkIGNsaWVudFwiKTtcblx0YXV0aDBcblx0XHQuY29tbWFuZChcImxvZ2luXCIpXG5cdFx0LmRlc2NyaXB0aW9uKFwiQXV0aGVudGljYXRlIHRoZSBBdXRoMCBDTEkgKGRldmljZSBVUkw7IHRva2VucyBwZXJzaXN0IG9uIHRoZSBob3N0KVwiKVxuXHRcdC5hY3Rpb24oKCkgPT4ge1xuXHRcdFx0cnVuQXV0aDBMb2dpbigpO1xuXHRcdH0pO1xuXHRhdXRoMFxuXHRcdC5jb21tYW5kKFwiY29uZmlndXJlXCIpXG5cdFx0LmRlc2NyaXB0aW9uKFxuXHRcdFx0XCJVcGRhdGUgQXV0aDAgQVBJIHBlcm1pc3Npb25zIGFuZCBQb3N0bWFuIFNQQSBmcm9tIEBBdXRob3JpemUgaW4gdGhpcyB3b3Jrc3BhY2VcIixcblx0XHQpXG5cdFx0LmFjdGlvbigoX29wdHM6IHVua25vd24sIGNtZDogQ29tbWFuZCkgPT4ge1xuXHRcdFx0Y29uc3QgZCA9IGNtZC5vcHRzV2l0aEdsb2JhbHMoKS5kO1xuXHRcdFx0cnVuQXV0aDBDb25maWd1cmUodHlwZW9mIGQgPT09IFwic3RyaW5nXCIgPyBkIDogXCIuXCIpO1xuXHRcdH0pO1xuXG5cdHJldHVybiBwcm9ncmFtO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ2xpKGFyZ3Y6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2KTogUHJvbWlzZTx2b2lkPiB7XG5cdHRyeSB7XG5cdFx0YXdhaXQgY3JlYXRlUHJvZ3JhbSgpLnBhcnNlQXN5bmMoYXJndik7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGlmIChlcnIgaW5zdGFuY2VvZiBDb21tYW5kZXJFcnJvcikge1xuXHRcdFx0cHJvY2Vzcy5leGl0KGVyci5leGl0Q29kZSk7XG5cdFx0fVxuXHRcdGlmIChlcnIgaW5zdGFuY2VvZiBDcmVhdGVDbGlFcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgXFxuICAke2Vyci5tZXNzYWdlfVxcbmApO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdH1cblx0XHRjb25zb2xlLmVycm9yKGVycik7XG5cdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHR9XG5cdHByb2Nlc3MuZXhpdChwcm9jZXNzLmV4aXRDb2RlID8/IDApO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVByb2dyYW0iLCJydW5DbGkiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImV4aXRPdmVycmlkZSIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsIm9wdGlvbiIsImNyZWF0ZSIsImNvbW1hbmQiLCJhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyIsImFyZ3VtZW50IiwiY29sbGVjdE5hbWUiLCJhY3Rpb24iLCJkaXJlY3RvcnkiLCJfb3B0cyIsImNtZCIsInJ1blNjYWZmb2xkQXBpIiwidG9BcGlPcHRpb25zIiwib3B0c1dpdGhHbG9iYWxzIiwidW5kZWZpbmVkIiwibmFtZXMiLCJhZGQiLCJhdXRoMCIsInJ1bkF1dGgwTG9naW4iLCJkIiwicnVuQXV0aDBDb25maWd1cmUiLCJhcmd2IiwicHJvY2VzcyIsInBhcnNlQXN5bmMiLCJlcnIiLCJDb21tYW5kZXJFcnJvciIsImV4aXQiLCJleGl0Q29kZSIsIkNyZWF0ZUNsaUVycm9yIiwiY29uc29sZSIsImVycm9yIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFVZ0JBO2VBQUFBOztRQXlETUM7ZUFBQUE7OzsyQkFuRWtCO3lCQUNUOytCQUNrQjs0QkFNMUM7QUFFQSxTQUFTRDtJQUNmLE1BQU1FLFVBQVUsSUFBSUMsa0JBQU87SUFDM0JELFFBQVFFLFlBQVk7SUFDcEJGLFFBQ0VHLElBQUksQ0FBQyxZQUNMQyxXQUFXLENBQUMsZ0JBQ1pDLE1BQU0sQ0FBQyxrQkFBa0IsaURBQWlEO0lBRTVFLE1BQU1DLFNBQVNOLFFBQVFPLE9BQU8sQ0FBQyxVQUFVSCxXQUFXLENBQUM7SUFDckRJLElBQUFBLG1DQUF1QixFQUN0QkYsT0FDRUMsT0FBTyxDQUFDLFVBQ1JFLFFBQVEsQ0FBQyxlQUFlLHVEQUN4QkosTUFBTSxDQUNOLGlCQUNBLHVEQUNBSyx1QkFBVyxFQUNYLEVBQUUsR0FFSEMsTUFBTSxDQUFDLE9BQU9DLFdBQStCQyxPQUFnQkM7UUFDOUQsTUFBTUMsSUFBQUEsMEJBQWMsRUFBQ0MsSUFBQUEsd0JBQVksRUFBQ0osV0FBV0UsSUFBSUcsZUFBZTtJQUNqRTtJQUVBVCxJQUFBQSxtQ0FBdUIsRUFDdEJSLFFBQ0VPLE9BQU8sQ0FBQyxPQUNSSCxXQUFXLENBQUMseUNBQ1pHLE9BQU8sQ0FBQyxPQUNSRSxRQUFRLENBQUMsVUFBVSw2QkFDcEJFLE1BQU0sQ0FBQyxPQUFPUixNQUFjVSxPQUFnQkM7UUFDN0MsTUFBTUMsSUFBQUEsMEJBQWMsRUFDbkJDLElBQUFBLHdCQUFZLEVBQUNFLFdBQVdKLElBQUlHLGVBQWUsSUFBSTtZQUFFRSxPQUFPO2dCQUFDaEI7YUFBSztZQUFFaUIsS0FBSztRQUFLO0lBRTVFO0lBRUEsTUFBTUMsUUFBUXJCLFFBQ1pPLE9BQU8sQ0FBQyxTQUNSSCxXQUFXLENBQUM7SUFDZGlCLE1BQ0VkLE9BQU8sQ0FBQyxTQUNSSCxXQUFXLENBQUMsdUVBQ1pPLE1BQU0sQ0FBQztRQUNQVyxJQUFBQSw0QkFBYTtJQUNkO0lBQ0RELE1BQ0VkLE9BQU8sQ0FBQyxhQUNSSCxXQUFXLENBQ1gsa0ZBRUFPLE1BQU0sQ0FBQyxDQUFDRSxPQUFnQkM7UUFDeEIsTUFBTVMsSUFBSVQsSUFBSUcsZUFBZSxHQUFHTSxDQUFDO1FBQ2pDQyxJQUFBQSxnQ0FBaUIsRUFBQyxPQUFPRCxNQUFNLFdBQVdBLElBQUk7SUFDL0M7SUFFRCxPQUFPdkI7QUFDUjtBQUVPLGVBQWVELE9BQU8wQixPQUFpQkMsUUFBUUQsSUFBSTtJQUN6RCxJQUFJO1FBQ0gsTUFBTTNCLGdCQUFnQjZCLFVBQVUsQ0FBQ0Y7SUFDbEMsRUFBRSxPQUFPRyxLQUFLO1FBQ2IsSUFBSUEsZUFBZUMseUJBQWMsRUFBRTtZQUNsQ0gsUUFBUUksSUFBSSxDQUFDRixJQUFJRyxRQUFRO1FBQzFCO1FBQ0EsSUFBSUgsZUFBZUksdUJBQWMsRUFBRTtZQUNsQ0MsUUFBUUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFTixJQUFJTyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3BDVCxRQUFRSSxJQUFJLENBQUM7UUFDZDtRQUNBRyxRQUFRQyxLQUFLLENBQUNOO1FBQ2RGLFFBQVFJLElBQUksQ0FBQztJQUNkO0lBQ0FKLFFBQVFJLElBQUksQ0FBQ0osUUFBUUssUUFBUSxJQUFJO0FBQ2xDIn0=
@@ -0,0 +1,252 @@
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 AUTH0_CLI_INSTALL_MESSAGE () {
13
+ return AUTH0_CLI_INSTALL_MESSAGE;
14
+ },
15
+ get ensureLoggedIn () {
16
+ return ensureLoggedIn;
17
+ },
18
+ get requireInstalled () {
19
+ return requireInstalled;
20
+ },
21
+ get runAuth0Configure () {
22
+ return runAuth0Configure;
23
+ },
24
+ get runAuth0Login () {
25
+ return runAuth0Login;
26
+ }
27
+ });
28
+ const _nodefs = require("node:fs");
29
+ const _nodepath = require("node:path");
30
+ const _apiname = require("./api-name.js");
31
+ const _authorizescopes = require("./authorize-scopes.js");
32
+ const _auth0cli = /*#__PURE__*/ _interop_require_wildcard(require("./features/auth0-cli.js"));
33
+ function _getRequireWildcardCache(nodeInterop) {
34
+ if (typeof WeakMap !== "function") return null;
35
+ var cacheBabelInterop = new WeakMap();
36
+ var cacheNodeInterop = new WeakMap();
37
+ return (_getRequireWildcardCache = function(nodeInterop) {
38
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
39
+ })(nodeInterop);
40
+ }
41
+ function _interop_require_wildcard(obj, nodeInterop) {
42
+ if (!nodeInterop && obj && obj.__esModule) {
43
+ return obj;
44
+ }
45
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
46
+ return {
47
+ default: obj
48
+ };
49
+ }
50
+ var cache = _getRequireWildcardCache(nodeInterop);
51
+ if (cache && cache.has(obj)) {
52
+ return cache.get(obj);
53
+ }
54
+ var newObj = {
55
+ __proto__: null
56
+ };
57
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
58
+ for(var key in obj){
59
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
60
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
61
+ if (desc && (desc.get || desc.set)) {
62
+ Object.defineProperty(newObj, key, desc);
63
+ } else {
64
+ newObj[key] = obj[key];
65
+ }
66
+ }
67
+ }
68
+ newObj.default = obj;
69
+ if (cache) {
70
+ cache.set(obj, newObj);
71
+ }
72
+ return newObj;
73
+ }
74
+ /** Same Postman OAuth callbacks as `PostmanFeature`. */ const POSTMAN_CALLBACKS = [
75
+ "https://oauth.pstmn.io/v1/callback",
76
+ "https://oauth.pstmn.io/v1/browser-callback"
77
+ ];
78
+ const SPA_SUFFIX = " Postman";
79
+ const AUTH0_CLI_INSTALL_MESSAGE = "The Auth0 CLI is required.\n" + " It is bundled in the Decohere create image (`npx @decohere/create auth0 login`).\n" + " Host install: brew install auth0/auth0-cli/auth0\n" + " Or visit: https://github.com/auth0/auth0-cli";
80
+ function fail(message) {
81
+ throw new _apiname.CreateCliError(message);
82
+ }
83
+ function requireInstalled() {
84
+ if (_auth0cli.isInstalled()) return;
85
+ fail(AUTH0_CLI_INSTALL_MESSAGE);
86
+ }
87
+ function ensureLoggedIn() {
88
+ requireInstalled();
89
+ process.stdout.write("\n Checking Auth0 credentials...");
90
+ let tenants = _auth0cli.listTenants();
91
+ if (tenants.length === 0) {
92
+ process.stdout.write(" not logged in.\n");
93
+ console.log(" Logging in to Auth0 (open the URL in your browser)...");
94
+ if (!_auth0cli.login()) fail("Auth0 login failed.");
95
+ tenants = _auth0cli.listTenants();
96
+ }
97
+ try {
98
+ _auth0cli.listApis();
99
+ process.stdout.write(" ok.\n");
100
+ } catch (err) {
101
+ if (err instanceof _auth0cli.Auth0AuthError) {
102
+ process.stdout.write(" token expired.\n");
103
+ console.log(" Re-authenticating (open the URL in your browser)...");
104
+ if (!_auth0cli.login()) fail("Auth0 login failed.");
105
+ tenants = _auth0cli.listTenants();
106
+ }
107
+ }
108
+ const active = tenants.find((t)=>t.active) ?? tenants[0];
109
+ if (active == null) fail("No Auth0 tenant after login.");
110
+ return active;
111
+ }
112
+ function runAuth0Login() {
113
+ requireInstalled();
114
+ console.log(" Logging in to Auth0 (open the URL in your browser)...");
115
+ if (!_auth0cli.login()) fail("Auth0 login failed.");
116
+ const tenants = _auth0cli.listTenants();
117
+ const active = tenants.find((t)=>t.active) ?? tenants[0];
118
+ if (active == null) fail("No Auth0 tenant after login.");
119
+ console.log(`\n ✓ Auth0 tenant: https://${active.name}`);
120
+ console.log(" Tokens are stored in ~/.config/auth0 (mounted into the create image).");
121
+ console.log(" Next: npx @decohere/create auth0 configure");
122
+ }
123
+ function runAuth0Configure(directory = ".") {
124
+ const targetDir = (0, _nodepath.resolve)(directory);
125
+ if (!(0, _apiname.isDecohereWorkspace)(targetDir)) {
126
+ throw new _apiname.CreateCliError(`Not a Decohere workspace: ${targetDir}. Scaffold one first with \`npx @decohere/create webapi\`.`);
127
+ }
128
+ const active = ensureLoggedIn();
129
+ const issuerBaseUrl = `https://${active.name}`;
130
+ const projectName = process.env.DECOHERE_PROJECT_NAME?.trim() || (0, _nodepath.basename)(targetDir);
131
+ const envPath = (0, _nodepath.join)(targetDir, ".env");
132
+ const existing = readEnvFile(envPath);
133
+ const existingAudience = existing.AUTH0_AUDIENCE?.trim();
134
+ const discovered = (0, _authorizescopes.discoverAuthorizeScopes)(targetDir);
135
+ let existingScopes = [];
136
+ if (existingAudience) {
137
+ try {
138
+ existingScopes = _auth0cli.listApiScopes(existingAudience);
139
+ } catch (err) {
140
+ if (err instanceof _auth0cli.Auth0AuthError) throw err;
141
+ }
142
+ }
143
+ const apiScopes = resolveApiScopes(discovered, existingScopes);
144
+ console.log(discovered.length > 0 ? ` ✓ Scanned @Authorize — ${discovered.length} scope(s) from controllers` : " ✓ No @Authorize in projects/*/src — keeping existing / Hello scopes");
145
+ let audience = existingAudience;
146
+ if (audience) {
147
+ try {
148
+ _auth0cli.updateApiScopes(audience, apiScopes);
149
+ console.log(` ✓ API scopes ensured (${apiScopes.join(", ")})`);
150
+ } catch (err) {
151
+ console.error(` ✗ Failed to update API scopes: ${err instanceof Error ? err.message : err}`);
152
+ }
153
+ } else {
154
+ const identifier = `https://api.${projectName}`;
155
+ console.log(`\n Creating Auth0 API ${identifier}...`);
156
+ audience = _auth0cli.createApi(`${projectName} API`, identifier, apiScopes).identifier;
157
+ console.log(` ✓ API created: ${audience}`);
158
+ }
159
+ const appName = `${projectName}${SPA_SUFFIX}`;
160
+ const app = _auth0cli.ensureSpaApp(appName, [
161
+ ...POSTMAN_CALLBACKS
162
+ ]);
163
+ console.log(app.reused ? ` ✓ Reusing Auth0 SPA app (${app.client_id})` : ` ✓ Auth0 SPA app created (${app.client_id})`);
164
+ try {
165
+ _auth0cli.enableConnectionForClient(_auth0cli.DB_CONNECTION_NAME, app.client_id);
166
+ console.log(` ✓ Enabled ${_auth0cli.DB_CONNECTION_NAME} on SPA`);
167
+ } catch (err) {
168
+ console.error(` ✗ Failed to enable DB connection on SPA: ${err instanceof Error ? err.message : err}`);
169
+ }
170
+ upsertEnv(envPath, {
171
+ AUTH0_ISSUER_BASE_URL: issuerBaseUrl,
172
+ AUTH0_AUDIENCE: audience
173
+ });
174
+ console.log(` ✓ Wrote AUTH0_ISSUER_BASE_URL and AUTH0_AUDIENCE to .env`);
175
+ const adminSub = existing.AUTH0_ADMIN_USER_SUB?.trim();
176
+ if (adminSub) {
177
+ try {
178
+ _auth0cli.assignUserPermissions(adminSub, audience, apiScopes);
179
+ console.log(` ✓ Assigned ${apiScopes.length} API permission(s) to admin user`);
180
+ } catch (err) {
181
+ console.error(` ✗ Failed to assign admin permissions: ${err instanceof Error ? err.message : err}`);
182
+ }
183
+ }
184
+ const domain = issuerBaseUrl.replace(/^https?:\/\//, "");
185
+ patchPostmanAuth(targetDir, projectName, {
186
+ domain,
187
+ audience,
188
+ clientId: app.client_id,
189
+ scopes: (0, _authorizescopes.postmanRequestedScopes)(apiScopes)
190
+ });
191
+ }
192
+ function readEnvFile(path) {
193
+ if (!(0, _nodefs.existsSync)(path)) return {};
194
+ const out = {};
195
+ for (const line of (0, _nodefs.readFileSync)(path, "utf8").split("\n")){
196
+ const trimmed = line.trim();
197
+ if (trimmed === "" || trimmed.startsWith("#")) continue;
198
+ const eq = line.indexOf("=");
199
+ if (eq <= 0) continue;
200
+ out[line.slice(0, eq).trim()] = line.slice(eq + 1);
201
+ }
202
+ return out;
203
+ }
204
+ function resolveApiScopes(discovered, existing) {
205
+ const merged = (0, _authorizescopes.mergeApiScopes)(discovered, existing);
206
+ return merged.length > 0 ? merged : [
207
+ ..._auth0cli.HELLO_API_SCOPES
208
+ ].sort();
209
+ }
210
+ function upsertEnv(path, entries) {
211
+ let text = (0, _nodefs.existsSync)(path) ? (0, _nodefs.readFileSync)(path, "utf8") : "";
212
+ for (const [key, value] of Object.entries(entries)){
213
+ const re = new RegExp(`^${key}=.*$`, "m");
214
+ if (re.test(text)) {
215
+ text = text.replace(re, `${key}=${value}`);
216
+ } else {
217
+ text = `${text}${text === "" || text.endsWith("\n") ? "" : "\n"}${key}=${value}\n`;
218
+ }
219
+ }
220
+ if (text !== "" && !text.endsWith("\n")) text = `${text}\n`;
221
+ (0, _nodefs.writeFileSync)(path, text);
222
+ }
223
+ function patchPostmanAuth(targetDir, projectName, auth) {
224
+ const envYaml = (0, _nodepath.join)(targetDir, "postman/environments", `${projectName}-Local.environment.yaml`);
225
+ if ((0, _nodefs.existsSync)(envYaml)) {
226
+ let yaml = (0, _nodefs.readFileSync)(envYaml, "utf8");
227
+ yaml = replaceYamlKeyedValue(yaml, "auth0Domain", auth.domain);
228
+ yaml = replaceYamlKeyedValue(yaml, "auth0Audience", auth.audience);
229
+ yaml = replaceYamlKeyedValue(yaml, "auth0ClientId", auth.clientId);
230
+ yaml = replaceYamlKeyedValue(yaml, "authUrl", `https://${auth.domain}/authorize?audience=${auth.audience}`);
231
+ yaml = replaceYamlKeyedValue(yaml, "accessTokenUrl", `https://${auth.domain}/oauth/token`);
232
+ yaml = replaceYamlKeyedValue(yaml, "scope", auth.scopes);
233
+ (0, _nodefs.writeFileSync)(envYaml, yaml);
234
+ console.log(` ✓ Updated Postman environment auth0ClientId (${auth.clientId})`);
235
+ console.log(` ✓ Updated Postman token scopes`);
236
+ }
237
+ const collectionDef = (0, _nodepath.join)(targetDir, "postman/collections", `${projectName} WebAPI`, ".resources/definition.yaml");
238
+ if ((0, _nodefs.existsSync)(collectionDef)) {
239
+ let yaml = (0, _nodefs.readFileSync)(collectionDef, "utf8");
240
+ yaml = yaml.replace(/^(\s*clientId:\s*).+$/m, `$1${JSON.stringify(auth.clientId)}`);
241
+ yaml = yaml.replace(/^(\s*scope:\s*).+$/m, `$1${JSON.stringify(auth.scopes)}`);
242
+ (0, _nodefs.writeFileSync)(collectionDef, yaml);
243
+ }
244
+ }
245
+ /** Replace `key: <name>` / `value: …` pairs in Postman Local View environment YAML. */ function replaceYamlKeyedValue(yaml, key, value) {
246
+ const quoted = JSON.stringify(value);
247
+ const re = new RegExp(`(key:\\s*${key}\\s*\\n\\s*value:\\s*)[^\\n]+`, "m");
248
+ if (!re.test(yaml)) return yaml;
249
+ return yaml.replace(re, `$1${quoted}`);
250
+ }
251
+
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvYXV0aDAtY29tbWFuZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ3JlYXRlQ2xpRXJyb3IsIGlzRGVjb2hlcmVXb3Jrc3BhY2UgfSBmcm9tIFwiLi9hcGktbmFtZS5qc1wiO1xuaW1wb3J0IHtcblx0ZGlzY292ZXJBdXRob3JpemVTY29wZXMsXG5cdG1lcmdlQXBpU2NvcGVzLFxuXHRwb3N0bWFuUmVxdWVzdGVkU2NvcGVzLFxufSBmcm9tIFwiLi9hdXRob3JpemUtc2NvcGVzLmpzXCI7XG5pbXBvcnQgKiBhcyBhdXRoMENsaSBmcm9tIFwiLi9mZWF0dXJlcy9hdXRoMC1jbGkuanNcIjtcblxuLyoqIFNhbWUgUG9zdG1hbiBPQXV0aCBjYWxsYmFja3MgYXMgYFBvc3RtYW5GZWF0dXJlYC4gKi9cbmNvbnN0IFBPU1RNQU5fQ0FMTEJBQ0tTID0gW1xuXHRcImh0dHBzOi8vb2F1dGgucHN0bW4uaW8vdjEvY2FsbGJhY2tcIixcblx0XCJodHRwczovL29hdXRoLnBzdG1uLmlvL3YxL2Jyb3dzZXItY2FsbGJhY2tcIixcbl0gYXMgY29uc3Q7XG5cbmNvbnN0IFNQQV9TVUZGSVggPSBcIiBQb3N0bWFuXCI7XG5cbmV4cG9ydCBjb25zdCBBVVRIMF9DTElfSU5TVEFMTF9NRVNTQUdFID1cblx0XCJUaGUgQXV0aDAgQ0xJIGlzIHJlcXVpcmVkLlxcblwiICtcblx0XCIgIEl0IGlzIGJ1bmRsZWQgaW4gdGhlIERlY29oZXJlIGNyZWF0ZSBpbWFnZSAoYG5weCBAZGVjb2hlcmUvY3JlYXRlIGF1dGgwIGxvZ2luYCkuXFxuXCIgK1xuXHRcIiAgSG9zdCBpbnN0YWxsOiBicmV3IGluc3RhbGwgYXV0aDAvYXV0aDAtY2xpL2F1dGgwXFxuXCIgK1xuXHRcIiAgT3IgdmlzaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdXRoMC9hdXRoMC1jbGlcIjtcblxuZnVuY3Rpb24gZmFpbChtZXNzYWdlOiBzdHJpbmcpOiBuZXZlciB7XG5cdHRocm93IG5ldyBDcmVhdGVDbGlFcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqIFRocm93IGlmIHRoZSBgYXV0aDBgIGJpbmFyeSBpcyBtaXNzaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVJbnN0YWxsZWQoKTogdm9pZCB7XG5cdGlmIChhdXRoMENsaS5pc0luc3RhbGxlZCgpKSByZXR1cm47XG5cdGZhaWwoQVVUSDBfQ0xJX0lOU1RBTExfTUVTU0FHRSk7XG59XG5cbi8qKlxuICogTG9nIGluIHdoZW4gdGhlcmUgaXMgbm8gdGVuYW50IHNlc3Npb24gb3IgdGhlIE1hbmFnZW1lbnQgQVBJIHRva2VuIGlzIGV4cGlyZWQuXG4gKiBSZXR1cm5zIHRoZSBhY3RpdmUgdGVuYW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTG9nZ2VkSW4oKTogYXV0aDBDbGkuQXV0aDBUZW5hbnQge1xuXHRyZXF1aXJlSW5zdGFsbGVkKCk7XG5cblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCJcXG4gIENoZWNraW5nIEF1dGgwIGNyZWRlbnRpYWxzLi4uXCIpO1xuXHRsZXQgdGVuYW50cyA9IGF1dGgwQ2xpLmxpc3RUZW5hbnRzKCk7XG5cdGlmICh0ZW5hbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG5vdCBsb2dnZWQgaW4uXFxuXCIpO1xuXHRcdGNvbnNvbGUubG9nKFwiICBMb2dnaW5nIGluIHRvIEF1dGgwIChvcGVuIHRoZSBVUkwgaW4geW91ciBicm93c2VyKS4uLlwiKTtcblx0XHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIGZhaWwoXCJBdXRoMCBsb2dpbiBmYWlsZWQuXCIpO1xuXHRcdHRlbmFudHMgPSBhdXRoMENsaS5saXN0VGVuYW50cygpO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRhdXRoMENsaS5saXN0QXBpcygpO1xuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG9rLlxcblwiKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIGF1dGgwQ2xpLkF1dGgwQXV0aEVycm9yKSB7XG5cdFx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiB0b2tlbiBleHBpcmVkLlxcblwiKTtcblx0XHRcdGNvbnNvbGUubG9nKFwiICBSZS1hdXRoZW50aWNhdGluZyAob3BlbiB0aGUgVVJMIGluIHlvdXIgYnJvd3NlcikuLi5cIik7XG5cdFx0XHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIGZhaWwoXCJBdXRoMCBsb2dpbiBmYWlsZWQuXCIpO1xuXHRcdFx0dGVuYW50cyA9IGF1dGgwQ2xpLmxpc3RUZW5hbnRzKCk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYWN0aXZlID0gdGVuYW50cy5maW5kKCh0KSA9PiB0LmFjdGl2ZSkgPz8gdGVuYW50c1swXTtcblx0aWYgKGFjdGl2ZSA9PSBudWxsKSBmYWlsKFwiTm8gQXV0aDAgdGVuYW50IGFmdGVyIGxvZ2luLlwiKTtcblx0cmV0dXJuIGFjdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkF1dGgwTG9naW4oKTogdm9pZCB7XG5cdHJlcXVpcmVJbnN0YWxsZWQoKTtcblx0Y29uc29sZS5sb2coXCIgIExvZ2dpbmcgaW4gdG8gQXV0aDAgKG9wZW4gdGhlIFVSTCBpbiB5b3VyIGJyb3dzZXIpLi4uXCIpO1xuXHRpZiAoIWF1dGgwQ2xpLmxvZ2luKCkpIGZhaWwoXCJBdXRoMCBsb2dpbiBmYWlsZWQuXCIpO1xuXHRjb25zdCB0ZW5hbnRzID0gYXV0aDBDbGkubGlzdFRlbmFudHMoKTtcblx0Y29uc3QgYWN0aXZlID0gdGVuYW50cy5maW5kKCh0KSA9PiB0LmFjdGl2ZSkgPz8gdGVuYW50c1swXTtcblx0aWYgKGFjdGl2ZSA9PSBudWxsKSBmYWlsKFwiTm8gQXV0aDAgdGVuYW50IGFmdGVyIGxvZ2luLlwiKTtcblx0Y29uc29sZS5sb2coYFxcbiAg4pyTIEF1dGgwIHRlbmFudDogaHR0cHM6Ly8ke2FjdGl2ZS5uYW1lfWApO1xuXHRjb25zb2xlLmxvZyhcIiAgICBUb2tlbnMgYXJlIHN0b3JlZCBpbiB+Ly5jb25maWcvYXV0aDAgKG1vdW50ZWQgaW50byB0aGUgY3JlYXRlIGltYWdlKS5cIik7XG5cdGNvbnNvbGUubG9nKFwiICAgIE5leHQ6IG5weCBAZGVjb2hlcmUvY3JlYXRlIGF1dGgwIGNvbmZpZ3VyZVwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkF1dGgwQ29uZmlndXJlKGRpcmVjdG9yeSA9IFwiLlwiKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldERpciA9IHJlc29sdmUoZGlyZWN0b3J5KTtcblx0aWYgKCFpc0RlY29oZXJlV29ya3NwYWNlKHRhcmdldERpcikpIHtcblx0XHR0aHJvdyBuZXcgQ3JlYXRlQ2xpRXJyb3IoXG5cdFx0XHRgTm90IGEgRGVjb2hlcmUgd29ya3NwYWNlOiAke3RhcmdldERpcn0uIFNjYWZmb2xkIG9uZSBmaXJzdCB3aXRoIFxcYG5weCBAZGVjb2hlcmUvY3JlYXRlIHdlYmFwaVxcYC5gLFxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBhY3RpdmUgPSBlbnN1cmVMb2dnZWRJbigpO1xuXHRjb25zdCBpc3N1ZXJCYXNlVXJsID0gYGh0dHBzOi8vJHthY3RpdmUubmFtZX1gO1xuXHRjb25zdCBwcm9qZWN0TmFtZSA9IHByb2Nlc3MuZW52LkRFQ09IRVJFX1BST0pFQ1RfTkFNRT8udHJpbSgpIHx8IGJhc2VuYW1lKHRhcmdldERpcik7XG5cdGNvbnN0IGVudlBhdGggPSBqb2luKHRhcmdldERpciwgXCIuZW52XCIpO1xuXHRjb25zdCBleGlzdGluZyA9IHJlYWRFbnZGaWxlKGVudlBhdGgpO1xuXHRjb25zdCBleGlzdGluZ0F1ZGllbmNlID0gZXhpc3RpbmcuQVVUSDBfQVVESUVOQ0U/LnRyaW0oKTtcblx0Y29uc3QgZGlzY292ZXJlZCA9IGRpc2NvdmVyQXV0aG9yaXplU2NvcGVzKHRhcmdldERpcik7XG5cdGxldCBleGlzdGluZ1Njb3Blczogc3RyaW5nW10gPSBbXTtcblx0aWYgKGV4aXN0aW5nQXVkaWVuY2UpIHtcblx0XHR0cnkge1xuXHRcdFx0ZXhpc3RpbmdTY29wZXMgPSBhdXRoMENsaS5saXN0QXBpU2NvcGVzKGV4aXN0aW5nQXVkaWVuY2UpO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0aWYgKGVyciBpbnN0YW5jZW9mIGF1dGgwQ2xpLkF1dGgwQXV0aEVycm9yKSB0aHJvdyBlcnI7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGFwaVNjb3BlcyA9IHJlc29sdmVBcGlTY29wZXMoZGlzY292ZXJlZCwgZXhpc3RpbmdTY29wZXMpO1xuXHRjb25zb2xlLmxvZyhcblx0XHRkaXNjb3ZlcmVkLmxlbmd0aCA+IDBcblx0XHRcdD8gYCAg4pyTIFNjYW5uZWQgQEF1dGhvcml6ZSDigJQgJHtkaXNjb3ZlcmVkLmxlbmd0aH0gc2NvcGUocykgZnJvbSBjb250cm9sbGVyc2Bcblx0XHRcdDogXCIgIOKckyBObyBAQXV0aG9yaXplIGluIHByb2plY3RzLyovc3JjIOKAlCBrZWVwaW5nIGV4aXN0aW5nIC8gSGVsbG8gc2NvcGVzXCIsXG5cdCk7XG5cblx0bGV0IGF1ZGllbmNlID0gZXhpc3RpbmdBdWRpZW5jZTtcblx0aWYgKGF1ZGllbmNlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGF1dGgwQ2xpLnVwZGF0ZUFwaVNjb3BlcyhhdWRpZW5jZSwgYXBpU2NvcGVzKTtcblx0XHRcdGNvbnNvbGUubG9nKGAgIOKckyBBUEkgc2NvcGVzIGVuc3VyZWQgKCR7YXBpU2NvcGVzLmpvaW4oXCIsIFwiKX0pYCk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XHRgICDinJcgRmFpbGVkIHRvIHVwZGF0ZSBBUEkgc2NvcGVzOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnJ9YCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSBgaHR0cHM6Ly9hcGkuJHtwcm9qZWN0TmFtZX1gO1xuXHRcdGNvbnNvbGUubG9nKGBcXG4gIENyZWF0aW5nIEF1dGgwIEFQSSAke2lkZW50aWZpZXJ9Li4uYCk7XG5cdFx0YXVkaWVuY2UgPSBhdXRoMENsaS5jcmVhdGVBcGkoYCR7cHJvamVjdE5hbWV9IEFQSWAsIGlkZW50aWZpZXIsIGFwaVNjb3BlcykuaWRlbnRpZmllcjtcblx0XHRjb25zb2xlLmxvZyhgICDinJMgQVBJIGNyZWF0ZWQ6ICR7YXVkaWVuY2V9YCk7XG5cdH1cblxuXHRjb25zdCBhcHBOYW1lID0gYCR7cHJvamVjdE5hbWV9JHtTUEFfU1VGRklYfWA7XG5cdGNvbnN0IGFwcCA9IGF1dGgwQ2xpLmVuc3VyZVNwYUFwcChhcHBOYW1lLCBbLi4uUE9TVE1BTl9DQUxMQkFDS1NdKTtcblx0Y29uc29sZS5sb2coXG5cdFx0YXBwLnJldXNlZFxuXHRcdFx0PyBgICDinJMgUmV1c2luZyBBdXRoMCBTUEEgYXBwICgke2FwcC5jbGllbnRfaWR9KWBcblx0XHRcdDogYCAg4pyTIEF1dGgwIFNQQSBhcHAgY3JlYXRlZCAoJHthcHAuY2xpZW50X2lkfSlgLFxuXHQpO1xuXHR0cnkge1xuXHRcdGF1dGgwQ2xpLmVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQoYXV0aDBDbGkuREJfQ09OTkVDVElPTl9OQU1FLCBhcHAuY2xpZW50X2lkKTtcblx0XHRjb25zb2xlLmxvZyhgICDinJMgRW5hYmxlZCAke2F1dGgwQ2xpLkRCX0NPTk5FQ1RJT05fTkFNRX0gb24gU1BBYCk7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRgICDinJcgRmFpbGVkIHRvIGVuYWJsZSBEQiBjb25uZWN0aW9uIG9uIFNQQTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyfWAsXG5cdFx0KTtcblx0fVxuXG5cdHVwc2VydEVudihlbnZQYXRoLCB7XG5cdFx0QVVUSDBfSVNTVUVSX0JBU0VfVVJMOiBpc3N1ZXJCYXNlVXJsLFxuXHRcdEFVVEgwX0FVRElFTkNFOiBhdWRpZW5jZSxcblx0fSk7XG5cdGNvbnNvbGUubG9nKGAgIOKckyBXcm90ZSBBVVRIMF9JU1NVRVJfQkFTRV9VUkwgYW5kIEFVVEgwX0FVRElFTkNFIHRvIC5lbnZgKTtcblxuXHRjb25zdCBhZG1pblN1YiA9IGV4aXN0aW5nLkFVVEgwX0FETUlOX1VTRVJfU1VCPy50cmltKCk7XG5cdGlmIChhZG1pblN1Yikge1xuXHRcdHRyeSB7XG5cdFx0XHRhdXRoMENsaS5hc3NpZ25Vc2VyUGVybWlzc2lvbnMoYWRtaW5TdWIsIGF1ZGllbmNlLCBhcGlTY29wZXMpO1xuXHRcdFx0Y29uc29sZS5sb2coYCAg4pyTIEFzc2lnbmVkICR7YXBpU2NvcGVzLmxlbmd0aH0gQVBJIHBlcm1pc3Npb24ocykgdG8gYWRtaW4gdXNlcmApO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0YCAg4pyXIEZhaWxlZCB0byBhc3NpZ24gYWRtaW4gcGVybWlzc2lvbnM6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycn1gLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBkb21haW4gPSBpc3N1ZXJCYXNlVXJsLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgXCJcIik7XG5cdHBhdGNoUG9zdG1hbkF1dGgodGFyZ2V0RGlyLCBwcm9qZWN0TmFtZSwge1xuXHRcdGRvbWFpbixcblx0XHRhdWRpZW5jZSxcblx0XHRjbGllbnRJZDogYXBwLmNsaWVudF9pZCxcblx0XHRzY29wZXM6IHBvc3RtYW5SZXF1ZXN0ZWRTY29wZXMoYXBpU2NvcGVzKSxcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRFbnZGaWxlKHBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuXHRpZiAoIWV4aXN0c1N5bmMocGF0aCkpIHJldHVybiB7fTtcblx0Y29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdGZvciAoY29uc3QgbGluZSBvZiByZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpLnNwbGl0KFwiXFxuXCIpKSB7XG5cdFx0Y29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbSgpO1xuXHRcdGlmICh0cmltbWVkID09PSBcIlwiIHx8IHRyaW1tZWQuc3RhcnRzV2l0aChcIiNcIikpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGVxID0gbGluZS5pbmRleE9mKFwiPVwiKTtcblx0XHRpZiAoZXEgPD0gMCkgY29udGludWU7XG5cdFx0b3V0W2xpbmUuc2xpY2UoMCwgZXEpLnRyaW0oKV0gPSBsaW5lLnNsaWNlKGVxICsgMSk7XG5cdH1cblx0cmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFwaVNjb3Blcyhcblx0ZGlzY292ZXJlZDogcmVhZG9ubHkgc3RyaW5nW10sXG5cdGV4aXN0aW5nOiByZWFkb25seSBzdHJpbmdbXSxcbik6IHN0cmluZ1tdIHtcblx0Y29uc3QgbWVyZ2VkID0gbWVyZ2VBcGlTY29wZXMoZGlzY292ZXJlZCwgZXhpc3RpbmcpO1xuXHRyZXR1cm4gbWVyZ2VkLmxlbmd0aCA+IDAgPyBtZXJnZWQgOiBbLi4uYXV0aDBDbGkuSEVMTE9fQVBJX1NDT1BFU10uc29ydCgpO1xufVxuXG5mdW5jdGlvbiB1cHNlcnRFbnYocGF0aDogc3RyaW5nLCBlbnRyaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG5cdGxldCB0ZXh0ID0gZXhpc3RzU3luYyhwYXRoKSA/IHJlYWRGaWxlU3luYyhwYXRoLCBcInV0ZjhcIikgOiBcIlwiO1xuXHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnRyaWVzKSkge1xuXHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgXiR7a2V5fT0uKiRgLCBcIm1cIik7XG5cdFx0aWYgKHJlLnRlc3QodGV4dCkpIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UocmUsIGAke2tleX09JHt2YWx1ZX1gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGV4dCA9IGAke3RleHR9JHt0ZXh0ID09PSBcIlwiIHx8IHRleHQuZW5kc1dpdGgoXCJcXG5cIikgPyBcIlwiIDogXCJcXG5cIn0ke2tleX09JHt2YWx1ZX1cXG5gO1xuXHRcdH1cblx0fVxuXHRpZiAodGV4dCAhPT0gXCJcIiAmJiAhdGV4dC5lbmRzV2l0aChcIlxcblwiKSkgdGV4dCA9IGAke3RleHR9XFxuYDtcblx0d3JpdGVGaWxlU3luYyhwYXRoLCB0ZXh0KTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hQb3N0bWFuQXV0aChcblx0dGFyZ2V0RGlyOiBzdHJpbmcsXG5cdHByb2plY3ROYW1lOiBzdHJpbmcsXG5cdGF1dGg6IHsgZG9tYWluOiBzdHJpbmc7IGF1ZGllbmNlOiBzdHJpbmc7IGNsaWVudElkOiBzdHJpbmc7IHNjb3Blczogc3RyaW5nIH0sXG4pOiB2b2lkIHtcblx0Y29uc3QgZW52WWFtbCA9IGpvaW4oXG5cdFx0dGFyZ2V0RGlyLFxuXHRcdFwicG9zdG1hbi9lbnZpcm9ubWVudHNcIixcblx0XHRgJHtwcm9qZWN0TmFtZX0tTG9jYWwuZW52aXJvbm1lbnQueWFtbGAsXG5cdCk7XG5cdGlmIChleGlzdHNTeW5jKGVudllhbWwpKSB7XG5cdFx0bGV0IHlhbWwgPSByZWFkRmlsZVN5bmMoZW52WWFtbCwgXCJ1dGY4XCIpO1xuXHRcdHlhbWwgPSByZXBsYWNlWWFtbEtleWVkVmFsdWUoeWFtbCwgXCJhdXRoMERvbWFpblwiLCBhdXRoLmRvbWFpbik7XG5cdFx0eWFtbCA9IHJlcGxhY2VZYW1sS2V5ZWRWYWx1ZSh5YW1sLCBcImF1dGgwQXVkaWVuY2VcIiwgYXV0aC5hdWRpZW5jZSk7XG5cdFx0eWFtbCA9IHJlcGxhY2VZYW1sS2V5ZWRWYWx1ZSh5YW1sLCBcImF1dGgwQ2xpZW50SWRcIiwgYXV0aC5jbGllbnRJZCk7XG5cdFx0eWFtbCA9IHJlcGxhY2VZYW1sS2V5ZWRWYWx1ZShcblx0XHRcdHlhbWwsXG5cdFx0XHRcImF1dGhVcmxcIixcblx0XHRcdGBodHRwczovLyR7YXV0aC5kb21haW59L2F1dGhvcml6ZT9hdWRpZW5jZT0ke2F1dGguYXVkaWVuY2V9YCxcblx0XHQpO1xuXHRcdHlhbWwgPSByZXBsYWNlWWFtbEtleWVkVmFsdWUoeWFtbCwgXCJhY2Nlc3NUb2tlblVybFwiLCBgaHR0cHM6Ly8ke2F1dGguZG9tYWlufS9vYXV0aC90b2tlbmApO1xuXHRcdHlhbWwgPSByZXBsYWNlWWFtbEtleWVkVmFsdWUoeWFtbCwgXCJzY29wZVwiLCBhdXRoLnNjb3Blcyk7XG5cdFx0d3JpdGVGaWxlU3luYyhlbnZZYW1sLCB5YW1sKTtcblx0XHRjb25zb2xlLmxvZyhgICDinJMgVXBkYXRlZCBQb3N0bWFuIGVudmlyb25tZW50IGF1dGgwQ2xpZW50SWQgKCR7YXV0aC5jbGllbnRJZH0pYCk7XG5cdFx0Y29uc29sZS5sb2coYCAg4pyTIFVwZGF0ZWQgUG9zdG1hbiB0b2tlbiBzY29wZXNgKTtcblx0fVxuXG5cdGNvbnN0IGNvbGxlY3Rpb25EZWYgPSBqb2luKFxuXHRcdHRhcmdldERpcixcblx0XHRcInBvc3RtYW4vY29sbGVjdGlvbnNcIixcblx0XHRgJHtwcm9qZWN0TmFtZX0gV2ViQVBJYCxcblx0XHRcIi5yZXNvdXJjZXMvZGVmaW5pdGlvbi55YW1sXCIsXG5cdCk7XG5cdGlmIChleGlzdHNTeW5jKGNvbGxlY3Rpb25EZWYpKSB7XG5cdFx0bGV0IHlhbWwgPSByZWFkRmlsZVN5bmMoY29sbGVjdGlvbkRlZiwgXCJ1dGY4XCIpO1xuXHRcdHlhbWwgPSB5YW1sLnJlcGxhY2UoL14oXFxzKmNsaWVudElkOlxccyopLiskL20sIGAkMSR7SlNPTi5zdHJpbmdpZnkoYXV0aC5jbGllbnRJZCl9YCk7XG5cdFx0eWFtbCA9IHlhbWwucmVwbGFjZSgvXihcXHMqc2NvcGU6XFxzKikuKyQvbSwgYCQxJHtKU09OLnN0cmluZ2lmeShhdXRoLnNjb3Blcyl9YCk7XG5cdFx0d3JpdGVGaWxlU3luYyhjb2xsZWN0aW9uRGVmLCB5YW1sKTtcblx0fVxufVxuXG4vKiogUmVwbGFjZSBga2V5OiA8bmFtZT5gIC8gYHZhbHVlOiDigKZgIHBhaXJzIGluIFBvc3RtYW4gTG9jYWwgVmlldyBlbnZpcm9ubWVudCBZQU1MLiAqL1xuZnVuY3Rpb24gcmVwbGFjZVlhbWxLZXllZFZhbHVlKHlhbWw6IHN0cmluZywga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBxdW90ZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG5cdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKGtleTpcXFxccyoke2tleX1cXFxccypcXFxcblxcXFxzKnZhbHVlOlxcXFxzKilbXlxcXFxuXStgLCBcIm1cIik7XG5cdGlmICghcmUudGVzdCh5YW1sKSkgcmV0dXJuIHlhbWw7XG5cdHJldHVybiB5YW1sLnJlcGxhY2UocmUsIGAkMSR7cXVvdGVkfWApO1xufVxuIl0sIm5hbWVzIjpbIkFVVEgwX0NMSV9JTlNUQUxMX01FU1NBR0UiLCJlbnN1cmVMb2dnZWRJbiIsInJlcXVpcmVJbnN0YWxsZWQiLCJydW5BdXRoMENvbmZpZ3VyZSIsInJ1bkF1dGgwTG9naW4iLCJQT1NUTUFOX0NBTExCQUNLUyIsIlNQQV9TVUZGSVgiLCJmYWlsIiwibWVzc2FnZSIsIkNyZWF0ZUNsaUVycm9yIiwiYXV0aDBDbGkiLCJpc0luc3RhbGxlZCIsInByb2Nlc3MiLCJzdGRvdXQiLCJ3cml0ZSIsInRlbmFudHMiLCJsaXN0VGVuYW50cyIsImxlbmd0aCIsImNvbnNvbGUiLCJsb2ciLCJsb2dpbiIsImxpc3RBcGlzIiwiZXJyIiwiQXV0aDBBdXRoRXJyb3IiLCJhY3RpdmUiLCJmaW5kIiwidCIsIm5hbWUiLCJkaXJlY3RvcnkiLCJ0YXJnZXREaXIiLCJyZXNvbHZlIiwiaXNEZWNvaGVyZVdvcmtzcGFjZSIsImlzc3VlckJhc2VVcmwiLCJwcm9qZWN0TmFtZSIsImVudiIsIkRFQ09IRVJFX1BST0pFQ1RfTkFNRSIsInRyaW0iLCJiYXNlbmFtZSIsImVudlBhdGgiLCJqb2luIiwiZXhpc3RpbmciLCJyZWFkRW52RmlsZSIsImV4aXN0aW5nQXVkaWVuY2UiLCJBVVRIMF9BVURJRU5DRSIsImRpc2NvdmVyZWQiLCJkaXNjb3ZlckF1dGhvcml6ZVNjb3BlcyIsImV4aXN0aW5nU2NvcGVzIiwibGlzdEFwaVNjb3BlcyIsImFwaVNjb3BlcyIsInJlc29sdmVBcGlTY29wZXMiLCJhdWRpZW5jZSIsInVwZGF0ZUFwaVNjb3BlcyIsImVycm9yIiwiRXJyb3IiLCJpZGVudGlmaWVyIiwiY3JlYXRlQXBpIiwiYXBwTmFtZSIsImFwcCIsImVuc3VyZVNwYUFwcCIsInJldXNlZCIsImNsaWVudF9pZCIsImVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQiLCJEQl9DT05ORUNUSU9OX05BTUUiLCJ1cHNlcnRFbnYiLCJBVVRIMF9JU1NVRVJfQkFTRV9VUkwiLCJhZG1pblN1YiIsIkFVVEgwX0FETUlOX1VTRVJfU1VCIiwiYXNzaWduVXNlclBlcm1pc3Npb25zIiwiZG9tYWluIiwicmVwbGFjZSIsInBhdGNoUG9zdG1hbkF1dGgiLCJjbGllbnRJZCIsInNjb3BlcyIsInBvc3RtYW5SZXF1ZXN0ZWRTY29wZXMiLCJwYXRoIiwiZXhpc3RzU3luYyIsIm91dCIsImxpbmUiLCJyZWFkRmlsZVN5bmMiLCJzcGxpdCIsInRyaW1tZWQiLCJzdGFydHNXaXRoIiwiZXEiLCJpbmRleE9mIiwic2xpY2UiLCJtZXJnZWQiLCJtZXJnZUFwaVNjb3BlcyIsIkhFTExPX0FQSV9TQ09QRVMiLCJzb3J0IiwiZW50cmllcyIsInRleHQiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsInJlIiwiUmVnRXhwIiwidGVzdCIsImVuZHNXaXRoIiwid3JpdGVGaWxlU3luYyIsImF1dGgiLCJlbnZZYW1sIiwieWFtbCIsInJlcGxhY2VZYW1sS2V5ZWRWYWx1ZSIsImNvbGxlY3Rp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