@affinidi/cli 1.19.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.
Files changed (120) hide show
  1. package/README.md +231 -0
  2. package/bin/dev +17 -0
  3. package/bin/dev.cmd +3 -0
  4. package/bin/run +5 -0
  5. package/bin/run.cmd +3 -0
  6. package/dist/commands/create/project.d.ts +10 -0
  7. package/dist/commands/create/project.js +41 -0
  8. package/dist/commands/create/project.js.map +1 -0
  9. package/dist/commands/generate-application/index.d.ts +16 -0
  10. package/dist/commands/generate-application/index.js +90 -0
  11. package/dist/commands/generate-application/index.js.map +1 -0
  12. package/dist/commands/issue-vc.d.ts +14 -0
  13. package/dist/commands/issue-vc.js +85 -0
  14. package/dist/commands/issue-vc.js.map +1 -0
  15. package/dist/commands/list/index.d.ts +7 -0
  16. package/dist/commands/list/index.js +24 -0
  17. package/dist/commands/list/index.js.map +1 -0
  18. package/dist/commands/list/projects.d.ts +15 -0
  19. package/dist/commands/list/projects.js +69 -0
  20. package/dist/commands/list/projects.js.map +1 -0
  21. package/dist/commands/list/schemas.d.ts +28 -0
  22. package/dist/commands/list/schemas.js +109 -0
  23. package/dist/commands/list/schemas.js.map +1 -0
  24. package/dist/commands/login/index.d.ts +10 -0
  25. package/dist/commands/login/index.js +50 -0
  26. package/dist/commands/login/index.js.map +1 -0
  27. package/dist/commands/logout/index.d.ts +7 -0
  28. package/dist/commands/logout/index.js +32 -0
  29. package/dist/commands/logout/index.js.map +1 -0
  30. package/dist/commands/show/index.d.ts +7 -0
  31. package/dist/commands/show/index.js +24 -0
  32. package/dist/commands/show/index.js.map +1 -0
  33. package/dist/commands/show/project.d.ts +14 -0
  34. package/dist/commands/show/project.js +84 -0
  35. package/dist/commands/show/project.js.map +1 -0
  36. package/dist/commands/show/schema.d.ts +13 -0
  37. package/dist/commands/show/schema.js +61 -0
  38. package/dist/commands/show/schema.js.map +1 -0
  39. package/dist/commands/sign-up/index.d.ts +10 -0
  40. package/dist/commands/sign-up/index.js +56 -0
  41. package/dist/commands/sign-up/index.js.map +1 -0
  42. package/dist/commands/use/index.d.ts +7 -0
  43. package/dist/commands/use/index.js +20 -0
  44. package/dist/commands/use/index.js.map +1 -0
  45. package/dist/commands/use/project.d.ts +13 -0
  46. package/dist/commands/use/project.js +77 -0
  47. package/dist/commands/use/project.js.map +1 -0
  48. package/dist/commands/verify-vc.d.ts +10 -0
  49. package/dist/commands/verify-vc.js +37 -0
  50. package/dist/commands/verify-vc.js.map +1 -0
  51. package/dist/errors/index.d.ts +20 -0
  52. package/dist/errors/index.js +63 -0
  53. package/dist/errors/index.js.map +1 -0
  54. package/dist/fixtures/mock-projects.d.ts +22 -0
  55. package/dist/fixtures/mock-projects.js +38 -0
  56. package/dist/fixtures/mock-projects.js.map +1 -0
  57. package/dist/fixtures/mock-schemas.d.ts +4 -0
  58. package/dist/fixtures/mock-schemas.js +34 -0
  59. package/dist/fixtures/mock-schemas.js.map +1 -0
  60. package/dist/index.d.ts +1 -0
  61. package/dist/index.js +6 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/render/functions.d.ts +2 -0
  64. package/dist/render/functions.js +28 -0
  65. package/dist/render/functions.js.map +1 -0
  66. package/dist/render/texts.d.ts +4 -0
  67. package/dist/render/texts.js +31 -0
  68. package/dist/render/texts.js.map +1 -0
  69. package/dist/services/git/index.d.ts +3 -0
  70. package/dist/services/git/index.js +20 -0
  71. package/dist/services/git/index.js.map +1 -0
  72. package/dist/services/iam/iam.api.d.ts +145 -0
  73. package/dist/services/iam/iam.api.js +202 -0
  74. package/dist/services/iam/iam.api.js.map +1 -0
  75. package/dist/services/iam/index.d.ts +11 -0
  76. package/dist/services/iam/index.js +59 -0
  77. package/dist/services/iam/index.js.map +1 -0
  78. package/dist/services/index.d.ts +4 -0
  79. package/dist/services/index.js +13 -0
  80. package/dist/services/index.js.map +1 -0
  81. package/dist/services/issuance/index.d.ts +10 -0
  82. package/dist/services/issuance/index.js +40 -0
  83. package/dist/services/issuance/index.js.map +1 -0
  84. package/dist/services/issuance/issuance.api.d.ts +360 -0
  85. package/dist/services/issuance/issuance.api.js +311 -0
  86. package/dist/services/issuance/issuance.api.js.map +1 -0
  87. package/dist/services/issuance/parse.schema.url.d.ts +5 -0
  88. package/dist/services/issuance/parse.schema.url.js +73 -0
  89. package/dist/services/issuance/parse.schema.url.js.map +1 -0
  90. package/dist/services/schema-manager/index.d.ts +19 -0
  91. package/dist/services/schema-manager/index.js +43 -0
  92. package/dist/services/schema-manager/index.js.map +1 -0
  93. package/dist/services/schema-manager/schema-manager.api.d.ts +279 -0
  94. package/dist/services/schema-manager/schema-manager.api.js +171 -0
  95. package/dist/services/schema-manager/schema-manager.api.js.map +1 -0
  96. package/dist/services/user-management/index.d.ts +35 -0
  97. package/dist/services/user-management/index.js +108 -0
  98. package/dist/services/user-management/index.js.map +1 -0
  99. package/dist/services/user-management/user-management.api.d.ts +110 -0
  100. package/dist/services/user-management/user-management.api.js +185 -0
  101. package/dist/services/user-management/user-management.api.js.map +1 -0
  102. package/dist/services/vault/index.d.ts +23 -0
  103. package/dist/services/vault/index.js +67 -0
  104. package/dist/services/vault/index.js.map +1 -0
  105. package/dist/services/verification/index.d.ts +9 -0
  106. package/dist/services/verification/index.js +29 -0
  107. package/dist/services/verification/index.js.map +1 -0
  108. package/dist/services/verification/verifier.api.d.ts +202 -0
  109. package/dist/services/verification/verifier.api.js +187 -0
  110. package/dist/services/verification/verifier.api.js.map +1 -0
  111. package/dist/services/writer/index.d.ts +3 -0
  112. package/dist/services/writer/index.js +17 -0
  113. package/dist/services/writer/index.js.map +1 -0
  114. package/dist/user-actions/index.d.ts +1 -0
  115. package/dist/user-actions/index.js +13 -0
  116. package/dist/user-actions/index.js.map +1 -0
  117. package/dist/user-actions/prompts.d.ts +10 -0
  118. package/dist/user-actions/prompts.js +36 -0
  119. package/dist/user-actions/prompts.js.map +1 -0
  120. package/package.json +145 -0
