@gerege-systems/eid-mongolia-sdk 0.9.1 → 0.11.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.
- package/README.md +82 -5
- package/dist/{browser-B_XtyuFG.d.cts → browser-BVR6gtrx.d.cts} +115 -5
- package/dist/{browser-B_XtyuFG.d.ts → browser-BVR6gtrx.d.ts} +115 -5
- package/dist/browser.d.cts +1 -1
- package/dist/browser.d.ts +1 -1
- package/dist/browser.js +1 -1
- package/dist/{chunk-NXDKQZIW.js → chunk-QPJDZLHR.js} +81 -2
- package/dist/index.cjs +785 -63
- package/dist/index.d.cts +402 -8
- package/dist/index.d.ts +402 -8
- package/dist/index.js +696 -57
- package/package.json +3 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as RpCredentials, C as CertificateLevel, I as Interaction, S as SignatureAlgorithm, H as HashAlgorithm, N as NotificationSession, D as DeviceLinkSession, a as SessionResult, P as
|
|
2
|
-
export {
|
|
1
|
+
import { R as RpCredentials, C as CertificateLevel, I as Interaction, S as SignatureAlgorithm, H as HashAlgorithm, N as NotificationSession, D as DeviceLinkSession, a as SessionResult, P as PersonBlock, b as PdfSessionBlock, c as RepresentationsResponse, A as AcspContext, F as FlowType, E as EidError } from './browser-BVR6gtrx.cjs';
|
|
2
|
+
export { d as ApiError, e as AuthenticationError, f as DeviceLinkError, g as DeviceLinkInput, h as EndResult, i as ForbiddenError, j as HttpErrorInit, k as NavigatorLike, l as NetworkError, O as ON_BEHALF_ERROR_CODES, m as OnBehalfErrorCode, n as OpenOrShowQROptions, o as OrgResult, p as PdfDocumentStatus, q as PdfSigner, r as RETRYABLE_ERROR_CODES, s as Representation, t as ResponseTooLargeError, u as RetryableErrorCode, v as SessionFailedError, w as SessionState, x as SignatureAlgorithmParameters, y as SignatureProtocol, T as TokenCertSessionBlock, z as TokenCertStatus, V as ValidationError, B as deviceLink, G as isMobileUserAgent, J as openOrShowQR, K as parseRetryAfter } from './browser-BVR6gtrx.cjs';
|
|
3
3
|
import { X509Certificate, KeyObject } from 'node:crypto';
|
|
4
4
|
|
|
5
5
|
interface HttpConfig {
|
|
@@ -25,8 +25,8 @@ declare class Http {
|
|
|
25
25
|
get(path: string, timeoutMs?: number): Promise<unknown>;
|
|
26
26
|
/** multipart/form-data POST (Content-Type-ийг boundary-тай нь fetch тавина). JSON хариу. */
|
|
27
27
|
postMultipart(path: string, form: FormData, timeoutMs?: number): Promise<unknown>;
|
|
28
|
-
/** GET — хариуг байтаар (ж: гарын үсэгтэй PDF). */
|
|
29
|
-
getBytes(path: string, timeoutMs?: number): Promise<Uint8Array>;
|
|
28
|
+
/** GET — хариуг байтаар (ж: гарын үсэгтэй PDF), `maxBytes` хүртэл; хэтэрвэл {@link ResponseTooLargeError}. */
|
|
29
|
+
getBytes(path: string, timeoutMs?: number, maxBytes?: number): Promise<Uint8Array>;
|
|
30
30
|
private json;
|
|
31
31
|
private send;
|
|
32
32
|
}
|
|
@@ -100,6 +100,11 @@ interface SignOptions {
|
|
|
100
100
|
* өөрөө иргэний PIN2 гэрчилгээгээр — байгууллага нь digest-д ОРОХГҮЙ.
|
|
101
101
|
*/
|
|
102
102
|
onBehalfOf?: string;
|
|
103
|
+
/**
|
|
104
|
+
* Гарын үсэг зурагдах баримтын нэр — CA-ийн /verify хуудас ба иргэний түүхэнд харагдана. Заавал биш: өгөөгүй бол CA
|
|
105
|
+
* interaction текстээс таамаглана.
|
|
106
|
+
*/
|
|
107
|
+
fileName?: string;
|
|
103
108
|
}
|
|
104
109
|
declare class SignApi {
|
|
105
110
|
private readonly http;
|
|
@@ -121,6 +126,14 @@ declare class SignApi {
|
|
|
121
126
|
|
|
122
127
|
/** RP-API-ийн session JSON-ийг SessionResult болгон задална (rpclient.ts-тэй ижил mapping). */
|
|
123
128
|
declare function parseSessionResult(raw: unknown): SessionResult;
|
|
129
|
+
/**
|
|
130
|
+
* Person блокийн `civilId` нь баталгаажсан гэрчилгээний SERIALNUMBER-тэй (`PNOMN-<civilId>`) таарах эсэх — хоёулаа
|
|
131
|
+
* хоосон биш байх ёстой. Person блок гарын үсэгт ордоггүй тул RP үүнийг validateAuth-ийн дараа шалгаж байж нэр /
|
|
132
|
+
* төрсөн огноонд итгэнэ. `subject` — validateAuth-ийн `parsedSubject` (эсвэл түүний `serialNumber`).
|
|
133
|
+
*/
|
|
134
|
+
declare function personMatchesCertificate(person: PersonBlock | null | undefined, subject: {
|
|
135
|
+
serialNumber?: string;
|
|
136
|
+
} | string | null | undefined): boolean;
|
|
124
137
|
declare class SessionApi {
|
|
125
138
|
private readonly http;
|
|
126
139
|
constructor(http: Http);
|
|
@@ -138,7 +151,19 @@ declare class SessionApi {
|
|
|
138
151
|
|
|
139
152
|
interface PdfDefaults {
|
|
140
153
|
certificateLevel: CertificateLevel;
|
|
154
|
+
/** prepare / document дуудлагын хугацаа (мс); анхдагч {@link DEFAULT_PDF_TIMEOUT_MS}. */
|
|
155
|
+
timeoutMs?: number;
|
|
156
|
+
/** document / tokenDocument-ийн санах ойд унших дээд хэмжээ (байт); анхдагч {@link DEFAULT_PDF_MAX_BYTES}. */
|
|
157
|
+
maxBytes?: number;
|
|
141
158
|
}
|
|
159
|
+
/** Гарын үсэгтэй PDF татахад санах ойд уншиж болох анхдагч дээд хэмжээ (64 MiB) — `ClientConfig.pdfMaxBytes`. */
|
|
160
|
+
declare const DEFAULT_PDF_MAX_BYTES: number;
|
|
161
|
+
/**
|
|
162
|
+
* PAdES prepare / баримт татах нэг дуудлагын анхдагч хугацаа (мс). CA prepare нь ≤ 10 MiB уншиж, өмнөх гарын үсэг +
|
|
163
|
+
* LTV өгөгдөл шалгаад push эхлүүлдэг; баримт татахад угсралтыг ≤ 30с хүлээдэг (PADES_SIGNING §3.4). 80с нь хоёуланд
|
|
164
|
+
* хүрэлцэнэ, CA-ийн nginx proxy_read_timeout-оос бага.
|
|
165
|
+
*/
|
|
166
|
+
declare const DEFAULT_PDF_TIMEOUT_MS = 80000;
|
|
142
167
|
/** Гарын үсэг зурагч — яг нэг нь. */
|
|
143
168
|
type PdfSignerRef = {
|
|
144
169
|
etsi: string;
|
|
@@ -188,18 +213,74 @@ interface PdfPrepareSession {
|
|
|
188
213
|
/** SDK хариу хүлээн авсан мөч (ms epoch) — QR-ийн `receivedAt` ({@link buildDeviceLink}). */
|
|
189
214
|
receivedAt: number;
|
|
190
215
|
}
|
|
216
|
+
/** USB токены PAdES — POST /pdf/token/prepare-ийн оролт. */
|
|
217
|
+
interface PdfTokenPrepareInput {
|
|
218
|
+
/** Эх PDF (≤ 10 223 616 байт). */
|
|
219
|
+
pdf: Uint8Array;
|
|
220
|
+
/** Баримтын нэр (≤ 120 тэмдэгт, заавал). */
|
|
221
|
+
fileName: string;
|
|
222
|
+
/** Иргэний ETSI (`PNOMN-…`) — токены гэрчилгээний SERIALNUMBER-тэй таарна. */
|
|
223
|
+
signerEtsi: string;
|
|
224
|
+
/** Токены SIGN гэрчилгээ (DER): eID Mongolia Issuing CA-аас, ACTIVE токенд холбогдсон. */
|
|
225
|
+
certificate: Uint8Array;
|
|
226
|
+
/** Олон гарын үсэгтэй баримтын docID (заавал биш, UUID). */
|
|
227
|
+
docID?: string;
|
|
228
|
+
/** Байгууллагын токенд ЗААВАЛ тухайн байгууллага (`NTRMN-…`); хувийн токенд хоосон. Зөрвөл 403 TOKEN_ORG_MISMATCH. */
|
|
229
|
+
onBehalfOf?: string;
|
|
230
|
+
}
|
|
231
|
+
/** POST /pdf/token/prepare-ийн хариу. */
|
|
232
|
+
interface PdfTokenPrepareSession {
|
|
233
|
+
signingId: string;
|
|
234
|
+
docId: string;
|
|
235
|
+
/** Токеноор зурах 32 байт (SHA-256 DTBS): CKM_ECDSA (prehashed) → түүхий r||s (64 байт). */
|
|
236
|
+
hashToSign: Uint8Array;
|
|
237
|
+
hashAlgorithm: string;
|
|
238
|
+
signatureAlgorithm: string;
|
|
239
|
+
/** "RAW_RS". */
|
|
240
|
+
signatureFormat: string;
|
|
241
|
+
/** tokenFinalize-ийн эцсийн хугацаа (prepare-ээс 10 мин), ISO-8601. */
|
|
242
|
+
expiresAt: string;
|
|
243
|
+
raw: unknown;
|
|
244
|
+
}
|
|
191
245
|
declare class PdfApi {
|
|
192
246
|
private readonly http;
|
|
193
247
|
private readonly creds;
|
|
194
248
|
private readonly defaults;
|
|
195
249
|
constructor(http: Http, creds: RpCredentials, defaults: PdfDefaults);
|
|
196
|
-
/**
|
|
250
|
+
/**
|
|
251
|
+
* POST /pdf/sign/prepare — multipart (`request` JSON + `pdf`). SIGN эрх шаардана. Түр алдаа: `ApiError` 429
|
|
252
|
+
* PDF_PREPARE_BUSY, 503 LTV_UNAVAILABLE / TSA_UNAVAILABLE — `retryAfterMs`-ийн дараа дахин (`retryable`).
|
|
253
|
+
*/
|
|
197
254
|
prepare(input: PdfPrepareInput): Promise<PdfPrepareSession>;
|
|
198
255
|
/**
|
|
199
256
|
* GET /pdf/sign/{sessionID}/document — гарын үсэгтэй PDF (READY-ээс хойш 30 мин). Татсан байтын SHA-256-ийг
|
|
200
|
-
* session-ий `pdf.outSha256`-тай тулга. Эрх хасагдсан бол `ForbiddenError` `.code = "REPRESENTATION_REVOKED"`.
|
|
257
|
+
* session-ий `pdf.outSha256`-тай тулга. Эрх хасагдсан бол `ForbiddenError` `.code = "REPRESENTATION_REVOKED"`. Баримт
|
|
258
|
+
* бэлэн болоогүй бол `ApiError` 503 `.code` DOCUMENT_PENDING / TSA_UNAVAILABLE / LTV_UNAVAILABLE — `retryAfterMs`-ийн
|
|
259
|
+
* дараа дахин татна (`retryable`).
|
|
201
260
|
*/
|
|
202
261
|
document(sessionId: string): Promise<Uint8Array>;
|
|
262
|
+
private get timeout();
|
|
263
|
+
private get maxBytes();
|
|
264
|
+
/**
|
|
265
|
+
* USB токены PAdES (CA docs/PADES_SIGNING.md §16.5, TOKEN_CERT.md) — session / утас оролцохгүй. POST /pdf/token/prepare
|
|
266
|
+
* (multipart: `request` JSON + `pdf`), SIGN эрх. Дараа нь токеноор `hashToSign`-ийг CKM_ECDSA (prehashed, P-256)-аар
|
|
267
|
+
* зурж {@link tokenFinalize}. Түр алдаа: `ApiError` 429 PDF_PREPARE_BUSY / RATE_LIMITED, 503 TSA_UNAVAILABLE /
|
|
268
|
+
* LTV_UNAVAILABLE / STATE_UNAVAILABLE (`retryable`). Гэрчилгээ токенд холбогдоогүй / цуцлагдсан → 409
|
|
269
|
+
* TOKEN_CERT_INVALID. Зам нь CA-д бий ч `/.well-known/eid`-д хараахан алга (гэрээний тест WARN).
|
|
270
|
+
*/
|
|
271
|
+
tokenPrepare(input: PdfTokenPrepareInput): Promise<PdfTokenPrepareSession>;
|
|
272
|
+
/**
|
|
273
|
+
* POST /pdf/token/{signingID}/finalize `{signature: base64 түүхий r||s}` — `signature` 64 байт (P-256 r||s, DER БИШ).
|
|
274
|
+
* Амжвал READY баримтын блок (`outSha256` — {@link tokenDocument}-оор татсан файлтай тулга). READY-ээс хойш идэмпотент.
|
|
275
|
+
* Алдаа: 400 SIGNATURE_INVALID (3 удаа → FAILED), 409 DOCUMENT_FAILED, 410 DOCUMENT_EXPIRED, 503 DOCUMENT_PENDING /
|
|
276
|
+
* TSA_UNAVAILABLE / LTV_UNAVAILABLE — ижил гарын үсгийг `retryAfterMs`-ийн дараа дахин илгээнэ.
|
|
277
|
+
*/
|
|
278
|
+
tokenFinalize(signingId: string, signature: Uint8Array): Promise<PdfSessionBlock>;
|
|
279
|
+
/**
|
|
280
|
+
* GET /pdf/token/{signingID}/document — гарын үсэгтэй PDF (зөвхөн үүсгэсэн RP, expiresAt хүртэл), `pdfMaxBytes`
|
|
281
|
+
* хүртэл. SHA-256-ийг {@link tokenFinalize}-ийн `outSha256`-тай заавал тулга.
|
|
282
|
+
*/
|
|
283
|
+
tokenDocument(signingId: string): Promise<Uint8Array>;
|
|
203
284
|
/**
|
|
204
285
|
* {@link document} + тулгалт: татсан байтын SHA-256 нь session poll-ийн `pdf.outSha256`-тай тэнцүү байх ёстой.
|
|
205
286
|
* `expected` — poll-ийн `result.pdf` блок (`documentStatus` READY + `outSha256` заавал) эсвэл SHA-256 hex.
|
|
@@ -216,6 +297,264 @@ declare class OrganizationApi {
|
|
|
216
297
|
getRepresentations(personEtsi: string): Promise<RepresentationsResponse>;
|
|
217
298
|
}
|
|
218
299
|
|
|
300
|
+
/** Токенд холбогдсон байгууллага. */
|
|
301
|
+
interface TokenOrganization {
|
|
302
|
+
etsi: string;
|
|
303
|
+
name: string;
|
|
304
|
+
}
|
|
305
|
+
/** Иргэний нэг гэрчилгээ. */
|
|
306
|
+
interface PersonCertificate {
|
|
307
|
+
documentNumber: string;
|
|
308
|
+
/** AUTH | SIGN | SEAL. */
|
|
309
|
+
type: string;
|
|
310
|
+
/** MOBILE | TOKEN | HSM. */
|
|
311
|
+
keyMedium: string;
|
|
312
|
+
serialNumber: string;
|
|
313
|
+
certificateLevel: string;
|
|
314
|
+
/** VALID | REVOKED | EXPIRED | SUSPENDED. */
|
|
315
|
+
status: string;
|
|
316
|
+
/** RFC 3339. */
|
|
317
|
+
notBefore: string;
|
|
318
|
+
notAfter: string;
|
|
319
|
+
issuerDn: string;
|
|
320
|
+
/** base64 DER (нийтийн артефакт). */
|
|
321
|
+
certValue?: string;
|
|
322
|
+
/** TOKEN мөрөнд токенд холбогдсон байгууллага; хувийн токенд алга. */
|
|
323
|
+
organization?: TokenOrganization;
|
|
324
|
+
}
|
|
325
|
+
interface CertCounts {
|
|
326
|
+
valid: number;
|
|
327
|
+
revoked: number;
|
|
328
|
+
expired: number;
|
|
329
|
+
suspended: number;
|
|
330
|
+
total: number;
|
|
331
|
+
}
|
|
332
|
+
/** GET /certificates/etsi/{personEtsi}. */
|
|
333
|
+
interface PersonCertificates {
|
|
334
|
+
personEtsi: string;
|
|
335
|
+
counts: CertCounts;
|
|
336
|
+
certificates: PersonCertificate[];
|
|
337
|
+
raw: unknown;
|
|
338
|
+
}
|
|
339
|
+
interface PersonDevice {
|
|
340
|
+
deviceId?: string;
|
|
341
|
+
documentNumber: string;
|
|
342
|
+
/** APNS | FCM. */
|
|
343
|
+
platform?: string;
|
|
344
|
+
pushTopic?: string;
|
|
345
|
+
enrolledAt: string;
|
|
346
|
+
active: boolean;
|
|
347
|
+
deactivatedAt?: string | null;
|
|
348
|
+
}
|
|
349
|
+
/** GET /devices/etsi/{personEtsi}. */
|
|
350
|
+
interface PersonDevices {
|
|
351
|
+
personEtsi: string;
|
|
352
|
+
devices: PersonDevice[];
|
|
353
|
+
activeCount: number;
|
|
354
|
+
total: number;
|
|
355
|
+
raw: unknown;
|
|
356
|
+
}
|
|
357
|
+
/** Үйл ажиллагааны нэг бичлэг (kind/reason: EID_PERSON_PKI §Activity kind/reason; шинэ код нэмэгдэж болно). */
|
|
358
|
+
interface ActivityItem {
|
|
359
|
+
id?: string;
|
|
360
|
+
sessionId?: string;
|
|
361
|
+
/** AUTH | SIGN | PIN_CHECK | ENROLL | TOKEN_AUTH | … */
|
|
362
|
+
kind: string;
|
|
363
|
+
/** AUTHENTICATION | SIGNATURE (зөвхөн AUTH/SIGN). */
|
|
364
|
+
flow?: string;
|
|
365
|
+
/** OK | DENIED | FAILED. */
|
|
366
|
+
outcome: string;
|
|
367
|
+
reason?: string;
|
|
368
|
+
pinSlot?: string;
|
|
369
|
+
endResult?: string;
|
|
370
|
+
rpName?: string;
|
|
371
|
+
subsystemName?: string;
|
|
372
|
+
docText?: string;
|
|
373
|
+
interactionType?: string;
|
|
374
|
+
documentNumber?: string;
|
|
375
|
+
clientIp?: string;
|
|
376
|
+
timestamp: string;
|
|
377
|
+
onBehalfOfName?: string;
|
|
378
|
+
}
|
|
379
|
+
interface ActivityCounts {
|
|
380
|
+
authentication: number;
|
|
381
|
+
signature: number;
|
|
382
|
+
}
|
|
383
|
+
/** GET /rp/activity/etsi/{personEtsi} (RP-scoped; eID портал — бүрэн түүх). */
|
|
384
|
+
interface PersonActivity {
|
|
385
|
+
personEtsi: string;
|
|
386
|
+
counts: ActivityCounts;
|
|
387
|
+
sessions: ActivityItem[];
|
|
388
|
+
total: number;
|
|
389
|
+
limit: number;
|
|
390
|
+
offset: number;
|
|
391
|
+
raw: unknown;
|
|
392
|
+
}
|
|
393
|
+
/** activity-ийн шүүлт. Өгөөгүй = серверийн анхдагч (limit 20, offset 0, бүх flow). */
|
|
394
|
+
interface ActivityQuery {
|
|
395
|
+
flow?: "AUTHENTICATION" | "SIGNATURE";
|
|
396
|
+
/** 1–200. */
|
|
397
|
+
limit?: number;
|
|
398
|
+
offset?: number;
|
|
399
|
+
}
|
|
400
|
+
/** GET /person/summary/etsi/{personEtsi}. `lastName` = ЭЦГИЙН нэр, `familyName` = УРГИЙН овог. */
|
|
401
|
+
interface PersonSummary {
|
|
402
|
+
personEtsi: string;
|
|
403
|
+
firstName?: string;
|
|
404
|
+
lastName?: string;
|
|
405
|
+
familyName?: string;
|
|
406
|
+
certificates: CertCounts;
|
|
407
|
+
activity: ActivityCounts;
|
|
408
|
+
devicesActive: number;
|
|
409
|
+
devicesTotal: number;
|
|
410
|
+
representationCount: number;
|
|
411
|
+
raw: unknown;
|
|
412
|
+
}
|
|
413
|
+
interface PersonChild {
|
|
414
|
+
etsi: string;
|
|
415
|
+
regNo: string;
|
|
416
|
+
/** «Овог Нэр». */
|
|
417
|
+
name: string;
|
|
418
|
+
/** YYYY-MM-DD. */
|
|
419
|
+
birthDate?: string;
|
|
420
|
+
registered: boolean;
|
|
421
|
+
/** 18 нас хүрэх өдөр; бүртгэлгүй бол алга. */
|
|
422
|
+
certNotAfter?: string;
|
|
423
|
+
}
|
|
424
|
+
/** GET /person/children/etsi/{personEtsi}. */
|
|
425
|
+
interface PersonChildren {
|
|
426
|
+
children: PersonChild[];
|
|
427
|
+
raw: unknown;
|
|
428
|
+
}
|
|
429
|
+
declare class PersonApi {
|
|
430
|
+
private readonly http;
|
|
431
|
+
constructor(http: Http);
|
|
432
|
+
private get;
|
|
433
|
+
/** Иргэний бүх гэрчилгээ + статусын тоолол. */
|
|
434
|
+
certificates(personEtsi: string): Promise<PersonCertificates>;
|
|
435
|
+
/** Иргэний холбоотой төхөөрөмжүүд (идэвхтэй + идэвхгүй). */
|
|
436
|
+
devices(personEtsi: string): Promise<PersonDevices>;
|
|
437
|
+
/** Иргэний үйл ажиллагааны түүх. */
|
|
438
|
+
activity(personEtsi: string, query?: ActivityQuery): Promise<PersonActivity>;
|
|
439
|
+
/** Самбарын нэгдсэн тоо. */
|
|
440
|
+
summary(personEtsi: string): Promise<PersonSummary>;
|
|
441
|
+
/** Асран хамгаалж буй хүүхдүүд (зөвхөн унших). */
|
|
442
|
+
children(personEtsi: string): Promise<PersonChildren>;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
interface TokenCertInput {
|
|
446
|
+
/** Иргэн (PNOMN-…) — батлах push түүний утсанд очно. */
|
|
447
|
+
signerEtsi: string;
|
|
448
|
+
/** PKCS#10 DER (EC P-256, ecdsa-with-SHA256, өөр өөр түлхүүр, ≤ 4 KiB). */
|
|
449
|
+
csrAuth: Uint8Array;
|
|
450
|
+
csrSign: Uint8Array;
|
|
451
|
+
/** `[A-Za-z0-9-]{1,64}`. */
|
|
452
|
+
tokenSerial: string;
|
|
453
|
+
/** Заавал биш (≤ 64). */
|
|
454
|
+
tokenLabel?: string;
|
|
455
|
+
/** Байгууллагын токен (NTRMN-…); хоосон/алга = хувийн токен. */
|
|
456
|
+
onBehalfOf?: string;
|
|
457
|
+
}
|
|
458
|
+
interface TokenCertStart {
|
|
459
|
+
sessionId: string;
|
|
460
|
+
/** Иргэнд ХАРУУЛАХ баталгаажуулах код (ПИН биш). */
|
|
461
|
+
vc: string | null;
|
|
462
|
+
/** hex(SHA-256(CSR DER)) — SDK илгээсэн CSR-тэй тулгасан (жижиг үсэг). */
|
|
463
|
+
csrAuthSha256: string;
|
|
464
|
+
csrSignSha256: string;
|
|
465
|
+
expiresAt?: string;
|
|
466
|
+
}
|
|
467
|
+
interface TokenCertItem {
|
|
468
|
+
/** base64 DER. */
|
|
469
|
+
certificate: string;
|
|
470
|
+
certificatePem: string;
|
|
471
|
+
serialHex: string;
|
|
472
|
+
notBefore: string;
|
|
473
|
+
notAfter: string;
|
|
474
|
+
}
|
|
475
|
+
/** GET /token/certificate/{sessionID} (зөвхөн үүсгэсэн RP, 24 цаг идэмпотент). */
|
|
476
|
+
interface TokenCertResult {
|
|
477
|
+
status: string;
|
|
478
|
+
auth: TokenCertItem | null;
|
|
479
|
+
sign: TokenCertItem | null;
|
|
480
|
+
/** base64 DER: 04, 03, 02 (root-гүй). */
|
|
481
|
+
chain: string[];
|
|
482
|
+
chainPem: string;
|
|
483
|
+
/** Хувийн токенд null. */
|
|
484
|
+
organization: TokenOrganization | null;
|
|
485
|
+
keyMedium: string;
|
|
486
|
+
certificateLevel: string;
|
|
487
|
+
raw: unknown;
|
|
488
|
+
}
|
|
489
|
+
interface TokenAuthChallenge {
|
|
490
|
+
challengeId: string;
|
|
491
|
+
/** base64 (32 байт). */
|
|
492
|
+
challenge: string;
|
|
493
|
+
/** CA-ийн холбосон RP (жижиг үсэг) — hash-д ЯГ ЭНЭ мөр орно. */
|
|
494
|
+
rpUUID: string;
|
|
495
|
+
expiresAt: string;
|
|
496
|
+
}
|
|
497
|
+
/** CA-ийн баталгаажуулсан иргэн; givenName/surname — KYC бүртгэлээс (кирилл). */
|
|
498
|
+
interface TokenIdentity {
|
|
499
|
+
etsi: string;
|
|
500
|
+
givenName: string;
|
|
501
|
+
surname: string;
|
|
502
|
+
}
|
|
503
|
+
interface TokenAuthResult {
|
|
504
|
+
identity: TokenIdentity;
|
|
505
|
+
serialHex: string;
|
|
506
|
+
notAfter: string;
|
|
507
|
+
/** Токен байгууллагад холбогдсон бол; эс бөгөөс null. */
|
|
508
|
+
organization: TokenOrganization | null;
|
|
509
|
+
raw: unknown;
|
|
510
|
+
}
|
|
511
|
+
/** 409 TOKEN_LIMIT_REACHED-ийн дэлгэрэнгүй. `limit` 0 = тухайн төрлийн олголт хаалттай. */
|
|
512
|
+
interface TokenLimit {
|
|
513
|
+
kind: "PERSONAL" | "ORGANIZATION";
|
|
514
|
+
limit: number;
|
|
515
|
+
/** Зөвхөн ORGANIZATION-д (NTRMN-…). */
|
|
516
|
+
organization?: string;
|
|
517
|
+
}
|
|
518
|
+
declare class TokenApi {
|
|
519
|
+
private readonly http;
|
|
520
|
+
private readonly creds;
|
|
521
|
+
constructor(http: Http, creds: RpCredentials);
|
|
522
|
+
/**
|
|
523
|
+
* POST /token/certificate — токены AUTH + SIGN гэрчилгээ олголт эхлүүлнэ (иргэн утсаараа батална). CA-ийн буцаасан
|
|
524
|
+
* CSR hash-ууд илгээсэнтэй таарахгүй бол ValidationError.
|
|
525
|
+
*/
|
|
526
|
+
issueCertificate(input: TokenCertInput): Promise<TokenCertStart>;
|
|
527
|
+
/**
|
|
528
|
+
* GET /token/certificate/{sessionID} — олгосон AUTH + SIGN гэрчилгээ + гинж. Токенд бичихээс өмнө
|
|
529
|
+
* {@link verifyTokenCertificates}-ээр CSR-ийн түлхүүртэй тулга.
|
|
530
|
+
*/
|
|
531
|
+
certificateResult(sessionId: string): Promise<TokenCertResult>;
|
|
532
|
+
/** POST /token/auth/challenge — энэ RP-д холбогдсон нэг удаагийн challenge (2 мин). */
|
|
533
|
+
authChallenge(): Promise<TokenAuthChallenge>;
|
|
534
|
+
/**
|
|
535
|
+
* POST /token/auth/verify — токены AUTH гэрчилгээ (DER) + challenge дээрх түүхий r||s. CA гинж, төлөв, цуцлалт, гарын
|
|
536
|
+
* үсгийг шалгана; SDK нэмж endResult === OK ба identity.etsi === гэрчилгээний SERIALNUMBER-ийг тулгана (эс бөгөөс
|
|
537
|
+
* ValidationError). Challenge нэг удаагийн — алдааны дараа шинээр авна.
|
|
538
|
+
*/
|
|
539
|
+
authVerify(challengeId: string, certDer: Uint8Array, signature: Uint8Array): Promise<TokenAuthResult>;
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Олгосон AUTH/SIGN гэрчилгээ бүр задарч, илгээсэн CSR-ийн public key-тэй (SPKI) ЯГ таарахыг шалгана. Таарахгүй бол
|
|
543
|
+
* ValidationError — гэрчилгээг токенд бүү бич.
|
|
544
|
+
*/
|
|
545
|
+
declare function verifyTokenCertificates(result: TokenCertResult, csrAuth: Uint8Array, csrSign: Uint8Array): void;
|
|
546
|
+
/**
|
|
547
|
+
* Токены зурах 32 байт: SHA-256("eID-TOKEN-AUTH" || rpUUID || challenge) (docs/TOKEN_AUTH.md). `rpUUID` — challenge
|
|
548
|
+
* хариуны `rpUUID` (жижиг үсэг, 36), `challengeB64` — 32 байт base64. Токен үүнийг CKM_ECDSA-аар зурж, түүхий r||s
|
|
549
|
+
* (64 байт)-ийг authVerify-д өгнө.
|
|
550
|
+
*/
|
|
551
|
+
declare function tokenAuthDigest(rpUUID: string, challengeB64: string): Buffer;
|
|
552
|
+
/**
|
|
553
|
+
* err нь 409 TOKEN_LIMIT_REACHED бол түүний `{kind, limit, organization}`. Гэрээнээс гадуур хэлбэр бол undefined —
|
|
554
|
+
* татгалзал хүчинтэй хэвээр, дэлгэрэнгүйгүй.
|
|
555
|
+
*/
|
|
556
|
+
declare function tokenLimitOf(err: unknown): TokenLimit | undefined;
|
|
557
|
+
|
|
219
558
|
/** Задалсан subject. Cert-д байхгүй талбар — undefined. Давхардсан OID-ийн эхнийх нь. */
|
|
220
559
|
interface CertSubject {
|
|
221
560
|
/** 2.5.4.42 GIVENNAME. */
|
|
@@ -291,6 +630,16 @@ interface ValidateSignOptions {
|
|
|
291
630
|
* хэрэгжүүлнэ. "good" = хүчинтэй, "revoked" = цуцлагдсан, "unknown" = тогтоогдсонгүй.
|
|
292
631
|
*/
|
|
293
632
|
type RevocationStatus = "good" | "revoked" | "unknown";
|
|
633
|
+
/**
|
|
634
|
+
* {@link ResponseValidator.checkRevocationStatus}-ийн амжилттай дүн: "good" — issuer хүчинтэй гэж хариулсан;
|
|
635
|
+
* "unchecked" — "unknown", soft-fail горимд зөвшөөрөв; "skipped" — revocation hook тохируулаагүй.
|
|
636
|
+
*/
|
|
637
|
+
type RevocationOutcome = "good" | "unchecked" | "skipped";
|
|
638
|
+
/**
|
|
639
|
+
* eID Mongolia Issuing CA (04)-ийн Subject Key Identifier — иргэний утасны болон USB токены AUTH/SIGN гэрчилгээг
|
|
640
|
+
* гаргадаг цорын ганц CA. `TrustConfig.allowedIssuerSkis`-д.
|
|
641
|
+
*/
|
|
642
|
+
declare const CITIZEN_ISSUING_CA_SKI = "b8a37f2c64ad677912db7d9e34f246358a2fb909";
|
|
294
643
|
type RevocationChecker = (cert: X509Certificate, issuer: X509Certificate | undefined) => Promise<RevocationStatus>;
|
|
295
644
|
interface TrustConfig {
|
|
296
645
|
/**
|
|
@@ -320,6 +669,19 @@ interface TrustConfig {
|
|
|
320
669
|
* revocation тохируулсан үед); "soft-fail" — "unknown"-г зөвшөөрнө.
|
|
321
670
|
*/
|
|
322
671
|
revocationMode?: "hard-fail" | "soft-fail";
|
|
672
|
+
/**
|
|
673
|
+
* Иргэний гэрчилгээг шууд гаргасан CA-ийн Subject Key Identifier (hex, ":" зөвшөөрнө) жагсаалт. Хоосон/алга бол trust
|
|
674
|
+
* anchor хүртэл гинжлэгдсэн дурын CA зөвшөөрөгдөнө (хуучин зан). Ижил root-ийн доорх өөр CA (ж: байгууллагын Issuing
|
|
675
|
+
* CA) иргэний гэрчилгээ гаргахаас хамгаалахад: `[CITIZEN_ISSUING_CA_SKI]`.
|
|
676
|
+
*/
|
|
677
|
+
allowedIssuerSkis?: string[];
|
|
678
|
+
/**
|
|
679
|
+
* true бол гэрчилгээний зориулалтыг CA-ийн профайлаар шалгана: auth → KeyUsage digitalSignature + ExtKeyUsage
|
|
680
|
+
* clientAuth (P-CITIZEN-AUTH); sign → KeyUsage contentCommitment / nonRepudiation (P-CITIZEN-SIGN). Анхдагч false.
|
|
681
|
+
*/
|
|
682
|
+
checkKeyUsage?: boolean;
|
|
683
|
+
/** ACSP_V2 payload-ийн scheme нэр (CA-ийн `capabilities.acsp_scheme_name`); анхдагч "smart-id". */
|
|
684
|
+
schemeName?: string;
|
|
323
685
|
}
|
|
324
686
|
/** Баталгаажсан иргэний таних мэдээлэл (auth). */
|
|
325
687
|
interface VerifiedIdentity {
|
|
@@ -350,6 +712,9 @@ declare class ResponseValidator {
|
|
|
350
712
|
private readonly allowUntrusted;
|
|
351
713
|
private readonly revocation?;
|
|
352
714
|
private readonly revocationMode;
|
|
715
|
+
private readonly allowedIssuers?;
|
|
716
|
+
private readonly checkKeyUsage;
|
|
717
|
+
private readonly schemeName?;
|
|
353
718
|
constructor(trust?: TrustConfig);
|
|
354
719
|
/**
|
|
355
720
|
* Auth session-ийн хариуг бүрэн шалгаж, баталгаажсан иргэнийг буцаана.
|
|
@@ -377,9 +742,24 @@ declare class ResponseValidator {
|
|
|
377
742
|
private algorithmOf;
|
|
378
743
|
/** state/endResult, cert байгаа эсэх, chain, validity, certLevel — нийтлэг шалгалт. */
|
|
379
744
|
private precheck;
|
|
745
|
+
/**
|
|
746
|
+
* checkKeyUsage үед гэрчилгээний зориулалт протоколд тохирох эсэх (CA crypto/ca_profile.go): ACSP_V2 (auth) → KU
|
|
747
|
+
* digitalSignature + EKU clientAuth (эсвэл anyExtendedKeyUsage); RAW_DIGEST_SIGNATURE (sign) → KU contentCommitment.
|
|
748
|
+
*/
|
|
749
|
+
private checkPurpose;
|
|
750
|
+
/** allowedIssuerSkis үед leaf-ийн шууд issuer-ийн SKI (issuer-т алга бол leaf-ийн AKI) жагсаалтад байх ёстой. */
|
|
751
|
+
private checkIssuer;
|
|
380
752
|
private checkValidity;
|
|
381
753
|
private checkLevel;
|
|
382
|
-
/**
|
|
754
|
+
/**
|
|
755
|
+
* RFC 5280 замын шалгалт (Go SDK-ийн `x509.Certificate.Verify`-тэй ижил дүрэм): leaf-ээс trust anchor хүртэлх
|
|
756
|
+
* замыг intermediates/anchors-оос (backtracking-тай) угсарна. Issuer бүр: subject = child.issuer, AKI/SKI таарах,
|
|
757
|
+
* гарын үсэг, CA (basicConstraints CA:TRUE), KeyUsage тавьсан бол keyCertSign, **pathLenConstraint** (доорх
|
|
758
|
+
* завсрын CA-ийн тоо), хүчинтэй хугацаа, EKU тавьсан бол `usage` / anyExtendedKeyUsage агуулах. Leaf болон CA
|
|
759
|
+
* бүрийн үл таних **critical extension** → татгалзана. **Name constraints**-ийг SDK үнэлдэггүй — гинжинд байвал
|
|
760
|
+
* fail-closed (CA-ийн бодит гинж 01–04-т алга). Цаг = now, leaf-ийн хүчинтэй хугацаанд хавчсан (`clockSkewMs`-ийн
|
|
761
|
+
* хүрээнд; leaf-ийн хугацааг checkValidity шалгасан). certificatePolicies шалгахгүй (Go-той ижил).
|
|
762
|
+
*/
|
|
383
763
|
private verifyChain;
|
|
384
764
|
/** leaf-ийн шууд issuer-ийг trust pool-оос буцаана (revocation шалгагчид issuer хэрэгтэй). */
|
|
385
765
|
private findIssuer;
|
|
@@ -390,6 +770,11 @@ declare class ResponseValidator {
|
|
|
390
770
|
* дуудна (тэдгээр нь sync; revocation нь сүлжээ I/O тул async).
|
|
391
771
|
*/
|
|
392
772
|
checkRevocation(cert: X509Certificate): Promise<void>;
|
|
773
|
+
/**
|
|
774
|
+
* {@link checkRevocation} + юу шийдсэнийг буцаана (лог/аудитад): "good" | "unchecked" (unknown, soft-fail) |
|
|
775
|
+
* "skipped" (hook алга). "revoked", мөн hard-fail горимд "unknown" → ValidationError; hook-ийн алдаа дамжина.
|
|
776
|
+
*/
|
|
777
|
+
checkRevocationStatus(cert: X509Certificate): Promise<RevocationOutcome>;
|
|
393
778
|
}
|
|
394
779
|
/** Payload (auth) дээрх гарын үсэг — алгоритмаар салаалж node:crypto verify. */
|
|
395
780
|
/** Smart-ID: userChallenge = BASE64URL(SHA-256(UTF-8(userChallengeVerifier))), padding-гүй. */
|
|
@@ -410,6 +795,13 @@ interface ClientConfig {
|
|
|
410
795
|
defaultCertificateLevel?: CertificateLevel;
|
|
411
796
|
/** HTTP timeout (мс). */
|
|
412
797
|
timeoutMs?: number;
|
|
798
|
+
/** PAdES prepare / баримт татах дуудлагын хугацаа (мс). Анхдагч 80000 ({@link DEFAULT_PDF_TIMEOUT_MS}). */
|
|
799
|
+
pdfTimeoutMs?: number;
|
|
800
|
+
/**
|
|
801
|
+
* `pdf.document` / `pdf.tokenDocument`-ийн санах ойд унших дээд хэмжээ (байт). Анхдагч 64 MiB
|
|
802
|
+
* ({@link DEFAULT_PDF_MAX_BYTES}); хэтэрвэл `ResponseTooLargeError`.
|
|
803
|
+
*/
|
|
804
|
+
pdfMaxBytes?: number;
|
|
413
805
|
/** undici Dispatcher (mTLS client cert). */
|
|
414
806
|
dispatcher?: unknown;
|
|
415
807
|
/** fetch орлуулагч (тест). */
|
|
@@ -426,6 +818,8 @@ declare class EidClient {
|
|
|
426
818
|
readonly sign: SignApi;
|
|
427
819
|
readonly pdf: PdfApi;
|
|
428
820
|
readonly organization: OrganizationApi;
|
|
821
|
+
readonly person: PersonApi;
|
|
822
|
+
readonly token: TokenApi;
|
|
429
823
|
readonly session: SessionApi;
|
|
430
824
|
readonly validator: ResponseValidator;
|
|
431
825
|
constructor(cfg: ClientConfig);
|
|
@@ -663,4 +1057,4 @@ declare class EidOidcClient {
|
|
|
663
1057
|
/** PKCE S256: `BASE64URL(SHA-256(ASCII(code_verifier)))` (RFC 7636 §4.2). */
|
|
664
1058
|
declare function pkceChallenge(codeVerifier: string): Promise<string>;
|
|
665
1059
|
|
|
666
|
-
export { AcspContext, type AcspV2Params, AuthApi, type AuthDefaults, type AuthOptions, type BuildDeviceLinkInput, type CertSubject, CertificateLevel, type ClientConfig, type CreateAuthorizationOptions, DEFAULT_BASE_URL, DeviceLinkSession, type DeviceLinkSessionType, type DeviceLinkType, EID_ACR_ADVANCED, EID_ACR_QUALIFIED, EID_OIDC_ISSUER, type EidAuthorization, type EidCallbackChecks, type EidCallbackResult, EidClient, EidError, type EidIdTokenClaims, EidOidcClient, type EidOidcClientConfig, type EidOidcDiscovery, EidOidcError, type EidOidcErrorCode, FlowType, HashAlgorithm, Http, type HttpConfig, Interaction, NotificationSession, OrganizationApi, PdfApi, type PdfDefaults, type PdfPrepareInput, type PdfPrepareSession, PdfSessionBlock, type PdfSignerRef, type QrDeviceLinkTickerOptions, RepresentationsResponse, ResponseValidator, type RevocationChecker, type RevocationStatus, RpCredentials, SessionApi, SessionResult, SignApi, type SignDefaults, type SignOptions, SignatureAlgorithm, type TrustConfig, type ValidateAuthOptions, type ValidateSignOptions, type VerifiedIdentity, type VerifiedSignature, acspV2Digest, buildAcspV2Payload, buildDeviceLink, interactionsToBase64, parseSessionResult, parseSubject, pkceChallenge, qrDeviceLinkTicker, randomChallenge, resolveBaseUrl, sha256Base64, userChallengeOf, verifyPayloadSignature, verifyPrehashedSignature };
|
|
1060
|
+
export { AcspContext, type AcspV2Params, type ActivityCounts, type ActivityItem, type ActivityQuery, AuthApi, type AuthDefaults, type AuthOptions, type BuildDeviceLinkInput, CITIZEN_ISSUING_CA_SKI, type CertCounts, type CertSubject, CertificateLevel, type ClientConfig, type CreateAuthorizationOptions, DEFAULT_BASE_URL, DEFAULT_PDF_MAX_BYTES, DEFAULT_PDF_TIMEOUT_MS, DeviceLinkSession, type DeviceLinkSessionType, type DeviceLinkType, EID_ACR_ADVANCED, EID_ACR_QUALIFIED, EID_OIDC_ISSUER, type EidAuthorization, type EidCallbackChecks, type EidCallbackResult, EidClient, EidError, type EidIdTokenClaims, EidOidcClient, type EidOidcClientConfig, type EidOidcDiscovery, EidOidcError, type EidOidcErrorCode, FlowType, HashAlgorithm, Http, type HttpConfig, Interaction, NotificationSession, OrganizationApi, PdfApi, type PdfDefaults, type PdfPrepareInput, type PdfPrepareSession, PdfSessionBlock, type PdfSignerRef, type PdfTokenPrepareInput, type PdfTokenPrepareSession, type PersonActivity, PersonApi, PersonBlock, type PersonCertificate, type PersonCertificates, type PersonChild, type PersonChildren, type PersonDevice, type PersonDevices, type PersonSummary, type QrDeviceLinkTickerOptions, RepresentationsResponse, ResponseValidator, type RevocationChecker, type RevocationOutcome, type RevocationStatus, RpCredentials, SessionApi, SessionResult, SignApi, type SignDefaults, type SignOptions, SignatureAlgorithm, TokenApi, type TokenAuthChallenge, type TokenAuthResult, type TokenCertInput, type TokenCertItem, type TokenCertResult, type TokenCertStart, type TokenIdentity, type TokenLimit, type TokenOrganization, type TrustConfig, type ValidateAuthOptions, type ValidateSignOptions, type VerifiedIdentity, type VerifiedSignature, acspV2Digest, buildAcspV2Payload, buildDeviceLink, interactionsToBase64, parseSessionResult, parseSubject, personMatchesCertificate, pkceChallenge, qrDeviceLinkTicker, randomChallenge, resolveBaseUrl, sha256Base64, tokenAuthDigest, tokenLimitOf, userChallengeOf, verifyPayloadSignature, verifyPrehashedSignature, verifyTokenCertificates };
|