@gerege-systems/eid-mongolia-sdk 0.10.0 → 0.12.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 +25 -4
- package/dist/{browser-BWCDj8xO.d.cts → browser-B_xuB7Rt.d.cts} +24 -3
- package/dist/{browser-BWCDj8xO.d.ts → browser-B_xuB7Rt.d.ts} +24 -3
- package/dist/browser.d.cts +1 -1
- package/dist/browser.d.ts +1 -1
- package/dist/browser.js +1 -1
- package/dist/{chunk-YDVPZMAL.js → chunk-QPJDZLHR.js} +10 -0
- package/dist/index.cjs +252 -30
- package/dist/index.d.cts +81 -6
- package/dist/index.d.ts +81 -6
- package/dist/index.js +243 -31
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -218,7 +218,8 @@ import { ForbiddenError, ApiError, ON_BEHALF_ERROR_CODES } from "@gerege-systems
|
|
|
218
218
|
|
|
219
219
|
// 1. Иргэн сүүлийн 24 цагт танай RP-ээр нэвтэрсэн байх ёстой.
|
|
220
220
|
const { representations } = await eid.organization.getRepresentations("PNOMN-12345678");
|
|
221
|
-
// → [{ orgEtsi: "NTRMN-6235972", orgName: "Гэрэгэ Системс ХХК", role: "ceo",
|
|
221
|
+
// → [{ orgEtsi: "NTRMN-6235972", orgName: "Гэрэгэ Системс ХХК", role: "ceo", roleLabel: "Гүйцэтгэх захирал",
|
|
222
|
+
// rightType: "ADMIN", … }]
|
|
222
223
|
|
|
223
224
|
// 2. PDF (PAdES, CA угсарна) — санал болгох урсгал.
|
|
224
225
|
try {
|
|
@@ -254,10 +255,16 @@ try {
|
|
|
254
255
|
Түр алдаа — `ApiError.retryable` үнэн, `retryAfterMs`-ийн (CA-ийн `Retry-After`, секунд эсвэл огноо) дараа давтана:
|
|
255
256
|
prepare 429 `PDF_PREPARE_BUSY`, 503 `LTV_UNAVAILABLE` / `TSA_UNAVAILABLE`; document 503 `DOCUMENT_PENDING`,
|
|
256
257
|
`TSA_UNAVAILABLE`, `LTV_UNAVAILABLE` (`RETRYABLE_ERROR_CODES`). `headers` — хариуны header. PDF дуудлагын хугацаа
|
|
257
|
-
`pdfTimeoutMs` (анхдагч 80000).
|
|
258
|
+
`pdfTimeoutMs` (анхдагч 80000). `pdf.document` санах ойд `pdfMaxBytes` (анхдагч `DEFAULT_PDF_MAX_BYTES` = 64 MiB)
|
|
259
|
+
хүртэл уншина; хэтэрвэл `ResponseTooLargeError`. JSON хариу 4 MiB-ээс хэтэрвэл мөн `ResponseTooLargeError` (таслахгүй).
|
|
260
|
+
`getRepresentations`-ийн `raw` — серверийн түүхий JSON.
|
|
261
|
+
|
|
262
|
+
**Албан тушаал харуулахдаа `roleLabel` ашигла** (representations болон session-ий `onBehalfOf`) — `role` нь машин
|
|
263
|
+
утга (`ceo` / `founder` / `stakeholder` эсвэл MANAGER-т бичсэн текст), өөрөө орчуулахгүй. Хэл: `new EidClient({ …,
|
|
264
|
+
language: "en" })` → дуудлага бүрд `Accept-Language`; анхдагч илгээхгүй (сервер mn). Хуучин CA-д `roleLabel` байхгүй.
|
|
258
265
|
|
|
259
266
|
Олон талт гэрээ: А байгууллагын гаралтыг өөрчлөлтгүй Б-ийн `prepare`-д (`docID`, өөр `onBehalfOf`) илгээнэ.
|
|
260
|
-
Session-ий `onBehalfOf` блок (`role`/`rightType`) нь хариу угсрах үеийн бүртгэл; `pdf.signer.onBehalfOf`/`claimedRole`
|
|
267
|
+
Session-ий `onBehalfOf` блок (`role`/`roleLabel`/`rightType`) нь хариу угсрах үеийн бүртгэл; `pdf.signer.onBehalfOf`/`claimedRole`
|
|
261
268
|
нь баримтад бичигдсэн утга.
|
|
262
269
|
|
|
263
270
|
## 3b. Иргэний PKI самбар (`PKI_READ` эрх)
|
|
@@ -281,8 +288,16 @@ verifyTokenCertificates(res, csrAuth, csrSign); // гэрчилгээ бүр CSR
|
|
|
281
288
|
const ch = await eid.token.authChallenge();
|
|
282
289
|
const digest = tokenAuthDigest(ch.rpUUID, ch.challenge); // токен CKM_ECDSA → түүхий r||s
|
|
283
290
|
const who = await eid.token.authVerify(ch.challengeId, authCertDer, rs);
|
|
291
|
+
|
|
292
|
+
// токеноор PDF (PAdES, SIGN эрх) — session/утасгүй; байгууллагын токенд onBehalfOf = тухайн байгууллага
|
|
293
|
+
const p = await eid.pdf.tokenPrepare({ pdf, fileName: "Гэрээ.pdf", signerEtsi, certificate: signCertDer });
|
|
294
|
+
const rs = /* токен (PKCS#11): CKM_ECDSA(p.hashToSign) → түүхий r||s, 64 байт — p.expiresAt хүртэл */ new Uint8Array(64);
|
|
295
|
+
const blk = await eid.pdf.tokenFinalize(p.signingId, rs); // READY; 503 DOCUMENT_PENDING → ижил rs-ийг дахин
|
|
296
|
+
const signed = await eid.pdf.tokenDocument(p.signingId); // SHA-256 = blk.outSha256 тулга
|
|
284
297
|
```
|
|
285
298
|
|
|
299
|
+
`/token/auth/*`, `/pdf/token/*` нь CA-д байгаа ч `/.well-known/eid`-д хараахан жагсаагдаагүй (гэрээний тест WARN).
|
|
300
|
+
|
|
286
301
|
## 4. QR ба ижил төхөөрөмж — device link v3
|
|
287
302
|
|
|
288
303
|
Иргэн өөр төхөөрөмжийн дэлгэц дээрх **QR**-ийг утсаараа уншина, эсвэл RP-ийн сайт/аппыг eID апптай **ижил
|
|
@@ -371,7 +386,12 @@ OK ирж болзошгүй. Иймд `ResponseValidator`:
|
|
|
371
386
|
|
|
372
387
|
1. `state === COMPLETE && endResult === OK`
|
|
373
388
|
2. Иргэний гэрчилгээг **trust anchor (Mongolian National Root CA)** хүртэл chain-аар баталгаажуулна
|
|
374
|
-
(Root → National Issuing CA → Gerege Issuing CA → eID Mongolia Issuing CA → иргэн)
|
|
389
|
+
(Root → National Issuing CA → Gerege Issuing CA → eID Mongolia Issuing CA → иргэн) — RFC 5280 замын шалгалт
|
|
390
|
+
(Go SDK-ийн `x509.Certificate.Verify`-тэй ижил дүрэм): issuer нэр + AKI/SKI + гарын үсэг, CA basicConstraints +
|
|
391
|
+
**pathLenConstraint** (04 нь `pathlen:0`), CA-ийн keyUsage keyCertSign, CA бүрийн хугацаа, **EKU** (auth →
|
|
392
|
+
clientAuth, sign → emailProtection — CA-ийн профайл; CA-д EKU байвал түүнд багтах), үл таних **critical
|
|
393
|
+
extension** → татгалзана. **Name constraints**-тэй CA гинжинд байвал fail-closed (CA-ийн бодит гинжинд алга).
|
|
394
|
+
`intermediatesPem`-д 02, 03, 04-ийг бүгдийг өгнө (хариунд гинж ирдэггүй). certificatePolicies-ийг шалгахгүй.
|
|
375
395
|
3. Гэрчилгээ хүчинтэй хугацаанд + шаардсан `certificateLevel` (default `QUALIFIED`)
|
|
376
396
|
4. Гарын үсгийг иргэний public key-ээр шалгана:
|
|
377
397
|
- **auth** → ACSP_V2 payload (`smart-id|ACSP_V2|serverRandom|rpChallenge|userChallenge|B64(rpName)|B64(brokeredRpName)|B64(SHA-256(interactions))|interactionTypeUsed|initialCallbackUrl|flowType`, hash = хүсэлтийн `hashAlgorithm`) дээр — `flowType`, `userChallenge`, `serverRandom` ба алгоритмын downgrade-ийг мөн шалгана;
|
|
@@ -404,6 +424,7 @@ OK ирж болзошгүй. Иймд `ResponseValidator`:
|
|
|
404
424
|
| `SessionFailedError` | endResult ≠ OK (TIMEOUT, USER_REFUSED…) — `.endResult`-оор салга |
|
|
405
425
|
| `ValidationError` | cert chain/signature/level шалгалт бүтэлгүйтсэн |
|
|
406
426
|
| `ApiError` | бусад HTTP алдаа (`.status`, `.body`, серверийн `.code`, `.retryAfterMs`, `.headers`, `.retryable` — ж: 404 `ORG_NOT_FOUND`) |
|
|
427
|
+
| `ResponseTooLargeError` | хариу SDK-ийн хязгаараас их (JSON 4 MiB, PDF `pdfMaxBytes`) — `.op`, `.limit` |
|
|
407
428
|
| `NetworkError` | timeout/сүлжээ (`.op` — таних тэмдэггүй зам, `.timeout`) |
|
|
408
429
|
| `EidOidcError` | «eID-ээр нэвтрэх» (OIDC) — `.code`: `access_denied`, `login_required`, `state_mismatch`, `invalid_grant`, `invalid_id_token`, `server_error` … |
|
|
409
430
|
| `DeviceLinkError` | device-link холбоос угсрах боломжгүй (`deviceLinkBase` https биш, token/secret/lang хэлбэр, төрөлд хэрэгтэй талбар дутуу) |
|
|
@@ -212,8 +212,16 @@ interface Representation {
|
|
|
212
212
|
orgRegister: string;
|
|
213
213
|
orgName: string;
|
|
214
214
|
orgNameEn?: string;
|
|
215
|
-
/**
|
|
215
|
+
/**
|
|
216
|
+
* Албан тушаалын машин утга (ХУР-аас холбогдсонд `ceo` / `founder` / `stakeholder`, MANAGER-т ADMIN-ий бичсэн
|
|
217
|
+
* текст) — өөрөө орчуулахгүй, хүнд {@link Representation.roleLabel}-ийг харуулна.
|
|
218
|
+
*/
|
|
216
219
|
role?: string;
|
|
220
|
+
/**
|
|
221
|
+
* Албан тушаалын хүнд харуулах нэр (CA нэг газраас; хэл: `ClientConfig.language` → `Accept-Language`, анхдагч mn).
|
|
222
|
+
* Хуучин CA-д байхгүй.
|
|
223
|
+
*/
|
|
224
|
+
roleLabel?: string;
|
|
217
225
|
rightType: "ADMIN" | "MANAGER" | string;
|
|
218
226
|
source: "REGISTRY" | "MANUAL" | string;
|
|
219
227
|
/** ISO 8601. */
|
|
@@ -225,14 +233,18 @@ interface Representation {
|
|
|
225
233
|
interface RepresentationsResponse {
|
|
226
234
|
personEtsi: string;
|
|
227
235
|
representations: Representation[];
|
|
236
|
+
/** Серверийн түүхий JSON (SDK задлаагүй шинэ талбарт). */
|
|
237
|
+
raw?: unknown;
|
|
228
238
|
}
|
|
229
239
|
/** Session-ий байгууллагын блок — байгууллага + тухайн иргэний эрх (бүртгэлээс real-time). */
|
|
230
240
|
interface OrgResult {
|
|
231
241
|
/** `NTRMN-<улсын бүртгэлийн дугаар>`. */
|
|
232
242
|
orgEtsi: string;
|
|
233
243
|
orgName: string | null;
|
|
234
|
-
/** Албан
|
|
244
|
+
/** Албан тушаалын машин утга (`ceo`, MANUAL текст) — өөрөө орчуулахгүй. Эрх хураагдсан бол null. */
|
|
235
245
|
role: string | null;
|
|
246
|
+
/** Албан тушаалын хүнд харуулах нэр ({@link Representation.roleLabel}). Эрх хураагдсан / хуучин CA бол байхгүй. */
|
|
247
|
+
roleLabel?: string;
|
|
236
248
|
/** ADMIN | MANAGER. Эрх хураагдсан бол null. */
|
|
237
249
|
rightType: string | null;
|
|
238
250
|
}
|
|
@@ -395,6 +407,15 @@ declare class NetworkError extends EidError {
|
|
|
395
407
|
timeout?: boolean;
|
|
396
408
|
});
|
|
397
409
|
}
|
|
410
|
+
/**
|
|
411
|
+
* Хариуны бие SDK-ийн хязгаараас их (JSON 4 MiB, PDF `pdfMaxBytes`) — бие таслагдаж задлагдахгүй. `op` — method +
|
|
412
|
+
* таних тэмдэггүй зам.
|
|
413
|
+
*/
|
|
414
|
+
declare class ResponseTooLargeError extends EidError {
|
|
415
|
+
readonly op: string;
|
|
416
|
+
readonly limit: number;
|
|
417
|
+
constructor(op: string, limit: number);
|
|
418
|
+
}
|
|
398
419
|
/**
|
|
399
420
|
* Session амжилтгүй дууссан (endResult ≠ OK): TIMEOUT, USER_REFUSED*, DOCUMENT_UNUSABLE гм.
|
|
400
421
|
* endResult-оор салгаж RP UI-д тохирох мессеж харуулна.
|
|
@@ -417,4 +438,4 @@ declare class ValidationError extends EidError {
|
|
|
417
438
|
declare class DeviceLinkError extends EidError {
|
|
418
439
|
}
|
|
419
440
|
|
|
420
|
-
export { type AcspContext as A,
|
|
441
|
+
export { type AcspContext as A, deviceLink as B, type CertificateLevel as C, type DeviceLinkSession as D, EidError as E, type FlowType as F, isMobileUserAgent as G, type HashAlgorithm as H, type Interaction as I, openOrShowQR as J, parseRetryAfter as K, type NotificationSession as N, ON_BEHALF_ERROR_CODES as O, type PersonBlock as P, type RpCredentials as R, type SignatureAlgorithm as S, type TokenCertSessionBlock as T, ValidationError as V, type SessionResult as a, type PdfSessionBlock as b, type RepresentationsResponse as c, ApiError as d, AuthenticationError as e, DeviceLinkError as f, type DeviceLinkInput as g, type EndResult as h, ForbiddenError as i, type HttpErrorInit as j, type NavigatorLike as k, NetworkError as l, type OnBehalfErrorCode as m, type OpenOrShowQROptions as n, type OrgResult as o, type PdfDocumentStatus as p, type PdfSigner as q, RETRYABLE_ERROR_CODES as r, type Representation as s, ResponseTooLargeError as t, type RetryableErrorCode as u, SessionFailedError as v, type SessionState as w, type SignatureAlgorithmParameters as x, type SignatureProtocol as y, type TokenCertStatus as z };
|
|
@@ -212,8 +212,16 @@ interface Representation {
|
|
|
212
212
|
orgRegister: string;
|
|
213
213
|
orgName: string;
|
|
214
214
|
orgNameEn?: string;
|
|
215
|
-
/**
|
|
215
|
+
/**
|
|
216
|
+
* Албан тушаалын машин утга (ХУР-аас холбогдсонд `ceo` / `founder` / `stakeholder`, MANAGER-т ADMIN-ий бичсэн
|
|
217
|
+
* текст) — өөрөө орчуулахгүй, хүнд {@link Representation.roleLabel}-ийг харуулна.
|
|
218
|
+
*/
|
|
216
219
|
role?: string;
|
|
220
|
+
/**
|
|
221
|
+
* Албан тушаалын хүнд харуулах нэр (CA нэг газраас; хэл: `ClientConfig.language` → `Accept-Language`, анхдагч mn).
|
|
222
|
+
* Хуучин CA-д байхгүй.
|
|
223
|
+
*/
|
|
224
|
+
roleLabel?: string;
|
|
217
225
|
rightType: "ADMIN" | "MANAGER" | string;
|
|
218
226
|
source: "REGISTRY" | "MANUAL" | string;
|
|
219
227
|
/** ISO 8601. */
|
|
@@ -225,14 +233,18 @@ interface Representation {
|
|
|
225
233
|
interface RepresentationsResponse {
|
|
226
234
|
personEtsi: string;
|
|
227
235
|
representations: Representation[];
|
|
236
|
+
/** Серверийн түүхий JSON (SDK задлаагүй шинэ талбарт). */
|
|
237
|
+
raw?: unknown;
|
|
228
238
|
}
|
|
229
239
|
/** Session-ий байгууллагын блок — байгууллага + тухайн иргэний эрх (бүртгэлээс real-time). */
|
|
230
240
|
interface OrgResult {
|
|
231
241
|
/** `NTRMN-<улсын бүртгэлийн дугаар>`. */
|
|
232
242
|
orgEtsi: string;
|
|
233
243
|
orgName: string | null;
|
|
234
|
-
/** Албан
|
|
244
|
+
/** Албан тушаалын машин утга (`ceo`, MANUAL текст) — өөрөө орчуулахгүй. Эрх хураагдсан бол null. */
|
|
235
245
|
role: string | null;
|
|
246
|
+
/** Албан тушаалын хүнд харуулах нэр ({@link Representation.roleLabel}). Эрх хураагдсан / хуучин CA бол байхгүй. */
|
|
247
|
+
roleLabel?: string;
|
|
236
248
|
/** ADMIN | MANAGER. Эрх хураагдсан бол null. */
|
|
237
249
|
rightType: string | null;
|
|
238
250
|
}
|
|
@@ -395,6 +407,15 @@ declare class NetworkError extends EidError {
|
|
|
395
407
|
timeout?: boolean;
|
|
396
408
|
});
|
|
397
409
|
}
|
|
410
|
+
/**
|
|
411
|
+
* Хариуны бие SDK-ийн хязгаараас их (JSON 4 MiB, PDF `pdfMaxBytes`) — бие таслагдаж задлагдахгүй. `op` — method +
|
|
412
|
+
* таних тэмдэггүй зам.
|
|
413
|
+
*/
|
|
414
|
+
declare class ResponseTooLargeError extends EidError {
|
|
415
|
+
readonly op: string;
|
|
416
|
+
readonly limit: number;
|
|
417
|
+
constructor(op: string, limit: number);
|
|
418
|
+
}
|
|
398
419
|
/**
|
|
399
420
|
* Session амжилтгүй дууссан (endResult ≠ OK): TIMEOUT, USER_REFUSED*, DOCUMENT_UNUSABLE гм.
|
|
400
421
|
* endResult-оор салгаж RP UI-д тохирох мессеж харуулна.
|
|
@@ -417,4 +438,4 @@ declare class ValidationError extends EidError {
|
|
|
417
438
|
declare class DeviceLinkError extends EidError {
|
|
418
439
|
}
|
|
419
440
|
|
|
420
|
-
export { type AcspContext as A,
|
|
441
|
+
export { type AcspContext as A, deviceLink as B, type CertificateLevel as C, type DeviceLinkSession as D, EidError as E, type FlowType as F, isMobileUserAgent as G, type HashAlgorithm as H, type Interaction as I, openOrShowQR as J, parseRetryAfter as K, type NotificationSession as N, ON_BEHALF_ERROR_CODES as O, type PersonBlock as P, type RpCredentials as R, type SignatureAlgorithm as S, type TokenCertSessionBlock as T, ValidationError as V, type SessionResult as a, type PdfSessionBlock as b, type RepresentationsResponse as c, ApiError as d, AuthenticationError as e, DeviceLinkError as f, type DeviceLinkInput as g, type EndResult as h, ForbiddenError as i, type HttpErrorInit as j, type NavigatorLike as k, NetworkError as l, type OnBehalfErrorCode as m, type OpenOrShowQROptions as n, type OrgResult as o, type PdfDocumentStatus as p, type PdfSigner as q, RETRYABLE_ERROR_CODES as r, type Representation as s, ResponseTooLargeError as t, type RetryableErrorCode as u, SessionFailedError as v, type SessionState as w, type SignatureAlgorithmParameters as x, type SignatureProtocol as y, type TokenCertStatus as z };
|
package/dist/browser.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { f as DeviceLinkError, g as DeviceLinkInput, D as DeviceLinkSession, E as EidError, k as NavigatorLike, n as OpenOrShowQROptions,
|
|
1
|
+
export { f as DeviceLinkError, g as DeviceLinkInput, D as DeviceLinkSession, E as EidError, k as NavigatorLike, n as OpenOrShowQROptions, B as deviceLink, G as isMobileUserAgent, J as openOrShowQR } from './browser-B_xuB7Rt.cjs';
|
package/dist/browser.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { f as DeviceLinkError, g as DeviceLinkInput, D as DeviceLinkSession, E as EidError, k as NavigatorLike, n as OpenOrShowQROptions,
|
|
1
|
+
export { f as DeviceLinkError, g as DeviceLinkInput, D as DeviceLinkSession, E as EidError, k as NavigatorLike, n as OpenOrShowQROptions, B as deviceLink, G as isMobileUserAgent, J as openOrShowQR } from './browser-B_xuB7Rt.js';
|
package/dist/browser.js
CHANGED
|
@@ -99,6 +99,15 @@ var NetworkError = class extends EidError {
|
|
|
99
99
|
this.timeout = init?.timeout;
|
|
100
100
|
}
|
|
101
101
|
};
|
|
102
|
+
var ResponseTooLargeError = class extends EidError {
|
|
103
|
+
constructor(op, limit) {
|
|
104
|
+
super(`${op}: \u0445\u0430\u0440\u0438\u0443 ${limit} \u0431\u0430\u0439\u0442\u0430\u0430\u0441 \u0438\u0445`);
|
|
105
|
+
this.op = op;
|
|
106
|
+
this.limit = limit;
|
|
107
|
+
}
|
|
108
|
+
op;
|
|
109
|
+
limit;
|
|
110
|
+
};
|
|
102
111
|
function maskPath(path) {
|
|
103
112
|
return path.split(/[?#]/)[0].replace(/\/(etsi|document)\/[^/?#\s]+/g, "/$1/\u2026");
|
|
104
113
|
}
|
|
@@ -165,6 +174,7 @@ export {
|
|
|
165
174
|
parseRetryAfter,
|
|
166
175
|
ON_BEHALF_ERROR_CODES,
|
|
167
176
|
NetworkError,
|
|
177
|
+
ResponseTooLargeError,
|
|
168
178
|
maskPath,
|
|
169
179
|
SessionFailedError,
|
|
170
180
|
ValidationError,
|