@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
@@ -0,0 +1,202 @@
1
+ export interface ValidateJwtOutput {
2
+ isValid: boolean;
3
+ payload: any;
4
+ }
5
+ export interface ValidateJwtInput {
6
+ token: string;
7
+ }
8
+ export declare type FreeFormObject = Record<string, any>;
9
+ export declare type SignedCredential = FreeFormObject;
10
+ export interface VerifyCredentialShareResponseOutput {
11
+ jti: string;
12
+ errors: string[];
13
+ issuer: string;
14
+ isValid: boolean;
15
+ suppliedCredentials: SignedCredential[];
16
+ }
17
+ export interface VerifyCredentialShareResponseInput {
18
+ credentialShareRequestToken?: string | null;
19
+ credentialShareResponseToken: string;
20
+ isHolderMustBeSubject?: boolean | null;
21
+ }
22
+ export interface VerifyCredentialOutput {
23
+ errors: string[];
24
+ isValid: boolean;
25
+ }
26
+ export interface W3CCredentialStatus {
27
+ id: string;
28
+ type: string;
29
+ revocationListIndex: string;
30
+ revocationListCredential: string;
31
+ }
32
+ export interface W3CProof {
33
+ type?: string | null;
34
+ created?: string | null;
35
+ verificationMethod: string;
36
+ proofPurpose: string;
37
+ jws?: string | null;
38
+ proofValue?: string | null;
39
+ nonce?: string | null;
40
+ }
41
+ export interface W3CCredential {
42
+ '@context': any;
43
+ id?: string | null;
44
+ type: string[];
45
+ holder?: FreeFormObject | null;
46
+ credentialSubject: FreeFormObject;
47
+ credentialStatus?: W3CCredentialStatus | null;
48
+ issuanceDate: string;
49
+ issuer: string;
50
+ expirationDate?: string | null;
51
+ proof: W3CProof;
52
+ credentialSchema?: {
53
+ type: string;
54
+ id: string;
55
+ };
56
+ }
57
+ export interface VerifyCredentialInput {
58
+ verifiableCredentials: W3CCredential[];
59
+ issuerDidDocument?: FreeFormObject;
60
+ }
61
+ export interface VerifyPresentationOutput {
62
+ error?: string;
63
+ errors?: string[];
64
+ isValid: boolean;
65
+ }
66
+ export interface W3CPresentation {
67
+ '@context': any;
68
+ id?: string | null;
69
+ type: string[];
70
+ holder: FreeFormObject;
71
+ verifiableCredential: W3CCredential[];
72
+ proof: FreeFormObject;
73
+ }
74
+ export interface VerifyPresentationInput {
75
+ verifiablePresentation?: W3CPresentation;
76
+ signedPresentation?: W3CPresentation;
77
+ }
78
+ export interface BuildCredentialRequestOutput {
79
+ credentialShareRequest: FreeFormObject;
80
+ }
81
+ /**
82
+ * @pattern ^https?:\/\/.*$
83
+ */
84
+ export declare type UrlType = string;
85
+ export interface CredentialRequirements {
86
+ type: string[];
87
+ constraints?: string[] | Record<string, any[]>[] | (string[] & Record<string, any[]>[]);
88
+ }
89
+ /**
90
+ * @pattern did:.*
91
+ */
92
+ export declare type DidType = string;
93
+ /**
94
+ * @pattern \d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)
95
+ */
96
+ export declare type DateISOType = string;
97
+ export interface BuildCredentialRequestInput {
98
+ callbackUrl?: UrlType | null;
99
+ credentialRequirements: CredentialRequirements[];
100
+ issuerDid?: DidType | null;
101
+ subjectDid?: DidType | null;
102
+ audienceDid?: DidType | null;
103
+ expiresAt?: DateISOType | null;
104
+ nonce?: string | null;
105
+ }
106
+ import { AxiosInstance, AxiosRequestConfig, AxiosResponse, ResponseType } from 'axios';
107
+ export declare type QueryParamsType = Record<string | number, any>;
108
+ export interface FullRequestParams extends Omit<AxiosRequestConfig, 'data' | 'params' | 'url' | 'responseType'> {
109
+ /** set parameter to `true` for call `securityWorker` for this request */
110
+ secure?: boolean;
111
+ /** request path */
112
+ path: string;
113
+ /** content type of request body */
114
+ type?: ContentType;
115
+ /** query params */
116
+ query?: QueryParamsType;
117
+ /** format of response (i.e. response.json() -> format: "json") */
118
+ format?: ResponseType;
119
+ /** request body */
120
+ body?: unknown;
121
+ }
122
+ export declare type RequestParams = Omit<FullRequestParams, 'body' | 'method' | 'query' | 'path'>;
123
+ export interface ApiConfig<SecurityDataType = unknown> extends Omit<AxiosRequestConfig, 'data' | 'cancelToken'> {
124
+ securityWorker?: (securityData: SecurityDataType | null) => Promise<AxiosRequestConfig | void> | AxiosRequestConfig | void;
125
+ secure?: boolean;
126
+ format?: ResponseType;
127
+ }
128
+ export declare enum ContentType {
129
+ Json = "application/json",
130
+ FormData = "multipart/form-data",
131
+ UrlEncoded = "application/x-www-form-urlencoded"
132
+ }
133
+ export declare class HttpClient<SecurityDataType = unknown> {
134
+ instance: AxiosInstance;
135
+ private securityData;
136
+ private securityWorker?;
137
+ private secure?;
138
+ private format?;
139
+ constructor({ securityWorker, secure, format, ...axiosConfig }?: ApiConfig<SecurityDataType>);
140
+ setSecurityData: (data: SecurityDataType | null) => void;
141
+ protected mergeRequestParams(params1: AxiosRequestConfig, params2?: AxiosRequestConfig): AxiosRequestConfig;
142
+ protected stringifyFormItem(formItem: unknown): string;
143
+ protected createFormData(input: Record<string, unknown>): FormData;
144
+ request: <T = any, _E = any>({ secure, path, type, query, format, body, ...params }: FullRequestParams) => Promise<AxiosResponse<T, any>>;
145
+ }
146
+ /**
147
+ * @title affinity-verifier
148
+ * @version 0.28.1
149
+ * @license ISC
150
+ * @baseUrl /api/v1
151
+ * @contact Denis Popov <denis.p@affinity-project.org>
152
+ *
153
+ * Affinity verifier
154
+ */
155
+ export declare class Api<SecurityDataType extends unknown> extends HttpClient<SecurityDataType> {
156
+ verifier: {
157
+ /**
158
+ * @description Validates JWT object. returns isValid: boolean payload: payload from JWT
159
+ *
160
+ * @tags Verifier
161
+ * @name ValidateJwt
162
+ * @request POST:/verifier/validate-jwt
163
+ */
164
+ validateJwt: (data: ValidateJwtInput, params?: RequestParams) => Promise<AxiosResponse<ValidateJwtOutput, any>>;
165
+ /**
166
+ * @description Verifying JWT token (signature and expiration), validate each credential inside it (signature), validate response against request if requestToken was passed. `errors` contains list of error messages for invalid credentials.
167
+ *
168
+ * @tags Verifier
169
+ * @name VerifyCredentialShareResponse
170
+ * @summary Verifying share response token.
171
+ * @request POST:/verifier/verify-share-response
172
+ */
173
+ verifyCredentialShareResponse: (data: VerifyCredentialShareResponseInput, params?: RequestParams) => Promise<AxiosResponse<VerifyCredentialShareResponseOutput, any>>;
174
+ /**
175
+ * @description Verifying Verifiable Credentials (signatures) `isValid` - true if all credentials verified `errors` contains list of error messages for invalid credentials.
176
+ *
177
+ * @tags Verifier
178
+ * @name VerifyCredentials
179
+ * @summary Verifying VC
180
+ * @request POST:/verifier/verify-vcs
181
+ */
182
+ verifyCredentials: (data: VerifyCredentialInput, params?: RequestParams) => Promise<AxiosResponse<VerifyCredentialOutput, any>>;
183
+ /**
184
+ * @description Verifying Verifiable Presentation (signatures) `isValid` - true if presentation verified `error` verificaction error.
185
+ *
186
+ * @tags Verifier
187
+ * @name VerifyPresentation
188
+ * @summary Verifying VP
189
+ * @request POST:/verifier/verify-vp
190
+ */
191
+ verifyPresentation: (data: VerifyPresentationInput, params?: RequestParams) => Promise<AxiosResponse<VerifyPresentationOutput, any>>;
192
+ /**
193
+ * @description Build credential share request JWT object from input data.
194
+ *
195
+ * @tags Verifier
196
+ * @name BuildCredentialRequest
197
+ * @summary Builds credential share request.
198
+ * @request POST:/verifier/build-credential-request
199
+ */
200
+ buildCredentialRequest: (data: BuildCredentialRequestInput, params?: RequestParams) => Promise<AxiosResponse<BuildCredentialRequestOutput, any>>;
201
+ };
202
+ }
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /* eslint-disable */
3
+ /* tslint:disable */
4
+ /*
5
+ * ---------------------------------------------------------------
6
+ * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
7
+ * ## ##
8
+ * ## AUTHOR: acacode ##
9
+ * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
10
+ * ---------------------------------------------------------------
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.Api = exports.HttpClient = exports.ContentType = void 0;
14
+ const tslib_1 = require("tslib");
15
+ const axios_1 = tslib_1.__importDefault(require("axios"));
16
+ var ContentType;
17
+ (function (ContentType) {
18
+ ContentType["Json"] = "application/json";
19
+ ContentType["FormData"] = "multipart/form-data";
20
+ ContentType["UrlEncoded"] = "application/x-www-form-urlencoded";
21
+ })(ContentType = exports.ContentType || (exports.ContentType = {}));
22
+ class HttpClient {
23
+ constructor({ securityWorker, secure, format, ...axiosConfig } = {}) {
24
+ this.securityData = null;
25
+ this.setSecurityData = (data) => {
26
+ this.securityData = data;
27
+ };
28
+ this.request = async ({ secure, path, type, query, format, body, ...params }) => {
29
+ const secureParams = ((typeof secure === 'boolean' ? secure : this.secure) &&
30
+ this.securityWorker &&
31
+ (await this.securityWorker(this.securityData))) ||
32
+ {};
33
+ const requestParams = this.mergeRequestParams(params, secureParams);
34
+ const responseFormat = format || this.format || undefined;
35
+ if (type === ContentType.FormData && body && body !== null && typeof body === 'object') {
36
+ body = this.createFormData(body);
37
+ }
38
+ return this.instance.request({
39
+ ...requestParams,
40
+ headers: {
41
+ ...(requestParams.headers || {}),
42
+ ...(type && type !== ContentType.FormData ? { 'Content-Type': type } : {}),
43
+ },
44
+ params: query,
45
+ responseType: responseFormat,
46
+ data: body,
47
+ url: path,
48
+ });
49
+ };
50
+ this.instance = axios_1.default.create({ ...axiosConfig, baseURL: axiosConfig.baseURL || '/api/v1' });
51
+ this.secure = secure;
52
+ this.format = format;
53
+ this.securityWorker = securityWorker;
54
+ }
55
+ mergeRequestParams(params1, params2) {
56
+ const method = params1.method || (params2 && params2.method);
57
+ return {
58
+ ...this.instance.defaults,
59
+ ...params1,
60
+ ...(params2 || {}),
61
+ headers: {
62
+ ...((method &&
63
+ this.instance.defaults.headers[method.toLowerCase()]) ||
64
+ {}),
65
+ ...(params1.headers || {}),
66
+ ...((params2 && params2.headers) || {}),
67
+ },
68
+ };
69
+ }
70
+ stringifyFormItem(formItem) {
71
+ if (typeof formItem === 'object' && formItem !== null) {
72
+ return JSON.stringify(formItem);
73
+ }
74
+ else {
75
+ return `${formItem}`;
76
+ }
77
+ }
78
+ createFormData(input) {
79
+ return Object.keys(input || {}).reduce((formData, key) => {
80
+ const property = input[key];
81
+ const propertyContent = property instanceof Array ? property : [property];
82
+ for (const formItem of propertyContent) {
83
+ const isFileType = formItem instanceof Blob || formItem instanceof File;
84
+ formData.append(key, isFileType ? formItem : this.stringifyFormItem(formItem));
85
+ }
86
+ return formData;
87
+ }, new FormData());
88
+ }
89
+ }
90
+ exports.HttpClient = HttpClient;
91
+ /**
92
+ * @title affinity-verifier
93
+ * @version 0.28.1
94
+ * @license ISC
95
+ * @baseUrl /api/v1
96
+ * @contact Denis Popov <denis.p@affinity-project.org>
97
+ *
98
+ * Affinity verifier
99
+ */
100
+ class Api extends HttpClient {
101
+ constructor() {
102
+ super(...arguments);
103
+ this.verifier = {
104
+ /**
105
+ * @description Validates JWT object. returns isValid: boolean payload: payload from JWT
106
+ *
107
+ * @tags Verifier
108
+ * @name ValidateJwt
109
+ * @request POST:/verifier/validate-jwt
110
+ */
111
+ validateJwt: (data, params = {}) => this.request({
112
+ path: `/verifier/validate-jwt`,
113
+ method: 'POST',
114
+ body: data,
115
+ type: ContentType.Json,
116
+ format: 'json',
117
+ ...params,
118
+ }),
119
+ /**
120
+ * @description Verifying JWT token (signature and expiration), validate each credential inside it (signature), validate response against request if requestToken was passed. `errors` contains list of error messages for invalid credentials.
121
+ *
122
+ * @tags Verifier
123
+ * @name VerifyCredentialShareResponse
124
+ * @summary Verifying share response token.
125
+ * @request POST:/verifier/verify-share-response
126
+ */
127
+ verifyCredentialShareResponse: (data, params = {}) => this.request({
128
+ path: `/verifier/verify-share-response`,
129
+ method: 'POST',
130
+ body: data,
131
+ type: ContentType.Json,
132
+ format: 'json',
133
+ ...params,
134
+ }),
135
+ /**
136
+ * @description Verifying Verifiable Credentials (signatures) `isValid` - true if all credentials verified `errors` contains list of error messages for invalid credentials.
137
+ *
138
+ * @tags Verifier
139
+ * @name VerifyCredentials
140
+ * @summary Verifying VC
141
+ * @request POST:/verifier/verify-vcs
142
+ */
143
+ verifyCredentials: (data, params = {}) => this.request({
144
+ path: `/verifier/verify-vcs`,
145
+ method: 'POST',
146
+ body: data,
147
+ type: ContentType.Json,
148
+ format: 'json',
149
+ ...params,
150
+ }),
151
+ /**
152
+ * @description Verifying Verifiable Presentation (signatures) `isValid` - true if presentation verified `error` verificaction error.
153
+ *
154
+ * @tags Verifier
155
+ * @name VerifyPresentation
156
+ * @summary Verifying VP
157
+ * @request POST:/verifier/verify-vp
158
+ */
159
+ verifyPresentation: (data, params = {}) => this.request({
160
+ path: `/verifier/verify-vp`,
161
+ method: 'POST',
162
+ body: data,
163
+ type: ContentType.Json,
164
+ format: 'json',
165
+ ...params,
166
+ }),
167
+ /**
168
+ * @description Build credential share request JWT object from input data.
169
+ *
170
+ * @tags Verifier
171
+ * @name BuildCredentialRequest
172
+ * @summary Builds credential share request.
173
+ * @request POST:/verifier/build-credential-request
174
+ */
175
+ buildCredentialRequest: (data, params = {}) => this.request({
176
+ path: `/verifier/build-credential-request`,
177
+ method: 'POST',
178
+ body: data,
179
+ type: ContentType.Json,
180
+ format: 'json',
181
+ ...params,
182
+ }),
183
+ };
184
+ }
185
+ }
186
+ exports.Api = Api;
187
+ //# sourceMappingURL=verifier.api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifier.api.js","sourceRoot":"","sources":["../../../src/services/verification/verifier.api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare class Writer {
2
+ static write: (path: string, lines: string[]) => void;
3
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Writer = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const fs_1 = tslib_1.__importDefault(require("fs"));
6
+ class Writer {
7
+ }
8
+ exports.Writer = Writer;
9
+ Writer.write = (path, lines) => {
10
+ const stream = fs_1.default.createWriteStream(path, {
11
+ flags: 'a',
12
+ });
13
+ lines.forEach((line) => {
14
+ stream.write(`${line}\n`);
15
+ });
16
+ };
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/writer/index.ts"],"names":[],"mappings":";;;;AAAA,oDAAmB;AAEnB,MAAa,MAAM;;AAAnB,wBAUC;AATe,YAAK,GAAG,CAAC,IAAY,EAAE,KAAe,EAAQ,EAAE;IAC5D,MAAM,MAAM,GAAG,YAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE;QACxC,KAAK,EAAE,GAAG;KACX,CAAC,CAAA;IAEF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export { AnswerNo, AnswerYes, acceptConditionsAndPolicy, confirmSignOut, enterEmailPrompt, enterOTPPrompt, projectNamePrompt, enterIssuanceEmailPrompt, } from './prompts';
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enterIssuanceEmailPrompt = exports.projectNamePrompt = exports.enterOTPPrompt = exports.enterEmailPrompt = exports.confirmSignOut = exports.acceptConditionsAndPolicy = exports.AnswerYes = exports.AnswerNo = void 0;
4
+ var prompts_1 = require("./prompts");
5
+ Object.defineProperty(exports, "AnswerNo", { enumerable: true, get: function () { return prompts_1.AnswerNo; } });
6
+ Object.defineProperty(exports, "AnswerYes", { enumerable: true, get: function () { return prompts_1.AnswerYes; } });
7
+ Object.defineProperty(exports, "acceptConditionsAndPolicy", { enumerable: true, get: function () { return prompts_1.acceptConditionsAndPolicy; } });
8
+ Object.defineProperty(exports, "confirmSignOut", { enumerable: true, get: function () { return prompts_1.confirmSignOut; } });
9
+ Object.defineProperty(exports, "enterEmailPrompt", { enumerable: true, get: function () { return prompts_1.enterEmailPrompt; } });
10
+ Object.defineProperty(exports, "enterOTPPrompt", { enumerable: true, get: function () { return prompts_1.enterOTPPrompt; } });
11
+ Object.defineProperty(exports, "projectNamePrompt", { enumerable: true, get: function () { return prompts_1.projectNamePrompt; } });
12
+ Object.defineProperty(exports, "enterIssuanceEmailPrompt", { enumerable: true, get: function () { return prompts_1.enterIssuanceEmailPrompt; } });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/user-actions/index.ts"],"names":[],"mappings":";;;AAAA,qCASkB;AARhB,mGAAA,QAAQ,OAAA;AACR,oGAAA,SAAS,OAAA;AACT,oHAAA,yBAAyB,OAAA;AACzB,yGAAA,cAAc,OAAA;AACd,2GAAA,gBAAgB,OAAA;AAChB,yGAAA,cAAc,OAAA;AACd,4GAAA,iBAAiB,OAAA;AACjB,mHAAA,wBAAwB,OAAA"}
@@ -0,0 +1,10 @@
1
+ export declare const AnswerNo = "n";
2
+ export declare const AnswerYes = "y";
3
+ declare type YesOrNo = 'n' | 'y';
4
+ export declare const enterEmailPrompt: (text?: string) => Promise<string>;
5
+ export declare const enterOTPPrompt: () => Promise<string>;
6
+ export declare const confirmSignOut: () => Promise<YesOrNo>;
7
+ export declare const acceptConditionsAndPolicy: () => Promise<YesOrNo>;
8
+ export declare const projectNamePrompt: (text?: string) => Promise<string>;
9
+ export declare const enterIssuanceEmailPrompt: (text?: string) => Promise<string>;
10
+ export {};
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enterIssuanceEmailPrompt = exports.projectNamePrompt = exports.acceptConditionsAndPolicy = exports.confirmSignOut = exports.enterOTPPrompt = exports.enterEmailPrompt = exports.AnswerYes = exports.AnswerNo = void 0;
4
+ const core_1 = require("@oclif/core");
5
+ const texts_1 = require("../render/texts");
6
+ exports.AnswerNo = 'n';
7
+ exports.AnswerYes = 'y';
8
+ const enterEmailPrompt = async (text = 'Enter your Affinidi email address') => {
9
+ return core_1.CliUx.ux.prompt(text, { required: true });
10
+ };
11
+ exports.enterEmailPrompt = enterEmailPrompt;
12
+ const enterOTPPrompt = async () => {
13
+ return core_1.CliUx.ux.prompt('Enter the confirmation code we emailed to you', { type: 'mask' });
14
+ };
15
+ exports.enterOTPPrompt = enterOTPPrompt;
16
+ const confirmSignOut = async () => {
17
+ return core_1.CliUx.ux.prompt('Please confirm that you want to sign-out from Affinidi [Y/n]', {
18
+ default: 'y',
19
+ });
20
+ };
21
+ exports.confirmSignOut = confirmSignOut;
22
+ const acceptConditionsAndPolicy = async () => {
23
+ return core_1.CliUx.ux.prompt(texts_1.conditionsAndPolicyMessage, {
24
+ default: 'n',
25
+ });
26
+ };
27
+ exports.acceptConditionsAndPolicy = acceptConditionsAndPolicy;
28
+ const projectNamePrompt = async (text = 'Please enter a project name') => {
29
+ return core_1.CliUx.ux.prompt(text, { required: true });
30
+ };
31
+ exports.projectNamePrompt = projectNamePrompt;
32
+ const enterIssuanceEmailPrompt = async (text = 'Enter email address to send verifiable credential to') => {
33
+ return core_1.CliUx.ux.prompt(text, { required: true });
34
+ };
35
+ exports.enterIssuanceEmailPrompt = enterIssuanceEmailPrompt;
36
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/user-actions/prompts.ts"],"names":[],"mappings":";;;AAAA,sCAAmC;AAEnC,2CAA4D;AAE/C,QAAA,QAAQ,GAAG,GAAG,CAAA;AACd,QAAA,SAAS,GAAG,GAAG,CAAA;AAIrB,MAAM,gBAAgB,GAAG,KAAK,EACnC,OAAe,mCAAmC,EACjC,EAAE;IACnB,OAAO,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAClD,CAAC,CAAA;AAJY,QAAA,gBAAgB,oBAI5B;AAEM,MAAM,cAAc,GAAG,KAAK,IAAqB,EAAE;IACxD,OAAO,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,+CAA+C,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAC3F,CAAC,CAAA;AAFY,QAAA,cAAc,kBAE1B;AAEM,MAAM,cAAc,GAAG,KAAK,IAAsB,EAAE;IACzD,OAAO,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,8DAA8D,EAAE;QACrF,OAAO,EAAE,GAAG;KACb,CAAC,CAAA;AACJ,CAAC,CAAA;AAJY,QAAA,cAAc,kBAI1B;AAEM,MAAM,yBAAyB,GAAG,KAAK,IAAsB,EAAE;IACpE,OAAO,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,kCAA0B,EAAE;QACjD,OAAO,EAAE,GAAG;KACb,CAAC,CAAA;AACJ,CAAC,CAAA;AAJY,QAAA,yBAAyB,6BAIrC;AAEM,MAAM,iBAAiB,GAAG,KAAK,EACpC,OAAe,6BAA6B,EAC3B,EAAE;IACnB,OAAO,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAClD,CAAC,CAAA;AAJY,QAAA,iBAAiB,qBAI7B;AAEM,MAAM,wBAAwB,GAAG,KAAK,EAC3C,OAAe,sDAAsD,EACpD,EAAE;IACnB,OAAO,YAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAClD,CAAC,CAAA;AAJY,QAAA,wBAAwB,4BAIpC"}
package/package.json ADDED
@@ -0,0 +1,145 @@
1
+ {
2
+ "name": "@affinidi/cli",
3
+ "version": "1.19.0",
4
+ "description": "Affinidi elemental command-line-interface",
5
+ "author": "Denis Davidov denis.d@affinidi.com",
6
+ "typings": "dist/index.d.ts",
7
+ "bin": {
8
+ "affinidi": "./bin/run"
9
+ },
10
+ "main": "dist/index.js",
11
+ "files": [
12
+ "/bin",
13
+ "/dist",
14
+ "/npm-shrinkwrap.json",
15
+ "/oclif.manifest.json"
16
+ ],
17
+ "scripts": {
18
+ "dev": "./bin/dev",
19
+ "semantic-release": "semantic-release",
20
+ "build": "npm run remove:dist && npm run tsc",
21
+ "build:binary": "npm run remove:dist && npm run tsc -b",
22
+ "start": "npm run build && node dist/index.js",
23
+ "tsc": "tsc -p tsconfig-build.json",
24
+ "lint": "eslint src/*.ts src/**/*.ts",
25
+ "lint:fix": "eslint src/*.ts src/**/*.ts test/**/*.ts --fix",
26
+ "test": "mocha \"test/**/*.test.ts\"",
27
+ "test:integration": "exit 0",
28
+ "checkLicenses": "license-checker --production --failOn 'AGPL 3.0;LGPL 2.1'",
29
+ "prepare-commit-hooks": "npm install --global commitizen@4.2.4 cz-conventional-changelog@3.3.0 @commitlint/config-conventional@16.2.1 @commitlint/cli@16.2.3",
30
+ "prepare:dev": "is-ci || (husky install && npm run prepare-commit-hooks)",
31
+ "prepare": "node -e \"process.exit(process.env.NODE_ENV === 'production' ? 0 : 1)\" || npm run prepare:dev",
32
+ "remove:dist": "shx rm -rf dist",
33
+ "generate:api": "node scripts/generate-api.cjs"
34
+ },
35
+ "publishConfig": {
36
+ "registry": "https://registry.npmjs.org/",
37
+ "access": "public"
38
+ },
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+ssh://git@gitlab.com/affinidi/foundational/phoenix/affinidi-cli-js.git"
42
+ },
43
+ "keywords": [
44
+ "affinidi",
45
+ "cli",
46
+ "oclif"
47
+ ],
48
+ "license": "Apache-2.0",
49
+ "bugs": {
50
+ "url": "https://gitlab.com/affinidi/foundational/phoenix/affinidi-cli-js/issues"
51
+ },
52
+ "homepage": "https://gitlab.com/affinidi/foundational/phoenix/affinidi-cli-js#readme",
53
+ "dependencies": {
54
+ "@oclif/core": "^1.19.2",
55
+ "@oclif/plugin-help": "^5.1.16",
56
+ "@oclif/plugin-plugins": "^2.1.5",
57
+ "axios": "^1.1.3",
58
+ "chalk": "^4.1.2",
59
+ "conf": "^10.2.0",
60
+ "csv-stringify": "^6.2.0",
61
+ "email-validator": "^2.0.4",
62
+ "form-data": "^4.0.0",
63
+ "http-status-codes": "^2.2.0",
64
+ "inquirer": "^8.2.3",
65
+ "nanoid": "^3.3.4",
66
+ "ts-toolbelt": "^9.6.0"
67
+ },
68
+ "devDependencies": {
69
+ "@affinidi/eslint-config": "2.0.0-beta.0",
70
+ "@affinidi/prettier-config": "2.0.0-beta.0",
71
+ "@oclif/test": "^2.2.6",
72
+ "@semantic-release/exec": "^6.0.3",
73
+ "@semantic-release/git": "^10.0.1",
74
+ "@semantic-release/gitlab": "^9.4.2",
75
+ "@semantic-release/npm": "^9.0.1",
76
+ "@types/chai": "4.3.3",
77
+ "@types/inquirer": "^8.2.3",
78
+ "@types/mocha": "10.0.0",
79
+ "@types/node": "18.11.5",
80
+ "@typescript-eslint/eslint-plugin": "^5.41.0",
81
+ "@typescript-eslint/parser": "^5.41.0",
82
+ "chai": "4.3.6",
83
+ "eslint": "^8.26.0",
84
+ "eslint-config-oclif": "^4",
85
+ "eslint-config-oclif-typescript": "^1.0.3",
86
+ "eslint-config-prettier": "^8.5.0",
87
+ "eslint-plugin-prettier": "^4.2.1",
88
+ "fancy-test": "^2.0.5",
89
+ "husky": "^8.0.1",
90
+ "is-ci": "^3.0.1",
91
+ "license-checker": "25.0.1",
92
+ "mocha": "^10.1.0",
93
+ "nyc": "15.1.0",
94
+ "oclif": "^3.2.22",
95
+ "prettier": "^2.7.1",
96
+ "semantic-release": "^19.0.5",
97
+ "shx": "^0.3.4",
98
+ "swagger-typescript-api": "^10.0.3",
99
+ "ts-mockito": "^2.6.1",
100
+ "ts-node": "^10.9.1",
101
+ "tslib": "^2.4.0",
102
+ "typescript": "^4.8.4"
103
+ },
104
+ "oclif": {
105
+ "bin": "affinidi",
106
+ "dirname": "affinidi",
107
+ "commands": "./dist/commands",
108
+ "plugins": [
109
+ "@oclif/plugin-help",
110
+ "@oclif/plugin-plugins"
111
+ ],
112
+ "topicSeparator": " ",
113
+ "topics": {}
114
+ },
115
+ "engines": {
116
+ "node": ">=12.0.0"
117
+ },
118
+ "config": {
119
+ "commitizen": {
120
+ "path": "./node_modules/cz-conventional-changelog",
121
+ "types": {
122
+ "feat": {
123
+ "description": "A new feature (minor)",
124
+ "title": "Features"
125
+ },
126
+ "fix": {
127
+ "description": "A bug fix (patch)",
128
+ "title": "Bugs"
129
+ },
130
+ "perf": {
131
+ "description": "A change which improves performance (patch)",
132
+ "title": "Performance"
133
+ },
134
+ "chore": {
135
+ "description": "A CI change (no-release)",
136
+ "title": "CI"
137
+ },
138
+ "docs": {
139
+ "description": "A documentation change (no-release)",
140
+ "title": "Documentation"
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }