@affinidi/cli 2.0.0-beta.8 → 2.0.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -17
- package/dist/commands/generate/app.d.ts +2 -1
- package/dist/commands/generate/app.js +72 -28
- package/dist/commands/generate/app.js.map +1 -1
- package/dist/common/constants.d.ts +18 -3
- package/dist/common/constants.js +19 -6
- package/dist/common/constants.js.map +1 -1
- package/dist/helpers/app.d.ts +1 -0
- package/dist/helpers/app.js +18 -0
- package/dist/helpers/app.js.map +1 -0
- package/dist/services/generator/auth0.d.ts +2 -1
- package/dist/services/generator/auth0.js +6 -7
- package/dist/services/generator/auth0.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -416,14 +416,16 @@ Generates a NextJS reference application that integrates Affinidi Login. Require
|
|
|
416
416
|
|
|
417
417
|
```
|
|
418
418
|
USAGE
|
|
419
|
-
$ affinidi generate app [--json] [--no-color] [--no-input] [-
|
|
420
|
-
|
|
419
|
+
$ affinidi generate app [--json] [--no-color] [--no-input] [-f django|nextjs] [-a affinidi|auth0] [-p <value>]
|
|
420
|
+
[--force]
|
|
421
421
|
|
|
422
422
|
FLAGS
|
|
423
|
-
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
423
|
+
-a, --provider=<option> Authentication provider for the reference app
|
|
424
|
+
<options: affinidi|auth0>
|
|
425
|
+
-f, --framework=<option> Framework for the reference app
|
|
426
|
+
<options: django|nextjs>
|
|
427
|
+
-p, --path=<value> Relative or absolute path where reference application should be cloned into
|
|
428
|
+
--force Override destination directory if exists
|
|
427
429
|
|
|
428
430
|
GLOBAL FLAGS
|
|
429
431
|
--json Format output as json.
|
|
@@ -433,15 +435,9 @@ GLOBAL FLAGS
|
|
|
433
435
|
EXAMPLES
|
|
434
436
|
$ affinidi generate app
|
|
435
437
|
|
|
436
|
-
$ affinidi generate app -p "../my-app" -
|
|
438
|
+
$ affinidi generate app -p "../my-app" -f django -a affinidi
|
|
437
439
|
|
|
438
|
-
$ affinidi generate app --path "../my-app" --
|
|
439
|
-
|
|
440
|
-
FLAG DESCRIPTIONS
|
|
441
|
-
-s, --sample=affinidi-nextjs-nextauthjs|auth0-nextjs-nextauthjs Sample to generate
|
|
442
|
-
|
|
443
|
-
Use affinidi-nextjs-nextauthjs to generate a Next.js+NextAuth.js app that integrates Affinidi Login directly
|
|
444
|
-
Use auth0-nextjs-nextauthjs to generate a Next.js+NextAuth.js app that integrates Affinidi Login through Auth0
|
|
440
|
+
$ affinidi generate app --path "../my-app" --framework django --provider affinidi --force
|
|
445
441
|
```
|
|
446
442
|
|
|
447
443
|
## `affinidi help [COMMANDS]`
|
|
@@ -1048,7 +1044,7 @@ EXAMPLES
|
|
|
1048
1044
|
$ affinidi start --project-id <project-id>
|
|
1049
1045
|
```
|
|
1050
1046
|
|
|
1051
|
-
_See code: [dist/commands/start.ts](https://github.com/affinidi/affinidi-cli/blob/v2.0.0-beta.
|
|
1047
|
+
_See code: [dist/commands/start.ts](https://github.com/affinidi/affinidi-cli/blob/v2.0.0-beta.8/dist/commands/start.ts)_
|
|
1052
1048
|
|
|
1053
1049
|
## `affinidi stop`
|
|
1054
1050
|
|
|
@@ -1067,7 +1063,7 @@ EXAMPLES
|
|
|
1067
1063
|
$ affinidi stop
|
|
1068
1064
|
```
|
|
1069
1065
|
|
|
1070
|
-
_See code: [dist/commands/stop.ts](https://github.com/affinidi/affinidi-cli/blob/v2.0.0-beta.
|
|
1066
|
+
_See code: [dist/commands/stop.ts](https://github.com/affinidi/affinidi-cli/blob/v2.0.0-beta.8/dist/commands/stop.ts)_
|
|
1071
1067
|
|
|
1072
1068
|
## `affinidi token create-token`
|
|
1073
1069
|
|
|
@@ -1202,5 +1198,5 @@ EXAMPLES
|
|
|
1202
1198
|
$ affinidi whoami
|
|
1203
1199
|
```
|
|
1204
1200
|
|
|
1205
|
-
_See code: [dist/commands/whoami.ts](https://github.com/affinidi/affinidi-cli/blob/v2.0.0-beta.
|
|
1201
|
+
_See code: [dist/commands/whoami.ts](https://github.com/affinidi/affinidi-cli/blob/v2.0.0-beta.8/dist/commands/whoami.ts)_
|
|
1206
1202
|
<!-- commandsstop -->
|
|
@@ -3,7 +3,8 @@ export default class GenerateApp extends BaseCommand<typeof GenerateApp> {
|
|
|
3
3
|
static summary: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
|
|
6
|
+
framework: import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
provider: import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
8
|
path: import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
9
|
force: import("@oclif/core/lib/interfaces/parser").BooleanFlag<boolean>;
|
|
9
10
|
};
|
|
@@ -5,10 +5,10 @@ const password_1 = tslib_1.__importDefault(require("@inquirer/password"));
|
|
|
5
5
|
const prompts_1 = require("@inquirer/prompts");
|
|
6
6
|
const core_1 = require("@oclif/core");
|
|
7
7
|
const errors_1 = require("@oclif/core/lib/errors");
|
|
8
|
-
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
9
8
|
const zod_1 = tslib_1.__importDefault(require("zod"));
|
|
10
9
|
const common_1 = require("../../common");
|
|
11
10
|
const helpers_1 = require("../../helpers");
|
|
11
|
+
const app_1 = require("../../helpers/app");
|
|
12
12
|
const degit_1 = require("../../helpers/degit");
|
|
13
13
|
const generate_error_message_1 = require("../../helpers/generate-error-message");
|
|
14
14
|
const input_length_validation_1 = require("../../helpers/input-length-validation");
|
|
@@ -20,26 +20,40 @@ const APPS_GITHUB_LOCATION = 'affinidi/reference-app-affinidi-vault/samples';
|
|
|
20
20
|
class GenerateApp extends common_1.BaseCommand {
|
|
21
21
|
async run() {
|
|
22
22
|
const { flags } = await this.parse(GenerateApp);
|
|
23
|
-
if (flags['no-input']
|
|
24
|
-
|
|
23
|
+
if (flags['no-input']) {
|
|
24
|
+
if (!flags.provider)
|
|
25
|
+
throw new errors_1.CLIError((0, generate_error_message_1.giveFlagInputErrorMessage)('provider'));
|
|
26
|
+
if (!flags.framework)
|
|
27
|
+
throw new errors_1.CLIError((0, generate_error_message_1.giveFlagInputErrorMessage)('framework'));
|
|
25
28
|
}
|
|
26
|
-
const
|
|
29
|
+
const provider = flags.provider ??
|
|
27
30
|
(await (0, prompts_1.select)({
|
|
28
|
-
message:
|
|
29
|
-
choices: Object.values(common_1.
|
|
31
|
+
message: 'Select the provider for the reference app.',
|
|
32
|
+
choices: Object.values(common_1.RefAppProvider).map((value) => ({
|
|
33
|
+
name: value,
|
|
34
|
+
value,
|
|
35
|
+
})),
|
|
36
|
+
}));
|
|
37
|
+
const framework = flags.framework ??
|
|
38
|
+
(await (0, prompts_1.select)({
|
|
39
|
+
message: 'Select the framework for the reference app.',
|
|
40
|
+
choices: Object.values(common_1.RefAppFramework).map((value) => ({
|
|
30
41
|
name: value,
|
|
31
42
|
value,
|
|
32
43
|
})),
|
|
33
44
|
}));
|
|
34
45
|
const promptFlags = await (0, helpers_1.promptRequiredParameters)(['path'], flags);
|
|
35
|
-
promptFlags.
|
|
46
|
+
promptFlags.framework = framework;
|
|
47
|
+
promptFlags.provider = provider;
|
|
36
48
|
const schema = zod_1.default.object({
|
|
37
49
|
path: zod_1.default.string().max(input_length_validation_1.INPUT_LIMIT),
|
|
38
|
-
|
|
50
|
+
framework: zod_1.default.string().max(input_length_validation_1.INPUT_LIMIT),
|
|
51
|
+
provider: zod_1.default.string().max(input_length_validation_1.INPUT_LIMIT),
|
|
39
52
|
});
|
|
40
53
|
const validatedFlags = schema.parse(promptFlags);
|
|
54
|
+
const appName = (0, app_1.getAppName)(framework, provider);
|
|
41
55
|
core_1.ux.action.start('Generating reference application');
|
|
42
|
-
await (0, degit_1.cloneWithDegit)(`${APPS_GITHUB_LOCATION}/${
|
|
56
|
+
await (0, degit_1.cloneWithDegit)(`${APPS_GITHUB_LOCATION}/${appName}`, validatedFlags.path, flags.force);
|
|
43
57
|
core_1.ux.action.stop('Generated successfully!');
|
|
44
58
|
if (!flags['no-input']) {
|
|
45
59
|
const configure = await (0, prompts_1.confirm)({
|
|
@@ -64,18 +78,45 @@ class GenerateApp extends common_1.BaseCommand {
|
|
|
64
78
|
message: "What is the login configuration's client secret?",
|
|
65
79
|
mask: true,
|
|
66
80
|
}), input_length_validation_1.INPUT_LIMIT);
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
81
|
+
if (framework === common_1.RefAppFramework.NEXTJS) {
|
|
82
|
+
if (provider === common_1.RefAppProvider.AFFINIDI) {
|
|
83
|
+
core_1.ux.action.start('Configuring reference application');
|
|
84
|
+
await (0, env_configurer_1.configureAppEnvironment)(validatedFlags.path, selectedConfig.auth.clientId, clientSecret, selectedConfig.auth.issuer);
|
|
85
|
+
core_1.ux.action.stop('Configured successfully!');
|
|
86
|
+
}
|
|
87
|
+
else if (provider === common_1.RefAppProvider.AUTH0) {
|
|
88
|
+
const domain = (0, input_length_validation_1.validateInputLength)(await (0, prompts_1.input)({ message: 'What is your Auth0 tenant URL?' }), input_length_validation_1.INPUT_LIMIT);
|
|
89
|
+
const accessToken = (0, input_length_validation_1.validateInputLength)(await (0, password_1.default)({ message: 'What is your Auth0 access token?' }), input_length_validation_1.TOKEN_LIMIT);
|
|
90
|
+
core_1.ux.action.start('Creating Auth0 resources and configuring reference application');
|
|
91
|
+
const socialConnectionName = `Affinidi-${common_1.RefAppFramework.NEXTJS}`;
|
|
92
|
+
const { auth0ClientId, auth0ClientSecret, connectionName } = await (0, auth0_1.createAuth0Resources)(accessToken, domain, selectedConfig.auth.clientId, clientSecret, selectedConfig.auth.issuer, socialConnectionName, {
|
|
93
|
+
callbackUrl: 'http://localhost:3000/api/auth/callback/auth0',
|
|
94
|
+
logOutUrl: 'http://localhost:3000',
|
|
95
|
+
webOriginUrl: 'http://localhost:3000',
|
|
96
|
+
});
|
|
97
|
+
await (0, env_configurer_1.configureAppEnvironment)(validatedFlags.path, auth0ClientId, auth0ClientSecret, domain, connectionName);
|
|
98
|
+
core_1.ux.action.stop('Configured successfully!');
|
|
99
|
+
}
|
|
71
100
|
}
|
|
72
|
-
else if (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
101
|
+
else if (framework === common_1.RefAppFramework.DJANGO) {
|
|
102
|
+
if (provider === common_1.RefAppProvider.AFFINIDI) {
|
|
103
|
+
core_1.ux.action.start('Configuring reference application');
|
|
104
|
+
await (0, env_configurer_1.configureAppEnvironment)(validatedFlags.path, selectedConfig.auth.clientId, clientSecret, selectedConfig.auth.issuer);
|
|
105
|
+
core_1.ux.action.stop('Configured successfully!');
|
|
106
|
+
}
|
|
107
|
+
else if (provider === common_1.RefAppProvider.AUTH0) {
|
|
108
|
+
const domain = (0, input_length_validation_1.validateInputLength)(await (0, prompts_1.input)({ message: 'What is your Auth0 tenant URL?' }), input_length_validation_1.INPUT_LIMIT);
|
|
109
|
+
const accessToken = (0, input_length_validation_1.validateInputLength)(await (0, password_1.default)({ message: 'What is your Auth0 access token?' }), input_length_validation_1.TOKEN_LIMIT);
|
|
110
|
+
core_1.ux.action.start('Creating Auth0 resources and configuring reference application');
|
|
111
|
+
const socialConnectionName = `Affinidi-${common_1.RefAppFramework.DJANGO}`;
|
|
112
|
+
const { auth0ClientId, auth0ClientSecret, connectionName } = await (0, auth0_1.createAuth0Resources)(accessToken, domain, selectedConfig.auth.clientId, clientSecret, selectedConfig.auth.issuer, socialConnectionName, {
|
|
113
|
+
callbackUrl: 'http://localhost:8000/callback',
|
|
114
|
+
logOutUrl: 'http://localhost:8000',
|
|
115
|
+
webOriginUrl: 'http://localhost:8000',
|
|
116
|
+
});
|
|
117
|
+
await (0, env_configurer_1.configureAppEnvironment)(validatedFlags.path, auth0ClientId, auth0ClientSecret, domain);
|
|
118
|
+
core_1.ux.action.stop('Configured successfully!');
|
|
119
|
+
}
|
|
79
120
|
}
|
|
80
121
|
}
|
|
81
122
|
}
|
|
@@ -86,16 +127,19 @@ exports.default = GenerateApp;
|
|
|
86
127
|
GenerateApp.summary = 'Generates a NextJS reference application that integrates Affinidi Login. Requires git';
|
|
87
128
|
GenerateApp.examples = [
|
|
88
129
|
'<%= config.bin %> <%= command.id %>',
|
|
89
|
-
'<%= config.bin %> <%= command.id %> -p "../my-app" -
|
|
90
|
-
'<%= config.bin %> <%= command.id %> --path "../my-app" --
|
|
130
|
+
'<%= config.bin %> <%= command.id %> -p "../my-app" -f django -a affinidi',
|
|
131
|
+
'<%= config.bin %> <%= command.id %> --path "../my-app" --framework django --provider affinidi --force',
|
|
91
132
|
];
|
|
92
133
|
GenerateApp.flags = {
|
|
93
|
-
|
|
94
|
-
char: '
|
|
95
|
-
summary: '
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
134
|
+
framework: core_1.Flags.string({
|
|
135
|
+
char: 'f',
|
|
136
|
+
summary: 'Framework for the reference app',
|
|
137
|
+
options: Object.values(common_1.RefAppFramework),
|
|
138
|
+
}),
|
|
139
|
+
provider: core_1.Flags.string({
|
|
140
|
+
char: 'a',
|
|
141
|
+
summary: 'Authentication provider for the reference app',
|
|
142
|
+
options: Object.values(common_1.RefAppProvider),
|
|
99
143
|
}),
|
|
100
144
|
path: core_1.Flags.string({
|
|
101
145
|
char: 'p',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/commands/generate/app.ts"],"names":[],"mappings":";;;AAAA,0EAAyC;AACzC,+CAA0D;AAC1D,sCAAuC;AACvC,mDAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/commands/generate/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,22 @@ export declare enum IdTokenClaimFormats {
|
|
|
16
16
|
ARRAY = "array",
|
|
17
17
|
MAP = "map"
|
|
18
18
|
}
|
|
19
|
-
export declare enum
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
export declare enum RefAppProvider {
|
|
20
|
+
AFFINIDI = "affinidi",
|
|
21
|
+
AUTH0 = "auth0"
|
|
22
|
+
}
|
|
23
|
+
export declare enum RefAppFramework {
|
|
24
|
+
DJANGO = "django",
|
|
25
|
+
NEXTJS = "nextjs"
|
|
26
|
+
}
|
|
27
|
+
export declare enum RefAppDjangoLibrary {
|
|
28
|
+
AUTHLIB = "authlib"
|
|
29
|
+
}
|
|
30
|
+
export declare enum RefAppNextJsLibrary {
|
|
31
|
+
NEXTAUTHJS = "nextauthjs"
|
|
32
|
+
}
|
|
33
|
+
export interface Auth0Config {
|
|
34
|
+
callbackUrl: string;
|
|
35
|
+
webOriginUrl: string;
|
|
36
|
+
logOutUrl: string;
|
|
22
37
|
}
|
package/dist/common/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.RefAppNextJsLibrary = exports.RefAppDjangoLibrary = exports.RefAppFramework = exports.RefAppProvider = exports.IdTokenClaimFormats = exports.PrincipalTypes = exports.SupportedKeyTypes = exports.SupportedAlgorithms = void 0;
|
|
4
4
|
var SupportedAlgorithms;
|
|
5
5
|
(function (SupportedAlgorithms) {
|
|
6
6
|
SupportedAlgorithms["RS256"] = "RS256";
|
|
@@ -23,9 +23,22 @@ var IdTokenClaimFormats;
|
|
|
23
23
|
IdTokenClaimFormats["ARRAY"] = "array";
|
|
24
24
|
IdTokenClaimFormats["MAP"] = "map";
|
|
25
25
|
})(IdTokenClaimFormats = exports.IdTokenClaimFormats || (exports.IdTokenClaimFormats = {}));
|
|
26
|
-
var
|
|
27
|
-
(function (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
})(
|
|
26
|
+
var RefAppProvider;
|
|
27
|
+
(function (RefAppProvider) {
|
|
28
|
+
RefAppProvider["AFFINIDI"] = "affinidi";
|
|
29
|
+
RefAppProvider["AUTH0"] = "auth0";
|
|
30
|
+
})(RefAppProvider = exports.RefAppProvider || (exports.RefAppProvider = {}));
|
|
31
|
+
var RefAppFramework;
|
|
32
|
+
(function (RefAppFramework) {
|
|
33
|
+
RefAppFramework["DJANGO"] = "django";
|
|
34
|
+
RefAppFramework["NEXTJS"] = "nextjs";
|
|
35
|
+
})(RefAppFramework = exports.RefAppFramework || (exports.RefAppFramework = {}));
|
|
36
|
+
var RefAppDjangoLibrary;
|
|
37
|
+
(function (RefAppDjangoLibrary) {
|
|
38
|
+
RefAppDjangoLibrary["AUTHLIB"] = "authlib";
|
|
39
|
+
})(RefAppDjangoLibrary = exports.RefAppDjangoLibrary || (exports.RefAppDjangoLibrary = {}));
|
|
40
|
+
var RefAppNextJsLibrary;
|
|
41
|
+
(function (RefAppNextJsLibrary) {
|
|
42
|
+
RefAppNextJsLibrary["NEXTAUTHJS"] = "nextauthjs";
|
|
43
|
+
})(RefAppNextJsLibrary = exports.RefAppNextJsLibrary || (exports.RefAppNextJsLibrary = {}));
|
|
31
44
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/common/constants.ts"],"names":[],"mappings":";;;AAAA,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC7B,sCAAe,CAAA;IACf,sCAAe,CAAA;IACf,sCAAe,CAAA;IACf,sCAAe,CAAA;AACjB,CAAC,EALW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAK9B;AAED,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,gCAAW,CAAA;IACX,8BAAS,CAAA;AACX,CAAC,EAHW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAG5B;AAED,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,wCAAsB,CAAA;IACtB,+BAAa,CAAA;AACf,CAAC,EAHW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAGzB;AAED,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,sCAAe,CAAA;IACf,kCAAW,CAAA;AACb,CAAC,EAHW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAG9B;AAED,IAAY,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/common/constants.ts"],"names":[],"mappings":";;;AAAA,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC7B,sCAAe,CAAA;IACf,sCAAe,CAAA;IACf,sCAAe,CAAA;IACf,sCAAe,CAAA;AACjB,CAAC,EALW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAK9B;AAED,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,gCAAW,CAAA;IACX,8BAAS,CAAA;AACX,CAAC,EAHW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAG5B;AAED,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,wCAAsB,CAAA;IACtB,+BAAa,CAAA;AACf,CAAC,EAHW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAGzB;AAED,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,sCAAe,CAAA;IACf,kCAAW,CAAA;AACb,CAAC,EAHW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAG9B;AAED,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,uCAAqB,CAAA;IACrB,iCAAe,CAAA;AACjB,CAAC,EAHW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAGzB;AAED,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;AACnB,CAAC,EAHW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAG1B;AAED,IAAY,mBAEX;AAFD,WAAY,mBAAmB;IAC7B,0CAAmB,CAAA;AACrB,CAAC,EAFW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAE9B;AAED,IAAY,mBAEX;AAFD,WAAY,mBAAmB;IAC7B,gDAAyB,CAAA;AAC3B,CAAC,EAFW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAE9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getAppName(framework: string, provider: string): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAppName = void 0;
|
|
4
|
+
const errors_1 = require("@oclif/core/lib/errors");
|
|
5
|
+
const common_1 = require("../common");
|
|
6
|
+
function getAppName(framework, provider) {
|
|
7
|
+
if (framework === common_1.RefAppFramework.DJANGO) {
|
|
8
|
+
return `${provider}-${framework}-${common_1.RefAppDjangoLibrary.AUTHLIB}`;
|
|
9
|
+
}
|
|
10
|
+
else if (framework === common_1.RefAppFramework.NEXTJS) {
|
|
11
|
+
return `${provider}-${framework}-${common_1.RefAppNextJsLibrary.NEXTAUTHJS}`;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
throw new errors_1.CLIError('Framework not configured!');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.getAppName = getAppName;
|
|
18
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/helpers/app.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AACjD,sCAAqF;AAErF,SAAgB,UAAU,CAAC,SAAiB,EAAE,QAAgB;IAC5D,IAAI,SAAS,KAAK,wBAAe,CAAC,MAAM,EAAE;QACxC,OAAO,GAAG,QAAQ,IAAI,SAAS,IAAI,4BAAmB,CAAC,OAAO,EAAE,CAAA;KACjE;SAAM,IAAI,SAAS,KAAK,wBAAe,CAAC,MAAM,EAAE;QAC/C,OAAO,GAAG,QAAQ,IAAI,SAAS,IAAI,4BAAmB,CAAC,UAAU,EAAE,CAAA;KACpE;SAAM;QACL,MAAM,IAAI,iBAAQ,CAAC,2BAA2B,CAAC,CAAA;KAChD;AACH,CAAC;AARD,gCAQC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { Auth0Config } from '../../common';
|
|
2
|
+
export declare function createAuth0Resources(accessToken: string, domain: string, affinidiClientId: string, affinidiClientSecret: string, affinidiIssuer: string, connectionName: string, config: Auth0Config): Promise<{
|
|
2
3
|
auth0ClientId: any;
|
|
3
4
|
auth0ClientSecret: any;
|
|
4
5
|
connectionName: string;
|
|
@@ -3,14 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createAuth0Resources = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
-
async function createAuth0Resources(accessToken, domain, affinidiClientId, affinidiClientSecret, affinidiIssuer) {
|
|
7
|
-
const { auth0ClientId, auth0ClientSecret } = await createApplication(accessToken, domain);
|
|
8
|
-
const connectionName = 'Affinidi';
|
|
6
|
+
async function createAuth0Resources(accessToken, domain, affinidiClientId, affinidiClientSecret, affinidiIssuer, connectionName, config) {
|
|
7
|
+
const { auth0ClientId, auth0ClientSecret } = await createApplication(accessToken, domain, config);
|
|
9
8
|
await createSocialConnection(accessToken, domain, connectionName, auth0ClientId, affinidiClientId, affinidiClientSecret, affinidiIssuer);
|
|
10
9
|
return { auth0ClientId, auth0ClientSecret, connectionName };
|
|
11
10
|
}
|
|
12
11
|
exports.createAuth0Resources = createAuth0Resources;
|
|
13
|
-
const createApplication = async (accessToken, domain) => {
|
|
12
|
+
const createApplication = async (accessToken, domain, config) => {
|
|
14
13
|
const myHeaders = new Headers();
|
|
15
14
|
myHeaders.append('Authorization', `Bearer ${accessToken}`);
|
|
16
15
|
myHeaders.append('Content-Type', 'application/json');
|
|
@@ -18,9 +17,9 @@ const createApplication = async (accessToken, domain) => {
|
|
|
18
17
|
name: 'Affinidi Reference App',
|
|
19
18
|
description: 'Generated Reference Application from Affinidi CLI',
|
|
20
19
|
logo_uri: '',
|
|
21
|
-
callbacks: [
|
|
22
|
-
web_origins: [
|
|
23
|
-
allowed_logout_urls: [
|
|
20
|
+
callbacks: [config.callbackUrl],
|
|
21
|
+
web_origins: [config.webOriginUrl],
|
|
22
|
+
allowed_logout_urls: [config.logOutUrl],
|
|
24
23
|
jwt_configuration: {
|
|
25
24
|
alg: 'RS256',
|
|
26
25
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth0.js","sourceRoot":"","sources":["../../../src/services/generator/auth0.ts"],"names":[],"mappings":";;;;AAAA,0DAAyB;
|
|
1
|
+
{"version":3,"file":"auth0.js","sourceRoot":"","sources":["../../../src/services/generator/auth0.ts"],"names":[],"mappings":"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"}
|