@icure/api 4.2.27 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/icc-api/api/IccDeviceApi.d.ts +3 -3
  2. package/icc-api/api/IccDeviceApi.js.map +1 -1
  3. package/icc-api/api/IccHcpartyApi.d.ts +3 -3
  4. package/icc-api/api/IccHcpartyApi.js.map +1 -1
  5. package/icc-api/api/IccPatientApi.d.ts +3 -3
  6. package/icc-api/api/IccPatientApi.js.map +1 -1
  7. package/icc-api/api/IccUserApi.js +1 -1
  8. package/icc-api/api/IccUserApi.js.map +1 -1
  9. package/icc-api/api/XHR.js +2 -1
  10. package/icc-api/api/XHR.js.map +1 -1
  11. package/icc-api/iccApi.js +5 -1
  12. package/icc-api/iccApi.js.map +1 -1
  13. package/icc-api/index.js +5 -1
  14. package/icc-api/index.js.map +1 -1
  15. package/icc-api/model/Body.js +1 -1
  16. package/icc-api/model/Body.js.map +1 -1
  17. package/icc-api/model/Body1.js +1 -1
  18. package/icc-api/model/Body1.js.map +1 -1
  19. package/icc-api/model/Body2.js +1 -1
  20. package/icc-api/model/Body2.js.map +1 -1
  21. package/icc-api/model/Body3.js +1 -1
  22. package/icc-api/model/Body3.js.map +1 -1
  23. package/icc-api/model/ByteArray.js +1 -1
  24. package/icc-api/model/ByteArray.js.map +1 -1
  25. package/icc-api/model/Content.js +1 -1
  26. package/icc-api/model/Content.js.map +1 -1
  27. package/icc-api/model/Device.js +1 -1
  28. package/icc-api/model/Device.js.map +1 -1
  29. package/icc-api/model/Document.js +1 -1
  30. package/icc-api/model/Document.js.map +1 -1
  31. package/icc-api/model/DocumentTemplate.js +1 -1
  32. package/icc-api/model/DocumentTemplate.js.map +1 -1
  33. package/icc-api/model/HealthcareParty.js +1 -1
  34. package/icc-api/model/HealthcareParty.js.map +1 -1
  35. package/icc-api/model/MimeAttachment.js +1 -1
  36. package/icc-api/model/MimeAttachment.js.map +1 -1
  37. package/icc-api/model/Patient.js +1 -1
  38. package/icc-api/model/Patient.js.map +1 -1
  39. package/icc-api/model/models.d.ts +15 -0
  40. package/icc-api/model/models.js +5 -1
  41. package/icc-api/model/models.js.map +1 -1
  42. package/icc-x-api/crypto/AES.d.ts +2 -1
  43. package/icc-x-api/crypto/AES.js +37 -10
  44. package/icc-x-api/crypto/AES.js.map +1 -1
  45. package/icc-x-api/crypto/RSA.d.ts +0 -31
  46. package/icc-x-api/crypto/RSA.js +0 -64
  47. package/icc-x-api/crypto/RSA.js.map +1 -1
  48. package/icc-x-api/crypto/shamir.js.map +1 -1
  49. package/icc-x-api/filters/filters.js +7 -3
  50. package/icc-x-api/filters/filters.js.map +1 -1
  51. package/icc-x-api/icc-accesslog-x-api.js +25 -22
  52. package/icc-x-api/icc-accesslog-x-api.js.map +1 -1
  53. package/icc-x-api/icc-bekmehr-x-api.js +2 -2
  54. package/icc-x-api/icc-bekmehr-x-api.js.map +1 -1
  55. package/icc-x-api/icc-calendar-item-x-api.d.ts +2 -2
  56. package/icc-x-api/icc-calendar-item-x-api.js +43 -30
  57. package/icc-x-api/icc-calendar-item-x-api.js.map +1 -1
  58. package/icc-x-api/icc-contact-x-api.js +59 -45
  59. package/icc-x-api/icc-contact-x-api.js.map +1 -1
  60. package/icc-x-api/icc-crypto-x-api.d.ts +124 -53
  61. package/icc-x-api/icc-crypto-x-api.js +777 -362
  62. package/icc-x-api/icc-crypto-x-api.js.map +1 -1
  63. package/icc-x-api/icc-doctemplate-x-api.js +2 -2
  64. package/icc-x-api/icc-doctemplate-x-api.js.map +1 -1
  65. package/icc-x-api/icc-document-x-api.js +3 -3
  66. package/icc-x-api/icc-document-x-api.js.map +1 -1
  67. package/icc-x-api/icc-form-x-api.js +3 -3
  68. package/icc-x-api/icc-form-x-api.js.map +1 -1
  69. package/icc-x-api/icc-hcparty-x-api.js +6 -11
  70. package/icc-x-api/icc-hcparty-x-api.js.map +1 -1
  71. package/icc-x-api/icc-helement-x-api.js +8 -8
  72. package/icc-x-api/icc-helement-x-api.js.map +1 -1
  73. package/icc-x-api/icc-maintenance-task-x-api.d.ts +5 -5
  74. package/icc-x-api/icc-maintenance-task-x-api.js +13 -14
  75. package/icc-x-api/icc-maintenance-task-x-api.js.map +1 -1
  76. package/icc-x-api/icc-patient-x-api.d.ts +1 -1
  77. package/icc-x-api/icc-patient-x-api.js +66 -56
  78. package/icc-x-api/icc-patient-x-api.js.map +1 -1
  79. package/icc-x-api/index.d.ts +16 -15
  80. package/icc-x-api/index.js +77 -58
  81. package/icc-x-api/index.js.map +1 -1
  82. package/icc-x-api/utils/binary-utils.js +5 -5
  83. package/icc-x-api/utils/binary-utils.js.map +1 -1
  84. package/icc-x-api/utils/crypto-utils.d.ts +61 -0
  85. package/icc-x-api/utils/crypto-utils.js +245 -0
  86. package/icc-x-api/utils/crypto-utils.js.map +1 -0
  87. package/icc-x-api/utils/formatting-util.js +3 -3
  88. package/icc-x-api/utils/formatting-util.js.map +1 -1
  89. package/icc-x-api/utils/functional-util.d.ts +1 -0
  90. package/icc-x-api/utils/functional-util.js +8 -1
  91. package/icc-x-api/utils/functional-util.js.map +1 -1
  92. package/icc-x-api/utils/index.d.ts +1 -0
  93. package/icc-x-api/utils/index.js +6 -1
  94. package/icc-x-api/utils/index.js.map +1 -1
  95. package/index.js +5 -1
  96. package/index.js.map +1 -1
  97. package/node-compat.d.ts +1 -1
  98. package/node-compat.js +3 -3
  99. package/node-compat.js.map +1 -1
  100. package/package.json +2 -2
  101. package/icc-x-api/crypto/utils.d.ts +0 -68
  102. package/icc-x-api/crypto/utils.js +0 -239
  103. package/icc-x-api/crypto/utils.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../../../icc-x-api/utils/crypto-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import * as mm from 'moment'\nimport { Moment } from 'moment'\nimport * as _ from 'lodash'\nimport { a2b, b2a, b64Url2ua, string2ua, ua2b64Url, ua2hex, ua2string } from '../utils/binary-utils'\nimport { pack } from './asn1-packer'\nimport { parseAsn1 } from './asn1-parser'\n\nexport function notConcurrent<T>(concurrencyMap: { [key: string]: PromiseLike<T> }, key: string, proc: () => PromiseLike<T>): PromiseLike<T> {\n const inFlight = concurrencyMap[key]\n if (!inFlight) {\n return (concurrencyMap[key] = (async () => {\n try {\n return await proc()\n } finally {\n delete concurrencyMap[key]\n }\n })())\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]]],\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]]],\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): { 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'\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: '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 * Encrypt object graph recursively\n *\n * @param obj the object to encrypt\n * @param cryptor the cryptor function (returns a promise)\n * @param keys the keys to be crypted: ex for a Patient ['note', 'addresses.*.[\"street\", \"houseNumber\", \"telecoms.*.telecomNumber\"]']\n */\nexport async function crypt(obj: any, cryptor: (obj: { [key: string]: string }) => Promise<ArrayBuffer>, keys: Array<string>) {\n const subObj = _.pick(\n obj,\n keys.filter((k) => !k.includes('*'))\n )\n obj.encryptedSelf = b2a(ua2string(await cryptor(subObj)))\n Object.keys(subObj).forEach((k) => delete obj[k])\n\n await keys\n .filter((k) => k.includes('*'))\n .reduce(async (prev: Promise<void>, k: any) => {\n await prev\n const k1 = k.split('.*.')[0]\n const k2 = k.substr(k1.length + 3)\n\n const mapped = await Promise.all((_.get(obj, k1) || []).map((so: any) => crypt(so, cryptor, k2.startsWith('[') ? JSON.parse(k2) : [k2])))\n _.set(obj, k1, mapped)\n }, Promise.resolve())\n\n return obj\n}\n\n/**\n * Decrypt object graph recursively\n *\n * @param obj the object to encrypt\n * @param decryptor the decryptor function (returns a promise)\n */\nexport async function decrypt(obj: any, decryptor: (obj: Uint8Array) => Promise<{ [key: string]: string }>) {\n await Object.keys(obj).reduce(async (prev: Promise<void>, k: any) => {\n await prev\n if (Array.isArray(obj[k])) {\n await (obj[k] as Array<any>)\n .filter((o) => typeof o === 'object' && o !== null)\n .reduce(async (prev: Promise<void>, so: any) => {\n await prev\n await decrypt(so, decryptor)\n }, Promise.resolve())\n }\n }, Promise.resolve())\n if (obj.encryptedSelf) {\n Object.assign(obj, await decryptor(string2ua(a2b(obj.encryptedSelf))))\n }\n return obj\n}\n"]}
@@ -78,16 +78,16 @@ export function phoneNumberFormat(phoneNumber: string): string {
78
78
  }
79
79
  */
80
80
  function phoneNumberValidate(phoneNumber) {
81
- return libphonenumber_js_1.isValidNumber(phoneNumber);
81
+ return (0, libphonenumber_js_1.isValidNumber)(phoneNumber);
82
82
  }
83
83
  exports.phoneNumberValidate = phoneNumberValidate;
84
84
  function phoneNumberFormat(phoneNumber) {
85
- const parsedPhoneNumber = libphonenumber_js_1.parseNumber(phoneNumber, DEFAULT_COUNTRY);
85
+ const parsedPhoneNumber = (0, libphonenumber_js_1.parseNumber)(phoneNumber, DEFAULT_COUNTRY);
86
86
  if (_.isEmpty(parsedPhoneNumber)) {
87
87
  // The number is not valid, so we leave the input string as-is.
88
88
  return phoneNumber;
89
89
  }
90
- return libphonenumber_js_1.formatNumber(parsedPhoneNumber, 'International');
90
+ return (0, libphonenumber_js_1.formatNumber)(parsedPhoneNumber, 'International');
91
91
  }
92
92
  exports.phoneNumberFormat = phoneNumberFormat;
93
93
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"formatting-util.js","sourceRoot":"","sources":["../../../icc-x-api/utils/formatting-util.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseNumber, formatNumber, isValidNumber, ParsedNumber } from 'libphonenumber-js'\n\nimport * as moment from 'moment'\nimport * as _ from 'lodash'\nimport { Moment } from 'moment'\n\n// TODO: move this to env.js?\nconst DEFAULT_COUNTRY = 'BE'\n\nexport const nihiiRegExp = new RegExp('^(\\\\d{1})(\\\\d{5})(\\\\d{2})(\\\\d{3})$')\nexport const ssinRegExp = new RegExp('^(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})$')\nexport const ibanRegExp = new RegExp('^(\\\\d{4})(\\\\d{4})(\\\\d{4})(\\\\d{4})$')\n\nconst patterns = {\n IBAN: (iban: string) => /^BE\\d{14}$/.test(iban) && isValidIBAN(iban),\n IBANBE: (iban: string) => /^BE\\d{14}$/.test(iban) && isValidIBAN(iban),\n}\n\n//http://ht5ifv.serprest.pt/extensions/tools/IBAN/\nexport function isValidIBAN(iban: string) {\n //This function check if the checksum if correct\n iban = iban.replace(/^(.{4})(.*)$/, '$2$1') //Move the first 4 chars from left to the right\n const fun = (e: string) => (e.charCodeAt(0) - 'A'.charCodeAt(0) + 10).toString()\n iban = iban.replace(/[A-Z]/g, fun) //Convert A-Z to 10-25\n let $sum = 0\n let $ei = 1 //First exponent\n for (let $i = iban.length - 1; $i >= 0; $i--) {\n $sum += $ei * parseInt(iban.charAt($i), 10) //multiply the digit by it's exponent\n $ei = ($ei * 10) % 97 //compute next base 10 exponent in modulus 97\n }\n return $sum % 97 === 1\n}\n\nexport function ibanValidate(iban: string) {\n if (iban.startsWith('BE')) {\n return patterns.IBANBE(iban)\n } else {\n return patterns.IBAN(iban)\n }\n}\n\nexport function ibanFormat(iban: string): string {\n return iban.replace(ibanRegExp, '$1 $2 $3 $4')\n}\n\nexport function nihiiFormat(nihii: string): string {\n return nihii.replace(nihiiRegExp, '$1 $2 $3 $4')\n}\n\nexport function nihiiValidate(nihii: string): boolean {\n return !!nihii.match(nihiiRegExp)\n}\n\nexport function ssinFormat(ssin: string): string {\n return ssin.replace(ssinRegExp, '$1 $2 $3 $4 $5')\n}\n\nexport function ssinValidate(ssin: string): boolean {\n return !!ssin.match(ssinRegExp)\n}\n\n/* Alternate lib free version\nexport function phoneNumberValidate(phoneNumber: string): boolean {\n return (\n !!phoneNumber.match(/(?:\\+|00)([1-9][0-9]{1-2})([- /.]*([0-9]+))+/) ||\n !!phoneNumber.match(/(0[1-9][0-9]*)([- /.]*([0-9]+))+/)\n )\n}\n\nexport function phoneNumberFormat(phoneNumber: string): string {\n let match = phoneNumber.match(/(?:\\+|00)([1-9][0-9]{1-2})([- /.]*([0-9]+))+/)\n if (match) {\n return `+${match[1]} ${match[2].replace(/[- /.]/g, \" \")}`.replace(/ /g, \" \")\n }\n match = phoneNumber.match(/0([1-9][0-9]*)([- /.]*([0-9]+))+/)\n if (match) {\n return `+32 ${match[1]} ${match[2].replace(/[- /.]/g, \" \")}`.replace(/ /g, \" \")\n }\n return phoneNumber\n}\n*/\n\nexport function phoneNumberValidate(phoneNumber: string): boolean {\n return isValidNumber(phoneNumber)\n}\n\nexport function phoneNumberFormat(phoneNumber: string): string {\n const parsedPhoneNumber = parseNumber(phoneNumber, DEFAULT_COUNTRY) as ParsedNumber\n if (_.isEmpty(parsedPhoneNumber)) {\n // The number is not valid, so we leave the input string as-is.\n return phoneNumber\n }\n return formatNumber(parsedPhoneNumber, 'International')\n}\n\n/**\n * Converts a backend date number (e.g., patient birth date) into a Date object.\n * @param dateNumber a YYYYMMDD date number from the backend\n * @return a Date object\n * @throws Error if it is impossible to create a date from the number, other if dateNumber is negative.\n * @see #dateEncode\n * @see #timeDecode\n */\nexport function dateDecode(dateNumber: number): Date | undefined {\n if (!dateNumber) {\n return undefined\n }\n\n if (dateNumber < 0) {\n throw new Error(\"We don't decode negative dates. Please make sure you have valid data.\")\n }\n const dateNumberStr: string = _.padStart(dateNumber.toString(), 8, '19700101')\n if (dateNumberStr.length > 8) {\n if (dateNumberStr.endsWith('000000')) {\n return dateNumber ? moment(dateNumberStr, 'YYYYMMDD000000').toDate() : undefined\n }\n\n throw Error(\"Decoded date is over year 9999. We can't format it properly.\")\n }\n return dateNumber ? moment(dateNumberStr, 'YYYYMMDD').toDate() : undefined\n}\n\n/**\n * Converts a backend time number (e.g., health element openingDate) into a Date object.\n * @param timeNumber a YYYYMMDD date number from the backend\n * @return a Date object\n * @see #timeEncode\n * @see #dateDecode\n */\nexport function timeDecode(timeNumber: number): Date | undefined {\n return timeNumber ? moment(timeNumber.toString(), 'YYYYMMDDHHmmss').toDate() : undefined\n}\n\n/**\n * Encodes a Date object into a backend date number (e.g., patient birth date).\n * @param date a Date object\n * @return a YYYYMMDD date number for the backend\n * @see #dateDecode\n * @see #timeEncode\n */\nexport function dateEncode(date: Date): number | undefined {\n const dateStr = _.padStart(moment(date).format('YYYYMMDD'), 8, '19700101')\n // date is null if the field is not set\n return date ? Number(dateStr) : undefined\n}\n\n/**\n * Encodes a Date object into a backend time number (e.g., health element openingDate).\n * @param date a Date object\n * @return a YYYYMMDDHHmmss date number for the backend\n * @see #timeDecode\n * @see #dateEncode\n */\nexport function timeEncode(date: Date): number | undefined {\n return date ? Number(moment(date).format('YYYYMMDDHHmmss')) : undefined\n}\n\n/**\n * Formats a value and a physical unit into text.\n * @param value the numerical or string value to encode\n * @param unit the unit represented as a string (an empty string is also supported)\n */\nexport function unit(value: number | string, unit: string | null): string {\n unit = unit || ''\n let separator: string\n if (!unit || unit.startsWith('°')) {\n separator = ''\n } else {\n // including '%'\n separator = '\\xa0'\n }\n return value + separator + unit\n}\n\n/**\n * 0.1 + 0.2 = 0.30000000000000004. Use this function to be better at maths.\n * @param a number\n * @return the rounded number, two after the comma\n */\nexport function amount(value: number): number {\n return Number((value || 0).toFixed(2))\n}\n\n/**\n * A simple formatter to keep the logic across the app.\n * Input: 2.1 ; Output: 2.10€\n */\nexport function money(value: number): string {\n return [(value || 0).toFixed(2), '€'].join('')\n}\n\n/**\n * Transform a dictionary to a url params.\n * From { key1: value1, key2: value2, ... } returns key1=value1&key2=value2&...=...\n */\nexport function toUrlParams(params: { [key: string]: string }): string {\n return _.filter(_.map(params, (value, key) => (value ? key + '=' + value : undefined))).join('&')\n}\n\nexport function personName(person: { firstName?: string; lastName?: string }): string {\n return `${person.firstName || ''} ${person.lastName || ''}`.trim()\n}\n\nexport function personNameAbbrev(person: { firstName?: string; lastName?: string }): string {\n const firstName = person.firstName ? person.firstName[0] + '.' : undefined\n return personName({ ...person, firstName })\n}\n\nexport function toMoment(epochOrLongCalendar: number): Moment | null {\n if (!epochOrLongCalendar && epochOrLongCalendar !== 0) {\n return null\n }\n if (epochOrLongCalendar >= 18000101 && epochOrLongCalendar < 25400000) {\n return moment('' + epochOrLongCalendar, 'YYYYMMDD')\n } else if (epochOrLongCalendar >= 18000101000000) {\n return moment('' + epochOrLongCalendar, 'YYYYMMDDhhmmss')\n } else {\n return moment(epochOrLongCalendar)\n }\n}\n"]}
1
+ {"version":3,"file":"formatting-util.js","sourceRoot":"","sources":["../../../icc-x-api/utils/formatting-util.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseNumber, formatNumber, isValidNumber, ParsedNumber } from 'libphonenumber-js'\n\nimport * as moment from 'moment'\nimport * as _ from 'lodash'\nimport { Moment } from 'moment'\n\n// TODO: move this to env.js?\nconst DEFAULT_COUNTRY = 'BE'\n\nexport const nihiiRegExp = new RegExp('^(\\\\d{1})(\\\\d{5})(\\\\d{2})(\\\\d{3})$')\nexport const ssinRegExp = new RegExp('^(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})$')\nexport const ibanRegExp = new RegExp('^(\\\\d{4})(\\\\d{4})(\\\\d{4})(\\\\d{4})$')\n\nconst patterns = {\n IBAN: (iban: string) => /^BE\\d{14}$/.test(iban) && isValidIBAN(iban),\n IBANBE: (iban: string) => /^BE\\d{14}$/.test(iban) && isValidIBAN(iban),\n}\n\n//http://ht5ifv.serprest.pt/extensions/tools/IBAN/\nexport function isValidIBAN(iban: string) {\n //This function check if the checksum if correct\n iban = iban.replace(/^(.{4})(.*)$/, '$2$1') //Move the first 4 chars from left to the right\n const fun = (e: string) => (e.charCodeAt(0) - 'A'.charCodeAt(0) + 10).toString()\n iban = iban.replace(/[A-Z]/g, fun) //Convert A-Z to 10-25\n let $sum = 0\n let $ei = 1 //First exponent\n for (let $i = iban.length - 1; $i >= 0; $i--) {\n $sum += $ei * parseInt(iban.charAt($i), 10) //multiply the digit by it's exponent\n $ei = ($ei * 10) % 97 //compute next base 10 exponent in modulus 97\n }\n return $sum % 97 === 1\n}\n\nexport function ibanValidate(iban: string) {\n if (iban.startsWith('BE')) {\n return patterns.IBANBE(iban)\n } else {\n return patterns.IBAN(iban)\n }\n}\n\nexport function ibanFormat(iban: string): string {\n return iban.replace(ibanRegExp, '$1 $2 $3 $4')\n}\n\nexport function nihiiFormat(nihii: string): string {\n return nihii.replace(nihiiRegExp, '$1 $2 $3 $4')\n}\n\nexport function nihiiValidate(nihii: string): boolean {\n return !!nihii.match(nihiiRegExp)\n}\n\nexport function ssinFormat(ssin: string): string {\n return ssin.replace(ssinRegExp, '$1 $2 $3 $4 $5')\n}\n\nexport function ssinValidate(ssin: string): boolean {\n return !!ssin.match(ssinRegExp)\n}\n\n/* Alternate lib free version\nexport function phoneNumberValidate(phoneNumber: string): boolean {\n return (\n !!phoneNumber.match(/(?:\\+|00)([1-9][0-9]{1-2})([- /.]*([0-9]+))+/) ||\n !!phoneNumber.match(/(0[1-9][0-9]*)([- /.]*([0-9]+))+/)\n )\n}\n\nexport function phoneNumberFormat(phoneNumber: string): string {\n let match = phoneNumber.match(/(?:\\+|00)([1-9][0-9]{1-2})([- /.]*([0-9]+))+/)\n if (match) {\n return `+${match[1]} ${match[2].replace(/[- /.]/g, \" \")}`.replace(/ /g, \" \")\n }\n match = phoneNumber.match(/0([1-9][0-9]*)([- /.]*([0-9]+))+/)\n if (match) {\n return `+32 ${match[1]} ${match[2].replace(/[- /.]/g, \" \")}`.replace(/ /g, \" \")\n }\n return phoneNumber\n}\n*/\n\nexport function phoneNumberValidate(phoneNumber: string): boolean {\n return isValidNumber(phoneNumber)\n}\n\nexport function phoneNumberFormat(phoneNumber: string): string {\n const parsedPhoneNumber = parseNumber(phoneNumber, DEFAULT_COUNTRY) as ParsedNumber\n if (_.isEmpty(parsedPhoneNumber)) {\n // The number is not valid, so we leave the input string as-is.\n return phoneNumber\n }\n return formatNumber(parsedPhoneNumber, 'International')\n}\n\n/**\n * Converts a backend date number (e.g., patient birth date) into a Date object.\n * @param dateNumber a YYYYMMDD date number from the backend\n * @return a Date object\n * @throws Error if it is impossible to create a date from the number, other if dateNumber is negative.\n * @see #dateEncode\n * @see #timeDecode\n */\nexport function dateDecode(dateNumber: number): Date | undefined {\n if (!dateNumber) {\n return undefined\n }\n\n if (dateNumber < 0) {\n throw new Error(\"We don't decode negative dates. Please make sure you have valid data.\")\n }\n const dateNumberStr: string = _.padStart(dateNumber.toString(), 8, '19700101')\n if (dateNumberStr.length > 8) {\n if (dateNumberStr.endsWith('000000')) {\n return dateNumber ? moment(dateNumberStr, 'YYYYMMDD000000').toDate() : undefined\n }\n\n throw Error(\"Decoded date is over year 9999. We can't format it properly.\")\n }\n return dateNumber ? moment(dateNumberStr, 'YYYYMMDD').toDate() : undefined\n}\n\n/**\n * Converts a backend time number (e.g., health element openingDate) into a Date object.\n * @param timeNumber a YYYYMMDD date number from the backend\n * @return a Date object\n * @see #timeEncode\n * @see #dateDecode\n */\nexport function timeDecode(timeNumber: number): Date | undefined {\n return timeNumber ? moment(timeNumber.toString(), 'YYYYMMDDHHmmss').toDate() : undefined\n}\n\n/**\n * Encodes a Date object into a backend date number (e.g., patient birth date).\n * @param date a Date object\n * @return a YYYYMMDD date number for the backend\n * @see #dateDecode\n * @see #timeEncode\n */\nexport function dateEncode(date: Date): number | undefined {\n const dateStr = _.padStart(moment(date).format('YYYYMMDD'), 8, '19700101')\n // date is null if the field is not set\n return date ? Number(dateStr) : undefined\n}\n\n/**\n * Encodes a Date object into a backend time number (e.g., health element openingDate).\n * @param date a Date object\n * @return a YYYYMMDDHHmmss date number for the backend\n * @see #timeDecode\n * @see #dateEncode\n */\nexport function timeEncode(date: Date): number | undefined {\n return date ? Number(moment(date).format('YYYYMMDDHHmmss')) : undefined\n}\n\n/**\n * Formats a value and a physical unit into text.\n * @param value the numerical or string value to encode\n * @param unit the unit represented as a string (an empty string is also supported)\n */\nexport function unit(value: number | string, unit: string | null): string {\n unit = unit || ''\n let separator: string\n if (!unit || unit.startsWith('°')) {\n separator = ''\n } else {\n // including '%'\n separator = '\\xa0'\n }\n return value + separator + unit\n}\n\n/**\n * 0.1 + 0.2 = 0.30000000000000004. Use this function to be better at maths.\n * @param a number\n * @return the rounded number, two after the comma\n */\nexport function amount(value: number): number {\n return Number((value || 0).toFixed(2))\n}\n\n/**\n * A simple formatter to keep the logic across the app.\n * Input: 2.1 ; Output: 2.10€\n */\nexport function money(value: number): string {\n return [(value || 0).toFixed(2), '€'].join('')\n}\n\n/**\n * Transform a dictionary to a url params.\n * From { key1: value1, key2: value2, ... } returns key1=value1&key2=value2&...=...\n */\nexport function toUrlParams(params: { [key: string]: string }): string {\n return _.filter(_.map(params, (value, key) => (value ? key + '=' + value : undefined))).join('&')\n}\n\nexport function personName(person: { firstName?: string; lastName?: string }): string {\n return `${person.firstName || ''} ${person.lastName || ''}`.trim()\n}\n\nexport function personNameAbbrev(person: { firstName?: string; lastName?: string }): string {\n const firstName = person.firstName ? person.firstName[0] + '.' : undefined\n return personName({ ...person, firstName })\n}\n\nexport function toMoment(epochOrLongCalendar: number): Moment | null {\n if (!epochOrLongCalendar && epochOrLongCalendar !== 0) {\n return null\n }\n if (epochOrLongCalendar >= 18000101 && epochOrLongCalendar < 25400000) {\n return moment('' + epochOrLongCalendar, 'YYYYMMDD')\n } else if (epochOrLongCalendar >= 18000101000000) {\n return moment('' + epochOrLongCalendar, 'YYYYMMDDhhmmss')\n } else {\n return moment(epochOrLongCalendar)\n }\n}\n"]}
@@ -1 +1,2 @@
1
1
  export declare function also<T>(value: T, lambda: (it: T) => void): T;
