orion-design 0.1.48 → 0.1.50

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. package/dist/base64-KVpG-D_n.js +103 -0
  2. package/dist/base64-KVpG-D_n.js.map +1 -0
  3. package/dist/components/Button/index.d.ts +217 -4
  4. package/dist/components/Button/index.js +17 -25
  5. package/dist/components/Button/index.js.map +1 -1
  6. package/dist/components/Card/index.d.ts +1 -3
  7. package/dist/components/Form/FileInput/FileInput.vue.d.ts +3 -100
  8. package/dist/components/Form/Form.vue.d.ts +2 -70
  9. package/dist/components/Form/LovInput/LovInput.vue.d.ts +21526 -1248
  10. package/dist/components/Form/TableSelect/TableSelect.vue.d.ts +21526 -1248
  11. package/dist/components/Form/index.d.ts +2 -38
  12. package/dist/components/Form/index.js +126 -127
  13. package/dist/components/Form/index.js.map +1 -1
  14. package/dist/components/LovTable/LovPagetable.vue.d.ts +2 -262
  15. package/dist/components/LovTable/LovQuerytable.vue.d.ts +2 -178
  16. package/dist/components/LovTable/index.d.ts +4 -233
  17. package/dist/components/Message/index.d.ts +27 -0
  18. package/dist/components/Message/index.js +16 -0
  19. package/dist/components/Message/index.js.map +1 -0
  20. package/dist/components/MessageBox/index.d.ts +13 -0
  21. package/dist/components/MessageBox/index.js +27 -0
  22. package/dist/components/MessageBox/index.js.map +1 -0
  23. package/dist/components/Space/index.d.ts +1 -10
  24. package/dist/components/TableSelectPagetable/TableSelectPagetable.vue.d.ts +2 -262
  25. package/dist/components/TableSelectPagetable/index.d.ts +2 -136
  26. package/dist/components/Tabs/index.js +1 -1
  27. package/dist/components/Tree/Tree.vue.d.ts +2 -160
  28. package/dist/components/Tree/index.d.ts +2 -84
  29. package/dist/components/_util/dom/element.js +1 -1
  30. package/dist/components/_util/dom/style.js +1 -1
  31. package/dist/components/_util/error.js +1 -1
  32. package/dist/components/_util/functions.js +1 -1
  33. package/dist/components/_util/index.js +1 -1
  34. package/dist/components/_util/objects.js +1 -1
  35. package/dist/components/_util/strings.js +2 -2
  36. package/dist/components/_util/types.js +2 -2
  37. package/dist/components/_util/vue/install.js +1 -1
  38. package/dist/components/_util/vue/props/runtime.js +1 -1
  39. package/dist/components/_util/vue/refs.js +1 -1
  40. package/dist/components/_util/vue/vnode.js +1 -1
  41. package/dist/components/index.d.ts +2 -0
  42. package/dist/components/index.js +38 -34
  43. package/dist/components/index.js.map +1 -1
  44. package/dist/{functions-DzLqXvGt.js → functions-LOH6x_02.js} +2 -2
  45. package/dist/functions-LOH6x_02.js.map +1 -0
  46. package/dist/index-BW3nOBfD.js +714 -0
  47. package/dist/index-BW3nOBfD.js.map +1 -0
  48. package/dist/index.js +24 -20
  49. package/dist/index.js.map +1 -1
  50. package/dist/request/disivion/DivisionErrorHandler.d.ts +0 -2
  51. package/dist/request/disivion/DivisionErrorHandler.js +18 -28
  52. package/dist/request/disivion/DivisionErrorHandler.js.map +1 -1
  53. package/dist/request/disivion/index.d.ts +1 -0
  54. package/dist/request/disivion/index.js +73 -168
  55. package/dist/request/disivion/index.js.map +1 -1
  56. package/dist/request/error/ResponseError404.d.ts +7 -0
  57. package/dist/request/error/ResponseError404.js +10 -0
  58. package/dist/request/error/ResponseError404.js.map +1 -0
  59. package/dist/request/error/ResponseError500.d.ts +6 -0
  60. package/dist/request/error/ResponseError500.js +10 -0
  61. package/dist/request/error/ResponseError500.js.map +1 -0
  62. package/dist/request/error/{BizExceptionResponseError.d.ts → ResponseErrorBizException.d.ts} +1 -1
  63. package/dist/request/error/{BizExceptionResponseError.js → ResponseErrorBizException.js} +2 -2
  64. package/dist/request/error/ResponseErrorBizException.js.map +1 -0
  65. package/dist/request/error/{ExceptionResponseError.d.ts → ResponseErrorException.d.ts} +1 -1
  66. package/dist/request/error/{ExceptionResponseError.js → ResponseErrorException.js} +2 -2
  67. package/dist/request/error/ResponseErrorException.js.map +1 -0
  68. package/dist/request/error/{SessionExceptionResponseError.d.ts → ResponseErrorSessionException.d.ts} +1 -1
  69. package/dist/request/error/{SessionExceptionResponseError.js → ResponseErrorSessionException.js} +2 -2
  70. package/dist/request/error/{SessionExceptionResponseError.js.map → ResponseErrorSessionException.js.map} +1 -1
  71. package/dist/request/index.d.ts +12 -3
  72. package/dist/request/index.js +35 -11
  73. package/dist/request/index.js.map +1 -1
  74. package/dist/request/leaf7/Leaf7EncryptRequestParser.d.ts +8 -0
  75. package/dist/request/leaf7/Leaf7EncryptRequestParser.js +28 -0
  76. package/dist/request/leaf7/Leaf7EncryptRequestParser.js.map +1 -0
  77. package/dist/request/leaf7/Leaf7EncryptResponseParser.d.ts +8 -0
  78. package/dist/request/leaf7/Leaf7EncryptResponseParser.js +42 -0
  79. package/dist/request/leaf7/Leaf7EncryptResponseParser.js.map +1 -0
  80. package/dist/request/leaf7/Leaf7ErrorHandler.d.ts +7 -0
  81. package/dist/request/leaf7/Leaf7ErrorHandler.js +51 -0
  82. package/dist/request/leaf7/Leaf7ErrorHandler.js.map +1 -0
  83. package/dist/request/leaf7/Leaf7ResponseParser.d.ts +5 -0
  84. package/dist/request/leaf7/Leaf7ResponseParser.js +17 -0
  85. package/dist/request/leaf7/Leaf7ResponseParser.js.map +1 -0
  86. package/dist/request/leaf7/index.d.ts +20 -0
  87. package/dist/request/leaf7/index.js +130 -0
  88. package/dist/request/leaf7/index.js.map +1 -0
  89. package/dist/request/leaf7/smCrypto/sm2/asn1.d.ts +14 -0
  90. package/dist/request/leaf7/smCrypto/sm2/asn1.js +81 -0
  91. package/dist/request/leaf7/smCrypto/sm2/asn1.js.map +1 -0
  92. package/dist/request/leaf7/smCrypto/sm2/ec.d.ts +119 -0
  93. package/dist/request/leaf7/smCrypto/sm2/ec.js +199 -0
  94. package/dist/request/leaf7/smCrypto/sm2/ec.js.map +1 -0
  95. package/dist/request/leaf7/smCrypto/sm2/index.d.ts +45 -0
  96. package/dist/request/leaf7/smCrypto/sm2/index.js +102 -0
  97. package/dist/request/leaf7/smCrypto/sm2/index.js.map +1 -0
  98. package/dist/request/leaf7/smCrypto/sm2/sm3.d.ts +10 -0
  99. package/dist/request/leaf7/smCrypto/sm2/sm3.js +69 -0
  100. package/dist/request/leaf7/smCrypto/sm2/sm3.js.map +1 -0
  101. package/dist/request/leaf7/smCrypto/sm2/utils.d.ts +66 -0
  102. package/dist/request/leaf7/smCrypto/sm2/utils.js +91 -0
  103. package/dist/request/leaf7/smCrypto/sm2/utils.js.map +1 -0
  104. package/dist/request/leaf7/smCrypto/sm3/index.d.ts +1 -0
  105. package/dist/request/leaf7/smCrypto/sm3/index.js +45 -0
  106. package/dist/request/leaf7/smCrypto/sm3/index.js.map +1 -0
  107. package/dist/request/leaf7/smCrypto/sm4/index.d.ts +5 -0
  108. package/dist/request/leaf7/smCrypto/sm4/index.js +399 -0
  109. package/dist/request/leaf7/smCrypto/sm4/index.js.map +1 -0
  110. package/dist/request/leaf7/smCrypto/smCrypto.d.ts +3 -0
  111. package/dist/request/leaf7/smCrypto/smCrypto.js +9 -0
  112. package/dist/request/leaf7/smCrypto/smCrypto.js.map +1 -0
  113. package/dist/request/leaf7/types.d.ts +11 -0
  114. package/dist/request/leaf7/types.js +2 -0
  115. package/dist/request/leaf7/types.js.map +1 -0
  116. package/dist/request/utils/readBlob.d.ts +1 -0
  117. package/dist/request/utils/readBlob.js +12 -0
  118. package/dist/request/utils/readBlob.js.map +1 -0
  119. package/dist/utils/functions.js +1 -1
  120. package/dist/version/version.d.ts +1 -1
  121. package/dist/version/version.js +1 -1
  122. package/dist/version/version.js.map +1 -1
  123. package/package.json +2 -1
  124. package/dist/components/Button/Button.vue.d.ts +0 -16
  125. package/dist/functions-DzLqXvGt.js.map +0 -1
  126. package/dist/request/error/BizExceptionResponseError.js.map +0 -1
  127. package/dist/request/error/ExceptionResponseError.js.map +0 -1
