@islom929/react-eimzo 0.1.0 → 0.3.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/dist/index.js CHANGED
@@ -7,23 +7,687 @@ import {
7
7
  useEffect
8
8
  } from "react";
9
9
 
10
+ // src/sdk-content.ts
11
+ var SDK_SOURCE = `(function(global) {
12
+ 'use strict';
13
+ var _Base64 = global.Base64;
14
+ var version = "2.1.4";
15
+ var buffer;
16
+ if (typeof module !== 'undefined' && module.exports) {
17
+ buffer = require('buffer').Buffer;
18
+ }
19
+ var b64chars
20
+ = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
21
+ var b64tab = function(bin) {
22
+ var t = {};
23
+ for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
24
+ return t;
25
+ }(b64chars);
26
+ var fromCharCode = String.fromCharCode;
27
+ var cb_utob = function(c) {
28
+ if (c.length < 2) {
29
+ var cc = c.charCodeAt(0);
30
+ return cc < 0x80 ? c
31
+ : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
32
+ + fromCharCode(0x80 | (cc & 0x3f)))
33
+ : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
34
+ + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
35
+ + fromCharCode(0x80 | ( cc & 0x3f)));
36
+ } else {
37
+ var cc = 0x10000
38
+ + (c.charCodeAt(0) - 0xD800) * 0x400
39
+ + (c.charCodeAt(1) - 0xDC00);
40
+ return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
41
+ + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
42
+ + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
43
+ + fromCharCode(0x80 | ( cc & 0x3f)));
44
+ }
45
+ };
46
+ var re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;
47
+ var utob = function(u) {
48
+ return u.replace(re_utob, cb_utob);
49
+ };
50
+ var cb_encode = function(ccc) {
51
+ var padlen = [0, 2, 1][ccc.length % 3],
52
+ ord = ccc.charCodeAt(0) << 16
53
+ | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
54
+ | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
55
+ chars = [
56
+ b64chars.charAt( ord >>> 18),
57
+ b64chars.charAt((ord >>> 12) & 63),
58
+ padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
59
+ padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
60
+ ];
61
+ return chars.join('');
62
+ };
63
+ var btoa = global.btoa ? function(b) {
64
+ return global.btoa(b);
65
+ } : function(b) {
66
+ return b.replace(/[\\s\\S]{1,3}/g, cb_encode);
67
+ };
68
+ var _encode = buffer
69
+ ? function (u) { return (new buffer(u)).toString('base64') }
70
+ : function (u) { return btoa(utob(u)) }
71
+ ;
72
+ var encode = function(u, urisafe) {
73
+ return !urisafe
74
+ ? _encode(u)
75
+ : _encode(u).replace(/[+\\/]/g, function(m0) {
76
+ return m0 == '+' ? '-' : '_';
77
+ }).replace(/=/g, '');
78
+ };
79
+ var encodeURI = function(u) { return encode(u, true) };
80
+ var re_btou = new RegExp([
81
+ '[\\xC0-\\xDF][\\x80-\\xBF]',
82
+ '[\\xE0-\\xEF][\\x80-\\xBF]{2}',
83
+ '[\\xF0-\\xF7][\\x80-\\xBF]{3}'
84
+ ].join('|'), 'g');
85
+ var cb_btou = function(cccc) {
86
+ switch(cccc.length) {
87
+ case 4:
88
+ var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
89
+ | ((0x3f & cccc.charCodeAt(1)) << 12)
90
+ | ((0x3f & cccc.charCodeAt(2)) << 6)
91
+ | (0x3f & cccc.charCodeAt(3)),
92
+ offset = cp - 0x10000;
93
+ return (fromCharCode((offset >>> 10) + 0xD800)
94
+ + fromCharCode((offset & 0x3FF) + 0xDC00));
95
+ case 3:
96
+ return fromCharCode(
97
+ ((0x0f & cccc.charCodeAt(0)) << 12)
98
+ | ((0x3f & cccc.charCodeAt(1)) << 6)
99
+ | (0x3f & cccc.charCodeAt(2))
100
+ );
101
+ default:
102
+ return fromCharCode(
103
+ ((0x1f & cccc.charCodeAt(0)) << 6)
104
+ | (0x3f & cccc.charCodeAt(1))
105
+ );
106
+ }
107
+ };
108
+ var btou = function(b) {
109
+ return b.replace(re_btou, cb_btou);
110
+ };
111
+ var cb_decode = function(cccc) {
112
+ var len = cccc.length,
113
+ padlen = len % 4,
114
+ n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
115
+ | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
116
+ | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
117
+ | (len > 3 ? b64tab[cccc.charAt(3)] : 0),
118
+ chars = [
119
+ fromCharCode( n >>> 16),
120
+ fromCharCode((n >>> 8) & 0xff),
121
+ fromCharCode( n & 0xff)
122
+ ];
123
+ chars.length -= [0, 0, 2, 1][padlen];
124
+ return chars.join('');
125
+ };
126
+ var atob = global.atob ? function(a) {
127
+ return global.atob(a);
128
+ } : function(a){
129
+ return a.replace(/[\\s\\S]{1,4}/g, cb_decode);
130
+ };
131
+ var _decode = buffer
132
+ ? function(a) { return (new buffer(a, 'base64')).toString() }
133
+ : function(a) { return btou(atob(a)) };
134
+ var decode = function(a){
135
+ return _decode(
136
+ a.replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })
137
+ .replace(/[^A-Za-z0-9\\+\\/]/g, '')
138
+ );
139
+ };
140
+ var noConflict = function() {
141
+ var Base64 = global.Base64;
142
+ global.Base64 = _Base64;
143
+ return Base64;
144
+ };
145
+ global.Base64 = {
146
+ VERSION: version,
147
+ atob: atob,
148
+ btoa: btoa,
149
+ fromBase64: decode,
150
+ toBase64: encode,
151
+ utob: utob,
152
+ encode: encode,
153
+ encodeURI: encodeURI,
154
+ btou: btou,
155
+ decode: decode,
156
+ noConflict: noConflict
157
+ };
158
+ if (typeof Object.defineProperty === 'function') {
159
+ var noEnum = function(v){
160
+ return {value:v,enumerable:false,writable:true,configurable:true};
161
+ };
162
+ global.Base64.extendString = function () {
163
+ Object.defineProperty(
164
+ String.prototype, 'fromBase64', noEnum(function () {
165
+ return decode(this)
166
+ }));
167
+ Object.defineProperty(
168
+ String.prototype, 'toBase64', noEnum(function (urisafe) {
169
+ return encode(this, urisafe)
170
+ }));
171
+ Object.defineProperty(
172
+ String.prototype, 'toBase64URI', noEnum(function () {
173
+ return encode(this, true)
174
+ }));
175
+ };
176
+ }
177
+ })(this);
178
+
179
+ CAPIWS = (typeof EIMZOEXT !== 'undefined') ? EIMZOEXT : {
180
+ URL: (window.location.protocol.toLowerCase() === "https:" ? "wss://127.0.0.1:64443" : "ws://127.0.0.1:64646") + "/service/cryptapi",
181
+ callFunction: function(funcDef, callback, error){
182
+ if (!window.WebSocket){
183
+ if(error)
184
+ error();
185
+ return;
186
+ }
187
+ var socket;
188
+ try{
189
+ socket = new WebSocket(this.URL);
190
+ } catch (e){
191
+ error(e);
192
+ }
193
+ socket.onclose = function(e){
194
+ if(error) {
195
+ if(e.code != 1000){
196
+ error(e.code);
197
+ }
198
+ }
199
+ };
200
+ socket.onmessage = function(event){
201
+ var data = JSON.parse(event.data);
202
+ socket.close();
203
+ callback(event,data);
204
+ };
205
+ socket.onopen = function(){
206
+ socket.send(JSON.stringify(funcDef));
207
+ };
208
+ },
209
+ version: function(callback, error){
210
+ if (!window.WebSocket){
211
+ if(error)
212
+ error();
213
+ return;
214
+ }
215
+ var socket;
216
+ try{
217
+ socket = new WebSocket(this.URL);
218
+ } catch (e){
219
+ error(e);
220
+ }
221
+ socket.onclose = function(e){
222
+ if(error) {
223
+ if(e.code != 1000){
224
+ error(e.code);
225
+ }
226
+ }
227
+ };
228
+ socket.onmessage = function(event){
229
+ var data = JSON.parse(event.data);
230
+ socket.close();
231
+ callback(event,data);
232
+ };
233
+ socket.onopen = function(){
234
+ var o = {name: 'version'};
235
+ socket.send(JSON.stringify(o));
236
+ };
237
+ },
238
+ apidoc: function(callback, error){
239
+ if (!window.WebSocket){
240
+ if(error)
241
+ error();
242
+ return;
243
+ }
244
+ var socket;
245
+ try{
246
+ socket = new WebSocket(this.URL);
247
+ } catch (e){
248
+ error(e);
249
+ }
250
+ socket.onclose = function(e){
251
+ if(error) {
252
+ if(e.code != 1000){
253
+ error(e.code);
254
+ }
255
+ }
256
+ };
257
+ socket.onmessage = function(event){
258
+ var data = JSON.parse(event.data);
259
+ socket.close();
260
+ callback(event,data);
261
+ };
262
+ socket.onopen = function(){
263
+ var o = {name: 'apidoc'};
264
+ socket.send(JSON.stringify(o));
265
+ };
266
+ },
267
+ apikey: function(domainAndKey, callback, error){
268
+ if (!window.WebSocket){
269
+ if(error)
270
+ error();
271
+ return;
272
+ }
273
+ var socket;
274
+ try{
275
+ socket = new WebSocket(this.URL);
276
+ } catch (e){
277
+ error(e);
278
+ }
279
+ socket.onclose = function(e){
280
+ if(error) {
281
+ if(e.code != 1000){
282
+ error(e.code);
283
+ }
284
+ }
285
+ };
286
+ socket.onmessage = function(event){
287
+ var data = JSON.parse(event.data);
288
+ socket.close();
289
+ callback(event,data);
290
+ };
291
+ socket.onopen = function(){
292
+ var o = {name: 'apikey', arguments: domainAndKey};
293
+ socket.send(JSON.stringify(o));
294
+ };
295
+ }
296
+ };
297
+
298
+ Date.prototype.yyyymmdd = function () {
299
+ var yyyy = this.getFullYear().toString();
300
+ var mm = (this.getMonth() + 1).toString();
301
+ var dd = this.getDate().toString();
302
+ return yyyy + (mm[1] ? mm : "0" + mm[0]) + (dd[1] ? dd : "0" + dd[0]);
303
+ };
304
+ Date.prototype.ddmmyyyy = function () {
305
+ var yyyy = this.getFullYear().toString();
306
+ var mm = (this.getMonth() + 1).toString();
307
+ var dd = this.getDate().toString();
308
+ return (dd[1] ? dd : "0" + dd[0]) + "." + (mm[1] ? mm : "0" + mm[0]) + "." + yyyy;
309
+ };
310
+ var dates = {
311
+ convert: function (d) {
312
+ return (
313
+ d.constructor === Date ? d :
314
+ d.constructor === Array ? new Date(d[0], d[1], d[2]) :
315
+ d.constructor === Number ? new Date(d) :
316
+ d.constructor === String ? new Date(d) :
317
+ typeof d === "object" ? new Date(d.year, d.month, d.date) :
318
+ NaN
319
+ );
320
+ },
321
+ compare: function (a, b) {
322
+ return (
323
+ isFinite(a = this.convert(a).valueOf()) &&
324
+ isFinite(b = this.convert(b).valueOf()) ?
325
+ (a > b) - (a < b) :
326
+ NaN
327
+ );
328
+ },
329
+ inRange: function (d, start, end) {
330
+ return (
331
+ isFinite(d = this.convert(d).valueOf()) &&
332
+ isFinite(start = this.convert(start).valueOf()) &&
333
+ isFinite(end = this.convert(end).valueOf()) ?
334
+ start <= d && d <= end :
335
+ NaN
336
+ );
337
+ }
338
+ };
339
+ String.prototype.splitKeep = function (splitter, ahead) {
340
+ var self = this;
341
+ var result = [];
342
+ if (splitter != '') {
343
+ function getSubst(value) {
344
+ var substChar = value[0] == '0' ? '1' : '0';
345
+ var subst = '';
346
+ for (var i = 0; i < value.length; i++) {
347
+ subst += substChar;
348
+ }
349
+ return subst;
350
+ };
351
+ var matches = [];
352
+ var replaceName = splitter instanceof RegExp ? "replace" : "replaceAll";
353
+ var r = self[replaceName](splitter, function (m, i, e) {
354
+ matches.push({value: m, index: i});
355
+ return getSubst(m);
356
+ });
357
+ var lastIndex = 0;
358
+ for (var i = 0; i < matches.length; i++) {
359
+ var m = matches[i];
360
+ var nextIndex = ahead == true ? m.index : m.index + m.value.length;
361
+ if (nextIndex != lastIndex) {
362
+ var part = self.substring(lastIndex, nextIndex);
363
+ result.push(part);
364
+ lastIndex = nextIndex;
365
+ }
366
+ };
367
+ if (lastIndex < self.length) {
368
+ var part = self.substring(lastIndex, self.length);
369
+ result.push(part);
370
+ };
371
+ } else {
372
+ result.add(self);
373
+ };
374
+ return result;
375
+ };
376
+
377
+ var EIMZOClient = {
378
+ NEW_API: false,
379
+ NEW_API2: false,
380
+ NEW_API3: false,
381
+ // Add your production domain and API key below:
382
+ // 'yourdomain.uz', 'YOUR_API_KEY_HERE',
383
+ API_KEYS: [
384
+ 'localhost', '96D0C1491615C82B9A54D9989779DF825B690748224C2B04F500F370D51827CE2644D8D4A82C18184D73AB8530BB8ED537269603F61DB0D03D2104ABF789970B',
385
+ '127.0.0.1', 'A7BCFA5D490B351BE0754130DF03A068F855DB4333D43921125B9CF2670EF6A40370C646B90401955E1F7BC9CDBF59CE0B2C5467D820BE189C845D0B79CFC96F'
386
+ ],
387
+ checkVersion: function(success, fail){
388
+ CAPIWS.version(function (event, data) {
389
+ if(data.success === true){
390
+ if(data.major && data.minor){
391
+ var installedVersion = parseInt(data.major) * 100 + parseInt(data.minor);
392
+ EIMZOClient.NEW_API = installedVersion >= 336;
393
+ EIMZOClient.NEW_API2 = installedVersion >= 412;
394
+ EIMZOClient.NEW_API3 = installedVersion >= 486;
395
+ success(data.major, data.minor);
396
+ } else {
397
+ fail(null, 'E-IMZO Version is undefined');
398
+ }
399
+ } else {
400
+ fail(null, data.reason);
401
+ }
402
+ }, function (e) {
403
+ fail(e, null);
404
+ });
405
+ },
406
+ installApiKeys: function(success, fail){
407
+ CAPIWS.apikey(EIMZOClient.API_KEYS, function (event, data) {
408
+ if (data.success) {
409
+ success();
410
+ } else {
411
+ fail(null,data.reason);
412
+ }
413
+ }, function (e) {
414
+ fail(e, null);
415
+ });
416
+ },
417
+ listAllUserKeys: function(itemIdGen, itemUiGen, success, fail){
418
+ var items = [];
419
+ var errors = [];
420
+ if(!EIMZOClient.NEW_API){
421
+ fail(null, 'Please install new version of E-IMZO');
422
+ } else {
423
+ if(EIMZOClient.NEW_API2){
424
+ EIMZOClient._findPfxs2(itemIdGen, itemUiGen, items, errors, function (firstItmId2) {
425
+ if(items.length === 0 && errors.length > 0){
426
+ fail(errors[0].e, errors[0].r);
427
+ } else {
428
+ var firstId = null;
429
+ if (items.length === 1) {
430
+ if (firstItmId2) {
431
+ firstId = firstItmId2;
432
+ }
433
+ }
434
+ success(items, firstId);
435
+ }
436
+ });
437
+ } else {
438
+ EIMZOClient._findPfxs2(itemIdGen, itemUiGen, items, errors, function (firstItmId2) {
439
+ EIMZOClient._findTokens2(itemIdGen, itemUiGen, items, errors, function (firstItmId3) {
440
+ if(items.length === 0 && errors.length > 0){
441
+ fail(errors[0].e, errors[0].r);
442
+ } else {
443
+ var firstId = null;
444
+ if (items.length === 1) {
445
+ if (firstItmId2) {
446
+ firstId = firstItmId2;
447
+ } else if (firstItmId3) {
448
+ firstId = firstItmId3;
449
+ }
450
+ }
451
+ success(items, firstId);
452
+ }
453
+ });
454
+ });
455
+ }
456
+ }
457
+ },
458
+ idCardIsPLuggedIn: function(success, fail){
459
+ if(!EIMZOClient.NEW_API2){
460
+ success(false);
461
+ } else {
462
+ CAPIWS.callFunction({plugin: "idcard", name: "list_readers"}, function (event, data) {
463
+ if (data.success) {
464
+ success(data.readers.length>0);
465
+ } else {
466
+ fail(null, data.reason);
467
+ }
468
+ }, function (e) {
469
+ fail(e, null);
470
+ });
471
+ }
472
+ },
473
+ isBAIKTokenPLuggedIn: function(success, fail){
474
+ if(!EIMZOClient.NEW_API3){
475
+ success(false);
476
+ } else {
477
+ CAPIWS.callFunction({plugin: "baikey", name: "list_tokens"}, function (event, data) {
478
+ if (data.success) {
479
+ success(data.tokens.length>0);
480
+ } else {
481
+ fail(null, data.reason);
482
+ }
483
+ }, function (e) {
484
+ fail(e, null);
485
+ });
486
+ }
487
+ },
488
+ isCKCPLuggedIn: function(success, fail){
489
+ if(!EIMZOClient.NEW_API3){
490
+ success(false);
491
+ } else {
492
+ CAPIWS.callFunction({plugin: "ckc", name: "list_ckc"}, function (event, data) {
493
+ if (data.success) {
494
+ success(data.devices.length>0);
495
+ } else {
496
+ fail(null, data.reason);
497
+ }
498
+ }, function (e) {
499
+ fail(e, null);
500
+ });
501
+ }
502
+ },
503
+ loadKey: function(itemObject, success, fail, verifyPassword){
504
+ if (itemObject) {
505
+ var vo = itemObject;
506
+ if (vo.type === "pfx") {
507
+ CAPIWS.callFunction({plugin: "pfx", name: "load_key", arguments: [vo.disk, vo.path, vo.name, vo.alias]}, function (event, data) {
508
+ if (data.success) {
509
+ var id = data.keyId;
510
+ if(verifyPassword){
511
+ CAPIWS.callFunction({name: "verify_password", plugin: "pfx", arguments: [id]}, function (event, data) {
512
+ if (data.success) {
513
+ success(id);
514
+ } else {
515
+ fail(null, data.reason);
516
+ }
517
+ }, function (e) {
518
+ fail(e, null);
519
+ });
520
+ } else {
521
+ success(id);
522
+ }
523
+ } else {
524
+ fail(null, data.reason);
525
+ }
526
+ }, function (e) {
527
+ fail(e, null);
528
+ });
529
+ } else if (vo.type === "ftjc") {
530
+ CAPIWS.callFunction({plugin: "ftjc", name: "load_key", arguments: [vo.cardUID]}, function (event, data) {
531
+ if (data.success) {
532
+ var id = data.keyId;
533
+ if(verifyPassword){
534
+ CAPIWS.callFunction({plugin: "ftjc", name: "verify_pin", arguments: [id,'1']}, function (event, data) {
535
+ if (data.success) {
536
+ success(id);
537
+ } else {
538
+ fail(null, data.reason);
539
+ }
540
+ }, function (e) {
541
+ fail(e, null);
542
+ });
543
+ } else {
544
+ success(id);
545
+ }
546
+ } else {
547
+ fail(null, data.reason);
548
+ }
549
+ }, function (e) {
550
+ fail(e, null);
551
+ });
552
+ }
553
+ }
554
+ },
555
+ createPkcs7: function(id, data, timestamper, success, fail, detached, isDataBase64Encoded){
556
+ var data64;
557
+ if(isDataBase64Encoded === true){
558
+ data64 = data
559
+ }else {
560
+ data64 = Base64.encode(data);
561
+ }
562
+ if(detached === true){
563
+ detached = 'yes';
564
+ } else {
565
+ detached = 'no';
566
+ }
567
+ CAPIWS.callFunction({plugin: "pkcs7", name: "create_pkcs7", arguments: [data64, id, detached]}, function (event, data) {
568
+ if (data.success) {
569
+ var pkcs7 = data.pkcs7_64;
570
+ success(pkcs7);
571
+ } else {
572
+ fail(null, data.reason);
573
+ }
574
+ }, function (e) {
575
+ fail(e, null);
576
+ });
577
+ },
578
+ _getX500Val: function (s, f) {
579
+ var res = s.splitKeep(/,[A-Z]+=/g, true);
580
+ for (var i in res) {
581
+ var n = res[i].search((i > 0 ? "," : "") + f + "=");
582
+ if (n !== -1) {
583
+ return res[i].slice(n + f.length + 1 + (i > 0 ? 1 : 0));
584
+ }
585
+ }
586
+ return "";
587
+ },
588
+ _findPfxs2: function (itemIdGen, itemUiGen, items, errors, callback) {
589
+ var itmkey0;
590
+ CAPIWS.callFunction({plugin: "pfx", name: "list_all_certificates"}, function (event, data) {
591
+ if (data.success) {
592
+ for (var rec in data.certificates) {
593
+ var el = data.certificates[rec];
594
+ var x500name_ex = el.alias.toUpperCase();
595
+ x500name_ex = x500name_ex.replace("1.2.860.3.16.1.1=", "INN=");
596
+ x500name_ex = x500name_ex.replace("1.2.860.3.16.1.2=", "PINFL=");
597
+ var vo = {
598
+ disk: el.disk,
599
+ path: el.path,
600
+ name: el.name,
601
+ alias: el.alias,
602
+ serialNumber: EIMZOClient._getX500Val(x500name_ex, "SERIALNUMBER"),
603
+ validFrom: new Date(EIMZOClient._getX500Val(x500name_ex, "VALIDFROM").replace(/\\./g, "-").replace(" ", "T")),
604
+ validTo: new Date(EIMZOClient._getX500Val(x500name_ex, "VALIDTO").replace(/\\./g, "-").replace(" ", "T")),
605
+ CN: EIMZOClient._getX500Val(x500name_ex, "CN"),
606
+ TIN: (EIMZOClient._getX500Val(x500name_ex, "INN") ? EIMZOClient._getX500Val(x500name_ex, "INN") : EIMZOClient._getX500Val(x500name_ex, "UID")),
607
+ UID: EIMZOClient._getX500Val(x500name_ex, "UID"),
608
+ PINFL: EIMZOClient._getX500Val(x500name_ex, "PINFL"),
609
+ O: EIMZOClient._getX500Val(x500name_ex, "O"),
610
+ T: EIMZOClient._getX500Val(x500name_ex, "T"),
611
+ type: 'pfx'
612
+ };
613
+ if (!vo.TIN && !vo.PINFL)
614
+ continue;
615
+ var itmkey = itemIdGen(vo,rec);
616
+ if (!itmkey0) {
617
+ itmkey0 = itmkey;
618
+ }
619
+ var itm = itemUiGen(itmkey, vo);
620
+ items.push(itm);
621
+ }
622
+ } else {
623
+ errors.push({r: data.reason});
624
+ }
625
+ callback(itmkey0);
626
+ }, function (e) {
627
+ errors.push({e: e});
628
+ callback(itmkey0);
629
+ });
630
+ },
631
+ _findTokens2: function (itemIdGen, itemUiGen, items, errors, callback) {
632
+ var itmkey0;
633
+ CAPIWS.callFunction({plugin: "ftjc", name: "list_all_keys", arguments:['']}, function (event, data) {
634
+ if (data.success) {
635
+ for (var rec in data.tokens) {
636
+ var el = data.tokens[rec];
637
+ var x500name_ex = el.info.toUpperCase();
638
+ x500name_ex = x500name_ex.replace("1.2.860.3.16.1.1=", "INN=");
639
+ x500name_ex = x500name_ex.replace("1.2.860.3.16.1.2=", "PINFL=");
640
+ var vo = {
641
+ cardUID: el.cardUID,
642
+ statusInfo: el.statusInfo,
643
+ ownerName: el.ownerName,
644
+ info: el.info,
645
+ serialNumber: EIMZOClient._getX500Val(x500name_ex, "SERIALNUMBER"),
646
+ validFrom: new Date(EIMZOClient._getX500Val(x500name_ex, "VALIDFROM")),
647
+ validTo: new Date(EIMZOClient._getX500Val(x500name_ex, "VALIDTO")),
648
+ CN: EIMZOClient._getX500Val(x500name_ex, "CN"),
649
+ TIN: (EIMZOClient._getX500Val(x500name_ex, "INN") ? EIMZOClient._getX500Val(x500name_ex, "INN") : EIMZOClient._getX500Val(x500name_ex, "UID")),
650
+ UID: EIMZOClient._getX500Val(x500name_ex, "UID"),
651
+ PINFL: EIMZOClient._getX500Val(x500name_ex, "PINFL"),
652
+ O: EIMZOClient._getX500Val(x500name_ex, "O"),
653
+ T: EIMZOClient._getX500Val(x500name_ex, "T"),
654
+ type: 'ftjc'
655
+ };
656
+ if (!vo.TIN && !vo.PINFL)
657
+ continue;
658
+ var itmkey = itemIdGen(vo,rec);
659
+ if (!itmkey0) {
660
+ itmkey0 = itmkey;
661
+ }
662
+ var itm = itemUiGen(itmkey, vo);
663
+ items.push(itm);
664
+ }
665
+ } else {
666
+ errors.push({r: data.reason});
667
+ }
668
+ callback(itmkey0);
669
+ }, function (e) {
670
+ errors.push({e: e});
671
+ callback(itmkey0);
672
+ });
673
+ }
674
+ };
675
+ `;
676
+
10
677
  // src/eimzo.ts
