@gerege-systems/eid-mongolia-sdk 0.14.2 → 0.15.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.
- package/README.md +176 -54
- package/dist/{browser-CSZjH9Xs.d.cts → browser-8k_VDSP8.d.cts} +8 -183
- package/dist/{browser-CSZjH9Xs.d.ts → browser-BZ3hvv6-.d.ts} +8 -183
- package/dist/browser.d.cts +2 -1
- package/dist/browser.d.ts +2 -1
- package/dist/browser.js +5 -3
- package/dist/button.cjs +55 -45
- package/dist/button.js +55 -45
- package/dist/chunk-REWNE7PO.js +51 -0
- package/dist/{chunk-DXVHOZO7.js → chunk-TB2KQH3W.js} +1 -46
- package/dist/errors-Z7SgLVTr.d.cts +149 -0
- package/dist/errors-Z7SgLVTr.d.ts +149 -0
- package/dist/index.cjs +270 -256
- package/dist/index.d.cts +169 -159
- package/dist/index.d.ts +169 -159
- package/dist/index.js +256 -241
- package/dist/pades.cjs +3520 -0
- package/dist/pades.d.cts +128 -0
- package/dist/pades.d.ts +128 -0
- package/dist/pades.js +3484 -0
- package/package.json +16 -6
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
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
|
|
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 RepresentationsResponse, A as AcspContext, F as FlowType } from './browser-BZ3hvv6-.js';
|
|
2
|
+
export { c as DEFAULT_SIGN_SESSION_TTL_MS, d as DeviceLinkInput, E as EndResult, e as NavigatorLike, O as OpenOrShowQROptions, f as OrgResult, g as Representation, h as SessionState, i as SignContext, j as SignatureAlgorithmParameters, k as SignatureProtocol, T as TokenCertSessionBlock, l as TokenCertStatus, m as deviceLink, n as isMobileUserAgent, o as openOrShowQR, p as parseExpiresAt, s as sessionExpiry, q as startExpiry } from './browser-BZ3hvv6-.js';
|
|
3
3
|
import { X509Certificate, KeyObject } from 'node:crypto';
|
|
4
|
+
export { A as ApiError, a as AuthenticationError, C as CertChoiceInvalidError, D as DeviceLinkError, E as EidError, F as ForbiddenError, H as HttpErrorInit, N as NetworkError, b as NoSigningCertificateError, O as ON_BEHALF_ERROR_CODES, c as OnBehalfErrorCode, R as RETRYABLE_ERROR_CODES, d as RequestInvalidError, e as ResponseTooLargeError, f as RetryableErrorCode, S as SessionFailedError, V as ValidationError, p as parseRetryAfter } from './errors-Z7SgLVTr.js';
|
|
4
5
|
|
|
5
6
|
interface HttpConfig {
|
|
6
7
|
/** RP-API-ийн бүтэн суурь URL. Ж: https://rp.eidmongolia.mn */
|
|
@@ -25,10 +26,6 @@ declare class Http {
|
|
|
25
26
|
constructor(cfg: HttpConfig);
|
|
26
27
|
post(path: string, body: unknown, timeoutMs?: number): Promise<unknown>;
|
|
27
28
|
get(path: string, timeoutMs?: number): Promise<unknown>;
|
|
28
|
-
/** multipart/form-data POST (Content-Type-ийг boundary-тай нь fetch тавина). JSON хариу. */
|
|
29
|
-
postMultipart(path: string, form: FormData, timeoutMs?: number): Promise<unknown>;
|
|
30
|
-
/** GET — хариуг байтаар (ж: гарын үсэгтэй PDF), `maxBytes` хүртэл; хэтэрвэл {@link ResponseTooLargeError}. */
|
|
31
|
-
getBytes(path: string, timeoutMs?: number, maxBytes?: number): Promise<Uint8Array>;
|
|
32
29
|
private json;
|
|
33
30
|
private send;
|
|
34
31
|
}
|
|
@@ -114,6 +111,119 @@ interface SignOptions {
|
|
|
114
111
|
*/
|
|
115
112
|
fileName?: string;
|
|
116
113
|
}
|
|
114
|
+
/** {@link SignApi.pdfDigest}-ийн зурагч — яг нэг нь. `documentNumber` нь `PadesPrepareOptions.signerCert`-ийн төхөөрөмж. */
|
|
115
|
+
type PdfDigestSigner = {
|
|
116
|
+
etsi: string;
|
|
117
|
+
} | {
|
|
118
|
+
documentNumber: string;
|
|
119
|
+
};
|
|
120
|
+
/** Клиент талын PAdES-ийн DTBS-д гарын үсгийн session (`@gerege-systems/eid-mongolia-sdk/pades` `prepare`-ийн дараа). */
|
|
121
|
+
interface PdfDigestInput {
|
|
122
|
+
/** `prepare()`-ийн `dtbs` — SHA-256(signedAttrs), 32 байт (Uint8Array эсвэл стандарт base64). */
|
|
123
|
+
dtbs: Uint8Array | string;
|
|
124
|
+
/** Баримтын нэр (≤ 120 тэмдэгт) — утсанд «Баримтад гарын үсэг зурах: <нэр>», /verify ба иргэний түүхэнд. */
|
|
125
|
+
fileName: string;
|
|
126
|
+
/**
|
|
127
|
+
* Зурагч. `prepare()`-д өгсөн SIGN гэрчилгээ нь энэ төхөөрөмжийнх байх ёстой (өөр төхөөрөмж зурвал `complete()`
|
|
128
|
+
* SIGNATURE_INVALID) — олон төхөөрөмжтэй иргэнд `documentNumber`-ийг сонго.
|
|
129
|
+
*/
|
|
130
|
+
signer: PdfDigestSigner;
|
|
131
|
+
/** `notification` (push, анхдагч) эсвэл `device-link` (QR/Web2App/App2App — холбоосыг {@link buildDeviceLink}). */
|
|
132
|
+
flow?: "notification" | "device-link";
|
|
133
|
+
certificateLevel?: CertificateLevel;
|
|
134
|
+
/** device-link Web2App/App2App буцах https URL (`callbackHosts`-д бүртгэлтэй). */
|
|
135
|
+
initialCallbackUrl?: string;
|
|
136
|
+
/**
|
|
137
|
+
* Байгууллагын нэрийн өмнөөс (`NTRMN-…`). Сервер төлөөллийг шалгаж утсанд харуулна. `prepare()`-ийн `claimedRole`
|
|
138
|
+
* нь `organization.getRepresentations()`-ийн тухайн мөрийн `claimedRole` (CMS-д орно).
|
|
139
|
+
*/
|
|
140
|
+
onBehalfOf?: string;
|
|
141
|
+
}
|
|
142
|
+
/** {@link SignApi.pdfDigest}-ийн хариу. `deviceLink`-ийн нууцыг ЗӨВХӨН backend-д хадгална. */
|
|
143
|
+
interface PdfDigestSession {
|
|
144
|
+
sessionId: string;
|
|
145
|
+
/** Иргэнд ХАРУУЛАХ баталгаажуулах код (ПИН биш). */
|
|
146
|
+
vc: string | null;
|
|
147
|
+
/** Илгээсэн DTBS (base64) — `validator.validateSign(result, digest)` ба device link-ийн `digest`. */
|
|
148
|
+
digest: string;
|
|
149
|
+
/** Илгээсэн interactions-ийн base64 МӨР — device link-ийн authCode-д ЯГ ХЭВЭЭР. */
|
|
150
|
+
interactions: string;
|
|
151
|
+
/** device-link урсгалд; push-д null. */
|
|
152
|
+
deviceLink: {
|
|
153
|
+
sessionToken: string;
|
|
154
|
+
sessionSecret: string;
|
|
155
|
+
deviceLinkBase: string;
|
|
156
|
+
} | null;
|
|
157
|
+
/** SDK хариу хүлээн авсан мөч (ms epoch) — QR-ийн `receivedAt`. */
|
|
158
|
+
receivedAt: number;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Клиент талын PAdES-ийн бүртгэл — `POST /pdf/signatures`-ийн бие (CA `dto.PDFSignatureRegisterRequest`,
|
|
162
|
+
* docs/PADES_CLIENT_SIDE.md §4.3/§4.3.1; CA `DisallowUnknownFields` — талбарын нэр ЯГ энэ). Ихэвчлэн
|
|
163
|
+
* {@link registrationFromCompleted}-оор `pades.complete()`-ийн үр дүнгээс бөглөнө.
|
|
164
|
+
*/
|
|
165
|
+
interface RegisterSignatureInput {
|
|
166
|
+
/** `complete().docId` (UUID). */
|
|
167
|
+
docID: string;
|
|
168
|
+
/** `complete().revIndex` — энэ гарын үсгийн дугаар (1–16). */
|
|
169
|
+
revIndex: number;
|
|
170
|
+
/** `phone` (утас, `sessionID`-тэй) | `token` (USB токен). Анхдагч: `sessionID` байвал phone, эс бөгөөс token. */
|
|
171
|
+
medium?: "phone" | "token";
|
|
172
|
+
/** Утсаар зурсан бол `signPdfDigest`-ийн sessionId (CA session-ий digest ↔ CMS signedAttrs-ийг тулгана); токенд алга. */
|
|
173
|
+
sessionID?: string;
|
|
174
|
+
/** `complete().cms` — DER (≤ 28 672 байт) эсвэл түүний стандарт base64. */
|
|
175
|
+
cms: Uint8Array | string;
|
|
176
|
+
/** Баримтын нэр (≤ 120 тэмдэгт; CA `cleanFileName`). */
|
|
177
|
+
fileName: string;
|
|
178
|
+
/** `complete().inSha256` — оролтын PDF-ийн SHA-256 (hex). */
|
|
179
|
+
inSha256: string;
|
|
180
|
+
/** `complete().pageSha256` — `revIndex` 1 бол заавал (хуудас нэмсний дараах баримт), бусад үед алга. */
|
|
181
|
+
pageSha256?: string;
|
|
182
|
+
/** `complete().sigRevSha256` — гарын үсгийн revision-ий SHA-256 (hex). */
|
|
183
|
+
sigRevSha256: string;
|
|
184
|
+
/** `complete().outSha256` — гарын үсэгтэй PDF-ийн SHA-256 (hex). */
|
|
185
|
+
outSha256: string;
|
|
186
|
+
/** `complete().priorCmsSha256` — өмнөх (клиент талын) гарын үсгүүдийн CMS SHA-256 (hex). */
|
|
187
|
+
priorCmsSha256?: string[];
|
|
188
|
+
/** Горим A-ийн (CA угсарсан) өмнөх гарын үсгүүдийн revision SHA-256. `priorCmsSha256`-тай нийлээд = `revIndex − 1`. */
|
|
189
|
+
priorRevisionSha256?: string[];
|
|
190
|
+
/** Байгууллагын нэрийн өмнөөс (`NTRMN-…`) — session-ийнхтэй ижил. */
|
|
191
|
+
onBehalfOf?: string;
|
|
192
|
+
/** Заавал биш (`PNOMN-…`): ирвэл CMS-ийн зурагчийн SERIALNUMBER-тэй тэнцүү (эс бөгөөс 409 `SIGNER_MISMATCH`). */
|
|
193
|
+
signerEtsi?: string;
|
|
194
|
+
}
|
|
195
|
+
/** {@link registrationFromCompleted}-д хэрэгтэй `pades.complete()`-ийн хэсэг (JSON-оор дамжсан бол `cms` нь base64). */
|
|
196
|
+
interface CompletedForRegistration {
|
|
197
|
+
docId: string;
|
|
198
|
+
revIndex: number;
|
|
199
|
+
cms: Uint8Array | string;
|
|
200
|
+
inSha256: string;
|
|
201
|
+
hasPage: boolean;
|
|
202
|
+
pageSha256: string;
|
|
203
|
+
sigRevSha256: string;
|
|
204
|
+
outSha256: string;
|
|
205
|
+
priorCmsSha256: string[];
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* `pades.complete()`-ийн үр дүнгээс `registerSignature`-ийн биеийг бөглөнө (`hasPage`-ийг илгээхгүй — CA `revIndex`-ээс
|
|
209
|
+
* тооцно; `pageSha256` зөвхөн хуудастай үед).
|
|
210
|
+
*/
|
|
211
|
+
declare function registrationFromCompleted(done: CompletedForRegistration, extra: Pick<RegisterSignatureInput, "fileName" | "sessionID" | "medium" | "onBehalfOf" | "signerEtsi" | "priorRevisionSha256">): RegisterSignatureInput;
|
|
212
|
+
/** `POST /pdf/signatures`-ийн хариу (201 шинэ, 200 идэмпотент давталт). */
|
|
213
|
+
interface RegisterSignatureResult {
|
|
214
|
+
docID: string;
|
|
215
|
+
revIndex: number;
|
|
216
|
+
/** RFC 3339 (+08). */
|
|
217
|
+
registeredAt: string;
|
|
218
|
+
/** Нийтийн шалгах хуудас (`https://ca.eidmongolia.mn/verify/<docID>`). */
|
|
219
|
+
verifyUrl: string;
|
|
220
|
+
raw: unknown;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* `POST /pdf/signatures`-ийн JSON бие — CA `dto.PDFSignatureRegisterRequest`-ийн талбарын дарааллаар, зөвхөн
|
|
224
|
+
* {@link PDF_SIGNATURE_REGISTER_FIELDS}. Оролтыг шалгана (ValidationError).
|
|
225
|
+
*/
|
|
226
|
+
declare function buildRegisterBody(input: RegisterSignatureInput): Record<string, unknown>;
|
|
117
227
|
/** Certificate-choice session-ий тохиргоо. */
|
|
118
228
|
interface CertChoiceOptions {
|
|
119
229
|
certificateLevel?: CertificateLevel;
|
|
@@ -144,6 +254,25 @@ declare class SignApi {
|
|
|
144
254
|
digestByEtsi(id: string, digestB64: string, interactions: Interaction[], opts?: SignOptions): Promise<NotificationSession>;
|
|
145
255
|
/** Бэлэн digest-ээр push sign — баримтын дугаараар (auth / certificate-choice-оос гарсан documentNumber дээр). */
|
|
146
256
|
digestByDocument(documentNumber: string, digestB64: string, interactions: Interaction[], opts?: SignOptions): Promise<NotificationSession>;
|
|
257
|
+
/**
|
|
258
|
+
* Клиент талын PAdES (`@gerege-systems/eid-mongolia-sdk/pades`): `prepare()`-ийн DTBS-д иргэнээр гарын үсэг зуруулна.
|
|
259
|
+
* PDF CA руу ОЧИХГҮЙ — зөвхөн 32 байт. CA-ийн өөрийн PAdES session-тэй ижил: `RAW_DIGEST_SIGNATURE`,
|
|
260
|
+
* `sha256WithRSAEncryption` (CMS-д PKCS#1 v1.5; legacy ECDSA иргэнд сервер `ecdsa-with-SHA256`), `displayTextAndPIN`
|
|
261
|
+
* «Баримтад гарын үсэг зурах: <fileName>» (60 тэмдэгтэд тайрна).
|
|
262
|
+
*
|
|
263
|
+
* Дараа нь `session.waitForResult(sessionId)` → `validator.validateSign(result, s.digest)` → `signature.value`-г
|
|
264
|
+
* (base64 → байт) `complete(state, signature)`-д.
|
|
265
|
+
*/
|
|
266
|
+
pdfDigest(input: PdfDigestInput): Promise<PdfDigestSession>;
|
|
267
|
+
/**
|
|
268
|
+
* `POST /pdf/signatures` — `pades.complete()`-ийн дараа CMS-ийг CA-д бүртгэнэ (`/verify/{docID}`, иргэний түүх). PDF
|
|
269
|
+
* илгээгдэхгүй. SIGN эрх. CA CMS-ийг шалгана: 04-ийн SIGN cert, session digest = SHA-256(signedAttrs), claimedRole ↔
|
|
270
|
+
* төлөөлөл. Алдаа: 403 `REPRESENTATION_REVOKED`, 409 `CLAIMED_ROLE_MISMATCH` / `REGISTRY_CONFLICT` /
|
|
271
|
+
* `DOC_ID_CONFLICT` / `PDF_FOREIGN_SIGNATURE` (`ApiError.code`). Бүртгэлгүй файл ч Adobe/EU DSS-д хүчинтэй — зөвхөн
|
|
272
|
+
* `/verify` «бүртгэлгүй» гэнэ.
|
|
273
|
+
*/
|
|
274
|
+
registerSignature(input: RegisterSignatureInput): Promise<RegisterSignatureResult>;
|
|
275
|
+
private registerBody;
|
|
147
276
|
/** Текстийн SHA-256 digest-ийг дотроо тооцоод push sign (богино текст баримтад тохиромжтой). */
|
|
148
277
|
textByEtsi(id: string, text: string, interactions: Interaction[], opts?: SignOptions): Promise<NotificationSession>;
|
|
149
278
|
/**
|
|
@@ -207,147 +336,6 @@ declare class SessionApi {
|
|
|
207
336
|
}): Promise<SessionResult>;
|
|
208
337
|
}
|
|
209
338
|
|
|
210
|
-
interface PdfDefaults {
|
|
211
|
-
certificateLevel: CertificateLevel;
|
|
212
|
-
/** prepare / document дуудлагын хугацаа (мс); анхдагч {@link DEFAULT_PDF_TIMEOUT_MS}. */
|
|
213
|
-
timeoutMs?: number;
|
|
214
|
-
/** document / tokenDocument-ийн санах ойд унших дээд хэмжээ (байт); анхдагч {@link DEFAULT_PDF_MAX_BYTES}. */
|
|
215
|
-
maxBytes?: number;
|
|
216
|
-
}
|
|
217
|
-
/** Гарын үсэгтэй PDF татахад санах ойд уншиж болох анхдагч дээд хэмжээ (64 MiB) — `ClientConfig.pdfMaxBytes`. */
|
|
218
|
-
declare const DEFAULT_PDF_MAX_BYTES: number;
|
|
219
|
-
/**
|
|
220
|
-
* PAdES prepare / баримт татах нэг дуудлагын анхдагч хугацаа (мс). CA prepare нь ≤ 10 MiB уншиж, өмнөх гарын үсэг +
|
|
221
|
-
* LTV өгөгдөл шалгаад push эхлүүлдэг; баримт татахад угсралтыг ≤ 30с хүлээдэг (PADES_SIGNING §3.4). 80с нь хоёуланд
|
|
222
|
-
* хүрэлцэнэ, CA-ийн nginx proxy_read_timeout-оос бага.
|
|
223
|
-
*/
|
|
224
|
-
declare const DEFAULT_PDF_TIMEOUT_MS = 80000;
|
|
225
|
-
/** Гарын үсэг зурагч — яг нэг нь. */
|
|
226
|
-
type PdfSignerRef = {
|
|
227
|
-
etsi: string;
|
|
228
|
-
} | {
|
|
229
|
-
documentNumber: string;
|
|
230
|
-
} | {
|
|
231
|
-
certificateChoiceSessionId: string;
|
|
232
|
-
};
|
|
233
|
-
interface PdfPrepareInput {
|
|
234
|
-
/** Эх PDF (≤ 10 223 616 байт — `/.well-known/eid` `pdfSigning.maxInputBytes`). */
|
|
235
|
-
pdf: Uint8Array;
|
|
236
|
-
/** Баримтын нэр (≤ 120 тэмдэгт) — /verify хуудас, иргэний түүхэнд харагдана. */
|
|
237
|
-
fileName: string;
|
|
238
|
-
signer: PdfSignerRef;
|
|
239
|
-
/** `notification` (push) эсвэл `device-link` (QR/Web2App/App2App). Анхдагч notification. */
|
|
240
|
-
flow?: "notification" | "device-link";
|
|
241
|
-
certificateLevel?: CertificateLevel;
|
|
242
|
-
/** device-link Web2App/App2App буцах URL. */
|
|
243
|
-
initialCallbackUrl?: string;
|
|
244
|
-
/** Олон гарын үсэгтэй баримтад хүлээж буй docID (заавал биш — CA өөрөө олно). */
|
|
245
|
-
docID?: string;
|
|
246
|
-
/**
|
|
247
|
-
* Байгууллагын нэрийн өмнөөс: байгууллагын ETSI (`NTRMN-<бүртгэл>`). Сервер төлөөллийг prepare-д ба баримт
|
|
248
|
-
* угсрахын өмнө дахин шалгана; татгалзвал `ForbiddenError`/`ApiError` `.code` ({@link OnBehalfErrorCode}).
|
|
249
|
-
*/
|
|
250
|
-
onBehalfOf?: string;
|
|
251
|
-
}
|
|
252
|
-
/** prepare-ийн хариу. device-link-д `deviceLink` (digest/interactions-ийг authCode-д ЯГ ХЭВЭЭР). */
|
|
253
|
-
interface PdfPrepareSession {
|
|
254
|
-
sessionId: string;
|
|
255
|
-
docId: string;
|
|
256
|
-
/** Иргэнд ХАРУУЛАХ баталгаажуулах код (ПИН биш). */
|
|
257
|
-
vc: string | null;
|
|
258
|
-
/**
|
|
259
|
-
* Иргэний зурах DTBS (base64, SHA-256 = 32 байт) — урсгалаас үл хамааран. Хариуны гарын үсгийг өөрөө шалгахад:
|
|
260
|
-
* `validator.validateSign(result, digest)`. Хуучин CA push хариунд талбаргүй → undefined (device-link-д
|
|
261
|
-
* `deviceLink.digest`-ээс).
|
|
262
|
-
*/
|
|
263
|
-
digest?: string;
|
|
264
|
-
deviceLink: {
|
|
265
|
-
sessionToken: string;
|
|
266
|
-
sessionSecret: string;
|
|
267
|
-
deviceLinkBase: string;
|
|
268
|
-
digest: string;
|
|
269
|
-
interactions: string;
|
|
270
|
-
} | null;
|
|
271
|
-
/** SDK хариу хүлээн авсан мөч (ms epoch) — QR-ийн `receivedAt` ({@link buildDeviceLink}). */
|
|
272
|
-
receivedAt: number;
|
|
273
|
-
}
|
|
274
|
-
/** USB токены PAdES — POST /pdf/token/prepare-ийн оролт. */
|
|
275
|
-
interface PdfTokenPrepareInput {
|
|
276
|
-
/** Эх PDF (≤ 10 223 616 байт). */
|
|
277
|
-
pdf: Uint8Array;
|
|
278
|
-
/** Баримтын нэр (≤ 120 тэмдэгт, заавал). */
|
|
279
|
-
fileName: string;
|
|
280
|
-
/** Иргэний ETSI (`PNOMN-…`) — токены гэрчилгээний SERIALNUMBER-тэй таарна. */
|
|
281
|
-
signerEtsi: string;
|
|
282
|
-
/** Токены SIGN гэрчилгээ (DER): eID Mongolia Issuing CA-аас, ACTIVE токенд холбогдсон. */
|
|
283
|
-
certificate: Uint8Array;
|
|
284
|
-
/** Олон гарын үсэгтэй баримтын docID (заавал биш, UUID). */
|
|
285
|
-
docID?: string;
|
|
286
|
-
/** Байгууллагын токенд ЗААВАЛ тухайн байгууллага (`NTRMN-…`); хувийн токенд хоосон. Зөрвөл 403 TOKEN_ORG_MISMATCH. */
|
|
287
|
-
onBehalfOf?: string;
|
|
288
|
-
}
|
|
289
|
-
/** POST /pdf/token/prepare-ийн хариу. */
|
|
290
|
-
interface PdfTokenPrepareSession {
|
|
291
|
-
signingId: string;
|
|
292
|
-
docId: string;
|
|
293
|
-
/** Токеноор зурах 32 байт (SHA-256 DTBS): CKM_ECDSA (prehashed) → түүхий r||s (64 байт). */
|
|
294
|
-
hashToSign: Uint8Array;
|
|
295
|
-
hashAlgorithm: string;
|
|
296
|
-
signatureAlgorithm: string;
|
|
297
|
-
/** "RAW_RS". */
|
|
298
|
-
signatureFormat: string;
|
|
299
|
-
/** tokenFinalize-ийн эцсийн хугацаа (prepare-ээс 10 мин), ISO-8601. */
|
|
300
|
-
expiresAt: string;
|
|
301
|
-
raw: unknown;
|
|
302
|
-
}
|
|
303
|
-
declare class PdfApi {
|
|
304
|
-
private readonly http;
|
|
305
|
-
private readonly creds;
|
|
306
|
-
private readonly defaults;
|
|
307
|
-
constructor(http: Http, creds: RpCredentials, defaults: PdfDefaults);
|
|
308
|
-
/**
|
|
309
|
-
* POST /pdf/sign/prepare — multipart (`request` JSON + `pdf`). SIGN эрх шаардана. Түр алдаа: `ApiError` 429
|
|
310
|
-
* PDF_PREPARE_BUSY, 503 LTV_UNAVAILABLE / TSA_UNAVAILABLE — `retryAfterMs`-ийн дараа дахин (`retryable`).
|
|
311
|
-
*/
|
|
312
|
-
prepare(input: PdfPrepareInput): Promise<PdfPrepareSession>;
|
|
313
|
-
/**
|
|
314
|
-
* GET /pdf/sign/{sessionID}/document — гарын үсэгтэй PDF (READY-ээс хойш 30 мин). Татсан байтын SHA-256-ийг
|
|
315
|
-
* session-ий `pdf.outSha256`-тай тулга. Эрх хасагдсан бол `ForbiddenError` `.code = "REPRESENTATION_REVOKED"`. Баримт
|
|
316
|
-
* бэлэн болоогүй бол `ApiError` 503 `.code` DOCUMENT_PENDING / TSA_UNAVAILABLE / LTV_UNAVAILABLE — `retryAfterMs`-ийн
|
|
317
|
-
* дараа дахин татна (`retryable`).
|
|
318
|
-
*/
|
|
319
|
-
document(sessionId: string): Promise<Uint8Array>;
|
|
320
|
-
private get timeout();
|
|
321
|
-
private get maxBytes();
|
|
322
|
-
/**
|
|
323
|
-
* USB токены PAdES (CA docs/PADES_SIGNING.md §16.5, TOKEN_CERT.md) — session / утас оролцохгүй. POST /pdf/token/prepare
|
|
324
|
-
* (multipart: `request` JSON + `pdf`), SIGN эрх. Дараа нь токеноор `hashToSign`-ийг CKM_ECDSA (prehashed, P-256)-аар
|
|
325
|
-
* зурж {@link tokenFinalize}. Түр алдаа: `ApiError` 429 PDF_PREPARE_BUSY / RATE_LIMITED, 503 TSA_UNAVAILABLE /
|
|
326
|
-
* LTV_UNAVAILABLE / STATE_UNAVAILABLE (`retryable`). Гэрчилгээ токенд холбогдоогүй / цуцлагдсан → 409
|
|
327
|
-
* TOKEN_CERT_INVALID. Зам нь CA-д бий ч `/.well-known/eid`-д хараахан алга (гэрээний тест WARN).
|
|
328
|
-
*/
|
|
329
|
-
tokenPrepare(input: PdfTokenPrepareInput): Promise<PdfTokenPrepareSession>;
|
|
330
|
-
/**
|
|
331
|
-
* POST /pdf/token/{signingID}/finalize `{signature: base64 түүхий r||s}` — `signature` 64 байт (P-256 r||s, DER БИШ).
|
|
332
|
-
* Амжвал READY баримтын блок (`outSha256` — {@link tokenDocument}-оор татсан файлтай тулга). READY-ээс хойш идэмпотент.
|
|
333
|
-
* Алдаа: 400 SIGNATURE_INVALID (3 удаа → FAILED), 409 DOCUMENT_FAILED, 410 DOCUMENT_EXPIRED, 503 DOCUMENT_PENDING /
|
|
334
|
-
* TSA_UNAVAILABLE / LTV_UNAVAILABLE — ижил гарын үсгийг `retryAfterMs`-ийн дараа дахин илгээнэ.
|
|
335
|
-
*/
|
|
336
|
-
tokenFinalize(signingId: string, signature: Uint8Array): Promise<PdfSessionBlock>;
|
|
337
|
-
/**
|
|
338
|
-
* GET /pdf/token/{signingID}/document — гарын үсэгтэй PDF (зөвхөн үүсгэсэн RP, expiresAt хүртэл), `pdfMaxBytes`
|
|
339
|
-
* хүртэл. SHA-256-ийг {@link tokenFinalize}-ийн `outSha256`-тай заавал тулга.
|
|
340
|
-
*/
|
|
341
|
-
tokenDocument(signingId: string): Promise<Uint8Array>;
|
|
342
|
-
/**
|
|
343
|
-
* {@link document} + тулгалт: татсан байтын SHA-256 нь session poll-ийн `pdf.outSha256`-тай тэнцүү байх ёстой.
|
|
344
|
-
* `expected` — poll-ийн `result.pdf` блок (`documentStatus` READY + `outSha256` заавал) эсвэл SHA-256 hex.
|
|
345
|
-
*
|
|
346
|
-
* @throws {ValidationError} блок READY биш / `outSha256` алга / hash таарахгүй (файлд бүү итгэ).
|
|
347
|
-
*/
|
|
348
|
-
documentVerified(sessionId: string, expected: PdfSessionBlock | string): Promise<Uint8Array>;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
339
|
declare class OrganizationApi {
|
|
352
340
|
private readonly http;
|
|
353
341
|
constructor(http: Http);
|
|
@@ -892,13 +880,6 @@ interface ClientConfig {
|
|
|
892
880
|
defaultCertificateLevel?: CertificateLevel;
|
|
893
881
|
/** HTTP timeout (мс). */
|
|
894
882
|
timeoutMs?: number;
|
|
895
|
-
/** PAdES prepare / баримт татах дуудлагын хугацаа (мс). Анхдагч 80000 ({@link DEFAULT_PDF_TIMEOUT_MS}). */
|
|
896
|
-
pdfTimeoutMs?: number;
|
|
897
|
-
/**
|
|
898
|
-
* `pdf.document` / `pdf.tokenDocument`-ийн санах ойд унших дээд хэмжээ (байт). Анхдагч 64 MiB
|
|
899
|
-
* ({@link DEFAULT_PDF_MAX_BYTES}); хэтэрвэл `ResponseTooLargeError`.
|
|
900
|
-
*/
|
|
901
|
-
pdfMaxBytes?: number;
|
|
902
883
|
/** undici Dispatcher (mTLS client cert). */
|
|
903
884
|
dispatcher?: unknown;
|
|
904
885
|
/** fetch орлуулагч (тест). */
|
|
@@ -924,7 +905,6 @@ declare function resolveBaseUrl(baseUrl: string | undefined): string;
|
|
|
924
905
|
declare class EidClient {
|
|
925
906
|
readonly auth: AuthApi;
|
|
926
907
|
readonly sign: SignApi;
|
|
927
|
-
readonly pdf: PdfApi;
|
|
928
908
|
readonly organization: OrganizationApi;
|
|
929
909
|
readonly person: PersonApi;
|
|
930
910
|
readonly token: TokenApi;
|
|
@@ -933,8 +913,19 @@ declare class EidClient {
|
|
|
933
913
|
/** `credentials.rpName` — иргэний утсанд харагдах RP нэр. */
|
|
934
914
|
readonly rpName: string;
|
|
935
915
|
constructor(cfg: ClientConfig);
|
|
916
|
+
/** {@link SignApi.pdfDigest} — клиент талын PAdES-ийн DTBS-д гарын үсгийн session (PDF CA руу очихгүй). */
|
|
917
|
+
signPdfDigest(input: PdfDigestInput): Promise<PdfDigestSession>;
|
|
918
|
+
/** {@link SignApi.registerSignature} — `pades.complete()`-ийн CMS-ийг CA-д бүртгэнэ (`POST /pdf/signatures`). */
|
|
919
|
+
registerSignature(input: RegisterSignatureInput): Promise<RegisterSignatureResult>;
|
|
936
920
|
}
|
|
937
921
|
|
|
922
|
+
/**
|
|
923
|
+
* `POST /pdf/signatures`-ийн биеийн талбарууд — CA `server/internal/dto/pdf.go` `PDFSignatureRegisterRequest`-ийн JSON
|
|
924
|
+
* tag (CA main d948fdd4, !355). CA `DisallowUnknownFields` тул SDK зөвхөн эдгээрийг илгээнэ. Live discovery-ийн
|
|
925
|
+
* `endpoints.pdf.signatures` тайлбартай гэрээний тест тулгана.
|
|
926
|
+
*/
|
|
927
|
+
declare const PDF_SIGNATURE_REGISTER_FIELDS: readonly ["docID", "revIndex", "medium", "sessionID", "cms", "fileName", "inSha256", "pageSha256", "sigRevSha256", "outSha256", "priorCmsSha256", "priorRevisionSha256", "onBehalfOf", "signerEtsi"];
|
|
928
|
+
|
|
938
929
|
/** SHA-256 digest, base64. Текст эсвэл байтаас. Sign flow-ийн baримтын digest үүсгэхэд. */
|
|
939
930
|
declare function sha256Base64(data: string | Uint8Array): string;
|
|
940
931
|
/** Санамсаргүй RP challenge (default 64 байт), base64. Auth flow-д replay-ээс хамгаална. */
|
|
@@ -1101,6 +1092,20 @@ interface EidLoginSuccess {
|
|
|
1101
1092
|
data?: unknown;
|
|
1102
1093
|
headers?: Record<string, string | string[]>;
|
|
1103
1094
|
}
|
|
1095
|
+
/** Хязгаарлагч: true — зөвшөөрөх, false — 429. */
|
|
1096
|
+
type EidLoginRateLimitFn = (key: string) => boolean | Promise<boolean>;
|
|
1097
|
+
/** Нэг төрлийн хязгаар: санах ойн гулсах цонх, өөрийн функц, эсвэл `false` (хязгааргүй). */
|
|
1098
|
+
type EidLoginRateRule = {
|
|
1099
|
+
limit: number;
|
|
1100
|
+
windowMs: number;
|
|
1101
|
+
} | EidLoginRateLimitFn | false;
|
|
1102
|
+
/** Төрөл тус бүрийн хязгаар: `start` — `start:<ip>`, `push` — `push:<idCode>`. */
|
|
1103
|
+
interface EidLoginRateLimits {
|
|
1104
|
+
start?: EidLoginRateRule;
|
|
1105
|
+
push?: EidLoginRateRule;
|
|
1106
|
+
}
|
|
1107
|
+
/** Анхдагч хязгаар — `rateLimit`-ийн объектод өгөөгүй төрөл энүүгээр үлдэнэ. `{ ...defaultRateLimit, start: … }`. */
|
|
1108
|
+
declare const defaultRateLimit: Readonly<EidLoginRateLimits>;
|
|
1104
1109
|
interface EidLoginOptions {
|
|
1105
1110
|
client: EidClient;
|
|
1106
1111
|
/**
|
|
@@ -1132,10 +1137,15 @@ interface EidLoginOptions {
|
|
|
1132
1137
|
domain?: string;
|
|
1133
1138
|
};
|
|
1134
1139
|
/**
|
|
1135
|
-
*
|
|
1136
|
-
*
|
|
1140
|
+
* Хязгаарлалт. Түлхүүр: `start:<ip>` (ip мэдэгдэж байвал), `push:<idCode>`; false → 429.
|
|
1141
|
+
* Анхдагч {@link defaultRateLimit}: push-д нэг дугаарт 60 секундэд 3 (санах ойд) — MFA fatigue-ээс.
|
|
1142
|
+
*
|
|
1143
|
+
* - Объект `{ start?, push? }` — анхдагчтай НЭГТГЭГДЭНЭ: өгсөн төрөл анхдагчийг дарна, өгөөгүй нь анхдагчаараа.
|
|
1144
|
+
* Утга: `{ limit, windowMs }` (санах ойн гулсах цонх), функц (Redis г.м.) эсвэл `false` (тухайн төрлийг хязгаарлахгүй).
|
|
1145
|
+
* - Функц `(key) => boolean` — бүх түлхүүрт дуудагдана, анхдагч хязгаар ДЭЭР НЭМЭГДЭНЭ (хоёулаа зөвшөөрөх ёстой).
|
|
1146
|
+
* Анхдагчийг сулруулах/солих бол объект хэлбэрээр тухайн төрлийг өг.
|
|
1137
1147
|
*/
|
|
1138
|
-
rateLimit?:
|
|
1148
|
+
rateLimit?: EidLoginRateLimitFn | EidLoginRateLimits;
|
|
1139
1149
|
/**
|
|
1140
1150
|
* `handle(Request)`-ийн клиент IP (`start:<ip>` хязгаарт). Web-standard `Request`-д IP байдаггүй тул эсвэл энийг, эсвэл
|
|
1141
1151
|
* {@link EidLoginOptions.trustProxy}-г өг; аль нь ч үгүй бол IP-ээр хязгаарлахгүй (анхны дуудлагад onError-оор анхааруулна).
|
|
@@ -1187,4 +1197,4 @@ declare function withReturnHint(callbackUrl: string, userAgent: string): string;
|
|
|
1187
1197
|
*/
|
|
1188
1198
|
declare function createEidLogin(opts: EidLoginOptions): EidLogin;
|
|
1189
1199
|
|
|
1190
|
-
export { AcspContext, type AcspV2Params, type ActivityCounts, type ActivityItem, type ActivityQuery, AuthApi, type AuthDefaults, type AuthOptions, type BuildDeviceLinkInput, CITIZEN_ISSUING_CA_SKI, type CertChoiceOptions, type CertCounts, type CertSubject, CertificateLevel, type ClientConfig,
|
|
1200
|
+
export { AcspContext, type AcspV2Params, type ActivityCounts, type ActivityItem, type ActivityQuery, AuthApi, type AuthDefaults, type AuthOptions, type BuildDeviceLinkInput, CITIZEN_ISSUING_CA_SKI, type CertChoiceOptions, type CertCounts, type CertSubject, CertificateLevel, type ClientConfig, type CompletedForRegistration, DEFAULT_BASE_URL, DeviceLinkSession, type DeviceLinkSessionType, type DeviceLinkType, EidClient, type EidLogin, type EidLoginContext, type EidLoginIdentity, type EidLoginMode, type EidLoginOptions, type EidLoginRateLimitFn, type EidLoginRateLimits, type EidLoginRateRule, type EidLoginRequest, type EidLoginResponse, type EidLoginStore, type EidLoginSuccess, type EidLoginTx, FlowType, HashAlgorithm, Http, type HttpConfig, Interaction, NotificationSession, OrganizationApi, PDF_SIGNATURE_REGISTER_FIELDS, type PdfDigestInput, type PdfDigestSession, type PdfDigestSigner, type PersonActivity, PersonApi, PersonBlock, type PersonCertificate, type PersonCertificates, type PersonChild, type PersonChildren, type PersonDevice, type PersonDevices, type PersonSummary, type QrDeviceLinkTickerOptions, type RegisterSignatureInput, type RegisterSignatureResult, RepresentationsResponse, ResponseValidator, type RevocationChecker, type RevocationOutcome, type RevocationStatus, RpCredentials, SessionApi, SessionResult, SignApi, type SignDefaults, type SignOptions, SignatureAlgorithm, type Signer, type SignerRef, 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, buildRegisterBody, createEidLogin, defaultRateLimit, deviceLinkInput, forwardedClientIp, interactionsToBase64, memoryLoginStore, parseSessionResult, parseSubject, personMatchesCertificate, qrDeviceLinkTicker, randomChallenge, registrationFromCompleted, resolveBaseUrl, sha256Base64, tokenAuthDigest, tokenLimitOf, userChallengeOf, verifyPayloadSignature, verifyPrehashedSignature, verifyTokenCertificates, withReturnHint };
|