@interop/wallet-core 0.51.0 → 0.52.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -11
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts +2 -2
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts.map +1 -1
- package/dist/clientAnnex/credentialAnchoredGenesis.js +1 -1
- package/dist/clientAnnex/forget.d.ts +18 -6
- package/dist/clientAnnex/forget.d.ts.map +1 -1
- package/dist/clientAnnex/forget.js +19 -6
- package/dist/clientAnnex/forget.js.map +1 -1
- package/dist/clientAnnex/forgetLast.d.ts +33 -20
- package/dist/clientAnnex/forgetLast.d.ts.map +1 -1
- package/dist/clientAnnex/forgetLast.js +43 -17
- package/dist/clientAnnex/forgetLast.js.map +1 -1
- package/dist/clientAnnex/gc.d.ts +3 -3
- package/dist/clientAnnex/gc.d.ts.map +1 -1
- package/dist/clientAnnex/gc.js +2 -2
- package/dist/clientAnnex/gc.js.map +1 -1
- package/dist/clientAnnex/index.d.ts +5 -5
- package/dist/clientAnnex/index.d.ts.map +1 -1
- package/dist/clientAnnex/index.js +4 -4
- package/dist/clientAnnex/index.js.map +1 -1
- package/dist/clientAnnex/ladder.d.ts +19 -11
- package/dist/clientAnnex/ladder.d.ts.map +1 -1
- package/dist/clientAnnex/ladder.js +77 -14
- package/dist/clientAnnex/ladder.js.map +1 -1
- package/dist/clientAnnex/ladderAnchored.d.ts +36 -7
- package/dist/clientAnnex/ladderAnchored.d.ts.map +1 -1
- package/dist/clientAnnex/ladderAnchored.js +80 -18
- package/dist/clientAnnex/ladderAnchored.js.map +1 -1
- package/dist/clientAnnex/log.d.ts +6 -6
- package/dist/clientAnnex/log.d.ts.map +1 -1
- package/dist/clientAnnex/log.js +8 -8
- package/dist/clientAnnex/log.js.map +1 -1
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts +7 -7
- package/dist/clientAnnex/recoveryLadderAnchored.js +9 -9
- package/dist/clientAnnex/recoveryLadderAnchored.js.map +1 -1
- package/dist/clientAnnex/selfEnroll.d.ts +6 -4
- package/dist/clientAnnex/selfEnroll.d.ts.map +1 -1
- package/dist/clientAnnex/selfEnroll.js +19 -7
- package/dist/clientAnnex/selfEnroll.js.map +1 -1
- package/dist/clients/listing.d.ts +1 -1
- package/dist/clients/listing.d.ts.map +1 -1
- package/dist/clients/listing.js +1 -1
- package/dist/clients/listing.js.map +1 -1
- package/dist/clients/revocation.d.ts +1 -1
- package/dist/clients/rosterPolicy.d.ts +1 -1
- package/dist/clients/rosterPolicy.d.ts.map +1 -1
- package/dist/descriptors/acquire.js +1 -1
- package/dist/descriptors/logSource.d.ts +1 -2
- package/dist/descriptors/logSource.d.ts.map +1 -1
- package/dist/descriptors/logSource.js +2 -2
- package/dist/descriptors/logSource.js.map +1 -1
- package/dist/enrollment/enrollment.d.ts +1 -1
- package/dist/enrollment/enrollment.d.ts.map +1 -1
- package/dist/enrollment/enrollment.js +2 -1
- package/dist/enrollment/enrollment.js.map +1 -1
- package/dist/genesis/accountGenesis.d.ts +1 -1
- package/dist/genesis/accountGenesis.d.ts.map +1 -1
- package/dist/genesis/accountGenesis.js +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/keyring/kdf.d.ts +6 -20
- package/dist/keyring/kdf.d.ts.map +1 -1
- package/dist/keyring/kdf.js +8 -5
- package/dist/keyring/kdf.js.map +1 -1
- package/dist/keyring/unlockSpace.js +1 -1
- package/dist/keys/rosterLogStore.d.ts +16 -14
- package/dist/keys/rosterLogStore.d.ts.map +1 -1
- package/dist/keys/rosterLogStore.js +149 -32
- package/dist/keys/rosterLogStore.js.map +1 -1
- package/dist/keys/rosterStore.d.ts +8 -7
- package/dist/keys/rosterStore.d.ts.map +1 -1
- package/dist/keys/rosterStore.js +6 -6
- package/dist/keys/rosterStore.js.map +1 -1
- package/dist/keys/spaceEpochs.d.ts +1 -1
- package/dist/keys/spaceEpochs.js +1 -1
- package/dist/keys/userKeyRoster.d.ts +3 -3
- package/dist/keys/userKeyRoster.d.ts.map +1 -1
- package/dist/keys/userKeyRoster.js +3 -3
- package/dist/keys/userKeyRoster.js.map +1 -1
- package/dist/recovery/index.d.ts +2 -2
- package/dist/recovery/index.js +2 -2
- package/dist/recovery/recoveryDelegation.js +1 -1
- package/dist/recovery/recoveryDelegation.js.map +1 -1
- package/dist/recovery/recoveryWebvh.d.ts +4 -4
- package/dist/recovery/recoveryWebvh.js +5 -5
- package/dist/request/appKey.d.ts +9 -3
- package/dist/request/appKey.d.ts.map +1 -1
- package/dist/request/appKey.js +13 -8
- package/dist/request/appKey.js.map +1 -1
- package/dist/request/classify.d.ts.map +1 -1
- package/dist/request/classify.js +13 -1
- package/dist/request/classify.js.map +1 -1
- package/dist/request/ephemeralExchange.d.ts +6 -1
- package/dist/request/ephemeralExchange.d.ts.map +1 -1
- package/dist/request/ephemeralExchange.js +6 -1
- package/dist/request/ephemeralExchange.js.map +1 -1
- package/dist/request/exchangeClient.d.ts +0 -23
- package/dist/request/exchangeClient.d.ts.map +1 -1
- package/dist/request/exchangeClient.js +30 -1
- package/dist/request/exchangeClient.js.map +1 -1
- package/dist/request/index.d.ts +4 -1
- package/dist/request/index.d.ts.map +1 -1
- package/dist/request/index.js +4 -1
- package/dist/request/index.js.map +1 -1
- package/dist/request/interactionRequest.d.ts +23 -0
- package/dist/request/interactionRequest.d.ts.map +1 -0
- package/dist/request/interactionRequest.js +46 -0
- package/dist/request/interactionRequest.js.map +1 -0
- package/dist/request/interactionUrl.d.ts +3 -14
- package/dist/request/interactionUrl.d.ts.map +1 -1
- package/dist/request/interactionUrl.js +20 -1
- package/dist/request/interactionUrl.js.map +1 -1
- package/dist/resourceLog/controller.d.ts +48 -49
- package/dist/resourceLog/controller.d.ts.map +1 -1
- package/dist/resourceLog/controller.js +40 -20
- package/dist/resourceLog/controller.js.map +1 -1
- package/dist/resourceLog/errors.d.ts +12 -78
- package/dist/resourceLog/errors.d.ts.map +1 -1
- package/dist/resourceLog/errors.js +12 -79
- package/dist/resourceLog/errors.js.map +1 -1
- package/dist/resourceLog/index.d.ts +17 -22
- package/dist/resourceLog/index.d.ts.map +1 -1
- package/dist/resourceLog/index.js +16 -21
- package/dist/resourceLog/index.js.map +1 -1
- package/dist/resourceLog/license.d.ts +27 -26
- package/dist/resourceLog/license.d.ts.map +1 -1
- package/dist/resourceLog/license.js +31 -30
- package/dist/resourceLog/license.js.map +1 -1
- package/dist/unlock/index.d.ts +6 -6
- package/dist/unlock/index.d.ts.map +1 -1
- package/dist/unlock/index.js +5 -5
- package/dist/unlock/retire.d.ts +29 -28
- package/dist/unlock/retire.d.ts.map +1 -1
- package/dist/unlock/retire.js +25 -16
- package/dist/unlock/retire.js.map +1 -1
- package/dist/unlock/standingClient.d.ts +1 -1
- package/dist/unlock/standingClient.js +3 -3
- package/dist/unlock/standingWebvh.d.ts +28 -10
- package/dist/unlock/standingWebvh.d.ts.map +1 -1
- package/dist/unlock/standingWebvh.js +75 -37
- package/dist/unlock/standingWebvh.js.map +1 -1
- package/dist/unlock/unlockRecord.js +1 -1
- package/dist/webvh/delegatedLogStore.d.ts +2 -2
- package/dist/webvh/delegatedLogStore.js +2 -2
- package/dist/webvh/didWeb.js +1 -1
- package/dist/webvh/didWeb.js.map +1 -1
- package/dist/webvh/didWebvh.d.ts +3 -3
- package/dist/webvh/didWebvh.d.ts.map +1 -1
- package/dist/webvh/didWebvh.js +5 -5
- package/dist/webvh/didWebvh.js.map +1 -1
- package/dist/webvh/listClients.js +1 -1
- package/dist/webvh/listClients.js.map +1 -1
- package/dist/webvh/verifyLog.d.ts +1 -1
- package/dist/webvh/verifyLog.d.ts.map +1 -1
- package/dist/webvh/verifyLog.js +1 -2
- package/dist/webvh/verifyLog.js.map +1 -1
- package/package.json +5 -9
- package/dist/display/alignment.d.ts +0 -55
- package/dist/display/alignment.d.ts.map +0 -1
- package/dist/display/alignment.js +0 -117
- package/dist/display/alignment.js.map +0 -1
- package/dist/display/credentialName.d.ts +0 -42
- package/dist/display/credentialName.d.ts.map +0 -1
- package/dist/display/credentialName.js +0 -106
- package/dist/display/credentialName.js.map +0 -1
- package/dist/display/displayFields.d.ts +0 -59
- package/dist/display/displayFields.d.ts.map +0 -1
- package/dist/display/displayFields.js +0 -136
- package/dist/display/displayFields.js.map +0 -1
- package/dist/display/evidence.d.ts +0 -50
- package/dist/display/evidence.d.ts.map +0 -1
- package/dist/display/evidence.js +0 -67
- package/dist/display/evidence.js.map +0 -1
- package/dist/display/image.d.ts +0 -18
- package/dist/display/image.d.ts.map +0 -1
- package/dist/display/image.js +0 -23
- package/dist/display/image.js.map +0 -1
- package/dist/display/index.d.ts +0 -38
- package/dist/display/index.d.ts.map +0 -1
- package/dist/display/index.js +0 -32
- package/dist/display/index.js.map +0 -1
- package/dist/display/issuer.d.ts +0 -105
- package/dist/display/issuer.d.ts.map +0 -1
- package/dist/display/issuer.js +0 -126
- package/dist/display/issuer.js.map +0 -1
- package/dist/display/obv3.d.ts +0 -82
- package/dist/display/obv3.d.ts.map +0 -1
- package/dist/display/obv3.js +0 -117
- package/dist/display/obv3.js.map +0 -1
- package/dist/display/parse.d.ts +0 -66
- package/dist/display/parse.d.ts.map +0 -1
- package/dist/display/parse.js +0 -104
- package/dist/display/parse.js.map +0 -1
- package/dist/display/subject.d.ts +0 -79
- package/dist/display/subject.d.ts.map +0 -1
- package/dist/display/subject.js +0 -124
- package/dist/display/subject.js.map +0 -1
- package/dist/display/text.d.ts +0 -53
- package/dist/display/text.d.ts.map +0 -1
- package/dist/display/text.js +0 -78
- package/dist/display/text.js.map +0 -1
- package/dist/display/types.d.ts +0 -55
- package/dist/display/types.d.ts.map +0 -1
- package/dist/display/types.js +0 -41
- package/dist/display/types.js.map +0 -1
- package/dist/display/validity.d.ts +0 -51
- package/dist/display/validity.d.ts.map +0 -1
- package/dist/display/validity.js +0 -51
- package/dist/display/validity.js.map +0 -1
- package/dist/display/verificationView.d.ts +0 -115
- package/dist/display/verificationView.d.ts.map +0 -1
- package/dist/display/verificationView.js +0 -199
- package/dist/display/verificationView.js.map +0 -1
- package/dist/resourceLog/append.d.ts +0 -112
- package/dist/resourceLog/append.d.ts.map +0 -1
- package/dist/resourceLog/append.js +0 -197
- package/dist/resourceLog/append.js.map +0 -1
- package/dist/resourceLog/entry.d.ts +0 -68
- package/dist/resourceLog/entry.d.ts.map +0 -1
- package/dist/resourceLog/entry.js +0 -167
- package/dist/resourceLog/entry.js.map +0 -1
- package/dist/resourceLog/pin.d.ts +0 -82
- package/dist/resourceLog/pin.d.ts.map +0 -1
- package/dist/resourceLog/pin.js +0 -57
- package/dist/resourceLog/pin.js.map +0 -1
- package/dist/resourceLog/seal.d.ts +0 -97
- package/dist/resourceLog/seal.d.ts.map +0 -1
- package/dist/resourceLog/seal.js +0 -113
- package/dist/resourceLog/seal.js.map +0 -1
- package/dist/resourceLog/verify.d.ts +0 -96
- package/dist/resourceLog/verify.d.ts.map +0 -1
- package/dist/resourceLog/verify.js +0 -474
- package/dist/resourceLog/verify.js.map +0 -1
- package/dist/resourceLog/vmFragment.d.ts +0 -33
- package/dist/resourceLog/vmFragment.d.ts.map +0 -1
- package/dist/resourceLog/vmFragment.js +0 -39
- package/dist/resourceLog/vmFragment.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyLog.d.ts","sourceRoot":"","sources":["../../src/webvh/verifyLog.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"verifyLog.d.ts","sourceRoot":"","sources":["../../src/webvh/verifyLog.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAG/D,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAA;AAEjC;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAMxE;AAED;;;;;;GAMG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,SAA0C;CAI9D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,GAAG,EACH,GAAG,EACJ,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAC/B,GAAG,kBAAkB,CA4CrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,GAAG,EACH,OAAO,EACP,IAAI,EACJ,QAAQ,EACT,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,mBAAmB,CAAA;CAC/B,GAAG,OAAO,CAAC;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB,CAAC,CA6CD"}
|
package/dist/webvh/verifyLog.js
CHANGED
|
@@ -29,8 +29,7 @@
|
|
|
29
29
|
import { readLogFromString, resolveDIDFromLog } from '@interop/did-method-webvh';
|
|
30
30
|
import { resourcePath, toUrl } from '@interop/was-client/paths';
|
|
31
31
|
import { DID_LOG_RESOURCE, ID_COLLECTION } from '../space/collections.js';
|
|
32
|
-
import { ResourceLogContinuityError } from '
|
|
33
|
-
import { resourceLogPinId } from '../resourceLog/pin.js';
|
|
32
|
+
import { ResourceLogContinuityError, resourceLogPinId } from '@interop/vh-resource-log';
|
|
34
33
|
/**
|
|
35
34
|
* The pin-slot key for an account's did:webvh log (`id/did.jsonl`) -- what a
|
|
36
35
|
* ceremony taking its own read of the log names its pin by, and what
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyLog.js","sourceRoot":"","sources":["../../src/webvh/verifyLog.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAEhF,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"verifyLog.js","sourceRoot":"","sources":["../../src/webvh/verifyLog.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAEhF,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAGjB,MAAM,0BAA0B,CAAA;AAEjC;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,OAAO,EAAuB;IAC9D,OAAO,gBAAgB,CAAC;QACtB,OAAO;QACP,YAAY,EAAE,aAAa,CAAC,EAAE;QAC9B,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAO,GAAG,uCAAuC;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAA;IACtC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,yBAAyB,CAAC,EACxC,GAAG,EACH,GAAG,EAIJ;IACC,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IACtB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAChC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAA;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAA;IAC1C,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,0BAA0B,CAAC;gBACnC,MAAM,EAAE,eAAe;gBACvB,UAAU,EAAE,GAAG,CAAC,IAAI;aACrB,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,0BAA0B,CAAC;gBACnC,MAAM,EAAE,aAAa;gBACrB,UAAU,EAAE,GAAG,CAAC,IAAI;aACrB,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACnD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,0BAA0B,CAAC;gBACnC,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,GAAG,CAAC,IAAI;gBACpB,aAAa,EAAE,GAAG;aACnB,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,IAAI,0BAA0B,CAAC;gBACnC,MAAM,EAAE,UAAU;gBAClB,UAAU,EAAE,GAAG,CAAC,IAAI;aACrB,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,aAAa,GAAG,CAAC,CAAE,CAAC,SAAS,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;YACnD,MAAM,IAAI,0BAA0B,CAAC;gBACnC,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,GAAG,CAAC,IAAI;gBACpB,aAAa,EAAE,GAAG;aACnB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAA;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACrC,GAAG,EACH,OAAO,EACP,IAAI,EACJ,QAAQ,EAMT;IAMC,MAAM,GAAG,GAAG,KAAK,CAAC;QAChB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,gBAAgB,CAAC;KAChE,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,sBAAsB,EAAE,CAAA;IACpC,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,+CAA+C,QAAQ,CAAC,MAAM,IAAI,CACnE,CAAA;IACH,CAAC;IACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAC7C,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CACb,4CACE,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,uCACzB,IAAI,CACL,CAAA;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,qEAAqE;YACnE,gBAAgB,CACnB,CAAA;IACH,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;QAC1C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,yBAAyB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;QACtD,wEAAwE;QACxE,4DAA4D;QAC5D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IACD,OAAO;QACL,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,GAAG;QACH,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;QAC1C,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE;KACjD,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@interop/wallet-core",
|
|
3
3
|
"description": "Shared wallet-domain logic (WAS sync engine core and wallet Space layout contracts) for Interop wallet apps.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.52.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "pnpm run clear && tsc",
|
|
@@ -21,14 +21,16 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@interop/data-integrity-core": "^8.7.1",
|
|
23
23
|
"@interop/data-integrity-proof": "^3.4.5",
|
|
24
|
-
"@interop/did-method-webvh": "^5.5.
|
|
24
|
+
"@interop/did-method-webvh": "^5.5.1",
|
|
25
25
|
"@interop/ed25519-signature": "^7.1.4",
|
|
26
26
|
"@interop/ed25519-verification-key": "^8.0.4",
|
|
27
27
|
"@interop/ezcap": "^7.4.3",
|
|
28
28
|
"@interop/security-document-loader": "^10.0.4",
|
|
29
29
|
"@interop/social-core": "^0.8.1",
|
|
30
|
+
"@interop/storage-core": "^0.9.1",
|
|
30
31
|
"@interop/vc": "^11.0.7",
|
|
31
|
-
"@interop/
|
|
32
|
+
"@interop/vh-resource-log": "^0.4.0",
|
|
33
|
+
"@interop/was-client": "^0.44.4",
|
|
32
34
|
"@interop/webkms-client": "^14.7.3",
|
|
33
35
|
"@interop/x25519-key-agreement-key": "^5.2.2",
|
|
34
36
|
"@noble/ciphers": "^2.3.0",
|
|
@@ -93,12 +95,6 @@
|
|
|
93
95
|
"import": "./dist/request/matching.js",
|
|
94
96
|
"default": "./dist/request/matching.js"
|
|
95
97
|
},
|
|
96
|
-
"./display": {
|
|
97
|
-
"types": "./dist/display/index.d.ts",
|
|
98
|
-
"react-native": "./dist/display/index.js",
|
|
99
|
-
"import": "./dist/display/index.js",
|
|
100
|
-
"default": "./dist/display/index.js"
|
|
101
|
-
},
|
|
102
98
|
"./webvh": {
|
|
103
99
|
"types": "./dist/webvh/index.d.ts",
|
|
104
100
|
"react-native": "./dist/webvh/index.js",
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Achievement alignment normalization. Two functions are kept on purpose
|
|
6
|
-
* because they answer different questions:
|
|
7
|
-
*
|
|
8
|
-
* - `normalizeAlignments` (from Freewallet) trims each alignment and drops the
|
|
9
|
-
* ones with no `targetName`, returning a plain `{ targetName, targetUrl,
|
|
10
|
-
* targetDescription }` view. It does NOT validate URLs.
|
|
11
|
-
* - `getValidAlignments` (from DCW) additionally runs a strict http(s) URL
|
|
12
|
-
* safety check and reports it via an `isValidUrl` flag, so the UI can decide
|
|
13
|
-
* whether to render a target as a clickable link. It omits `targetUrl` when
|
|
14
|
-
* absent (rather than emitting `''`).
|
|
15
|
-
*
|
|
16
|
-
* Both had passing tests in their respective apps and both are exported.
|
|
17
|
-
*/
|
|
18
|
-
import type { IAlignment } from '@interop/data-integrity-core';
|
|
19
|
-
/**
|
|
20
|
-
* The trimmed, always-present-string alignment view `normalizeAlignments`
|
|
21
|
-
* emits.
|
|
22
|
-
*/
|
|
23
|
-
export interface IAlignmentView {
|
|
24
|
-
targetName: string;
|
|
25
|
-
targetUrl: string;
|
|
26
|
-
targetDescription: string;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* A display-safe alignment with an optional validated URL
|
|
30
|
-
* (`getValidAlignments`).
|
|
31
|
-
*/
|
|
32
|
-
export interface ValidAlignment {
|
|
33
|
-
targetName: string;
|
|
34
|
-
targetUrl?: string;
|
|
35
|
-
targetDescription?: string;
|
|
36
|
-
isValidUrl?: boolean;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Normalizes a raw alignment field (a single alignment or an array) to trimmed
|
|
40
|
-
* views, dropping entries with no `targetName`. Does not validate URLs.
|
|
41
|
-
*
|
|
42
|
-
* @param rawAlignments {unknown}
|
|
43
|
-
* @returns {IAlignmentView[]}
|
|
44
|
-
*/
|
|
45
|
-
export declare function normalizeAlignments(rawAlignments: unknown): IAlignmentView[];
|
|
46
|
-
/**
|
|
47
|
-
* Filters alignments to those with a `targetName` and, for each, reports
|
|
48
|
-
* whether its `targetUrl` (when present) is a safe http(s) URL via `isValidUrl`.
|
|
49
|
-
* `targetUrl` is omitted from the result when the input had none.
|
|
50
|
-
*
|
|
51
|
-
* @param alignments {IAlignment[] | undefined}
|
|
52
|
-
* @returns {ValidAlignment[]}
|
|
53
|
-
*/
|
|
54
|
-
export declare function getValidAlignments(alignments?: IAlignment[]): ValidAlignment[];
|
|
55
|
-
//# sourceMappingURL=alignment.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alignment.d.ts","sourceRoot":"","sources":["../../src/display/alignment.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAG9D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,OAAO,GAAG,cAAc,EAAE,CAqB5E;AAyED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,CAAC,EAAE,UAAU,EAAE,GACxB,cAAc,EAAE,CAwBlB"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { asRecord } from './text.js';
|
|
2
|
-
/**
|
|
3
|
-
* Normalizes a raw alignment field (a single alignment or an array) to trimmed
|
|
4
|
-
* views, dropping entries with no `targetName`. Does not validate URLs.
|
|
5
|
-
*
|
|
6
|
-
* @param rawAlignments {unknown}
|
|
7
|
-
* @returns {IAlignmentView[]}
|
|
8
|
-
*/
|
|
9
|
-
export function normalizeAlignments(rawAlignments) {
|
|
10
|
-
if (!rawAlignments) {
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
const alignmentArray = Array.isArray(rawAlignments)
|
|
14
|
-
? rawAlignments
|
|
15
|
-
: [rawAlignments];
|
|
16
|
-
return alignmentArray
|
|
17
|
-
.map((alignmentField) => {
|
|
18
|
-
const normalizedField = asRecord(alignmentField) ?? {};
|
|
19
|
-
return {
|
|
20
|
-
targetName: String(normalizedField.targetName ?? '').trim(),
|
|
21
|
-
targetUrl: String(normalizedField.targetUrl ?? '').trim(),
|
|
22
|
-
targetDescription: String(normalizedField.targetDescription ?? '').trim()
|
|
23
|
-
};
|
|
24
|
-
})
|
|
25
|
-
.filter(alignmentField => Boolean(alignmentField.targetName));
|
|
26
|
-
}
|
|
27
|
-
function normalizeUrl(raw) {
|
|
28
|
-
const trimmed = String(raw).trim();
|
|
29
|
-
// If it already has a scheme (e.g., http:, https:)
|
|
30
|
-
if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed)) {
|
|
31
|
-
return trimmed;
|
|
32
|
-
}
|
|
33
|
-
// Otherwise, assume https
|
|
34
|
-
return `https://${trimmed}`;
|
|
35
|
-
}
|
|
36
|
-
function isStrictHttpUrl(raw) {
|
|
37
|
-
const candidate = String(raw).trim();
|
|
38
|
-
if (candidate.length === 0) {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
if (/\s/.test(candidate)) {
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
const normalized = normalizeUrl(candidate);
|
|
45
|
-
// Reject strings that embed multiple schemes
|
|
46
|
-
const firstSchemeIdx = normalized.indexOf('://');
|
|
47
|
-
if (firstSchemeIdx === -1) {
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
if (normalized.indexOf('://', firstSchemeIdx + 3) !== -1) {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
try {
|
|
54
|
-
const parsedUrl = new URL(normalized);
|
|
55
|
-
// Only allow http(s)
|
|
56
|
-
if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
// Must have a hostname
|
|
60
|
-
if (!parsedUrl.hostname) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
// Forbid credentials/userinfo
|
|
64
|
-
if (parsedUrl.username || parsedUrl.password) {
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
// Hostname must be reasonable, or be 'localhost' or an IPv4
|
|
68
|
-
const isHostname = /^[A-Za-z0-9.-]+$/.test(parsedUrl.hostname);
|
|
69
|
-
const isLocalhost = parsedUrl.hostname.toLowerCase() === 'localhost';
|
|
70
|
-
const isIPv4 = /^(25[0-5]|2[0-4]\d|1?\d?\d)(\.(25[0-5]|2[0-4]\d|1?\d?\d)){3}$/.test(parsedUrl.hostname);
|
|
71
|
-
if (!(isHostname || isLocalhost || isIPv4)) {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
// If it's a standard hostname (not localhost/IP), require at least one dot
|
|
75
|
-
if (isHostname &&
|
|
76
|
-
!isLocalhost &&
|
|
77
|
-
!isIPv4 &&
|
|
78
|
-
!parsedUrl.hostname.includes('.')) {
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
return normalized;
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Filters alignments to those with a `targetName` and, for each, reports
|
|
89
|
-
* whether its `targetUrl` (when present) is a safe http(s) URL via `isValidUrl`.
|
|
90
|
-
* `targetUrl` is omitted from the result when the input had none.
|
|
91
|
-
*
|
|
92
|
-
* @param alignments {IAlignment[] | undefined}
|
|
93
|
-
* @returns {ValidAlignment[]}
|
|
94
|
-
*/
|
|
95
|
-
export function getValidAlignments(alignments) {
|
|
96
|
-
if (!alignments || !Array.isArray(alignments)) {
|
|
97
|
-
return [];
|
|
98
|
-
}
|
|
99
|
-
return alignments
|
|
100
|
-
.filter(alignment => {
|
|
101
|
-
// targetName is required for display
|
|
102
|
-
return !!alignment.targetName;
|
|
103
|
-
})
|
|
104
|
-
.map(alignment => {
|
|
105
|
-
const result = {
|
|
106
|
-
targetName: alignment.targetName,
|
|
107
|
-
targetDescription: alignment.targetDescription
|
|
108
|
-
};
|
|
109
|
-
if (alignment.targetUrl) {
|
|
110
|
-
const normalizedUrl = isStrictHttpUrl(alignment.targetUrl);
|
|
111
|
-
result.targetUrl = alignment.targetUrl;
|
|
112
|
-
result.isValidUrl = !!normalizedUrl;
|
|
113
|
-
}
|
|
114
|
-
return result;
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=alignment.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alignment.js","sourceRoot":"","sources":["../../src/display/alignment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Credential title derivation.
|
|
6
|
-
*
|
|
7
|
-
* Drift resolution (merged chain): DCW and Freewallet produced different titles
|
|
8
|
-
* for the same credential. The merged `credentialName` keeps DCW's
|
|
9
|
-
* type-specific human prefixes first (product copy its screens rely on:
|
|
10
|
-
* `Recommendation From ...`, `Performance Review: ...`, the SkillClaim skill
|
|
11
|
-
* name, `Employment: ... @ ...`, `Volunteer: ... @ ...`), then falls through to
|
|
12
|
-
* Freewallet's more complete generic chain: top-level `vc.name`, achievement
|
|
13
|
-
* name(s) JOINED with `' · '` (DCW returned only the first), skill name(s),
|
|
14
|
-
* resolved person full name, `hasCredential.name`, a `'Skill Claim'` label for
|
|
15
|
-
* a SkillClaimCredential, and finally `'Verifiable Credential'`.
|
|
16
|
-
*
|
|
17
|
-
* Deliberate behavior changes vs DCW: the final fallback is now
|
|
18
|
-
* `'Verifiable Credential'` (was `'Unknown Credential'`); a multi-achievement
|
|
19
|
-
* VC joins all names with `' · '`; and an `achievement` name now wins over a
|
|
20
|
-
* sibling `hasCredential` name (Freewallet's chain order), where DCW preferred
|
|
21
|
-
* `hasCredential`.
|
|
22
|
-
*/
|
|
23
|
-
import type { IVerifiableCredential } from '@interop/data-integrity-core';
|
|
24
|
-
/**
|
|
25
|
-
* Freewallet's generic title chain over a resolved subject: top-level name,
|
|
26
|
-
* achievement name(s), skill name(s), person full name, `hasCredential.name`,
|
|
27
|
-
* a `'Skill Claim'` label, else `'Verifiable Credential'`.
|
|
28
|
-
*
|
|
29
|
-
* @param verifiableCredential {IVerifiableCredential}
|
|
30
|
-
* @param subject {Record<string, unknown>}
|
|
31
|
-
* @returns {string}
|
|
32
|
-
*/
|
|
33
|
-
export declare function credentialNameFrom(verifiableCredential: IVerifiableCredential, subject: Record<string, unknown>): string;
|
|
34
|
-
/**
|
|
35
|
-
* The display title for a credential: DCW's type-specific prefixes first, then
|
|
36
|
-
* the generic {@link credentialNameFrom} chain.
|
|
37
|
-
*
|
|
38
|
-
* @param credential {IVerifiableCredential}
|
|
39
|
-
* @returns {string}
|
|
40
|
-
*/
|
|
41
|
-
export declare function credentialName(credential: IVerifiableCredential): string;
|
|
42
|
-
//# sourceMappingURL=credentialName.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentialName.d.ts","sourceRoot":"","sources":["../../src/display/credentialName.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAOzE;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,oBAAoB,EAAE,qBAAqB,EAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CA8CR;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM,CAkDxE"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { typeArray } from '@interop/data-integrity-core/guards';
|
|
2
|
-
import { getSubject, resolvePersonFullName } from './subject.js';
|
|
3
|
-
import { achievementsList, skillsList } from './obv3.js';
|
|
4
|
-
import { isEmploymentCredential, isVolunteerCredential } from './types.js';
|
|
5
|
-
import { asNonEmptyString, asRecord, getTrimmedString } from './text.js';
|
|
6
|
-
/**
|
|
7
|
-
* Freewallet's generic title chain over a resolved subject: top-level name,
|
|
8
|
-
* achievement name(s), skill name(s), person full name, `hasCredential.name`,
|
|
9
|
-
* a `'Skill Claim'` label, else `'Verifiable Credential'`.
|
|
10
|
-
*
|
|
11
|
-
* @param verifiableCredential {IVerifiableCredential}
|
|
12
|
-
* @param subject {Record<string, unknown>}
|
|
13
|
-
* @returns {string}
|
|
14
|
-
*/
|
|
15
|
-
export function credentialNameFrom(verifiableCredential, subject) {
|
|
16
|
-
const topLevelName = getTrimmedString(verifiableCredential.name);
|
|
17
|
-
if (topLevelName) {
|
|
18
|
-
return topLevelName;
|
|
19
|
-
}
|
|
20
|
-
const achievementNames = achievementsList(subject)
|
|
21
|
-
.map(achievement => getTrimmedString(achievement.name))
|
|
22
|
-
.filter((name) => Boolean(name));
|
|
23
|
-
if (achievementNames.length > 1) {
|
|
24
|
-
return achievementNames.join(' · ');
|
|
25
|
-
}
|
|
26
|
-
const [firstAchievementName] = achievementNames;
|
|
27
|
-
if (firstAchievementName) {
|
|
28
|
-
return firstAchievementName;
|
|
29
|
-
}
|
|
30
|
-
const skillNames = skillsList(subject)
|
|
31
|
-
.map(skill => getTrimmedString(skill.name))
|
|
32
|
-
.filter((name) => Boolean(name));
|
|
33
|
-
if (skillNames.length > 1) {
|
|
34
|
-
return skillNames.join(' · ');
|
|
35
|
-
}
|
|
36
|
-
const [firstSkillName] = skillNames;
|
|
37
|
-
if (firstSkillName) {
|
|
38
|
-
return firstSkillName;
|
|
39
|
-
}
|
|
40
|
-
const resumeFullName = resolvePersonFullName(subject);
|
|
41
|
-
if (resumeFullName) {
|
|
42
|
-
return resumeFullName;
|
|
43
|
-
}
|
|
44
|
-
const hasCredential = asRecord(subject.hasCredential);
|
|
45
|
-
const hasCredentialName = getTrimmedString(hasCredential?.name);
|
|
46
|
-
if (hasCredentialName) {
|
|
47
|
-
return hasCredentialName;
|
|
48
|
-
}
|
|
49
|
-
if (typeArray(verifiableCredential.type).includes('SkillClaimCredential')) {
|
|
50
|
-
return 'Skill Claim';
|
|
51
|
-
}
|
|
52
|
-
return 'Verifiable Credential';
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* The display title for a credential: DCW's type-specific prefixes first, then
|
|
56
|
-
* the generic {@link credentialNameFrom} chain.
|
|
57
|
-
*
|
|
58
|
-
* @param credential {IVerifiableCredential}
|
|
59
|
-
* @returns {string}
|
|
60
|
-
*/
|
|
61
|
-
export function credentialName(credential) {
|
|
62
|
-
const types = typeArray(credential.type);
|
|
63
|
-
const subject = asRecord(getSubject(credential)) ?? {};
|
|
64
|
-
if (types.includes('https://schema.org/RecommendationCredential')) {
|
|
65
|
-
const name = asNonEmptyString(subject.name);
|
|
66
|
-
return name ? `Recommendation From ${name}` : 'Recommendation Credential';
|
|
67
|
-
}
|
|
68
|
-
if (types.includes('PerformanceReviewCredential')) {
|
|
69
|
-
const employeeName = asNonEmptyString(subject.employeeName);
|
|
70
|
-
return employeeName
|
|
71
|
-
? `Performance Review: ${employeeName}`
|
|
72
|
-
: 'Performance Review Credential';
|
|
73
|
-
}
|
|
74
|
-
if (types.includes('SkillClaimCredential')) {
|
|
75
|
-
const [firstSkill] = skillsList(subject);
|
|
76
|
-
const skillName = asNonEmptyString(firstSkill?.name);
|
|
77
|
-
if (skillName) {
|
|
78
|
-
return skillName;
|
|
79
|
-
}
|
|
80
|
-
// fall through to the generic chain (lands on 'Skill Claim')
|
|
81
|
-
}
|
|
82
|
-
if (isEmploymentCredential(credential)) {
|
|
83
|
-
const fullName = asNonEmptyString(subject.fullName);
|
|
84
|
-
const company = asNonEmptyString(subject.company);
|
|
85
|
-
if (fullName && company) {
|
|
86
|
-
return `Employment: ${fullName} @ ${company}`;
|
|
87
|
-
}
|
|
88
|
-
if (fullName) {
|
|
89
|
-
return `Employment: ${fullName}`;
|
|
90
|
-
}
|
|
91
|
-
return 'Employment Credential';
|
|
92
|
-
}
|
|
93
|
-
if (isVolunteerCredential(credential)) {
|
|
94
|
-
const fullName = asNonEmptyString(subject.fullName);
|
|
95
|
-
const volunteerOrg = asNonEmptyString(subject.volunteerOrg);
|
|
96
|
-
if (fullName && volunteerOrg) {
|
|
97
|
-
return `Volunteer: ${fullName} @ ${volunteerOrg}`;
|
|
98
|
-
}
|
|
99
|
-
if (fullName) {
|
|
100
|
-
return `Volunteer: ${fullName}`;
|
|
101
|
-
}
|
|
102
|
-
return 'Volunteer Credential';
|
|
103
|
-
}
|
|
104
|
-
return credentialNameFrom(credential, subject);
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=credentialName.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentialName.js","sourceRoot":"","sources":["../../src/display/credentialName.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Freewallet's aggregate display projection: one pass over a VC producing the
|
|
6
|
-
* flat field set the credential card and detail view render. Dates stay RAW
|
|
7
|
-
* (the `expirationDate` field is an ISO string, not a formatted one -- the
|
|
8
|
-
* raw-values seam); the title comes from the merged {@link credentialName}.
|
|
9
|
-
*
|
|
10
|
-
* `credentialNameFrom` lives in `credentialName.ts` (co-located with the merged
|
|
11
|
-
* title fn that calls it); `buildCredentialDescription` / `buildCriteria` are
|
|
12
|
-
* Freewallet's, kept here as they are used only by `getDisplayFields` (and
|
|
13
|
-
* covered by the ported helper tests).
|
|
14
|
-
*/
|
|
15
|
-
import type { IAlignment, IVerifiableCredential } from '@interop/data-integrity-core';
|
|
16
|
-
/**
|
|
17
|
-
* The flat display projection of a VC for the card / detail view.
|
|
18
|
-
*/
|
|
19
|
-
export interface CredentialDisplayFields {
|
|
20
|
-
credentialName: string;
|
|
21
|
-
issuedTo: string;
|
|
22
|
-
/**
|
|
23
|
-
* Raw ISO expiration string (`''` when none).
|
|
24
|
-
*/
|
|
25
|
-
expirationDate: string;
|
|
26
|
-
credentialDescription: string;
|
|
27
|
-
criteria: string;
|
|
28
|
-
achievementImage: string;
|
|
29
|
-
achievementType: string;
|
|
30
|
-
alignments: IAlignment[];
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Joins achievement descriptions, skill narratives / durations, and various
|
|
34
|
-
* subject description fields into a single paragraph-separated string.
|
|
35
|
-
*
|
|
36
|
-
* @param subject {Record<string, unknown>}
|
|
37
|
-
* @param achievements {Record<string, unknown>[]}
|
|
38
|
-
* @returns {string}
|
|
39
|
-
*/
|
|
40
|
-
export declare function buildCredentialDescription(subject: Record<string, unknown>, achievements: Record<string, unknown>[]): string;
|
|
41
|
-
/**
|
|
42
|
-
* Builds the criteria text from the achievements' criteria narratives (labeled
|
|
43
|
-
* with the achievement name when there is more than one), falling back to the
|
|
44
|
-
* subject's `hasCredential.competencyRequired`.
|
|
45
|
-
*
|
|
46
|
-
* @param subject {Record<string, unknown>}
|
|
47
|
-
* @param achievements {Record<string, unknown>[]}
|
|
48
|
-
* @returns {string}
|
|
49
|
-
*/
|
|
50
|
-
export declare function buildCriteria(subject: Record<string, unknown>, achievements: Record<string, unknown>[]): string;
|
|
51
|
-
/**
|
|
52
|
-
* Projects a VC to its flat display field set. The title uses the merged
|
|
53
|
-
* {@link credentialName}; `expirationDate` is a raw ISO string.
|
|
54
|
-
*
|
|
55
|
-
* @param verifiableCredential {IVerifiableCredential}
|
|
56
|
-
* @returns {CredentialDisplayFields}
|
|
57
|
-
*/
|
|
58
|
-
export declare function getDisplayFields(verifiableCredential: IVerifiableCredential): CredentialDisplayFields;
|
|
59
|
-
//# sourceMappingURL=displayFields.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"displayFields.d.ts","sourceRoot":"","sources":["../../src/display/displayFields.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAEV,UAAU,EACV,qBAAqB,EACtB,MAAM,8BAA8B,CAAA;AAerC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,UAAU,EAAE,CAAA;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACtC,MAAM,CAqDR;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACtC,MAAM,CAuBR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,oBAAoB,EAAE,qBAAqB,GAC1C,uBAAuB,CA2CzB"}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { credentialName } from './credentialName.js';
|
|
2
|
-
import { getSubject, extractIssuedTo } from './subject.js';
|
|
3
|
-
import { getExpirationDate } from './validity.js';
|
|
4
|
-
import { achievementsList, skillsList, getSkillImage, getEvidenceImage, getAchievementImage, getAchievementType } from './obv3.js';
|
|
5
|
-
import { normalizeAlignments } from './alignment.js';
|
|
6
|
-
import { asRecord, getTrimmedString } from './text.js';
|
|
7
|
-
/**
|
|
8
|
-
* Joins achievement descriptions, skill narratives / durations, and various
|
|
9
|
-
* subject description fields into a single paragraph-separated string.
|
|
10
|
-
*
|
|
11
|
-
* @param subject {Record<string, unknown>}
|
|
12
|
-
* @param achievements {Record<string, unknown>[]}
|
|
13
|
-
* @returns {string}
|
|
14
|
-
*/
|
|
15
|
-
export function buildCredentialDescription(subject, achievements) {
|
|
16
|
-
const descriptionParts = [];
|
|
17
|
-
for (const achievement of achievements) {
|
|
18
|
-
const achievementDescription = getTrimmedString(achievement.description);
|
|
19
|
-
if (achievementDescription) {
|
|
20
|
-
descriptionParts.push(achievementDescription);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
for (const skill of skillsList(subject)) {
|
|
24
|
-
const narrative = getTrimmedString(skill.narrative);
|
|
25
|
-
if (narrative) {
|
|
26
|
-
descriptionParts.push(narrative);
|
|
27
|
-
}
|
|
28
|
-
const skillDuration = getTrimmedString(skill.durationPerformed);
|
|
29
|
-
if (skillDuration) {
|
|
30
|
-
descriptionParts.push(`Duration: ${skillDuration}`);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
const subjectNarrative = getTrimmedString(subject.narrative);
|
|
34
|
-
if (subjectNarrative) {
|
|
35
|
-
descriptionParts.push(subjectNarrative);
|
|
36
|
-
}
|
|
37
|
-
const evidenceDescription = getTrimmedString(subject.evidenceDescription);
|
|
38
|
-
if (evidenceDescription) {
|
|
39
|
-
descriptionParts.push(evidenceDescription);
|
|
40
|
-
}
|
|
41
|
-
const duration = getTrimmedString(subject.duration);
|
|
42
|
-
if (duration) {
|
|
43
|
-
descriptionParts.push(`Duration: ${duration}`);
|
|
44
|
-
}
|
|
45
|
-
const evidenceLink = getTrimmedString(subject.evidenceLink);
|
|
46
|
-
if (evidenceLink) {
|
|
47
|
-
descriptionParts.push(`Evidence: ${evidenceLink}`);
|
|
48
|
-
}
|
|
49
|
-
const subjectDescription = getTrimmedString(subject.description);
|
|
50
|
-
if (subjectDescription) {
|
|
51
|
-
descriptionParts.push(subjectDescription);
|
|
52
|
-
}
|
|
53
|
-
const hasCredential = asRecord(subject.hasCredential);
|
|
54
|
-
const hasCredentialDescription = getTrimmedString(hasCredential?.description);
|
|
55
|
-
if (hasCredentialDescription) {
|
|
56
|
-
descriptionParts.push(hasCredentialDescription);
|
|
57
|
-
}
|
|
58
|
-
return descriptionParts.join('\n\n');
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Builds the criteria text from the achievements' criteria narratives (labeled
|
|
62
|
-
* with the achievement name when there is more than one), falling back to the
|
|
63
|
-
* subject's `hasCredential.competencyRequired`.
|
|
64
|
-
*
|
|
65
|
-
* @param subject {Record<string, unknown>}
|
|
66
|
-
* @param achievements {Record<string, unknown>[]}
|
|
67
|
-
* @returns {string}
|
|
68
|
-
*/
|
|
69
|
-
export function buildCriteria(subject, achievements) {
|
|
70
|
-
const criteriaBlocks = achievements
|
|
71
|
-
.map(achievement => {
|
|
72
|
-
const criteria = asRecord(achievement.criteria);
|
|
73
|
-
const narrative = getTrimmedString(criteria?.narrative);
|
|
74
|
-
if (!narrative) {
|
|
75
|
-
return '';
|
|
76
|
-
}
|
|
77
|
-
const achievementName = getTrimmedString(achievement.name);
|
|
78
|
-
if (achievements.length > 1 && achievementName) {
|
|
79
|
-
return `**${achievementName}**\n\n${narrative}`;
|
|
80
|
-
}
|
|
81
|
-
return narrative;
|
|
82
|
-
})
|
|
83
|
-
.filter((criteriaBlock) => Boolean(criteriaBlock));
|
|
84
|
-
const criteriaText = criteriaBlocks.join('\n\n');
|
|
85
|
-
if (criteriaText) {
|
|
86
|
-
return criteriaText;
|
|
87
|
-
}
|
|
88
|
-
const hasCredential = asRecord(subject.hasCredential);
|
|
89
|
-
return getTrimmedString(hasCredential?.competencyRequired);
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Projects a VC to its flat display field set. The title uses the merged
|
|
93
|
-
* {@link credentialName}; `expirationDate` is a raw ISO string.
|
|
94
|
-
*
|
|
95
|
-
* @param verifiableCredential {IVerifiableCredential}
|
|
96
|
-
* @returns {CredentialDisplayFields}
|
|
97
|
-
*/
|
|
98
|
-
export function getDisplayFields(verifiableCredential) {
|
|
99
|
-
const commonFields = {
|
|
100
|
-
credentialName: credentialName(verifiableCredential),
|
|
101
|
-
issuedTo: extractIssuedTo(verifiableCredential),
|
|
102
|
-
expirationDate: getExpirationDate(verifiableCredential) ?? ''
|
|
103
|
-
};
|
|
104
|
-
const subject = asRecord(getSubject(verifiableCredential));
|
|
105
|
-
if (!subject) {
|
|
106
|
-
return {
|
|
107
|
-
...commonFields,
|
|
108
|
-
credentialDescription: '',
|
|
109
|
-
criteria: '',
|
|
110
|
-
achievementImage: '',
|
|
111
|
-
achievementType: '',
|
|
112
|
-
alignments: []
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
const achievements = achievementsList(subject);
|
|
116
|
-
const primaryAchievement = achievements[0];
|
|
117
|
-
const skills = skillsList(subject);
|
|
118
|
-
const alignments = achievements.flatMap(achievement => normalizeAlignments(achievement.alignment));
|
|
119
|
-
const evidenceRaw = verifiableCredential.evidence;
|
|
120
|
-
const evidence = Array.isArray(evidenceRaw)
|
|
121
|
-
? evidenceRaw
|
|
122
|
-
: evidenceRaw
|
|
123
|
-
? [evidenceRaw]
|
|
124
|
-
: [];
|
|
125
|
-
return {
|
|
126
|
-
...commonFields,
|
|
127
|
-
credentialDescription: buildCredentialDescription(subject, achievements),
|
|
128
|
-
criteria: buildCriteria(subject, achievements),
|
|
129
|
-
achievementImage: getAchievementImage(primaryAchievement) ||
|
|
130
|
-
getSkillImage(skills) ||
|
|
131
|
-
getEvidenceImage(evidence),
|
|
132
|
-
achievementType: getAchievementType(primaryAchievement),
|
|
133
|
-
alignments
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
//# sourceMappingURL=displayFields.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"displayFields.js","sourceRoot":"","sources":["../../src/display/displayFields.ts"],"names":[],"mappings":"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"}
|