@icure/api 8.6.18 → 8.7.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.
Files changed (328) hide show
  1. package/icc-api/api/IccDocumentApi.d.ts +10 -2
  2. package/icc-api/api/IccDocumentApi.js +22 -4
  3. package/icc-api/api/IccDocumentApi.js.map +1 -1
  4. package/icc-api/api/IccReceiptApi.d.ts +17 -0
  5. package/icc-api/api/IccReceiptApi.js +52 -0
  6. package/icc-api/api/IccReceiptApi.js.map +1 -1
  7. package/icc-api/model/DataAttachment.d.ts +22 -0
  8. package/icc-api/model/DataAttachment.js.map +1 -1
  9. package/icc-api/model/Document.d.ts +6 -0
  10. package/icc-api/model/Document.js.map +1 -1
  11. package/icc-api/model/Receipt.d.ts +6 -0
  12. package/icc-api/model/Receipt.js.map +1 -1
  13. package/icc-x-api/crypto/BaseExchangeDataManager.js +2 -2
  14. package/icc-x-api/crypto/BaseExchangeDataManager.js.map +1 -1
  15. package/icc-x-api/crypto/ExchangeDataManager.js +3 -3
  16. package/icc-x-api/crypto/ExchangeDataManager.js.map +1 -1
  17. package/icc-x-api/crypto/ExtendedApisUtils.d.ts +1 -1
  18. package/icc-x-api/crypto/ExtendedApisUtils.js.map +1 -1
  19. package/icc-x-api/crypto/ExtendedApisUtilsImpl.d.ts +1 -1
  20. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js +8 -2
  21. package/icc-x-api/crypto/ExtendedApisUtilsImpl.js.map +1 -1
  22. package/icc-x-api/crypto/RecoveryDataEncryption.js.map +1 -1
  23. package/icc-x-api/icc-accesslog-x-api.js +7 -7
  24. package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
  25. package/icc-x-api/icc-calendar-item-x-api.js +7 -7
  26. package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  27. package/icc-x-api/icc-classification-x-api.js +4 -5
  28. package/icc-x-api/icc-classification-x-api.js.map +1 -1
  29. package/icc-x-api/icc-code-x-api.d.ts +2 -2
  30. package/icc-x-api/icc-code-x-api.js +3 -33
  31. package/icc-x-api/icc-code-x-api.js.map +1 -1
  32. package/icc-x-api/icc-contact-x-api.js +20 -33
  33. package/icc-x-api/icc-contact-x-api.js.map +1 -1
  34. package/icc-x-api/icc-doctemplate-x-api.js.map +1 -1
  35. package/icc-x-api/icc-document-x-api.d.ts +8 -7
  36. package/icc-x-api/icc-document-x-api.js +64 -22
  37. package/icc-x-api/icc-document-x-api.js.map +1 -1
  38. package/icc-x-api/icc-form-x-api.js +3 -4
  39. package/icc-x-api/icc-form-x-api.js.map +1 -1
  40. package/icc-x-api/icc-helement-x-api.js +11 -11
  41. package/icc-x-api/icc-helement-x-api.js.map +1 -1
  42. package/icc-x-api/icc-invoice-x-api.js +3 -4
  43. package/icc-x-api/icc-invoice-x-api.js.map +1 -1
  44. package/icc-x-api/icc-maintenance-task-x-api.js +3 -3
  45. package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
  46. package/icc-x-api/icc-patient-x-api.js +29 -29
  47. package/icc-x-api/icc-patient-x-api.js.map +1 -1
  48. package/icc-x-api/icc-receipt-x-api.d.ts +40 -0
  49. package/icc-x-api/icc-receipt-x-api.js +79 -1
  50. package/icc-x-api/icc-receipt-x-api.js.map +1 -1
  51. package/icc-x-api/icc-topic-x-api.js.map +1 -1
  52. package/icc-x-api/index.js +1 -1
  53. package/icc-x-api/index.js.map +1 -1
  54. package/icc-x-api/utils/code-util.d.ts +23 -0
  55. package/icc-x-api/utils/code-util.js +39 -2
  56. package/icc-x-api/utils/code-util.js.map +1 -1
  57. package/icc-x-api/utils/collection-utils.d.ts +13 -0
  58. package/icc-x-api/utils/collection-utils.js +69 -0
  59. package/icc-x-api/utils/collection-utils.js.map +1 -1
  60. package/icc-x-api/utils/compression-utils.d.ts +28 -0
  61. package/icc-x-api/utils/compression-utils.js +106 -0
  62. package/icc-x-api/utils/compression-utils.js.map +1 -0
  63. package/icc-x-api/utils/crypto-utils.js +7 -7
  64. package/icc-x-api/utils/crypto-utils.js.map +1 -1
  65. package/icc-x-api/utils/formatting-util.d.ts +1 -3
  66. package/icc-x-api/utils/formatting-util.js +15 -17
  67. package/icc-x-api/utils/formatting-util.js.map +1 -1
  68. package/icc-x-api/utils/hcp-util.js +2 -3
  69. package/icc-x-api/utils/hcp-util.js.map +1 -1
  70. package/icc-x-api/utils/insurability-util.js +10 -8
  71. package/icc-x-api/utils/insurability-util.js.map +1 -1
  72. package/icc-x-api/utils/lzma-wasm.d.ts +6 -0
  73. package/icc-x-api/utils/lzma-wasm.js +81 -0
  74. package/icc-x-api/utils/lzma-wasm.js.map +1 -0
  75. package/icc-x-api/utils/mutex.d.ts +12 -0
  76. package/icc-x-api/utils/mutex.js +26 -0
  77. package/icc-x-api/utils/mutex.js.map +1 -0
  78. package/icc-x-api/utils/websocket.js +7 -7
  79. package/icc-x-api/utils/websocket.js.map +1 -1
  80. package/icc-x-api/wasm/lzma/lzma.js +2 -0
  81. package/icc-x-api/wasm/lzma/lzma.wasm +0 -0
  82. package/package.json +2 -11
  83. package/icc-x-api/utils/uuid-encoder.d.ts +0 -44
  84. package/icc-x-api/utils/uuid-encoder.js +0 -114
  85. package/icc-x-api/utils/uuid-encoder.js.map +0 -1
  86. package/test/icc-api/api/IccAgendaApi.d.ts +0 -1
  87. package/test/icc-api/api/IccAgendaApi.js +0 -64
  88. package/test/icc-api/api/IccAgendaApi.js.map +0 -1
  89. package/test/icc-api/api/IccAnonymousAccessApi.d.ts +0 -1
  90. package/test/icc-api/api/IccAnonymousAccessApi.js +0 -58
  91. package/test/icc-api/api/IccAnonymousAccessApi.js.map +0 -1
  92. package/test/icc-api/api/IccCalendarItemApi.d.ts +0 -1
  93. package/test/icc-api/api/IccCalendarItemApi.js +0 -67
  94. package/test/icc-api/api/IccCalendarItemApi.js.map +0 -1
  95. package/test/icc-api/api/IccCalendarItemTypeApi.d.ts +0 -1
  96. package/test/icc-api/api/IccCalendarItemTypeApi.js +0 -96
  97. package/test/icc-api/api/IccCalendarItemTypeApi.js.map +0 -1
  98. package/test/icc-api/api/IccCodeApi.d.ts +0 -1
  99. package/test/icc-api/api/IccCodeApi.js +0 -38
  100. package/test/icc-api/api/IccCodeApi.js.map +0 -1
  101. package/test/icc-api/api/IccDocumentApi.d.ts +0 -1
  102. package/test/icc-api/api/IccDocumentApi.js +0 -199
  103. package/test/icc-api/api/IccDocumentApi.js.map +0 -1
  104. package/test/icc-api/api/IccGroupApi.d.ts +0 -1
  105. package/test/icc-api/api/IccGroupApi.js +0 -50
  106. package/test/icc-api/api/IccGroupApi.js.map +0 -1
  107. package/test/icc-api/api/IccKeywordApi.d.ts +0 -1
  108. package/test/icc-api/api/IccKeywordApi.js +0 -64
  109. package/test/icc-api/api/IccKeywordApi.js.map +0 -1
  110. package/test/icc-api/api/IccMedicalLocationApi.d.ts +0 -1
  111. package/test/icc-api/api/IccMedicalLocationApi.js +0 -64
  112. package/test/icc-api/api/IccMedicalLocationApi.js.map +0 -1
  113. package/test/icc-api/api/IccPlaceApi.d.ts +0 -1
  114. package/test/icc-api/api/IccPlaceApi.js +0 -64
  115. package/test/icc-api/api/IccPlaceApi.js.map +0 -1
  116. package/test/icc-api/api/IccRecoveryDataApi.d.ts +0 -1
  117. package/test/icc-api/api/IccRecoveryDataApi.js +0 -95
  118. package/test/icc-api/api/IccRecoveryDataApi.js.map +0 -1
  119. package/test/icc-api/api/IccRoleApi.d.ts +0 -1
  120. package/test/icc-api/api/IccRoleApi.js +0 -34
  121. package/test/icc-api/api/IccRoleApi.js.map +0 -1
  122. package/test/icc-api/api/IccUserApi.d.ts +0 -1
  123. package/test/icc-api/api/IccUserApi.js +0 -96
  124. package/test/icc-api/api/IccUserApi.js.map +0 -1
  125. package/test/icc-api/e2e/IccCalendarItemApi.d.ts +0 -1
  126. package/test/icc-api/e2e/IccCalendarItemApi.js +0 -46
  127. package/test/icc-api/e2e/IccCalendarItemApi.js.map +0 -1
  128. package/test/icc-api/model/modelHelpersTest.d.ts +0 -1
  129. package/test/icc-api/model/modelHelpersTest.js +0 -45
  130. package/test/icc-api/model/modelHelpersTest.js.map +0 -1
  131. package/test/icc-x-api/auth/group-switch-test.d.ts +0 -1
  132. package/test/icc-x-api/auth/group-switch-test.js +0 -81
  133. package/test/icc-x-api/auth/group-switch-test.js.map +0 -1
  134. package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +0 -2
  135. package/test/icc-x-api/auth/jwt-concurrency-test.js +0 -112
  136. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +0 -1
  137. package/test/icc-x-api/auth/jwt-provider-test.d.ts +0 -1
  138. package/test/icc-x-api/auth/jwt-provider-test.js +0 -197
  139. package/test/icc-x-api/auth/jwt-provider-test.js.map +0 -1
  140. package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +0 -1
  141. package/test/icc-x-api/auth/smart-auth-provider-test.js +0 -224
  142. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +0 -1
  143. package/test/icc-x-api/autofix-anonymity-test.d.ts +0 -1
  144. package/test/icc-x-api/autofix-anonymity-test.js +0 -122
  145. package/test/icc-x-api/autofix-anonymity-test.js.map +0 -1
  146. package/test/icc-x-api/confidential-entities-test.d.ts +0 -1
  147. package/test/icc-x-api/confidential-entities-test.js +0 -168
  148. package/test/icc-x-api/confidential-entities-test.js.map +0 -1
  149. package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +0 -1
  150. package/test/icc-x-api/crud/comprehensive-crud-test.js +0 -276
  151. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +0 -1
  152. package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +0 -16
  153. package/test/icc-x-api/crud/entities-crud-test-interface.js +0 -408
  154. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +0 -1
  155. package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +0 -1
  156. package/test/icc-x-api/crypto/anonymous-delegations-test.js +0 -587
  157. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +0 -1
  158. package/test/icc-x-api/crypto/concurrency.d.ts +0 -1
  159. package/test/icc-x-api/crypto/concurrency.js +0 -35
  160. package/test/icc-x-api/crypto/concurrency.js.map +0 -1
  161. package/test/icc-x-api/crypto/crypto-utils.d.ts +0 -1
  162. package/test/icc-x-api/crypto/crypto-utils.js +0 -79
  163. package/test/icc-x-api/crypto/crypto-utils.js.map +0 -1
  164. package/test/icc-x-api/crypto/cryptoTest.d.ts +0 -2
  165. package/test/icc-x-api/crypto/cryptoTest.js +0 -402
  166. package/test/icc-x-api/crypto/cryptoTest.js.map +0 -1
  167. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +0 -1
  168. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +0 -166
  169. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +0 -1
  170. package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +0 -1
  171. package/test/icc-x-api/crypto/exchange-data-manager-test.js +0 -674
  172. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +0 -1
  173. package/test/icc-x-api/crypto/full-crypto-test.d.ts +0 -1
  174. package/test/icc-x-api/crypto/full-crypto-test.js +0 -454
  175. package/test/icc-x-api/crypto/full-crypto-test.js.map +0 -1
  176. package/test/icc-x-api/crypto/legacy-metadata-migration-test.d.ts +0 -1
  177. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +0 -379
  178. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +0 -1
  179. package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +0 -1
  180. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +0 -278
  181. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +0 -1
  182. package/test/icc-x-api/crypto/shamir.d.ts +0 -2
  183. package/test/icc-x-api/crypto/shamir.js +0 -167
  184. package/test/icc-x-api/crypto/shamir.js.map +0 -1
  185. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +0 -1
  186. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +0 -71
  187. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +0 -1
  188. package/test/icc-x-api/crypto/soft-deleted-data-owners.d.ts +0 -2
  189. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +0 -113
  190. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +0 -1
  191. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +0 -1
  192. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +0 -246
  193. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +0 -1
  194. package/test/icc-x-api/entity-with-attachments-api-test.d.ts +0 -1
  195. package/test/icc-x-api/entity-with-attachments-api-test.js +0 -142
  196. package/test/icc-x-api/entity-with-attachments-api-test.js.map +0 -1
  197. package/test/icc-x-api/filters/filters.d.ts +0 -1
  198. package/test/icc-x-api/filters/filters.js +0 -49
  199. package/test/icc-x-api/filters/filters.js.map +0 -1
  200. package/test/icc-x-api/filters/healthelement.d.ts +0 -1
  201. package/test/icc-x-api/filters/healthelement.js +0 -333
  202. package/test/icc-x-api/filters/healthelement.js.map +0 -1
  203. package/test/icc-x-api/icc-accesslog-x-api.d.ts +0 -1
  204. package/test/icc-x-api/icc-accesslog-x-api.js +0 -106
  205. package/test/icc-x-api/icc-accesslog-x-api.js.map +0 -1
  206. package/test/icc-x-api/icc-application-settings-x-api.d.ts +0 -1
  207. package/test/icc-x-api/icc-application-settings-x-api.js +0 -91
  208. package/test/icc-x-api/icc-application-settings-x-api.js.map +0 -1
  209. package/test/icc-x-api/icc-auth-api.d.ts +0 -1
  210. package/test/icc-x-api/icc-auth-api.js +0 -47
  211. package/test/icc-x-api/icc-auth-api.js.map +0 -1
  212. package/test/icc-x-api/icc-calendar-item-x-api.d.ts +0 -1
  213. package/test/icc-x-api/icc-calendar-item-x-api.js +0 -150
  214. package/test/icc-x-api/icc-calendar-item-x-api.js.map +0 -1
  215. package/test/icc-x-api/icc-contact-x-api.d.ts +0 -1
  216. package/test/icc-x-api/icc-contact-x-api.js +0 -355
  217. package/test/icc-x-api/icc-contact-x-api.js.map +0 -1
  218. package/test/icc-x-api/icc-document-x-api.d.ts +0 -1
  219. package/test/icc-x-api/icc-document-x-api.js +0 -76
  220. package/test/icc-x-api/icc-document-x-api.js.map +0 -1
  221. package/test/icc-x-api/icc-form-x-api.d.ts +0 -1
  222. package/test/icc-x-api/icc-form-x-api.js +0 -413
  223. package/test/icc-x-api/icc-form-x-api.js.map +0 -1
  224. package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +0 -1
  225. package/test/icc-x-api/icc-hcparty-x-api-test.js +0 -43
  226. package/test/icc-x-api/icc-hcparty-x-api-test.js.map +0 -1
  227. package/test/icc-x-api/icc-helement-x-api-test.d.ts +0 -1
  228. package/test/icc-x-api/icc-helement-x-api-test.js +0 -155
  229. package/test/icc-x-api/icc-helement-x-api-test.js.map +0 -1
  230. package/test/icc-x-api/icc-invoice-x-api.d.ts +0 -1
  231. package/test/icc-x-api/icc-invoice-x-api.js +0 -99
  232. package/test/icc-x-api/icc-invoice-x-api.js.map +0 -1
  233. package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +0 -1
  234. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +0 -222
  235. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +0 -1
  236. package/test/icc-x-api/icc-message-x-api.d.ts +0 -1
  237. package/test/icc-x-api/icc-message-x-api.js +0 -54
  238. package/test/icc-x-api/icc-message-x-api.js.map +0 -1
  239. package/test/icc-x-api/icc-patient-x-api-test.d.ts +0 -1
  240. package/test/icc-x-api/icc-patient-x-api-test.js +0 -165
  241. package/test/icc-x-api/icc-patient-x-api-test.js.map +0 -1
  242. package/test/icc-x-api/icc-recovery-x-api.d.ts +0 -1
  243. package/test/icc-x-api/icc-recovery-x-api.js +0 -175
  244. package/test/icc-x-api/icc-recovery-x-api.js.map +0 -1
  245. package/test/icc-x-api/icc-topic-x-api.d.ts +0 -1
  246. package/test/icc-x-api/icc-topic-x-api.js +0 -269
  247. package/test/icc-x-api/icc-topic-x-api.js.map +0 -1
  248. package/test/icc-x-api/icc-user-x-api-test.d.ts +0 -1
  249. package/test/icc-x-api/icc-user-x-api-test.js +0 -99
  250. package/test/icc-x-api/icc-user-x-api-test.js.map +0 -1
  251. package/test/icc-x-api/keyless-api.d.ts +0 -1
  252. package/test/icc-x-api/keyless-api.js +0 -125
  253. package/test/icc-x-api/keyless-api.js.map +0 -1
  254. package/test/icc-x-api/patient-user.d.ts +0 -2
  255. package/test/icc-x-api/patient-user.js +0 -103
  256. package/test/icc-x-api/patient-user.js.map +0 -1
  257. package/test/icc-x-api/storage/storage.d.ts +0 -1
  258. package/test/icc-x-api/storage/storage.js +0 -48
  259. package/test/icc-x-api/storage/storage.js.map +0 -1
  260. package/test/icc-x-api/test-api-no-parent.d.ts +0 -1
  261. package/test/icc-x-api/test-api-no-parent.js +0 -79
  262. package/test/icc-x-api/test-api-no-parent.js.map +0 -1
  263. package/test/icc-x-api/test-legacy-data-support.d.ts +0 -1
  264. package/test/icc-x-api/test-legacy-data-support.js +0 -375
  265. package/test/icc-x-api/test-legacy-data-support.js.map +0 -1
  266. package/test/icc-x-api/utils/graph-test.d.ts +0 -1
  267. package/test/icc-x-api/utils/graph-test.js +0 -54
  268. package/test/icc-x-api/utils/graph-test.js.map +0 -1
  269. package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +0 -1
  270. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +0 -364
  271. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +0 -1
  272. package/test/support/CSM-185.d.ts +0 -1
  273. package/test/support/CSM-185.js +0 -124
  274. package/test/support/CSM-185.js.map +0 -1
  275. package/test/support/CSM-243.d.ts +0 -1
  276. package/test/support/CSM-243.js +0 -120
  277. package/test/support/CSM-243.js.map +0 -1
  278. package/test/support/CSM-543.d.ts +0 -1
  279. package/test/support/CSM-543.js +0 -164
  280. package/test/support/CSM-543.js.map +0 -1
  281. package/test/support/CSM-729.d.ts +0 -1
  282. package/test/support/CSM-729.js +0 -225
  283. package/test/support/CSM-729.js.map +0 -1
  284. package/test/support/CSM-87.d.ts +0 -0
  285. package/test/support/CSM-87.js +0 -21
  286. package/test/support/CSM-87.js.map +0 -1
  287. package/test/support/CSM-93.d.ts +0 -1
  288. package/test/support/CSM-93.js +0 -112
  289. package/test/support/CSM-93.js.map +0 -1
  290. package/test/utils/FakeDataOwnerApi.d.ts +0 -32
  291. package/test/utils/FakeDataOwnerApi.js +0 -136
  292. package/test/utils/FakeDataOwnerApi.js.map +0 -1
  293. package/test/utils/FakeEncryptionKeysManager.d.ts +0 -36
  294. package/test/utils/FakeEncryptionKeysManager.js +0 -98
  295. package/test/utils/FakeEncryptionKeysManager.js.map +0 -1
  296. package/test/utils/FakeExchangeDataApi.d.ts +0 -32
  297. package/test/utils/FakeExchangeDataApi.js +0 -92
  298. package/test/utils/FakeExchangeDataApi.js.map +0 -1
  299. package/test/utils/FakeExchangeDataManager.d.ts +0 -48
  300. package/test/utils/FakeExchangeDataManager.js +0 -82
  301. package/test/utils/FakeExchangeDataManager.js.map +0 -1
  302. package/test/utils/FakeExchangeDataMapManager.d.ts +0 -12
  303. package/test/utils/FakeExchangeDataMapManager.js +0 -38
  304. package/test/utils/FakeExchangeDataMapManager.js.map +0 -1
  305. package/test/utils/FakeGenericApi.d.ts +0 -16
  306. package/test/utils/FakeGenericApi.js +0 -65
  307. package/test/utils/FakeGenericApi.js.map +0 -1
  308. package/test/utils/KeylessCryptoStrategies.d.ts +0 -23
  309. package/test/utils/KeylessCryptoStrategies.js +0 -26
  310. package/test/utils/KeylessCryptoStrategies.js.map +0 -1
  311. package/test/utils/TestApi.d.ts +0 -3
  312. package/test/utils/TestApi.js +0 -30
  313. package/test/utils/TestApi.js.map +0 -1
  314. package/test/utils/TestCollectionUtils.d.ts +0 -1
  315. package/test/utils/TestCollectionUtils.js +0 -109
  316. package/test/utils/TestCollectionUtils.js.map +0 -1
  317. package/test/utils/TestCryptoStrategies.d.ts +0 -42
  318. package/test/utils/TestCryptoStrategies.js +0 -80
  319. package/test/utils/TestCryptoStrategies.js.map +0 -1
  320. package/test/utils/TestStorage.d.ts +0 -23
  321. package/test/utils/TestStorage.js +0 -61
  322. package/test/utils/TestStorage.js.map +0 -1
  323. package/test/utils/roles.d.ts +0 -14
  324. package/test/utils/roles.js +0 -345
  325. package/test/utils/roles.js.map +0 -1
  326. package/test/utils/test_utils.d.ts +0 -87
  327. package/test/utils/test_utils.js +0 -452
  328. package/test/utils/test_utils.js.map +0 -1