package/README.md ADDED
@@ -0,0 +1,231 @@
1
+ # Command Line tools for Affinidi Elements
2
+
3
+ ## Installation
4
+
5
+ ```
6
+ npm install @affinidi/cli
7
+ ```
8
+
9
+ ## Quick start
10
+
11
+ ### Sign up:
12
+
13
+ ```
14
+ affinidi sign-up
15
+ ```
16
+ use `affinidi login` instead if you already have an Affinidi Account
17
+
18
+ ### Create a project:
19
+
20
+ ```
21
+ affinidi create project
22
+ ```
23
+
24
+ ### Generate an application
25
+
26
+ ```
27
+ affinidi generate-application -n "My Application"
28
+ ```
29
+
30
+ ## Usage
31
+
32
+ ## affinidi generate-application
33
+
34
+ Use this command to generate a Privacy Preserving app
35
+
36
+ USAGE
37
+ ```
38
+ $ affinidi generate-application [-p web|mobile] [-n <value>] [-u portable-reputation|access-without-ownership-of-data|certification-and-verification|kyc-kyb]
39
+
40
+ FLAGS
41
+ -n, --name=<value> [default: my-app] Name of the application
42
+ -p, --platform=(web|mobile) [default: web] Platform
43
+ -u, --use-case=(portable-reputation|access-without-ownership-of-data|certification-and-verification|kyc-kyb) [default: certification-and-verification] Use case
44
+
45
+ DESCRIPTION
46
+ Use this command to generate a Privacy Preserving app
47
+
48
+ EXAMPLES
49
+ $ affinidi generate-application
50
+ ```
51
+
52
+ ## affinidi help
53
+ Display help for affinidi.
54
+
55
+ ## affinidi login
56
+
57
+ Log-in with your email address to use Affinidi privacy preserving services.
58
+
59
+ USAGE
60
+ ```
61
+ $ affinidi login [EMAIL]
62
+ ```
63
+
64
+ EXAMPLES
65
+ ```
66
+ $ affinidi login
67
+ ```
68
+
69
+ ## affinidi sign-up
70
+
71
+ Use this command to log-in with your email address to use Affinidi privacy preserving services.
72
+
73
+ USAGE
74
+ ```
75
+ $ affinidi sign-up [EMAIL]
76
+
77
+ ```
78
+ EXAMPLES
79
+ ```
80
+ $ affinidi sign-up
81
+ ```
82
+
83
+ ## affinidi logout
84
+
85
+ Use this command to end your affinidi session
86
+
87
+ USAGE
88
+ ```
89
+ $ affinidi logout
90
+ ```
91
+
92
+ EXAMPLES
93
+ ```
94
+ $ affinidi logout
95
+ ```
96
+
97
+ ## affinidi list
98
+
99
+ The list command to display various resources
100
+
101
+ USAGE
102
+ ```
103
+ $ affinidi list
104
+ ```
105
+
106
+
107
+ Use the list command if you want to display some of your resources
108
+ like the schemas or projects that you've created.
109
+
110
+ The current available resources are:
111
+ - schemas
112
+ - projects
113
+ See the command examples in the help:
114
+
115
+ ```
116
+ $ affinidi list --help
117
+ ```
118
+
119
+ EXAMPLES
120
+ ```
121
+ Shows you the list of your projects
122
+
123
+ $ affinidi list projects
124
+
125
+ Shows a list of available schemas
126
+
127
+ $ affinidi list schemas
128
+ ```
129
+
130
+ COMMANDS
131
+ ```
132
+ list projects Perform the action of listing all the projects you created
133
+ list schemas
134
+ ```
135
+
136
+ ## affinidi show
137
+
138
+ The Show command to display the detail of a resource
139
+
140
+ USAGE
141
+ ```
142
+ $ affinidi show
143
+ ```
144
+
145
+ Use the show command if you want to display some of your resources
146
+ like the schema or project that you've created.
147
+
148
+ The current available resources are:
149
+ - schema
150
+ - project
151
+ See the command examples in the help:
152
+ ```
153
+ $ affinidi show --help
154
+ ```
155
+
156
+ EXAMPLES
157
+ ```
158
+ Shows the details of a schema
159
+
160
+ $ affinidi show schema [<schema-id>] [--output json]
161
+
162
+ Shows information about a specific project that you own.
163
+
164
+ $ affinidi show [<project-id>] [--output json]
165
+ ```
166
+ COMMANDS
167
+ ```
168
+ show project describe the command here
169
+ show schema
170
+ ```
171
+
172
+ ## affinidi use
173
+
174
+ The Use command selects an entity to work with
175
+
176
+ USAGE
177
+ ```
178
+ $ affinidi use
179
+ ```
180
+
181
+
182
+ Use the use command if you want to select a project you want to work on.
183
+
184
+ See the command examples in the help:
185
+ ```
186
+ $ affinidi use --help
187
+ ```
188
+
189
+ EXAMPLES
190
+ ```
191
+ Use a given project
192
+
193
+ $ affinidi use use [<project-id>]
194
+ ```
195
+
196
+ ## affinidi issue-vc
197
+
198
+ Issues a verifiable credential based on an given schema
199
+
200
+ USAGE
201
+ ```
202
+ $ affinidi issue-vc [EMAIL] -s <value> -d <value>
203
+ ```
204
+
205
+ FLAGS
206
+ ```
207
+ -d, --data=<value> (required) source json file with credential data
208
+ -s, --schema=<value> (required) json schema url
209
+ ```
210
+
211
+ EXAMPLES
212
+ ```
213
+ $ affinidi issue-vc
214
+ ```
215
+
216
+ ## affinidi verify-vc
217
+
218
+ Verifies a verifiable credential
219
+
220
+ USAGE
221
+ ```
222
+ $ affinidi verify-vc -d <value>
223
+ ```
224
+ FLAGS
225
+ ```
226
+ -d, --data=<value> (required) source json file with credentials to be verified
227
+ ```
228
+ EXAMPLES
229
+ ```
230
+ $ affinidi verify-vc
231
+ ```
package/bin/dev ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+
3
+ const oclif = require('@oclif/core')
4
+
5
+ const path = require('path')
6
+ const project = path.join(__dirname, '..', 'tsconfig.json')
7
+
8
+ // In dev mode -> use ts-node and dev plugins
9
+ process.env.NODE_ENV = 'development'
10
+
11
+ require('ts-node').register({project})
12
+
13
+ // In dev mode, always show stack traces
14
+ oclif.settings.debug = true;
15
+
16
+ // Start the CLI
17
+ oclif.run().then(oclif.flush).catch(oclif.Errors.handle)
package/bin/dev.cmd ADDED
@@ -0,0 +1,3 @@
1
+ @echo off
2
+
3
+ node "%~dp0\dev" %*
package/bin/run ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ const oclif = require('@oclif/core')
4
+
5
+ oclif.run().then(require('@oclif/core/flush')).catch(require('@oclif/core/handle'))
package/bin/run.cmd ADDED
@@ -0,0 +1,3 @@
1
+ @echo off
2
+
3
+ node "%~dp0\run" %*
@@ -0,0 +1,10 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Project extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ name: string;
7
+ }[];
8
+ run(): Promise<void>;
9
+ catch(error: string | Error): Promise<void>;
10
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const core_1 = require("@oclif/core");
5
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
+ const user_actions_1 = require("../../user-actions");
7
+ const services_1 = require("../../services");
8
+ const user_management_1 = require("../../services/user-management");
9
+ class Project extends core_1.Command {
10
+ async run() {
11
+ var _a;
12
+ const { args } = await this.parse(Project);
13
+ let { projectName } = args;
14
+ if (!projectName) {
15
+ projectName = await (0, user_actions_1.projectNamePrompt)();
16
+ }
17
+ const token = (_a = (0, user_management_1.getSession)()) === null || _a === void 0 ? void 0 : _a.accessToken;
18
+ const projectNameInput = {
19
+ name: projectName,
20
+ };
21
+ core_1.CliUx.ux.action.start('Creating project');
22
+ const projectData = await services_1.iAmService.createProject(token, projectNameInput);
23
+ const projectDetails = await services_1.iAmService.getProjectSummary(token, projectData.projectId);
24
+ core_1.CliUx.ux.action.stop('Project has been successfully created: ');
25
+ services_1.vaultService.set(services_1.VAULT_KEYS.projectId, projectDetails.project.projectId);
26
+ services_1.vaultService.set(services_1.VAULT_KEYS.projectName, projectDetails.project.name);
27
+ services_1.vaultService.set(services_1.VAULT_KEYS.projectAPIKey, projectDetails.apiKey.apiKeyHash);
28
+ services_1.vaultService.set(services_1.VAULT_KEYS.projectDID, projectDetails.wallet.did);
29
+ core_1.CliUx.ux.info(chalk_1.default.red.bold('Please save the API key hash and DID URL somewhere safe. You would not be able to view them again.'));
30
+ core_1.CliUx.ux.info(JSON.stringify(projectDetails, null, ' '));
31
+ }
32
+ async catch(error) {
33
+ core_1.CliUx.ux.action.stop('');
34
+ core_1.CliUx.ux.info(error.toString());
35
+ }
36
+ }
37
+ exports.default = Project;
38
+ Project.description = 'Use this command to create a new Affinidi project';
39
+ Project.examples = ['<%= config.bin %> <%= command.id %>'];
40
+ Project.args = [{ name: 'projectName' }];
41
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/create/project.ts"],"names":[],"mappings":";;;AAAA,sCAA4C;AAC5C,0DAAyB;AAEzB,qDAAsD;AACtD,6CAAqE;AAErE,oEAA2D;AAE3D,MAAqB,OAAQ,SAAQ,cAAO;IAOnC,KAAK,CAAC,GAAG;;QACd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAE1C,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAE1B,IAAI,CAAC,WAAW,EAAE;YAChB,WAAW,GAAG,MAAM,IAAA,gCAAiB,GAAE,CAAA;SACxC;QACD,MAAM,KAAK,GAAG,MAAA,IAAA,4BAAU,GAAE,0CAAE,WAAW,CAAA;QACvC,MAAM,gBAAgB,GAAuB;YAC3C,IAAI,EAAE,WAAW;SAClB,CAAA;QACD,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACzC,MAAM,WAAW,GAAG,MAAM,qBAAU,CAAC,aAAa,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;QAC3E,MAAM,cAAc,GAAG,MAAM,qBAAU,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;QACvF,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;QAC/D,uBAAY,CAAC,GAAG,CAAC,qBAAU,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACxE,uBAAY,CAAC,GAAG,CAAC,qBAAU,CAAC,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACrE,uBAAY,CAAC,GAAG,CAAC,qBAAU,CAAC,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAC5E,uBAAY,CAAC,GAAG,CAAC,qBAAU,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClE,YAAK,CAAC,EAAE,CAAC,IAAI,CACX,eAAK,CAAC,GAAG,CAAC,IAAI,CACZ,oGAAoG,CACrG,CACF,CAAA;QACD,YAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAqB;QAC/B,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxB,YAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IACjC,CAAC;;AAtCH,0BAuCC;AAtCQ,mBAAW,GAAG,mDAAmD,CAAA;AAEjE,gBAAQ,GAAG,CAAC,qCAAqC,CAAC,CAAA;AAElD,YAAI,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { Command } from '@oclif/core';
2
+ declare type PlatformType = 'web' | 'mobile';
3
+ declare type UseCaseType = 'portable-reputation' | 'access-without-ownership-of-data' | 'certification-and-verification' | 'kyc-kyb';
4
+ export default class GenerateApplication extends Command {
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ platform: import("@oclif/core/lib/interfaces").OptionFlag<PlatformType>;
9
+ name: import("@oclif/core/lib/interfaces").OptionFlag<string>;
10
+ 'use-case': import("@oclif/core/lib/interfaces").OptionFlag<UseCaseType>;
11
+ };
12
+ run(): Promise<void>;
13
+ private setUpProject;
14
+ private download;
15
+ }
16
+ export {};
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const services_1 = require("../../services");
5
+ const git_1 = require("../../services/git");
6
+ const UseCaseSources = {
7
+ 'portable-reputation': 'NOT IMPLEMENTED YET',
8
+ 'access-without-ownership-of-data': 'NOT IMPLEMENTED YET',
9
+ 'certification-and-verification': 'https://github.com/affinityproject/elements-reference-app-frontend.git',
10
+ 'kyc-kyb': 'NOT IMPLEMENTED YET',
11
+ };
12
+ class GenerateApplication extends core_1.Command {
13
+ async run() {
14
+ const { flags } = await this.parse(GenerateApplication);
15
+ core_1.CliUx.ux.action.start('Generating an application');
16
+ const useCase = flags['use-case'];
17
+ const name = flags.name;
18
+ try {
19
+ switch (useCase) {
20
+ case 'certification-and-verification':
21
+ await this.download(UseCaseSources[useCase], name);
22
+ break;
23
+ case 'access-without-ownership-of-data':
24
+ case 'portable-reputation':
25
+ case 'kyc-kyb':
26
+ core_1.CliUx.ux.info('Not implemented yet');
27
+ return;
28
+ default:
29
+ core_1.CliUx.ux.error('Invalid use-case');
30
+ break;
31
+ }
32
+ }
33
+ catch (error) {
34
+ core_1.CliUx.ux.info(`Failed to generate an application: ${error.message}`);
35
+ return;
36
+ }
37
+ this.setUpProject(name);
38
+ core_1.CliUx.ux.action.stop();
39
+ }
40
+ setUpProject(name) {
41
+ const activeProject = services_1.vaultService.get('active-project-api-key');
42
+ core_1.CliUx.ux.info(`Setting up the project`);
43
+ try {
44
+ services_1.Writer.write(`${name}/.env`, [
45
+ 'REACT_APP_CLOUD_WALLET_URL=https://cloud-wallet-api.prod.affinity-project.org',
46
+ 'REACT_APP_VERIFIER_URL=https://affinity-verifier.prod.affinity-project.org',
47
+ `REACT_APP_API_KEY=${activeProject}`,
48
+ ]);
49
+ }
50
+ catch (error) {
51
+ core_1.CliUx.ux.info(`Failed to set up project: ${error.message}`);
52
+ }
53
+ }
54
+ async download(gitUrl, destination) {
55
+ try {
56
+ await git_1.GitService.clone(gitUrl, destination);
57
+ }
58
+ catch (error) {
59
+ core_1.CliUx.ux.info(`Download Failed: ${error.message}`);
60
+ }
61
+ }
62
+ }
63
+ exports.default = GenerateApplication;
64
+ GenerateApplication.description = 'Use this command to generate a Privacy Preserving app';
65
+ GenerateApplication.examples = ['<%= config.bin %> <%= command.id %>'];
66
+ GenerateApplication.flags = {
67
+ platform: core_1.Flags.enum({
68
+ char: 'p',
69
+ description: 'Platform',
70
+ default: 'web',
71
+ options: ['web', 'mobile'],
72
+ }),
73
+ name: core_1.Flags.string({
74
+ char: 'n',
75
+ description: 'Name of the application',
76
+ default: 'my-app',
77
+ }),
78
+ 'use-case': core_1.Flags.enum({
79
+ char: 'u',
80
+ description: 'Use case',
81
+ default: 'certification-and-verification',
82
+ options: [
83
+ 'portable-reputation',
84
+ 'access-without-ownership-of-data',
85
+ 'certification-and-verification',
86
+ 'kyc-kyb',
87
+ ],
88
+ }),
89
+ };
90
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/generate-application/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class IssueVc extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ schema: import("@oclif/core/lib/interfaces").OptionFlag<string>;
7
+ data: import("@oclif/core/lib/interfaces").OptionFlag<string>;
8
+ };
9
+ static args: {
10
+ name: string;
11
+ }[];
12
+ run(): Promise<void>;
13
+ catch(error: string | Error): Promise<void>;
14
+ }
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const core_1 = require("@oclif/core");
5
+ const promises_1 = tslib_1.__importDefault(require("fs/promises"));
6
+ const EmailValidator = tslib_1.__importStar(require("email-validator"));
7
+ const parse_schema_url_1 = require("../services/issuance/parse.schema.url");
8
+ const services_1 = require("../services");
9
+ const issuance_api_1 = require("../services/issuance/issuance.api");
10
+ const issuance_1 = require("../services/issuance");
11
+ const errors_1 = require("../errors");
12
+ const user_management_1 = require("../services/user-management");
13
+ const user_actions_1 = require("../user-actions");
14
+ const MAX_EMAIL_ATTEMPT = 3;
15
+ class IssueVc extends core_1.Command {
16
+ async run() {
17
+ var _a;
18
+ const { flags, args } = await this.parse(IssueVc);
19
+ let { email } = args;
20
+ if (!email) {
21
+ email = await (0, user_actions_1.enterIssuanceEmailPrompt)();
22
+ }
23
+ let wrongEmailCount = 0;
24
+ while (!EmailValidator.validate(email)) {
25
+ // eslint-disable-next-line no-await-in-loop
26
+ email = await (0, user_actions_1.enterIssuanceEmailPrompt)();
27
+ wrongEmailCount += 1;
28
+ if (wrongEmailCount === MAX_EMAIL_ATTEMPT) {
29
+ core_1.CliUx.ux.error(errors_1.WrongEmailError);
30
+ }
31
+ }
32
+ const token = (_a = (0, user_management_1.getSession)()) === null || _a === void 0 ? void 0 : _a.accessToken;
33
+ const apiKeyHash = services_1.vaultService.get(services_1.VAULT_KEYS.projectAPIKey);
34
+ const { schemaType, jsonSchema, jsonLdContext } = (0, parse_schema_url_1.parseSchemaURL)(flags.schema);
35
+ const issuanceJson = {
36
+ template: {
37
+ verification: {
38
+ method: issuance_api_1.VerificationMethod.Email,
39
+ },
40
+ schema: {
41
+ type: schemaType,
42
+ jsonLdContextUrl: jsonLdContext.toString(),
43
+ jsonSchemaUrl: jsonSchema.toString(),
44
+ },
45
+ issuerDid: services_1.vaultService.get(services_1.VAULT_KEYS.projectDID),
46
+ },
47
+ projectId: services_1.vaultService.get(services_1.VAULT_KEYS.projectId),
48
+ };
49
+ const file = await promises_1.default.readFile(flags.data, 'utf-8');
50
+ const offerInput = {
51
+ verification: {
52
+ target: {
53
+ email,
54
+ },
55
+ },
56
+ credentialSubject: JSON.parse(file),
57
+ };
58
+ core_1.CliUx.ux.action.start('Issuing VC');
59
+ const issuanceId = await issuance_1.issuanceService.createIssuance(apiKeyHash, token, issuanceJson);
60
+ const offer = await issuance_1.issuanceService.createOffer(apiKeyHash, token, issuanceId.id, offerInput);
61
+ core_1.CliUx.ux.action.stop('');
62
+ core_1.CliUx.ux.info(JSON.stringify(offer, null, ' '));
63
+ }
64
+ async catch(error) {
65
+ if (error instanceof SyntaxError) {
66
+ core_1.CliUx.ux.info(errors_1.JsonFileSyntaxError.message);
67
+ }
68
+ else {
69
+ core_1.CliUx.ux.info(error.toString());
70
+ }
71
+ }
72
+ }
73
+ exports.default = IssueVc;
74
+ IssueVc.description = 'Issues a verifiable credential based on an given schema';
75
+ IssueVc.examples = ['<%= config.bin %> <%= command.id %>'];
76
+ IssueVc.flags = {
77
+ schema: core_1.Flags.string({ char: 's', description: 'json schema url', required: true }),
78
+ data: core_1.Flags.string({
79
+ char: 'd',
80
+ description: 'source json file with credential data',
81
+ required: true,
82
+ }),
83
+ };
84
+ IssueVc.args = [{ name: 'email' }];
85
+ //# sourceMappingURL=issue-vc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-vc.js","sourceRoot":"","sources":["../../src/commands/issue-vc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Command, Interfaces } from '@oclif/core';
2
+ export default class List extends Command {
3
+ static summary: string;
4
+ static description: string;
5
+ static examples: Interfaces.Example[];
6
+ run(): Promise<void>;
7
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const texts_1 = require("../../render/texts");
5
+ class List extends core_1.Command {
6
+ async run() {
7
+ core_1.CliUx.ux.log(List.summary);
8
+ core_1.CliUx.ux.log(List.description);
9
+ }
10
+ }
11
+ exports.default = List;
12
+ List.summary = 'The list command to display various resources';
13
+ List.description = texts_1.listCommandDescription;
14
+ List.examples = [
15
+ {
16
+ description: 'Shows you the list of your projects',
17
+ command: '$ <%= config.bin %> <%= command.id %> projects',
18
+ },
19
+ {
20
+ description: 'Shows a list of available schemas',
21
+ command: '$ <%= config.bin %> <%= command.id %> schemas',
22
+ },
23
+ ];
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/list/index.ts"],"names":[],"mappings":";;AAAA,sCAAwD;AAExD,8CAA2D;AAE3D,MAAqB,IAAK,SAAQ,cAAO;IAgBhC,KAAK,CAAC,GAAG;QACd,YAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1B,YAAK,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAChC,CAAC;;AAnBH,uBAoBC;AAnBQ,YAAO,GAAG,+CAA+C,CAAA;AAEzD,gBAAW,GAAG,8BAAsB,CAAA;AAEpC,aAAQ,GAAyB;IACtC;QACE,WAAW,EAAE,qCAAqC;QAClD,OAAO,EAAE,gDAAgD;KAC1D;IACD;QACE,WAAW,EAAE,mCAAmC;QAChD,OAAO,EAAE,+CAA+C;KACzD;CACF,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { Command } from '@oclif/core';
2
+ declare type ListProjectsOutputType = 'json' | 'table' | 'json-file' | 'csv-file';
3
+ export default class Projects extends Command {
4
+ static enableJsonFlag: boolean;
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: {
8
+ skip: import("@oclif/core/lib/interfaces").OptionFlag<number>;
9
+ limit: import("@oclif/core/lib/interfaces").OptionFlag<number>;
10
+ output: import("@oclif/core/lib/interfaces").OptionFlag<ListProjectsOutputType>;
11
+ };
12
+ run(): Promise<void>;
13
+ catch(error: Error): Promise<void>;
14
+ }
15
+ export {};
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const core_1 = require("@oclif/core");
5
+ const fs = tslib_1.__importStar(require("fs/promises"));
6
+ const csv_stringify_1 = require("csv-stringify");
7
+ const services_1 = require("../../services");
8
+ const user_management_1 = require("../../services/user-management");
9
+ class Projects extends core_1.Command {
10
+ async run() {
11
+ var _a;
12
+ const { flags } = await this.parse(Projects);
13
+ const token = (_a = (0, user_management_1.getSession)()) === null || _a === void 0 ? void 0 : _a.accessToken;
14
+ core_1.CliUx.ux.action.start('Fetching list of projects');
15
+ const projectData = await services_1.iAmService.listProjects(token, flags.skip, flags.limit);
16
+ core_1.CliUx.ux.action.stop();
17
+ switch (flags.output) {
18
+ case 'table':
19
+ core_1.CliUx.ux.table(projectData.map((data) => ({
20
+ projectId: data.projectId,
21
+ name: data.name,
22
+ createdAt: data.createdAt,
23
+ })), { projectId: {}, name: {}, createdAt: {} });
24
+ break;
25
+ case 'json-file':
26
+ await fs.writeFile('projects.json', JSON.stringify(projectData, null, ' '));
27
+ break;
28
+ case 'csv-file':
29
+ await fs.writeFile('projects.csv', (0, csv_stringify_1.stringify)(projectData, { header: true }));
30
+ break;
31
+ case 'json':
32
+ core_1.CliUx.ux.info(JSON.stringify(projectData, null, ' '));
33
+ break;
34
+ default:
35
+ core_1.CliUx.ux.error('Unknown output format');
36
+ break;
37
+ }
38
+ }
39
+ async catch(error) {
40
+ core_1.CliUx.ux.action.stop("Projects can't be fetched.");
41
+ core_1.CliUx.ux.info(error === null || error === void 0 ? void 0 : error.message);
42
+ }
43
+ }
44
+ exports.default = Projects;
45
+ Projects.enableJsonFlag = true;
46
+ Projects.description = 'Perform the action of listing all the projects you created';
47
+ Projects.examples = [
48
+ '<%= config.bin %> <%= command.id %>',
49
+ '<%= config.bin %> <%= command.id %> --skip=2 --limit=5 --output=csv-file',
50
+ ];
51
+ Projects.flags = {
52
+ skip: core_1.Flags.integer({
53
+ char: 's',
54
+ description: 'Index into projects list from which to start the listing',
55
+ default: 0,
56
+ }),
57
+ limit: core_1.Flags.integer({
58
+ char: 'l',
59
+ description: 'Maximum number of projects which will be listed',
60
+ default: 10,
61
+ }),
62
+ output: core_1.Flags.enum({
63
+ char: 'o',
64
+ description: 'Project listing output format',
65
+ default: 'json',
66
+ options: ['json', 'table', 'json-file', 'csv-file'],
67
+ }),
68
+ };
69
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/commands/list/projects.ts"],"names":[],"mappings":";;;AAAA,sCAAmD;AACnD,wDAAiC;AACjC,iDAA0D;AAE1D,6CAA2C;AAC3C,oEAA2D;AAI3D,MAAqB,QAAS,SAAQ,cAAO;IA6BpC,KAAK,CAAC,GAAG;;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAE5C,MAAM,KAAK,GAAG,MAAA,IAAA,4BAAU,GAAE,0CAAE,WAAW,CAAA;QAEvC,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAClD,MAAM,WAAW,GAAG,MAAM,qBAAU,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QACjF,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QAEtB,QAAQ,KAAK,CAAC,MAAM,EAAE;YACpB,KAAK,OAAO;gBACV,YAAK,CAAC,EAAE,CAAC,KAAK,CACZ,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,CAAC,EACH,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAC3C,CAAA;gBACD,MAAK;YACP,KAAK,WAAW;gBACd,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;gBAC5E,MAAK;YACP,KAAK,UAAU;gBACb,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,IAAA,yBAAa,EAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBAChF,MAAK;YACP,KAAK,MAAM;gBACT,YAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;gBACtD,MAAK;YACP;gBACE,YAAK,CAAC,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;gBACvC,MAAK;SACR;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAY;QACtB,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAClD,YAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAC,CAAA;IAC/B,CAAC;;AAnEH,2BAoEC;AAnEe,uBAAc,GAAG,IAAI,CAAA;AAE5B,oBAAW,GAAG,4DAA4D,CAAA;AAE1E,iBAAQ,GAAG;IAChB,qCAAqC;IACrC,0EAA0E;CAC3E,CAAA;AAEM,cAAK,GAAG;IACb,IAAI,EAAE,YAAK,CAAC,OAAO,CAAC;QAClB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,0DAA0D;QACvE,OAAO,EAAE,CAAC;KACX,CAAC;IACF,KAAK,EAAE,YAAK,CAAC,OAAO,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,MAAM,EAAE,YAAK,CAAC,IAAI,CAAyB;QACzC,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,+BAA+B;QAC5C,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC;KACpD,CAAC;CACH,CAAA"}