2
+ export declare function fold<T, R>(whereToFold: Array<T>, initial: R, operation: (acc: R, element: T) => R): R;
@@ -1,9 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.also = void 0;
3
+ exports.fold = exports.also = void 0;
4
4
  function also(value, lambda) {
5
5
  lambda(value);
6
6
  return value;
7
7
  }
8
8
  exports.also = also;
9
+ function fold(whereToFold, initial, operation) {
10
+ let accumulator = initial;
11
+ for (let i = 0; i < whereToFold.length; i++)
12
+ accumulator = operation(accumulator, whereToFold[i]);
13
+ return accumulator;
14
+ }
15
+ exports.fold = fold;
9
16
  //# sourceMappingURL=functional-util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"functional-util.js","sourceRoot":"","sources":["../../../icc-x-api/utils/functional-util.ts"],"names":[],"mappings":";;;AAAA,SAAgB,IAAI,CAAI,KAAQ,EAAE,MAAuB;IACvD,MAAM,CAAC,KAAK,CAAC,CAAA;IACb,OAAO,KAAK,CAAA;AACd,CAAC;AAHD,oBAGC","sourcesContent":["export function also<T>(value: T, lambda: (it: T) => void) {\n lambda(value)\n return value\n}\n"]}
1
+ {"version":3,"file":"functional-util.js","sourceRoot":"","sources":["../../../icc-x-api/utils/functional-util.ts"],"names":[],"mappings":";;;AAAA,SAAgB,IAAI,CAAI,KAAQ,EAAE,MAAuB;IACvD,MAAM,CAAC,KAAK,CAAC,CAAA;IACb,OAAO,KAAK,CAAA;AACd,CAAC;AAHD,oBAGC;AAED,SAAgB,IAAI,CAAO,WAAqB,EAAE,OAAU,EAAE,SAAoC;IAChG,IAAI,WAAW,GAAG,OAAO,CAAA;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,WAAW,GAAG,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IACjG,OAAO,WAAW,CAAA;AACpB,CAAC;AAJD,oBAIC","sourcesContent":["export function also<T>(value: T, lambda: (it: T) => void) {\n lambda(value)\n return value\n}\n\nexport function fold<T, R>(whereToFold: Array<T>, initial: R, operation: (acc: R, element: T) => R): R {\n let accumulator = initial\n for (let i = 0; i < whereToFold.length; i++) accumulator = operation(accumulator, whereToFold[i])\n return accumulator\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  export * from './code-util';
2
2
  export * from './net-utils';
3
+ export * from './crypto-utils';
3
4
  export * from './formatting-util';
4
5
  export * from './binary-utils';
5
6
  export * from './hcp-util';
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -12,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
16
  Object.defineProperty(exports, "__esModule", { value: true });
13
17
  __exportStar(require("./code-util"), exports);
14
18
  __exportStar(require("./net-utils"), exports);
19
+ __exportStar(require("./crypto-utils"), exports);
15
20
  __exportStar(require("./formatting-util"), exports);
16
21
  __exportStar(require("./binary-utils"), exports);
17
22
  __exportStar(require("./hcp-util"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../icc-x-api/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA2B;AAC3B,8CAA2B;AAC3B,oDAAiC;AACjC,iDAA8B;AAC9B,6CAA0B;AAC1B,oDAAiC","sourcesContent":["export * from './code-util'\nexport * from './net-utils'\nexport * from './formatting-util'\nexport * from './binary-utils'\nexport * from './hcp-util'\nexport * from './functional-util'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../icc-x-api/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,8CAA2B;AAC3B,iDAA8B;AAC9B,oDAAiC;AACjC,iDAA8B;AAC9B,6CAA0B;AAC1B,oDAAiC","sourcesContent":["export * from './code-util'\nexport * from './net-utils'\nexport * from './crypto-utils'\nexport * from './formatting-util'\nexport * from './binary-utils'\nexport * from './hcp-util'\nexport * from './functional-util'\n"]}
package/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,4CAAyB;AACzB,yDAAsC;AAEtC,oDAAiC;AACjC,8DAA2C;AAE3C,yCAAuC;AAA9B,0FAAA,GAAG,OAAA","sourcesContent":["export * from './icc-x-api'\nexport * from './icc-api'\nexport * from './icc-api/model/models'\n\nexport * from './icc-x-api/utils'\nexport * from './icc-x-api/filters/filters'\n\nexport { XHR } from './icc-api/api/XHR'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,4CAAyB;AACzB,yDAAsC;AAEtC,oDAAiC;AACjC,8DAA2C;AAE3C,yCAAuC;AAA9B,0FAAA,GAAG,OAAA","sourcesContent":["export * from './icc-x-api'\nexport * from './icc-api'\nexport * from './icc-api/model/models'\n\nexport * from './icc-x-api/utils'\nexport * from './icc-x-api/filters/filters'\n\nexport { XHR } from './icc-api/api/XHR'\n"]}
package/node-compat.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export declare const crypto: any;
2
- import fetch from 'node-fetch';
2
+ import 'isomorphic-fetch';
3
3
  export declare const nodeFetch: typeof fetch;
package/node-compat.js CHANGED
@@ -4,11 +4,11 @@ exports.nodeFetch = exports.crypto = void 0;
4
4
  const tmp = require('os').tmpdir();
5
5
  const util = require('util');
6
6
  exports.crypto = require('crypto').webcrypto;
7
- const node_fetch_1 = require("node-fetch");
7
+ require("isomorphic-fetch");
8
8
  global.localStorage = new (require('node-localstorage').LocalStorage)(tmp, 5 * 1024 * 1024 * 1024);
9
- global.fetch = node_fetch_1.default;
9
+ global.fetch = fetch;
10
10
  global.Storage = '';
11
11
  global.TextDecoder = util.TextDecoder;
12
12
  global.TextEncoder = util.TextEncoder;
13
- exports.nodeFetch = node_fetch_1.default;
13
+ exports.nodeFetch = fetch;
14
14
  //# sourceMappingURL=node-compat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-compat.js","sourceRoot":"","sources":["../node-compat.ts"],"names":[],"mappings":";;;AAAA,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;AAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAEf,QAAA,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAA;AAEjD,2CACC;AAAC,MAAc,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAC3G;AAAC,MAAc,CAAC,KAAK,GAAG,oBAAK,CAC7B;AAAC,MAAc,CAAC,OAAO,GAAG,EAAE,CAC5B;AAAC,MAAc,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAC9C;AAAC,MAAc,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;AAElC,QAAA,SAAS,GAAG,oBAAK,CAAA","sourcesContent":["const tmp = require('os').tmpdir()\nconst util = require('util')\n\nexport const crypto = require('crypto').webcrypto\n\nimport fetch from 'node-fetch'\n;(global as any).localStorage = new (require('node-localstorage').LocalStorage)(tmp, 5 * 1024 * 1024 * 1024)\n;(global as any).fetch = fetch\n;(global as any).Storage = ''\n;(global as any).TextDecoder = util.TextDecoder\n;(global as any).TextEncoder = util.TextEncoder\n\nexport const nodeFetch = fetch\n"]}
1
+ {"version":3,"file":"node-compat.js","sourceRoot":"","sources":["../node-compat.ts"],"names":[],"mappings":";;;AAAA,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;AAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAEf,QAAA,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAA;AAEjD,4BACC;AAAC,MAAc,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAC3G;AAAC,MAAc,CAAC,KAAK,GAAG,KAAK,CAC7B;AAAC,MAAc,CAAC,OAAO,GAAG,EAAE,CAC5B;AAAC,MAAc,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAC9C;AAAC,MAAc,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;AAElC,QAAA,SAAS,GAAG,KAAK,CAAA","sourcesContent":["const tmp = require('os').tmpdir()\nconst util = require('util')\n\nexport const crypto = require('crypto').webcrypto\n\nimport 'isomorphic-fetch'\n;(global as any).localStorage = new (require('node-localstorage').LocalStorage)(tmp, 5 * 1024 * 1024 * 1024)\n;(global as any).fetch = fetch\n;(global as any).Storage = ''\n;(global as any).TextDecoder = util.TextDecoder\n;(global as any).TextEncoder = util.TextEncoder\n\nexport const nodeFetch = fetch\n"]}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@icure/api",
3
- "version": "4.2.27",
3
+ "version": "5.0.1",
4
4
  "description": "Typescript version of iCure standalone API client",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
7
7
  "dependencies": {
8
8
  "date-fns": "^2.23.0",
9
9
  "libphonenumber-js": "^1.7.18",
10
- "lodash": "^4.17.20",
10
+ "lodash": "^4.17.21",
11
11
  "moment": "^2.22.1",
12
12
  "text-encoding": "^0.7.0",
13
13
  "uuid": "^8.3.2",
@@ -1,68 +0,0 @@
1
- import { Moment } from 'moment';
2
- export declare class UtilsClass {
3
- constructor();
4
- notConcurrent<T>(concurrencyMap: {
5
- [key: string]: PromiseLike<T>;
6
- }, key: string, proc: () => PromiseLike<T>): PromiseLike<T>;
7
- jwk2pkcs8(jwk: any): string;
8
- jwk2spki(jwk: any): string;
9
- spkiToJwk(buf: Uint8Array): {
10
- kty: string;
11
- alg: string;
12
- n: string;
13
- e: string;
14
- ext: boolean;
15
- };
16
- pkcs8ToJwk(buf: Uint8Array | ArrayBuffer): {
17
- kty: string;
18
- n: string;
19
- e: string;
20
- d: string;
21
- p: string;
22
- q: string;
23
- dp: string;
24
- dq: string;
25
- qi: string;
26
- };
27
- minimalRep(b: Uint8Array): Uint8Array;
28
- /**
29
- * Provide a view over the given Uint8Array where any trailing null bytes at
30
- * the end are truncated.
31
- *
32
- * This can be used to ignore null bytes at the end of a padded UTF-8 string
33
- * without needing to copy that string, assuming code point U+0000 is encoded
34
- * in one null byte according to standards rather than in a multi-byte
35
- * overlong form.
36
- */
37
- truncateTrailingNulls(a: Uint8Array): Uint8Array;
38
- /**
39
- *
40
- * @param buffer1 {Uint8Array}
41
- * @param buffer2{ Uint8Array}
42
- * @returns {ArrayBuffer}
43
- */
44
- appendBuffer(buffer1: ArrayBuffer, buffer2: ArrayBuffer): ArrayBuffer;
45
- after(d1: number, d2: number): boolean;
46
- before(d1: number, d2: number): boolean;
47
- moment(epochOrLongCalendar: number): Moment | null;
48
- /**
49
- * Encrypt object graph recursively
50
- *
51
- * @param obj the object to encrypt
52
- * @param cryptor the cryptor function (returns a promise)
53
- * @param keys the keys to be crypted: ex for a Patient ['note', 'addresses.*.["street", "houseNumber", "telecoms.*.telecomNumber"]']
54
- */
55
- crypt(obj: any, cryptor: (obj: {
56
- [key: string]: string;
57
- }) => Promise<ArrayBuffer>, keys: Array<string>): Promise<any>;
58
- /**
59
- * Decrypt object graph recursively
60
- *
61
- * @param obj the object to encrypt
62
- * @param decryptor the decryptor function (returns a promise)
63
- */
64
- decrypt(obj: any, decryptor: (obj: Uint8Array) => Promise<{
65
- [key: string]: string;
66
- }>): Promise<any>;
67
- }
68
- export declare const utils: UtilsClass;
@@ -1,239 +0,0 @@
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.utils = exports.UtilsClass = void 0;
13
- const moment = require("moment");
14
- const _ = require("lodash");
15
- const binary_utils_1 = require("../utils/binary-utils");
16
- const asn1_packer_1 = require("../utils/asn1-packer");
17
- const asn1_parser_1 = require("../utils/asn1-parser");
18
- class UtilsClass {
19
- constructor() { }
20
- notConcurrent(concurrencyMap, key, proc) {
21
- const inFlight = concurrencyMap[key];
22
- if (!inFlight) {
23
- return (concurrencyMap[key] = (() => __awaiter(this, void 0, void 0, function* () {
24
- try {
25
- return yield proc();
26
- }
27
- finally {
28
- delete concurrencyMap[key];
29
- }
30
- }))());
31
- }
32
- else {
33
- return concurrencyMap[key].then(() => this.notConcurrent(concurrencyMap, key, proc));
34
- }
35
- }
36
- jwk2pkcs8(jwk) {
37
- return asn1_packer_1.pack([
38
- 0x30,
39
- [
40
- [0x02, '00'],
41
- [0x30, [[0x06, '2a864886f70d010101'], [0x05]]],
42
- [
43
- 0x04,
44
- [
45
- [
46
- 0x30,
47
- [
48
- [0x02, '00'],
49
- [0x02, binary_utils_1.ua2hex(binary_utils_1.b64Url2ua(jwk.n))],
50
- [0x02, binary_utils_1.ua2hex(binary_utils_1.b64Url2ua(jwk.e))],
51
- [0x02, binary_utils_1.ua2hex(binary_utils_1.b64Url2ua(jwk.d))],
52
- [0x02, binary_utils_1.ua2hex(binary_utils_1.b64Url2ua(jwk.p))],
53
- [0x02, binary_utils_1.ua2hex(binary_utils_1.b64Url2ua(jwk.q))],
54
- [0x02, binary_utils_1.ua2hex(binary_utils_1.b64Url2ua(jwk.dp))],
55
- [0x02, binary_utils_1.ua2hex(binary_utils_1.b64Url2ua(jwk.dq))],
56
- [0x02, binary_utils_1.ua2hex(binary_utils_1.b64Url2ua(jwk.qi))],
57
- ],
58
- ],
59
- ],
60
- ],
61
- ],
62
- ]);
63
- }
64
- jwk2spki(jwk) {
65
- return asn1_packer_1.pack([
66
- 0x30,
67
- [
68
- [0x30, [[0x06, '2a864886f70d010101'], [0x05]]],
69
- [
70
- 0x03,
71
- [
72
- [
73
- 0x30,
74
- [
75
- [0x02, binary_utils_1.ua2hex(binary_utils_1.b64Url2ua(jwk.n))],
76
- [0x02, binary_utils_1.ua2hex(binary_utils_1.b64Url2ua(jwk.e))],
77
- ],
78
- ],
79
- ],
80
- ],
81
- ],
82
- ]);
83
- }
84
- spkiToJwk(buf) {
85
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6;
86
- const asn1 = asn1_parser_1.parseAsn1(new Uint8Array(buf));
87
- var modulus = undefined;
88
- var exponent = undefined;
89
- if (asn1.type === 0x30 &&
90
- ((_b = (_a = asn1.children) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.type) === 0x30 &&
91
- ((_f = (_e = (_d = (_c = asn1.children) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.children) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.type) === 0x06 &&
92
- binary_utils_1.ua2hex((_l = (_k = (_j = (_h = (_g = asn1.children) === null || _g === void 0 ? void 0 : _g[0]) === null || _h === void 0 ? void 0 : _h.children) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.value) !== null && _l !== void 0 ? _l : new Uint8Array()) === '2a864886f70d010101') {
93
- modulus = (_s = (_r = (_q = (_p = (_o = (_m = asn1.children) === null || _m === void 0 ? void 0 : _m[1]) === null || _o === void 0 ? void 0 : _o.children) === null || _p === void 0 ? void 0 : _p[0]) === null || _q === void 0 ? void 0 : _q.children) === null || _r === void 0 ? void 0 : _r[0]) === null || _s === void 0 ? void 0 : _s.value;
94
- exponent = (_y = (_x = (_w = (_v = (_u = (_t = asn1.children) === null || _t === void 0 ? void 0 : _t[1]) === null || _u === void 0 ? void 0 : _u.children) === null || _v === void 0 ? void 0 : _v[0]) === null || _w === void 0 ? void 0 : _w.children) === null || _x === void 0 ? void 0 : _x[1]) === null || _y === void 0 ? void 0 : _y.value;
95
- }
96
- else if (asn1.type === 0x30 && ((_0 = (_z = asn1.children) === null || _z === void 0 ? void 0 : _z[0]) === null || _0 === void 0 ? void 0 : _0.type) === 0x02 && ((_2 = (_1 = asn1.children) === null || _1 === void 0 ? void 0 : _1[1]) === null || _2 === void 0 ? void 0 : _2.type) === 0x02) {
97
- modulus = (_4 = (_3 = asn1.children) === null || _3 === void 0 ? void 0 : _3[0]) === null || _4 === void 0 ? void 0 : _4.value;
98
- exponent = (_6 = (_5 = asn1.children) === null || _5 === void 0 ? void 0 : _5[1]) === null || _6 === void 0 ? void 0 : _6.value;
99
- }
100
- if (!modulus || !exponent) {
101
- throw new Error('Invalid spki format');
102
- }
103
- return {
104
- kty: 'RSA',
105
- alg: 'RSA-OAEP',
106
- ext: true,
107
- n: binary_utils_1.ua2b64Url(this.minimalRep(modulus)),
108
- e: binary_utils_1.ua2b64Url(this.minimalRep(exponent)),
109
- };
110
- }
111
- pkcs8ToJwk(buf) {
112
- var _a, _b;
113
- const parsed = asn1_parser_1.parseAsn1(new Uint8Array(buf));
114
- const seq = ((_a = parsed.children) === null || _a === void 0 ? void 0 : _a.length) === 3 && parsed.children[2].type === 0x04 && ((_b = parsed.children[2].children) === null || _b === void 0 ? void 0 : _b.length) === 1
115
- ? parsed.children[2].children[0]
116
- : parsed;
117
- return {
118
- kty: 'RSA',
119
- n: binary_utils_1.ua2b64Url(this.minimalRep(seq.children[1].value)),
120
- e: binary_utils_1.ua2b64Url(this.minimalRep(seq.children[2].value)),
121
- d: binary_utils_1.ua2b64Url(this.minimalRep(seq.children[3].value)),
122
- p: binary_utils_1.ua2b64Url(this.minimalRep(seq.children[4].value)),
123
- q: binary_utils_1.ua2b64Url(this.minimalRep(seq.children[5].value)),
124
- dp: binary_utils_1.ua2b64Url(this.minimalRep(seq.children[6].value)),
125
- dq: binary_utils_1.ua2b64Url(this.minimalRep(seq.children[7].value)),
126
- qi: binary_utils_1.ua2b64Url(this.minimalRep(seq.children[8].value)),
127
- };
128
- }
129
- minimalRep(b) {
130
- let i = 0;
131
- while (b[i] === 0) {
132
- i++;
133
- }
134
- return b.slice(i);
135
- }
136
- /**
137
- * Provide a view over the given Uint8Array where any trailing null bytes at
138
- * the end are truncated.
139
- *
140
- * This can be used to ignore null bytes at the end of a padded UTF-8 string
141
- * without needing to copy that string, assuming code point U+0000 is encoded
142
- * in one null byte according to standards rather than in a multi-byte
143
- * overlong form.
144
- */
145
- truncateTrailingNulls(a) {
146
- let end = a.byteLength - 1;
147
- while (a[end] === 0 && end >= 0) {
148
- end--;
149
- }
150
- // end is now either the last non-null position in a or -1; in the latter
151
- // case the returned array will have length 0.
152
- return a.subarray(0, end + 1);
153
- }
154
- /**
155
- *
156
- * @param buffer1 {Uint8Array}
157
- * @param buffer2{ Uint8Array}
158
- * @returns {ArrayBuffer}
159
- */
160
- appendBuffer(buffer1, buffer2) {
161
- const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
162
- tmp.set(new Uint8Array(buffer1), 0);
163
- tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
164
- return tmp.buffer;
165
- }
166
- //Convenience methods for dates management
167
- after(d1, d2) {
168
- return d1 === null || d2 === null || d1 === undefined || d2 === undefined || this.moment(d1).isAfter(this.moment(d2));
169
- }
170
- before(d1, d2) {
171
- return d1 === null || d2 === null || d1 === undefined || d2 === undefined || this.moment(d1).isBefore(this.moment(d2));
172
- }
173
- moment(epochOrLongCalendar) {
174
- if (!epochOrLongCalendar && epochOrLongCalendar !== 0) {
175
- return null;
176
- }
177
- if (epochOrLongCalendar >= 18000101 && epochOrLongCalendar < 25400000) {
178
- return moment('' + epochOrLongCalendar, 'YYYYMMDD');
179
- }
180
- else if (epochOrLongCalendar >= 18000101000000) {
181
- return moment('' + epochOrLongCalendar, 'YYYYMMDDHHmmss');
182
- }
183
- else {
184
- return moment(epochOrLongCalendar);
185
- }
186
- }
187
- /**
188
- * Encrypt object graph recursively
189
- *
190
- * @param obj the object to encrypt
191
- * @param cryptor the cryptor function (returns a promise)
192
- * @param keys the keys to be crypted: ex for a Patient ['note', 'addresses.*.["street", "houseNumber", "telecoms.*.telecomNumber"]']
193
- */
194
- crypt(obj, cryptor, keys) {
195
- return __awaiter(this, void 0, void 0, function* () {
196
- const subObj = _.pick(obj, keys.filter((k) => !k.includes('*')));
197
- obj.encryptedSelf = binary_utils_1.b2a(binary_utils_1.ua2string(yield cryptor(subObj)));
198
- Object.keys(subObj).forEach((k) => delete obj[k]);
199
- yield keys
200
- .filter((k) => k.includes('*'))
201
- .reduce((prev, k) => __awaiter(this, void 0, void 0, function* () {
202
- yield prev;
203
- const k1 = k.split('.*.')[0];
204
- const k2 = k.substr(k1.length + 3);
205
- const mapped = yield Promise.all((_.get(obj, k1) || []).map((so) => this.crypt(so, cryptor, k2.startsWith('[') ? JSON.parse(k2) : [k2])));
206
- _.set(obj, k1, mapped);
207
- }), Promise.resolve());
208
- return obj;
209
- });
210
- }
211
- /**
212
- * Decrypt object graph recursively
213
- *
214
- * @param obj the object to encrypt
215
- * @param decryptor the decryptor function (returns a promise)
216
- */
217
- decrypt(obj, decryptor) {
218
- return __awaiter(this, void 0, void 0, function* () {
219
- yield Object.keys(obj).reduce((prev, k) => __awaiter(this, void 0, void 0, function* () {
220
- yield prev;
221
- if (Array.isArray(obj[k])) {
222
- yield obj[k]
223
- .filter((o) => typeof o === 'object' && o !== null)
224
- .reduce((prev, so) => __awaiter(this, void 0, void 0, function* () {
225
- yield prev;
226
- yield this.decrypt(so, decryptor);
227
- }), Promise.resolve());
228
- }
229
- }), Promise.resolve());
230
- if (obj.encryptedSelf) {
231
- Object.assign(obj, yield decryptor(binary_utils_1.string2ua(binary_utils_1.a2b(obj.encryptedSelf))));
232
- }
233
- return obj;
234
- });
235
- }
236
- }
237
- exports.UtilsClass = UtilsClass;
238
- exports.utils = new UtilsClass();
239
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../icc-x-api/crypto/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import * as moment from 'moment'\nimport { Moment } from 'moment'\nimport * as _ from 'lodash'\nimport { a2b, b2a, b64Url2ua, string2ua, ua2b64Url, ua2hex, ua2string } from '../utils/binary-utils'\nimport { pack } from '../utils/asn1-packer'\nimport { parseAsn1 } from '../utils/asn1-parser'\n\nexport class UtilsClass {\n constructor() {}\n\n notConcurrent<T>(concurrencyMap: { [key: string]: PromiseLike<T> }, key: string, proc: () => PromiseLike<T>): PromiseLike<T> {\n const inFlight = concurrencyMap[key]\n if (!inFlight) {\n return (concurrencyMap[key] = (async () => {\n try {\n return await proc()\n } finally {\n delete concurrencyMap[key]\n }\n })())\n } else {\n return concurrencyMap[key].then(() => this.notConcurrent(concurrencyMap, key, proc))\n }\n }\n\n jwk2pkcs8(jwk: any): string {\n return pack([\n 0x30,\n [\n [0x02, '00'],\n [0x30, [[0x06, '2a864886f70d010101'], [0x05]]],\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\n jwk2spki(jwk: any): string {\n return pack([\n 0x30,\n [\n [0x30, [[0x06, '2a864886f70d010101'], [0x05]]],\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\n spkiToJwk(buf: Uint8Array): { 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()) === '2a864886f70d010101'\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: 'RSA-OAEP',\n ext: true,\n n: ua2b64Url(this.minimalRep(modulus)),\n e: ua2b64Url(this.minimalRep(exponent)),\n }\n }\n\n 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(this.minimalRep(seq.children![1].value as Uint8Array)),\n e: ua2b64Url(this.minimalRep(seq.children![2].value as Uint8Array)),\n d: ua2b64Url(this.minimalRep(seq.children![3].value as Uint8Array)),\n p: ua2b64Url(this.minimalRep(seq.children![4].value as Uint8Array)),\n q: ua2b64Url(this.minimalRep(seq.children![5].value as Uint8Array)),\n dp: ua2b64Url(this.minimalRep(seq.children![6].value as Uint8Array)),\n dq: ua2b64Url(this.minimalRep(seq.children![7].value as Uint8Array)),\n qi: ua2b64Url(this.minimalRep(seq.children![8].value as Uint8Array)),\n }\n }\n\n 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 */\n 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 */\n 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\n after(d1: number, d2: number): boolean {\n return d1 === null || d2 === null || d1 === undefined || d2 === undefined || this.moment(d1)!.isAfter(this.moment(d2)!)\n }\n\n before(d1: number, d2: number): boolean {\n return d1 === null || d2 === null || d1 === undefined || d2 === undefined || this.moment(d1)!.isBefore(this.moment(d2)!)\n }\n\n moment(epochOrLongCalendar: number): Moment | null {\n if (!epochOrLongCalendar && epochOrLongCalendar !== 0) {\n return null\n }\n if (epochOrLongCalendar >= 18000101 && epochOrLongCalendar < 25400000) {\n return moment('' + epochOrLongCalendar, 'YYYYMMDD')\n } else if (epochOrLongCalendar >= 18000101000000) {\n return moment('' + epochOrLongCalendar, 'YYYYMMDDHHmmss')\n } else {\n return moment(epochOrLongCalendar)\n }\n }\n\n /**\n * Encrypt object graph recursively\n *\n * @param obj the object to encrypt\n * @param cryptor the cryptor function (returns a promise)\n * @param keys the keys to be crypted: ex for a Patient ['note', 'addresses.*.[\"street\", \"houseNumber\", \"telecoms.*.telecomNumber\"]']\n */\n async crypt(obj: any, cryptor: (obj: { [key: string]: string }) => Promise<ArrayBuffer>, keys: Array<string>) {\n const subObj = _.pick(\n obj,\n keys.filter((k) => !k.includes('*'))\n )\n obj.encryptedSelf = b2a(ua2string(await cryptor(subObj)))\n Object.keys(subObj).forEach((k) => delete obj[k])\n\n await keys\n .filter((k) => k.includes('*'))\n .reduce(async (prev: Promise<void>, k: any) => {\n await prev\n const k1 = k.split('.*.')[0]\n const k2 = k.substr(k1.length + 3)\n\n const mapped = await Promise.all((_.get(obj, k1) || []).map((so: any) => this.crypt(so, cryptor, k2.startsWith('[') ? JSON.parse(k2) : [k2])))\n _.set(obj, k1, mapped)\n }, Promise.resolve())\n\n return obj\n }\n\n /**\n * Decrypt object graph recursively\n *\n * @param obj the object to encrypt\n * @param decryptor the decryptor function (returns a promise)\n */\n async decrypt(obj: any, decryptor: (obj: Uint8Array) => Promise<{ [key: string]: string }>) {\n await Object.keys(obj).reduce(async (prev: Promise<void>, k: any) => {\n await prev\n if (Array.isArray(obj[k])) {\n await (obj[k] as Array<any>)\n .filter((o) => typeof o === 'object' && o !== null)\n .reduce(async (prev: Promise<void>, so: any) => {\n await prev\n await this.decrypt(so, decryptor)\n }, Promise.resolve())\n }\n }, Promise.resolve())\n if (obj.encryptedSelf) {\n Object.assign(obj, await decryptor(string2ua(a2b(obj.encryptedSelf))))\n }\n return obj\n }\n}\n\nexport const utils = new UtilsClass()\n"]}