@twin.org/immutable-proof-service 0.0.3-next.1 → 0.0.3-next.11
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.
- package/README.md +1 -1
- package/dist/es/entities/immutableProof.js +19 -3
- package/dist/es/entities/immutableProof.js.map +1 -1
- package/dist/es/immutableProofRoutes.js +39 -23
- package/dist/es/immutableProofRoutes.js.map +1 -1
- package/dist/es/immutableProofService.js +114 -84
- package/dist/es/immutableProofService.js.map +1 -1
- package/dist/es/models/IImmutableProofServiceConstructorOptions.js.map +1 -1
- package/dist/types/entities/immutableProof.d.ts +11 -2
- package/dist/types/immutableProofService.d.ts +3 -2
- package/dist/types/models/IImmutableProofServiceConstructorOptions.d.ts +7 -2
- package/docs/changelog.md +151 -1
- package/docs/examples.md +127 -1
- package/docs/open-api/spec.json +46 -175
- package/docs/reference/classes/ImmutableProof.md +25 -9
- package/docs/reference/classes/ImmutableProofService.md +9 -9
- package/docs/reference/interfaces/IImmutableProofServiceConfig.md +2 -2
- package/docs/reference/interfaces/IImmutableProofServiceConstructorOptions.md +27 -13
- package/locales/en.json +7 -1
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"immutableProofService.js","sourceRoot":"","sources":["../../src/immutableProofService.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EACN,8BAA8B,EAC9B,UAAU,EAGV,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EACN,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,MAAM,EACN,EAAE,EACF,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,GAAG,EACH,UAAU,EAEV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,eAAe,EAA0B,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EACN,6BAA6B,EAE7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,wBAAwB,EAA2B,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EACN,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EAKnB,MAAM,kCAAkC,CAAC;AAM1C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EACN,iCAAiC,EAEjC,MAAM,qCAAqC,CAAC;AAK7C;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACjC;;OAEG;IACI,MAAM,CAAU,UAAU,2BAA2C;IAE5E;;;OAGG;IACK,MAAM,CAAU,UAAU,GAAW,iBAAiB,CAAC;IAE/D;;;OAGG;IACc,OAAO,CAA+B;IAEvD;;;OAGG;IACc,kBAAkB,CAAqB;IAExD;;;OAGG;IACc,aAAa,CAA0C;IAExE;;;OAGG;IACc,kBAAkB,CAA8B;IAEjE;;;OAGG;IACc,wBAAwB,CAA2B;IAEpE;;;OAGG;IACc,kBAAkB,CAAsB;IAEzD;;;OAGG;IACc,qBAAqB,CAAS;IAE/C;;;OAGG;IACc,sBAAsB,CAAS;IAEhD;;;OAGG;IACH,YAAY,OAAkD;QAC7D,IAAI,CAAC,aAAa,GAAG,6BAA6B,CAAC,GAAG,CACrD,OAAO,EAAE,+BAA+B,qBAAqC,CAC7E,CAAC;QAEF,IAAI,CAAC,kBAAkB,GAAG,iCAAiC,CAAC,GAAG,CAC9D,OAAO,EAAE,qBAAqB,IAAI,oBAAoB,CACtD,CAAC;QAEF,IAAI,CAAC,sBAAsB,GAAG,OAAO,EAAE,qBAAqB,IAAI,UAAU,CAAC;QAE3E,IAAI,CAAC,kBAAkB,GAAG,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAEpF,IAAI,CAAC,wBAAwB,GAAG,8BAA8B,CAAC,GAAG,CACjE,OAAO,EAAE,2BAA2B,IAAI,iBAAiB,CACzD,CAAC;QAEF,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,2BAA2B,CAAC;IAC/F,CAAC;IAED;;;OAGG;IACI,SAAS;QACf,OAAO,qBAAqB,CAAC,UAAU,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,KAAK,CAAC,wBAAiC;QACnD,MAAM,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAGjD,iBAAiB,EAAE,gCAAgC,EAAE,kBAAkB,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;YACvF,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,MAAM,CAAC,QAA2B;QAC9C,MAAM,CAAC,MAAM,CAAoB,qBAAqB,CAAC,UAAU,cAAoB,QAAQ,CAAC,CAAC;QAE/F,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;QACxD,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QAE9D,IAAI,CAAC;YACJ,MAAM,kBAAkB,GAAyB,EAAE,CAAC;YACpD,MAAM,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;YAC1D,UAAU,CAAC,iBAAiB,CAC3B,qBAAqB,CAAC,UAAU,cAEhC,kBAAkB,CAClB,CAAC;YAEF,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAElE,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAEvD,MAAM,aAAa,GAAG,YAAY,CAAC,eAAe,CAAS,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YAE3F,2FAA2F;YAC3F,6FAA6F;YAC7F,qBAAqB;YACrB,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YAE7D,MAAM,WAAW,GAAmB;gBACnC,EAAE;gBACF,WAAW;gBACX,aAAa;gBACb,eAAe;aACf,CAAC;YACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAE7D,MAAM,gBAAgB,GAA+B;gBACpD,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC;gBAChD,qBAAqB,EAAE,IAAI,CAAC,sBAAsB;gBAClD,oBAAoB,EAAE,IAAI,CAAC,qBAAqB;gBAChD,QAAQ,EAAE,cAA8C;aACxD,CAAC;YAEF,MAAM,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;YAEhF,OAAO,IAAI,GAAG,CAAC,qBAAqB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5F,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,GAAG,CAAC,EAAU;QAC1B,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,UAAU,QAAc,EAAE,CAAC,CAAC;QAErE,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE1C,IAAI,SAAS,CAAC,mBAAmB,EAAE,KAAK,qBAAqB,CAAC,UAAU,EAAE,CAAC;YAC1E,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,mBAAmB,EAAE;gBAC7E,SAAS,EAAE,qBAAqB,CAAC,UAAU;gBAC3C,EAAE;aACF,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAE7D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;YACzF,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACzF,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,MAAM,CAAC,EAAU;QAC7B,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,UAAU,QAAc,EAAE,CAAC,CAAC;QAErE,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE1C,IAAI,SAAS,CAAC,mBAAmB,EAAE,KAAK,qBAAqB,CAAC,UAAU,EAAE,CAAC;YAC1E,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,mBAAmB,EAAE;gBAC7E,SAAS,EAAE,qBAAqB,CAAC,UAAU;gBAC3C,EAAE;aACF,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAE/D,OAAO;gBACN,UAAU,EAAE,sBAAsB,CAAC,WAAW;gBAC9C,IAAI,EAAE,mBAAmB,CAAC,0BAA0B;gBACpD,QAAQ;gBACR,OAAO;aACP,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5F,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,gBAAgB,CAAC,EAAU;QACvC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,UAAU,QAAc,EAAE,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;QACxD,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QAE9D,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE1C,IAAI,SAAS,CAAC,mBAAmB,EAAE,KAAK,qBAAqB,CAAC,UAAU,EAAE,CAAC;YAC1E,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,mBAAmB,EAAE;gBAC7E,SAAS,EAAE,qBAAqB,CAAC,UAAU;gBAC3C,EAAE;aACF,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE5D,IAAI,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,aAAa,CAAC,qBAAqB,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CACnC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,EACtC,YAAY,CAAC,mBAAmB,CAChC,CAAC;gBACF,OAAO,YAAY,CAAC,mBAAmB,CAAC;gBACxC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC5C,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,YAAY,CACrB,qBAAqB,CAAC,UAAU,EAChC,wBAAwB,EACxB,SAAS,EACT,KAAK,CACL,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACK,qBAAqB,CAAC,UAA6B;QAC1D,OAAO,UAAU,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtH,CAAC;IAED;;;;;OAKG;IACK,mBAAmB,CAAC,WAA2B;QACtD,MAAM,MAAM,GAAoB;YAC/B,UAAU,EAAE,CAAC,sBAAsB,CAAC,WAAW,EAAE,sBAAsB,CAAC,iBAAiB,CAAC;YAC1F,IAAI,EAAE,mBAAmB,CAAC,cAAc;YACxC,EAAE,EAAE,WAAW,CAAC,EAAE;YAClB,aAAa,EAAE,WAAW,CAAC,aAAa;YACxC,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;SACpD,CAAC;QAEF,OAAO,MAAM,CAAC;IACf,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,YAAY,CACzB,IAA4E;QAE5E,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7F,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEvE,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5B,MAAM,cAAc,GAAoB,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;gBAE9E,+DAA+D;gBAC/D,cAAc,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,eAAe,CAC3D,CAAC,sBAAsB,CAAC,WAAW,EAAE,sBAAsB,CAAC,iBAAiB,CAAC,EAC9E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CACE,CAAC;gBACjC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBACzC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBAE9D,IAAI,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClD,WAAW,CAAC,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;gBACxD,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBAE5F,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAClE,IAAI,CAAC,OAAO,CAAC,QAAQ,EACrB,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAC/B,CAAC;gBAEF,WAAW,CAAC,mBAAmB,GAAG,sBAAsB,CAAC,EAAE,CAAC;gBAE5D,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAE1C,MAAM,IAAI,CAAC,kBAAkB,EAAE,OAAO,CACrC,oBAAoB,CAAC,YAAY,EACjC,EAAE,EAAE,EAAE,IAAI,GAAG,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAClF,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,WAAW,CACxB,EAAU,EACV,MAAe;QAMf,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE1D,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,aAAa,CAAC,qBAAqB,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,OAAO,GAAsC,qBAAqB,CAAC,SAAS,CAAC;QAEjF,IAAI,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACrD,OAAO,GAAG,qBAAqB,CAAC,YAAY,CAAC;YAC7C,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;YAE3F,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,WAAW,GAAG,YAAY,CAAC,SAAS,CAAkB,eAAe,CAAC,IAAI,CAAC,CAAC;gBAE5E,MAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,CAAiC,CAAC;gBACzF,WAAW,CAAC,gBAAgB,GAAG,eAAe,CAAC,OAAO,CAAC;gBACvD,WAAW,CAAC,mBAAmB,GAAG,WAAW,CAAC,mBAAmB,CAAC;gBAElE,yEAAyE;gBACzE,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC3D,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC/B,WAAW,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,eAAe,CACxD,WAAW,CAAC,UAAU,CAAC,EACvB,cAAc,CACiB,CAAC;gBAClC,CAAC;gBAED,IAAI,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5C,IAAI,WAAW,CAAC,KAAK,CAAC,WAAW,KAAK,eAAe,CAAC,YAAY,EAAE,CAAC;wBACpE,OAAO,GAAG,qBAAqB,CAAC,mBAAmB,CAAC;oBACrD,CAAC;yBAAM,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,kBAAkB,EAAE,CAAC;wBACrE,OAAO,GAAG,qBAAqB,CAAC,iBAAiB,CAAC;oBACnD,CAAC;yBAAM,CAAC;wBACP,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAC3D,gBAAgB,EAChB,WAAW,CAAC,KAAK,CACjB,CAAC;wBAEF,IAAI,UAAU,EAAE,CAAC;4BAChB,QAAQ,GAAG,IAAI,CAAC;4BAChB,OAAO,GAAG,SAAS,CAAC;wBACrB,CAAC;6BAAM,CAAC;4BACP,OAAO,GAAG,qBAAqB,CAAC,iBAAiB,CAAC;wBACnD,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO;YACN,cAAc,EAAE,WAAW;YAC3B,QAAQ;YACR,OAAO;SACP,CAAC;IACH,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tBackgroundTaskConnectorFactory,\n\tTaskStatus,\n\ttype IBackgroundTask,\n\ttype IBackgroundTaskConnector\n} from \"@twin.org/background-task-models\";\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tComponentFactory,\n\tConverter,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tJsonHelper,\n\tNotFoundError,\n\tObjectHelper,\n\tRandomHelper,\n\tUrn,\n\tValidation,\n\ttype IValidationFailure\n} from \"@twin.org/core\";\nimport { Sha256 } from \"@twin.org/crypto\";\nimport { JsonLdHelper, JsonLdProcessor, type IJsonLdNodeObject } from \"@twin.org/data-json-ld\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport type { IEventBusComponent } from \"@twin.org/event-bus-models\";\nimport { IdentityConnectorFactory, type IIdentityConnector } from \"@twin.org/identity-models\";\nimport {\n\tImmutableProofContexts,\n\tImmutableProofFailure,\n\tImmutableProofTopics,\n\tImmutableProofTypes,\n\ttype IImmutableProof,\n\ttype IImmutableProofComponent,\n\ttype IImmutableProofEventBusProofCreated,\n\ttype IImmutableProofVerification\n} from \"@twin.org/immutable-proof-models\";\nimport type {\n\tIImmutableProofTaskPayload,\n\tIImmutableProofTaskResult\n} from \"@twin.org/immutable-proof-task\";\nimport { nameof, nameofKebabCase } from \"@twin.org/nameof\";\nimport { DidCryptoSuites, ProofTypes } from \"@twin.org/standards-w3c-did\";\nimport {\n\tVerifiableStorageConnectorFactory,\n\ttype IVerifiableStorageConnector\n} from \"@twin.org/verifiable-storage-models\";\nimport type { ImmutableProof } from \"./entities/immutableProof.js\";\nimport type { IImmutableProofServiceConfig } from \"./models/IImmutableProofServiceConfig.js\";\nimport type { IImmutableProofServiceConstructorOptions } from \"./models/IImmutableProofServiceConstructorOptions.js\";\n\n/**\n * Class for performing immutable proof operations.\n */\nexport class ImmutableProofService implements IImmutableProofComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<ImmutableProofService>();\n\n\t/**\n\t * The namespace for the service.\n\t * @internal\n\t */\n\tprivate static readonly _NAMESPACE: string = \"immutable-proof\";\n\n\t/**\n\t * The configuration for the connector.\n\t * @internal\n\t */\n\tprivate readonly _config: IImmutableProofServiceConfig;\n\n\t/**\n\t * The identity connector.\n\t * @internal\n\t */\n\tprivate readonly _identityConnector: IIdentityConnector;\n\n\t/**\n\t * The entity storage for proofs.\n\t * @internal\n\t */\n\tprivate readonly _proofStorage: IEntityStorageConnector<ImmutableProof>;\n\n\t/**\n\t * The verifiable storage for the credentials.\n\t * @internal\n\t */\n\tprivate readonly _verifiableStorage: IVerifiableStorageConnector;\n\n\t/**\n\t * The background task connector.\n\t * @internal\n\t */\n\tprivate readonly _backgroundTaskConnector: IBackgroundTaskConnector;\n\n\t/**\n\t * The event bus component.\n\t * @internal\n\t */\n\tprivate readonly _eventBusComponent?: IEventBusComponent;\n\n\t/**\n\t * The verification method id to use for the proofs.\n\t * @internal\n\t */\n\tprivate readonly _verificationMethodId: string;\n\n\t/**\n\t * The identity connector type.\n\t * @internal\n\t */\n\tprivate readonly _identityConnectorType: string;\n\n\t/**\n\t * Create a new instance of ImmutableProofService.\n\t * @param options The dependencies for the immutable proof connector.\n\t */\n\tconstructor(options?: IImmutableProofServiceConstructorOptions) {\n\t\tthis._proofStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.immutableProofEntityStorageType ?? nameofKebabCase<ImmutableProof>()\n\t\t);\n\n\t\tthis._verifiableStorage = VerifiableStorageConnectorFactory.get(\n\t\t\toptions?.verifiableStorageType ?? \"verifiable-storage\"\n\t\t);\n\n\t\tthis._identityConnectorType = options?.identityConnectorType ?? \"identity\";\n\n\t\tthis._identityConnector = IdentityConnectorFactory.get(this._identityConnectorType);\n\n\t\tthis._backgroundTaskConnector = BackgroundTaskConnectorFactory.get(\n\t\t\toptions?.backgroundTaskConnectorType ?? \"background-task\"\n\t\t);\n\n\t\tif (Is.stringValue(options?.eventBusComponentType)) {\n\t\t\tthis._eventBusComponent = ComponentFactory.get(options.eventBusComponentType);\n\t\t}\n\n\t\tthis._config = options?.config ?? {};\n\t\tthis._verificationMethodId = this._config.verificationMethodId ?? \"immutable-proof-assertion\";\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn ImmutableProofService.CLASS_NAME;\n\t}\n\n\t/**\n\t * The component needs to be started when the node is initialized.\n\t * @param nodeLoggingComponentType The node logging component type.\n\t * @returns Nothing.\n\t */\n\tpublic async start(nodeLoggingComponentType?: string): Promise<void> {\n\t\tawait this._backgroundTaskConnector.registerHandler<\n\t\t\tIImmutableProofTaskPayload,\n\t\t\tIImmutableProofTaskResult\n\t\t>(\"immutable-proof\", \"@twin.org/immutable-proof-task\", \"processProofTask\", async task => {\n\t\t\tawait this.finaliseTask(task);\n\t\t});\n\t}\n\n\t/**\n\t * Create a new proof.\n\t * @param document The document to create the proof for.\n\t * @returns The id of the new proof.\n\t */\n\tpublic async create(document: IJsonLdNodeObject): Promise<string> {\n\t\tGuards.object<IJsonLdNodeObject>(ImmutableProofService.CLASS_NAME, nameof(document), document);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\t\ttry {\n\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\tawait JsonLdHelper.validate(document, validationFailures);\n\t\t\tValidation.asValidationError(\n\t\t\t\tImmutableProofService.CLASS_NAME,\n\t\t\t\tnameof(document),\n\t\t\t\tvalidationFailures\n\t\t\t);\n\n\t\t\tconst id = Converter.bytesToHex(RandomHelper.generate(32), false);\n\n\t\t\tconst dateCreated = new Date(Date.now()).toISOString();\n\n\t\t\tconst proofObjectId = ObjectHelper.extractProperty<string>(document, [\"@id\", \"id\"], false);\n\n\t\t\t// We don't want to store the whole document in the immutable proof, as this could be large\n\t\t\t// and also reveal information that should not be stored in the proof so we hash the document\n\t\t\t// and store the hash\n\t\t\tconst proofObjectHash = this.calculateDocumentHash(document);\n\n\t\t\tconst proofEntity: ImmutableProof = {\n\t\t\t\tid,\n\t\t\t\tdateCreated,\n\t\t\t\tproofObjectId,\n\t\t\t\tproofObjectHash\n\t\t\t};\n\t\t\tawait this._proofStorage.set(proofEntity);\n\n\t\t\tconst immutableProof = this.proofEntityToJsonLd(proofEntity);\n\n\t\t\tconst proofTaskPayload: IImmutableProofTaskPayload = {\n\t\t\t\tproofId: id,\n\t\t\t\tidentity: contextIds[ContextIdKeys.Organization],\n\t\t\t\tidentityConnectorType: this._identityConnectorType,\n\t\t\t\tverificationMethodId: this._verificationMethodId,\n\t\t\t\tdocument: immutableProof as unknown as IJsonLdNodeObject\n\t\t\t};\n\n\t\t\tawait this._backgroundTaskConnector.create(\"immutable-proof\", proofTaskPayload);\n\n\t\t\treturn new Urn(ImmutableProofService._NAMESPACE, id).toString();\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"createFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Get a proof.\n\t * @param id The id of the proof to get.\n\t * @returns The proof.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async get(id: string): Promise<IImmutableProof> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst { immutableProof } = await this.internalGet(id, false);\n\n\t\t\tconst result = await JsonLdProcessor.compact(immutableProof, immutableProof[\"@context\"]);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Verify a proof.\n\t * @param id The id of the proof to verify.\n\t * @returns The result of the verification and any failures.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async verify(id: string): Promise<IImmutableProofVerification> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst { verified, failure } = await this.internalGet(id, true);\n\n\t\t\treturn {\n\t\t\t\t\"@context\": ImmutableProofContexts.ContextRoot,\n\t\t\t\ttype: ImmutableProofTypes.ImmutableProofVerification,\n\t\t\t\tverified,\n\t\t\t\tfailure\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"verifyFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Remove the verifiable storage for the proof.\n\t * @param id The id of the proof to remove the storage from.\n\t * @returns Nothing.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async removeVerifiable(id: string): Promise<void> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\t\t\tconst streamEntity = await this._proofStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(ImmutableProofService.CLASS_NAME, \"proofNotFound\", id);\n\t\t\t}\n\n\t\t\tif (Is.stringValue(streamEntity.verifiableStorageId)) {\n\t\t\t\tawait this._verifiableStorage.remove(\n\t\t\t\t\tcontextIds[ContextIdKeys.Organization],\n\t\t\t\t\tstreamEntity.verifiableStorageId\n\t\t\t\t);\n\t\t\t\tdelete streamEntity.verifiableStorageId;\n\t\t\t\tawait this._proofStorage.set(streamEntity);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tImmutableProofService.CLASS_NAME,\n\t\t\t\t\"removeVerifiableFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Calculate the object hash.\n\t * @param object The entry to calculate the hash for.\n\t * @returns The hash.\n\t * @internal\n\t */\n\tprivate calculateDocumentHash(nodeObject: IJsonLdNodeObject): string {\n\t\treturn `sha256:${Converter.bytesToBase64(Sha256.sum256(ObjectHelper.toBytes(JsonHelper.canonicalize(nodeObject))))}`;\n\t}\n\n\t/**\n\t * Map the stream entity to a model.\n\t * @param proofEntity The stream entity.\n\t * @returns The model.\n\t * @internal\n\t */\n\tprivate proofEntityToJsonLd(proofEntity: ImmutableProof): IImmutableProof {\n\t\tconst jsonLd: IImmutableProof = {\n\t\t\t\"@context\": [ImmutableProofContexts.ContextRoot, ImmutableProofContexts.ContextRootCommon],\n\t\t\ttype: ImmutableProofTypes.ImmutableProof,\n\t\t\tid: proofEntity.id,\n\t\t\tproofObjectId: proofEntity.proofObjectId,\n\t\t\tproofObjectHash: proofEntity.proofObjectHash,\n\t\t\tverifiableStorageId: proofEntity.verifiableStorageId\n\t\t};\n\n\t\treturn jsonLd;\n\t}\n\n\t/**\n\t * Process a proof.\n\t * @param proofEntity The proof entity to process.\n\t * @internal\n\t */\n\tprivate async finaliseTask(\n\t\ttask: IBackgroundTask<IImmutableProofTaskPayload, IImmutableProofTaskResult>\n\t): Promise<void> {\n\t\tif (task.status === TaskStatus.Success && Is.object(task.payload) && Is.object(task.result)) {\n\t\t\tconst proofEntity = await this._proofStorage.get(task.payload.proofId);\n\n\t\t\tif (Is.object(proofEntity)) {\n\t\t\t\tconst immutableProof: IImmutableProof = this.proofEntityToJsonLd(proofEntity);\n\n\t\t\t\t// As we are adding the proof to the data we update its context\n\t\t\t\timmutableProof[\"@context\"] = JsonLdProcessor.combineContexts(\n\t\t\t\t\t[ImmutableProofContexts.ContextRoot, ImmutableProofContexts.ContextRootCommon],\n\t\t\t\t\ttask.result.proof[\"@context\"]\n\t\t\t\t) as IImmutableProof[\"@context\"];\n\t\t\t\timmutableProof.proof = task.result.proof;\n\t\t\t\tObjectHelper.propertyDelete(immutableProof.proof, \"@context\");\n\n\t\t\t\tif (Is.stringValue(immutableProof.proof.created)) {\n\t\t\t\t\tproofEntity.dateCreated = immutableProof.proof.created;\n\t\t\t\t}\n\n\t\t\t\tconst compacted = await JsonLdProcessor.compact(immutableProof, immutableProof[\"@context\"]);\n\n\t\t\t\tconst verifiableCreateResult = await this._verifiableStorage.create(\n\t\t\t\t\ttask.payload.identity,\n\t\t\t\t\tObjectHelper.toBytes(compacted)\n\t\t\t\t);\n\n\t\t\t\tproofEntity.verifiableStorageId = verifiableCreateResult.id;\n\n\t\t\t\tawait this._proofStorage.set(proofEntity);\n\n\t\t\t\tawait this._eventBusComponent?.publish<IImmutableProofEventBusProofCreated>(\n\t\t\t\t\tImmutableProofTopics.ProofCreated,\n\t\t\t\t\t{ id: new Urn(ImmutableProofService._NAMESPACE, task.payload.proofId).toString() }\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Verify a proof.\n\t * @param id The id of the proof to verify.\n\t * @param verify Validate the proof.\n\t * @returns The result of the verification and any failures.\n\t * @throws NotFoundError if the proof is not found.\n\t * @internal\n\t */\n\tprivate async internalGet(\n\t\tid: string,\n\t\tverify: boolean\n\t): Promise<{\n\t\tverified: boolean;\n\t\tfailure?: ImmutableProofFailure;\n\t\timmutableProof: IImmutableProof;\n\t}> {\n\t\tconst urnParsed = Urn.fromValidString(id);\n\t\tconst proofId = urnParsed.namespaceSpecific(0);\n\t\tconst proofEntity = await this._proofStorage.get(proofId);\n\n\t\tif (Is.empty(proofEntity)) {\n\t\t\tthrow new NotFoundError(ImmutableProofService.CLASS_NAME, \"proofNotFound\", id);\n\t\t}\n\n\t\tlet proofJsonLd = this.proofEntityToJsonLd(proofEntity);\n\t\tlet verified = false;\n\t\tlet failure: ImmutableProofFailure | undefined = ImmutableProofFailure.NotIssued;\n\n\t\tif (Is.stringValue(proofEntity.verifiableStorageId)) {\n\t\t\tfailure = ImmutableProofFailure.ProofMissing;\n\t\t\tconst immutableResult = await this._verifiableStorage.get(proofEntity.verifiableStorageId);\n\n\t\t\tif (Is.uint8Array(immutableResult.data)) {\n\t\t\t\tproofJsonLd = ObjectHelper.fromBytes<IImmutableProof>(immutableResult.data);\n\n\t\t\t\tconst unsecureDocument = ObjectHelper.clone(proofJsonLd) as unknown as IJsonLdNodeObject;\n\t\t\t\tproofJsonLd.immutableReceipt = immutableResult.receipt;\n\t\t\t\tproofJsonLd.verifiableStorageId = proofEntity.verifiableStorageId;\n\n\t\t\t\t// As we are adding the receipt to the data we update the JSON-LD context\n\t\t\t\tconst receiptContext = immutableResult.receipt[\"@context\"];\n\t\t\t\tif (!Is.empty(receiptContext)) {\n\t\t\t\t\tproofJsonLd[\"@context\"] = JsonLdProcessor.combineContexts(\n\t\t\t\t\t\tproofJsonLd[\"@context\"],\n\t\t\t\t\t\treceiptContext\n\t\t\t\t\t) as IImmutableProof[\"@context\"];\n\t\t\t\t}\n\n\t\t\t\tif (verify && Is.object(proofJsonLd.proof)) {\n\t\t\t\t\tif (proofJsonLd.proof.cryptosuite !== DidCryptoSuites.EdDSAJcs2022) {\n\t\t\t\t\t\tfailure = ImmutableProofFailure.CryptoSuiteMismatch;\n\t\t\t\t\t} else if (proofJsonLd.proof.type !== ProofTypes.DataIntegrityProof) {\n\t\t\t\t\t\tfailure = ImmutableProofFailure.ProofTypeMismatch;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst isVerified = await this._identityConnector.verifyProof(\n\t\t\t\t\t\t\tunsecureDocument,\n\t\t\t\t\t\t\tproofJsonLd.proof\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (isVerified) {\n\t\t\t\t\t\t\tverified = true;\n\t\t\t\t\t\t\tfailure = undefined;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfailure = ImmutableProofFailure.SignatureMismatch;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\timmutableProof: proofJsonLd,\n\t\t\tverified,\n\t\t\tfailure\n\t\t};\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"immutableProofService.js","sourceRoot":"","sources":["../../src/immutableProofService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tTaskStatus,\n\ttype IBackgroundTask,\n\ttype IBackgroundTaskComponent\n} from \"@twin.org/background-task-models\";\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tBaseError,\n\tComponentFactory,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tJsonHelper,\n\tNotFoundError,\n\tObjectHelper,\n\tRandomHelper,\n\tUrn,\n\tValidation,\n\ttype IValidationFailure\n} from \"@twin.org/core\";\nimport { IntegrityAlgorithm, IntegrityHelper } from \"@twin.org/crypto\";\nimport { JsonLdHelper, JsonLdProcessor, type IJsonLdNodeObject } from \"@twin.org/data-json-ld\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport type { IEventBusComponent } from \"@twin.org/event-bus-models\";\nimport { IdentityConnectorFactory, type IIdentityConnector } from \"@twin.org/identity-models\";\nimport {\n\tImmutableProofContexts,\n\tImmutableProofFailure,\n\tImmutableProofTopics,\n\tImmutableProofTypes,\n\ttype IImmutableProof,\n\ttype IImmutableProofComponent,\n\ttype IImmutableProofEventBusProofCreated,\n\ttype IImmutableProofVerification\n} from \"@twin.org/immutable-proof-models\";\nimport type {\n\tIImmutableProofTaskPayload,\n\tIImmutableProofTaskResult\n} from \"@twin.org/immutable-proof-task\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof, nameofKebabCase } from \"@twin.org/nameof\";\nimport {\n\tDidContexts,\n\tDidTypes,\n\tVerifiableCredentialHelper,\n\ttype IDidVerifiableCredential,\n\ttype IProof\n} from \"@twin.org/standards-w3c-did\";\nimport {\n\tVerifiableStorageConnectorFactory,\n\ttype IVerifiableStorageConnector\n} from \"@twin.org/verifiable-storage-models\";\nimport type { ImmutableProof } from \"./entities/immutableProof.js\";\nimport type { IImmutableProofServiceConfig } from \"./models/IImmutableProofServiceConfig.js\";\nimport type { IImmutableProofServiceConstructorOptions } from \"./models/IImmutableProofServiceConstructorOptions.js\";\n\n/**\n * Class for performing immutable proof operations.\n */\nexport class ImmutableProofService implements IImmutableProofComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<ImmutableProofService>();\n\n\t/**\n\t * The namespace for the service.\n\t * @internal\n\t */\n\tprivate static readonly _NAMESPACE: string = \"immutable-proof\";\n\n\t/**\n\t * The configuration for the connector.\n\t * @internal\n\t */\n\tprivate readonly _config: IImmutableProofServiceConfig;\n\n\t/**\n\t * The logging component.\n\t * @internal\n\t */\n\tprivate readonly _logging?: ILoggingComponent;\n\n\t/**\n\t * The identity connector.\n\t * @internal\n\t */\n\tprivate readonly _identityConnector: IIdentityConnector;\n\n\t/**\n\t * The entity storage for proofs.\n\t * @internal\n\t */\n\tprivate readonly _proofStorage: IEntityStorageConnector<ImmutableProof>;\n\n\t/**\n\t * The verifiable storage for the credentials.\n\t * @internal\n\t */\n\tprivate readonly _verifiableStorage: IVerifiableStorageConnector;\n\n\t/**\n\t * The background task component.\n\t * @internal\n\t */\n\tprivate readonly _backgroundTaskComponent: IBackgroundTaskComponent;\n\n\t/**\n\t * The event bus component.\n\t * @internal\n\t */\n\tprivate readonly _eventBusComponent?: IEventBusComponent;\n\n\t/**\n\t * The verification method id to use for the proofs.\n\t * @internal\n\t */\n\tprivate readonly _verificationMethodId: string;\n\n\t/**\n\t * The identity connector type.\n\t * @internal\n\t */\n\tprivate readonly _identityConnectorType: string;\n\n\t/**\n\t * Create a new instance of ImmutableProofService.\n\t * @param options The dependencies for the immutable proof connector.\n\t */\n\tconstructor(options?: IImmutableProofServiceConstructorOptions) {\n\t\tthis._proofStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.immutableProofEntityStorageType ?? nameofKebabCase<ImmutableProof>()\n\t\t);\n\n\t\tthis._verifiableStorage = VerifiableStorageConnectorFactory.get(\n\t\t\toptions?.verifiableStorageType ?? \"verifiable-storage\"\n\t\t);\n\n\t\tthis._logging = ComponentFactory.getIfExists<ILoggingComponent>(\n\t\t\toptions?.loggingComponentType ?? \"logging\"\n\t\t);\n\n\t\tthis._identityConnectorType = options?.identityConnectorType ?? \"identity\";\n\n\t\tthis._identityConnector = IdentityConnectorFactory.get(this._identityConnectorType);\n\n\t\tthis._backgroundTaskComponent = ComponentFactory.get(\n\t\t\toptions?.backgroundTaskComponentType ?? \"background-task\"\n\t\t);\n\n\t\tif (Is.stringValue(options?.eventBusComponentType)) {\n\t\t\tthis._eventBusComponent = ComponentFactory.get(options.eventBusComponentType);\n\t\t}\n\n\t\tthis._config = options?.config ?? {};\n\t\tthis._verificationMethodId = this._config.verificationMethodId ?? \"immutable-proof-assertion\";\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn ImmutableProofService.CLASS_NAME;\n\t}\n\n\t/**\n\t * The component needs to be started when the node is initialized.\n\t * @param nodeLoggingComponentType The node logging component type.\n\t * @returns Nothing.\n\t */\n\tpublic async start(nodeLoggingComponentType?: string): Promise<void> {\n\t\tawait this._backgroundTaskComponent.registerHandler<\n\t\t\tIImmutableProofTaskPayload,\n\t\t\tIImmutableProofTaskResult\n\t\t>(\"immutable-proof\", \"@twin.org/immutable-proof-task\", \"processProofTask\", async task => {\n\t\t\tawait this.finaliseTask(task);\n\t\t});\n\t}\n\n\t/**\n\t * Create a new proof.\n\t * @param document The document to create the proof for.\n\t * @returns The id of the new proof.\n\t */\n\tpublic async create(document: IJsonLdNodeObject): Promise<string> {\n\t\tGuards.object<IJsonLdNodeObject>(ImmutableProofService.CLASS_NAME, nameof(document), document);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\t\ttry {\n\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\tawait JsonLdHelper.validate(document, validationFailures);\n\t\t\tValidation.asValidationError(\n\t\t\t\tImmutableProofService.CLASS_NAME,\n\t\t\t\tnameof(document),\n\t\t\t\tvalidationFailures\n\t\t\t);\n\n\t\t\tconst id = RandomHelper.generateUuidV7(\"compact\");\n\n\t\t\tconst dateCreated = new Date(Date.now()).toISOString();\n\n\t\t\tconst proofObjectId = ObjectHelper.extractProperty<string>(document, [\"@id\", \"id\"], false);\n\n\t\t\t// We don't want to store the whole document in the immutable proof, as this could be large\n\t\t\t// and also reveal information that should not be stored in the proof so we hash the document\n\t\t\t// and store the hash\n\t\t\tconst proofObjectIntegrity = IntegrityHelper.generate(\n\t\t\t\tIntegrityAlgorithm.Sha256,\n\t\t\t\tObjectHelper.toBytes(JsonHelper.canonicalize(document))\n\t\t\t);\n\n\t\t\tconst credentialSubject: IImmutableProof = {\n\t\t\t\t\"@context\": [ImmutableProofContexts.Context, ImmutableProofContexts.ContextCommon],\n\t\t\t\ttype: ImmutableProofTypes.ImmutableProof,\n\t\t\t\tid: proofObjectId,\n\t\t\t\tproofIntegrity: proofObjectIntegrity\n\t\t\t};\n\n\t\t\tconst proofEntity: ImmutableProof = {\n\t\t\t\tid,\n\t\t\t\torganizationId: contextIds[ContextIdKeys.Organization],\n\t\t\t\tdateCreated,\n\t\t\t\tproofObjectId,\n\t\t\t\tproofObjectIntegrity\n\t\t\t};\n\t\t\tawait this._proofStorage.set(proofEntity);\n\n\t\t\tconst fullId = new Urn(ImmutableProofService._NAMESPACE, id).toString();\n\n\t\t\tconst proofTaskPayload: IImmutableProofTaskPayload = {\n\t\t\t\tproofId: fullId,\n\t\t\t\tidentity: contextIds[ContextIdKeys.Organization],\n\t\t\t\tidentityConnectorType: this._identityConnectorType,\n\t\t\t\tverificationMethodId: this._verificationMethodId,\n\t\t\t\tcredentialSubject\n\t\t\t};\n\n\t\t\tawait this._backgroundTaskComponent.create(\"immutable-proof\", proofTaskPayload, {\n\t\t\t\tretainFor: 5000\n\t\t\t});\n\n\t\t\treturn fullId;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"createFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Get a proof.\n\t * @param id The id of the proof to get.\n\t * @returns The proof.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async get(id: string): Promise<IDidVerifiableCredential> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst { verifiableCredential } = await this.internalGet(id, false);\n\n\t\t\tconst result = await JsonLdProcessor.compact(\n\t\t\t\tverifiableCredential,\n\t\t\t\tverifiableCredential[\"@context\"]\n\t\t\t);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Verify a proof.\n\t * @param id The id of the proof to verify.\n\t * @returns The result of the verification and any failures.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async verify(id: string): Promise<IImmutableProofVerification> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst { verified, failure } = await this.internalGet(id, true);\n\n\t\t\treturn {\n\t\t\t\t\"@context\": ImmutableProofContexts.Context,\n\t\t\t\ttype: ImmutableProofTypes.ImmutableProofVerification,\n\t\t\t\tverified,\n\t\t\t\tfailure\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"verifyFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Remove the verifiable storage for the proof.\n\t * @param id The id of the proof to remove the storage from.\n\t * @returns Nothing.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async removeVerifiable(id: string): Promise<void> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\t\t\tconst streamEntity = await this._proofStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(ImmutableProofService.CLASS_NAME, \"proofNotFound\", id);\n\t\t\t}\n\n\t\t\tif (Is.stringValue(streamEntity.verifiableStorageId)) {\n\t\t\t\tawait this._verifiableStorage.remove(\n\t\t\t\t\tcontextIds[ContextIdKeys.Organization],\n\t\t\t\t\tstreamEntity.verifiableStorageId\n\t\t\t\t);\n\t\t\t\tdelete streamEntity.verifiableStorageId;\n\t\t\t\tawait this._proofStorage.set(streamEntity);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tImmutableProofService.CLASS_NAME,\n\t\t\t\t\"removeVerifiableFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Process a proof.\n\t * @param proofEntity The proof entity to process.\n\t * @internal\n\t */\n\tprivate async finaliseTask(\n\t\ttask: IBackgroundTask<IImmutableProofTaskPayload, IImmutableProofTaskResult>\n\t): Promise<void> {\n\t\tif (Is.object(task.payload)) {\n\t\t\tif (task.status === TaskStatus.Success && Is.object(task.result)) {\n\t\t\t\tconst urnParsed = Urn.fromValidString(task.payload.proofId);\n\t\t\t\tconst proofId = urnParsed.namespaceSpecific(0);\n\n\t\t\t\tconst proofEntity = await this._proofStorage.get(proofId);\n\n\t\t\t\tif (Is.object(proofEntity)) {\n\t\t\t\t\t// Extract the proof from the task result vc\n\t\t\t\t\tconst proof: IProof = task.result.verifiableCredential.proof as IProof;\n\n\t\t\t\t\t// The proof context is always the last one in the generated vc contexts\n\t\t\t\t\t// as that was the last operation performed, so we can extract it and use it for the proof itself\n\t\t\t\t\tproof[\"@context\"] = task.result.verifiableCredential[\"@context\"][\n\t\t\t\t\t\ttask.result.verifiableCredential[\"@context\"].length - 1\n\t\t\t\t\t] as IProof[\"@context\"];\n\n\t\t\t\t\t// Remove the verification method so that we reduce the linkage between\n\t\t\t\t\t// the proof and the identity that issued it, we will reinstate on verification\n\t\t\t\t\tdelete proof.verificationMethod;\n\n\t\t\t\t\t// Store the proof in the verifiable storage and get the id of where it is stored so we can retrieve it later\n\t\t\t\t\tconst verifiableCreateResult = await this._verifiableStorage.create(\n\t\t\t\t\t\ttask.payload.identity,\n\t\t\t\t\t\tObjectHelper.toBytes(proof)\n\t\t\t\t\t);\n\n\t\t\t\t\t// Update the proof entity with the verifiable storage id so we can retrieve it later\n\t\t\t\t\tproofEntity.verifiableStorageId = verifiableCreateResult.id;\n\n\t\t\t\t\t// Update the date created if we can extract it from the VC\n\t\t\t\t\tconst validFrom = VerifiableCredentialHelper.getValidFrom(\n\t\t\t\t\t\ttask.result.verifiableCredential\n\t\t\t\t\t);\n\t\t\t\t\tif (Is.stringValue(validFrom)) {\n\t\t\t\t\t\tproofEntity.dateCreated = validFrom;\n\t\t\t\t\t}\n\t\t\t\t\tproofEntity.vcContext = VerifiableCredentialHelper.getContext(\n\t\t\t\t\t\ttask.result.verifiableCredential\n\t\t\t\t\t);\n\n\t\t\t\t\tawait this._proofStorage.set(proofEntity);\n\n\t\t\t\t\tawait this._logging?.log({\n\t\t\t\t\t\tsource: ImmutableProofService.CLASS_NAME,\n\t\t\t\t\t\tlevel: \"info\",\n\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\tmessage: \"createdProof\",\n\t\t\t\t\t\tdata: { proofId: task.payload.proofId }\n\t\t\t\t\t});\n\n\t\t\t\t\tawait this._eventBusComponent?.publish<IImmutableProofEventBusProofCreated>(\n\t\t\t\t\t\tImmutableProofTopics.ProofCreated,\n\t\t\t\t\t\t{ id: new Urn(ImmutableProofService._NAMESPACE, task.payload.proofId).toString() }\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (task.status === TaskStatus.Failed) {\n\t\t\t\tawait this._logging?.log({\n\t\t\t\t\tsource: ImmutableProofService.CLASS_NAME,\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tmessage: \"createProofFailed\",\n\t\t\t\t\terror: BaseError.fromError(task.error)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Verify a proof.\n\t * @param id The id of the proof to verify.\n\t * @param verify Validate the proof.\n\t * @returns The result of the verification and any failures.\n\t * @throws NotFoundError if the proof is not found.\n\t * @internal\n\t */\n\tprivate async internalGet(\n\t\tid: string,\n\t\tverify: boolean\n\t): Promise<{\n\t\tverified: boolean;\n\t\tfailure?: ImmutableProofFailure;\n\t\tverifiableCredential: IDidVerifiableCredential;\n\t}> {\n\t\tconst urnParsed = Urn.fromValidString(id);\n\t\tconst proofId = urnParsed.namespaceSpecific(0);\n\t\tconst proofEntity = await this._proofStorage.get(proofId);\n\n\t\tif (Is.empty(proofEntity)) {\n\t\t\tthrow new NotFoundError(ImmutableProofService.CLASS_NAME, \"proofNotFound\", id);\n\t\t}\n\n\t\tconst verifiableCredential: IDidVerifiableCredential = {\n\t\t\t\"@context\": [\n\t\t\t\tproofEntity.vcContext ?? DidContexts.ContextVCv1,\n\t\t\t\tImmutableProofContexts.Context,\n\t\t\t\tImmutableProofContexts.ContextCommon\n\t\t\t],\n\t\t\ttype: [DidTypes.VerifiableCredential, ImmutableProofTypes.ImmutableProof],\n\t\t\tid,\n\t\t\tissuer: proofEntity.organizationId,\n\t\t\tcredentialSubject: {\n\t\t\t\tid: proofEntity.proofObjectId,\n\t\t\t\tproofIntegrity: proofEntity.proofObjectIntegrity\n\t\t\t}\n\t\t} as IDidVerifiableCredential;\n\n\t\tVerifiableCredentialHelper.setValidFrom(verifiableCredential, proofEntity.dateCreated);\n\n\t\tlet verified = false;\n\t\tlet failure: ImmutableProofFailure | undefined = ImmutableProofFailure.NotIssued;\n\n\t\tif (Is.stringValue(proofEntity.verifiableStorageId)) {\n\t\t\tfailure = ImmutableProofFailure.ProofMissing;\n\t\t\tconst immutableResult = await this._verifiableStorage.get(proofEntity.verifiableStorageId);\n\n\t\t\tif (Is.uint8Array(immutableResult.data)) {\n\t\t\t\tconst proof = ObjectHelper.fromBytes<IProof>(immutableResult.data);\n\n\t\t\t\tconst proofWithReceipt = {\n\t\t\t\t\t...proof,\n\t\t\t\t\tverificationMethod: `${proofEntity.organizationId}#${this._verificationMethodId}`,\n\t\t\t\t\tverifiableStorageId: proofEntity.verifiableStorageId,\n\t\t\t\t\timmutableReceipt: immutableResult.receipt\n\t\t\t\t};\n\n\t\t\t\t// Add the proof from the verifiable storage\n\t\t\t\t// expand it with the verifiable storage id and receipt\n\t\t\t\tverifiableCredential.proof = proofWithReceipt;\n\n\t\t\t\tif (verify && Is.object<IProof>(proof)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result =\n\t\t\t\t\t\t\tawait this._identityConnector.checkVerifiableCredential(verifiableCredential);\n\t\t\t\t\t\tif (result.revoked) {\n\t\t\t\t\t\t\tverified = false;\n\t\t\t\t\t\t\tfailure = ImmutableProofFailure.Revoked;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tverified = true;\n\t\t\t\t\t\t\tfailure = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tverified = false;\n\t\t\t\t\t\tfailure = ImmutableProofFailure.VerificationFailure;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tverifiableCredential: await JsonLdProcessor.compact(\n\t\t\t\tverifiableCredential,\n\t\t\t\tJsonLdProcessor.gatherContexts(verifiableCredential)\n\t\t\t),\n\t\t\tverified,\n\t\t\tfailure\n\t\t};\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IImmutableProofServiceConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IImmutableProofServiceConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IImmutableProofServiceConfig } from \"./IImmutableProofServiceConfig.js\";\n\n/**\n * Options for the immutable proof service constructor.\n */\nexport interface IImmutableProofServiceConstructorOptions {\n\t/**\n\t * The entity storage for proofs.\n\t * @default immutable-proof\n\t */\n\timmutableProofEntityStorageType?: string;\n\n\t/**\n\t * The verifiable storage.\n\t * @default verifiable-storage\n\t */\n\tverifiableStorageType?: string;\n\n\t/**\n\t * The identity connector type.\n\t * @default identity\n\t */\n\tidentityConnectorType?: string;\n\n\t/**\n\t * The background task
|
|
1
|
+
{"version":3,"file":"IImmutableProofServiceConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IImmutableProofServiceConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IImmutableProofServiceConfig } from \"./IImmutableProofServiceConfig.js\";\n\n/**\n * Options for the immutable proof service constructor.\n */\nexport interface IImmutableProofServiceConstructorOptions {\n\t/**\n\t * The entity storage for proofs.\n\t * @default immutable-proof\n\t */\n\timmutableProofEntityStorageType?: string;\n\n\t/**\n\t * The verifiable storage.\n\t * @default verifiable-storage\n\t */\n\tverifiableStorageType?: string;\n\n\t/**\n\t * The logging component type.\n\t * @default logging\n\t */\n\tloggingComponentType?: string;\n\n\t/**\n\t * The identity connector type.\n\t * @default identity\n\t */\n\tidentityConnectorType?: string;\n\n\t/**\n\t * The background task component type.\n\t * @default background-task\n\t */\n\tbackgroundTaskComponentType?: string;\n\n\t/**\n\t * The event bus component type, defaults to no event bus.\n\t */\n\teventBusComponentType?: string;\n\n\t/**\n\t * The configuration for the connector.\n\t */\n\tconfig?: IImmutableProofServiceConfig;\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DidContexts } from "@twin.org/standards-w3c-did";
|
|
1
2
|
/**
|
|
2
3
|
* Class describing the immutable proof.
|
|
3
4
|
*/
|
|
@@ -6,6 +7,10 @@ export declare class ImmutableProof {
|
|
|
6
7
|
* The id of the proof.
|
|
7
8
|
*/
|
|
8
9
|
id: string;
|
|
10
|
+
/**
|
|
11
|
+
* The organization id.
|
|
12
|
+
*/
|
|
13
|
+
organizationId: string;
|
|
9
14
|
/**
|
|
10
15
|
* The date/time of when the proof was created.
|
|
11
16
|
*/
|
|
@@ -15,11 +20,15 @@ export declare class ImmutableProof {
|
|
|
15
20
|
*/
|
|
16
21
|
proofObjectId?: string;
|
|
17
22
|
/**
|
|
18
|
-
* The associated
|
|
23
|
+
* The associated integrity for the item.
|
|
19
24
|
*/
|
|
20
|
-
|
|
25
|
+
proofObjectIntegrity: string;
|
|
21
26
|
/**
|
|
22
27
|
* The verifiable storage id.
|
|
23
28
|
*/
|
|
24
29
|
verifiableStorageId?: string;
|
|
30
|
+
/**
|
|
31
|
+
* The verifiable credential context.
|
|
32
|
+
*/
|
|
33
|
+
vcContext?: typeof DidContexts.ContextVCv1 | typeof DidContexts.ContextVCv2;
|
|
25
34
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type IJsonLdNodeObject } from "@twin.org/data-json-ld";
|
|
2
|
-
import { type
|
|
2
|
+
import { type IImmutableProofComponent, type IImmutableProofVerification } from "@twin.org/immutable-proof-models";
|
|
3
|
+
import { type IDidVerifiableCredential } from "@twin.org/standards-w3c-did";
|
|
3
4
|
import type { IImmutableProofServiceConstructorOptions } from "./models/IImmutableProofServiceConstructorOptions.js";
|
|
4
5
|
/**
|
|
5
6
|
* Class for performing immutable proof operations.
|
|
@@ -37,7 +38,7 @@ export declare class ImmutableProofService implements IImmutableProofComponent {
|
|
|
37
38
|
* @returns The proof.
|
|
38
39
|
* @throws NotFoundError if the proof is not found.
|
|
39
40
|
*/
|
|
40
|
-
get(id: string): Promise<
|
|
41
|
+
get(id: string): Promise<IDidVerifiableCredential>;
|
|
41
42
|
/**
|
|
42
43
|
* Verify a proof.
|
|
43
44
|
* @param id The id of the proof to verify.
|
|
@@ -13,16 +13,21 @@ export interface IImmutableProofServiceConstructorOptions {
|
|
|
13
13
|
* @default verifiable-storage
|
|
14
14
|
*/
|
|
15
15
|
verifiableStorageType?: string;
|
|
16
|
+
/**
|
|
17
|
+
* The logging component type.
|
|
18
|
+
* @default logging
|
|
19
|
+
*/
|
|
20
|
+
loggingComponentType?: string;
|
|
16
21
|
/**
|
|
17
22
|
* The identity connector type.
|
|
18
23
|
* @default identity
|
|
19
24
|
*/
|
|
20
25
|
identityConnectorType?: string;
|
|
21
26
|
/**
|
|
22
|
-
* The background task
|
|
27
|
+
* The background task component type.
|
|
23
28
|
* @default background-task
|
|
24
29
|
*/
|
|
25
|
-
|
|
30
|
+
backgroundTaskComponentType?: string;
|
|
26
31
|
/**
|
|
27
32
|
* The event bus component type, defaults to no event bus.
|
|
28
33
|
*/
|
package/docs/changelog.md
CHANGED
|
@@ -1,4 +1,154 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.0.3-next.11](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.10...immutable-proof-service-v0.0.3-next.11) (2026-03-25)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Miscellaneous Chores
|
|
7
|
+
|
|
8
|
+
* **immutable-proof-service:** Synchronize repo versions
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.10 to 0.0.3-next.11
|
|
16
|
+
* @twin.org/immutable-proof-task bumped from 0.0.3-next.10 to 0.0.3-next.11
|
|
17
|
+
|
|
18
|
+
## [0.0.3-next.10](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.9...immutable-proof-service-v0.0.3-next.10) (2026-02-25)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
* update schemas ([ab0569a](https://github.com/twinfoundation/immutable-proof/commit/ab0569adf3419beefd8aef7793fdbe5b2fe2d93e))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Dependencies
|
|
27
|
+
|
|
28
|
+
* The following workspace dependencies were updated
|
|
29
|
+
* dependencies
|
|
30
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.9 to 0.0.3-next.10
|
|
31
|
+
* @twin.org/immutable-proof-task bumped from 0.0.3-next.9 to 0.0.3-next.10
|
|
32
|
+
|
|
33
|
+
## [0.0.3-next.9](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.8...immutable-proof-service-v0.0.3-next.9) (2026-02-13)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Features
|
|
37
|
+
|
|
38
|
+
* remove vm linkage in on chain proof ([4034336](https://github.com/twinfoundation/immutable-proof/commit/4034336177261dcf3b017524a56f3f6537545227))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
### Dependencies
|
|
42
|
+
|
|
43
|
+
* The following workspace dependencies were updated
|
|
44
|
+
* dependencies
|
|
45
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.8 to 0.0.3-next.9
|
|
46
|
+
* @twin.org/immutable-proof-task bumped from 0.0.3-next.8 to 0.0.3-next.9
|
|
47
|
+
|
|
48
|
+
## [0.0.3-next.8](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.7...immutable-proof-service-v0.0.3-next.8) (2026-02-10)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
### Features
|
|
52
|
+
|
|
53
|
+
* immutable proof as vc ([#31](https://github.com/twinfoundation/immutable-proof/issues/31)) ([79cdb03](https://github.com/twinfoundation/immutable-proof/commit/79cdb03eb86c4f6d2ab1d5bf235f74ff74e8b877))
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
### Dependencies
|
|
57
|
+
|
|
58
|
+
* The following workspace dependencies were updated
|
|
59
|
+
* dependencies
|
|
60
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.7 to 0.0.3-next.8
|
|
61
|
+
* @twin.org/immutable-proof-task bumped from 0.0.3-next.7 to 0.0.3-next.8
|
|
62
|
+
|
|
63
|
+
## [0.0.3-next.7](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.6...immutable-proof-service-v0.0.3-next.7) (2026-02-05)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
### Miscellaneous Chores
|
|
67
|
+
|
|
68
|
+
* **immutable-proof-service:** Synchronize repo versions
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
### Dependencies
|
|
72
|
+
|
|
73
|
+
* The following workspace dependencies were updated
|
|
74
|
+
* dependencies
|
|
75
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.6 to 0.0.3-next.7
|
|
76
|
+
* @twin.org/immutable-proof-task bumped from 0.0.3-next.6 to 0.0.3-next.7
|
|
77
|
+
|
|
78
|
+
## [0.0.3-next.6](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.5...immutable-proof-service-v0.0.3-next.6) (2026-01-21)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
### Features
|
|
82
|
+
|
|
83
|
+
* update contexts ([#22](https://github.com/twinfoundation/immutable-proof/issues/22)) ([645b880](https://github.com/twinfoundation/immutable-proof/commit/645b8803540408c74e3891b2c5ff9aefd5908d9f))
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
### Dependencies
|
|
87
|
+
|
|
88
|
+
* The following workspace dependencies were updated
|
|
89
|
+
* dependencies
|
|
90
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.5 to 0.0.3-next.6
|
|
91
|
+
* @twin.org/immutable-proof-task bumped from 0.0.3-next.5 to 0.0.3-next.6
|
|
92
|
+
|
|
93
|
+
## [0.0.3-next.5](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.4...immutable-proof-service-v0.0.3-next.5) (2026-01-14)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
### Features
|
|
97
|
+
|
|
98
|
+
* update contexts and namespaces ([#20](https://github.com/twinfoundation/immutable-proof/issues/20)) ([d38aa69](https://github.com/twinfoundation/immutable-proof/commit/d38aa696c73e4fcc304f08fb458d5900109abcb4))
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
### Dependencies
|
|
102
|
+
|
|
103
|
+
* The following workspace dependencies were updated
|
|
104
|
+
* dependencies
|
|
105
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.4 to 0.0.3-next.5
|
|
106
|
+
* @twin.org/immutable-proof-task bumped from 0.0.3-next.4 to 0.0.3-next.5
|
|
107
|
+
|
|
108
|
+
## [0.0.3-next.4](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.3...immutable-proof-service-v0.0.3-next.4) (2026-01-07)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
### Features
|
|
112
|
+
|
|
113
|
+
* add logging ([#18](https://github.com/twinfoundation/immutable-proof/issues/18)) ([e331ce8](https://github.com/twinfoundation/immutable-proof/commit/e331ce843393554750c2708ebce1273056b6399a))
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
### Dependencies
|
|
117
|
+
|
|
118
|
+
* The following workspace dependencies were updated
|
|
119
|
+
* dependencies
|
|
120
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.3 to 0.0.3-next.4
|
|
121
|
+
* @twin.org/immutable-proof-task bumped from 0.0.3-next.3 to 0.0.3-next.4
|
|
122
|
+
|
|
123
|
+
## [0.0.3-next.3](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.2...immutable-proof-service-v0.0.3-next.3) (2025-11-28)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
### Bug Fixes
|
|
127
|
+
|
|
128
|
+
* constructor component name ([06ea7c3](https://github.com/twinfoundation/immutable-proof/commit/06ea7c3602a7b465870300bf02f358d95312d49a))
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
### Dependencies
|
|
132
|
+
|
|
133
|
+
* The following workspace dependencies were updated
|
|
134
|
+
* dependencies
|
|
135
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.2 to 0.0.3-next.3
|
|
136
|
+
* @twin.org/immutable-proof-task bumped from 0.0.3-next.2 to 0.0.3-next.3
|
|
137
|
+
|
|
138
|
+
## [0.0.3-next.2](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.1...immutable-proof-service-v0.0.3-next.2) (2025-11-28)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
### Features
|
|
142
|
+
|
|
143
|
+
* update background tasks ([f25741c](https://github.com/twinfoundation/immutable-proof/commit/f25741c704e2c8311bc98bc69d4d926c523c781e))
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
### Dependencies
|
|
147
|
+
|
|
148
|
+
* The following workspace dependencies were updated
|
|
149
|
+
* dependencies
|
|
150
|
+
* @twin.org/immutable-proof-models bumped from 0.0.3-next.1 to 0.0.3-next.2
|
|
151
|
+
* @twin.org/immutable-proof-task bumped from 0.0.3-next.1 to 0.0.3-next.2
|
|
2
152
|
|
|
3
153
|
## [0.0.3-next.1](https://github.com/twinfoundation/immutable-proof/compare/immutable-proof-service-v0.0.3-next.0...immutable-proof-service-v0.0.3-next.1) (2025-11-12)
|
|
4
154
|
|
package/docs/examples.md
CHANGED
|
@@ -1 +1,127 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Immutable Proof Service Examples
|
|
2
|
+
|
|
3
|
+
These examples show how to initialise storage and routes, create and retrieve proofs, verify them, and work with persisted entities.
|
|
4
|
+
|
|
5
|
+
## ImmutableProofService
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { ImmutableProofService } from '@twin.org/immutable-proof-service';
|
|
9
|
+
|
|
10
|
+
const service = new ImmutableProofService({
|
|
11
|
+
identityConnectorType: 'identity',
|
|
12
|
+
config: {
|
|
13
|
+
verificationMethodId: 'immutable-proof-assertion'
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
console.log(service.className()); // ImmutableProofService
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { ImmutableProofService } from '@twin.org/immutable-proof-service';
|
|
22
|
+
|
|
23
|
+
const service = new ImmutableProofService();
|
|
24
|
+
await service.start();
|
|
25
|
+
|
|
26
|
+
const proofId = await service.create({
|
|
27
|
+
'@context': 'https://schema.org',
|
|
28
|
+
type: 'Person',
|
|
29
|
+
name: 'Alice Example'
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
console.log(proofId); // immutable-proof:01JABCDEF1234567890
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import { ImmutableProofService } from '@twin.org/immutable-proof-service';
|
|
37
|
+
|
|
38
|
+
const service = new ImmutableProofService();
|
|
39
|
+
const proofId = 'immutable-proof:01JABCDEF1234567890';
|
|
40
|
+
|
|
41
|
+
const credential = await service.get(proofId);
|
|
42
|
+
const verification = await service.verify(proofId);
|
|
43
|
+
|
|
44
|
+
console.log(credential.id); // immutable-proof:01JABCDEF1234567890
|
|
45
|
+
console.log(verification.verified); // true
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
import { ImmutableProofService } from '@twin.org/immutable-proof-service';
|
|
50
|
+
|
|
51
|
+
const service = new ImmutableProofService();
|
|
52
|
+
const proofId = 'immutable-proof:01JABCDEF1234567890';
|
|
53
|
+
|
|
54
|
+
await service.removeVerifiable(proofId);
|
|
55
|
+
const verificationAfterRemoval = await service.verify(proofId);
|
|
56
|
+
|
|
57
|
+
console.log(verificationAfterRemoval.verified); // false
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## ImmutableProof
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
import { ImmutableProof } from '@twin.org/immutable-proof-service';
|
|
64
|
+
|
|
65
|
+
const entity: ImmutableProof = {
|
|
66
|
+
id: '01JABCDEF1234567890',
|
|
67
|
+
organizationId: 'did:iota:tst:issuer',
|
|
68
|
+
dateCreated: '2026-03-10T09:30:00.000Z',
|
|
69
|
+
proofObjectId: 'https://example.org/documents/100',
|
|
70
|
+
proofObjectIntegrity: 'yEr9VvYCGDh2Ww1YwQMehUy4LlW35mLhX8j8R8U6x0g=',
|
|
71
|
+
verifiableStorageId: 'verifiable-storage:01JABCDE'
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
console.log(entity.organizationId); // did:iota:tst:issuer
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Route and Schema Helpers
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
import {
|
|
81
|
+
generateRestRoutesImmutableProof,
|
|
82
|
+
initSchema,
|
|
83
|
+
restEntryPoints
|
|
84
|
+
} from '@twin.org/immutable-proof-service';
|
|
85
|
+
|
|
86
|
+
initSchema();
|
|
87
|
+
|
|
88
|
+
const routes = generateRestRoutesImmutableProof('/immutable-proof', 'immutable-proof');
|
|
89
|
+
console.log(routes.length); // 3
|
|
90
|
+
console.log(restEntryPoints[0].name); // immutable-proof
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
import {
|
|
95
|
+
immutableProofCreate,
|
|
96
|
+
immutableProofGet,
|
|
97
|
+
immutableProofVerify
|
|
98
|
+
} from '@twin.org/immutable-proof-service';
|
|
99
|
+
|
|
100
|
+
const requestContext = {};
|
|
101
|
+
|
|
102
|
+
const createResponse = await immutableProofCreate(requestContext, 'immutable-proof', {
|
|
103
|
+
body: {
|
|
104
|
+
document: {
|
|
105
|
+
'@context': 'https://schema.org',
|
|
106
|
+
type: 'Person',
|
|
107
|
+
name: 'Alice Example'
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const getResponse = await immutableProofGet(requestContext, 'immutable-proof', {
|
|
113
|
+
pathParams: {
|
|
114
|
+
id: createResponse.headers.location
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
const verifyResponse = await immutableProofVerify(requestContext, 'immutable-proof', {
|
|
119
|
+
pathParams: {
|
|
120
|
+
id: createResponse.headers.location
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
console.log(createResponse.statusCode); // 201
|
|
125
|
+
console.log(getResponse.body.id); // immutable-proof:01JABCDEF1234567890
|
|
126
|
+
console.log(verifyResponse.body.verified); // true
|
|
127
|
+
```
|