@affinidi/cli 2.4.0 → 2.6.0

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.
@@ -2,59 +2,220 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CreateToken = void 0;
4
4
  const promises_1 = require("fs/promises");
5
+ const node_crypto_1 = require("node:crypto");
6
+ const prompts_1 = require("@inquirer/prompts");
5
7
  const core_1 = require("@oclif/core");
8
+ const uuid_1 = require("uuid");
6
9
  const zod_1 = require("zod");
7
10
  const common_1 = require("../../common");
8
- const prompts_1 = require("../../common/prompts");
11
+ const prompts_2 = require("../../common/prompts");
9
12
  const validators_1 = require("../../common/validators");
10
13
  const jwk_1 = require("../../helpers/jwk");
14
+ const bff_service_1 = require("../../services/affinidi/bff-service");
11
15
  const iam_1 = require("../../services/affinidi/iam");
16
+ const flagsSchema = zod_1.z
17
+ .object({
18
+ name: zod_1.z.string().max(validators_1.INPUT_LIMIT),
19
+ algorithm: zod_1.z.nativeEnum(common_1.SupportedAlgorithms),
20
+ 'key-id': zod_1.z.string().max(validators_1.INPUT_LIMIT).optional(),
21
+ 'public-key-file': zod_1.z.string().max(validators_1.INPUT_LIMIT).optional(),
22
+ 'auto-generate-key': zod_1.z.boolean(),
23
+ passphrase: zod_1.z.string().max(validators_1.INPUT_LIMIT).optional(),
24
+ 'with-permissions': zod_1.z.boolean(),
25
+ resources: zod_1.z.string().max(validators_1.INPUT_LIMIT).optional().default('*'),
26
+ actions: zod_1.z.string().max(validators_1.INPUT_LIMIT).optional().default('*'),
27
+ })
28
+ .refine((data) => {
29
+ if (!data['auto-generate-key'] && !data['public-key-file']) {
30
+ return false;
31
+ }
32
+ return true;
33
+ }, {
34
+ message: 'public-key-file is required when auto-generate-key is false',
35
+ path: ['public-key-file'],
36
+ });
12
37
  class CreateToken extends common_1.BaseCommand {
13
38
  async run() {
14
39
  const { flags } = await this.parse(CreateToken);
15
- const promptFlags = await (0, prompts_1.promptRequiredParameters)(['name', 'key-id', 'public-key-file'], flags);
16
- const schema = zod_1.z.object({
17
- name: zod_1.z.string().max(validators_1.INPUT_LIMIT).min(8),
18
- algorithm: zod_1.z.nativeEnum(common_1.SupportedAlgorithms),
19
- 'key-id': zod_1.z.string().max(validators_1.INPUT_LIMIT),
20
- 'public-key-file': zod_1.z.string().max(validators_1.INPUT_LIMIT),
21
- });
22
- const validatedFlags = schema.parse(promptFlags);
40
+ const validatedFlags = await this.validateFlags(flags);
23
41
  core_1.ux.action.start('Creating Personal Access Token');
24
- const publicKeyPEM = await (0, promises_1.readFile)(validatedFlags['public-key-file'], 'utf8');
25
- const jwk = await (0, jwk_1.pemToJWK)(publicKeyPEM, validatedFlags.algorithm);
26
- const out = await iam_1.iamService.createToken({
27
- name: validatedFlags.name,
42
+ let keypair, jwks;
43
+ const kid = validatedFlags['key-id'] ?? (0, uuid_1.v4)();
44
+ if (validatedFlags['auto-generate-key']) {
45
+ keypair = this.generateKeyPair(kid, validatedFlags.algorithm, validatedFlags.passphrase);
46
+ jwks = keypair.jwks;
47
+ }
48
+ else {
49
+ const publicKeyPEM = await (0, promises_1.readFile)(validatedFlags['public-key-file'], 'utf8');
50
+ const jwk = await (0, jwk_1.pemToJWK)(publicKeyPEM, validatedFlags.algorithm);
51
+ jwks = {
52
+ keys: [
53
+ {
54
+ kid,
55
+ alg: validatedFlags.algorithm,
56
+ use: 'sig',
57
+ kty: jwk.kty ?? (0, jwk_1.getKeyType)(validatedFlags.algorithm),
58
+ n: jwk.n,
59
+ e: jwk.e,
60
+ },
61
+ ],
62
+ };
63
+ }
64
+ const token = await this.createToken(validatedFlags.name, validatedFlags.algorithm, jwks, validatedFlags['key-id']);
65
+ core_1.ux.action.stop('Created successfully!');
66
+ let projectId;
67
+ if (validatedFlags['with-permissions']) {
68
+ core_1.ux.action.start('Adding token to active project');
69
+ const promises = [this.addPrincipal(token.id), bff_service_1.bffService.getActiveProject()];
70
+ const [, activeProject] = await Promise.all(promises);
71
+ projectId = activeProject.id;
72
+ core_1.ux.action.stop('Added successfully!');
73
+ core_1.ux.action.start('Granting permissions to token');
74
+ const actions = validatedFlags.actions ? validatedFlags.actions.split(' ') : ['*'];
75
+ const resources = validatedFlags.actions ? validatedFlags.actions.split(' ') : ['*'];
76
+ await this.updatePolicies(token.id, projectId, actions, resources);
77
+ core_1.ux.action.stop('Granted successfully!');
78
+ }
79
+ if (!this.jsonEnabled()) {
80
+ this.logJson(token);
81
+ this.log('\nUse the projectId, tokenId, privateKey and passphrase (if provided) to use this token with Affinidi TDK');
82
+ this.logJson({
83
+ tokenId: token.id,
84
+ ...(validatedFlags['with-permissions'] && { projectId }),
85
+ ...(validatedFlags['auto-generate-key'] && {
86
+ privateKey: keypair?.privateKey,
87
+ ...(validatedFlags.passphrase && { passphrase: validatedFlags.passphrase }),
88
+ }),
89
+ });
90
+ if (validatedFlags['auto-generate-key']) {
91
+ this.warn(this.chalk.yellowBright.bold('\nPlease save the privateKey and passphrase (if provided) somewhere safe. You will not be able to view them again.\n'));
92
+ }
93
+ }
94
+ return token;
95
+ }
96
+ async validateFlags(flags) {
97
+ let promptFlags = await (0, prompts_2.promptRequiredParameters)(['name'], flags);
98
+ if (!promptFlags['public-key-file'] && !promptFlags['no-input']) {
99
+ promptFlags['auto-generate-key'] ?? (promptFlags['auto-generate-key'] = await (0, prompts_1.confirm)({
100
+ message: 'Generate a new keypair for the token?',
101
+ }));
102
+ }
103
+ else {
104
+ promptFlags['auto-generate-key'] = !!promptFlags['auto-generate-key'];
105
+ }
106
+ if (promptFlags['auto-generate-key'] && !promptFlags['no-input']) {
107
+ promptFlags.passphrase = (0, validators_1.validateInputLength)(await (0, prompts_1.input)({
108
+ message: 'Enter a passphrase to encrypt the private key. Leave it empty for no encryption',
109
+ }), validators_1.INPUT_LIMIT);
110
+ }
111
+ if (!promptFlags['auto-generate-key']) {
112
+ promptFlags = await (0, prompts_2.promptRequiredParameters)(['public-key-file'], promptFlags);
113
+ }
114
+ if (!promptFlags['no-input']) {
115
+ promptFlags['with-permissions'] ?? (promptFlags['with-permissions'] = await (0, prompts_1.confirm)({
116
+ message: 'Add token to active project and grant permissions?',
117
+ }));
118
+ }
119
+ else {
120
+ promptFlags['with-permissions'] = !!promptFlags['with-permissions'];
121
+ }
122
+ if (!promptFlags['no-input'] && promptFlags['with-permissions']) {
123
+ promptFlags.resources = (0, validators_1.validateInputLength)(await (0, prompts_1.input)({
124
+ message: 'Enter the allowed resources, separated by spaces. Use * to allow access to all project resources',
125
+ default: '*',
126
+ }), validators_1.INPUT_LIMIT);
127
+ promptFlags.actions = (0, validators_1.validateInputLength)(await (0, prompts_1.input)({
128
+ message: 'Enter the allowed actions, separated by spaces. Use * to allow all actions',
129
+ default: '*',
130
+ }), validators_1.INPUT_LIMIT);
131
+ }
132
+ return flagsSchema.parse(promptFlags);
133
+ }
134
+ async createToken(name, algorithm, jwks, keyId) {
135
+ let token = await iam_1.iamService.createToken({
136
+ name,
28
137
  authenticationMethod: {
29
138
  type: 'PRIVATE_KEY',
30
- signingAlgorithm: validatedFlags.algorithm,
139
+ signingAlgorithm: algorithm,
31
140
  publicKeyInfo: {
32
- jwks: {
33
- keys: [
34
- {
35
- kid: validatedFlags['key-id'],
36
- alg: validatedFlags.algorithm,
37
- use: 'sig',
38
- kty: jwk.kty ?? (0, jwk_1.getKeyType)(validatedFlags.algorithm),
39
- n: jwk.n,
40
- e: jwk.e,
41
- },
42
- ],
43
- },
141
+ jwks,
44
142
  },
45
143
  },
46
144
  });
47
- core_1.ux.action.stop('Created successfully!');
48
- if (!this.jsonEnabled())
49
- this.logJson(out);
50
- return out;
145
+ // If keyId was not provided it means that a randomly generated uuid was assigned and we should change it to the tokenId
146
+ if (!keyId) {
147
+ jwks.keys[0].kid = token.id;
148
+ token = await iam_1.iamService.updateToken(token.id, {
149
+ name,
150
+ authenticationMethod: {
151
+ type: 'PRIVATE_KEY',
152
+ signingAlgorithm: algorithm,
153
+ publicKeyInfo: {
154
+ jwks,
155
+ },
156
+ },
157
+ });
158
+ }
159
+ return token;
160
+ }
161
+ generateKeyPair(keyId, algorithm, passphrase) {
162
+ const { publicKey, privateKey } = (0, node_crypto_1.generateKeyPairSync)('rsa', { modulusLength: 4096 });
163
+ const publicKeyPem = publicKey.export({ format: 'pem', type: 'spki' });
164
+ const exportOptions = {
165
+ format: 'pem',
166
+ type: 'pkcs8',
167
+ };
168
+ if (passphrase) {
169
+ exportOptions.cipher = 'aes-256-cbc';
170
+ exportOptions.passphrase = passphrase;
171
+ }
172
+ const privateKeyPem = privateKey.export(exportOptions);
173
+ const publicKeyJwk = publicKey.export({ format: 'jwk' });
174
+ const jwks = {
175
+ keys: [
176
+ {
177
+ use: 'sig',
178
+ kid: keyId,
179
+ alg: algorithm,
180
+ ...publicKeyJwk,
181
+ },
182
+ ],
183
+ };
184
+ return { publicKey: publicKeyPem, privateKey: privateKeyPem, jwks };
185
+ }
186
+ async addPrincipal(tokenId) {
187
+ await iam_1.iamService.addPrincipalToProject({
188
+ principalId: tokenId,
189
+ principalType: 'token',
190
+ });
191
+ }
192
+ async updatePolicies(tokenId, activeProjectId, actions, resources) {
193
+ const policiesData = {
194
+ version: '2022-12-15',
195
+ statement: [
196
+ {
197
+ principal: [`ari:iam::${activeProjectId}:token/${tokenId}`],
198
+ action: actions,
199
+ resource: resources,
200
+ effect: 'Allow',
201
+ },
202
+ ],
203
+ };
204
+ const validatedPolicies = validators_1.policiesDataSchema.parse(policiesData);
205
+ const result = await iam_1.iamService.updatePolicies(tokenId, 'token', validatedPolicies);
206
+ return result;
51
207
  }
52
208
  }
53
209
  exports.CreateToken = CreateToken;
54
210
  CreateToken.summary = 'Creates a Personal Access Token (PAT)';
55
211
  CreateToken.examples = [
56
- '<%= config.bin %> <%= command.id %> -n MyNewToken -k MyKeyID -f publicKey.pem',
57
- '<%= config.bin %> <%= command.id %> --name "My new token" --key-id MyKeyID --public-key-file publicKey.pem --algorithm RS256',
212
+ '<%= config.bin %> <%= command.id %>',
213
+ '<%= config.bin %> <%= command.id %> --name "My new token"',
214
+ '<%= config.bin %> <%= command.id %> -n MyNewToken --with-permissions',
215
+ '<%= config.bin %> <%= command.id %> -n MyNewToken --auto-generate-key',
216
+ '<%= config.bin %> <%= command.id %> -n MyNewToken --auto-generate-key --passphrase "MySecretPassphrase" --with-permissions',
217
+ '<%= config.bin %> <%= command.id %> -n MyNewToken --public-key-file publicKey.pem --key-id MyKeyID --algorithm RS256 --with-permissions',
218
+ '<%= config.bin %> <%= command.id %> -n MyNewToken -g -w',
58
219
  ];
59
220
  CreateToken.flags = {
60
221
  name: core_1.Flags.string({
@@ -70,9 +231,24 @@ CreateToken.flags = {
70
231
  summary: 'Location of the public key PEM file',
71
232
  }),
72
233
  algorithm: core_1.Flags.custom({
234
+ char: 'a',
73
235
  summary: 'The specific cryptographic algorithm used with the key',
74
236
  options: Object.values(common_1.SupportedAlgorithms),
75
237
  default: common_1.SupportedAlgorithms.RS256,
76
238
  })(),
239
+ 'with-permissions': core_1.Flags.boolean({
240
+ char: 'w',
241
+ summary: 'Set token policies to perform any action on the active project',
242
+ }),
243
+ 'auto-generate-key': core_1.Flags.boolean({
244
+ char: 'g',
245
+ summary: 'Auto-generate private-public key pair',
246
+ exclusive: ['public-key-file'],
247
+ }),
248
+ passphrase: core_1.Flags.string({
249
+ char: 'p',
250
+ summary: 'Passphrase for generation of private public key pair',
251
+ dependsOn: ['auto-generate-key'],
252
+ }),
77
253
  };
78
254
  //# sourceMappingURL=create-token.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-token.js","sourceRoot":"","sources":["../../../src/commands/token/create-token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-token.js","sourceRoot":"","sources":["../../../src/commands/token/create-token.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,51 @@
1
+ import z from 'zod';
1
2
  export declare const INPUT_LIMIT = 2000;
2
3
  export declare const TOKEN_LIMIT = 5000;
3
4
  export declare const PRESENTATION_DEFINITION_LIMIT = 5000;
4
5
  export declare function validateInputLength(text: string, maxLength: number): string;
5
6
  export declare function split(text: string, delimiter: string): string[];
7
+ export declare const policiesDataSchema: z.ZodObject<{
8
+ version: z.ZodString;
9
+ statement: z.ZodArray<z.ZodObject<{
10
+ principal: z.ZodArray<z.ZodString, "many">;
11
+ action: z.ZodArray<z.ZodString, "atleastone">;
12
+ resource: z.ZodArray<z.ZodString, "atleastone">;
13
+ effect: z.ZodLiteral<"Allow">;
14
+ }, "strip", z.ZodTypeAny, {
15
+ effect: "Allow";
16
+ principal: string[];
17
+ action: [string, ...string[]];
18
+ resource: [string, ...string[]];
19
+ }, {
20
+ effect: "Allow";
21
+ principal: string[];
22
+ action: [string, ...string[]];
23
+ resource: [string, ...string[]];
24
+ }>, "atleastone">;
25
+ }, "strip", z.ZodTypeAny, {
26
+ version: string;
27
+ statement: [{
28
+ effect: "Allow";
29
+ principal: string[];
30
+ action: [string, ...string[]];
31
+ resource: [string, ...string[]];
32
+ }, ...{
33
+ effect: "Allow";
34
+ principal: string[];
35
+ action: [string, ...string[]];
36
+ resource: [string, ...string[]];
37
+ }[]];
38
+ }, {
39
+ version: string;
40
+ statement: [{
41
+ effect: "Allow";
42
+ principal: string[];
43
+ action: [string, ...string[]];
44
+ resource: [string, ...string[]];
45
+ }, ...{
46
+ effect: "Allow";
47
+ principal: string[];
48
+ action: [string, ...string[]];
49
+ resource: [string, ...string[]];
50
+ }[]];
51
+ }>;
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.split = exports.validateInputLength = exports.PRESENTATION_DEFINITION_LIMIT = exports.TOKEN_LIMIT = exports.INPUT_LIMIT = void 0;
3
+ exports.policiesDataSchema = exports.split = exports.validateInputLength = exports.PRESENTATION_DEFINITION_LIMIT = exports.TOKEN_LIMIT = exports.INPUT_LIMIT = void 0;
4
+ const tslib_1 = require("tslib");
4
5
  const errors_1 = require("@oclif/core/lib/errors");
6
+ const zod_1 = tslib_1.__importDefault(require("zod"));
5
7
  exports.INPUT_LIMIT = 2000;
6
8
  exports.TOKEN_LIMIT = 5000;
7
9
  exports.PRESENTATION_DEFINITION_LIMIT = 5000;
@@ -16,4 +18,16 @@ function split(text, delimiter) {
16
18
  return text.split(delimiter).filter((item) => item.length > 0);
17
19
  }
18
20
  exports.split = split;
21
+ exports.policiesDataSchema = zod_1.default.object({
22
+ version: zod_1.default.string().max(exports.INPUT_LIMIT),
23
+ statement: zod_1.default
24
+ .object({
25
+ principal: zod_1.default.string().max(exports.INPUT_LIMIT).array().length(1),
26
+ action: zod_1.default.string().max(exports.INPUT_LIMIT).array().nonempty(),
27
+ resource: zod_1.default.string().max(exports.INPUT_LIMIT).array().nonempty(),
28
+ effect: zod_1.default.literal('Allow'),
29
+ })
30
+ .array()
31
+ .nonempty(),
32
+ });
19
33
  //# sourceMappingURL=validators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/common/validators.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAEpC,QAAA,WAAW,GAAG,IAAI,CAAA;AAClB,QAAA,WAAW,GAAG,IAAI,CAAA;AAClB,QAAA,6BAA6B,GAAG,IAAI,CAAA;AAEjD,SAAgB,mBAAmB,CAAC,IAAY,EAAE,SAAiB;IACjE,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;QAC3B,MAAM,IAAI,iBAAQ,CAAC,+BAA+B,SAAS,eAAe,CAAC,CAAA;KAC5E;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAND,kDAMC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,SAAiB;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAChE,CAAC;AAFD,sBAEC"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/common/validators.ts"],"names":[],"mappings":";;;;AAAA,mDAAiD;AACjD,sDAAmB;AAEN,QAAA,WAAW,GAAG,IAAI,CAAA;AAClB,QAAA,WAAW,GAAG,IAAI,CAAA;AAClB,QAAA,6BAA6B,GAAG,IAAI,CAAA;AAEjD,SAAgB,mBAAmB,CAAC,IAAY,EAAE,SAAiB;IACjE,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;QAC3B,MAAM,IAAI,iBAAQ,CAAC,+BAA+B,SAAS,eAAe,CAAC,CAAA;KAC5E;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAND,kDAMC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,SAAiB;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAChE,CAAC;AAFD,sBAEC;AAEY,QAAA,kBAAkB,GAAG,aAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,mBAAW,CAAC;IACpC,SAAS,EAAE,aAAC;SACT,MAAM,CAAC;QACN,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,mBAAW,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,MAAM,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,mBAAW,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;QACtD,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,mBAAW,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;QACxD,MAAM,EAAE,aAAC,CAAC,OAAO,CAAC,OAAO,CAAC;KAC3B,CAAC;SACD,KAAK,EAAE;SACP,QAAQ,EAAE;CACd,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@affinidi/cli",
3
- "version": "2.4.0",
3
+ "version": "2.6.0",
4
4
  "description": "Affinidi CLI",
5
5
  "author": "affinidi.com",
6
6
  "license": "Apache-2.0",
@@ -21,7 +21,7 @@
21
21
  "lint": "eslint . --ext .ts",
22
22
  "lint:fix": "eslint . --ext .ts --fix",
23
23
  "test": "mocha \"test/**/*.test.ts\"",
24
- "generate:readme": "npm run build && oclif readme",
24
+ "generate:readme": "npm run build && oclif readme --multi --no-aliases",
25
25
  "generate:api": "node scripts/generate-api.cjs"
26
26
  },
27
27
  "publishConfig": {
@@ -67,6 +67,7 @@
67
67
  "open": "^8.4.1",
68
68
  "pkginfo": "^0.4.1",
69
69
  "tcp-port-used": "^1.0.2",
70
+ "uuid": "^9.0.1",
70
71
  "zod": "^3.22.2",
71
72
  "zod-validation-error": "^1.5.0"
72
73
  },
@@ -80,6 +81,7 @@
80
81
  "@types/mocha": "10.0.1",
81
82
  "@types/node": "^18.11.19",
82
83
  "@types/tcp-port-used": "^1.0.1",
84
+ "@types/uuid": "^9.0.8",
83
85
  "@typescript-eslint/eslint-plugin": "^5.62.0",
84
86
  "@typescript-eslint/parser": "^5.59.9",
85
87
  "chai": "4.3.7",