@real-life/trust-protocol 0.3.1 → 0.4.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 (264) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +187 -78
  3. package/dist/ack.d.ts +84 -0
  4. package/dist/ack.d.ts.map +1 -0
  5. package/dist/ack.js +114 -0
  6. package/dist/ack.js.map +1 -0
  7. package/dist/adapters/vti-mediator.d.ts +154 -0
  8. package/dist/adapters/vti-mediator.d.ts.map +1 -0
  9. package/dist/adapters/vti-mediator.js +621 -0
  10. package/dist/adapters/vti-mediator.js.map +1 -0
  11. package/dist/anchor.d.ts +226 -0
  12. package/dist/anchor.d.ts.map +1 -0
  13. package/dist/anchor.js +347 -0
  14. package/dist/anchor.js.map +1 -0
  15. package/dist/{holder.d.ts → carrier-holder.d.ts} +1 -1
  16. package/dist/carrier-holder.d.ts.map +1 -0
  17. package/dist/{holder.js → carrier-holder.js} +5 -4
  18. package/dist/carrier-holder.js.map +1 -0
  19. package/dist/carrier-identity.js +4 -4
  20. package/dist/carrier-identity.js.map +1 -1
  21. package/dist/carrier.d.ts.map +1 -1
  22. package/dist/carrier.js +4 -3
  23. package/dist/carrier.js.map +1 -1
  24. package/dist/ceremony.d.ts +3 -2
  25. package/dist/ceremony.d.ts.map +1 -1
  26. package/dist/ceremony.js +16 -26
  27. package/dist/ceremony.js.map +1 -1
  28. package/dist/codec.d.ts +46 -0
  29. package/dist/codec.d.ts.map +1 -0
  30. package/dist/codec.js +410 -0
  31. package/dist/codec.js.map +1 -0
  32. package/dist/continuity.d.ts +67 -0
  33. package/dist/continuity.d.ts.map +1 -0
  34. package/dist/continuity.js +110 -0
  35. package/dist/continuity.js.map +1 -0
  36. package/dist/core.d.ts +4 -0
  37. package/dist/core.d.ts.map +1 -1
  38. package/dist/core.js.map +1 -1
  39. package/dist/crypto.d.ts +23 -7
  40. package/dist/crypto.d.ts.map +1 -1
  41. package/dist/crypto.js +54 -20
  42. package/dist/crypto.js.map +1 -1
  43. package/dist/delivery.d.ts +31 -3
  44. package/dist/delivery.d.ts.map +1 -1
  45. package/dist/delivery.js +75 -28
  46. package/dist/delivery.js.map +1 -1
  47. package/dist/encounter/ceremony.d.ts +37 -0
  48. package/dist/encounter/ceremony.d.ts.map +1 -0
  49. package/dist/encounter/ceremony.js +662 -0
  50. package/dist/encounter/ceremony.js.map +1 -0
  51. package/dist/encounter.d.ts +91 -1
  52. package/dist/encounter.d.ts.map +1 -1
  53. package/dist/encounter.js +191 -12
  54. package/dist/encounter.js.map +1 -1
  55. package/dist/engine.d.ts +291 -0
  56. package/dist/engine.d.ts.map +1 -0
  57. package/dist/engine.js +1395 -0
  58. package/dist/engine.js.map +1 -0
  59. package/dist/entropy.d.ts +28 -0
  60. package/dist/entropy.d.ts.map +1 -0
  61. package/dist/entropy.js +96 -0
  62. package/dist/entropy.js.map +1 -0
  63. package/dist/events.d.ts +177 -0
  64. package/dist/events.d.ts.map +1 -0
  65. package/dist/events.js +2 -0
  66. package/dist/events.js.map +1 -0
  67. package/dist/fixtures.d.ts +30 -0
  68. package/dist/fixtures.d.ts.map +1 -0
  69. package/dist/fixtures.js +155 -0
  70. package/dist/fixtures.js.map +1 -0
  71. package/dist/forge.d.ts +47 -0
  72. package/dist/forge.d.ts.map +1 -0
  73. package/dist/forge.js +20 -0
  74. package/dist/forge.js.map +1 -0
  75. package/dist/group-star.d.ts +251 -0
  76. package/dist/group-star.d.ts.map +1 -0
  77. package/dist/group-star.js +348 -0
  78. package/dist/group-star.js.map +1 -0
  79. package/dist/holder-api.d.ts +137 -0
  80. package/dist/holder-api.d.ts.map +1 -0
  81. package/dist/holder-api.js +132 -0
  82. package/dist/holder-api.js.map +1 -0
  83. package/dist/holder-state-v1.d.ts +801 -0
  84. package/dist/holder-state-v1.d.ts.map +1 -0
  85. package/dist/holder-state-v1.js +2 -0
  86. package/dist/holder-state-v1.js.map +1 -0
  87. package/dist/identity-state.d.ts +43 -0
  88. package/dist/identity-state.d.ts.map +1 -0
  89. package/dist/identity-state.js +345 -0
  90. package/dist/identity-state.js.map +1 -0
  91. package/dist/identity.d.ts +24 -2
  92. package/dist/identity.d.ts.map +1 -1
  93. package/dist/identity.js +70 -11
  94. package/dist/identity.js.map +1 -1
  95. package/dist/index.d.ts +26 -1
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +77 -29
  98. package/dist/index.js.map +1 -1
  99. package/dist/internal.d.ts +36 -0
  100. package/dist/internal.d.ts.map +1 -0
  101. package/dist/internal.js +22 -0
  102. package/dist/internal.js.map +1 -0
  103. package/dist/introduction/holder.d.ts +18 -0
  104. package/dist/introduction/holder.d.ts.map +1 -0
  105. package/dist/introduction/holder.js +757 -0
  106. package/dist/introduction/holder.js.map +1 -0
  107. package/dist/introduction.d.ts +101 -0
  108. package/dist/introduction.d.ts.map +1 -0
  109. package/dist/introduction.js +132 -0
  110. package/dist/introduction.js.map +1 -0
  111. package/dist/invariants.d.ts +43 -0
  112. package/dist/invariants.d.ts.map +1 -0
  113. package/dist/invariants.js +883 -0
  114. package/dist/invariants.js.map +1 -0
  115. package/dist/keys-seed.d.ts +7 -0
  116. package/dist/keys-seed.d.ts.map +1 -0
  117. package/dist/keys-seed.js +133 -0
  118. package/dist/keys-seed.js.map +1 -0
  119. package/dist/log-memory.d.ts +12 -0
  120. package/dist/log-memory.d.ts.map +1 -0
  121. package/dist/log-memory.js +101 -0
  122. package/dist/log-memory.js.map +1 -0
  123. package/dist/membership/holder.d.ts +35 -0
  124. package/dist/membership/holder.d.ts.map +1 -0
  125. package/dist/membership/holder.js +852 -0
  126. package/dist/membership/holder.js.map +1 -0
  127. package/dist/membership.d.ts +92 -0
  128. package/dist/membership.d.ts.map +1 -0
  129. package/dist/membership.js +157 -0
  130. package/dist/membership.js.map +1 -0
  131. package/dist/ports.d.ts +237 -0
  132. package/dist/ports.d.ts.map +1 -0
  133. package/dist/ports.js +2 -0
  134. package/dist/ports.js.map +1 -0
  135. package/dist/profile.d.ts +56 -0
  136. package/dist/profile.d.ts.map +1 -0
  137. package/dist/profile.js +193 -0
  138. package/dist/profile.js.map +1 -0
  139. package/dist/prompts.d.ts +14 -0
  140. package/dist/prompts.d.ts.map +1 -0
  141. package/dist/prompts.js +69 -0
  142. package/dist/prompts.js.map +1 -0
  143. package/dist/receive.d.ts +133 -0
  144. package/dist/receive.d.ts.map +1 -0
  145. package/dist/receive.js +298 -0
  146. package/dist/receive.js.map +1 -0
  147. package/dist/results.d.ts +158 -0
  148. package/dist/results.d.ts.map +1 -0
  149. package/dist/results.js +21 -0
  150. package/dist/results.js.map +1 -0
  151. package/dist/schemas.d.ts.map +1 -1
  152. package/dist/schemas.js +42 -38
  153. package/dist/schemas.js.map +1 -1
  154. package/dist/sha256.d.ts +3 -0
  155. package/dist/sha256.d.ts.map +1 -0
  156. package/dist/sha256.js +69 -0
  157. package/dist/sha256.js.map +1 -0
  158. package/dist/star.d.ts +31 -0
  159. package/dist/star.d.ts.map +1 -0
  160. package/dist/star.js +56 -0
  161. package/dist/star.js.map +1 -0
  162. package/dist/state-builder.d.ts +42 -0
  163. package/dist/state-builder.d.ts.map +1 -0
  164. package/dist/state-builder.js +100 -0
  165. package/dist/state-builder.js.map +1 -0
  166. package/dist/state.d.ts +853 -0
  167. package/dist/state.d.ts.map +1 -0
  168. package/dist/state.js +36 -0
  169. package/dist/state.js.map +1 -0
  170. package/dist/store-contract.d.ts +11 -0
  171. package/dist/store-contract.d.ts.map +1 -0
  172. package/dist/store-contract.js +189 -0
  173. package/dist/store-contract.js.map +1 -0
  174. package/dist/store-memory.d.ts +8 -0
  175. package/dist/store-memory.d.ts.map +1 -0
  176. package/dist/store-memory.js +17 -0
  177. package/dist/store-memory.js.map +1 -0
  178. package/dist/testing.d.ts +22 -0
  179. package/dist/testing.d.ts.map +1 -0
  180. package/dist/testing.js +21 -0
  181. package/dist/testing.js.map +1 -0
  182. package/dist/trust/continuity.d.ts +71 -0
  183. package/dist/trust/continuity.d.ts.map +1 -0
  184. package/dist/trust/continuity.js +1216 -0
  185. package/dist/trust/continuity.js.map +1 -0
  186. package/dist/trust/duties.d.ts +67 -0
  187. package/dist/trust/duties.d.ts.map +1 -0
  188. package/dist/trust/duties.js +179 -0
  189. package/dist/trust/duties.js.map +1 -0
  190. package/dist/trust/entries.d.ts +139 -0
  191. package/dist/trust/entries.d.ts.map +1 -0
  192. package/dist/trust/entries.js +694 -0
  193. package/dist/trust/entries.js.map +1 -0
  194. package/dist/trust/group-star.d.ts +43 -0
  195. package/dist/trust/group-star.d.ts.map +1 -0
  196. package/dist/trust/group-star.js +188 -0
  197. package/dist/trust/group-star.js.map +1 -0
  198. package/dist/trust/mapping.d.ts +56 -0
  199. package/dist/trust/mapping.d.ts.map +1 -0
  200. package/dist/trust/mapping.js +584 -0
  201. package/dist/trust/mapping.js.map +1 -0
  202. package/dist/trust/profile.d.ts +25 -0
  203. package/dist/trust/profile.d.ts.map +1 -0
  204. package/dist/trust/profile.js +249 -0
  205. package/dist/trust/profile.js.map +1 -0
  206. package/dist/trust/star.d.ts +208 -0
  207. package/dist/trust/star.d.ts.map +1 -0
  208. package/dist/trust/star.js +588 -0
  209. package/dist/trust/star.js.map +1 -0
  210. package/dist/trust/state.d.ts +83 -0
  211. package/dist/trust/state.d.ts.map +1 -0
  212. package/dist/trust/state.js +154 -0
  213. package/dist/trust/state.js.map +1 -0
  214. package/dist/util-freeze.d.ts +3 -0
  215. package/dist/util-freeze.d.ts.map +1 -0
  216. package/dist/util-freeze.js +11 -0
  217. package/dist/util-freeze.js.map +1 -0
  218. package/dist/views.d.ts +147 -0
  219. package/dist/views.d.ts.map +1 -0
  220. package/dist/views.js +268 -0
  221. package/dist/views.js.map +1 -0
  222. package/dist/visibility.d.ts +5 -5
  223. package/dist/visibility.d.ts.map +1 -1
  224. package/dist/visibility.js +22 -28
  225. package/dist/visibility.js.map +1 -1
  226. package/dist/wire.d.ts +178 -84
  227. package/dist/wire.d.ts.map +1 -1
  228. package/dist/wire.js.map +1 -1
  229. package/package.json +58 -11
  230. package/schemas/holder-state-v1.schema.json +3880 -0
  231. package/dist/holder.d.ts.map +0 -1
  232. package/dist/holder.js.map +0 -1
  233. package/dist/probe/acks.d.ts +0 -27
  234. package/dist/probe/acks.d.ts.map +0 -1
  235. package/dist/probe/acks.js +0 -152
  236. package/dist/probe/acks.js.map +0 -1
  237. package/dist/probe/continuity.d.ts +0 -20
  238. package/dist/probe/continuity.d.ts.map +0 -1
  239. package/dist/probe/continuity.js +0 -805
  240. package/dist/probe/continuity.js.map +0 -1
  241. package/dist/probe/deps.d.ts +0 -61
  242. package/dist/probe/deps.d.ts.map +0 -1
  243. package/dist/probe/deps.js +0 -54
  244. package/dist/probe/deps.js.map +0 -1
  245. package/dist/probe/encounter.d.ts +0 -26
  246. package/dist/probe/encounter.d.ts.map +0 -1
  247. package/dist/probe/encounter.js +0 -938
  248. package/dist/probe/encounter.js.map +0 -1
  249. package/dist/probe/introduce.d.ts +0 -70
  250. package/dist/probe/introduce.d.ts.map +0 -1
  251. package/dist/probe/introduce.js +0 -295
  252. package/dist/probe/introduce.js.map +0 -1
  253. package/dist/probe/membership.d.ts +0 -90
  254. package/dist/probe/membership.d.ts.map +0 -1
  255. package/dist/probe/membership.js +0 -450
  256. package/dist/probe/membership.js.map +0 -1
  257. package/dist/probe/trust.d.ts +0 -156
  258. package/dist/probe/trust.d.ts.map +0 -1
  259. package/dist/probe/trust.js +0 -1233
  260. package/dist/probe/trust.js.map +0 -1
  261. package/dist/probe.d.ts +0 -7
  262. package/dist/probe.d.ts.map +0 -1
  263. package/dist/probe.js +0 -42
  264. package/dist/probe.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"holder.d.ts","sourceRoot":"","sources":["../src/holder.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAKrE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,uEAAuE;AACvE,wBAAsB,aAAa,CACjC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GACxF,OAAO,CAAC,aAAa,CAAC,CAExB;AAYD;;wEAEwE;AACxE,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,EAClD,kBAAkB,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,UAAU,SAAiB,GACtF,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;wDACwD;AACxD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,GAAG,UAAU,EAAE,kBAAkB,EAAE,MAAM,GAC9E,OAAO,CAAC,YAAY,CAAC,CAEvB;AAWD,eAAO,MAAM,cAAc,QAA0B,CAAA;AAErD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAA;CACxC;AACD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;IACpD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,KAAK,EAAE,YAAY,EAAE,CAAA;CACtB;AAED;;;;;;;;4DAQ4D;AAC5D,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,EACxD,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,EACtF,UAAU,EAAE,MAAM,OAAO,CAAC;IAAE,kBAAkB,EAAE,MAAM,CAAC;IAAC,sBAAsB,EAAE,MAAM,CAAA;CAAE,CAAC,EACzF,kBAAkB,SAAI,GACrB,OAAO,CAAC,cAAc,CAAC,CA6BzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"holder.js","sourceRoot":"","sources":["../src/holder.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,uEAAuE;AACvE,+CAA+C;AAC/C,EAAE;AACF,kEAAkE;AAClE,wEAAwE;AACxE,uEAAuE;AACvE,qDAAqD;AACrD,yEAAyE;AACzE,wEAAwE;AACxE,8BAA8B;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAA;AAClC,MAAM,EAAE,GAAG,IAAI,WAAW,EAAE,CAAA;AAS5B,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAmB,EAAE,OAAe,EAAE,KAAiB,EAAE,IAAY,EAAE,UAAkB;IAEzF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;AACjG,CAAC;AAED,KAAK,UAAU,IAAI,CAAE,GAAkB,EAAE,MAA4B;IACnE,MAAM,CAAC,GAAG;QACR,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,4BAA4B;QAC9C,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI;QACvE,GAAG,MAAM;KACV,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAoB,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1H,OAAO,EAAE,GAAI,CAA6B,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;AACtE,CAAC;AAED;;wEAEwE;AACxE,MAAM,UAAU,iBAAiB,CAC/B,GAAkB,EAAE,OAA8B,EAClD,kBAA0B,EAAE,sBAA8B,EAAE,UAAU,GAAG,GAAG,CAAC,UAAU;IAEvF,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,CAAC,CAAA;AACzG,CAAC;AAED;wDACwD;AACxD,MAAM,UAAU,YAAY,CAC1B,GAAkB,EAAE,OAA+B,EAAE,kBAA0B;IAE/E,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAA;AACnD,CAAC;AAED,2EAA2E;AAC3E,uEAAuE;AACvE,yEAAyE;AACzE,qEAAqE;AACrE,uEAAuE;AACvE,uEAAuE;AACvE,wEAAwE;AACxE,yEAAyE;AACzE,kEAAkE;AAClE,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAA,CAAG,4BAA4B;AAapF;;;;;;;;4DAQ4D;AAC5D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAsB,EACtB,QAAwD,EACxD,QAAsF,EACtF,UAAyF,EACzF,kBAAkB,GAAG,CAAC;IAEtB,MAAM,KAAK,GAAmB,EAAE,CAAA;IAChC,IAAI,GAAG,GAAG,OAAO,CAAA;IACjB,IAAI,OAAO,GAA0B,UAAU,CAAA;IAC/C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,GAAG,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAAC;QACnE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAA;QAC7B,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAA;QACrG,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;QACvD,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACvE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YAClB,KAAK,YAAY,CAAC;YAClB,KAAK,SAAS,CAAC;YACf,KAAK,wBAAwB;gBAC3B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,CAAA;YACrE,KAAK,2BAA2B,CAAC,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAI,CAAgC,CAAC,cAAc,CAAA;gBAC7D,IAAI,IAAI,IAAI,cAAc;oBAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;gBACjE,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA,CAAkB,8BAA8B;gBAC9E,OAAO,GAAG,QAAQ,CAAA;gBAClB,MAAK;YACP,CAAC;YACD,KAAK,gCAAgC,CAAC;YACtC,KAAK,6BAA6B;gBAChC,MAAK;YACP;gBACE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;QACvC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;AACtC,CAAC","sourcesContent":["// holder — the holder's side of the carrier port (Delivery §5a, the\n// client half): proof construction for all four purposes, the recovery\n// flow of Identity §9.3, and verdict handling.\n//\n// The holder never guesses what the carrier holds. It derives its\n// principal (carrier-identity), asks for challenges, signs proofs whose\n// bytes are fixed by §5a.3, and reads exactly the closed verdict set —\n// including the one disclosure the protocol makes: a\n// `refused(stale-generation)` carries the generation to exceed, which is\n// what makes \"carrier entry lost, pair context held\" replaceable in two\n// exchanges instead of never.\nimport { jcs } from './core.js'\nimport type { Json } from './core.js'\nimport { base58 } from './crypto.js'\nimport { carrierPrincipal } from './carrier-identity.js'\nimport type { CarrierPrincipal } from './carrier-identity.js'\nimport { PROOF_V } from './carrier.js'\nimport type { CarrierProof, RegistrationVerdict } from './carrier.js'\n\nconst S = globalThis.crypto.subtle\nconst te = new TextEncoder()\n\nexport interface HolderContext {\n carrier: string // C, byte-exact\n identity: CarrierPrincipal // from carrierPrincipal(rootIkm, C, N)\n rkid: string // the relationship address at this carrier\n generation: number // the register's generation for N (§7a.3)\n}\n\n/** derive-and-wrap: one holder context per (relationship × carrier) */\nexport async function holderContext (\n rootIkm: Uint8Array, carrier: string, nonce: Uint8Array, rkid: string, generation: number,\n): Promise<HolderContext> {\n return { carrier, identity: await carrierPrincipal(rootIkm, carrier, nonce), rkid, generation }\n}\n\nasync function sign (ctx: HolderContext, fields: Record<string, Json>): Promise<CarrierProof> {\n const p = {\n v: PROOF_V, type: 'carrier-registration-proof',\n carrier: ctx.carrier, principal: ctx.identity.principal, rkid: ctx.rkid,\n ...fields,\n }\n const sig = new Uint8Array(await S.sign({ name: 'Ed25519' }, ctx.identity.key.priv, te.encode(jcs(p as unknown as Json))))\n return { ...(p as unknown as CarrierProof), sig: 'z' + base58(sig) }\n}\n\n/** register/rebind proof: both succession fields present (§5a.3).\n * `openedAddressChallenge` is the value the holder decrypted from the\n * carrier's sealed challenge — possession of the rkid's private key. */\nexport function registrationProof (\n ctx: HolderContext, purpose: 'register' | 'rebind',\n principalChallenge: string, openedAddressChallenge: string, generation = ctx.generation,\n): Promise<CarrierProof> {\n return sign(ctx, { purpose, generation, principalChallenge, addressChallenge: openedAddressChallenge })\n}\n\n/** collect/conclude proof: session-scoped, neither succession field —\n * their ABSENCE is part of the signed bytes (§5a.3). */\nexport function sessionProof (\n ctx: HolderContext, purpose: 'collect' | 'conclude', principalChallenge: string,\n): Promise<CarrierProof> {\n return sign(ctx, { purpose, principalChallenge })\n}\n\n// ── the recovery flow (Identity §9.3, executable) ───────────────────────\n// After losing the carrier entry alone (pair context held), the holder\n// knows neither the old principal nor the generation to exceed. The flow\n// is: attempt at generation 1; on the disclosing refusal, ROTATE THE\n// REGISTER to disclosed + 1 — Identity §7a.3: each rotation is a fresh\n// nonce N at generation g+1, and the principal is DERIVED from the new\n// nonce; a proof that named a higher generation over an old nonce would\n// claim a register state that does not exist (port-review B-6). Only the\n// number of carrier exchanges stays two; the rotations are local.\nexport const GENERATION_MAX = Number.MAX_SAFE_INTEGER // 2^53 − 1 (Identity §7a.3)\n\nexport interface RecoveryStep {\n attempt: number\n generation: number\n verdict: RegistrationVerdict['verdict']\n}\nexport interface RecoveryResult {\n outcome: 'bound' | 'waiting' | 'failed' | 'terminal'\n finalGeneration?: number\n steps: RecoveryStep[]\n}\n\n/** One recovery run. `rotateTo(g)` performs the LOCAL register rotations\n * up to generation g — fresh nonce, re-derived principal — and returns\n * the holder context of the new canonical entry (Identity §7a.3).\n * `exchange` is the transport; `challenges` draws a fresh pair per\n * attempt. `maxCapacityRetries` bounds only this run: the protocol\n * promises order, never time (round-46 B-2). At the generation maximum\n * no rotation exists and the address is not re-registrable at this\n * carrier (Identity §7a.3) — the outcome is `terminal`, and the lever is\n * §7a.2's move to a different configured carrier string. */\nexport async function recoverCarrierEntry (\n initial: HolderContext,\n rotateTo: (generation: number) => Promise<HolderContext>,\n exchange: (proof: CarrierProof, rawGeneration: string) => Promise<RegistrationVerdict>,\n challenges: () => Promise<{ principalChallenge: string, openedAddressChallenge: string }>,\n maxCapacityRetries = 3,\n): Promise<RecoveryResult> {\n const steps: RecoveryStep[] = []\n let ctx = initial\n let purpose: 'register' | 'rebind' = 'register'\n for (let attempt = 1; attempt <= 2 + maxCapacityRetries; attempt++) {\n const ch = await challenges()\n const proof = await registrationProof(ctx, purpose, ch.principalChallenge, ch.openedAddressChallenge)\n const v = await exchange(proof, String(ctx.generation))\n steps.push({ attempt, generation: ctx.generation, verdict: v.verdict })\n switch (v.verdict) {\n case 'registered':\n case 'rebound':\n case 'registered(idempotent)':\n return { outcome: 'bound', finalGeneration: ctx.generation, steps }\n case 'refused(stale-generation)': {\n const held = (v as { heldGeneration: number }).heldGeneration\n if (held >= GENERATION_MAX) return { outcome: 'terminal', steps }\n ctx = await rotateTo(held + 1) // real rotations, fresh nonce\n purpose = 'rebind'\n break\n }\n case 'registration-refused(capacity)':\n case 'refused(admission-resource)':\n break\n default:\n return { outcome: 'failed', steps }\n }\n }\n return { outcome: 'waiting', steps }\n}\n"]}
@@ -1,27 +0,0 @@
1
- import * as C from './deps.js';
2
- import type { Person } from './deps.js';
3
- export declare const ACK_TYPE = "https://real-life.org/trust-tasks/delivery-ack/0.1";
4
- /** the channel ack key — Section 5's derivation discipline, 4.2's info */
5
- export declare function ackKey(ownCtx: any, counterpartKa: string, issuerAnchor: string, recipientAnchor: string): Promise<Uint8Array<ArrayBufferLike>>;
6
- /**
7
- * Build the sealed deniable ack for a document received on `contact`'s
8
- * channel. `refDigest` is the acknowledged document's digest (the same
9
- * digest the completed-effect cache keys on); `threadId` is the acked
10
- * document's thread — the ack continues it (4.2).
11
- */
12
- export declare function buildAck(p: Person, contact: any, refDigest: string, threadId: string, when: number, ent?: any): Promise<{
13
- to: any;
14
- kind: string;
15
- env: C.Envelope;
16
- }>;
17
- /**
18
- * Verify a received deniable ack (4.2 consistency): MAC-form proof only,
19
- * MAC under the arrival tuple's ack key, issuer = our counterpart on
20
- * that tuple, recipient = our own pair anchor. Returns { ref, threadId }
21
- * or null — the caller matches ref against what it actually sent.
22
- */
23
- export declare function verifyAck(p: Person, contact: any, doc: any, cls?: 'signature' | 'dv'): Promise<{
24
- ref: string;
25
- threadId: string;
26
- } | null>;
27
- //# sourceMappingURL=acks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acks.d.ts","sourceRoot":"","sources":["../../src/probe/acks.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIvC,eAAO,MAAM,QAAQ,uDAAuD,CAAA;AAa5E,0EAA0E;AAC1E,wBAAsB,MAAM,CAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,wCAI9G;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ;;;;GA0BxH;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAE,WAAW,GAAG,IAAW,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA8CrJ"}
@@ -1,152 +0,0 @@
1
- // acks — the delivery acknowledgement (Delivery 4.2/4.4, the
2
- // acknowledgement CLASS rule) for the probe world. The ack DOCUMENT is
3
- // the real, registered wire form (`delivery-ack/0.1`) in the form the
4
- // acknowledged payload's class selects: a SIGNED ack (eddsa-jcs-2022
5
- // under the issuer anchor) for signature-class payloads (the Encounter
6
- // forms), the DENIABLE MAC ack for designated-verifier payloads (the
7
- // Visibility forms). The MAC key regime is the normative one —
8
- // byte-compatible with vectors/delivery-ack.json and
9
- // lib/test/vectors4.test.mjs: one channel-keyed derivation for every
10
- // DV-type ack, never the payload's internal MAC structure.
11
- //
12
- // k = HKDF-SHA-256(ikm = X25519(pairX_issuer, pairX_recipient),
13
- // salt = empty, info = "rltp/v1/delivery/mac/ack/"
14
- // || issuerPairAnchor || "/" || recipientPairAnchor,
15
- // 32 bytes; all-zero shared secret rejected)
16
- // proof = { mac: HMAC-SHA-256 over JCS(document without proof) }
17
- //
18
- // Deniable by construction: either relationship party can compute the
19
- // MAC — for DV payloads the ack is evidence to the sender alone, never
20
- // an attestation toward anyone else (4.2).
21
- import { jcs, makeValidator } from '../core.js';
22
- import { SCHEMAS } from '../schemas.js';
23
- import * as C from './deps.js';
24
- const te = new TextEncoder();
25
- const S = globalThis.crypto.subtle;
26
- export const ACK_TYPE = 'https://real-life.org/trust-tasks/delivery-ack/0.1';
27
- const V = makeValidator(SCHEMAS);
28
- const schemaOk = (file, data) => V.validate(data, SCHEMAS[file], SCHEMAS[file]).length === 0;
29
- const hmacU = async (key, msg) => {
30
- const k = await S.importKey('raw', key, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
31
- return 'u' + C.b64uOf(new Uint8Array(await S.sign('HMAC', k, te.encode(msg))));
32
- };
33
- const contactKeyOf = (p, contact) => {
34
- for (const [k, c] of p.contacts)
35
- if (c === contact)
36
- return k;
37
- return undefined;
38
- };
39
- /** the channel ack key — Section 5's derivation discipline, 4.2's info */
40
- export async function ackKey(ownCtx, counterpartKa, issuerAnchor, recipientAnchor) {
41
- const shared = await C.ecdh(ownCtx.x.priv, C.xRawOfMk(counterpartKa));
42
- if (shared.every((b) => b === 0))
43
- throw new Error('all-zero X25519 output');
44
- return C.hkdf(shared, 'rltp/v1/delivery/mac/ack/' + issuerAnchor + '/' + recipientAnchor);
45
- }
46
- /**
47
- * Build the sealed deniable ack for a document received on `contact`'s
48
- * channel. `refDigest` is the acknowledged document's digest (the same
49
- * digest the completed-effect cache keys on); `threadId` is the acked
50
- * document's thread — the ack continues it (4.2).
51
- */
52
- export async function buildAck(p, contact, refDigest, threadId, when, ent = {}) {
53
- const own = contact.channel.own;
54
- const doc = {
55
- id: ent.ackId ?? globalThis.crypto.randomUUID(),
56
- type: ACK_TYPE,
57
- issuer: own.anchor, // = the acked document's recipient (4.2)
58
- // the recipient is the counterparty anchor; `ent.recipient` names it
59
- // when the tuple is not yet inserted (a record-creating effect builds
60
- // its ack BEFORE the one synchronous commit, Delivery 4.1)
61
- recipient: ent.recipient ?? contactKeyOf(p, contact),
62
- threadId,
63
- issuedAt: C.iso(when),
64
- payload: { ref: refDigest, meaning: 'received' },
65
- };
66
- // the acknowledgement CLASS rule (4.2/4.4): a payload whose authenticity
67
- // is a TRANSFERABLE SIGNATURE (the Encounter forms: card + credential
68
- // under DataIntegrityProof) is acknowledged with eddsa-jcs-2022 under
69
- // the ack's issuer anchor — an attestation; a DESIGNATED-VERIFIER
70
- // payload with the deniable channel-keyed MAC. `ent.cls` selects.
71
- if (ent.cls === 'signature') {
72
- const document = await C.diSign(own, doc, doc.issuedAt);
73
- return { to: contact, kind: 'delivery-ack/0.1 (signiert, eddsa-jcs-2022 unter dem Issuer-Anker)', env: await C.seal(document, contact.channel.counterpartKa, ent) };
74
- }
75
- const k = await ackKey(own, contact.channel.counterpartKa, doc.issuer, doc.recipient);
76
- const document = { ...doc, proof: { mac: await hmacU(k, jcs(doc)) } };
77
- return { to: contact, kind: 'delivery-ack/0.1 (deniabel, MAC unter dem Kanal-Ack-Key)', env: await C.seal(document, contact.channel.counterpartKa, ent) };
78
- }
79
- /**
80
- * Verify a received deniable ack (4.2 consistency): MAC-form proof only,
81
- * MAC under the arrival tuple's ack key, issuer = our counterpart on
82
- * that tuple, recipient = our own pair anchor. Returns { ref, threadId }
83
- * or null — the caller matches ref against what it actually sent.
84
- */
85
- export async function verifyAck(p, contact, doc, cls = 'dv') {
86
- try {
87
- if (doc?.type !== ACK_TYPE)
88
- return null;
89
- // STUFENORDNUNG (Review 33, B-2): erst das DOKUMENTPROFIL + der
90
- // recipient (Stufe 5), dann das Payload-Schema (Stufe 7), dann die
91
- // Typ-Konsistenzregeln (Stufe 8), der MAC zuletzt
92
- // — Stufe 5: Dokument-Schema, geschlossene Form, Proof-Form,
93
- // Kalender, recipient = eigener Anker
94
- if (!schemaOk('rltp-delivery-document.schema.json', doc))
95
- return null;
96
- if (!C.shaped(doc, { id: 'string', issuer: 'string', recipient: 'string', threadId: 'string', issuedAt: 'string', payload: 'object', proof: 'object' }))
97
- return null;
98
- // geschlossene Form + das OPTIONALE ceremony-Feld (Review 19, B-2:
99
- // „ceremony — OPTIONAL, and entirely unconstrained"); der MAC läuft
100
- // über JCS(Dokument ohne proof) und deckt es mit ab
101
- if (Object.keys(doc).some((k) => !['id', 'type', 'issuer', 'recipient', 'threadId', 'issuedAt', 'payload', 'proof', 'ceremony'].includes(k)))
102
- return null;
103
- // — Stufe 7 VOR Stufe 8: das Payload-Schema zuerst
104
- if (!schemaOk('payload-delivery-ack.schema.json', doc.payload))
105
- return null;
106
- // class rule (4.2/4.4, Stufe 8): EXACTLY the form the acknowledged
107
- // payload's class selects — signature-class payload → SIGNED ack,
108
- // designated-verifier payload → MAC ack. Every other combination
109
- // (MAC on a signature-class payload, signature on a DV payload, a
110
- // hybrid proof) is invalid
111
- if (cls === 'signature') {
112
- if (doc.proof.mac !== undefined || doc.proof.type !== 'DataIntegrityProof' || doc.proof.cryptosuite !== 'eddsa-jcs-2022')
113
- return null;
114
- if (!C.calOK(doc.proof.created))
115
- return null;
116
- }
117
- else {
118
- if (Object.keys(doc.proof).length !== 1)
119
- return null;
120
- if (typeof doc.proof.mac !== 'string' || doc.proof.proofValue !== undefined)
121
- return null;
122
- }
123
- if (!C.calOK(doc.issuedAt))
124
- return null; // Kalender-Validität (Review 12, B-3)
125
- if (doc.recipient !== contact.channel.own.anchor)
126
- return null;
127
- // — Stufe 8: enactment-Profilregel (Review 20, B-2: ein Ack
128
- // umschließt kein Bindungsmaterial), issuer-Bindung, meaning
129
- if (doc.ceremony?.enactment !== undefined)
130
- return null;
131
- if (doc.issuer !== contactKeyOf(p, contact))
132
- return null;
133
- if (!C.shaped(doc.payload, { ref: 'string', meaning: 'string' }) || doc.payload.meaning !== 'received')
134
- return null;
135
- if (cls === 'signature') {
136
- // the attestation: verifies under the ack's issuer anchor (= the
137
- // acked document's recipient, our counterpart on the tuple)
138
- if (!(await C.diVerify(doc, doc.issuer)))
139
- return null;
140
- return { ref: doc.payload.ref, threadId: doc.threadId };
141
- }
142
- const { proof, ...rest } = doc;
143
- const k = await ackKey(contact.channel.own, contact.channel.counterpartKa, doc.issuer, doc.recipient);
144
- if ((await hmacU(k, jcs(rest))) !== proof.mac)
145
- return null;
146
- return { ref: doc.payload.ref, threadId: doc.threadId };
147
- }
148
- catch {
149
- return null;
150
- }
151
- }
152
- //# sourceMappingURL=acks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acks.js","sourceRoot":"","sources":["../../src/probe/acks.ts"],"names":[],"mappings":"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","sourcesContent":["// acks — the delivery acknowledgement (Delivery 4.2/4.4, the\n// acknowledgement CLASS rule) for the probe world. The ack DOCUMENT is\n// the real, registered wire form (`delivery-ack/0.1`) in the form the\n// acknowledged payload's class selects: a SIGNED ack (eddsa-jcs-2022\n// under the issuer anchor) for signature-class payloads (the Encounter\n// forms), the DENIABLE MAC ack for designated-verifier payloads (the\n// Visibility forms). The MAC key regime is the normative one —\n// byte-compatible with vectors/delivery-ack.json and\n// lib/test/vectors4.test.mjs: one channel-keyed derivation for every\n// DV-type ack, never the payload's internal MAC structure.\n//\n// k = HKDF-SHA-256(ikm = X25519(pairX_issuer, pairX_recipient),\n// salt = empty, info = \"rltp/v1/delivery/mac/ack/\"\n// || issuerPairAnchor || \"/\" || recipientPairAnchor,\n// 32 bytes; all-zero shared secret rejected)\n// proof = { mac: HMAC-SHA-256 over JCS(document without proof) }\n//\n// Deniable by construction: either relationship party can compute the\n// MAC — for DV payloads the ack is evidence to the sender alone, never\n// an attestation toward anyone else (4.2).\nimport { jcs, makeValidator } from '../core.js'\nimport { SCHEMAS } from '../schemas.js'\nimport * as C from './deps.js'\nimport type { Person } from './deps.js'\n\nconst te = new TextEncoder()\nconst S = globalThis.crypto.subtle\nexport const ACK_TYPE = 'https://real-life.org/trust-tasks/delivery-ack/0.1'\n\nconst V = makeValidator(SCHEMAS)\nconst schemaOk = (file: string, data: any) => V.validate(data, SCHEMAS[file], SCHEMAS[file]).length === 0\nconst hmacU = async (key: Uint8Array, msg: string) => {\n const k = await S.importKey('raw', key, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])\n return 'u' + C.b64uOf(new Uint8Array(await S.sign('HMAC', k, te.encode(msg))))\n}\nconst contactKeyOf = (p: Person, contact: any) => {\n for (const [k, c] of p.contacts) if (c === contact) return k\n return undefined\n}\n\n/** the channel ack key — Section 5's derivation discipline, 4.2's info */\nexport async function ackKey (ownCtx: any, counterpartKa: string, issuerAnchor: string, recipientAnchor: string) {\n const shared = await C.ecdh(ownCtx.x.priv, C.xRawOfMk(counterpartKa)!)\n if (shared.every((b: number) => b === 0)) throw new Error('all-zero X25519 output')\n return C.hkdf(shared, 'rltp/v1/delivery/mac/ack/' + issuerAnchor + '/' + recipientAnchor)\n}\n\n/**\n * Build the sealed deniable ack for a document received on `contact`'s\n * channel. `refDigest` is the acknowledged document's digest (the same\n * digest the completed-effect cache keys on); `threadId` is the acked\n * document's thread — the ack continues it (4.2).\n */\nexport async function buildAck (p: Person, contact: any, refDigest: string, threadId: string, when: number, ent: any = {}) {\n const own = contact.channel.own\n const doc = {\n id: ent.ackId ?? globalThis.crypto.randomUUID(),\n type: ACK_TYPE,\n issuer: own.anchor, // = the acked document's recipient (4.2)\n // the recipient is the counterparty anchor; `ent.recipient` names it\n // when the tuple is not yet inserted (a record-creating effect builds\n // its ack BEFORE the one synchronous commit, Delivery 4.1)\n recipient: ent.recipient ?? contactKeyOf(p, contact),\n threadId,\n issuedAt: C.iso(when),\n payload: { ref: refDigest, meaning: 'received' },\n }\n // the acknowledgement CLASS rule (4.2/4.4): a payload whose authenticity\n // is a TRANSFERABLE SIGNATURE (the Encounter forms: card + credential\n // under DataIntegrityProof) is acknowledged with eddsa-jcs-2022 under\n // the ack's issuer anchor — an attestation; a DESIGNATED-VERIFIER\n // payload with the deniable channel-keyed MAC. `ent.cls` selects.\n if (ent.cls === 'signature') {\n const document = await C.diSign(own, doc, doc.issuedAt)\n return { to: contact, kind: 'delivery-ack/0.1 (signiert, eddsa-jcs-2022 unter dem Issuer-Anker)', env: await C.seal(document, contact.channel.counterpartKa, ent) }\n }\n const k = await ackKey(own, contact.channel.counterpartKa, doc.issuer, doc.recipient!)\n const document = { ...doc, proof: { mac: await hmacU(k, jcs(doc)) } }\n return { to: contact, kind: 'delivery-ack/0.1 (deniabel, MAC unter dem Kanal-Ack-Key)', env: await C.seal(document, contact.channel.counterpartKa, ent) }\n}\n\n/**\n * Verify a received deniable ack (4.2 consistency): MAC-form proof only,\n * MAC under the arrival tuple's ack key, issuer = our counterpart on\n * that tuple, recipient = our own pair anchor. Returns { ref, threadId }\n * or null — the caller matches ref against what it actually sent.\n */\nexport async function verifyAck (p: Person, contact: any, doc: any, cls: 'signature' | 'dv' = 'dv'): Promise<{ ref: string, threadId: string } | null> {\n try {\n if (doc?.type !== ACK_TYPE) return null\n // STUFENORDNUNG (Review 33, B-2): erst das DOKUMENTPROFIL + der\n // recipient (Stufe 5), dann das Payload-Schema (Stufe 7), dann die\n // Typ-Konsistenzregeln (Stufe 8), der MAC zuletzt\n // — Stufe 5: Dokument-Schema, geschlossene Form, Proof-Form,\n // Kalender, recipient = eigener Anker\n if (!schemaOk('rltp-delivery-document.schema.json', doc)) return null\n if (!C.shaped(doc, { id: 'string', issuer: 'string', recipient: 'string', threadId: 'string', issuedAt: 'string', payload: 'object', proof: 'object' })) return null\n // geschlossene Form + das OPTIONALE ceremony-Feld (Review 19, B-2:\n // „ceremony — OPTIONAL, and entirely unconstrained\"); der MAC läuft\n // über JCS(Dokument ohne proof) und deckt es mit ab\n if (Object.keys(doc).some((k) => !['id', 'type', 'issuer', 'recipient', 'threadId', 'issuedAt', 'payload', 'proof', 'ceremony'].includes(k))) return null\n // — Stufe 7 VOR Stufe 8: das Payload-Schema zuerst\n if (!schemaOk('payload-delivery-ack.schema.json', doc.payload)) return null\n // class rule (4.2/4.4, Stufe 8): EXACTLY the form the acknowledged\n // payload's class selects — signature-class payload → SIGNED ack,\n // designated-verifier payload → MAC ack. Every other combination\n // (MAC on a signature-class payload, signature on a DV payload, a\n // hybrid proof) is invalid\n if (cls === 'signature') {\n if (doc.proof.mac !== undefined || doc.proof.type !== 'DataIntegrityProof' || doc.proof.cryptosuite !== 'eddsa-jcs-2022') return null\n if (!C.calOK(doc.proof.created)) return null\n } else {\n if (Object.keys(doc.proof).length !== 1) return null\n if (typeof doc.proof.mac !== 'string' || doc.proof.proofValue !== undefined) return null\n }\n if (!C.calOK(doc.issuedAt)) return null // Kalender-Validität (Review 12, B-3)\n if (doc.recipient !== contact.channel.own.anchor) return null\n // — Stufe 8: enactment-Profilregel (Review 20, B-2: ein Ack\n // umschließt kein Bindungsmaterial), issuer-Bindung, meaning\n if (doc.ceremony?.enactment !== undefined) return null\n if (doc.issuer !== contactKeyOf(p, contact)) return null\n if (!C.shaped(doc.payload, { ref: 'string', meaning: 'string' }) || doc.payload.meaning !== 'received') return null\n if (cls === 'signature') {\n // the attestation: verifies under the ack's issuer anchor (= the\n // acked document's recipient, our counterpart on the tuple)\n if (!(await C.diVerify(doc, doc.issuer))) return null\n return { ref: doc.payload.ref, threadId: doc.threadId }\n }\n const { proof, ...rest } = doc\n const k = await ackKey(contact.channel.own, contact.channel.counterpartKa, doc.issuer, doc.recipient)\n if ((await hmacU(k, jcs(rest))) !== proof.mac) return null\n return { ref: doc.payload.ref, threadId: doc.threadId }\n } catch { return null }\n}\n"]}
@@ -1,20 +0,0 @@
1
- import * as C from './deps.js';
2
- import type { Person } from './deps.js';
3
- export declare const snapshotPriors: (p: Person) => {
4
- own: any[];
5
- counterpart: string[];
6
- };
7
- export declare function buildProbe(p: Person, newKey: string, when: number, ent?: any): Promise<{
8
- to: any;
9
- kind: string;
10
- env: C.Envelope;
11
- }[] | null>;
12
- export declare function receiveContinuity(p: Person, env: any, when: number, ent?: any): Promise<any>;
13
- /**
14
- * The host's producing call for a mapping the receiver still owes
15
- * (review 6, B-3): a transient seal failure during probe/mapping
16
- * handling persists the obligation in contMappingDue; this call — not a
17
- * redelivery, which the freshness rule forbids — builds and returns it.
18
- */
19
- export declare function flushContinuity(p: Person, newKey: string, when: number, ent?: any): Promise<any>;
20
- //# sourceMappingURL=continuity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"continuity.d.ts","sourceRoot":"","sources":["../../src/probe/continuity.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAoBvC,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM;;;CAGtC,CAAA;AAOF,wBAAsB,UAAU,CAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ;;;;YA0DvF;AA8ID,wBAAsB,iBAAiB,CAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ,gBAwDxF;AAmQD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ,gBAgF5F"}