@@ -1,3 +1,16 @@
1
+ /**
2
+ * Recursively deep clone a value. Handles primitives, arrays, plain objects, Date, RegExp, Set, Map, and typed arrays.
3
+ * Non-cloneable values (functions, WeakMap, WeakSet, etc.) are copied by reference.
4
+ */
5
+ export declare function cloneDeep<T>(obj: T): T;
6
+ /**
7
+ * Remove duplicate elements from an array based on a key function or property name.
8
+ */
9
+ export declare function uniqBy<T>(arr: T[], key: ((item: T) => unknown) | string): T[];
10
+ /**
11
+ * Sort an array by a key function. Returns a new sorted array (does not mutate the original).
12
+ */
13
+ export declare function sortBy<T>(arr: T[], keyFn: (item: T) => string | number | boolean | null | undefined): T[];
1
14
  /**
2
15
  * Check if two sets are equals (they contain the same elements). Will not work if the content can't be compared by `==`.
3
16
  */
@@ -9,11 +9,80 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.cloneDeep = cloneDeep;
13
+ exports.uniqBy = uniqBy;
14
+ exports.sortBy = sortBy;
12
15
  exports.setEquals = setEquals;
13
16
  exports.arrayEquals = arrayEquals;
14
17
  exports.anyEquals = anyEquals;
15
18
  exports.objectEquals = objectEquals;
16
19
  exports.asyncGeneratorToArray = asyncGeneratorToArray;
20
+ /**
21
+ * Recursively deep clone a value. Handles primitives, arrays, plain objects, Date, RegExp, Set, Map, and typed arrays.
22
+ * Non-cloneable values (functions, WeakMap, WeakSet, etc.) are copied by reference.
23
+ */
24
+ function cloneDeep(obj) {
25
+ if (obj === null || typeof obj !== 'object')
26
+ return obj;
27
+ if (obj instanceof Date)
28
+ return new Date(obj.getTime());
29
+ if (obj instanceof RegExp)
30
+ return new RegExp(obj.source, obj.flags);
31
+ if (Array.isArray(obj))
32
+ return obj.map((item) => cloneDeep(item));
33
+ if (obj instanceof Set) {
34
+ const result = new Set();
35
+ obj.forEach((v) => result.add(cloneDeep(v)));
36
+ return result;
37
+ }
38
+ if (obj instanceof Map) {
39
+ const result = new Map();
40
+ obj.forEach((v, k) => result.set(cloneDeep(k), cloneDeep(v)));
41
+ return result;
42
+ }
43
+ if (ArrayBuffer.isView(obj)) {
44
+ const TypedArrayCtor = obj.constructor;
45
+ return new TypedArrayCtor(obj.buffer.slice(0));
46
+ }
47
+ const result = Object.create(Object.getPrototypeOf(obj));
48
+ for (const key of Object.keys(obj)) {
49
+ result[key] = cloneDeep(obj[key]);
50
+ }
51
+ return result;
52
+ }
53
+ /**
54
+ * Remove duplicate elements from an array based on a key function or property name.
55
+ */
56
+ function uniqBy(arr, key) {
57
+ const seen = new Set();
58
+ return arr.filter((item) => {
59
+ const k = typeof key === 'string' ? item[key] : key(item);
60
+ if (seen.has(k))
61
+ return false;
62
+ seen.add(k);
63
+ return true;
64
+ });
65
+ }
66
+ /**
67
+ * Sort an array by a key function. Returns a new sorted array (does not mutate the original).
68
+ */
69
+ function sortBy(arr, keyFn) {
70
+ return [...arr].sort((a, b) => {
71
+ const ka = keyFn(a);
72
+ const kb = keyFn(b);
73
+ if (ka == null && kb == null)
74
+ return 0;
75
+ if (ka == null)
76
+ return -1;
77
+ if (kb == null)
78
+ return 1;
79
+ if (ka < kb)
80
+ return -1;
81
+ if (ka > kb)
82
+ return 1;
83
+ return 0;
84
+ });
85
+ }
17
86
  /**
18
87
  * Check if two sets are equals (they contain the same elements). Will not work if the content can't be compared by `==`.
19
88
  */
