@thirtified/eudi-dev 0.0.0-stage → 0.1.1

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 (47) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +223 -2
  3. package/dist/binary.d.ts +42 -0
  4. package/dist/binary.js +76 -0
  5. package/dist/binary.js.map +1 -0
  6. package/dist/commands/credentials.d.ts +151 -0
  7. package/dist/commands/credentials.js +234 -0
  8. package/dist/commands/credentials.js.map +1 -0
  9. package/dist/commands/registrar.d.ts +116 -0
  10. package/dist/commands/registrar.js +150 -0
  11. package/dist/commands/registrar.js.map +1 -0
  12. package/dist/commands/trust.d.ts +58 -0
  13. package/dist/commands/trust.js +90 -0
  14. package/dist/commands/trust.js.map +1 -0
  15. package/dist/errors.d.ts +47 -0
  16. package/dist/errors.js +41 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/eudi.d.ts +66 -0
  19. package/dist/eudi.js +113 -0
  20. package/dist/eudi.js.map +1 -0
  21. package/dist/index.d.ts +10 -0
  22. package/dist/index.js +8 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/input.d.ts +32 -0
  25. package/dist/input.js +7 -0
  26. package/dist/input.js.map +1 -0
  27. package/dist/runner.d.ts +86 -0
  28. package/dist/runner.js +246 -0
  29. package/dist/runner.js.map +1 -0
  30. package/dist/types.d.ts +345 -0
  31. package/dist/types.js +11 -0
  32. package/dist/types.js.map +1 -0
  33. package/dist/version.d.ts +24 -0
  34. package/dist/version.js +35 -0
  35. package/dist/version.js.map +1 -0
  36. package/package.json +71 -4
  37. package/src/binary.ts +114 -0
  38. package/src/commands/credentials.ts +384 -0
  39. package/src/commands/registrar.ts +243 -0
  40. package/src/commands/trust.ts +123 -0
  41. package/src/errors.ts +66 -0
  42. package/src/eudi.ts +159 -0
  43. package/src/index.ts +44 -0
  44. package/src/input.ts +27 -0
  45. package/src/runner.ts +310 -0
  46. package/src/types.ts +396 -0
  47. package/src/version.ts +36 -0
