@uncefact/untp-utils 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/README.md +52 -2
  2. package/artefacts/context/untp/0.6.0/dcc.json +1241 -0
  3. package/artefacts/context/untp/0.6.0/dfr.json +619 -0
  4. package/artefacts/context/untp/0.6.0/dia.json +162 -0
  5. package/artefacts/context/untp/0.6.0/dpp.json +1078 -0
  6. package/artefacts/context/untp/0.6.0/dte.json +1285 -0
  7. package/artefacts/context/untp/0.6.1/dcc.json +1388 -0
  8. package/artefacts/context/untp/0.6.1/dfr.json +690 -0
  9. package/artefacts/context/untp/0.6.1/dia.json +196 -0
  10. package/artefacts/context/untp/0.6.1/dpp.json +1164 -0
  11. package/artefacts/context/untp/0.6.1/dte.json +1340 -0
  12. package/artefacts/context/untp/0.7.0/untp.json +3493 -0
  13. package/artefacts/context/vcdm/2/credentials.json +301 -0
  14. package/artefacts/manifest.json +214 -0
  15. package/artefacts/schema/untp/0.6.0/dcc.json +1131 -0
  16. package/artefacts/schema/untp/0.6.0/dfr.json +1028 -0
  17. package/artefacts/schema/untp/0.6.0/dia.json +236 -0
  18. package/artefacts/schema/untp/0.6.0/dpp.json +1219 -0
  19. package/artefacts/schema/untp/0.6.0/dte.json +845 -0
  20. package/artefacts/schema/untp/0.6.1/dcc.json +1196 -0
  21. package/artefacts/schema/untp/0.6.1/dfr.json +1037 -0
  22. package/artefacts/schema/untp/0.6.1/dia.json +236 -0
  23. package/artefacts/schema/untp/0.6.1/dpp.json +1229 -0
  24. package/artefacts/schema/untp/0.6.1/dte.json +845 -0
  25. package/artefacts/schema/untp/0.7.0/cvc.json +701 -0
  26. package/artefacts/schema/untp/0.7.0/dcc.json +1133 -0
  27. package/artefacts/schema/untp/0.7.0/dfr.json +1245 -0
  28. package/artefacts/schema/untp/0.7.0/dia.json +443 -0
  29. package/artefacts/schema/untp/0.7.0/dpp.json +1300 -0
  30. package/artefacts/schema/untp/0.7.0/dte.json +1226 -0
  31. package/artefacts/schema/untp/0.7.0/linkset.json +119 -0
  32. package/artefacts/schema/vcdm/2/verifiable-credential.json +318 -0
  33. package/build/artefacts/detect-version-from-context.d.ts +46 -0
  34. package/build/artefacts/detect-version-from-context.js +77 -0
  35. package/build/artefacts/detect-version-from-context.js.map +1 -0
  36. package/build/artefacts/detect-version-from-context.test.d.ts +1 -0
  37. package/build/artefacts/detect-version-from-context.test.js +69 -0
  38. package/build/artefacts/detect-version-from-context.test.js.map +1 -0
  39. package/build/artefacts/index.d.ts +3 -0
  40. package/build/artefacts/index.js +4 -0
  41. package/build/artefacts/index.js.map +1 -0
  42. package/build/artefacts/urls.d.ts +85 -0
  43. package/build/artefacts/urls.js +141 -0
  44. package/build/artefacts/urls.js.map +1 -0
  45. package/build/artefacts/urls.test.d.ts +1 -0
  46. package/build/artefacts/urls.test.js +99 -0
  47. package/build/artefacts/urls.test.js.map +1 -0
  48. package/build/artefacts/version.d.ts +9 -0
  49. package/build/artefacts/version.js +17 -0
  50. package/build/artefacts/version.js.map +1 -0
  51. package/build/artefacts/version.test.d.ts +1 -0
  52. package/build/artefacts/version.test.js +16 -0
  53. package/build/artefacts/version.test.js.map +1 -0
  54. package/build/bundle/artefacts/context/untp/0.6.0/dcc.d.ts +2 -0
  55. package/build/bundle/artefacts/context/untp/0.6.0/dcc.js +1244 -0
  56. package/build/bundle/artefacts/context/untp/0.6.0/dcc.js.map +1 -0
  57. package/build/bundle/artefacts/context/untp/0.6.0/dfr.d.ts +2 -0
  58. package/build/bundle/artefacts/context/untp/0.6.0/dfr.js +622 -0
  59. package/build/bundle/artefacts/context/untp/0.6.0/dfr.js.map +1 -0
  60. package/build/bundle/artefacts/context/untp/0.6.0/dia.d.ts +2 -0
  61. package/build/bundle/artefacts/context/untp/0.6.0/dia.js +165 -0
  62. package/build/bundle/artefacts/context/untp/0.6.0/dia.js.map +1 -0
  63. package/build/bundle/artefacts/context/untp/0.6.0/dpp.d.ts +2 -0
  64. package/build/bundle/artefacts/context/untp/0.6.0/dpp.js +1081 -0
  65. package/build/bundle/artefacts/context/untp/0.6.0/dpp.js.map +1 -0
  66. package/build/bundle/artefacts/context/untp/0.6.0/dte.d.ts +2 -0
  67. package/build/bundle/artefacts/context/untp/0.6.0/dte.js +1288 -0
  68. package/build/bundle/artefacts/context/untp/0.6.0/dte.js.map +1 -0
  69. package/build/bundle/artefacts/context/untp/0.6.1/dcc.d.ts +2 -0
  70. package/build/bundle/artefacts/context/untp/0.6.1/dcc.js +1391 -0
  71. package/build/bundle/artefacts/context/untp/0.6.1/dcc.js.map +1 -0
  72. package/build/bundle/artefacts/context/untp/0.6.1/dfr.d.ts +2 -0
  73. package/build/bundle/artefacts/context/untp/0.6.1/dfr.js +693 -0
  74. package/build/bundle/artefacts/context/untp/0.6.1/dfr.js.map +1 -0
  75. package/build/bundle/artefacts/context/untp/0.6.1/dia.d.ts +2 -0
  76. package/build/bundle/artefacts/context/untp/0.6.1/dia.js +199 -0
  77. package/build/bundle/artefacts/context/untp/0.6.1/dia.js.map +1 -0
  78. package/build/bundle/artefacts/context/untp/0.6.1/dpp.d.ts +2 -0
  79. package/build/bundle/artefacts/context/untp/0.6.1/dpp.js +1167 -0
  80. package/build/bundle/artefacts/context/untp/0.6.1/dpp.js.map +1 -0
  81. package/build/bundle/artefacts/context/untp/0.6.1/dte.d.ts +2 -0
  82. package/build/bundle/artefacts/context/untp/0.6.1/dte.js +1343 -0
  83. package/build/bundle/artefacts/context/untp/0.6.1/dte.js.map +1 -0
  84. package/build/bundle/artefacts/context/untp/0.7.0/untp.d.ts +2 -0
  85. package/build/bundle/artefacts/context/untp/0.7.0/untp.js +3496 -0
  86. package/build/bundle/artefacts/context/untp/0.7.0/untp.js.map +1 -0
  87. package/build/bundle/artefacts/context/vcdm/2/credentials.d.ts +2 -0
  88. package/build/bundle/artefacts/context/vcdm/2/credentials.js +304 -0
  89. package/build/bundle/artefacts/context/vcdm/2/credentials.js.map +1 -0
  90. package/build/bundle/artefacts/schema/untp/0.6.0/dcc.d.ts +2 -0
  91. package/build/bundle/artefacts/schema/untp/0.6.0/dcc.js +1134 -0
  92. package/build/bundle/artefacts/schema/untp/0.6.0/dcc.js.map +1 -0
  93. package/build/bundle/artefacts/schema/untp/0.6.0/dfr.d.ts +2 -0
  94. package/build/bundle/artefacts/schema/untp/0.6.0/dfr.js +1031 -0
  95. package/build/bundle/artefacts/schema/untp/0.6.0/dfr.js.map +1 -0
  96. package/build/bundle/artefacts/schema/untp/0.6.0/dia.d.ts +2 -0
  97. package/build/bundle/artefacts/schema/untp/0.6.0/dia.js +239 -0
  98. package/build/bundle/artefacts/schema/untp/0.6.0/dia.js.map +1 -0
  99. package/build/bundle/artefacts/schema/untp/0.6.0/dpp.d.ts +2 -0
  100. package/build/bundle/artefacts/schema/untp/0.6.0/dpp.js +1222 -0
  101. package/build/bundle/artefacts/schema/untp/0.6.0/dpp.js.map +1 -0
  102. package/build/bundle/artefacts/schema/untp/0.6.0/dte.d.ts +2 -0
  103. package/build/bundle/artefacts/schema/untp/0.6.0/dte.js +848 -0
  104. package/build/bundle/artefacts/schema/untp/0.6.0/dte.js.map +1 -0
  105. package/build/bundle/artefacts/schema/untp/0.6.1/dcc.d.ts +2 -0
  106. package/build/bundle/artefacts/schema/untp/0.6.1/dcc.js +1199 -0
  107. package/build/bundle/artefacts/schema/untp/0.6.1/dcc.js.map +1 -0
  108. package/build/bundle/artefacts/schema/untp/0.6.1/dfr.d.ts +2 -0
  109. package/build/bundle/artefacts/schema/untp/0.6.1/dfr.js +1040 -0
  110. package/build/bundle/artefacts/schema/untp/0.6.1/dfr.js.map +1 -0
  111. package/build/bundle/artefacts/schema/untp/0.6.1/dia.d.ts +2 -0
  112. package/build/bundle/artefacts/schema/untp/0.6.1/dia.js +239 -0
  113. package/build/bundle/artefacts/schema/untp/0.6.1/dia.js.map +1 -0
  114. package/build/bundle/artefacts/schema/untp/0.6.1/dpp.d.ts +2 -0
  115. package/build/bundle/artefacts/schema/untp/0.6.1/dpp.js +1232 -0
  116. package/build/bundle/artefacts/schema/untp/0.6.1/dpp.js.map +1 -0
  117. package/build/bundle/artefacts/schema/untp/0.6.1/dte.d.ts +2 -0
  118. package/build/bundle/artefacts/schema/untp/0.6.1/dte.js +848 -0
  119. package/build/bundle/artefacts/schema/untp/0.6.1/dte.js.map +1 -0
  120. package/build/bundle/artefacts/schema/untp/0.7.0/cvc.d.ts +2 -0
  121. package/build/bundle/artefacts/schema/untp/0.7.0/cvc.js +704 -0
  122. package/build/bundle/artefacts/schema/untp/0.7.0/cvc.js.map +1 -0
  123. package/build/bundle/artefacts/schema/untp/0.7.0/dcc.d.ts +2 -0
  124. package/build/bundle/artefacts/schema/untp/0.7.0/dcc.js +1136 -0
  125. package/build/bundle/artefacts/schema/untp/0.7.0/dcc.js.map +1 -0
  126. package/build/bundle/artefacts/schema/untp/0.7.0/dfr.d.ts +2 -0
  127. package/build/bundle/artefacts/schema/untp/0.7.0/dfr.js +1248 -0
  128. package/build/bundle/artefacts/schema/untp/0.7.0/dfr.js.map +1 -0
  129. package/build/bundle/artefacts/schema/untp/0.7.0/dia.d.ts +2 -0
  130. package/build/bundle/artefacts/schema/untp/0.7.0/dia.js +446 -0
  131. package/build/bundle/artefacts/schema/untp/0.7.0/dia.js.map +1 -0
  132. package/build/bundle/artefacts/schema/untp/0.7.0/dpp.d.ts +2 -0
  133. package/build/bundle/artefacts/schema/untp/0.7.0/dpp.js +1303 -0
  134. package/build/bundle/artefacts/schema/untp/0.7.0/dpp.js.map +1 -0
  135. package/build/bundle/artefacts/schema/untp/0.7.0/dte.d.ts +2 -0
  136. package/build/bundle/artefacts/schema/untp/0.7.0/dte.js +1229 -0
  137. package/build/bundle/artefacts/schema/untp/0.7.0/dte.js.map +1 -0
  138. package/build/bundle/artefacts/schema/untp/0.7.0/linkset.d.ts +2 -0
  139. package/build/bundle/artefacts/schema/untp/0.7.0/linkset.js +122 -0
  140. package/build/bundle/artefacts/schema/untp/0.7.0/linkset.js.map +1 -0
  141. package/build/bundle/artefacts/schema/vcdm/2/verifiable-credential.d.ts +2 -0
  142. package/build/bundle/artefacts/schema/vcdm/2/verifiable-credential.js +321 -0
  143. package/build/bundle/artefacts/schema/vcdm/2/verifiable-credential.js.map +1 -0
  144. package/build/bundle/fallback.d.ts +41 -0
  145. package/build/bundle/fallback.js +62 -0
  146. package/build/bundle/fallback.js.map +1 -0
  147. package/build/bundle/fallback.test.d.ts +1 -0
  148. package/build/bundle/fallback.test.js +124 -0
  149. package/build/bundle/fallback.test.js.map +1 -0
  150. package/build/bundle/index.d.ts +4 -0
  151. package/build/bundle/index.js +77 -0
  152. package/build/bundle/index.js.map +1 -0
  153. package/build/bundle/lookup.d.ts +14 -0
  154. package/build/bundle/lookup.js +40 -0
  155. package/build/bundle/lookup.js.map +1 -0
  156. package/build/bundle/lookup.test.d.ts +1 -0
  157. package/build/bundle/lookup.test.js +70 -0
  158. package/build/bundle/lookup.test.js.map +1 -0
  159. package/build/bundle/public.d.ts +25 -0
  160. package/build/bundle/public.js +56 -0
  161. package/build/bundle/public.js.map +1 -0
  162. package/build/bundle/public.test.d.ts +1 -0
  163. package/build/bundle/public.test.js +35 -0
  164. package/build/bundle/public.test.js.map +1 -0
  165. package/build/bundle/refresh-classify.test.d.ts +1 -0
  166. package/build/bundle/refresh-classify.test.js +20 -0
  167. package/build/bundle/refresh-classify.test.js.map +1 -0
  168. package/build/bundle/refresh-main.test.d.ts +1 -0
  169. package/build/bundle/refresh-main.test.js +98 -0
  170. package/build/bundle/refresh-main.test.js.map +1 -0
  171. package/build/cache/in-memory-ttl-cache.d.ts +2 -0
  172. package/build/cache/in-memory-ttl-cache.js +76 -0
  173. package/build/cache/in-memory-ttl-cache.js.map +1 -0
  174. package/build/cache/in-memory-ttl-cache.test.d.ts +1 -0
  175. package/build/cache/in-memory-ttl-cache.test.js +236 -0
  176. package/build/cache/in-memory-ttl-cache.test.js.map +1 -0
  177. package/build/cache/index.d.ts +2 -0
  178. package/build/cache/index.js +2 -0
  179. package/build/cache/index.js.map +1 -0
  180. package/build/cache/ttl-cache.d.ts +22 -0
  181. package/build/cache/ttl-cache.js +2 -0
  182. package/build/cache/ttl-cache.js.map +1 -0
  183. package/build/common/as-date-time.d.ts +13 -0
  184. package/build/common/as-date-time.js +44 -0
  185. package/build/common/as-date-time.js.map +1 -0
  186. package/build/common/as-date-time.test.d.ts +1 -0
  187. package/build/common/as-date-time.test.js +42 -0
  188. package/build/common/as-date-time.test.js.map +1 -0
  189. package/build/common/as-non-empty-string.d.ts +14 -0
  190. package/build/common/as-non-empty-string.js +20 -0
  191. package/build/common/as-non-empty-string.js.map +1 -0
  192. package/build/common/as-non-empty-string.test.d.ts +1 -0
  193. package/build/common/as-non-empty-string.test.js +30 -0
  194. package/build/common/as-non-empty-string.test.js.map +1 -0
  195. package/build/common/index.d.ts +4 -0
  196. package/build/common/index.js +5 -0
  197. package/build/common/index.js.map +1 -0
  198. package/build/common/require-string.d.ts +12 -0
  199. package/build/common/require-string.js +27 -0
  200. package/build/common/require-string.js.map +1 -0
  201. package/build/common/require-string.test.d.ts +1 -0
  202. package/build/common/require-string.test.js +53 -0
  203. package/build/common/require-string.test.js.map +1 -0
  204. package/build/common/validity-window.d.ts +45 -0
  205. package/build/common/validity-window.js +68 -0
  206. package/build/common/validity-window.js.map +1 -0
  207. package/build/common/validity-window.test.d.ts +1 -0
  208. package/build/common/validity-window.test.js +67 -0
  209. package/build/common/validity-window.test.js.map +1 -0
  210. package/build/conformity-vocabulary/codes.d.ts +10 -0
  211. package/build/conformity-vocabulary/codes.js +10 -0
  212. package/build/conformity-vocabulary/codes.js.map +1 -0
  213. package/build/conformity-vocabulary/errors.d.ts +44 -0
  214. package/build/conformity-vocabulary/errors.js +68 -0
  215. package/build/conformity-vocabulary/errors.js.map +1 -0
  216. package/build/conformity-vocabulary/index.d.ts +6 -0
  217. package/build/conformity-vocabulary/index.js +7 -0
  218. package/build/conformity-vocabulary/index.js.map +1 -0
  219. package/build/conformity-vocabulary/parse-conformity-catalogue.d.ts +26 -0
  220. package/build/conformity-vocabulary/parse-conformity-catalogue.js +106 -0
  221. package/build/conformity-vocabulary/parse-conformity-catalogue.js.map +1 -0
  222. package/build/conformity-vocabulary/parse-conformity-catalogue.test.d.ts +1 -0
  223. package/build/conformity-vocabulary/parse-conformity-catalogue.test.js +327 -0
  224. package/build/conformity-vocabulary/parse-conformity-catalogue.test.js.map +1 -0
  225. package/build/conformity-vocabulary/parse-conformity-scheme.d.ts +28 -0
  226. package/build/conformity-vocabulary/parse-conformity-scheme.js +47 -0
  227. package/build/conformity-vocabulary/parse-conformity-scheme.js.map +1 -0
  228. package/build/conformity-vocabulary/parse-conformity-scheme.test.d.ts +1 -0
  229. package/build/conformity-vocabulary/parse-conformity-scheme.test.js +284 -0
  230. package/build/conformity-vocabulary/parse-conformity-scheme.test.js.map +1 -0
  231. package/build/conformity-vocabulary/parsers/v0-7-0.parser.d.ts +19 -0
  232. package/build/conformity-vocabulary/parsers/v0-7-0.parser.js +219 -0
  233. package/build/conformity-vocabulary/parsers/v0-7-0.parser.js.map +1 -0
  234. package/build/conformity-vocabulary/types.d.ts +180 -0
  235. package/build/conformity-vocabulary/types.js +2 -0
  236. package/build/conformity-vocabulary/types.js.map +1 -0
  237. package/build/conformity-vocabulary/validate-conformity-claim.d.ts +26 -0
  238. package/build/conformity-vocabulary/validate-conformity-claim.js +165 -0
  239. package/build/conformity-vocabulary/validate-conformity-claim.js.map +1 -0
  240. package/build/conformity-vocabulary/validate-conformity-claim.test.d.ts +1 -0
  241. package/build/conformity-vocabulary/validate-conformity-claim.test.js +478 -0
  242. package/build/conformity-vocabulary/validate-conformity-claim.test.js.map +1 -0
  243. package/build/http-headers/index.d.ts +5 -0
  244. package/build/http-headers/index.js +6 -0
  245. package/build/http-headers/index.js.map +1 -0
  246. package/build/http-headers/is-safe-header-value.d.ts +10 -0
  247. package/build/http-headers/is-safe-header-value.js +15 -0
  248. package/build/http-headers/is-safe-header-value.js.map +1 -0
  249. package/build/http-headers/is-safe-header-value.test.d.ts +1 -0
  250. package/build/http-headers/is-safe-header-value.test.js +37 -0
  251. package/build/http-headers/is-safe-header-value.test.js.map +1 -0
  252. package/build/http-headers/parse-entity-tag.d.ts +9 -0
  253. package/build/http-headers/parse-entity-tag.js +18 -0
  254. package/build/http-headers/parse-entity-tag.js.map +1 -0
  255. package/build/http-headers/parse-entity-tag.test.d.ts +1 -0
  256. package/build/http-headers/parse-entity-tag.test.js +41 -0
  257. package/build/http-headers/parse-entity-tag.test.js.map +1 -0
  258. package/build/http-headers/parse-imf-date.d.ts +13 -0
  259. package/build/http-headers/parse-imf-date.js +23 -0
  260. package/build/http-headers/parse-imf-date.js.map +1 -0
  261. package/build/http-headers/parse-imf-date.test.d.ts +1 -0
  262. package/build/http-headers/parse-imf-date.test.js +31 -0
  263. package/build/http-headers/parse-imf-date.test.js.map +1 -0
  264. package/build/http-headers/parse-media-type.d.ts +8 -0
  265. package/build/http-headers/parse-media-type.js +21 -0
  266. package/build/http-headers/parse-media-type.js.map +1 -0
  267. package/build/http-headers/parse-media-type.test.d.ts +1 -0
  268. package/build/http-headers/parse-media-type.test.js +39 -0
  269. package/build/http-headers/parse-media-type.test.js.map +1 -0
  270. package/build/http-headers/user-agent.d.ts +35 -0
  271. package/build/http-headers/user-agent.js +45 -0
  272. package/build/http-headers/user-agent.js.map +1 -0
  273. package/build/http-headers/user-agent.test.d.ts +1 -0
  274. package/build/http-headers/user-agent.test.js +27 -0
  275. package/build/http-headers/user-agent.test.js.map +1 -0
  276. package/build/index.d.ts +1 -1
  277. package/build/index.js +1 -1
  278. package/build/index.js.map +1 -1
  279. package/build/loaders/errors.d.ts +21 -0
  280. package/build/loaders/errors.js +45 -0
  281. package/build/loaders/errors.js.map +1 -0
  282. package/build/loaders/index.d.ts +5 -0
  283. package/build/loaders/index.js +5 -0
  284. package/build/loaders/index.js.map +1 -0
  285. package/build/loaders/jsonld-document-loader.d.ts +48 -0
  286. package/build/loaders/jsonld-document-loader.js +43 -0
  287. package/build/loaders/jsonld-document-loader.js.map +1 -0
  288. package/build/loaders/jsonld-document-loader.test.d.ts +1 -0
  289. package/build/loaders/jsonld-document-loader.test.js +111 -0
  290. package/build/loaders/jsonld-document-loader.test.js.map +1 -0
  291. package/build/loaders/schema-loader.d.ts +31 -0
  292. package/build/loaders/schema-loader.js +83 -0
  293. package/build/loaders/schema-loader.js.map +1 -0
  294. package/build/loaders/schema-loader.ssrf.test.d.ts +1 -0
  295. package/build/loaders/schema-loader.ssrf.test.js +55 -0
  296. package/build/loaders/schema-loader.ssrf.test.js.map +1 -0
  297. package/build/loaders/schema-loader.test.d.ts +1 -0
  298. package/build/loaders/schema-loader.test.js +217 -0
  299. package/build/loaders/schema-loader.test.js.map +1 -0
  300. package/build/multibase-digest/multibase-digest.d.ts +23 -0
  301. package/build/multibase-digest/multibase-digest.js +40 -0
  302. package/build/multibase-digest/multibase-digest.js.map +1 -1
  303. package/build/multibase-digest/multibase-digest.test.js +46 -0
  304. package/build/multibase-digest/multibase-digest.test.js.map +1 -1
  305. package/build/node/errors.d.ts +47 -0
  306. package/build/node/errors.js +86 -0
  307. package/build/node/errors.js.map +1 -0
  308. package/build/node/index.d.ts +3 -0
  309. package/build/node/index.js +4 -0
  310. package/build/node/index.js.map +1 -0
  311. package/build/node/is-private-ip.d.ts +45 -0
  312. package/build/node/is-private-ip.fail-closed.test.d.ts +1 -0
  313. package/build/node/is-private-ip.fail-closed.test.js +36 -0
  314. package/build/node/is-private-ip.fail-closed.test.js.map +1 -0
  315. package/build/node/is-private-ip.js +203 -0
  316. package/build/node/is-private-ip.js.map +1 -0
  317. package/build/node/is-private-ip.test.d.ts +1 -0
  318. package/build/node/is-private-ip.test.js +124 -0
  319. package/build/node/is-private-ip.test.js.map +1 -0
  320. package/build/node/validate-public-url.d.ts +81 -0
  321. package/build/node/validate-public-url.js +128 -0
  322. package/build/node/validate-public-url.js.map +1 -0
  323. package/build/node/validate-public-url.test.d.ts +1 -0
  324. package/build/node/validate-public-url.test.js +324 -0
  325. package/build/node/validate-public-url.test.js.map +1 -0
  326. package/build/resolvers/errors.d.ts +73 -0
  327. package/build/resolvers/errors.js +133 -0
  328. package/build/resolvers/errors.js.map +1 -0
  329. package/build/resolvers/index.d.ts +5 -0
  330. package/build/resolvers/index.js +6 -0
  331. package/build/resolvers/index.js.map +1 -0
  332. package/build/resolvers/resolve-document-if-changed.d.ts +48 -0
  333. package/build/resolvers/resolve-document-if-changed.js +42 -0
  334. package/build/resolvers/resolve-document-if-changed.js.map +1 -0
  335. package/build/resolvers/resolve-document-if-changed.test.d.ts +1 -0
  336. package/build/resolvers/resolve-document-if-changed.test.js +116 -0
  337. package/build/resolvers/resolve-document-if-changed.test.js.map +1 -0
  338. package/build/resolvers/resolve-document.d.ts +106 -0
  339. package/build/resolvers/resolve-document.integration.test.d.ts +1 -0
  340. package/build/resolvers/resolve-document.integration.test.js +108 -0
  341. package/build/resolvers/resolve-document.integration.test.js.map +1 -0
  342. package/build/resolvers/resolve-document.js +319 -0
  343. package/build/resolvers/resolve-document.js.map +1 -0
  344. package/build/resolvers/resolve-document.test.d.ts +1 -0
  345. package/build/resolvers/resolve-document.test.js +749 -0
  346. package/build/resolvers/resolve-document.test.js.map +1 -0
  347. package/build/resolvers/resolve-json-document.d.ts +43 -0
  348. package/build/resolvers/resolve-json-document.js +43 -0
  349. package/build/resolvers/resolve-json-document.js.map +1 -0
  350. package/build/resolvers/resolve-json-document.test.d.ts +1 -0
  351. package/build/resolvers/resolve-json-document.test.js +78 -0
  352. package/build/resolvers/resolve-json-document.test.js.map +1 -0
  353. package/build/structured-error.d.ts +49 -0
  354. package/build/structured-error.js +17 -0
  355. package/build/structured-error.js.map +1 -0
  356. package/build/structured-error.test.d.ts +1 -0
  357. package/build/structured-error.test.js +112 -0
  358. package/build/structured-error.test.js.map +1 -0
  359. package/build/validation/describe-jsonld-failure.d.ts +90 -0
  360. package/build/validation/describe-jsonld-failure.js +171 -0
  361. package/build/validation/describe-jsonld-failure.js.map +1 -0
  362. package/build/validation/describe-jsonld-failure.test.d.ts +1 -0
  363. package/build/validation/describe-jsonld-failure.test.js +226 -0
  364. package/build/validation/describe-jsonld-failure.test.js.map +1 -0
  365. package/build/validation/errors.d.ts +40 -0
  366. package/build/validation/errors.js +75 -0
  367. package/build/validation/errors.js.map +1 -0
  368. package/build/validation/index.d.ts +5 -0
  369. package/build/validation/index.js +5 -0
  370. package/build/validation/index.js.map +1 -0
  371. package/build/validation/validate-against-schemas.d.ts +22 -0
  372. package/build/validation/validate-against-schemas.js +65 -0
  373. package/build/validation/validate-against-schemas.js.map +1 -0
  374. package/build/validation/validate-against-schemas.test.d.ts +1 -0
  375. package/build/validation/validate-against-schemas.test.js +169 -0
  376. package/build/validation/validate-against-schemas.test.js.map +1 -0
  377. package/build/validation/validate-jsonld.context-cache.test.d.ts +1 -0
  378. package/build/validation/validate-jsonld.context-cache.test.js +32 -0
  379. package/build/validation/validate-jsonld.context-cache.test.js.map +1 -0
  380. package/build/validation/validate-jsonld.d.ts +59 -0
  381. package/build/validation/validate-jsonld.js +126 -0
  382. package/build/validation/validate-jsonld.js.map +1 -0
  383. package/build/validation/validate-jsonld.ssrf.test.d.ts +1 -0
  384. package/build/validation/validate-jsonld.ssrf.test.js +108 -0
  385. package/build/validation/validate-jsonld.ssrf.test.js.map +1 -0
  386. package/build/validation/validate-jsonld.test.d.ts +1 -0
  387. package/build/validation/validate-jsonld.test.js +257 -0
  388. package/build/validation/validate-jsonld.test.js.map +1 -0
  389. package/package.json +86 -5
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Returns `value` trimmed if it is a string with non-whitespace content,
3
+ * otherwise `undefined`.
4
+ *
5
+ * Surrounding whitespace is never meaningful in the values this reads (names,
6
+ * identifiers, labels), and a whitespace-only string carries no more
7
+ * information than an absent one, so both collapse to `undefined`.
8
+ *
9
+ * `undefined` rather than `null` because this reports what a document does
10
+ * not contain. Recording that absence as a stored or transmitted value is a
11
+ * separate decision, made by the caller at the boundary where a read becomes
12
+ * a row or a response.
13
+ */
14
+ export function asNonEmptyString(value) {
15
+ if (typeof value !== 'string')
16
+ return undefined;
17
+ const trimmed = value.trim();
18
+ return trimmed.length > 0 ? trimmed : undefined;
19
+ }
20
+ //# sourceMappingURL=as-non-empty-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"as-non-empty-string.js","sourceRoot":"","sources":["../../src/common/as-non-empty-string.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ import { asNonEmptyString } from './as-non-empty-string.js';
2
+ describe('asNonEmptyString', () => {
3
+ it('returns the value for a non-empty string', () => {
4
+ expect(asNonEmptyString('foo')).toBe('foo');
5
+ expect(asNonEmptyString('0')).toBe('0');
6
+ });
7
+ it('trims surrounding whitespace from the value it returns', () => {
8
+ expect(asNonEmptyString(' foo ')).toBe('foo');
9
+ expect(asNonEmptyString('\tfoo\n')).toBe('foo');
10
+ });
11
+ it('returns undefined for the empty string and for whitespace only', () => {
12
+ expect(asNonEmptyString('')).toBeUndefined();
13
+ expect(asNonEmptyString(' ')).toBeUndefined();
14
+ expect(asNonEmptyString('\n\t')).toBeUndefined();
15
+ });
16
+ it.each([
17
+ ['number', 0],
18
+ ['number (non-zero)', 42],
19
+ ['null', null],
20
+ ['undefined', undefined],
21
+ ['boolean true', true],
22
+ ['boolean false', false],
23
+ ['object', {}],
24
+ ['array', ['a']],
25
+ ['NaN', NaN],
26
+ ])('returns undefined for %s', (_label, value) => {
27
+ expect(asNonEmptyString(value)).toBeUndefined();
28
+ });
29
+ });
30
+ //# sourceMappingURL=as-non-empty-string.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"as-non-empty-string.test.js","sourceRoot":"","sources":["../../src/common/as-non-empty-string.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN,CAAC,QAAQ,EAAE,CAAC,CAAC;QACb,CAAC,mBAAmB,EAAE,EAAE,CAAC;QACzB,CAAC,MAAM,EAAE,IAAI,CAAC;QACd,CAAC,WAAW,EAAE,SAAS,CAAC;QACxB,CAAC,cAAc,EAAE,IAAI,CAAC;QACtB,CAAC,eAAe,EAAE,KAAK,CAAC;QACxB,CAAC,QAAQ,EAAE,EAAE,CAAC;QACd,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,KAAK,EAAE,GAAG,CAAC;KACb,CAAC,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC/C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './as-date-time.js';
2
+ export * from './as-non-empty-string.js';
3
+ export * from './require-string.js';
4
+ export * from './validity-window.js';
@@ -0,0 +1,5 @@
1
+ export * from './as-date-time.js';
2
+ export * from './as-non-empty-string.js';
3
+ export * from './require-string.js';
4
+ export * from './validity-window.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ValidationFailure } from '../structured-error.js';
2
+ /**
3
+ * Returns a `requireString(value, fieldName, pointer, failures)` helper
4
+ * pre-bound to a structured-failure `code`. When `value` is a non-empty
5
+ * string, returns it; otherwise pushes a {@link ValidationFailure} onto
6
+ * `failures` and returns `undefined`.
7
+ *
8
+ * Each parser binds the factory once per file with its sub-entry's
9
+ * missing-required-field code, keeping per-call sites unaware of the code
10
+ * namespace.
11
+ */
12
+ export declare function makeRequireString(code: string): (value: unknown, fieldName: string, pointer: string, failures: ValidationFailure[]) => string | undefined;
@@ -0,0 +1,27 @@
1
+ import { asNonEmptyString } from './as-non-empty-string.js';
2
+ /**
3
+ * Returns a `requireString(value, fieldName, pointer, failures)` helper
4
+ * pre-bound to a structured-failure `code`. When `value` is a non-empty
5
+ * string, returns it; otherwise pushes a {@link ValidationFailure} onto
6
+ * `failures` and returns `undefined`.
7
+ *
8
+ * Each parser binds the factory once per file with its sub-entry's
9
+ * missing-required-field code, keeping per-call sites unaware of the code
10
+ * namespace.
11
+ */
12
+ export function makeRequireString(code) {
13
+ return function requireString(value, fieldName, pointer, failures) {
14
+ const parsed = asNonEmptyString(value);
15
+ if (parsed !== undefined)
16
+ return parsed;
17
+ failures.push({
18
+ code,
19
+ message: `${fieldName} is required and must be a non-empty string.`,
20
+ received: value === undefined ? 'undefined' : value === null ? 'null' : value === '' ? 'empty string' : typeof value,
21
+ expected: 'non-empty string',
22
+ pointer,
23
+ });
24
+ return undefined;
25
+ };
26
+ }
27
+ //# sourceMappingURL=require-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-string.js","sourceRoot":"","sources":["../../src/common/require-string.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,SAAS,aAAa,CAC3B,KAAc,EACd,SAAiB,EACjB,OAAe,EACf,QAA6B;QAE7B,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI;YACJ,OAAO,EAAE,GAAG,SAAS,8CAA8C;YACnE,QAAQ,EACN,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,KAAK;YAC5G,QAAQ,EAAE,kBAAkB;YAC5B,OAAO;SACR,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ import { makeRequireString } from './require-string.js';
2
+ const CODE = 'test.missing-required-field';
3
+ describe('makeRequireString', () => {
4
+ let failures;
5
+ const requireString = makeRequireString(CODE);
6
+ beforeEach(() => {
7
+ failures = [];
8
+ });
9
+ it('returns the value when it is a non-empty string', () => {
10
+ expect(requireString('foo', 'field', '/pointer', failures)).toBe('foo');
11
+ expect(failures).toEqual([]);
12
+ });
13
+ it('returns undefined and pushes a failure when the value is undefined', () => {
14
+ expect(requireString(undefined, 'scheme.id', '/id', failures)).toBeUndefined();
15
+ expect(failures).toEqual([
16
+ expect.objectContaining({
17
+ code: CODE,
18
+ pointer: '/id',
19
+ received: 'undefined',
20
+ expected: 'non-empty string',
21
+ }),
22
+ ]);
23
+ });
24
+ it('returns undefined and pushes a failure when the value is the empty string (discriminated from typeof "string")', () => {
25
+ expect(requireString('', 'scheme.name', '/name', failures)).toBeUndefined();
26
+ expect(failures[0]).toMatchObject({ code: CODE, pointer: '/name', received: 'empty string' });
27
+ });
28
+ it.each([
29
+ ['null', null, 'null'],
30
+ ['number', 42, 'number'],
31
+ ['boolean', true, 'boolean'],
32
+ ['object', {}, 'object'],
33
+ ['array', [], 'object'],
34
+ ])('returns undefined and pushes a failure when the value is %s', (_label, value, expectedReceived) => {
35
+ expect(requireString(value, 'field', '/p', failures)).toBeUndefined();
36
+ expect(failures[0]).toMatchObject({ code: CODE, received: expectedReceived });
37
+ });
38
+ it('uses the field name in the failure message', () => {
39
+ requireString(undefined, 'profile.criterion[2].id', '/profile/criterion/2/id', failures);
40
+ expect(failures[0].message).toContain('profile.criterion[2].id');
41
+ });
42
+ it('binds the code once per factory call (different codes do not bleed across instances)', () => {
43
+ const a = makeRequireString('foo.missing');
44
+ const b = makeRequireString('bar.missing');
45
+ const failuresA = [];
46
+ const failuresB = [];
47
+ a(undefined, 'x', '/x', failuresA);
48
+ b(undefined, 'y', '/y', failuresB);
49
+ expect(failuresA[0].code).toBe('foo.missing');
50
+ expect(failuresB[0].code).toBe('bar.missing');
51
+ });
52
+ });
53
+ //# sourceMappingURL=require-string.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-string.test.js","sourceRoot":"","sources":["../../src/common/require-string.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * The outcome of judging a credential's validity window at a point in time.
3
+ *
4
+ * - `pass`: the credential is within its window now. A credential with
5
+ * neither bound is "valid indefinitely" (VCDM 2.0, Validity Period) and
6
+ * passes.
7
+ * - `fail`: the credential is outside its window (`expired`,
8
+ * `not_yet_valid`), or a bound is present but is malformed or in a form
9
+ * this evaluator does not support (`unreadable_bound`). A present bound is
10
+ * never dropped: a credential whose bound cannot be read is not the same
11
+ * as a credential without one.
12
+ */
13
+ export type ValidityWindowOutcome = {
14
+ result: 'pass';
15
+ } | {
16
+ result: 'fail';
17
+ reason: 'expired' | 'not_yet_valid' | 'unreadable_bound';
18
+ message: string;
19
+ };
20
+ /**
21
+ * Judges the VCDM 2.0 `validFrom` and `validUntil` claims against `now`,
22
+ * comparing them as points on a timeline as the data model requires.
23
+ *
24
+ * Supported form: an XML Schema `dateTimeStamp` written as
25
+ * `YYYY-MM-DDTHH:MM:SS[.fraction]` followed by `Z` or an offset within
26
+ * `-14:00`..`+14:00`, with uppercase `T` and `Z`, naming a calendar day that
27
+ * exists. XML Schema's `24:00:00` end-of-day form, a lowercase separator, an
28
+ * offset outside that range, an impossible day and any non-string value are
29
+ * unreadable and fail as `unreadable_bound`, naming the bound, rather than
30
+ * being normalised to a date the credential never asserted.
31
+ *
32
+ * Comparison is at millisecond precision: a fraction finer than that in a
33
+ * bound is truncated when the bound is parsed, so a bound within the same
34
+ * millisecond as `now` is treated as reached. `now` must be a valid Date;
35
+ * an invalid one is a caller error and throws rather than judging anything.
36
+ *
37
+ * Verification providers may not enforce these claims for every securing
38
+ * mechanism (the pinned VCKit reads only the JOSE `exp` and `nbf` claims for
39
+ * a `vc+jwt` envelope), so every verification path applies this judgement
40
+ * to the credential's own claims.
41
+ */
42
+ export declare function evaluateValidityWindow(claims: {
43
+ validFrom?: unknown;
44
+ validUntil?: unknown;
45
+ }, now?: Date): ValidityWindowOutcome;
@@ -0,0 +1,68 @@
1
+ import { asDateTime } from './as-date-time.js';
2
+ /**
3
+ * Judges the VCDM 2.0 `validFrom` and `validUntil` claims against `now`,
4
+ * comparing them as points on a timeline as the data model requires.
5
+ *
6
+ * Supported form: an XML Schema `dateTimeStamp` written as
7
+ * `YYYY-MM-DDTHH:MM:SS[.fraction]` followed by `Z` or an offset within
8
+ * `-14:00`..`+14:00`, with uppercase `T` and `Z`, naming a calendar day that
9
+ * exists. XML Schema's `24:00:00` end-of-day form, a lowercase separator, an
10
+ * offset outside that range, an impossible day and any non-string value are
11
+ * unreadable and fail as `unreadable_bound`, naming the bound, rather than
12
+ * being normalised to a date the credential never asserted.
13
+ *
14
+ * Comparison is at millisecond precision: a fraction finer than that in a
15
+ * bound is truncated when the bound is parsed, so a bound within the same
16
+ * millisecond as `now` is treated as reached. `now` must be a valid Date;
17
+ * an invalid one is a caller error and throws rather than judging anything.
18
+ *
19
+ * Verification providers may not enforce these claims for every securing
20
+ * mechanism (the pinned VCKit reads only the JOSE `exp` and `nbf` claims for
21
+ * a `vc+jwt` envelope), so every verification path applies this judgement
22
+ * to the credential's own claims.
23
+ */
24
+ export function evaluateValidityWindow(claims, now = new Date()) {
25
+ if (!(now instanceof Date) || Number.isNaN(now.getTime())) {
26
+ throw new TypeError('evaluateValidityWindow requires a valid Date for now');
27
+ }
28
+ const from = readBound(claims.validFrom);
29
+ const until = readBound(claims.validUntil);
30
+ if (from.state === 'readable' && now < from.date) {
31
+ return {
32
+ result: 'fail',
33
+ reason: 'not_yet_valid',
34
+ message: `Credential is not yet valid: validFrom ${from.date.toISOString()} is after ${now.toISOString()}`,
35
+ };
36
+ }
37
+ if (until.state === 'readable' && now > until.date) {
38
+ return {
39
+ result: 'fail',
40
+ reason: 'expired',
41
+ message: `Credential has expired: validUntil ${until.date.toISOString()} is before ${now.toISOString()}`,
42
+ };
43
+ }
44
+ const unreadable = [
45
+ from.state === 'unreadable' ? 'validFrom' : null,
46
+ until.state === 'unreadable' ? 'validUntil' : null,
47
+ ].filter((name) => name !== null);
48
+ if (unreadable.length > 0) {
49
+ return {
50
+ result: 'fail',
51
+ reason: 'unreadable_bound',
52
+ message: `${unreadable.join(' and ')} could not be read as a date-time`,
53
+ };
54
+ }
55
+ return { result: 'pass' };
56
+ }
57
+ const DATE_TIME_STAMP = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-](?:0\d|1[0-3]):[0-5]\d|[+-]14:00)$/;
58
+ function readBound(value) {
59
+ // Only an omitted property is an absent bound; an explicit null is a
60
+ // present value the data model does not allow.
61
+ if (value === undefined)
62
+ return { state: 'absent' };
63
+ if (typeof value !== 'string' || !DATE_TIME_STAMP.test(value))
64
+ return { state: 'unreadable' };
65
+ const date = asDateTime(value);
66
+ return date === undefined ? { state: 'unreadable' } : { state: 'readable', date };
67
+ }
68
+ //# sourceMappingURL=validity-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validity-window.js","sourceRoot":"","sources":["../../src/common/validity-window.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAkB/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAqD,EACrD,MAAY,IAAI,IAAI,EAAE;IAEtB,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACjD,OAAO;YACL,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,0CAA0C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,CAAC,WAAW,EAAE,EAAE;SAC3G,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO;YACL,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,sCAAsC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,CAAC,WAAW,EAAE,EAAE;SACzG,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;QAChD,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;KACnD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,kBAAkB;YAC1B,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,mCAAmC;SACxE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAID,MAAM,eAAe,GAAG,2FAA2F,CAAC;AAEpH,SAAS,SAAS,CAAC,KAAc;IAC/B,qEAAqE;IACrE,+CAA+C;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC9F,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACpF,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,67 @@
1
+ import { evaluateValidityWindow } from './validity-window.js';
2
+ const NOW = new Date('2026-09-11T00:00:00.000Z');
3
+ describe('evaluateValidityWindow', () => {
4
+ it('fails an expired credential, naming the bound', () => {
5
+ expect(evaluateValidityWindow({ validFrom: '2020-01-01T00:00:00Z', validUntil: '2021-01-01T00:00:00Z' }, NOW)).toEqual({
6
+ result: 'fail',
7
+ reason: 'expired',
8
+ message: expect.stringContaining('validUntil 2021-01-01T00:00:00.000Z'),
9
+ });
10
+ });
11
+ it('fails a credential that is not yet valid', () => {
12
+ expect(evaluateValidityWindow({ validFrom: '2035-01-01T00:00:00Z' }, NOW)).toMatchObject({
13
+ result: 'fail',
14
+ reason: 'not_yet_valid',
15
+ });
16
+ });
17
+ it('passes inside the window, exactly on a bound, and with no bound at all', () => {
18
+ expect(evaluateValidityWindow({ validFrom: '2026-01-01T00:00:00Z', validUntil: '2027-01-01T00:00:00Z' }, NOW)).toEqual({ result: 'pass' });
19
+ expect(evaluateValidityWindow({ validFrom: NOW.toISOString() }, NOW)).toEqual({ result: 'pass' });
20
+ expect(evaluateValidityWindow({ validUntil: NOW.toISOString() }, NOW)).toEqual({ result: 'pass' });
21
+ // VCDM 2.0: with neither bound the credential is valid indefinitely.
22
+ expect(evaluateValidityWindow({}, NOW)).toEqual({ result: 'pass' });
23
+ expect(evaluateValidityWindow({ validFrom: undefined, validUntil: undefined }, NOW)).toEqual({ result: 'pass' });
24
+ expect(evaluateValidityWindow({ validUntil: '2035-01-01T00:00:00+14:00' }, NOW)).toEqual({ result: 'pass' });
25
+ expect(evaluateValidityWindow({ validUntil: '2035-01-01T00:00:00.250-13:59' }, NOW)).toEqual({ result: 'pass' });
26
+ });
27
+ it('fails a bound that is present but not a date-time, and never normalises an impossible date', () => {
28
+ // A violated readable bound wins over an unreadable one; otherwise an
29
+ // unreadable bound fails the credential rather than being dropped.
30
+ expect(evaluateValidityWindow({ validFrom: 'yesterday', validUntil: '2021-01-01T00:00:00Z' }, NOW)).toMatchObject({
31
+ result: 'fail',
32
+ reason: 'expired',
33
+ });
34
+ expect(evaluateValidityWindow({ validFrom: '2020-01-01T00:00:00Z', validUntil: 'never' }, NOW)).toEqual({
35
+ result: 'fail',
36
+ reason: 'unreadable_bound',
37
+ message: 'validUntil could not be read as a date-time',
38
+ });
39
+ expect(evaluateValidityWindow({ validFrom: 12345, validUntil: {} }, NOW)).toMatchObject({
40
+ message: 'validFrom and validUntil could not be read as a date-time',
41
+ });
42
+ // 30 February is not a date; it must not become 2 March and then expire.
43
+ expect(evaluateValidityWindow({ validUntil: '2021-02-30T00:00:00Z' }, NOW)).toMatchObject({
44
+ reason: 'unreadable_bound',
45
+ });
46
+ // XML Schema's end-of-day form is outside the supported profile.
47
+ expect(evaluateValidityWindow({ validUntil: '2030-12-31T24:00:00Z' }, NOW)).toMatchObject({
48
+ reason: 'unreadable_bound',
49
+ });
50
+ // An explicit null is a present value the data model does not allow.
51
+ expect(evaluateValidityWindow({ validUntil: null }, NOW)).toMatchObject({ reason: 'unreadable_bound' });
52
+ // Only the dateTimeStamp form: uppercase separators and offsets within 14 hours.
53
+ expect(evaluateValidityWindow({ validUntil: '2035-01-01t00:00:00z' }, NOW)).toMatchObject({
54
+ reason: 'unreadable_bound',
55
+ });
56
+ expect(evaluateValidityWindow({ validUntil: '2035-01-01T00:00:00+23:59' }, NOW)).toMatchObject({
57
+ reason: 'unreadable_bound',
58
+ });
59
+ expect(evaluateValidityWindow({ validUntil: '2035-01-01T00:00:00+14:01' }, NOW)).toMatchObject({
60
+ reason: 'unreadable_bound',
61
+ });
62
+ });
63
+ it('refuses an invalid clock rather than judging against it', () => {
64
+ expect(() => evaluateValidityWindow({ validUntil: '2021-01-01T00:00:00Z' }, new Date('not a date'))).toThrow(TypeError);
65
+ });
66
+ });
67
+ //# sourceMappingURL=validity-window.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validity-window.test.js","sourceRoot":"","sources":["../../src/common/validity-window.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const ConformityWarningCode: {
2
+ readonly SchemeNotFound: "conformity-scheme.not-found";
3
+ readonly ProfileNotFound: "conformity-profile.not-found";
4
+ readonly ProfileNotSpecified: "conformity-profile.not-specified";
5
+ readonly CriterionNotInProfile: "conformity-criterion.not-in-profile";
6
+ readonly CriterionMissing: "conformity-criterion.missing";
7
+ readonly CriterionTopicMismatch: "conformity-criterion.topic-mismatch";
8
+ readonly AssessmentTopicMismatch: "conformity-assessment.topic-mismatch";
9
+ };
10
+ export type ConformityWarningCode = (typeof ConformityWarningCode)[keyof typeof ConformityWarningCode];
@@ -0,0 +1,10 @@
1
+ export const ConformityWarningCode = {
2
+ SchemeNotFound: 'conformity-scheme.not-found',
3
+ ProfileNotFound: 'conformity-profile.not-found',
4
+ ProfileNotSpecified: 'conformity-profile.not-specified',
5
+ CriterionNotInProfile: 'conformity-criterion.not-in-profile',
6
+ CriterionMissing: 'conformity-criterion.missing',
7
+ CriterionTopicMismatch: 'conformity-criterion.topic-mismatch',
8
+ AssessmentTopicMismatch: 'conformity-assessment.topic-mismatch',
9
+ };
10
+ //# sourceMappingURL=codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.js","sourceRoot":"","sources":["../../src/conformity-vocabulary/codes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,cAAc,EAAE,6BAA6B;IAC7C,eAAe,EAAE,8BAA8B;IAC/C,mBAAmB,EAAE,kCAAkC;IACvD,qBAAqB,EAAE,qCAAqC;IAC5D,gBAAgB,EAAE,8BAA8B;IAChD,sBAAsB,EAAE,qCAAqC;IAC7D,uBAAuB,EAAE,sCAAsC;CACvD,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { StructuredError, type ValidationFailure } from '../structured-error.js';
2
+ /**
3
+ * Base for every diagnostic from `@uncefact/untp-utils/conformity-vocabulary`
4
+ * (scheme parsing, catalogue parsing, claim validation). Catch to handle any
5
+ * conformity-vocabulary failure generically; catch a concrete subclass for
6
+ * specific handling.
7
+ */
8
+ export declare class ConformityVocabularyError extends StructuredError {
9
+ }
10
+ /**
11
+ * The document's CVC spec version could not be detected, or is not
12
+ * supported by this build. Fail-fast: parsing aborts before per-field
13
+ * checks run.
14
+ */
15
+ export declare class ConformityUnsupportedSpecVersionError extends ConformityVocabularyError {
16
+ constructor(received: string | undefined, supported: readonly string[]);
17
+ }
18
+ /**
19
+ * The scheme document failed structural parsing. Carries every per-field
20
+ * failure (invalid shape, missing required field) in {@link failures};
21
+ * each entry has a stable `code` (`'conformity-scheme.invalid-shape'` or
22
+ * `'conformity-scheme.missing-required-field'`) plus the Ajv-style
23
+ * `pointer`, `received`, and `expected`.
24
+ */
25
+ export declare class ConformitySchemeParseError extends ConformityVocabularyError {
26
+ readonly failures: readonly ValidationFailure[];
27
+ constructor(failures: readonly ValidationFailure[]);
28
+ }
29
+ /**
30
+ * The UNTP Conformity Vocabulary Catalogue Register document failed
31
+ * structural parsing. Carries every per-entry / per-field failure in
32
+ * {@link failures} (codes `'conformity-catalogue.invalid-shape'` or
33
+ * `'conformity-catalogue.missing-required-field'`, with the Ajv-style
34
+ * `pointer`). {@link sourceUrl} is set when the parser was invoked with
35
+ * the URL the register was fetched from, for operator-side triage.
36
+ */
37
+ export declare class ConformityCatalogueParseError extends ConformityVocabularyError {
38
+ readonly failures: readonly ValidationFailure[];
39
+ readonly sourceUrl?: string;
40
+ constructor(args: {
41
+ failures: readonly ValidationFailure[];
42
+ sourceUrl?: string;
43
+ });
44
+ }
@@ -0,0 +1,68 @@
1
+ import { StructuredError } from '../structured-error.js';
2
+ /**
3
+ * Base for every diagnostic from `@uncefact/untp-utils/conformity-vocabulary`
4
+ * (scheme parsing, catalogue parsing, claim validation). Catch to handle any
5
+ * conformity-vocabulary failure generically; catch a concrete subclass for
6
+ * specific handling.
7
+ */
8
+ export class ConformityVocabularyError extends StructuredError {
9
+ }
10
+ /**
11
+ * The document's CVC spec version could not be detected, or is not
12
+ * supported by this build. Fail-fast: parsing aborts before per-field
13
+ * checks run.
14
+ */
15
+ export class ConformityUnsupportedSpecVersionError extends ConformityVocabularyError {
16
+ constructor(received, supported) {
17
+ super({
18
+ code: 'conformity-scheme.unsupported-spec-version',
19
+ message: received === undefined
20
+ ? "Could not detect CVC spec version from the document's @context, and no override was supplied."
21
+ : `CVC spec version '${received}' is not supported by this build.`,
22
+ received: received ?? 'undetected',
23
+ expected: supported,
24
+ pointer: received === undefined ? '/@context' : undefined,
25
+ });
26
+ }
27
+ }
28
+ /**
29
+ * The scheme document failed structural parsing. Carries every per-field
30
+ * failure (invalid shape, missing required field) in {@link failures};
31
+ * each entry has a stable `code` (`'conformity-scheme.invalid-shape'` or
32
+ * `'conformity-scheme.missing-required-field'`) plus the Ajv-style
33
+ * `pointer`, `received`, and `expected`.
34
+ */
35
+ export class ConformitySchemeParseError extends ConformityVocabularyError {
36
+ failures;
37
+ constructor(failures) {
38
+ super({
39
+ code: 'conformity-scheme.parse-failed',
40
+ message: `Conformity scheme failed to parse with ${failures.length} failure(s).`,
41
+ });
42
+ this.failures = failures;
43
+ }
44
+ }
45
+ /**
46
+ * The UNTP Conformity Vocabulary Catalogue Register document failed
47
+ * structural parsing. Carries every per-entry / per-field failure in
48
+ * {@link failures} (codes `'conformity-catalogue.invalid-shape'` or
49
+ * `'conformity-catalogue.missing-required-field'`, with the Ajv-style
50
+ * `pointer`). {@link sourceUrl} is set when the parser was invoked with
51
+ * the URL the register was fetched from, for operator-side triage.
52
+ */
53
+ export class ConformityCatalogueParseError extends ConformityVocabularyError {
54
+ failures;
55
+ sourceUrl;
56
+ constructor(args) {
57
+ super({
58
+ code: 'conformity-catalogue.parse-failed',
59
+ message: args.sourceUrl !== undefined
60
+ ? `Conformity catalogue at ${args.sourceUrl} failed to parse with ${args.failures.length} failure(s).`
61
+ : `Conformity catalogue failed to parse with ${args.failures.length} failure(s).`,
62
+ });
63
+ this.failures = args.failures;
64
+ if (args.sourceUrl !== undefined)
65
+ this.sourceUrl = args.sourceUrl;
66
+ }
67
+ }
68
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/conformity-vocabulary/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA0B,MAAM,wBAAwB,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,OAAO,yBAA0B,SAAQ,eAAe;CAAG;AAEjE;;;;GAIG;AACH,MAAM,OAAO,qCAAsC,SAAQ,yBAAyB;IAClF,YAAY,QAA4B,EAAE,SAA4B;QACpE,KAAK,CAAC;YACJ,IAAI,EAAE,4CAA4C;YAClD,OAAO,EACL,QAAQ,KAAK,SAAS;gBACpB,CAAC,CAAC,+FAA+F;gBACjG,CAAC,CAAC,qBAAqB,QAAQ,mCAAmC;YACtE,QAAQ,EAAE,QAAQ,IAAI,YAAY;YAClC,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SAC1D,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,0BAA2B,SAAQ,yBAAyB;IAC9D,QAAQ,CAA+B;IAChD,YAAY,QAAsC;QAChD,KAAK,CAAC;YACJ,IAAI,EAAE,gCAAgC;YACtC,OAAO,EAAE,0CAA0C,QAAQ,CAAC,MAAM,cAAc;SACjF,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,6BAA8B,SAAQ,yBAAyB;IACjE,QAAQ,CAA+B;IACvC,SAAS,CAAU;IAC5B,YAAY,IAAoE;QAC9E,KAAK,CAAC;YACJ,IAAI,EAAE,mCAAmC;YACzC,OAAO,EACL,IAAI,CAAC,SAAS,KAAK,SAAS;gBAC1B,CAAC,CAAC,2BAA2B,IAAI,CAAC,SAAS,yBAAyB,IAAI,CAAC,QAAQ,CAAC,MAAM,cAAc;gBACtG,CAAC,CAAC,6CAA6C,IAAI,CAAC,QAAQ,CAAC,MAAM,cAAc;SACtF,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACpE,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export * from './types.js';
2
+ export { ConformityWarningCode } from './codes.js';
3
+ export { ConformityVocabularyError, ConformityUnsupportedSpecVersionError, ConformitySchemeParseError, ConformityCatalogueParseError, } from './errors.js';
4
+ export { parseConformityScheme, SUPPORTED_CVC_SPEC_VERSIONS, type ParseConformitySchemeOptions, type SupportedCvcSpecVersion, } from './parse-conformity-scheme.js';
5
+ export { parseConformityCatalogue } from './parse-conformity-catalogue.js';
6
+ export { validateConformityClaim } from './validate-conformity-claim.js';
@@ -0,0 +1,7 @@
1
+ export * from './types.js';
2
+ export { ConformityWarningCode } from './codes.js';
3
+ export { ConformityVocabularyError, ConformityUnsupportedSpecVersionError, ConformitySchemeParseError, ConformityCatalogueParseError, } from './errors.js';
4
+ export { parseConformityScheme, SUPPORTED_CVC_SPEC_VERSIONS, } from './parse-conformity-scheme.js';
5
+ export { parseConformityCatalogue } from './parse-conformity-catalogue.js';
6
+ export { validateConformityClaim } from './validate-conformity-claim.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conformity-vocabulary/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,yBAAyB,EACzB,qCAAqC,EACrC,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAG5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { ConformityCatalogueEntry } from './types.js';
2
+ export interface ParseConformityCatalogueOptions {
3
+ /**
4
+ * URL the register was fetched from. Surfaces on
5
+ * {@link ConformityCatalogueParseError.sourceUrl} for operator triage when
6
+ * a parse fails.
7
+ */
8
+ sourceUrl?: string;
9
+ }
10
+ /**
11
+ * Parses the UNTP Conformity Vocabulary Catalogue Register document into a
12
+ * list of {@link ConformityCatalogueEntry}s. Each entry pairs the
13
+ * CVC-canonical scheme URI with the owner-published vocabulary URL,
14
+ * plus the human-readable name and optional lifecycle status.
15
+ *
16
+ * Lenient on per-entry fields beyond the ingestion-essential ones: optional
17
+ * metadata (owner, geographic scope, sector, etc.) is not surfaced here.
18
+ *
19
+ * @throws {ConformityCatalogueParseError} carrying every per-field failure
20
+ * in `failures[]` if the document is structurally invalid.
21
+ *
22
+ * @see https://untp.unece.org/docs/specification/ConformityVocabularyCatalog
23
+ */
24
+ export declare function parseConformityCatalogue(doc: unknown, options?: ParseConformityCatalogueOptions): {
25
+ entries: readonly ConformityCatalogueEntry[];
26
+ };