@@ -1 +1 @@
1
- {"version":3,"file":"collection-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/collection-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Check if two sets are equals (they contain the same elements). Will not work if the content can't be compared by `==`.\n */\nexport function setEquals<T>(setA: Set<T>, setB: Set<T>): boolean {\n if (setA.size != setB.size) return false\n return Array.from(setA).every((x) => setB.has(x))\n}\n\n/**\n * Check if two arrays are equals (they contain the same elements).\n */\nexport function arrayEquals<T>(arrayA: T[], arrayB: T[]): boolean {\n if (arrayA.length != arrayB.length) return false\n for (let i = 0; i < arrayA.length; ++i) {\n if (!anyEquals(arrayA[i], arrayB[i])) return false\n }\n return true\n}\n\n/**\n * Check if two elements are equals (they contain the same elements).\n */\nexport function anyEquals(anyA: any, anyB: any): boolean {\n //Test if object is array\n if (Array.isArray(anyA) && Array.isArray(anyB)) {\n return arrayEquals(anyA, anyB)\n } /*Test if objects are set */ else if (anyA instanceof Set && anyB instanceof Set) {\n return setEquals(anyA, anyB)\n } else if (typeof anyA === 'object' && typeof anyB === 'object') {\n return objectEquals(anyA, anyB)\n }\n return anyA === anyB\n}\n\n/**\n * Check if two objects are equals (by comparing the properties in a deep way).\n * @param objectA\n * @param objectB\n * @param ignoredProperties\n */\nexport function objectEquals<T extends { [key: string]: any }>(objectA: T, objectB: T, ignoredProperties?: string[]): boolean {\n const missingInA = Object.keys(objectB)\n .filter((key) => !ignoredProperties?.includes(key))\n .filter((key) => !Object.keys(objectA).includes(key))\n .filter((key) => objectB[key] !== undefined && objectB[key] !== null)\n\n if (missingInA.length > 0) return false\n\n const missingInB = Object.keys(objectA)\n .filter((key) => !ignoredProperties?.includes(key))\n .filter((key) => !Object.keys(objectB).includes(key))\n .filter((key) => objectA[key] !== undefined && objectA[key] !== null)\n\n if (missingInB.length > 0) return false\n\n for (let i = 0, keys = Object.keys(objectA); i < keys.length; i++) {\n const key = keys[i]\n if (ignoredProperties?.includes(key)) continue\n if (!anyEquals(objectA[key], objectB[key])) return false\n }\n\n return true\n}\n\n/**\n * Fully consumes an async generator and provides all results as an array.\n * @param generator an async generator.\n */\nexport async function asyncGeneratorToArray<T>(generator: AsyncGenerator<T, any, never>): Promise<T[]> {\n const res = []\n let latest = await generator.next()\n while (!latest.done) {\n res.push(latest.value)\n latest = await generator.next()\n }\n return res\n}\n"]}
1
+ {"version":3,"file":"collection-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/collection-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Recursively deep clone a value. Handles primitives, arrays, plain objects, Date, RegExp, Set, Map, and typed arrays.\n * Non-cloneable values (functions, WeakMap, WeakSet, etc.) are copied by reference.\n */\nexport function cloneDeep<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') return obj\n\n if (obj instanceof Date) return new Date(obj.getTime()) as unknown as T\n if (obj instanceof RegExp) return new RegExp(obj.source, obj.flags) as unknown as T\n\n if (Array.isArray(obj)) return obj.map((item) => cloneDeep(item)) as unknown as T\n\n if (obj instanceof Set) {\n const result = new Set()\n obj.forEach((v) => result.add(cloneDeep(v)))\n return result as unknown as T\n }\n\n if (obj instanceof Map) {\n const result = new Map()\n obj.forEach((v, k) => result.set(cloneDeep(k), cloneDeep(v)))\n return result as unknown as T\n }\n\n if (ArrayBuffer.isView(obj)) {\n const TypedArrayCtor = obj.constructor as new (buffer: ArrayBuffer) => typeof obj\n return new TypedArrayCtor((obj as unknown as { buffer: ArrayBuffer }).buffer.slice(0)) as unknown as T\n }\n\n const result: any = Object.create(Object.getPrototypeOf(obj))\n for (const key of Object.keys(obj)) {\n result[key] = cloneDeep((obj as any)[key])\n }\n return result\n}\n\n/**\n * Remove duplicate elements from an array based on a key function or property name.\n */\nexport function uniqBy<T>(arr: T[], key: ((item: T) => unknown) | string): T[] {\n const seen = new Set()\n return arr.filter((item) => {\n const k = typeof key === 'string' ? (item as any)[key] : key(item)\n if (seen.has(k)) return false\n seen.add(k)\n return true\n })\n}\n\n/**\n * Sort an array by a key function. Returns a new sorted array (does not mutate the original).\n */\nexport function sortBy<T>(arr: T[], keyFn: (item: T) => string | number | boolean | null | undefined): T[] {\n return [...arr].sort((a, b) => {\n const ka = keyFn(a)\n const kb = keyFn(b)\n if (ka == null && kb == null) return 0\n if (ka == null) return -1\n if (kb == null) return 1\n if (ka < kb) return -1\n if (ka > kb) return 1\n return 0\n })\n}\n\n/**\n * Check if two sets are equals (they contain the same elements). Will not work if the content can't be compared by `==`.\n */\nexport function setEquals<T>(setA: Set<T>, setB: Set<T>): boolean {\n if (setA.size != setB.size) return false\n return Array.from(setA).every((x) => setB.has(x))\n}\n\n/**\n * Check if two arrays are equals (they contain the same elements).\n */\nexport function arrayEquals<T>(arrayA: T[], arrayB: T[]): boolean {\n if (arrayA.length != arrayB.length) return false\n for (let i = 0; i < arrayA.length; ++i) {\n if (!anyEquals(arrayA[i], arrayB[i])) return false\n }\n return true\n}\n\n/**\n * Check if two elements are equals (they contain the same elements).\n */\nexport function anyEquals(anyA: any, anyB: any): boolean {\n //Test if object is array\n if (Array.isArray(anyA) && Array.isArray(anyB)) {\n return arrayEquals(anyA, anyB)\n } /*Test if objects are set */ else if (anyA instanceof Set && anyB instanceof Set) {\n return setEquals(anyA, anyB)\n } else if (typeof anyA === 'object' && typeof anyB === 'object') {\n return objectEquals(anyA, anyB)\n }\n return anyA === anyB\n}\n\n/**\n * Check if two objects are equals (by comparing the properties in a deep way).\n * @param objectA\n * @param objectB\n * @param ignoredProperties\n */\nexport function objectEquals<T extends { [key: string]: any }>(objectA: T, objectB: T, ignoredProperties?: string[]): boolean {\n const missingInA = Object.keys(objectB)\n .filter((key) => !ignoredProperties?.includes(key))\n .filter((key) => !Object.keys(objectA).includes(key))\n .filter((key) => objectB[key] !== undefined && objectB[key] !== null)\n\n if (missingInA.length > 0) return false\n\n const missingInB = Object.keys(objectA)\n .filter((key) => !ignoredProperties?.includes(key))\n .filter((key) => !Object.keys(objectB).includes(key))\n .filter((key) => objectA[key] !== undefined && objectA[key] !== null)\n\n if (missingInB.length > 0) return false\n\n for (let i = 0, keys = Object.keys(objectA); i < keys.length; i++) {\n const key = keys[i]\n if (ignoredProperties?.includes(key)) continue\n if (!anyEquals(objectA[key], objectB[key])) return false\n }\n\n return true\n}\n\n/**\n * Fully consumes an async generator and provides all results as an array.\n * @param generator an async generator.\n */\nexport async function asyncGeneratorToArray<T>(generator: AsyncGenerator<T, any, never>): Promise<T[]> {\n const res = []\n let latest = await generator.next()\n while (!latest.done) {\n res.push(latest.value)\n latest = await generator.next()\n }\n return res\n}\n"]}
@@ -0,0 +1,28 @@
1
+ export interface CompressionResult {
2
+ data: ArrayBuffer;
3
+ algorithm: string | undefined;
4
+ }
5
+ /**
6
+ * Returns the current compression algorithms version string.
7
+ * This version is bumped whenever the set of tried algorithms changes.
8
+ */
9
+ export declare function getCompressionVersion(): string;
10
+ /**
11
+ * Attempts to compress the given data using available compression algorithms, picking the best result.
12
+ * If any of the provided UTIs indicates the data is already in a compressed format (jpeg, png, zip, ...),
13
+ * compression is skipped entirely.
14
+ *
15
+ * @param data the raw data to compress.
16
+ * @param utis optional UTIs describing the data format; used to skip compression for already-compressed formats.
17
+ * @returns the (possibly compressed) data and the algorithm used, or undefined if no compression was applied.
18
+ */
19
+ export declare function compressData(data: ArrayBuffer | Uint8Array, utis?: string[]): Promise<CompressionResult>;
20
+ /**
21
+ * Decompresses data that was compressed using one of the supported algorithms.
22
+ *
23
+ * @param data the compressed data.
24
+ * @param algorithm the compression algorithm that was used (e.g. 'lzma'). If undefined, returns the data as-is.
25
+ * @returns the decompressed data.
26
+ * @throws if the algorithm is not supported or decompression fails.
27
+ */
28
+ export declare function decompressData(data: ArrayBuffer | Uint8Array, algorithm: string | undefined): Promise<ArrayBuffer>;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getCompressionVersion = getCompressionVersion;
13
+ exports.compressData = compressData;
14
+ exports.decompressData = decompressData;
15
+ const lzma_wasm_1 = require("./lzma-wasm");
16
+ const COMPRESSION_VERSION = '1';
17
+ const MINIMUM_SIZE_FOR_COMPRESSION = 64;
18
+ /** UTIs for formats that are already compressed and won't benefit from additional compression. */
19
+ const ALREADY_COMPRESSED_UTIS = new Set([
20
+ // Images
21
+ 'public.jpeg',
22
+ 'public.jpeg2000',
23
+ 'public.png',
24
+ 'com.compuserve.gif',
25
+ 'com.microsoft.bmp', // low entropy but compression marginal vs overhead
26
+ // Video
27
+ 'public.mpeg',
28
+ 'public.mpeg4',
29
+ 'public.mpegts',
30
+ 'com.apple.quicktime-movie',
31
+ // Audio
32
+ 'public.mpeg4-audio',
33
+ 'public.mp3',
34
+ // Archives / compressed formats
35
+ 'com.pkware.zip-archive',
36
+ 'org.gnu.gnu-zip-archive',
37
+ 'org.bzip.bzip2-archive',
38
+ 'com.rarlab.rar-archive',
39
+ 'com.allume.stuffit-archive',
40
+ 'org.7-zip.7-zip-archive',
41
+ 'public.tar-archive',
42
+ 'org.gnu.gnu-tar-archive',
43
+ // Legacy UTI variants (pre-v1.0.117 camelCase format)
44
+ 'com.pkware.zipArchive',
45
+ 'org.gnu.gnuZipArchive',
46
+ 'org.bzip.bzip2Archive',
47
+ 'com.rarlab.rarArchive',
48
+ 'com.allume.stuffitArchive',
49
+ 'org.gnu.gnuTarArchive',
50
+ 'public.mpeg4Audio',
51
+ 'com.apple.quicktimeMovie',
52
+ ]);
53
+ /**
54
+ * Returns the current compression algorithms version string.
55
+ * This version is bumped whenever the set of tried algorithms changes.
56
+ */
57
+ function getCompressionVersion() {
58
+ return COMPRESSION_VERSION;
59
+ }
60
+ /**
61
+ * Attempts to compress the given data using available compression algorithms, picking the best result.
62
+ * If any of the provided UTIs indicates the data is already in a compressed format (jpeg, png, zip, ...),
63
+ * compression is skipped entirely.
64
+ *
65
+ * @param data the raw data to compress.
66
+ * @param utis optional UTIs describing the data format; used to skip compression for already-compressed formats.
67
+ * @returns the (possibly compressed) data and the algorithm used, or undefined if no compression was applied.
68
+ */
69
+ function compressData(data, utis) {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ const raw = toArrayBuffer(data);
72
+ if ((utis === null || utis === void 0 ? void 0 : utis.some((uti) => ALREADY_COMPRESSED_UTIS.has(uti))) || raw.byteLength < MINIMUM_SIZE_FOR_COMPRESSION) {
73
+ return { data: raw, algorithm: undefined };
74
+ }
75
+ const compressed = yield (0, lzma_wasm_1.lzmaWasmCompress)(data);
76
+ if (compressed.byteLength < raw.byteLength) {
77
+ return { data: compressed, algorithm: 'lzma2' };
78
+ }
79
+ return { data: raw, algorithm: undefined };
80
+ });
81
+ }
82
+ /**
83
+ * Decompresses data that was compressed using one of the supported algorithms.
84
+ *
85
+ * @param data the compressed data.
86
+ * @param algorithm the compression algorithm that was used (e.g. 'lzma'). If undefined, returns the data as-is.
87
+ * @returns the decompressed data.
88
+ * @throws if the algorithm is not supported or decompression fails.
89
+ */
90
+ function decompressData(data, algorithm) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ if (!algorithm) {
93
+ return toArrayBuffer(data);
94
+ }
95
+ if (algorithm === 'lzma2') {
96
+ return (0, lzma_wasm_1.lzmaWasmDecompress)(data);
97
+ }
98
+ throw new Error(`Unsupported compression algorithm: ${algorithm}`);
99
+ });
100
+ }
101
+ function toArrayBuffer(data) {
102
+ if (data instanceof ArrayBuffer)
103
+ return data;
104
+ return new Uint8Array(data).buffer;
105
+ }
106
+ //# sourceMappingURL=compression-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compression-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/compression-utils.ts"],"names":[],"mappings":";;;;;;;;;;;AAkDA,sDAEC;AAWD,oCAYC;AAUD,wCAQC;AA7FD,2CAAkE;AAElE,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAC/B,MAAM,4BAA4B,GAAG,EAAE,CAAA;AAEvC,kGAAkG;AAClG,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,SAAS;IACT,aAAa;IACb,iBAAiB;IACjB,YAAY;IACZ,oBAAoB;IACpB,mBAAmB,EAAE,mDAAmD;IACxE,QAAQ;IACR,aAAa;IACb,cAAc;IACd,eAAe;IACf,2BAA2B;IAC3B,QAAQ;IACR,oBAAoB;IACpB,YAAY;IACZ,gCAAgC;IAChC,wBAAwB;IACxB,yBAAyB;IACzB,wBAAwB;IACxB,wBAAwB;IACxB,4BAA4B;IAC5B,yBAAyB;IACzB,oBAAoB;IACpB,yBAAyB;IACzB,sDAAsD;IACtD,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,2BAA2B;IAC3B,uBAAuB;IACvB,mBAAmB;IACnB,0BAA0B;CAC3B,CAAC,CAAA;AAOF;;;GAGG;AACH,SAAgB,qBAAqB;IACnC,OAAO,mBAAmB,CAAA;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAsB,YAAY,CAAC,IAA8B,EAAE,IAAe;;QAChF,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;QAE/B,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAI,GAAG,CAAC,UAAU,GAAG,4BAA4B,EAAE,CAAC;YAC3G,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;QAC5C,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAA,4BAAgB,EAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;YAC3C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;QACjD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;IAC5C,CAAC;CAAA;AAED;;;;;;;GAOG;AACH,SAAsB,cAAc,CAAC,IAA8B,EAAE,SAA6B;;QAChG,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QACD,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,IAAA,8BAAkB,EAAC,IAAI,CAAC,CAAA;QACjC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAA;IACpE,CAAC;CAAA;AAED,SAAS,aAAa,CAAC,IAA8B;IACnD,IAAI,IAAI,YAAY,WAAW;QAAE,OAAO,IAAI,CAAA;IAC5C,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,MAAqB,CAAA;AACnD,CAAC","sourcesContent":["import { lzmaWasmCompress, lzmaWasmDecompress } from './lzma-wasm'\n\nconst COMPRESSION_VERSION = '1'\nconst MINIMUM_SIZE_FOR_COMPRESSION = 64\n\n/** UTIs for formats that are already compressed and won't benefit from additional compression. */\nconst ALREADY_COMPRESSED_UTIS = new Set([\n // Images\n 'public.jpeg',\n 'public.jpeg2000',\n 'public.png',\n 'com.compuserve.gif',\n 'com.microsoft.bmp', // low entropy but compression marginal vs overhead\n // Video\n 'public.mpeg',\n 'public.mpeg4',\n 'public.mpegts',\n 'com.apple.quicktime-movie',\n // Audio\n 'public.mpeg4-audio',\n 'public.mp3',\n // Archives / compressed formats\n 'com.pkware.zip-archive',\n 'org.gnu.gnu-zip-archive',\n 'org.bzip.bzip2-archive',\n 'com.rarlab.rar-archive',\n 'com.allume.stuffit-archive',\n 'org.7-zip.7-zip-archive',\n 'public.tar-archive',\n 'org.gnu.gnu-tar-archive',\n // Legacy UTI variants (pre-v1.0.117 camelCase format)\n 'com.pkware.zipArchive',\n 'org.gnu.gnuZipArchive',\n 'org.bzip.bzip2Archive',\n 'com.rarlab.rarArchive',\n 'com.allume.stuffitArchive',\n 'org.gnu.gnuTarArchive',\n 'public.mpeg4Audio',\n 'com.apple.quicktimeMovie',\n])\n\nexport interface CompressionResult {\n data: ArrayBuffer\n algorithm: string | undefined\n}\n\n/**\n * Returns the current compression algorithms version string.\n * This version is bumped whenever the set of tried algorithms changes.\n */\nexport function getCompressionVersion(): string {\n return COMPRESSION_VERSION\n}\n\n/**\n * Attempts to compress the given data using available compression algorithms, picking the best result.\n * If any of the provided UTIs indicates the data is already in a compressed format (jpeg, png, zip, ...),\n * compression is skipped entirely.\n *\n * @param data the raw data to compress.\n * @param utis optional UTIs describing the data format; used to skip compression for already-compressed formats.\n * @returns the (possibly compressed) data and the algorithm used, or undefined if no compression was applied.\n */\nexport async function compressData(data: ArrayBuffer | Uint8Array, utis?: string[]): Promise<CompressionResult> {\n const raw = toArrayBuffer(data)\n\n if (utis?.some((uti) => ALREADY_COMPRESSED_UTIS.has(uti)) || raw.byteLength < MINIMUM_SIZE_FOR_COMPRESSION) {\n return { data: raw, algorithm: undefined }\n }\n\n const compressed = await lzmaWasmCompress(data)\n if (compressed.byteLength < raw.byteLength) {\n return { data: compressed, algorithm: 'lzma2' }\n }\n return { data: raw, algorithm: undefined }\n}\n\n/**\n * Decompresses data that was compressed using one of the supported algorithms.\n *\n * @param data the compressed data.\n * @param algorithm the compression algorithm that was used (e.g. 'lzma'). If undefined, returns the data as-is.\n * @returns the decompressed data.\n * @throws if the algorithm is not supported or decompression fails.\n */\nexport async function decompressData(data: ArrayBuffer | Uint8Array, algorithm: string | undefined): Promise<ArrayBuffer> {\n if (!algorithm) {\n return toArrayBuffer(data)\n }\n if (algorithm === 'lzma2') {\n return lzmaWasmDecompress(data)\n }\n throw new Error(`Unsupported compression algorithm: ${algorithm}`)\n}\n\nfunction toArrayBuffer(data: ArrayBuffer | Uint8Array): ArrayBuffer {\n if (data instanceof ArrayBuffer) return data\n return new Uint8Array(data).buffer as ArrayBuffer\n}\n"]}
@@ -22,7 +22,7 @@ exports.parseEncryptedFields = parseEncryptedFields;
22
22
  exports.encryptObject = encryptObject;