11
678
  var sdkLoaded = false;
12
- function loadSDK(sdkPath) {
13
- return new Promise((resolve, reject) => {
679
+ function loadSDK() {
680
+ return new Promise((resolve) => {
14
681
  if (sdkLoaded || typeof EIMZOClient !== "undefined") {
15
682
  sdkLoaded = true;
16
683
  resolve();
17
684
  return;
18
685
  }
19
686
  const script = document.createElement("script");
20
- script.src = sdkPath || "/e-imzo.js";
21
- script.onload = () => {
22
- sdkLoaded = true;
23
- resolve();
24
- };
25
- script.onerror = () => reject("Failed to load E-IMZO SDK");
687
+ script.textContent = SDK_SOURCE;
26
688
  document.head.appendChild(script);
689
+ sdkLoaded = true;
690
+ resolve();
27
691
  });
28
692
  }
29
693
  function checkVersion() {
@@ -111,8 +775,8 @@ function checkCkc() {
111
775
  );
112
776
  });
113
777
  }
114
- async function install(apiKeys, sdkPath) {
115
- await loadSDK(sdkPath);
778
+ async function install(apiKeys) {
779
+ await loadSDK();
116
780
  await checkVersion();
117
781
  await installApiKeys(apiKeys);
118
782
  }
@@ -120,7 +784,7 @@ async function install(apiKeys, sdkPath) {
120
784
  // src/provider.tsx
121
785
  import { jsx } from "react/jsx-runtime";
122
786
  var EimzoContext = createContext(null);
123
- function EimzoProvider({ apiKeys, sdkPath, children }) {
787
+ function EimzoProvider({ apiKeys, children }) {
124
788
  const [isInstalled, setIsInstalled] = useState(false);
125
789
  const [isLoading, setIsLoading] = useState(false);
126
790
  const [keyList, setKeyList] = useState([]);
@@ -130,7 +794,7 @@ function EimzoProvider({ apiKeys, sdkPath, children }) {
130
794
  ckc: false
131
795
  });
132
796
  useEffect(() => {
133
- install(apiKeys, sdkPath).then(() => setIsInstalled(true)).catch(() => setIsInstalled(false));
797
+ install(apiKeys).then(() => setIsInstalled(true)).catch(() => setIsInstalled(false));
134
798
  }, []);
135
799
  const loadKeys = useCallback(async () => {
136
800
  setIsLoading(true);
@@ -154,7 +818,7 @@ function EimzoProvider({ apiKeys, sdkPath, children }) {
154
818
  }
155
819
  }, []);
156
820
  const sign = useCallback(
157
- async ({ keyId, data }) => {
821
+ async ({ keyId, data, onSuccess, onError }) => {
158
822
  setIsLoading(true);
159
823
  try {
160
824
  let id;
@@ -164,7 +828,10 @@ function EimzoProvider({ apiKeys, sdkPath, children }) {
164
828
  id = keyId;
165
829
  }
166
830
  const pkcs7 = await createPkcs7(id, data);
167
- return pkcs7;
831
+ onSuccess(pkcs7);
832
+ } catch (err) {
833
+ const message = typeof err === "string" ? err : "E-IMZO signing failed";
834
+ onError?.(message);
168
835
  } finally {
169
836
  setIsLoading(false);
170
837
  }