package/dist/runner.js ADDED
@@ -0,0 +1,246 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { mkdtemp, rm, stat, writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { EudiDevError, lastLine } from './errors.js';
6
+ import { isPathInput, isUrlInput } from './input.js';
7
+ const STRIPPED_LEGACY_VARS = ['OID4VC_DEV_HOME', 'EUDI_REMOTE_TIMEOUT'];
8
+ /** Builds the environment for a child process. Exported for tests. */
9
+ export function buildEnv(config, base = process.env) {
10
+ const env = {};
11
+ for (const [key, value] of Object.entries(base)) {
12
+ if (value === undefined)
13
+ continue;
14
+ if (!config.inheritEudiEnv && (key.startsWith('EUDI_DEV_') || STRIPPED_LEGACY_VARS.includes(key)))
15
+ continue;
16
+ env[key] = value;
17
+ }
18
+ env.EUDI_DEV_HOME = config.home;
19
+ env.NO_COLOR = '1';
20
+ for (const [key, value] of Object.entries(config.env ?? {})) {
21
+ if (value === undefined)
22
+ delete env[key];
23
+ else
24
+ env[key] = value;
25
+ }
26
+ return env;
27
+ }
28
+ /** Collects flags as `--name=value`, so a value starting with `-` is never read as a flag. */
29
+ export class ArgList {
30
+ args;
31
+ constructor(...command) {
32
+ this.args = [...command];
33
+ }
34
+ /** `true` → `--name`, `false` → `--name=false`, `undefined` → nothing. */
35
+ bool(name, value) {
36
+ if (value === true)
37
+ this.args.push(`--${name}`);
38
+ else if (value === false)
39
+ this.args.push(`--${name}=false`);
40
+ return this;
41
+ }
42
+ /** Only adds `--name` when `value` is true. For flags that default to false. */
43
+ on(name, value) {
44
+ if (value)
45
+ this.args.push(`--${name}`);
46
+ return this;
47
+ }
48
+ value(name, value) {
49
+ if (value !== undefined && value !== null)
50
+ this.args.push(`--${name}=${value}`);
51
+ return this;
52
+ }
53
+ /** A repeatable flag: one `--name=value` per entry. */
54
+ repeat(name, values) {
55
+ for (const v of values ?? [])
56
+ this.args.push(`--${name}=${v}`);
57
+ return this;
58
+ }
59
+ /** A comma-separated single flag. */
60
+ csv(name, values) {
61
+ if (values && values.length > 0)
62
+ this.args.push(`--${name}=${values.join(',')}`);
63
+ return this;
64
+ }
65
+ push(...args) {
66
+ this.args.push(...args);
67
+ return this;
68
+ }
69
+ }
70
+ /** Temp files for one call. */
71
+ export class Scratch {
72
+ dir;
73
+ n = 0;
74
+ /** Writes `content` to a private temp file and returns its path. */
75
+ async write(name, content) {
76
+ this.dir ??= await mkdtemp(join(tmpdir(), 'eudi-dev-input-'));
77
+ const path = join(this.dir, `${++this.n}-${name}`);
78
+ await writeFile(path, content, { mode: 0o600 });
79
+ return path;
80
+ }
81
+ /**
82
+ * Turns a file-valued option into a flag value. Content is written to a temp
83
+ * file. `{ url }` is only allowed when `allowUrl` is set.
84
+ */
85
+ async file(input, name, opts = {}) {
86
+ if (isPathInput(input)) {
87
+ await assertFile(input.path);
88
+ return input.path;
89
+ }
90
+ if (isUrlInput(input)) {
91
+ if (!opts.allowUrl)
92
+ throw new TypeError(`${name} does not accept a URL`);
93
+ assertHttpUrl(input.url);
94
+ return input.url;
95
+ }
96
+ return this.write(name, input);
97
+ }
98
+ async cleanup() {
99
+ if (this.dir)
100
+ await rm(this.dir, { recursive: true, force: true });
101
+ this.dir = undefined;
102
+ }
103
+ }
104
+ async function assertFile(path) {
105
+ let ok = false;
106
+ try {
107
+ ok = (await stat(path)).isFile();
108
+ }
109
+ catch {
110
+ ok = false;
111
+ }
112
+ // eudi-dev treats a path that doesn't exist as raw input, which hides typos.
113
+ if (!ok)
114
+ throw new TypeError(`${path} is not a file`);
115
+ }
116
+ function assertHttpUrl(url) {
117
+ if (!/^https?:\/\//i.test(url))
118
+ throw new TypeError(`${url} is not an http(s) URL`);
119
+ }
120
+ /** Maps an {@link Input} to the positional argument and the stdin content. */
121
+ export async function positionalInput(input) {
122
+ if (isPathInput(input)) {
123
+ await assertFile(input.path);
124
+ return { arg: input.path };
125
+ }
126
+ if (isUrlInput(input)) {
127
+ assertHttpUrl(input.url);
128
+ return { arg: input.url };
129
+ }
130
+ if (typeof input !== 'string' && !(input instanceof Uint8Array)) {
131
+ throw new TypeError('input must be a string, bytes, { path } or { url }');
132
+ }
133
+ return { arg: '-', stdin: input };
134
+ }
135
+ /** Spawns the eudi-dev binary with an isolated environment. */
136
+ export class Runner {
137
+ bin;
138
+ home;
139
+ config;
140
+ constructor(config) {
141
+ this.config = config;
142
+ this.bin = config.bin;
143
+ this.home = config.home;
144
+ }
145
+ /**
146
+ * Runs `eudi <args> --json --no-color` and parses stdout as exactly one
147
+ * JSON document. Rejects with {@link EudiDevError} on a non-zero exit, a
148
+ * timeout, or stdout that is not one JSON document.
149
+ */
150
+ async run(args, opts = {}) {
151
+ const json = opts.json ?? true;
152
+ const fullArgs = json ? [...args, '--json', '--no-color'] : [...args, '--no-color'];
153
+ const { exitCode, signal, stdout, stderr, timedOut, spawnError } = await this.spawn(fullArgs, opts);
154
+ const base = { args: fullArgs, exitCode, signal, stdout, stderr };
155
+ if (spawnError) {
156
+ const message = spawnError.name === 'AbortError' ? `eudi ${args[0] ?? ''} was aborted` : `Could not run ${this.bin}: ${spawnError.message}`;
157
+ throw new EudiDevError(message, { ...base, cause: spawnError });
158
+ }
159
+ let document;
160
+ let parseError;
161
+ if (json && stdout.trim() !== '') {
162
+ try {
163
+ document = JSON.parse(stdout);
164
+ }
165
+ catch (err) {
166
+ parseError = err;
167
+ }
168
+ }
169
+ if (timedOut) {
170
+ throw new EudiDevError(`eudi ${args[0] ?? ''} timed out`, { ...base, document, timedOut: true });
171
+ }
172
+ if (exitCode !== 0) {
173
+ const reason = lastLine(stderr) || (signal ? `killed by ${signal}` : `exit code ${exitCode}`);
174
+ throw new EudiDevError(reason, { ...base, document });
175
+ }
176
+ if (parseError) {
177
+ throw new EudiDevError(`eudi ${args.join(' ')} printed stdout that is not one JSON document`, {
178
+ ...base,
179
+ cause: parseError,
180
+ });
181
+ }
182
+ return { document: document, stdout, stderr };
183
+ }
184
+ spawn(args, opts) {
185
+ const maxBytes = this.config.maxBufferBytes ?? 64 * 1024 * 1024;
186
+ const timeoutMs = opts.timeoutMs ?? this.config.timeoutMs ?? 60_000;
187
+ return new Promise((resolve) => {
188
+ const child = spawn(this.bin, args, {
189
+ cwd: this.config.cwd,
190
+ env: buildEnv(this.config),
191
+ stdio: [opts.stdin !== undefined ? 'pipe' : 'ignore', 'pipe', 'pipe'],
192
+ windowsHide: true,
193
+ ...(opts.signal ? { signal: opts.signal } : {}),
194
+ });
195
+ const out = [];
196
+ const err = [];
197
+ let bytes = 0;
198
+ let timedOut = false;
199
+ let overflow = false;
200
+ let spawnError;
201
+ const collect = (sink) => (chunk) => {
202
+ bytes += chunk.length;
203
+ if (bytes > maxBytes) {
204
+ if (!overflow) {
205
+ overflow = true;
206
+ child.kill('SIGKILL');
207
+ }
208
+ return;
209
+ }
210
+ sink.push(chunk);
211
+ };
212
+ child.stdout?.on('data', collect(out));
213
+ child.stderr?.on('data', collect(err));
214
+ const timer = timeoutMs > 0
215
+ ? setTimeout(() => {
216
+ timedOut = true;
217
+ child.kill('SIGKILL');
218
+ }, timeoutMs)
219
+ : undefined;
220
+ child.on('error', (e) => {
221
+ spawnError = e;
222
+ });
223
+ child.on('close', (code, signal) => {
224
+ if (timer)
225
+ clearTimeout(timer);
226
+ let stderr = Buffer.concat(err).toString('utf8');
227
+ if (overflow)
228
+ stderr += `\n[eudi-dev] output exceeded ${maxBytes} bytes, process killed`;
229
+ const result = {
230
+ exitCode: code,
231
+ signal,
232
+ stdout: Buffer.concat(out).toString('utf8'),
233
+ stderr,
234
+ timedOut,
235
+ };
236
+ resolve(spawnError ? { ...result, spawnError } : result);
237
+ });
238
+ if (opts.stdin !== undefined && child.stdin) {
239
+ // The process may exit before it reads stdin (for example on a flag error).
240
+ child.stdin.on('error', () => { });
241
+ child.stdin.end(opts.stdin);
242
+ }
243
+ });
244
+ }
245
+ }
246
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,345 @@
1
+ /**
2
+ * Types for the `--json` documents of eudi-dev v3.
3
+ *
4
+ * Written by hand from the Go structs and JSON builders at v3.10.1
5
+ * (internal/output, internal/validate, internal/statuslist, internal/registrar,
6
+ * internal/trustedlists, internal/certinfo). Upstream has no OpenAPI or JSON
7
+ * schema for these documents. Within v3 fields are only added (ADR 0020), so
8
+ * every object type also accepts unknown keys.
9
+ */
10
+ /** A JSON object whose shape this package does not pin down. */
11
+ export type JsonObject = {
12
+ [key: string]: unknown;
13
+ };
14
+ /** Lets an object carry fields added by later v3 releases. */
15
+ type Open = {
16
+ [key: string]: unknown;
17
+ };
18
+ /**
19
+ * Like `Partial<T>`, but also accepts an explicit `undefined` under
20
+ * `exactOptionalPropertyTypes`. Used for objects that callers pass in.
21
+ */
22
+ export type Loose<T> = {
23
+ [K in keyof T]?: T[K] | undefined;
24
+ };
25
+ export type CheckStatus = 'pass' | 'fail' | 'warning' | 'skipped';
26
+ /** Check names, in the order `validate` runs them. */
27
+ export type CheckName = 'type' | 'expiry' | 'integrity' | 'trusted list' | 'signature' | 'trust' | 'status' | 'certificate revocation' | 'status list signature' | 'haip' | (string & {});
28
+ /** The trusted list service behind a passing trust or status list signature check. */
29
+ export interface TrustAnchor extends Open {
30
+ entry?: string;
31
+ list_url: string;
32
+ service: string;
33
+ }
34
+ export interface Check extends Open {
35
+ name: CheckName;
36
+ status: CheckStatus;
37
+ detail: string;
38
+ /** The check was skipped because the validation ran offline. */
39
+ needsNetwork?: boolean;
40
+ anchor?: TrustAnchor;
41
+ }
42
+ export interface CertificateExtension extends Open {
43
+ oid?: string;
44
+ name?: string;
45
+ critical?: boolean;
46
+ value?: unknown;
47
+ }
48
+ export interface CertificateInfo extends Open {
49
+ subject: string;
50
+ issuer: string;
51
+ serialNumber: string;
52
+ /** RFC 3339 time. */
53
+ notBefore: string;
54
+ /** RFC 3339 time. */
55
+ notAfter: string;
56
+ selfSigned: boolean;
57
+ ca: boolean;
58
+ maxPathLength?: number;
59
+ publicKey: string;
60
+ signatureAlgorithm: string;
61
+ keyUsage?: string[];
62
+ extendedKeyUsage?: string[];
63
+ subjectAltNames?: string[];
64
+ policies?: string[];
65
+ crlDistributionPoints?: string[];
66
+ ocspServers?: string[];
67
+ issuingCertificateURLs?: string[];
68
+ subjectKeyId?: string;
69
+ authorityKeyId?: string;
70
+ extensions: CertificateExtension[];
71
+ sha256Fingerprint: string;
72
+ pem: string;
73
+ }
74
+ export interface Disclosure extends Open {
75
+ name: string;
76
+ value: unknown;
77
+ salt: string;
78
+ digest: string;
79
+ isArrayEntry: boolean;
80
+ /** False for a disclosure whose digest the credential does not reference. */
81
+ referenced: boolean;
82
+ }
83
+ interface DecodedBase extends Open {
84
+ /** Parser warnings. */
85
+ warnings?: string[];
86
+ /** Spec deviations (for example RFC 9901 §7.1 rejection rules). */
87
+ deviations?: string[];
88
+ /** The x5c (JWT) or x5chain (mdoc) certificates, leaf first. */
89
+ certificates?: CertificateInfo[];
90
+ }
91
+ export interface DecodedSdJwt extends DecodedBase {
92
+ format: 'dc+sd-jwt';
93
+ header: JsonObject;
94
+ payload: JsonObject;
95
+ disclosures: Disclosure[];
96
+ /** The payload with every disclosure applied. */
97
+ resolvedClaims: JsonObject;
98
+ keyBindingJWT?: {
99
+ header: JsonObject;
100
+ payload: JsonObject;
101
+ };
102
+ }
103
+ export interface DecodedJwt extends DecodedBase {
104
+ format: 'jwt';
105
+ header: JsonObject;
106
+ payload: JsonObject;
107
+ }
108
+ export interface MdocValidityInfo extends Open {
109
+ signed?: string;
110
+ validFrom?: string;
111
+ validUntil?: string;
112
+ }
113
+ export interface DecodedMdoc extends DecodedBase {
114
+ format: 'mso_mdoc';
115
+ docType: string;
116
+ /** namespace → element identifier → value. */
117
+ claims: Record<string, Record<string, unknown>>;
118
+ isDeviceResponse?: boolean;
119
+ responseVersion?: string;
120
+ responseStatus?: number;
121
+ mso?: {
122
+ version: string;
123
+ digestAlgorithm: string;
124
+ docType: string;
125
+ validityInfo?: MdocValidityInfo;
126
+ status?: unknown;
127
+ /** namespace → digest id → base64url digest. */
128
+ valueDigests?: Record<string, Record<string, string>>;
129
+ deviceKeyInfo?: unknown;
130
+ } & Open;
131
+ deviceKey?: unknown;
132
+ issuerAuth?: unknown;
133
+ }
134
+ export interface DecodedCertificates extends Open {
135
+ format: 'x509';
136
+ certificates: CertificateInfo[];
137
+ }
138
+ export type DecodedCredential = DecodedSdJwt | DecodedJwt | DecodedMdoc | DecodedCertificates;
139
+ /**
140
+ * `decode --json` of a credential or certificate. It runs the decoder's
141
+ * checks offline-capable, so the result carries `validation.checks`.
142
+ */
143
+ export type DecodeCredentialResult = DecodedCredential & {
144
+ validation: {
145
+ checks: Check[];
146
+ };
147
+ };
148
+ /**
149
+ * `decode --json` of an OpenID4VCI offer, an OpenID4VP request or a trusted
150
+ * list. Their documents are not typed by this package.
151
+ */
152
+ export type DecodeOtherResult = JsonObject;
153
+ export type DecodeResult = DecodeCredentialResult | DecodeOtherResult;
154
+ export interface SignatureVerification extends Open {
155
+ signatureValid: boolean;
156
+ expired: boolean;
157
+ notYetValid: boolean;
158
+ algorithm?: string;
159
+ errors?: string[];
160
+ /** SD-JWT / JWT. */
161
+ keyId?: string;
162
+ issuer?: string;
163
+ expiresAt?: string;
164
+ issuedAt?: string;
165
+ notBefore?: string;
166
+ /** mdoc. */
167
+ docType?: string;
168
+ validFrom?: string;
169
+ validUntil?: string;
170
+ signed?: string;
171
+ warnings?: string[];
172
+ }
173
+ export interface StatusResult extends Open {
174
+ uri: string;
175
+ index: number;
176
+ status: number;
177
+ /** VALID, INVALID, SUSPENDED, an application specific value, or unknown. */
178
+ statusName: string;
179
+ isValid: boolean;
180
+ bitsPerEntry: number;
181
+ /** "jwt" or "cwt". */
182
+ format: string;
183
+ subject?: string;
184
+ signatureValid?: boolean;
185
+ trustAnchored: boolean;
186
+ warnings?: string[];
187
+ haipFindings?: string[];
188
+ }
189
+ export interface CatalogueTrust extends Open {
190
+ entry: string;
191
+ category: string;
192
+ anchored_by?: string;
193
+ findings?: string[];
194
+ warnings?: string[];
195
+ }
196
+ /** `validate --json`: the decoded credential plus the checks at top level. */
197
+ export type ValidateReport = DecodedCredential & {
198
+ checks: Check[];
199
+ verification?: SignatureVerification;
200
+ status?: StatusResult;
201
+ trust?: CatalogueTrust;
202
+ /** Present with `--haip` (empty when there are no findings). */
203
+ haipFindings?: string[];
204
+ };
205
+ export interface DcqlClaimQuery extends Open {
206
+ id?: string | undefined;
207
+ path: (string | number | null)[];
208
+ values?: unknown[] | undefined;
209
+ }
210
+ export interface DcqlCredentialQuery extends Open {
211
+ id: string;
212
+ format: 'dc+sd-jwt' | 'jwt_vc_json' | 'mso_mdoc' | (string & {});
213
+ meta?: ({
214
+ vct_values?: string[] | undefined;
215
+ doctype_value?: string | undefined;
216
+ } & Open) | undefined;
217
+ claims?: DcqlClaimQuery[] | undefined;
218
+ claim_sets?: string[][] | undefined;
219
+ }
220
+ export interface DcqlQuery extends Open {
221
+ credentials: DcqlCredentialQuery[];
222
+ credential_sets?: unknown[] | undefined;
223
+ }
224
+ /** `issue <format> --json`. `id` is set only when the wallet stored the credential. */
225
+ export interface IssueDocument extends Open {
226
+ credential: string;
227
+ id?: string;
228
+ }
229
+ export interface VersionInfo extends Open {
230
+ name: string;
231
+ version: string;
232
+ }
233
+ export interface TrustEntity extends Open {
234
+ id: string;
235
+ list: string;
236
+ name: string;
237
+ certificates: unknown[];
238
+ }
239
+ export interface TrustListLink extends Open {
240
+ url: string;
241
+ configured?: boolean;
242
+ via?: string;
243
+ error?: string;
244
+ }
245
+ /** `trust list --json`. */
246
+ export interface TrustOverview extends Open {
247
+ entities: TrustEntity[];
248
+ entity_lists: string[];
249
+ lists: TrustListLink[];
250
+ lists_url: string;
251
+ relying_party_cas?: string[];
252
+ trusted_list_cas?: string[];
253
+ trust_lists: ({
254
+ id: string;
255
+ default?: boolean;
256
+ category?: string;
257
+ path?: string;
258
+ } & Open)[];
259
+ }
260
+ /** A JWKS document as `trust ca-cert --jwks` prints it. */
261
+ export interface Jwks extends Open {
262
+ keys: JsonObject[];
263
+ }
264
+ export interface RegistrarIdentifier extends Open {
265
+ identifier: string;
266
+ type?: string;
267
+ }
268
+ export interface MultiLangString extends Open {
269
+ lang?: string;
270
+ content?: string;
271
+ }
272
+ export interface IntendedUse extends Open {
273
+ intendedUseIdentifier: string;
274
+ purpose: MultiLangString[];
275
+ privacyPolicy: unknown[];
276
+ createdAt: string;
277
+ credentials: unknown[];
278
+ }
279
+ export interface ProvidedAttestation extends Open {
280
+ format: string;
281
+ type: string;
282
+ }
283
+ export interface RelyingPartyService extends Open {
284
+ serviceTradeName: string;
285
+ serviceIdentifier?: string;
286
+ supportURI?: string;
287
+ srvDescription?: unknown;
288
+ entitlements: string[];
289
+ providesAttestations?: ProvidedAttestation[];
290
+ credentialIssuer?: string;
291
+ isIntermediary: boolean;
292
+ intendedUses?: IntendedUse[];
293
+ }
294
+ export interface RelyingParty extends Open {
295
+ identifier: RegistrarIdentifier[];
296
+ legalPerson: {
297
+ legalName: string[];
298
+ } & Open;
299
+ country: string;
300
+ tradeName?: string;
301
+ isPSB: boolean;
302
+ supervisoryAuthority: JsonObject;
303
+ registryURI: string;
304
+ services: RelyingPartyService[];
305
+ }
306
+ export interface RegistrationCertificateResult extends Open {
307
+ /** The bare registration certificate JWT (typ rc-wrp+jwt). */
308
+ registrationCertificate: string;
309
+ /** JSON array as a string, ready for a request's verifier_info parameter. */
310
+ verifierInfo?: string;
311
+ /** JSON array as a string, ready for the issuer metadata's issuer_info. */
312
+ issuerInfo?: string;
313
+ }
314
+ export interface AccessCertificateResult extends Open {
315
+ /** PEM leaf. */
316
+ certificate: string;
317
+ /** PEM leaf followed by the issuing CA. */
318
+ chain: string;
319
+ clientIds: string[];
320
+ }
321
+ export interface AccessCertificateRequest extends Open {
322
+ identifier?: string | undefined;
323
+ serviceIdentifier?: string | undefined;
324
+ csr: string;
325
+ dnsNames?: string[] | undefined;
326
+ validity?: string | undefined;
327
+ }
328
+ /** Input of `registrar enrol`, as for POST /api/registrar/enrolments. */
329
+ export interface Enrolment extends Open {
330
+ relyingParty: Loose<RelyingParty> & Open;
331
+ access?: AccessCertificateRequest | undefined;
332
+ registration?: JsonObject | undefined;
333
+ }
334
+ export interface EnrolmentResult extends Open {
335
+ relyingParty: RelyingParty;
336
+ access?: AccessCertificateResult;
337
+ registration?: RegistrationCertificateResult;
338
+ }
339
+ /** `registrar verifiers add --to` / `registrar issuers add --to`. */
340
+ export interface RegistrationExtensionResult extends Open {
341
+ relyingParty: RelyingParty;
342
+ intendedUse?: string;
343
+ registration: RegistrationCertificateResult | null;
344
+ }
345
+ export {};
package/dist/types.js ADDED
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Types for the `--json` documents of eudi-dev v3.
3
+ *
4
+ * Written by hand from the Go structs and JSON builders at v3.10.1
5
+ * (internal/output, internal/validate, internal/statuslist, internal/registrar,
6
+ * internal/trustedlists, internal/certinfo). Upstream has no OpenAPI or JSON
7
+ * schema for these documents. Within v3 fields are only added (ADR 0020), so
8
+ * every object type also accepts unknown keys.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The eudi-dev release this package is written and tested against.
3
+ *
4
+ * The `--json` documents only gain fields within a major version (upstream
5
+ * ADR 0020), so any v3.x binary works. A different major version is refused
6
+ * unless `allowAnyVersion` is set.
7
+ */
8
+ export declare const EUDI_DEV_VERSION = "v3.10.1";
9
+ /** The upstream major version whose JSON contract the types describe. */
10
+ export declare const SUPPORTED_MAJOR = 3;
11
+ /** GitHub repository that publishes the release binaries. */
12
+ export declare const UPSTREAM_REPO = "eudi-dev/eudi-dev";
13
+ /**
14
+ * Parses a version tag such as `v3.10.1` or `v3.0.0-beta.1`. Returns
15
+ * `undefined` for `dev` builds and anything else that isn't semver-like.
16
+ */
17
+ export declare function parseVersion(tag: string): {
18
+ major: number;
19
+ minor: number;
20
+ patch: number;
21
+ prerelease?: string;
22
+ } | undefined;
23
+ /** Normalises `3.10.1` to `v3.10.1`. */
24
+ export declare function normaliseTag(version: string): string;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * The eudi-dev release this package is written and tested against.
3
+ *
4
+ * The `--json` documents only gain fields within a major version (upstream
5
+ * ADR 0020), so any v3.x binary works. A different major version is refused
6
+ * unless `allowAnyVersion` is set.
7
+ */
8
+ export const EUDI_DEV_VERSION = 'v3.10.1';
9
+ /** The upstream major version whose JSON contract the types describe. */
10
+ export const SUPPORTED_MAJOR = 3;
11
+ /** GitHub repository that publishes the release binaries. */
12
+ export const UPSTREAM_REPO = 'eudi-dev/eudi-dev';
13
+ /**
14
+ * Parses a version tag such as `v3.10.1` or `v3.0.0-beta.1`. Returns
15
+ * `undefined` for `dev` builds and anything else that isn't semver-like.
16
+ */
17
+ export function parseVersion(tag) {
18
+ const m = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(tag.trim());
19
+ if (!m)
20
+ return undefined;
21
+ const result = {
22
+ major: Number(m[1]),
23
+ minor: Number(m[2]),
24
+ patch: Number(m[3]),
25
+ };
26
+ if (m[4] !== undefined)
27
+ result.prerelease = m[4];
28
+ return result;
29
+ }
30
+ /** Normalises `3.10.1` to `v3.10.1`. */
31
+ export function normaliseTag(version) {
32
+ const v = version.trim();
33
+ return v.startsWith('v') ? v : `v${v}`;
34
+ }
35
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAE1C,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,CAAC,GAAG,+CAA+C,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,MAAM,MAAM,GAAyE;QACnF,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACpB,CAAC;IACF,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACzB,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACzC,CAAC"}