23
23
  exports.decryptObject = decryptObject;
24
24
  exports.keyPairFromPrivateKeyJwk = keyPairFromPrivateKeyJwk;
25
- const mm = require("moment");
25
+ const date_fns_1 = require("date-fns");
26
26
  const binary_utils_1 = require("../utils/binary-utils");
27
27
  const asn1_packer_1 = require("./asn1-packer");
28
28
  const asn1_parser_1 = require("./asn1-parser");
@@ -177,23 +177,23 @@ function appendBuffer(buffer1, buffer2) {
177
177
  }
178
178
  //Convenience methods for dates management
179
179
  function after(d1, d2) {
180
- return d1 === null || d2 === null || d1 === undefined || d2 === undefined || moment(d1).isAfter(moment(d2));
180
+ return d1 === null || d2 === null || d1 === undefined || d2 === undefined || (0, date_fns_1.isAfter)(parseDateNumber(d1), parseDateNumber(d2));
181
181
  }
182
182
  function before(d1, d2) {
183
- return d1 === null || d2 === null || d1 === undefined || d2 === undefined || moment(d1).isBefore(moment(d2));
183
+ return d1 === null || d2 === null || d1 === undefined || d2 === undefined || (0, date_fns_1.isBefore)(parseDateNumber(d1), parseDateNumber(d2));
184
184
  }