@@ -1,14 +1,38 @@
1
- import { config as s, download as i, request as r, upload as n } from "./disivion/index.js";
2
- import { default as d } from "./error/BizExceptionResponseError.js";
3
- import { default as t } from "./error/SessionExceptionResponseError.js";
4
- import { default as l } from "./error/ExceptionResponseError.js";
1
+ import { config as r, download as s, request as a, upload as t } from "./disivion/index.js";
2
+ import { default as n } from "./disivion/DivisionResponseParser.js";
3
+ import { default as i } from "./disivion/DivisionErrorHandler.js";
4
+ import { config as l, download as u, request as x, upload as E } from "./leaf7/index.js";
5
+ import { default as m } from "./leaf7/Leaf7EncryptRequestParser.js";
6
+ import { default as v } from "./leaf7/Leaf7EncryptResponseParser.js";
7
+ import { default as g } from "./leaf7/Leaf7ResponseParser.js";
8
+ import { default as D } from "./leaf7/Leaf7ErrorHandler.js";
9
+ import { default as P, default as y } from "./error/ResponseErrorBizException.js";
10
+ import { default as B, default as C } from "./error/ResponseErrorSessionException.js";
11
+ import { default as S, default as U } from "./error/ResponseErrorException.js";
12
+ import { default as h } from "./error/ResponseError404.js";
13
+ import { default as k } from "./error/ResponseError500.js";
5
14
  export {
6
- d as BizExceptionResponseError,
7
- l as ExceptionResponseError,
8
- t as SessionExceptionResponseError,
9
- s as divisionConfig,
10
- i as divisionDownload,
11
- r as divisionRequest,
12
- n as divisionUpload
15
+ P as BizExceptionResponseError,
16
+ i as DivisionErrorHandler,
17
+ n as DivisionResponseParser,
18
+ S as ExceptionResponseError,
19
+ m as Leaf7EncryptRequestParser,
20
+ v as Leaf7EncryptResponseParser,
21
+ D as Leaf7ErrorHandler,
22
+ g as Leaf7ResponseParser,
23
+ h as ResponseError404,
24
+ k as ResponseError500,
25
+ y as ResponseErrorBizException,
26
+ U as ResponseErrorException,
27
+ B as ResponseErrorSessionException,
28
+ C as SessionExceptionResponseError,
29
+ r as divisionConfig,
30
+ s as divisionDownload,
31
+ a as divisionRequest,
32
+ t as divisionUpload,
33
+ l as leaf7Config,
34
+ u as leaf7Download,
35
+ x as leaf7Request,
36
+ E as leaf7Upload
13
37
  };