185
- function moment(epochOrLongCalendar) {
185
+ function parseDateNumber(epochOrLongCalendar) {
186
186
  if (!epochOrLongCalendar && epochOrLongCalendar !== 0) {
187
187
  return null;
188
188
  }
189
189
  if (epochOrLongCalendar >= 18000101 && epochOrLongCalendar < 25400000) {
190
- return mm('' + epochOrLongCalendar, 'YYYYMMDD');
190
+ return (0, date_fns_1.parse)('' + epochOrLongCalendar, 'yyyyMMdd', new Date());
191
191
  }
192
192
  else if (epochOrLongCalendar >= 18000101000000) {
193
- return mm('' + epochOrLongCalendar, 'YYYYMMDDHHmmss');
193
+ return (0, date_fns_1.parse)('' + epochOrLongCalendar, 'yyyyMMddHHmmss', new Date());
194
194
  }
195
195
  else {
196
- return mm(epochOrLongCalendar);
196
+ return new Date(epochOrLongCalendar);
197
197
  }
198
198
  }
199
199
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/crypto-utils.ts"],"names":[],"mappings":";;;;;;;;;;;AAQA,sCAeC;AAED,8BA2BC;AAED,4BAmBC;AAED,8BA4BC;AAED,gCAiBC;AAmBD,sDAQC;AAQD,oCAKC;AAGD,sBAEC;AAED,wBAEC;AAgID,oDA4FC;AAkDD,sCAyEC;AAoBD,sCAyCC;AAQD,4DAMC;AA7kBD,6BAA4B;AAG5B,wDAA4G;AAC5G,+CAAoC;AACpC,+CAAyC;AAGzC,SAAgB,aAAa,CAAI,cAAmD,EAAE,GAAW,EAAE,IAA0B;IAC3H,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,CAAC,GAAS,EAAE;YACzB,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,EAAE,CAAA;YACrB,CAAC;oBAAS,CAAC;gBACT,OAAO,cAAc,CAAC,GAAG,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC,CAAA,CAAC,EAAE,CAAA;QACJ,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;QAC5B,OAAO,MAAM,CAAA;IACf,CAAC;SAAM,CAAC;QACN,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;IACjF,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,GAAQ;IAChC,OAAO,IAAA,kBAAI,EAAC;QACV,IAAI;QACJ;YACE,CAAC,IAAI,EAAE,IAAI,CAAC;YACZ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,2BAA2B;YAC3E;gBACE,IAAI;gBACJ;oBACE;wBACE,IAAI;wBACJ;4BACE,CAAC,IAAI,EAAE,IAAI,CAAC;4BACZ,CAAC,IAAI,EAAE,IAAA,qBAAM,EAAC,IAAA,wBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BAChC,CAAC,IAAI,EAAE,IAAA,qBAAM,EAAC,IAAA,wBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BAChC,CAAC,IAAI,EAAE,IAAA,qBAAM,EAAC,IAAA,wBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BAChC,CAAC,IAAI,EAAE,IAAA,qBAAM,EAAC,IAAA,wBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BAChC,CAAC,IAAI,EAAE,IAAA,qBAAM,EAAC,IAAA,wBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BAChC,CAAC,IAAI,EAAE,IAAA,qBAAM,EAAC,IAAA,wBAAS,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BACjC,CAAC,IAAI,EAAE,IAAA,qBAAM,EAAC,IAAA,wBAAS,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BACjC,CAAC,IAAI,EAAE,IAAA,qBAAM,EAAC,IAAA,wBAAS,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;yBAClC;qBACF;iBACF;aACF;SACF;KACF,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAQ;IAC/B,OAAO,IAAA,kBAAI,EAAC;QACV,IAAI;QACJ;YACE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,2BAA2B;YAC3E;gBACE,IAAI;gBACJ;oBACE;wBACE,IAAI;wBACJ;4BACE,CAAC,IAAI,EAAE,IAAA,qBAAM,EAAC,IAAA,wBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BAChC,CAAC,IAAI,EAAE,IAAA,qBAAM,EAAC,IAAA,wBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;yBACjC;qBACF;iBACF;aACF;SACF;KACF,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,GAAe,EAAE,UAAsB;;IAC/D,MAAM,IAAI,GAAG,IAAA,uBAAS,EAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;IAE3C,IAAI,OAAO,GAA2B,SAAS,CAAA;IAC/C,IAAI,QAAQ,GAA2B,SAAS,CAAA;IAChD,IACE,IAAI,CAAC,IAAI,KAAK,IAAI;QAClB,CAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,IAAI,MAAK,IAAI;QACjC,CAAA,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,QAAQ,0CAAG,CAAC,CAAC,0CAAE,IAAI,MAAK,IAAI;QAChD,IAAA,qBAAM,EAAC,MAAA,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,QAAQ,0CAAG,CAAC,CAAC,0CAAE,KAAK,mCAAI,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC,2BAA2B;MAC1H,CAAC;QACD,OAAO,GAAG,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,QAAQ,0CAAG,CAAC,CAAC,0CAAE,QAAQ,0CAAG,CAAC,CAAC,0CAAE,KAAK,CAAA;QACjE,QAAQ,GAAG,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,QAAQ,0CAAG,CAAC,CAAC,0CAAE,QAAQ,0CAAG,CAAC,CAAC,0CAAE,KAAK,CAAA;IACpE,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,IAAI,MAAK,IAAI,IAAI,CAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,IAAI,MAAK,IAAI,EAAE,CAAC;QACxG,OAAO,GAAG,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,KAAK,CAAA;QACnC,QAAQ,GAAG,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,KAAK,CAAA;IACtC,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC;IACD,OAAO;QACL,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU;QAC3D,GAAG,EAAE,IAAI;QACT,CAAC,EAAE,IAAA,wBAAS,EAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,EAAE,IAAA,wBAAS,EAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;KACnC,CAAA;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,GAA6B;;IACtD,MAAM,MAAM,GAAG,IAAA,uBAAS,EAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7C,MAAM,GAAG,GACP,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,MAAM,MAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAA,MAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,0CAAE,MAAM,MAAK,CAAC;QAC5G,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,MAAM,CAAA;IACZ,OAAO;QACL,GAAG,EAAE,KAAK;QACV,CAAC,EAAE,IAAA,wBAAS,EAAC,UAAU,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC,CAAC;QAC9D,CAAC,EAAE,IAAA,wBAAS,EAAC,UAAU,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC,CAAC;QAC9D,CAAC,EAAE,IAAA,wBAAS,EAAC,UAAU,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC,CAAC;QAC9D,CAAC,EAAE,IAAA,wBAAS,EAAC,UAAU,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC,CAAC;QAC9D,CAAC,EAAE,IAAA,wBAAS,EAAC,UAAU,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC,CAAC;QAC9D,EAAE,EAAE,IAAA,wBAAS,EAAC,UAAU,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC,CAAC;QAC/D,EAAE,EAAE,IAAA,wBAAS,EAAC,UAAU,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC,CAAC;QAC/D,EAAE,EAAE,IAAA,wBAAS,EAAC,UAAU,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAmB,CAAC,CAAC;KAChE,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,CAAa;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,CAAC,EAAE,CAAA;IACL,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,qBAAqB,CAAC,CAAa;IACjD,IAAI,GAAG,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAA;IAC1B,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QAChC,GAAG,EAAE,CAAA;IACP,CAAC;IACD,yEAAyE;IACzE,8CAA8C;IAC9C,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;AAC/B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,OAAoB,EAAE,OAAoB;IACrE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACnE,GAAG,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IACnC,GAAG,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IACpD,OAAO,GAAG,CAAC,MAAqB,CAAA;AAClC,CAAC;AAED,0CAA0C;AAC1C,SAAgB,KAAK,CAAC,EAA6B,EAAE,EAA6B;IAChF,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,CAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,CAAA;AAC/G,CAAC;AAED,SAAgB,MAAM,CAAC,EAA6B,EAAE,EAA6B;IACjF,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,CAAA;AAChH,CAAC;AAED,SAAS,MAAM,CAAC,mBAA2B;IACzC,IAAI,CAAC,mBAAmB,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,mBAAmB,IAAI,QAAQ,IAAI,mBAAmB,GAAG,QAAQ,EAAE,CAAC;QACtE,OAAO,EAAE,CAAC,EAAE,GAAG,mBAAmB,EAAE,UAAU,CAAC,CAAA;IACjD,CAAC;SAAM,IAAI,mBAAmB,IAAI,cAAc,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC,EAAE,GAAG,mBAAmB,EAAE,gBAAgB,CAAC,CAAA;IACvD,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC,mBAAmB,CAAC,CAAA;IAChC,CAAC;AACH,CAAC;AAqBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FG;AACH,SAAgB,oBAAoB,CAAC,eAAyB,EAAE,IAAY;IAC1E,MAAM,WAAW,GAAG;QAClB,cAAc,EAAE,IAAI,GAAG,EAAU;QACjC,iBAAiB,EAAE,EAA6C;QAChE,cAAc,EAAE,EAA0C;QAC1D,gBAAgB,EAAE,EAA4C;KAC/D,CAAA;IACD,MAAM,mBAAmB,GAAG,uEAAuE,CAAA;IACnG,MAAM,sBAAsB,GAAG,CAC7B,aAAqB,EACrB,kBAA0B,EAC1B,kBAA0B,EAC1B,cAA2E,EAC3E,EAAE;;QACF,MAAM,aAAa,GAAG,MAAA,WAAW,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC,mCAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAA;QACrH,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;QACzF,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,UAAiB,CAAA;YACrB,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACjC,CAAC;YAAC,WAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,GAAG,kBAAkB,4BAA4B,CAAC,CAAA;YACnG,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC;gBAC/E,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YAClD,CAAC;;gBAAM,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,GAAG,kBAAkB,4BAA4B,CAAC,CAAA;QAC1G,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC,CAAA;IACD,KAAK,MAAM,kBAAkB,IAAI,eAAe,EAAE,CAAC;QACjD,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QACpE,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACrB,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;YACvC,MAAM,kBAAkB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;YAC5C,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,IAAI,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,GAAG,aAAa,EAAE,CAAC,CAAA;gBACvH,IACE,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,aAAa,CAAC;oBAC9C,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC;oBAC3C,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC;oBAE7C,MAAM,IAAI,KAAK,CAAC,4FAA4F,IAAI,GAAG,aAAa,EAAE,CAAC,CAAA;gBACrI,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;YAC/C,CAAC;iBAAM,IAAI,kBAAkB,IAAI,GAAG,EAAE,CAAC;gBACrC,IACE,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC;oBAC7C,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC;oBAC3C,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC;oBAE7C,MAAM,IAAI,KAAK,CAAC,4FAA4F,IAAI,GAAG,aAAa,EAAE,CAAC,CAAA;gBACrI,sBAAsB,CAAC,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAA;YACpG,CAAC;iBAAM,IAAI,kBAAkB,IAAI,KAAK,EAAE,CAAC;gBACvC,IACE,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC;oBAC7C,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,aAAa,CAAC;oBAC9C,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC;oBAE7C,MAAM,IAAI,KAAK,CAAC,4FAA4F,IAAI,GAAG,aAAa,EAAE,CAAC,CAAA;gBACrI,sBAAsB,CAAC,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;YACjG,CAAC;iBAAM,IAAI,kBAAkB,IAAI,KAAK,EAAE,CAAC;gBACvC,IACE,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC;oBAC7C,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,aAAa,CAAC;oBAC9C,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC;oBAE3C,MAAM,IAAI,KAAK,CAAC,4FAA4F,IAAI,GAAG,aAAa,EAAE,CAAC,CAAA;gBACrI,sBAAsB,CAAC,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;YACnG,CAAC;;gBAAM,MAAM,IAAI,KAAK,CAAC,qCAAqC,kBAAkB,+BAA+B,IAAI,GAAG,kBAAkB,EAAE,CAAC,CAAA;QAC3I,CAAC;;YAAM,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,GAAG,kBAAkB,EAAE,CAAC,CAAA;IAChF,CAAC;IACD,OAAO;QACL,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC;QACvH,iBAAiB,EAAE,MAAM,CAAC,WAAW,CACnC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;YAC7E,SAAS;YACT,oBAAoB,CAAC,UAAU,EAAE,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC;SACzD,CAAC,CACH;QACD,cAAc,EAAE,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;YAC1E,SAAS;YACT,oBAAoB,CAAC,UAAU,EAAE,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC;SAC3D,CAAC,CACH;QACD,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;YAC5E,SAAS;YACT,oBAAoB,CAAC,UAAU,EAAE,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC;SAC3D,CAAC,CACH;KACF,CAAA;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,CAAM,EAAE,CAAM;IAC9C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAA;QACd,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,wBAAwB,CAAC,CAAC,CAAA;QACxE,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAA;QACd,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC9C,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAsB,aAAa;yDACjC,GAA2B,EAC3B,OAA8D,EAC9D,SAAuE,EACvE,IAA6B,EAC7B,OAAe,KAAK;QAEpB,MAAM,YAAY,qBAAQ,GAAG,CAAE,CAAA;QAC/B,MAAM,mBAAmB,GAA2B,EAAE,CAAA;QACtD,KAAK,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAChD,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;YAC1C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,sBAAsB;gBACtB,mBAAmB,CAAC,SAAS,CAAC,GAAG,UAAU,CAAA;gBAC3C,OAAO,YAAY,CAAC,SAAS,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;QACD,IAAI,0BAA0B,GAAG,KAAK,CAAA;QACtC,IAAI,YAAY,CAAC,aAAa,IAAI,SAAS,EAAE,CAAC;YAC5C,IAAI,SAAS,GAAG,SAAS,CAAA;YACzB,IAAI,CAAC;gBACH,SAAS,GAAG,MAAM,SAAS,CAAC,IAAA,wBAAS,EAAC,IAAA,kBAAG,EAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;YACzE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YACD,IAAI,SAAS,IAAI,SAAS,CAAC,+BAA+B,IAAI,wBAAwB,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAAE,CAAC;gBACvH,0BAA0B,GAAG,IAAI,CAAA;YACnC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAChC,YAAY,CAAC,eAAe,CAAC,GAAG,IAAA,kBAAG,EAAC,IAAA,wBAAS,EAAC,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAA;QACpF,CAAC;QACD,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC1E,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;YAC1C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACpD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,IAAI,SAAS,2BAA2B,CAAC,CAAA;gBACxG,YAAY,CAAC,SAAS,CAAC,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC,CAAA;YAChH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1E,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;YAC7C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACpD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,IAAI,YAAY,2BAA2B,CAAC,CAAA;gBAC3G,MAAM,MAAM,GAA2B,EAAE,CAAA;gBACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAoB,CAAC,EAAE,CAAC;oBAChE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;oBACrB,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;4BAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,IAAI,YAAY,IAAI,GAAG,2BAA2B,CAAC,CAAA;wBAC7G,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;oBAC9G,CAAC;gBACH,CAAC;gBACD,YAAY,CAAC,YAAY,CAAC,GAAG,MAAM,CAAA;YACrC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9E,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,CAAC,CAAA;YAC/C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,IAAI,cAAc,iBAAiB,CAAC,CAAA;gBAC1G,MAAM,QAAQ,GAAU,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;gBAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;oBAC3B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC1C,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;oBACrB,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;4BAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,IAAI,cAAc,IAAI,CAAC,4BAA4B,CAAC,CAAA;wBAC9G,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;oBACpH,CAAC;gBACH,CAAC;gBACD,YAAY,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAA;YACzC,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAA;IACrB,CAAC;CAAA;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,KAAU;IACxB,iFAAiF;IACjF,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC9I,CAAC;AAED;;;;;;;;;GASG;AACH,SAAsB,aAAa,CACjC,GAA2B,EAC3B,SAAsE;;QAEtE,MAAM,IAAI,GAA2B,EAAE,CAAA;QACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACnB,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,kGAAkG;oBAClG,2GAA2G;oBAC3G,gCAAgC;oBAChC,6BAA6B;oBAC7B,MAAM,iBAAiB,GAAG,EAAE,CAAA;oBAC5B,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;wBAC5B,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;4BACpB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;4BACzD,IAAI,SAAS,IAAI,IAAI;gCAAE,OAAO,IAAI,CAAA;4BAClC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;wBACnC,CAAC;6BAAM,CAAC;4BACN,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;wBACjC,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAA;gBAC/B,CAAC;qBAAM,IAAI,KAAK,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA,CAAC,wHAAwH;gBAC5I,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;oBACvD,IAAI,SAAS,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAA;oBAClC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;gBACvB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACnB,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,IAAA,wBAAS,EAAC,IAAA,kBAAG,EAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;YACpE,IAAI,SAAS,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAA;YAClC,uCAAY,IAAI,GAAK,SAAS,EAAE;QAClC,CAAC;;YAAM,OAAO,IAAI,CAAA;IACpB,CAAC;CAAA;AAED;;;;;GAKG;AACH,SAAgB,wBAAwB,CAAC,aAAyB,EAAE,UAAsB;IACxF,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;IAClI,OAAO;QACL,UAAU,EAAE,aAAa;QACzB,SAAS,EAAE,SAAS,CAAC,IAAA,qBAAM,EAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC;KAClE,CAAA;AACH,CAAC","sourcesContent":["import * as mm from 'moment'\nimport { Moment } from 'moment'\nimport * as _ from 'lodash'\nimport { a2b, b2a, b64Url2ua, hex2ua, string2ua, ua2b64Url, ua2hex, ua2string } from '../utils/binary-utils'\nimport { pack } from './asn1-packer'\nimport { parseAsn1 } from './asn1-parser'\nimport { KeyPair, ShaVersion } from '../crypto/RSA'\n\nexport function notConcurrent<T>(concurrencyMap: { [key: string]: PromiseLike<any> }, key: string, proc: () => PromiseLike<T>): PromiseLike<T> {\n const inFlight = concurrencyMap[key]\n if (!inFlight) {\n const newJob = (async () => {\n try {\n return await proc()\n } finally {\n delete concurrencyMap[key]\n }\n })()\n concurrencyMap[key] = newJob\n return newJob\n } else {\n return concurrencyMap[key].then(() => notConcurrent(concurrencyMap, key, proc))\n }\n}\n\nexport function jwk2pkcs8(jwk: any): string {\n return pack([\n 0x30,\n [\n [0x02, '00'],\n [0x30, [[0x06, '2a864886f70d010101'], [0x05]]], // pragma: allowlist secret\n [\n 0x04,\n [\n [\n 0x30,\n [\n [0x02, '00'],\n [0x02, ua2hex(b64Url2ua(jwk.n))],\n [0x02, ua2hex(b64Url2ua(jwk.e))],\n [0x02, ua2hex(b64Url2ua(jwk.d))],\n [0x02, ua2hex(b64Url2ua(jwk.p))],\n [0x02, ua2hex(b64Url2ua(jwk.q))],\n [0x02, ua2hex(b64Url2ua(jwk.dp))],\n [0x02, ua2hex(b64Url2ua(jwk.dq))],\n [0x02, ua2hex(b64Url2ua(jwk.qi))],\n ],\n ],\n ],\n ],\n ],\n ])\n}\n\nexport function jwk2spki(jwk: any): string {\n return pack([\n 0x30,\n [\n [0x30, [[0x06, '2a864886f70d010101'], [0x05]]], // pragma: allowlist secret\n [\n 0x03,\n [\n [\n 0x30,\n [\n [0x02, ua2hex(b64Url2ua(jwk.n))],\n [0x02, ua2hex(b64Url2ua(jwk.e))],\n ],\n ],\n ],\n ],\n ],\n ])\n}\n\nexport function spkiToJwk(buf: Uint8Array, shaVersion: ShaVersion): { kty: string; alg: string; n: string; e: string; ext: boolean } {\n const asn1 = parseAsn1(new Uint8Array(buf))\n\n var modulus: Uint8Array | undefined = undefined\n var exponent: Uint8Array | undefined = undefined\n if (\n asn1.type === 0x30 &&\n asn1.children?.[0]?.type === 0x30 &&\n asn1.children?.[0]?.children?.[0]?.type === 0x06 &&\n ua2hex(asn1.children?.[0]?.children?.[0]?.value ?? new Uint8Array(0)) === '2a864886f70d010101' // pragma: allowlist secret\n ) {\n modulus = asn1.children?.[1]?.children?.[0]?.children?.[0]?.value\n exponent = asn1.children?.[1]?.children?.[0]?.children?.[1]?.value\n } else if (asn1.type === 0x30 && asn1.children?.[0]?.type === 0x02 && asn1.children?.[1]?.type === 0x02) {\n modulus = asn1.children?.[0]?.value\n exponent = asn1.children?.[1]?.value\n }\n\n if (!modulus || !exponent) {\n throw new Error('Invalid spki format')\n }\n return {\n kty: 'RSA',\n alg: shaVersion === 'sha-256' ? 'RSA-OAEP-256' : 'RSA-OAEP',\n ext: true,\n n: ua2b64Url(minimalRep(modulus)),\n e: ua2b64Url(minimalRep(exponent)),\n }\n}\n\nexport function pkcs8ToJwk(buf: Uint8Array | ArrayBuffer) {\n const parsed = parseAsn1(new Uint8Array(buf))\n const seq =\n parsed.children?.length === 3 && parsed.children[2].type === 0x04 && parsed.children[2].children?.length === 1\n ? parsed.children[2].children[0]\n : parsed\n return {\n kty: 'RSA',\n n: ua2b64Url(minimalRep(seq.children![1].value as Uint8Array)),\n e: ua2b64Url(minimalRep(seq.children![2].value as Uint8Array)),\n d: ua2b64Url(minimalRep(seq.children![3].value as Uint8Array)),\n p: ua2b64Url(minimalRep(seq.children![4].value as Uint8Array)),\n q: ua2b64Url(minimalRep(seq.children![5].value as Uint8Array)),\n dp: ua2b64Url(minimalRep(seq.children![6].value as Uint8Array)),\n dq: ua2b64Url(minimalRep(seq.children![7].value as Uint8Array)),\n qi: ua2b64Url(minimalRep(seq.children![8].value as Uint8Array)),\n }\n}\n\nfunction minimalRep(b: Uint8Array) {\n let i = 0\n while (b[i] === 0) {\n i++\n }\n return b.slice(i)\n}\n\n/**\n * Provide a view over the given Uint8Array where any trailing null bytes at\n * the end are truncated.\n *\n * This can be used to ignore null bytes at the end of a padded UTF-8 string\n * without needing to copy that string, assuming code point U+0000 is encoded\n * in one null byte according to standards rather than in a multi-byte\n * overlong form.\n */\nexport function truncateTrailingNulls(a: Uint8Array) {\n let end = a.byteLength - 1\n while (a[end] === 0 && end >= 0) {\n end--\n }\n // end is now either the last non-null position in a or -1; in the latter\n // case the returned array will have length 0.\n return a.subarray(0, end + 1)\n}\n\n/**\n *\n * @param buffer1 {Uint8Array}\n * @param buffer2{ Uint8Array}\n * @returns {ArrayBuffer}\n */\nexport function appendBuffer(buffer1: ArrayBuffer, buffer2: ArrayBuffer): ArrayBuffer {\n const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength)\n tmp.set(new Uint8Array(buffer1), 0)\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength)\n return tmp.buffer as ArrayBuffer\n}\n\n//Convenience methods for dates management\nexport function after(d1: number | null | undefined, d2: number | null | undefined): boolean {\n return d1 === null || d2 === null || d1 === undefined || d2 === undefined || moment(d1)!.isAfter(moment(d2)!)\n}\n\nexport function before(d1: number | null | undefined, d2: number | null | undefined): boolean {\n return d1 === null || d2 === null || d1 === undefined || d2 === undefined || moment(d1)!.isBefore(moment(d2)!)\n}\n\nfunction moment(epochOrLongCalendar: number): Moment | null {\n if (!epochOrLongCalendar && epochOrLongCalendar !== 0) {\n return null\n }\n if (epochOrLongCalendar >= 18000101 && epochOrLongCalendar < 25400000) {\n return mm('' + epochOrLongCalendar, 'YYYYMMDD')\n } else if (epochOrLongCalendar >= 18000101000000) {\n return mm('' + epochOrLongCalendar, 'YYYYMMDDHHmmss')\n } else {\n return mm(epochOrLongCalendar)\n }\n}\n\n/**\n * Configuration for the encryption of an object.\n * @param topLevelFields the fields of the object to encrypt. All the fields will be encrypted in a single encryptedSelf field which is added to the\n * object.\n * @param nestedObjectsKeys the name of fields which are expected to contain a nested object (or undefined). Allows to specify\n */\nexport type EncryptedFieldsManifest = {\n topLevelFields: { fieldName: string; fieldPath: string }[]\n nestedObjectsKeys: {\n [objectFieldName: string]: EncryptedFieldsManifest\n }\n mapsValuesKeys: {\n [mapFieldName: string]: EncryptedFieldsManifest\n }\n arraysValuesKeys: {\n [arrayFieldName: string]: EncryptedFieldsManifest\n }\n}\n\n/**\n * @internal this function is for internal use only and may be changed without notice\n *\n * Parse the encrypted fields configuration for a specific entity type.\n *\n * ## Grammar\n *\n * The grammar for each encrypted field is the following:\n * ```\n * fieldName :=\n * regex([a-zA-Z_][a-zA-Z0-9_]+)\n * encryptedField :=\n * fieldName\n * | fieldName + (\".\" | \".*.\" | \"[].\") + encryptedField\n * ```\n *\n * This grammar allows you to specify the fields to encrypt for the object and recursively for nested objects.\n * - A string containing only a single `fieldName` will encrypt the field with the given name.\n * - A string starting with `fieldName.` allows to specify the encrypted fields of a nested object. The encrypted values of the\n * fields in the nested object will be saved in the nested object.\n * - A string starting with `fieldName.*.` treats `fieldName` as a map/dictionary data structure and allows to specify the encrypted fields of the\n * values of the map. Note that the values of the map must be objects as well. The encrypted content of each map value is stored in that value.\n * - A string starting with `fieldName[].` treats `fieldName` as an array and allows to specify the encrypted fields of the values of the array.\n * Note that the values of the array must be objects as well. The encrypted content of each array element is stored in that element.\n *\n * ## Example\n *\n * Consider the following object and encryption keys:\n * ```javascript\n * const obj = {\n * a: { x: 0, y: 1 },\n * b: \"hello\",\n * c: [ { public: \"a\", secret: \"b\" }, { public: \"c\", secret: \"d\" } ],\n * d: \"ok\",\n * e: {\n * info: \"something\",\n * private: \"secret\",\n * dataMap: {\n * \"en\": {\n * a: 1,\n * b: 2\n * },\n * \"fr\": {\n * a: 3,\n * b: 4\n * }\n * }\n * }\n * }\n * const encryptedFields = [\n * \"a\",\n * \"c[].secret\",\n * \"d\",\n * \"e.private\",\n * \"e.datamap.*.a\"\n * ]\n * ```\n * If you use them with the crypt method you will get the following result:\n * ```json\n * {\n * b: \"hello\",\n * c: [\n * { public: \"a\", encryptedSelf: \"...encrypted data of c[0]\" },\n * { public: \"c\", encryptedSelf: \"...encrypted data of c[1]\" }\n * ],\n * e: {\n * info: \"something\",\n * dataMap: {\n * \"en\": { b: 2, encryptedSelf: \"...encrypted data of e.dataMap['en']\" },\n * \"fr\": { b: 4, encryptedSelf: \"...encrypted data of e.dataMap['fr']\" }\n * },\n * encryptedSelf: \"...encrypted data of e\"\n * },\n * encryptedSelf: \"...encrypted data of obj\"\n * }\n * ```\n *\n * ## Shortened representation\n *\n * You can also group encrypted fields having the same prefix by concatenating to the prefix the JSON representation of an array of all the postfixes.\n * For example the following encrypted fields:\n * ```javascript\n * const encryptedFields = [\"a.b.c.d.e.f1\", \"a.b.c.d.e.f2\", \"a.b.c.d.e.f3\", \"a.b.c.d.e.f4\"]\n * ```\n * can be shortened to\n * ```javascript\n * const encryptedFields = ['a.b.c.d.e.[\"f1\",\"f2\",\"f3\",\"f4\"]'] // Note the use of single quotes to avoid escaping the double quotes\n * ```\n * If you use the shortened representation you may need to escape nested json representations. In that case the use of `JSON.stringify` is\n * recommended.\n *\n * @param encryptedFields\n * @param path\n */\nexport function parseEncryptedFields(encryptedFields: string[], path: string): EncryptedFieldsManifest {\n const groupedData = {\n topLevelFields: new Set<string>(),\n nestedObjectsKeys: {} as { [objectFieldName: string]: string[] },\n mapsValuesKeys: {} as { [mapFieldName: string]: string[] },\n arraysValuesKeys: {} as { [arrayFieldName: string]: string[] },\n }\n const encryptedFieldRegex = /^([_a-zA-Z][_a-zA-Z0-9]*)(?:(\\.\\*\\.|\\[]\\.|\\.)(?:[_a-zA-Z].*|\\[.*]))?$/\n const addSubkeyToGroupedData = (\n currFieldName: string,\n currFieldSeparator: string,\n currEncryptedField: string,\n groupedDataKey: 'nestedObjectsKeys' | 'mapsValuesKeys' | 'arraysValuesKeys'\n ) => {\n const existingOrNew = groupedData[groupedDataKey][currFieldName] ?? (groupedData[groupedDataKey][currFieldName] = [])\n const subKey = currEncryptedField.slice(currFieldName.length + currFieldSeparator.length)\n if (subKey.startsWith('[')) {\n let parsedJson: any[]\n try {\n parsedJson = JSON.parse(subKey)\n } catch {\n throw new Error(`Invalid encrypted field ${path}${currEncryptedField} (not a valid JSON subkey)`)\n }\n if (Array.isArray(parsedJson) && parsedJson.every((x) => typeof x == 'string')) {\n parsedJson.forEach((x) => existingOrNew.push(x))\n } else throw new Error(`Invalid encrypted field ${path}${currEncryptedField} (not an array of strings)`)\n } else {\n existingOrNew.push(subKey)\n }\n }\n for (const currEncryptedField of encryptedFields) {\n const currFieldMatch = currEncryptedField.match(encryptedFieldRegex)\n if (!!currFieldMatch) {\n const currFieldName = currFieldMatch[1]\n const currFieldSeparator = currFieldMatch[2]\n if (!currFieldSeparator) {\n if (groupedData.topLevelFields.has(currFieldName)) throw new Error(`Duplicate encrypted field ${path}${currFieldName}`)\n if (\n !!groupedData.nestedObjectsKeys[currFieldName] ||\n !!groupedData.mapsValuesKeys[currFieldName] ||\n !!groupedData.arraysValuesKeys[currFieldName]\n )\n throw new Error(`Encrypted field appears multiple times as different nested types and or top-level-field: ${path}${currFieldName}`)\n groupedData.topLevelFields.add(currFieldName)\n } else if (currFieldSeparator == '.') {\n if (\n groupedData.topLevelFields.has(currFieldName) ||\n !!groupedData.mapsValuesKeys[currFieldName] ||\n !!groupedData.arraysValuesKeys[currFieldName]\n )\n throw new Error(`Encrypted field appears multiple times as different nested types and or top-level-field: ${path}${currFieldName}`)\n addSubkeyToGroupedData(currFieldName, currFieldSeparator, currEncryptedField, 'nestedObjectsKeys')\n } else if (currFieldSeparator == '.*.') {\n if (\n groupedData.topLevelFields.has(currFieldName) ||\n !!groupedData.nestedObjectsKeys[currFieldName] ||\n !!groupedData.arraysValuesKeys[currFieldName]\n )\n throw new Error(`Encrypted field appears multiple times as different nested types and or top-level-field: ${path}${currFieldName}`)\n addSubkeyToGroupedData(currFieldName, currFieldSeparator, currEncryptedField, 'mapsValuesKeys')\n } else if (currFieldSeparator == '[].') {\n if (\n groupedData.topLevelFields.has(currFieldName) ||\n !!groupedData.nestedObjectsKeys[currFieldName] ||\n !!groupedData.mapsValuesKeys[currFieldName]\n )\n throw new Error(`Encrypted field appears multiple times as different nested types and or top-level-field: ${path}${currFieldName}`)\n addSubkeyToGroupedData(currFieldName, currFieldSeparator, currEncryptedField, 'arraysValuesKeys')\n } else throw new Error(`Internal error: unknown separator ${currFieldSeparator} passed regex validation in ${path}${currEncryptedField}`)\n } else throw new Error(`Invalid encrypted field ${path}${currEncryptedField}`)\n }\n return {\n topLevelFields: Array.from(groupedData.topLevelFields).map((fieldName) => ({ fieldName, fieldPath: path + fieldName })),\n nestedObjectsKeys: Object.fromEntries(\n Object.entries(groupedData.nestedObjectsKeys).map(([fieldName, fieldNames]) => [\n fieldName,\n parseEncryptedFields(fieldNames, path + fieldName + '.'),\n ])\n ),\n mapsValuesKeys: Object.fromEntries(\n Object.entries(groupedData.mapsValuesKeys).map(([fieldName, fieldNames]) => [\n fieldName,\n parseEncryptedFields(fieldNames, path + fieldName + '.*.'),\n ])\n ),\n arraysValuesKeys: Object.fromEntries(\n Object.entries(groupedData.arraysValuesKeys).map(([fieldName, fieldNames]) => [\n fieldName,\n parseEncryptedFields(fieldNames, path + fieldName + '[].'),\n ])\n ),\n }\n}\n\nfunction encryptedObjectDeepEqual(l: any, r: any): boolean {\n if (l === null || r === null) {\n return l === r\n }\n if (Array.isArray(l)) {\n if (!Array.isArray(r) || l.length !== r.length) {\n return false\n }\n for (let i = 0; i < l.length; i++) {\n if (!encryptedObjectDeepEqual(l[i], r[i])) {\n return false\n }\n }\n } else if (typeof l === 'object') {\n if (typeof r !== 'object' || Array.isArray(r)) {\n return false\n }\n const toEncryptKeys = Object.keys(l)\n const encryptedSelfContentKeys = Object.keys(r)\n if (toEncryptKeys.length !== encryptedSelfContentKeys.length) {\n return false\n }\n const allKeys = new Set([...toEncryptKeys, ...encryptedSelfContentKeys])\n if (allKeys.size !== toEncryptKeys.length) {\n return false\n }\n for (const key of toEncryptKeys) {\n if (!encryptedObjectDeepEqual(l[key], r[key])) {\n return false\n }\n }\n } else {\n return l === r\n }\n return true\n}\n\n/**\n * @internal this function is for internal use only and may be changed without notice\n * Encrypt the object graph recursively. Generally return an updated SHALLOW copy, although some fields may be deep copied if they also needed to be\n * recursively encrypted.\n * @param obj the object to encrypt\n * @param cryptor takes in input an object consisting only of the fields to encrypt of obj, and returns the encrypted object.\n * @param decryptor takes in input an \"encrytpedSelf\" value and returns the decrypted content. Can return null or throw exception if the decryption fails.\n * @param keys the keys to encrypt for the\n * @param path path of the current object, used for error messages.\n * @return a shallow copy of the object with a new encryptedSelfField and without the encrypted fields.\n */\nexport async function encryptObject(\n obj: { [key: string]: any },\n cryptor: (obj: { [key: string]: any }) => Promise<ArrayBuffer>,\n decryptor: (encryptedSelf: Uint8Array<ArrayBufferLike>) => Promise<any>,\n keys: EncryptedFieldsManifest,\n path: string = 'obj'\n): Promise<{ [key: string]: any }> {\n const shallowClone = { ...obj }\n const currEncryptedFields: { [key: string]: any } = {}\n for (const { fieldName } of keys.topLevelFields) {\n const fieldValue = shallowClone[fieldName]\n if (fieldValue !== undefined) {\n // we keep null values\n currEncryptedFields[fieldName] = fieldValue\n delete shallowClone[fieldName]\n }\n }\n let existingEncryptedSelfMatch = false\n if (shallowClone.encryptedSelf != undefined) {\n let decrypted = undefined\n try {\n decrypted = await decryptor(string2ua(a2b(shallowClone.encryptedSelf)))\n } catch (e) {\n // ignore\n }\n if (decrypted != undefined /* ignore null and undefined */ && encryptedObjectDeepEqual(currEncryptedFields, decrypted)) {\n existingEncryptedSelfMatch = true\n }\n }\n if (!existingEncryptedSelfMatch) {\n shallowClone['encryptedSelf'] = b2a(ua2string(await cryptor(currEncryptedFields)))\n }\n for (const [fieldName, subKeys] of Object.entries(keys.nestedObjectsKeys)) {\n const fieldValue = shallowClone[fieldName]\n if (fieldValue !== undefined && fieldValue !== null) {\n if (!isPojo(fieldValue)) throw new Error(`Expected field ${path}.${fieldName} to be a non-array object`)\n shallowClone[fieldName] = await encryptObject(fieldValue, cryptor, decryptor, subKeys, path + '.' + fieldName)\n }\n }\n for (const [mapFieldName, subKeys] of Object.entries(keys.mapsValuesKeys)) {\n const fieldValue = shallowClone[mapFieldName]\n if (fieldValue !== undefined && fieldValue !== null) {\n if (!isPojo(fieldValue)) throw new Error(`Expected field ${path}.${mapFieldName} to be a non-array object`)\n const newMap: { [key: string]: any } = {}\n for (const [key, value] of Object.entries(fieldValue as object)) {\n if (value === null || value === undefined) {\n newMap[key] = value\n } else {\n if (!isPojo(value)) throw new Error(`Expected field ${path}.${mapFieldName}.${key} to be a non-array object`)\n newMap[key] = await encryptObject(value, cryptor, decryptor, subKeys, path + '.' + mapFieldName + '.' + key)\n }\n }\n shallowClone[mapFieldName] = newMap\n }\n }\n for (const [arrayFieldName, subKeys] of Object.entries(keys.arraysValuesKeys)) {\n const fieldValue = shallowClone[arrayFieldName]\n if (fieldValue !== undefined && fieldValue !== null) {\n if (!Array.isArray(fieldValue)) throw new Error(`Expected field ${path}.${arrayFieldName} to be an array`)\n const newArray: any[] = Array(fieldValue.length)\n for (let i = 0; i < fieldValue.length; i++) {\n const value = fieldValue[i]\n if (value === null || value === undefined) {\n newArray[i] = value\n } else {\n if (!isPojo(value)) throw new Error(`Expected field ${path}.${arrayFieldName}[${i}] to be a non-array object`)\n newArray[i] = await encryptObject(value, cryptor, decryptor, subKeys, path + '.' + arrayFieldName + '[' + i + ']')\n }\n }\n shallowClone[arrayFieldName] = newArray\n }\n }\n return shallowClone\n}\n\n/**\n * Check if value is a non-null object that is not an array.\n */\nfunction isPojo(value: any): boolean {\n // This break if for some reason we have object versions of String/Number/Boolean\n return value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof ArrayBuffer) && !ArrayBuffer.isView(value)\n}\n\n/**\n * @internal this function is for internal use only and may be changed without notice\n * Decrypt object graph recursively.\n *\n * @param obj the object to decrypt\n * @param decryptor the decryptor function (returns a promise); the decryptor returns the decrypted input or null if\n * the decryption fails\n * @return a deep copy of the object with the decrypted fields and removed encryptedSelf field, or null if the\n * decryption failed\n */\nexport async function decryptObject(\n obj: { [key: string]: any },\n decryptor: (obj: Uint8Array) => Promise<{ [key: string]: any } | null>\n): Promise<{ [key: string]: any } | null> {\n const copy: { [key: string]: any } = {}\n for (const [key, value] of Object.entries(obj)) {\n if (key === 'encryptedSelf') {\n copy[key] = value\n } else if (typeof value === 'object' && value !== null) {\n if (Array.isArray(value)) {\n // Note: nested arrays (and primitives) are returned as is, and they aren't recursively decrypted.\n // This is because we currently don't support encryption of elements from arrays in arrays (we only support\n // arrays in objects in arrays).\n // In future this may change.\n const decryptedElements = []\n for (const element of value) {\n if (isPojo(element)) {\n const decrypted = await decryptObject(element, decryptor)\n if (decrypted == null) return null\n decryptedElements.push(decrypted)\n } else {\n decryptedElements.push(element)\n }\n }\n copy[key] = decryptedElements\n } else if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {\n copy[key] = value // No direct decryption of array buffer data. Array buffer should be converted to b64 string and encrypted as json data.\n } else {\n const decrypted = await decryptObject(value, decryptor)\n if (decrypted == null) return null\n copy[key] = decrypted\n }\n } else {\n copy[key] = value\n }\n }\n if (obj.encryptedSelf) {\n const decrypted = await decryptor(string2ua(a2b(obj.encryptedSelf)))\n if (decrypted == null) return null\n return { ...copy, ...decrypted }\n } else return copy\n}\n\n/**\n * Extracts the full jwk key pair from the jwk representation of the private key.\n * @param privateKeyJwk private key in jwk representation\n * @param shaVersion the SHA algorithm version\n * @throws if the key is missing the public modulus or public exponent.\n */\nexport function keyPairFromPrivateKeyJwk(privateKeyJwk: JsonWebKey, shaVersion: ShaVersion): KeyPair<JsonWebKey> {\n if (!privateKeyJwk.n || !privateKeyJwk.e) throw new Error('Incomplete private JsonWebKey: missing public modulus and/or exponent')\n return {\n privateKey: privateKeyJwk,\n publicKey: spkiToJwk(hex2ua(jwk2spki(privateKeyJwk)), shaVersion),\n }\n}\n"]}
1
+ {"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/crypto-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { parse as parseDate, isAfter as isDateAfter, isBefore as isDateBefore } from 'date-fns'\nimport { a2b, b2a, b64Url2ua, hex2ua, string2ua, ua2b64Url, ua2hex, ua2string } from '../utils/binary-utils'\nimport { pack } from './asn1-packer'\nimport { parseAsn1 } from './asn1-parser'\nimport { KeyPair, ShaVersion } from '../crypto/RSA'\n\nexport function notConcurrent<T>(concurrencyMap: { [key: string]: PromiseLike<any> }, key: string, proc: () => PromiseLike<T>): PromiseLike<T> {\n const inFlight = concurrencyMap[key]\n if (!inFlight) {\n const newJob = (async () => {\n try {\n return await proc()\n } finally {\n delete concurrencyMap[key]\n }\n })()\n concurrencyMap[key] = newJob\n return newJob\n } else {\n return concurrencyMap[key].then(() => notConcurrent(concurrencyMap, key, proc))\n }\n}\n\nexport function jwk2pkcs8(jwk: any): string {\n return pack([\n 0x30,\n [\n [0x02, '00'],\n [0x30, [[0x06, '2a864886f70d010101'], [0x05]]], // pragma: allowlist secret\n [\n 0x04,\n [\n [\n 0x30,\n [\n [0x02, '00'],\n [0x02, ua2hex(b64Url2ua(jwk.n))],\n [0x02, ua2hex(b64Url2ua(jwk.e))],\n [0x02, ua2hex(b64Url2ua(jwk.d))],\n [0x02, ua2hex(b64Url2ua(jwk.p))],\n [0x02, ua2hex(b64Url2ua(jwk.q))],\n [0x02, ua2hex(b64Url2ua(jwk.dp))],\n [0x02, ua2hex(b64Url2ua(jwk.dq))],\n [0x02, ua2hex(b64Url2ua(jwk.qi))],\n ],\n ],\n ],\n ],\n ],\n ])\n}\n\nexport function jwk2spki(jwk: any): string {\n return pack([\n 0x30,\n [\n [0x30, [[0x06, '2a864886f70d010101'], [0x05]]], // pragma: allowlist secret\n [\n 0x03,\n [\n [\n 0x30,\n [\n [0x02, ua2hex(b64Url2ua(jwk.n))],\n [0x02, ua2hex(b64Url2ua(jwk.e))],\n ],\n ],\n ],\n ],\n ],\n ])\n}\n\nexport function spkiToJwk(buf: Uint8Array, shaVersion: ShaVersion): { kty: string; alg: string; n: string; e: string; ext: boolean } {\n const asn1 = parseAsn1(new Uint8Array(buf))\n\n var modulus: Uint8Array | undefined = undefined\n var exponent: Uint8Array | undefined = undefined\n if (\n asn1.type === 0x30 &&\n asn1.children?.[0]?.type === 0x30 &&\n asn1.children?.[0]?.children?.[0]?.type === 0x06 &&\n ua2hex(asn1.children?.[0]?.children?.[0]?.value ?? new Uint8Array(0)) === '2a864886f70d010101' // pragma: allowlist secret\n ) {\n modulus = asn1.children?.[1]?.children?.[0]?.children?.[0]?.value\n exponent = asn1.children?.[1]?.children?.[0]?.children?.[1]?.value\n } else if (asn1.type === 0x30 && asn1.children?.[0]?.type === 0x02 && asn1.children?.[1]?.type === 0x02) {\n modulus = asn1.children?.[0]?.value\n exponent = asn1.children?.[1]?.value\n }\n\n if (!modulus || !exponent) {\n throw new Error('Invalid spki format')\n }\n return {\n kty: 'RSA',\n alg: shaVersion === 'sha-256' ? 'RSA-OAEP-256' : 'RSA-OAEP',\n ext: true,\n n: ua2b64Url(minimalRep(modulus)),\n e: ua2b64Url(minimalRep(exponent)),\n }\n}\n\nexport function pkcs8ToJwk(buf: Uint8Array | ArrayBuffer) {\n const parsed = parseAsn1(new Uint8Array(buf))\n const seq =\n parsed.children?.length === 3 && parsed.children[2].type === 0x04 && parsed.children[2].children?.length === 1\n ? parsed.children[2].children[0]\n : parsed\n return {\n kty: 'RSA',\n n: ua2b64Url(minimalRep(seq.children![1].value as Uint8Array)),\n e: ua2b64Url(minimalRep(seq.children![2].value as Uint8Array)),\n d: ua2b64Url(minimalRep(seq.children![3].value as Uint8Array)),\n p: ua2b64Url(minimalRep(seq.children![4].value as Uint8Array)),\n q: ua2b64Url(minimalRep(seq.children![5].value as Uint8Array)),\n dp: ua2b64Url(minimalRep(seq.children![6].value as Uint8Array)),\n dq: ua2b64Url(minimalRep(seq.children![7].value as Uint8Array)),\n qi: ua2b64Url(minimalRep(seq.children![8].value as Uint8Array)),\n }\n}\n\nfunction minimalRep(b: Uint8Array) {\n let i = 0\n while (b[i] === 0) {\n i++\n }\n return b.slice(i)\n}\n\n/**\n * Provide a view over the given Uint8Array where any trailing null bytes at\n * the end are truncated.\n *\n * This can be used to ignore null bytes at the end of a padded UTF-8 string\n * without needing to copy that string, assuming code point U+0000 is encoded\n * in one null byte according to standards rather than in a multi-byte\n * overlong form.\n */\nexport function truncateTrailingNulls(a: Uint8Array) {\n let end = a.byteLength - 1\n while (a[end] === 0 && end >= 0) {\n end--\n }\n // end is now either the last non-null position in a or -1; in the latter\n // case the returned array will have length 0.\n return a.subarray(0, end + 1)\n}\n\n/**\n *\n * @param buffer1 {Uint8Array}\n * @param buffer2{ Uint8Array}\n * @returns {ArrayBuffer}\n */\nexport function appendBuffer(buffer1: ArrayBuffer, buffer2: ArrayBuffer): ArrayBuffer {\n const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength)\n tmp.set(new Uint8Array(buffer1), 0)\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength)\n return tmp.buffer as ArrayBuffer\n}\n\n//Convenience methods for dates management\nexport function after(d1: number | null | undefined, d2: number | null | undefined): boolean {\n return d1 === null || d2 === null || d1 === undefined || d2 === undefined || isDateAfter(parseDateNumber(d1)!, parseDateNumber(d2)!)\n}\n\nexport function before(d1: number | null | undefined, d2: number | null | undefined): boolean {\n return d1 === null || d2 === null || d1 === undefined || d2 === undefined || isDateBefore(parseDateNumber(d1)!, parseDateNumber(d2)!)\n}\n\nfunction parseDateNumber(epochOrLongCalendar: number): Date | null {\n if (!epochOrLongCalendar && epochOrLongCalendar !== 0) {\n return null\n }\n if (epochOrLongCalendar >= 18000101 && epochOrLongCalendar < 25400000) {\n return parseDate('' + epochOrLongCalendar, 'yyyyMMdd', new Date())\n } else if (epochOrLongCalendar >= 18000101000000) {\n return parseDate('' + epochOrLongCalendar, 'yyyyMMddHHmmss', new Date())\n } else {\n return new Date(epochOrLongCalendar)\n }\n}\n\n/**\n * Configuration for the encryption of an object.\n * @param topLevelFields the fields of the object to encrypt. All the fields will be encrypted in a single encryptedSelf field which is added to the\n * object.\n * @param nestedObjectsKeys the name of fields which are expected to contain a nested object (or undefined). Allows to specify\n */\nexport type EncryptedFieldsManifest = {\n topLevelFields: { fieldName: string; fieldPath: string }[]\n nestedObjectsKeys: {\n [objectFieldName: string]: EncryptedFieldsManifest\n }\n mapsValuesKeys: {\n [mapFieldName: string]: EncryptedFieldsManifest\n }\n arraysValuesKeys: {\n [arrayFieldName: string]: EncryptedFieldsManifest\n }\n}\n\n/**\n * @internal this function is for internal use only and may be changed without notice\n *\n * Parse the encrypted fields configuration for a specific entity type.\n *\n * ## Grammar\n *\n * The grammar for each encrypted field is the following:\n * ```\n * fieldName :=\n * regex([a-zA-Z_][a-zA-Z0-9_]+)\n * encryptedField :=\n * fieldName\n * | fieldName + (\".\" | \".*.\" | \"[].\") + encryptedField\n * ```\n *\n * This grammar allows you to specify the fields to encrypt for the object and recursively for nested objects.\n * - A string containing only a single `fieldName` will encrypt the field with the given name.\n * - A string starting with `fieldName.` allows to specify the encrypted fields of a nested object. The encrypted values of the\n * fields in the nested object will be saved in the nested object.\n * - A string starting with `fieldName.*.` treats `fieldName` as a map/dictionary data structure and allows to specify the encrypted fields of the\n * values of the map. Note that the values of the map must be objects as well. The encrypted content of each map value is stored in that value.\n * - A string starting with `fieldName[].` treats `fieldName` as an array and allows to specify the encrypted fields of the values of the array.\n * Note that the values of the array must be objects as well. The encrypted content of each array element is stored in that element.\n *\n * ## Example\n *\n * Consider the following object and encryption keys:\n * ```javascript\n * const obj = {\n * a: { x: 0, y: 1 },\n * b: \"hello\",\n * c: [ { public: \"a\", secret: \"b\" }, { public: \"c\", secret: \"d\" } ],\n * d: \"ok\",\n * e: {\n * info: \"something\",\n * private: \"secret\",\n * dataMap: {\n * \"en\": {\n * a: 1,\n * b: 2\n * },\n * \"fr\": {\n * a: 3,\n * b: 4\n * }\n * }\n * }\n * }\n * const encryptedFields = [\n * \"a\",\n * \"c[].secret\",\n * \"d\",\n * \"e.private\",\n * \"e.datamap.*.a\"\n * ]\n * ```\n * If you use them with the crypt method you will get the following result:\n * ```json\n * {\n * b: \"hello\",\n * c: [\n * { public: \"a\", encryptedSelf: \"...encrypted data of c[0]\" },\n * { public: \"c\", encryptedSelf: \"...encrypted data of c[1]\" }\n * ],\n * e: {\n * info: \"something\",\n * dataMap: {\n * \"en\": { b: 2, encryptedSelf: \"...encrypted data of e.dataMap['en']\" },\n * \"fr\": { b: 4, encryptedSelf: \"...encrypted data of e.dataMap['fr']\" }\n * },\n * encryptedSelf: \"...encrypted data of e\"\n * },\n * encryptedSelf: \"...encrypted data of obj\"\n * }\n * ```\n *\n * ## Shortened representation\n *\n * You can also group encrypted fields having the same prefix by concatenating to the prefix the JSON representation of an array of all the postfixes.\n * For example the following encrypted fields:\n * ```javascript\n * const encryptedFields = [\"a.b.c.d.e.f1\", \"a.b.c.d.e.f2\", \"a.b.c.d.e.f3\", \"a.b.c.d.e.f4\"]\n * ```\n * can be shortened to\n * ```javascript\n * const encryptedFields = ['a.b.c.d.e.[\"f1\",\"f2\",\"f3\",\"f4\"]'] // Note the use of single quotes to avoid escaping the double quotes\n * ```\n * If you use the shortened representation you may need to escape nested json representations. In that case the use of `JSON.stringify` is\n * recommended.\n *\n * @param encryptedFields\n * @param path\n */\nexport function parseEncryptedFields(encryptedFields: string[], path: string): EncryptedFieldsManifest {\n const groupedData = {\n topLevelFields: new Set<string>(),\n nestedObjectsKeys: {} as { [objectFieldName: string]: string[] },\n mapsValuesKeys: {} as { [mapFieldName: string]: string[] },\n arraysValuesKeys: {} as { [arrayFieldName: string]: string[] },\n }\n const encryptedFieldRegex = /^([_a-zA-Z][_a-zA-Z0-9]*)(?:(\\.\\*\\.|\\[]\\.|\\.)(?:[_a-zA-Z].*|\\[.*]))?$/\n const addSubkeyToGroupedData = (\n currFieldName: string,\n currFieldSeparator: string,\n currEncryptedField: string,\n groupedDataKey: 'nestedObjectsKeys' | 'mapsValuesKeys' | 'arraysValuesKeys'\n ) => {\n const existingOrNew = groupedData[groupedDataKey][currFieldName] ?? (groupedData[groupedDataKey][currFieldName] = [])\n const subKey = currEncryptedField.slice(currFieldName.length + currFieldSeparator.length)\n if (subKey.startsWith('[')) {\n let parsedJson: any[]\n try {\n parsedJson = JSON.parse(subKey)\n } catch {\n throw new Error(`Invalid encrypted field ${path}${currEncryptedField} (not a valid JSON subkey)`)\n }\n if (Array.isArray(parsedJson) && parsedJson.every((x) => typeof x == 'string')) {\n parsedJson.forEach((x) => existingOrNew.push(x))\n } else throw new Error(`Invalid encrypted field ${path}${currEncryptedField} (not an array of strings)`)\n } else {\n existingOrNew.push(subKey)\n }\n }\n for (const currEncryptedField of encryptedFields) {\n const currFieldMatch = currEncryptedField.match(encryptedFieldRegex)\n if (!!currFieldMatch) {\n const currFieldName = currFieldMatch[1]\n const currFieldSeparator = currFieldMatch[2]\n if (!currFieldSeparator) {\n if (groupedData.topLevelFields.has(currFieldName)) throw new Error(`Duplicate encrypted field ${path}${currFieldName}`)\n if (\n !!groupedData.nestedObjectsKeys[currFieldName] ||\n !!groupedData.mapsValuesKeys[currFieldName] ||\n !!groupedData.arraysValuesKeys[currFieldName]\n )\n throw new Error(`Encrypted field appears multiple times as different nested types and or top-level-field: ${path}${currFieldName}`)\n groupedData.topLevelFields.add(currFieldName)\n } else if (currFieldSeparator == '.') {\n if (\n groupedData.topLevelFields.has(currFieldName) ||\n !!groupedData.mapsValuesKeys[currFieldName] ||\n !!groupedData.arraysValuesKeys[currFieldName]\n )\n throw new Error(`Encrypted field appears multiple times as different nested types and or top-level-field: ${path}${currFieldName}`)\n addSubkeyToGroupedData(currFieldName, currFieldSeparator, currEncryptedField, 'nestedObjectsKeys')\n } else if (currFieldSeparator == '.*.') {\n if (\n groupedData.topLevelFields.has(currFieldName) ||\n !!groupedData.nestedObjectsKeys[currFieldName] ||\n !!groupedData.arraysValuesKeys[currFieldName]\n )\n throw new Error(`Encrypted field appears multiple times as different nested types and or top-level-field: ${path}${currFieldName}`)\n addSubkeyToGroupedData(currFieldName, currFieldSeparator, currEncryptedField, 'mapsValuesKeys')\n } else if (currFieldSeparator == '[].') {\n if (\n groupedData.topLevelFields.has(currFieldName) ||\n !!groupedData.nestedObjectsKeys[currFieldName] ||\n !!groupedData.mapsValuesKeys[currFieldName]\n )\n throw new Error(`Encrypted field appears multiple times as different nested types and or top-level-field: ${path}${currFieldName}`)\n addSubkeyToGroupedData(currFieldName, currFieldSeparator, currEncryptedField, 'arraysValuesKeys')\n } else throw new Error(`Internal error: unknown separator ${currFieldSeparator} passed regex validation in ${path}${currEncryptedField}`)\n } else throw new Error(`Invalid encrypted field ${path}${currEncryptedField}`)\n }\n return {\n topLevelFields: Array.from(groupedData.topLevelFields).map((fieldName) => ({ fieldName, fieldPath: path + fieldName })),\n nestedObjectsKeys: Object.fromEntries(\n Object.entries(groupedData.nestedObjectsKeys).map(([fieldName, fieldNames]) => [\n fieldName,\n parseEncryptedFields(fieldNames, path + fieldName + '.'),\n ])\n ),\n mapsValuesKeys: Object.fromEntries(\n Object.entries(groupedData.mapsValuesKeys).map(([fieldName, fieldNames]) => [\n fieldName,\n parseEncryptedFields(fieldNames, path + fieldName + '.*.'),\n ])\n ),\n arraysValuesKeys: Object.fromEntries(\n Object.entries(groupedData.arraysValuesKeys).map(([fieldName, fieldNames]) => [\n fieldName,\n parseEncryptedFields(fieldNames, path + fieldName + '[].'),\n ])\n ),\n }\n}\n\nfunction encryptedObjectDeepEqual(l: any, r: any): boolean {\n if (l === null || r === null) {\n return l === r\n }\n if (Array.isArray(l)) {\n if (!Array.isArray(r) || l.length !== r.length) {\n return false\n }\n for (let i = 0; i < l.length; i++) {\n if (!encryptedObjectDeepEqual(l[i], r[i])) {\n return false\n }\n }\n } else if (typeof l === 'object') {\n if (typeof r !== 'object' || Array.isArray(r)) {\n return false\n }\n const toEncryptKeys = Object.keys(l)\n const encryptedSelfContentKeys = Object.keys(r)\n if (toEncryptKeys.length !== encryptedSelfContentKeys.length) {\n return false\n }\n const allKeys = new Set([...toEncryptKeys, ...encryptedSelfContentKeys])\n if (allKeys.size !== toEncryptKeys.length) {\n return false\n }\n for (const key of toEncryptKeys) {\n if (!encryptedObjectDeepEqual(l[key], r[key])) {\n return false\n }\n }\n } else {\n return l === r\n }\n return true\n}\n\n/**\n * @internal this function is for internal use only and may be changed without notice\n * Encrypt the object graph recursively. Generally return an updated SHALLOW copy, although some fields may be deep copied if they also needed to be\n * recursively encrypted.\n * @param obj the object to encrypt\n * @param cryptor takes in input an object consisting only of the fields to encrypt of obj, and returns the encrypted object.\n * @param decryptor takes in input an \"encrytpedSelf\" value and returns the decrypted content. Can return null or throw exception if the decryption fails.\n * @param keys the keys to encrypt for the\n * @param path path of the current object, used for error messages.\n * @return a shallow copy of the object with a new encryptedSelfField and without the encrypted fields.\n */\nexport async function encryptObject(\n obj: { [key: string]: any },\n cryptor: (obj: { [key: string]: any }) => Promise<ArrayBuffer>,\n decryptor: (encryptedSelf: Uint8Array<ArrayBufferLike>) => Promise<any>,\n keys: EncryptedFieldsManifest,\n path: string = 'obj'\n): Promise<{ [key: string]: any }> {\n const shallowClone = { ...obj }\n const currEncryptedFields: { [key: string]: any } = {}\n for (const { fieldName } of keys.topLevelFields) {\n const fieldValue = shallowClone[fieldName]\n if (fieldValue !== undefined) {\n // we keep null values\n currEncryptedFields[fieldName] = fieldValue\n delete shallowClone[fieldName]\n }\n }\n let existingEncryptedSelfMatch = false\n if (shallowClone.encryptedSelf != undefined) {\n let decrypted = undefined\n try {\n decrypted = await decryptor(string2ua(a2b(shallowClone.encryptedSelf)))\n } catch (e) {\n // ignore\n }\n if (decrypted != undefined /* ignore null and undefined */ && encryptedObjectDeepEqual(currEncryptedFields, decrypted)) {\n existingEncryptedSelfMatch = true\n }\n }\n if (!existingEncryptedSelfMatch) {\n shallowClone['encryptedSelf'] = b2a(ua2string(await cryptor(currEncryptedFields)))\n }\n for (const [fieldName, subKeys] of Object.entries(keys.nestedObjectsKeys)) {\n const fieldValue = shallowClone[fieldName]\n if (fieldValue !== undefined && fieldValue !== null) {\n if (!isPojo(fieldValue)) throw new Error(`Expected field ${path}.${fieldName} to be a non-array object`)\n shallowClone[fieldName] = await encryptObject(fieldValue, cryptor, decryptor, subKeys, path + '.' + fieldName)\n }\n }\n for (const [mapFieldName, subKeys] of Object.entries(keys.mapsValuesKeys)) {\n const fieldValue = shallowClone[mapFieldName]\n if (fieldValue !== undefined && fieldValue !== null) {\n if (!isPojo(fieldValue)) throw new Error(`Expected field ${path}.${mapFieldName} to be a non-array object`)\n const newMap: { [key: string]: any } = {}\n for (const [key, value] of Object.entries(fieldValue as object)) {\n if (value === null || value === undefined) {\n newMap[key] = value\n } else {\n if (!isPojo(value)) throw new Error(`Expected field ${path}.${mapFieldName}.${key} to be a non-array object`)\n newMap[key] = await encryptObject(value, cryptor, decryptor, subKeys, path + '.' + mapFieldName + '.' + key)\n }\n }\n shallowClone[mapFieldName] = newMap\n }\n }\n for (const [arrayFieldName, subKeys] of Object.entries(keys.arraysValuesKeys)) {\n const fieldValue = shallowClone[arrayFieldName]\n if (fieldValue !== undefined && fieldValue !== null) {\n if (!Array.isArray(fieldValue)) throw new Error(`Expected field ${path}.${arrayFieldName} to be an array`)\n const newArray: any[] = Array(fieldValue.length)\n for (let i = 0; i < fieldValue.length; i++) {\n const value = fieldValue[i]\n if (value === null || value === undefined) {\n newArray[i] = value\n } else {\n if (!isPojo(value)) throw new Error(`Expected field ${path}.${arrayFieldName}[${i}] to be a non-array object`)\n newArray[i] = await encryptObject(value, cryptor, decryptor, subKeys, path + '.' + arrayFieldName + '[' + i + ']')\n }\n }\n shallowClone[arrayFieldName] = newArray\n }\n }\n return shallowClone\n}\n\n/**\n * Check if value is a non-null object that is not an array.\n */\nfunction isPojo(value: any): boolean {\n // This break if for some reason we have object versions of String/Number/Boolean\n return value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof ArrayBuffer) && !ArrayBuffer.isView(value)\n}\n\n/**\n * @internal this function is for internal use only and may be changed without notice\n * Decrypt object graph recursively.\n *\n * @param obj the object to decrypt\n * @param decryptor the decryptor function (returns a promise); the decryptor returns the decrypted input or null if\n * the decryption fails\n * @return a deep copy of the object with the decrypted fields and removed encryptedSelf field, or null if the\n * decryption failed\n */\nexport async function decryptObject(\n obj: { [key: string]: any },\n decryptor: (obj: Uint8Array) => Promise<{ [key: string]: any } | null>\n): Promise<{ [key: string]: any } | null> {\n const copy: { [key: string]: any } = {}\n for (const [key, value] of Object.entries(obj)) {\n if (key === 'encryptedSelf') {\n copy[key] = value\n } else if (typeof value === 'object' && value !== null) {\n if (Array.isArray(value)) {\n // Note: nested arrays (and primitives) are returned as is, and they aren't recursively decrypted.\n // This is because we currently don't support encryption of elements from arrays in arrays (we only support\n // arrays in objects in arrays).\n // In future this may change.\n const decryptedElements = []\n for (const element of value) {\n if (isPojo(element)) {\n const decrypted = await decryptObject(element, decryptor)\n if (decrypted == null) return null\n decryptedElements.push(decrypted)\n } else {\n decryptedElements.push(element)\n }\n }\n copy[key] = decryptedElements\n } else if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {\n copy[key] = value // No direct decryption of array buffer data. Array buffer should be converted to b64 string and encrypted as json data.\n } else {\n const decrypted = await decryptObject(value, decryptor)\n if (decrypted == null) return null\n copy[key] = decrypted\n }\n } else {\n copy[key] = value\n }\n }\n if (obj.encryptedSelf) {\n const decrypted = await decryptor(string2ua(a2b(obj.encryptedSelf)))\n if (decrypted == null) return null\n return { ...copy, ...decrypted }\n } else return copy\n}\n\n/**\n * Extracts the full jwk key pair from the jwk representation of the private key.\n * @param privateKeyJwk private key in jwk representation\n * @param shaVersion the SHA algorithm version\n * @throws if the key is missing the public modulus or public exponent.\n */\nexport function keyPairFromPrivateKeyJwk(privateKeyJwk: JsonWebKey, shaVersion: ShaVersion): KeyPair<JsonWebKey> {\n if (!privateKeyJwk.n || !privateKeyJwk.e) throw new Error('Incomplete private JsonWebKey: missing public modulus and/or exponent')\n return {\n privateKey: privateKeyJwk,\n publicKey: spkiToJwk(hex2ua(jwk2spki(privateKeyJwk)), shaVersion),\n }\n}\n"]}
@@ -1,4 +1,3 @@
1
- import { Moment } from 'moment';
2
1
  export declare const nihiiRegExp: RegExp;
3
2
  export declare const ssinRegExp: RegExp;
4
3
  export declare const ibanRegExp: RegExp;
@@ -9,7 +8,6 @@ export declare function nihiiFormat(nihii: string): string;
9
8
  export declare function nihiiValidate(nihii: string): boolean;
10
9
  export declare function ssinFormat(ssin: string): string;
11
10
  export declare function ssinValidate(ssin: string): boolean;
12
- export declare function phoneNumberValidate(phoneNumber: string): boolean;
13
11
  export declare function phoneNumberFormat(phoneNumber: string): string;
14
12
  /**
15
13
  * Converts a backend date number (e.g., patient birth date) into a Date object.
@@ -76,4 +74,4 @@ export declare function personNameAbbrev(person: {
76
74
  firstName?: string;
77
75
  lastName?: string;
78
76
  }): string;
79
- export declare function toMoment(epochOrLongCalendar: number): Moment | null;
77
+ export declare function toMoment(epochOrLongCalendar: number): Date | null;