14
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ import { AxiosRequestConfig } from 'axios';
2
+ import { default as RequestFilterChain } from '../RequestFilterChain';
3
+ import { Leaf7EncryptOptions } from './types';
4
+ export default class Leaf7EncryptRequestParser {
5
+ options: Leaf7EncryptOptions;
6
+ constructor(options: Leaf7EncryptOptions);
7
+ doFilter(request: AxiosRequestConfig, chain: RequestFilterChain): Promise<void>;
8
+ }
@@ -0,0 +1,28 @@
1
+ var f = Object.defineProperty;
2
+ var y = (e, t, o) => t in e ? f(e, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[t] = o;
3
+ var p = (e, t, o) => y(e, typeof t != "symbol" ? t + "" : t, o);
4
+ import c from "./smCrypto/sm2/index.js";
5
+ import E from "./smCrypto/sm3/index.js";
6
+ import { cloneDeep as g } from "lodash-es";
7
+ class b {
8
+ constructor(t) {
9
+ p(this, "options");
10
+ this.options = t;
11
+ }
12
+ async doFilter(t, o) {
13
+ const { prefix: r, _s1: m, _s2: s } = this.options;
14
+ let n;
15
+ if (t.data instanceof FormData)
16
+ return o.doFilter(t, o);
17
+ {
18
+ if (n = g(t.data), n == null || n == "")
19
+ return o.doFilter(t, o);
20
+ const a = r + c._s2EN(JSON.stringify(n), s, 0), i = Math.floor(Date.now() / 1e3).toString(), l = i + a, d = E(l);
21
+ t.data = a, t.headers["Web-Encrypt-Response-Encrypt-Key"] = r + c._s2EN(m, s, 0), t.headers["Web-Encrypt-Timestamp"] = i, t.headers["Web-Encrypt-Sign"] = d, t.headers["content-type"] = "application/json", o.doFilter(t, o);
22
+ }
23
+ }
24
+ }
25
+ export {
26
+ b as default
27
+ };
28
+ //# sourceMappingURL=Leaf7EncryptRequestParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Leaf7EncryptRequestParser.js","sources":["../../../src/request/leaf7/Leaf7EncryptRequestParser.ts"],"sourcesContent":["import type { AxiosRequestConfig } from 'axios'\r\nimport type RequestFilterChain from '../RequestFilterChain'\r\n\r\nimport { Leaf7EncryptOptions } from './types'\r\nimport sm2 from './smCrypto/sm2'\r\nimport sm3 from './smCrypto/sm3'\r\nimport { cloneDeep } from 'lodash-es'\r\n\r\nexport default class Leaf7EncryptRequestParser {\r\n options: Leaf7EncryptOptions\r\n\r\n constructor(options: Leaf7EncryptOptions) {\r\n this.options = options\r\n }\r\n\r\n async doFilter(request: AxiosRequestConfig, chain: RequestFilterChain) {\r\n // prefix:encryptStringPrefix 加密字符串前缀\r\n // _s1:sm4Key\r\n // _s2:sm2PublicKey\r\n const { prefix, _s1, _s2 } = this.options\r\n let requestData\r\n // FormData一般为上传附件,跳过\r\n if (request.data instanceof FormData) {\r\n return chain.doFilter(request, chain)\r\n } else {\r\n requestData = cloneDeep(request.data)\r\n if (requestData == null || requestData == '') {\r\n return chain.doFilter(request, chain)\r\n }\r\n // 组装报文并加密\r\n const content = prefix + sm2._s2EN(JSON.stringify(requestData), _s2, 0)\r\n const Timestamp = Math.floor(Date.now() / 1000).toString()\r\n const mergeStr = Timestamp + content\r\n const signature = sm3(mergeStr)\r\n\r\n request.data = content\r\n\r\n //按照规范进行前端加密\r\n request.headers['Web-Encrypt-Response-Encrypt-Key'] = prefix + sm2._s2EN(_s1, _s2, 0)\r\n request.headers['Web-Encrypt-Timestamp'] = Timestamp\r\n request.headers['Web-Encrypt-Sign'] = signature\r\n request.headers['content-type'] = 'application/json'\r\n\r\n chain.doFilter(request, chain)\r\n }\r\n }\r\n}\r\n"],"names":["Leaf7EncryptRequestParser","options","__publicField","request","chain","prefix","_s1","_s2","requestData","cloneDeep","content","sm2","Timestamp","mergeStr","signature","sm3"],"mappings":";;;;;;AAQA,MAAqBA,EAA0B;AAAA,EAG7C,YAAYC,GAA8B;AAF1C,IAAAC,EAAA;AAGE,SAAK,UAAUD;AAAA,EACjB;AAAA,EAEA,MAAM,SAASE,GAA6BC,GAA2B;AAIrE,UAAM,EAAE,QAAAC,GAAQ,KAAAC,GAAK,KAAAC,EAAA,IAAQ,KAAK;AAC9B,QAAAC;AAEA,QAAAL,EAAQ,gBAAgB;AACnB,aAAAC,EAAM,SAASD,GAASC,CAAK;AAC/B;AAED,UADUI,IAAAC,EAAUN,EAAQ,IAAI,GAChCK,KAAe,QAAQA,KAAe;AACjC,eAAAJ,EAAM,SAASD,GAASC,CAAK;AAGhC,YAAAM,IAAUL,IAASM,EAAI,MAAM,KAAK,UAAUH,CAAW,GAAGD,GAAK,CAAC,GAChEK,IAAY,KAAK,MAAM,KAAK,QAAQ,GAAI,EAAE,YAC1CC,IAAWD,IAAYF,GACvBI,IAAYC,EAAIF,CAAQ;AAE9B,MAAAV,EAAQ,OAAOO,GAGPP,EAAA,QAAQ,kCAAkC,IAAIE,IAASM,EAAI,MAAML,GAAKC,GAAK,CAAC,GAC5EJ,EAAA,QAAQ,uBAAuB,IAAIS,GACnCT,EAAA,QAAQ,kBAAkB,IAAIW,GAC9BX,EAAA,QAAQ,cAAc,IAAI,oBAE5BC,EAAA,SAASD,GAASC,CAAK;AAAA,IAC/B;AAAA,EACF;AACF;"}
@@ -0,0 +1,8 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { default as ResponseParserChain } from '../ResponseParserChain';
3
+ import { Leaf7EncryptOptions } from './types';
4
+ export default class Leaf7EncryptResponseParser {
5
+ options: Leaf7EncryptOptions;
6
+ constructor(options: Leaf7EncryptOptions);
7
+ parse(response: AxiosResponse, chain: ResponseParserChain): AxiosResponse<any, any> | undefined;
8
+ }
@@ -0,0 +1,42 @@
1
+ var l = Object.defineProperty;
2
+ var p = (e, t, r) => t in e ? l(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
3
+ var n = (e, t, r) => p(e, typeof t != "symbol" ? t + "" : t, r);
4
+ import w from "./smCrypto/sm2/index.js";
5
+ import y from "./smCrypto/sm3/index.js";
6
+ import h from "./smCrypto/sm4/index.js";
7
+ class R {
8
+ constructor(t) {
9
+ n(this, "options");
10
+ this.options = t;
11
+ }
12
+ parse(t, r) {
13
+ const { _s1: m, _s2: i } = this.options;
14
+ if (t.headers["content-type"])
15
+ if (t.data) {
16
+ const o = t.data;
17
+ let s = t.headers["web-encrypt-sign"], c = t.headers["web-encrypt-timestamp"];
18
+ if (o != null && s) {
19
+ if (o instanceof Blob)
20
+ return r.doParse(t, r);
21
+ let a;
22
+ s = s;
23
+ const u = c + o, f = y(u);
24
+ try {
25
+ a = w._s2DOVERSIG(f, s, i, { hash: !0, der: !0 });
26
+ } catch {
27
+ throw new Error("电子签名验证失败,接收到的响应无效");
28
+ }
29
+ if (!a)
30
+ throw new Error("电子签名验证失败,接收到的响应无效");
31
+ const d = JSON.parse(h._s4DE(o, m));
32
+ return t.data = d, r.doParse(t, r);
33
+ }
34
+ return r.doParse(t, r);
35
+ } else
36
+ throw new Error("未获取到请求返回数据");
37
+ }
38
+ }
39
+ export {
40
+ R as default
41
+ };
42
+ //# sourceMappingURL=Leaf7EncryptResponseParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Leaf7EncryptResponseParser.js","sources":["../../../src/request/leaf7/Leaf7EncryptResponseParser.ts"],"sourcesContent":["import type { AxiosResponse } from 'axios'\r\nimport type ResponseParserChain from '../ResponseParserChain'\r\n\r\nimport sm2 from './smCrypto/sm2'\r\nimport sm3 from './smCrypto/sm3'\r\nimport sm4 from './smCrypto/sm4'\r\nimport { Leaf7EncryptOptions } from './types'\r\n\r\nexport default class Leaf7EncryptResponseParser {\r\n options: Leaf7EncryptOptions\r\n constructor(options: Leaf7EncryptOptions) {\r\n this.options = options\r\n }\r\n\r\n parse(response: AxiosResponse, chain: ResponseParserChain) {\r\n // _s1:sm4Key\r\n // _s2:sm2PublicKey\r\n const { _s1, _s2 } = this.options\r\n // server 端不响应内容\r\n const contentType = response.headers['content-type']\r\n if (!contentType) {\r\n return\r\n }\r\n\r\n if (response.data) {\r\n const map = response.data\r\n // 取header中的签名\r\n let signature = response.headers['web-encrypt-sign']\r\n let timestamp = response.headers['web-encrypt-timestamp']\r\n\r\n if (map != null && signature) {\r\n if (map instanceof Blob) {\r\n return chain.doParse(response, chain)\r\n }\r\n let verifySignatureResult: boolean\r\n signature = signature\r\n\r\n const mergeStr = timestamp + map\r\n const sm3Str = sm3(mergeStr)\r\n // 验签\r\n try {\r\n verifySignatureResult = sm2._s2DOVERSIG(sm3Str, signature, _s2, { hash: true, der: true })\r\n } catch (e) {\r\n throw new Error('电子签名验证失败,接收到的响应无效')\r\n }\r\n if (!verifySignatureResult) {\r\n throw new Error('电子签名验证失败,接收到的响应无效')\r\n }\r\n\r\n const result = JSON.parse(sm4._s4DE(map, _s1))\r\n response.data = result\r\n return chain.doParse(response, chain)\r\n }\r\n return chain.doParse(response, chain)\r\n } else {\r\n throw new Error('未获取到请求返回数据')\r\n }\r\n }\r\n}\r\n"],"names":["Leaf7EncryptResponseParser","options","__publicField","response","chain","_s1","_s2","map","signature","timestamp","verifySignatureResult","mergeStr","sm3Str","sm3","sm2","result","sm4"],"mappings":";;;;;;AAQA,MAAqBA,EAA2B;AAAA,EAE9C,YAAYC,GAA8B;AAD1C,IAAAC,EAAA;AAEE,SAAK,UAAUD;AAAA,EACjB;AAAA,EAEA,MAAME,GAAyBC,GAA4B;AAGzD,UAAM,EAAE,KAAAC,GAAK,KAAAC,MAAQ,KAAK;AAG1B,QADoBH,EAAS,QAAQ,cAAc;AAKnD,UAAIA,EAAS,MAAM;AACjB,cAAMI,IAAMJ,EAAS;AAEjB,YAAAK,IAAYL,EAAS,QAAQ,kBAAkB,GAC/CM,IAAYN,EAAS,QAAQ,uBAAuB;AAEpD,YAAAI,KAAO,QAAQC,GAAW;AAC5B,cAAID,aAAe;AACV,mBAAAH,EAAM,QAAQD,GAAUC,CAAK;AAElC,cAAAM;AACQ,UAAAF,IAAAA;AAEZ,gBAAMG,IAAWF,IAAYF,GACvBK,IAASC,EAAIF,CAAQ;AAEvB,cAAA;AACsB,YAAAD,IAAAI,EAAI,YAAYF,GAAQJ,GAAWF,GAAK,EAAE,MAAM,IAAM,KAAK,GAAM,CAAA;AAAA,kBAC/E;AACJ,kBAAA,IAAI,MAAM,mBAAmB;AAAA,UACrC;AACA,cAAI,CAACI;AACG,kBAAA,IAAI,MAAM,mBAAmB;AAGrC,gBAAMK,IAAS,KAAK,MAAMC,EAAI,MAAMT,GAAKF,CAAG,CAAC;AAC7C,iBAAAF,EAAS,OAAOY,GACTX,EAAM,QAAQD,GAAUC,CAAK;AAAA,QACtC;AACO,eAAAA,EAAM,QAAQD,GAAUC,CAAK;AAAA,MAAA;AAE9B,cAAA,IAAI,MAAM,YAAY;AAAA,EAEhC;AACF;"}
@@ -0,0 +1,7 @@
1
+ import { Leaf7EncryptOptions } from './types';
2
+ import { default as ErrorHandlerChain } from '../ErrorHandlerChain';
3
+ export default class Leaf7ErrorHandler {
4
+ options: Leaf7EncryptOptions;
5
+ constructor(options: Leaf7EncryptOptions);
6
+ handle(error: Error, chain: ErrorHandlerChain): Promise<void>;
7
+ }
@@ -0,0 +1,51 @@
1
+ var g = Object.defineProperty;
2
+ var S = (e, s, o) => s in e ? g(e, s, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[s] = o;
3
+ var l = (e, s, o) => S(e, typeof s != "symbol" ? s + "" : s, o);
4
+ import y from "./smCrypto/sm2/index.js";
5
+ import D from "./smCrypto/sm3/index.js";
6
+ import b from "./smCrypto/sm4/index.js";
7
+ import m from "../utils/readBlob.js";
8
+ import x from "../error/ResponseError404.js";
9
+ import R from "../error/ResponseError500.js";
10
+ class H {
11
+ constructor(s) {
12
+ l(this, "options");
13
+ this.options = s;
14
+ }
15
+ async handle(s, o) {
16
+ const { _s1: c, _s2: u } = this.options;
17
+ if (s.response) {
18
+ const t = s.response;
19
+ if (t.status == 200) {
20
+ const a = t.data;
21
+ let n = t.headers["web-encrypt-sign"], f = t.headers["web-encrypt-timestamp"], r;
22
+ if (a instanceof Blob)
23
+ if (a != null && n) {
24
+ const i = await m(a);
25
+ let p;
26
+ n = n;
27
+ const d = f + i, E = D(d);
28
+ try {
29
+ p = y._s2DOVERSIG(E, n, u, { hash: !0, der: !0 });
30
+ } catch {
31
+ throw new Error("电子签名验证失败,接收到的响应无效");
32
+ }
33
+ if (!p)
34
+ throw new Error("电子签名验证失败,接收到的响应无效");
35
+ r = JSON.parse(b._s4DE(i, c));
36
+ } else
37
+ r = await m(a), r = JSON.parse(r);
38
+ else
39
+ r = a;
40
+ const { appcode: w, msg: h } = r;
41
+ if (w != "0")
42
+ throw new Error(h);
43
+ } else throw t.status == 404 ? new x("'" + t.config.url + "' " + t.status + " " + t.statusText, s, t) : t.status == 500 ? new R("'" + t.config.url + "' " + t.status + " " + t.statusText, s, t) : new Error("'" + t.config.url + "' " + t.status + " " + t.statusText);
44
+ }
45
+ throw s;
46
+ }
47
+ }
48
+ export {
49
+ H as default
50
+ };
51
+ //# sourceMappingURL=Leaf7ErrorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Leaf7ErrorHandler.js","sources":["../../../src/request/leaf7/Leaf7ErrorHandler.ts"],"sourcesContent":["import { Leaf7DataStruct } from './types'\r\nimport sm2 from './smCrypto/sm2'\r\nimport sm3 from './smCrypto/sm3'\r\nimport sm4 from './smCrypto/sm4'\r\n\r\nimport { Leaf7EncryptOptions } from './types'\r\n\r\nimport readBlob from '../utils/readBlob'\r\n\r\nimport type ErrorHandlerChain from '../ErrorHandlerChain'\r\nimport ResponseError404 from '../error/ResponseError404'\r\nimport ResponseError500 from '../error/ResponseError500'\r\n\r\nexport default class Leaf7ErrorHandler {\r\n options: Leaf7EncryptOptions\r\n constructor(options: Leaf7EncryptOptions) {\r\n this.options = options\r\n }\r\n\r\n async handle(error: Error, chain: ErrorHandlerChain) {\r\n const { _s1, _s2 } = this.options\r\n if (error.response) {\r\n const response = error.response\r\n if (response.status == 200) {\r\n const rawData = response.data\r\n // 取header中的签名\r\n let signature = response.headers['web-encrypt-sign']\r\n let timestamp = response.headers['web-encrypt-timestamp']\r\n\r\n let jsonData\r\n\r\n if (rawData instanceof Blob) {\r\n // 文件下载抛异常JSON,在Blob里面\r\n if (rawData != null && signature) {\r\n const tempData = await readBlob(rawData)\r\n let verifySignatureResult: boolean\r\n signature = signature\r\n\r\n const mergeStr = timestamp + tempData\r\n const sm3Str = sm3(mergeStr)\r\n // 验签\r\n try {\r\n verifySignatureResult = sm2._s2DOVERSIG(sm3Str, signature, _s2, { hash: true, der: true })\r\n } catch (e) {\r\n throw new Error('电子签名验证失败,接收到的响应无效')\r\n }\r\n if (!verifySignatureResult) {\r\n throw new Error('电子签名验证失败,接收到的响应无效')\r\n }\r\n\r\n const result = JSON.parse(sm4._s4DE(tempData, _s1))\r\n jsonData = result\r\n } else {\r\n jsonData = await readBlob(rawData)\r\n jsonData = JSON.parse(jsonData)\r\n }\r\n } else {\r\n // 普通请求的异常JSON\r\n jsonData = rawData\r\n }\r\n\r\n const { appcode, msg }: Leaf7DataStruct = jsonData\r\n\r\n if (appcode != '0') {\r\n throw new Error(msg)\r\n }\r\n } else if (response.status == 404) {\r\n throw new ResponseError404(\"'\" + response.config.url + \"' \" + response.status + ' ' + response.statusText, error, response)\r\n } else if (response.status == 500) {\r\n throw new ResponseError500(\"'\" + response.config.url + \"' \" + response.status + ' ' + response.statusText, error, response)\r\n } else {\r\n throw new Error(\"'\" + response.config.url + \"' \" + response.status + ' ' + response.statusText)\r\n }\r\n }\r\n\r\n throw error\r\n }\r\n}\r\n"],"names":["Leaf7ErrorHandler","options","__publicField","error","chain","_s1","_s2","response","rawData","signature","timestamp","jsonData","tempData","readBlob","verifySignatureResult","mergeStr","sm3Str","sm3","sm2","sm4","appcode","msg","ResponseError404","ResponseError500"],"mappings":";;;;;;;;;AAaA,MAAqBA,EAAkB;AAAA,EAErC,YAAYC,GAA8B;AAD1C,IAAAC,EAAA;AAEE,SAAK,UAAUD;AAAA,EACjB;AAAA,EAEA,MAAM,OAAOE,GAAcC,GAA0B;AACnD,UAAM,EAAE,KAAAC,GAAK,KAAAC,MAAQ,KAAK;AAC1B,QAAIH,EAAM,UAAU;AAClB,YAAMI,IAAWJ,EAAM;AACnB,UAAAI,EAAS,UAAU,KAAK;AAC1B,cAAMC,IAAUD,EAAS;AAErB,YAAAE,IAAYF,EAAS,QAAQ,kBAAkB,GAC/CG,IAAYH,EAAS,QAAQ,uBAAuB,GAEpDI;AAEJ,YAAIH,aAAmB;AAEjB,cAAAA,KAAW,QAAQC,GAAW;AAC1B,kBAAAG,IAAW,MAAMC,EAASL,CAAO;AACnC,gBAAAM;AACQ,YAAAL,IAAAA;AAEZ,kBAAMM,IAAWL,IAAYE,GACvBI,IAASC,EAAIF,CAAQ;AAEvB,gBAAA;AACsB,cAAAD,IAAAI,EAAI,YAAYF,GAAQP,GAAWH,GAAK,EAAE,MAAM,IAAM,KAAK,GAAM,CAAA;AAAA,oBAC/E;AACJ,oBAAA,IAAI,MAAM,mBAAmB;AAAA,YACrC;AACA,gBAAI,CAACQ;AACG,oBAAA,IAAI,MAAM,mBAAmB;AAI1B,YAAAH,IADI,KAAK,MAAMQ,EAAI,MAAMP,GAAUP,CAAG,CAAC;AAAA,UACvC;AAEA,YAAAM,IAAA,MAAME,EAASL,CAAO,GACtBG,IAAA,KAAK,MAAMA,CAAQ;AAAA;AAIrB,UAAAA,IAAAH;AAGP,cAAA,EAAE,SAAAY,GAAS,KAAAC,EAAyB,IAAAV;AAE1C,YAAIS,KAAW;AACP,gBAAA,IAAI,MAAMC,CAAG;AAAA,MACrB,MACF,OAAWd,EAAS,UAAU,MACtB,IAAIe,EAAiB,MAAMf,EAAS,OAAO,MAAM,OAAOA,EAAS,SAAS,MAAMA,EAAS,YAAYJ,GAAOI,CAAQ,IACjHA,EAAS,UAAU,MACtB,IAAIgB,EAAiB,MAAMhB,EAAS,OAAO,MAAM,OAAOA,EAAS,SAAS,MAAMA,EAAS,YAAYJ,GAAOI,CAAQ,IAEpH,IAAI,MAAM,MAAMA,EAAS,OAAO,MAAM,OAAOA,EAAS,SAAS,MAAMA,EAAS,UAAU;AAAA,IAElG;AAEM,UAAAJ;AAAA,EACR;AACF;"}
@@ -0,0 +1,5 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { default as ResponseParserChain } from '../ResponseParserChain';
3
+ export default class Leaf7ResponseParser {
4
+ parse(response: AxiosResponse, chain: ResponseParserChain): AxiosResponse<any, any> | undefined;
5
+ }
@@ -0,0 +1,17 @@
1
+ class f {
2
+ parse(e, t) {
3
+ const r = e.headers["content-type"];
4
+ if (!r)
5
+ return;
6
+ if (!e.headers["web-encrypt-sign"] && r.indexOf("application/json") === -1)
7
+ return t.doParse(e, t);
8
+ const { appcode: a, data: s, msg: n } = e.data;
9
+ if (a === "0")
10
+ return t.doParse(s, t);
11
+ throw new Error(n);
12
+ }
13
+ }
14
+ export {
15
+ f as default
16
+ };
17
+ //# sourceMappingURL=Leaf7ResponseParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Leaf7ResponseParser.js","sources":["../../../src/request/leaf7/Leaf7ResponseParser.ts"],"sourcesContent":["import type { AxiosResponse } from 'axios'\r\nimport type ResponseParserChain from '../ResponseParserChain'\r\n\r\nimport { Leaf7DataStruct } from './types'\r\n\r\nexport default class Leaf7ResponseParser {\r\n parse(response: AxiosResponse, chain: ResponseParserChain) {\r\n // server 端不响应内容\r\n const contentType = response.headers['content-type']\r\n if (!contentType) {\r\n return\r\n }\r\n const signature = response.headers['web-encrypt-sign']\r\n\r\n // 若为加密请求,不走contentType是否包含application/json的判断\r\n if (!signature) {\r\n // 非 application/json 协议,不处理\r\n if (contentType.indexOf('application/json') === -1) {\r\n return chain.doParse(response, chain)\r\n }\r\n }\r\n\r\n const { appcode, data, msg }: Leaf7DataStruct = response.data\r\n if (appcode === '0') {\r\n return chain.doParse(data, chain)\r\n } else {\r\n throw new Error(msg)\r\n }\r\n }\r\n}\r\n"],"names":["Leaf7ResponseParser","response","chain","contentType","appcode","data","msg"],"mappings":"AAKA,MAAqBA,EAAoB;AAAA,EACvC,MAAMC,GAAyBC,GAA4B;AAEnD,UAAAC,IAAcF,EAAS,QAAQ,cAAc;AACnD,QAAI,CAACE;AACH;AAKF,QAAI,CAHcF,EAAS,QAAQ,kBAAkB,KAK/CE,EAAY,QAAQ,kBAAkB,MAAM;AACvC,aAAAD,EAAM,QAAQD,GAAUC,CAAK;AAIxC,UAAM,EAAE,SAAAE,GAAS,MAAAC,GAAM,KAAAC,EAAA,IAAyBL,EAAS;AACzD,QAAIG,MAAY;AACP,aAAAF,EAAM,QAAQG,GAAMH,CAAK;AAE1B,UAAA,IAAI,MAAMI,CAAG;AAAA,EAEvB;AACF;"}
@@ -0,0 +1,20 @@
1
+ import { ResponseParser } from '../ResponseParserChain';
2
+ import { ErrorHandler } from '../ErrorHandlerChain';
3
+ import { RequestFilter } from '../RequestFilterChain';
4
+ export type RequestParams = Record<string, unknown>;
5
+ export interface RequestOptionsI {
6
+ loading?: boolean;
7
+ mask?: boolean;
8
+ timeout?: number;
9
+ }
10
+ export declare function request<T>(url: string, data?: RequestParams | FormData, options?: RequestOptionsI): Promise<T>;
11
+ export declare function download(url: string, data?: RequestParams, options?: RequestOptionsI): Promise<void>;
12
+ export declare function upload(url: string, params: RequestParams, options: RequestOptionsI): Promise<unknown>;
13
+ export declare const config: {
14
+ setBaseUrl: (pBaseUrl: string) => void;
15
+ setRequestTimeout: (pTimeout: number) => void;
16
+ setResponseType: (pType: "json" | "text") => void;
17
+ setRequestFilters: (...filters: RequestFilter[]) => void;
18
+ setResponseParsers: (...parsers: ResponseParser[]) => void;
19
+ setErrorHandlers: (...handlers: ErrorHandler[]) => void;
20
+ };
@@ -0,0 +1,130 @@
1
+ import E from "axios";
2
+ import { g as O } from "../../base64-KVpG-D_n.js";
3
+ import { cloneDeep as y } from "lodash-es";
4
+ import "dayjs";
5
+ import "../../utils/md5.js";
6
+ import "decimal.js";
7
+ import F from "../ResponseParserChain.js";
8
+ import h from "../ErrorHandlerChain.js";
9
+ import k from "../RequestFilterChain.js";
10
+ import { ElLoading as w } from "element-plus";
11
+ import S from "../error/ResponseError.js";
12
+ let g = [], R = [], f = [], m = "/", u = 1e3 * 30, b = "json";
13
+ const d = E.create();
14
+ d.interceptors.request.use(function(e) {
15
+ const t = new k(g);
16
+ return t.doFilter(e, t), e;
17
+ });
18
+ d.interceptors.response.use(function(e) {
19
+ try {
20
+ const t = new F(R);
21
+ return t.doParse(e, t);
22
+ } catch (t) {
23
+ throw new S(t.message, { cause: t }, e);
24
+ }
25
+ });
26
+ function T(e, t = {}, l = { loading: !0, mask: !1, timeout: u }) {
27
+ let r = t;
28
+ t instanceof FormData || (r = y(t));
29
+ let n;
30
+ return l.loading === !0 && (n = w.service({ fullscreen: !0, background: "transparent" })), d.request({
31
+ baseURL: m,
32
+ method: "POST",
33
+ timeout: u,
34
+ withCredentials: !0,
35
+ url: e,
36
+ data: r,
37
+ responseType: b,
38
+ ...l
39
+ }).then((s) => (n && n.close(), s)).catch(function(s) {
40
+ n && n.close();
41
+ const i = new h(f);
42
+ return i.handle(s, i);
43
+ });
44
+ }
45
+ function x(e, t = {}, l = { loading: !0, mask: !1, timeout: u }) {
46
+ let r;
47
+ return l.loading === !0 && (r = w.service({ fullscreen: !0, background: "transparent" })), d.request({
48
+ baseURL: m,
49
+ method: "POST",
50
+ timeout: u,
51
+ withCredentials: !0,
52
+ url: e,
53
+ data: t,
54
+ responseType: "blob",
55
+ ...l
56
+ }).then((n) => (r && r.close(), n)).then((n) => {
57
+ const s = n.headers["content-disposition"], i = n.data, a = s.match(/attachment; filename=\"(.*?)\"/)[1], c = O.decode(a);
58
+ if (window.navigator && window.navigator.msSaveOrOpenBlob)
59
+ window.navigator.msSaveOrOpenBlob(i, c);
60
+ else {
61
+ const o = document.createElement("a"), p = URL.createObjectURL(i);
62
+ o.href = p, o.download = c, document.body.appendChild(o), o.click(), document.body.removeChild(o), URL.revokeObjectURL(p);
63
+ }
64
+ }).catch(function(n) {
65
+ r && r.close();
66
+ const s = new h(f);
67
+ return s.handle(n, s);
68
+ });
69
+ }
70
+ function A(e, t, l) {
71
+ const r = new FormData();
72
+ if (t) {
73
+ const n = Object.keys(t);
74
+ for (let s = 0; s < n.length; s++) {
75
+ const i = n[s], a = t[i];
76
+ if (a instanceof File)
77
+ r.append(i, a);
78
+ else if (a instanceof Array) {
79
+ let c = !1;
80
+ for (let o = 0; o < a.length; o++)
81
+ if (a[o] instanceof File) {
82
+ c = !0;
83
+ break;
84
+ }
85
+ if (c)
86
+ for (let o = 0; o < a.length; o++)
87
+ r.append(i, a[o]);
88
+ else
89
+ r.append(i, JSON.stringify(a));
90
+ } else
91
+ r.append(i, JSON.stringify(a));
92
+ }
93
+ }
94
+ return T(e, r, l);
95
+ }
96
+ const H = {
97
+ setBaseUrl: (e) => {
98
+ if (!e)
99
+ throw new Error("pBaseUrl is null!");
100
+ m = e;
101
+ },
102
+ setRequestTimeout: (e) => {
103
+ u = e;
104
+ },
105
+ setResponseType: (e) => {
106
+ b = e;
107
+ },
108
+ setRequestFilters: (...e) => {
109
+ if (e == null)
110
+ throw new Error("filters is null!");
111
+ g = e;
112
+ },
113
+ setResponseParsers: (...e) => {
114
+ if (e == null)
115
+ throw new Error("parsers is null!");
116
+ R = e;
117
+ },
118
+ setErrorHandlers: (...e) => {
119
+ if (e == null)
120
+ throw new Error("handlers should not null!");
121
+ f = e;
122
+ }
123
+ };
124
+ export {
125
+ H as config,
126
+ x as download,
127
+ T as request,
128
+ A as upload
129
+ };
130
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/request/leaf7/index.ts"],"sourcesContent":["import axios from 'axios'\r\nimport { Base64 } from 'js-base64'\r\nimport { cloneDeep } from '../../utils'\r\nimport ResponseParserChain, { type ResponseParser } from '../ResponseParserChain'\r\nimport ErrorHandlerChain, { type ErrorHandler } from '../ErrorHandlerChain'\r\nimport RequestFilterChain, { type RequestFilter } from '../RequestFilterChain'\r\nimport { ElLoading } from 'element-plus'\r\n\r\nimport ResponseError from '../error/ResponseError'\r\n\r\nexport type RequestParams = Record<string, unknown>\r\n\r\nexport interface RequestOptionsI {\r\n loading?: boolean\r\n mask?: boolean\r\n timeout?: number\r\n}\r\n\r\n//////////////////////////////////// Chain\r\nlet gRequestFilters: RequestFilter[] = []\r\nlet gResponseParsers: ResponseParser[] = []\r\nlet gErrorHandlers: ErrorHandler[] = []\r\n\r\n//////////////////////////////////// GLOBAL VARS\r\n\r\nlet BASE_URL = '/'\r\nlet REQUEST_TIMEOUT = 1000 * 30\r\nconst LOADING_DELAY = 1500\r\nlet RESPONSE_TYPE: 'json' | 'text' = 'json'\r\n\r\n//////////////////////////////////// AXIOS\r\n\r\nconst g_AxiosInstance = axios.create()\r\ng_AxiosInstance.interceptors.request.use(function (config) {\r\n const chain = new RequestFilterChain(gRequestFilters)\r\n chain.doFilter(config, chain)\r\n return config\r\n})\r\ng_AxiosInstance.interceptors.response.use(function (response) {\r\n try {\r\n const chain = new ResponseParserChain(gResponseParsers)\r\n return chain.doParse(response, chain)\r\n } catch (e) {\r\n throw new ResponseError((e as Error).message, { cause: e }, response)\r\n }\r\n})\r\n\r\nexport function request<T>(\r\n url: string,\r\n data: RequestParams | FormData = {},\r\n options: RequestOptionsI = { loading: true, mask: false, timeout: REQUEST_TIMEOUT }\r\n): Promise<T> {\r\n let newData = data\r\n if (!(data instanceof FormData)) {\r\n newData = cloneDeep(data)\r\n }\r\n\r\n // loading\r\n let loading: any\r\n\r\n if (options.loading === true) {\r\n loading = ElLoading.service({ fullscreen: true, background: 'transparent' })\r\n }\r\n\r\n return g_AxiosInstance\r\n .request({\r\n baseURL: BASE_URL,\r\n method: 'POST',\r\n timeout: REQUEST_TIMEOUT,\r\n withCredentials: true,\r\n url,\r\n data: newData,\r\n responseType: RESPONSE_TYPE,\r\n ...options,\r\n })\r\n .then((data) => {\r\n if (loading) {\r\n loading.close()\r\n }\r\n\r\n return data\r\n })\r\n .catch(function (error) {\r\n if (loading) {\r\n loading.close()\r\n }\r\n\r\n const chain = new ErrorHandlerChain(gErrorHandlers)\r\n return chain.handle(error, chain)\r\n }) as Promise<T>\r\n}\r\n\r\nexport function download(url: string, data: RequestParams = {}, options: RequestOptionsI = { loading: true, mask: false, timeout: REQUEST_TIMEOUT }) {\r\n let loading: any\r\n\r\n if (options.loading === true) {\r\n loading = ElLoading.service({ fullscreen: true, background: 'transparent' })\r\n }\r\n\r\n return g_AxiosInstance\r\n .request({\r\n baseURL: BASE_URL,\r\n method: 'POST',\r\n timeout: REQUEST_TIMEOUT,\r\n withCredentials: true,\r\n url,\r\n data,\r\n responseType: 'blob',\r\n ...options,\r\n })\r\n .then((data) => {\r\n if (loading) {\r\n loading.close()\r\n }\r\n\r\n return data\r\n })\r\n .then((response) => {\r\n const contentDisposition = response.headers['content-disposition']\r\n const blob = response.data\r\n\r\n const base64FileName = contentDisposition.match(/attachment; filename=\\\"(.*?)\\\"/)[1]\r\n const decodedFileName = Base64.decode(base64FileName)\r\n // for IE\r\n //@ts-ignore\r\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\r\n //@ts-ignore\r\n window.navigator.msSaveOrOpenBlob(blob, decodedFileName)\r\n } else {\r\n const a = document.createElement('a')\r\n const url = URL.createObjectURL(blob)\r\n a.href = url\r\n a.download = decodedFileName\r\n document.body.appendChild(a)\r\n a.click()\r\n document.body.removeChild(a)\r\n URL.revokeObjectURL(url)\r\n }\r\n })\r\n .catch(function (error) {\r\n if (loading) {\r\n loading.close()\r\n }\r\n\r\n const chain = new ErrorHandlerChain(gErrorHandlers)\r\n return chain.handle(error, chain)\r\n })\r\n}\r\n\r\nexport function upload(url: string, params: RequestParams, options: RequestOptionsI) {\r\n const formdata = new FormData()\r\n if (params) {\r\n const keys = Object.keys(params)\r\n const normalParams: Record<string, unknown> = {}\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i]\r\n const itemValue = params[key]\r\n if (itemValue instanceof File) {\r\n formdata.append(key, itemValue)\r\n } else if (itemValue instanceof Array) {\r\n let isFile = false\r\n for (let j = 0; j < itemValue.length; j++) {\r\n if (itemValue[j] instanceof File) {\r\n isFile = true\r\n break\r\n }\r\n }\r\n if (isFile) {\r\n for (let j = 0; j < itemValue.length; j++) {\r\n formdata.append(key, itemValue[j])\r\n }\r\n } else {\r\n formdata.append(key, JSON.stringify(itemValue))\r\n }\r\n } else {\r\n formdata.append(key, JSON.stringify(itemValue))\r\n }\r\n }\r\n }\r\n\r\n return request(url, formdata, options)\r\n}\r\n\r\n// config\r\nexport const config = {\r\n setBaseUrl: (pBaseUrl: string) => {\r\n if (!pBaseUrl) {\r\n throw new Error(`pBaseUrl is null!`)\r\n }\r\n BASE_URL = pBaseUrl\r\n },\r\n setRequestTimeout: (pTimeout: number) => {\r\n REQUEST_TIMEOUT = pTimeout\r\n },\r\n setResponseType: (pType: 'json' | 'text') => {\r\n RESPONSE_TYPE = pType\r\n },\r\n setRequestFilters: (...filters: RequestFilter[]) => {\r\n if (filters == null) {\r\n throw new Error(`filters is null!`)\r\n }\r\n gRequestFilters = filters\r\n },\r\n setResponseParsers: (...parsers: ResponseParser[]) => {\r\n if (parsers == null) {\r\n throw new Error(`parsers is null!`)\r\n }\r\n gResponseParsers = parsers\r\n },\r\n setErrorHandlers: (...handlers: ErrorHandler[]) => {\r\n if (handlers == null) {\r\n throw new Error(`handlers should not null!`)\r\n }\r\n gErrorHandlers = handlers\r\n },\r\n}\r\n"],"names":["gRequestFilters","gResponseParsers","gErrorHandlers","BASE_URL","REQUEST_TIMEOUT","RESPONSE_TYPE","g_AxiosInstance","axios","config","chain","RequestFilterChain","response","ResponseParserChain","e","ResponseError","request","url","data","options","newData","cloneDeep","loading","ElLoading","error","ErrorHandlerChain","download","contentDisposition","blob","base64FileName","decodedFileName","Base64","a","upload","params","formdata","keys","i","key","itemValue","isFile","j","pBaseUrl","pTimeout","pType","filters","parsers","handlers"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ declare const _default: {
2
+ /**
3
+ * ASN.1 der 编码,针对 sm2 签名
4
+ */
5
+ encodeDer(r: any, s: any): any;
6
+ /**
7
+ * 解析 ASN.1 der,针对 sm2 验签
8
+ */
9
+ decodeDer(input: any): {
10
+ r: any;
11
+ s: any;
12
+ };
13
+ };
14
+ export default _default;
@@ -0,0 +1,81 @@
1
+ import { j as i } from "../../../../index-BW3nOBfD.js";
2
+ function x(e) {
3
+ let t = e.toString(16);
4
+ if (t[0] !== "-")
5
+ t.length % 2 === 1 ? t = "0" + t : t.match(/^[0-7]/) || (t = "00" + t);
6
+ else {
7
+ t = t.substr(1);
8
+ let n = t.length;
9
+ n % 2 === 1 ? n += 1 : t.match(/^[0-7]/) || (n += 2);
10
+ let s = "";
11
+ for (let r = 0; r < n; r++) s += "f";
12
+ s = new i.BigInteger(s, 16), t = s.xor(e).add(i.BigInteger.ONE), t = t.toString(16).replace(/^-/, "");
13
+ }
14
+ return t;
15
+ }
16
+ class h {
17
+ constructor() {
18
+ this.tlv = null, this.t = "00", this.l = "00", this.v = "";
19
+ }
20
+ /**
21
+ * 获取 der 编码比特流16进制串
22
+ */
23
+ getEncodedHex() {
24
+ return this.tlv || (this.v = this.getValue(), this.l = this.getLength(), this.tlv = this.t + this.l + this.v), this.tlv;
25
+ }
26
+ getLength() {
27
+ const t = this.v.length / 2;
28
+ let n = t.toString(16);
29
+ return n.length % 2 === 1 && (n = "0" + n), t < 128 ? n : (128 + n.length / 2).toString(16) + n;
30
+ }
31
+ getValue() {
32
+ return "";
33
+ }
34
+ }
35
+ class l extends h {
36
+ constructor(t) {
37
+ super(), this.t = "02", t && (this.v = x(t));
38
+ }
39
+ getValue() {
40
+ return this.v;
41
+ }
42
+ }
43
+ class b extends h {
44
+ constructor(t) {
45
+ super(), this.t = "30", this.asn1Array = t;
46
+ }
47
+ getValue() {
48
+ return this.v = this.asn1Array.map((t) => t.getEncodedHex()).join(""), this.v;
49
+ }
50
+ }
51
+ function u(e, t) {
52
+ return +e[t + 2] < 8 ? 1 : +e.substr(t + 2, 2) & 128;
53
+ }
54
+ function g(e, t) {
55
+ const n = u(e, t), s = e.substr(t + 2, n * 2);
56
+ return s ? (+s[0] < 8 ? new i.BigInteger(s, 16) : new i.BigInteger(s.substr(2), 16)).intValue() : -1;
57
+ }
58
+ function o(e, t) {
59
+ const n = u(e, t);
60
+ return t + (n + 1) * 2;
61
+ }
62
+ const w = {
63
+ /**
64
+ * ASN.1 der 编码,针对 sm2 签名
65
+ */
66
+ encodeDer(e, t) {
67
+ const n = new l(e), s = new l(t);
68
+ return new b([n, s]).getEncodedHex();
69
+ },
70
+ /**
71
+ * 解析 ASN.1 der,针对 sm2 验签
72
+ */
73
+ decodeDer(e) {
74
+ const t = o(e, 0), n = o(e, t), s = g(e, t), r = e.substr(n, s * 2), c = n + r.length, a = o(e, c), d = g(e, c), f = e.substr(a, d * 2), v = new i.BigInteger(r, 16), S = new i.BigInteger(f, 16);
75
+ return { r: v, s: S };
76
+ }
77
+ };
78
+ export {
79
+ w as default
80
+ };
81
+ //# sourceMappingURL=asn1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asn1.js","sources":["../../../../../src/request/leaf7/smCrypto/sm2/asn1.ts"],"sourcesContent":["import { BigInteger } from 'jsbn'\r\n\r\nfunction bigintToValue(bigint) {\r\n let h = bigint.toString(16)\r\n if (h[0] !== '-') {\r\n // 正数\r\n if (h.length % 2 === 1) h = '0' + h // 补齐到整字节\r\n else if (!h.match(/^[0-7]/)) h = '00' + h // 非0开头,则补一个全0字节\r\n } else {\r\n // 负数\r\n h = h.substr(1)\r\n\r\n let len = h.length\r\n if (len % 2 === 1) len += 1 // 补齐到整字节\r\n else if (!h.match(/^[0-7]/)) len += 2 // 非0开头,则补一个全0字节\r\n\r\n let mask = ''\r\n for (let i = 0; i < len; i++) mask += 'f'\r\n mask = new BigInteger(mask, 16)\r\n\r\n // 对绝对值取反,加1\r\n h = mask.xor(bigint).add(BigInteger.ONE)\r\n h = h.toString(16).replace(/^-/, '')\r\n }\r\n return h\r\n}\r\n\r\nclass ASN1Object {\r\n constructor() {\r\n this.tlv = null\r\n this.t = '00'\r\n this.l = '00'\r\n this.v = ''\r\n }\r\n\r\n /**\r\n * 获取 der 编码比特流16进制串\r\n */\r\n getEncodedHex() {\r\n if (!this.tlv) {\r\n this.v = this.getValue()\r\n this.l = this.getLength()\r\n this.tlv = this.t + this.l + this.v\r\n }\r\n return this.tlv\r\n }\r\n\r\n getLength() {\r\n const n = this.v.length / 2 // 字节数\r\n let nHex = n.toString(16)\r\n if (nHex.length % 2 === 1) nHex = '0' + nHex // 补齐到整字节\r\n\r\n if (n < 128) {\r\n // 短格式,以 0 开头\r\n return nHex\r\n } else {\r\n // 长格式,以 1 开头\r\n const head = 128 + nHex.length / 2 // 1(1位) + 真正的长度占用字节数(7位) + 真正的长度\r\n return head.toString(16) + nHex\r\n }\r\n }\r\n\r\n getValue() {\r\n return ''\r\n }\r\n}\r\n\r\nclass DERInteger extends ASN1Object {\r\n constructor(bigint) {\r\n super()\r\n\r\n this.t = '02' // 整型标签说明\r\n if (bigint) this.v = bigintToValue(bigint)\r\n }\r\n\r\n getValue() {\r\n return this.v\r\n }\r\n}\r\n\r\nclass DERSequence extends ASN1Object {\r\n constructor(asn1Array) {\r\n super()\r\n\r\n this.t = '30' // 序列标签说明\r\n this.asn1Array = asn1Array\r\n }\r\n\r\n getValue() {\r\n this.v = this.asn1Array.map((asn1Object) => asn1Object.getEncodedHex()).join('')\r\n return this.v\r\n }\r\n}\r\n\r\n/**\r\n * 获取 l 占用字节数\r\n */\r\nfunction getLenOfL(str, start) {\r\n if (+str[start + 2] < 8) return 1 // l 以0开头,则表示短格式,只占一个字节\r\n return +str.substr(start + 2, 2) & (0x7f + 1) // 长格式,取第一个字节后7位作为长度真正占用字节数,再加上本身\r\n}\r\n\r\n/**\r\n * 获取 l\r\n */\r\nfunction getL(str, start) {\r\n // 获取 l\r\n const len = getLenOfL(str, start)\r\n const l = str.substr(start + 2, len * 2)\r\n\r\n if (!l) return -1\r\n const bigint = +l[0] < 8 ? new BigInteger(l, 16) : new BigInteger(l.substr(2), 16)\r\n\r\n return bigint.intValue()\r\n}\r\n\r\n/**\r\n * 获取 v 的位置\r\n */\r\nfunction getStartOfV(str, start) {\r\n const len = getLenOfL(str, start)\r\n return start + (len + 1) * 2\r\n}\r\n\r\nexport default {\r\n /**\r\n * ASN.1 der 编码,针对 sm2 签名\r\n */\r\n encodeDer(r, s) {\r\n const derR = new DERInteger(r)\r\n const derS = new DERInteger(s)\r\n const derSeq = new DERSequence([derR, derS])\r\n\r\n return derSeq.getEncodedHex()\r\n },\r\n\r\n /**\r\n * 解析 ASN.1 der,针对 sm2 验签\r\n */\r\n decodeDer(input) {\r\n // 结构:\r\n // input = | tSeq | lSeq | vSeq |\r\n // vSeq = | tR | lR | vR | tS | lS | vS |\r\n const start = getStartOfV(input, 0)\r\n\r\n const vIndexR = getStartOfV(input, start)\r\n const lR = getL(input, start)\r\n const vR = input.substr(vIndexR, lR * 2)\r\n\r\n const nextStart = vIndexR + vR.length\r\n const vIndexS = getStartOfV(input, nextStart)\r\n const lS = getL(input, nextStart)\r\n const vS = input.substr(vIndexS, lS * 2)\r\n\r\n const r = new BigInteger(vR, 16)\r\n const s = new BigInteger(vS, 16)\r\n\r\n return { r, s }\r\n },\r\n}\r\n"],"names":["bigintToValue","bigint","h","len","mask","i","BigInteger","ASN1Object","n","nHex","DERInteger","DERSequence","asn1Array","asn1Object","getLenOfL","str","start","getL","l","getStartOfV","asn1","r","s","derR","derS","input","vIndexR","lR","vR","nextStart","vIndexS","lS","vS"],"mappings":"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"}