diff --git a/.env.demo b/.env.demo index a2ebfa60..f33959ca 100644 --- a/.env.demo +++ b/.env.demo @@ -13,7 +13,7 @@ INDICIO_NYM_URL=https://selfserve.indiciotech.io/nym # Contract address for Polygon (mainnet) SCHEMA_MANAGER_CONTRACT_ADDRESS=0x4B16719E73949a62E9A7306F352ec73F1B143c27 DID_CONTRACT_ADDRESS=0x0C16958c4246271622201101C83B9F0Fc7180d15 -RPC_URL=https://polygon-rpc.com +RPC_URL=https://polygon.drpc.org # Contract address for Polygon (testnet) # SCHEMA_MANAGER_CONTRACT_ADDRESS=0x4742d43C2dFCa5a1d4238240Afa8547Daf87Ee7a # DID_CONTRACT_ADDRESS=0xcB80F37eDD2bE3570c6C9D5B0888614E04E1e49E @@ -47,143 +47,96 @@ INDICIO_TEST_GENESIS='{"reqSignature":{},"txn":{"data":{"data":{"alias":"OpsNode {"reqSignature":{},"txn":{"data":{"data":{"alias":"lorica-identity-node1","blskey":"wUh24sVCQ8PHDgSb343g2eLxjD5vwxsrETfuV2sbwMNnYon9nhbaK5jcWTekvXtyiwxHxuiCCoZwKS97MQEAeC2oLbbMeKjYm212QwSnm7aKLEqTStXht35VqZvZLT7Q3mPQRYLjMGixdn4ocNHrBTMwPUQYycEqwaHWgE1ncDueXY","blskey_pop":"R2sMwF7UW6AaD4ALa1uB1YVPuP6JsdJ7LsUoViM9oySFqFt34C1x1tdHDysS9wwruzaaEFui6xNPqJ8eu3UBqcFKkoWhdsMqCALwe63ytxPwvtLtCffJLhHAcgrPC7DorXYdqhdG2cevdqc5oqFEAaKoFDBf12p5SsbbM4PYWCmVCb","client_ip":"35.225.220.151","client_port":"9702","node_ip":"35.224.26.110","node_port":"9701","services":["VALIDATOR"]},"dest":"k74ZsZuUaJEcB8RRxMwkCwdE5g1r9yzA3nx41qvYqYf"},"metadata":{"from":"Ex6hzsJFYzNJ7kzbfncNeU"},"type":"0"},"txnMetadata":{"seqNo":6,"txnId":"6880673ce4ae4a2352f103d2a6ae20469dd070f2027283a1da5e62a64a59d688"},"ver":"1"} {"reqSignature":{},"txn":{"data":{"data":{"alias":"cysecure-itn","blskey":"GdCvMLkkBYevRFi93b6qaj9G2u1W6Vnbg8QhRD1chhrWR8vRE8x9x7KXVeUBPFf6yW5qq2JCfA2frc8SGni2RwjtTagezfwAwnorLhVJqS5ZxTi4pgcw6smebnt4zWVhTkh6ugDHEypHwNQBcw5WhBZcEJKgNbyVLnHok9ob6cfr3u","blskey_pop":"RbH9mY7M5p3UB3oj4sT1skYwMkxjoUnja8eTYfcm83VcNbxC9zR9pCiRhk4q1dJT3wkDBPGNKnk2p83vaJYLcgMuJtzoWoJAWAxjb3Mcq8Agf6cgQpBuzBq2uCzFPuQCAhDS4Kv9iwA6FsRnfvoeFTs1hhgSJVxQzDWMVTVAD9uCqu","client_ip":"35.169.19.171","client_port":"9702","node_ip":"54.225.56.21","node_port":"9701","services":["VALIDATOR"]},"dest":"4ETBDmHzx8iDQB6Xygmo9nNXtMgq9f6hxGArNhQ6Hh3u"},"metadata":{"from":"uSXXXEdBicPHMMhr3ddNF"},"type":"0"},"txnMetadata":{"seqNo":7,"txnId":"3c21718b07806b2f193b35953dda5b68b288efd551dce4467ce890703d5ba549"},"ver":"1"}' -CREDEBL_TEST_GENESIS='{"reqSignature": {}, "txn": {"data": {"data": {"alias": "Node1", "blskey": "4N8aUNHSgjQVgkpm8nhNEfDf6txHznoYREg9kirmJrkivgL4oSEimFF6nsQ6M41QvhM2Z33nves5vfSn9n1UwNFJBYtWVnHYMATn76vLuL3zU88KyeAYcHfsih3He6UHcXDxcaecHVz6jhCYz1P2UZn2bDVruL5wXpehgBfBaLKm3Ba", "blskey_pop": "RahHYiCvoNCtPTrVtP7nMC5eTYrsUA8WjXbdhNc8debh1agE9bGiJxWBXYNFbnJXoXhWFMvyqhqhRoq737YQemH5ik9oL7R4NTTCz2LEZhkgLJzB3QRQqJyBNyv7acbdHrAT8nQ9UkLbaVL9NBpnWXBTw4LEMePaSHEw66RzPNdAX1", "client_ip": "192.168.1.74", "client_port": 9702, "node_ip": "192.168.1.74", "node_port": 9701, "services": ["VALIDATOR"]}, "dest": "Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv"}, "metadata": {"from": "Th7MpTaRZVRYnPiabds81Y"}, "type": "0"}, "txnMetadata": {"seqNo": 1, "txnId": "fea82e10e894419fe2bea7d96296a6d46f50f93f9eeda954ec461b2ed2950b62"}, "ver": "1"} -{"reqSignature": {}, "txn": {"data": {"data": {"alias": "Node2", "blskey": "37rAPpXVoxzKhz7d9gkUe52XuXryuLXoM6P6LbWDB7LSbG62Lsb33sfG7zqS8TK1MXwuCHj1FKNzVpsnafmqLG1vXN88rt38mNFs9TENzm4QHdBzsvCuoBnPH7rpYYDo9DZNJePaDvRvqJKByCabubJz3XXKbEeshzpz4Ma5QYpJqjk", "blskey_pop": "Qr658mWZ2YC8JXGXwMDQTzuZCWF7NK9EwxphGmcBvCh6ybUuLxbG65nsX4JvD4SPNtkJ2w9ug1yLTj6fgmuDg41TgECXjLCij3RMsV8CwewBVgVN67wsA45DFWvqvLtu4rjNnE9JbdFTc1Z4WCPA3Xan44K1HoHAq9EVeaRYs8zoF5", "client_ip": "192.168.1.74", "client_port": 9704, "node_ip": "192.168.1.74", "node_port": 9703, "services": ["VALIDATOR"]}, "dest": "8ECVSk179mjsjKRLWiQtssMLgp6EPhWXtaYyStWPSGAb"}, "metadata": {"from": "EbP4aYNeTHL6q385GuVpRV"}, "type": "0"}, "txnMetadata": {"seqNo": 2, "txnId": "1ac8aece2a18ced660fef8694b61aac3af08ba875ce3026a160acbc3a3af35fc"}, "ver": "1"} -{"reqSignature": {}, "txn": {"data": {"data": {"alias": "Node3", "blskey": "3WFpdbg7C5cnLYZwFZevJqhubkFALBfCBBok15GdrKMUhUjGsk3jV6QKj6MZgEubF7oqCafxNdkm7eswgA4sdKTRc82tLGzZBd6vNqU8dupzup6uYUf32KTHTPQbuUM8Yk4QFXjEf2Usu2TJcNkdgpyeUSX42u5LqdDDpNSWUK5deC5", "blskey_pop": "QwDeb2CkNSx6r8QC8vGQK3GRv7Yndn84TGNijX8YXHPiagXajyfTjoR87rXUu4G4QLk2cF8NNyqWiYMus1623dELWwx57rLCFqGh7N4ZRbGDRP4fnVcaKg1BcUxQ866Ven4gw8y4N56S5HzxXNBZtLYmhGHvDtk6PFkFwCvxYrNYjh", "client_ip": "192.168.1.74", "client_port": 9706, "node_ip": "192.168.1.74", "node_port": 9705, "services": ["VALIDATOR"]}, "dest": "DKVxG2fXXTU8yT5N7hGEbXB3dfdAnYv1JczDUHpmDxya"}, "metadata": {"from": "4cU41vWW82ArfxJxHkzXPG"}, "type": "0"}, "txnMetadata": {"seqNo": 3, "txnId": "7e9f355dffa78ed24668f0e0e369fd8c224076571c51e2ea8be5f26479edebe4"}, "ver": "1"} -{"reqSignature": {}, "txn": {"data": {"data": {"alias": "Node4", "blskey": "2zN3bHM1m4rLz54MJHYSwvqzPchYp8jkHswveCLAEJVcX6Mm1wHQD1SkPYMzUDTZvWvhuE6VNAkK3KxVeEmsanSmvjVkReDeBEMxeDaayjcZjFGPydyey1qxBHmTvAnBKoPydvuTAqx5f7YNNRAdeLmUi99gERUU7TD8KfAa6MpQ9bw", "blskey_pop": "RPLagxaR5xdimFzwmzYnz4ZhWtYQEj8iR5ZU53T2gitPCyCHQneUn2Huc4oeLd2B2HzkGnjAff4hWTJT6C7qHYB1Mv2wU5iHHGFWkhnTX9WsEAbunJCV2qcaXScKj4tTfvdDKfLiVuU2av6hbsMztirRze7LvYBkRHV3tGwyCptsrP", "client_ip": "192.168.1.74", "client_port": 9708, "node_ip": "192.168.1.74", "node_port": 9707, "services": ["VALIDATOR"]}, "dest": "4PS3EDQ3dW1tci1Bp6543CfuuebjFrg36kLAUcskGfaA"}, "metadata": {"from": "TWwCRQRZ2ZHMJFn9TzLp7W"}, "type": "0"}, "txnMetadata": {"seqNo": 4, "txnId": "aa5e817d7cc626170eca175822029339a444eb0ee8f0bd20d3b0b76e566fb008"}, "ver": "1"}' - -SOVRIN_STAGING_NET='{"reqSignature":{},"txn":{"data":{"data":{"alias":"australia","client_ip":"52.64.96.160","client_port":"9702","node_ip":"52.64.96.160","node_port":"9701","services":["VALIDATOR"]},"dest":"UZH61eLH3JokEwjMWQoCMwB3PMD6zRBvG6NCv5yVwXz"},"metadata":{"from":"3U8HUen8WcgpbnEz1etnai"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"c585f1decb986f7ff19b8d03deba346ab8a0494cc1e4d69ad9b8acb0dfbeab6f"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"brazil","client_ip":"54.233.203.241","client_port":"9702","node_ip":"54.233.203.241","node_port":"9701","services":["VALIDATOR"]},"dest":"2MHGDD2XpRJohQzsXu4FAANcmdypfNdpcqRbqnhkQsCq"},"metadata":{"from":"G3knUCmDrWd1FJrRryuKTw"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"5c8f52ca28966103ff0aad98160bc8e978c9ca0285a2043a521481d11ed17506"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"canada","client_ip":"52.60.207.225","client_port":"9702","node_ip":"52.60.207.225","node_port":"9701","services":["VALIDATOR"]},"dest":"8NZ6tbcPN2NVvf2fVhZWqU11XModNudhbe15JSctCXab"},"metadata":{"from":"22QmMyTEAbaF4VfL7LameE"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"408c7c5887a0f3905767754f424989b0089c14ac502d7f851d11b31ea2d1baa6"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"england","client_ip":"52.56.191.9","client_port":"9702","node_ip":"52.56.191.9","node_port":"9701","services":["VALIDATOR"]},"dest":"DNuLANU7f1QvW1esN3Sv9Eap9j14QuLiPeYzf28Nub4W"},"metadata":{"from":"NYh3bcUeSsJJcxBE6TTmEr"},"type":"0"},"txnMetadata":{"seqNo":4,"txnId":"d56d0ff69b62792a00a361fbf6e02e2a634a7a8da1c3e49d59e71e0f19c27875"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"korea","client_ip":"52.79.115.223","client_port":"9702","node_ip":"52.79.115.223","node_port":"9701","services":["VALIDATOR"]},"dest":"HCNuqUoXuK9GXGd2EULPaiMso2pJnxR6fCZpmRYbc7vM"},"metadata":{"from":"U38UHML5A1BQ1mYh7tYXeu"},"type":"0"},"txnMetadata":{"seqNo":5,"txnId":"76201e78aca720dbaf516d86d9342ad5b5d46f5badecf828eb9edfee8ab48a50"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"singapore","client_ip":"13.228.62.7","client_port":"9702","node_ip":"13.228.62.7","node_port":"9701","services":["VALIDATOR"]},"dest":"Dh99uW8jSNRBiRQ4JEMpGmJYvzmF35E6ibnmAAf7tbk8"},"metadata":{"from":"HfXThVwhJB4o1Q1Fjr4yrC"},"type":"0"},"txnMetadata":{"seqNo":6,"txnId":"51e2a46721d104d9148d85b617833e7745fdbd6795cb0b502a5b6ea31d33378e"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"virginia","client_ip":"34.225.215.131","client_port":"9702","node_ip":"34.225.215.131","node_port":"9701","services":["VALIDATOR"]},"dest":"EoGRm7eRADtHJRThMCrBXMUM2FpPRML19tNxDAG8YTP8"},"metadata":{"from":"SPdfHq6rGcySFVjDX4iyCo"},"type":"0"},"txnMetadata":{"seqNo":7,"txnId":"0a4992ea442b53e3dca861deac09a8d4987004a8483079b12861080ea4aa1b52"},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"3U8HUen8WcgpbnEz1etnai","value":"NXjsBfaDijk6P6W6fg1EKrzPYhDvkNHbDcSMaYdja4URdiEdaPFcqXQttgwytcKZL79BsV3i8ShWbDS5L9Um5Pj"}]},"txn":{"data":{"data":{"alias":"australia","blskey":"31My1Ya9D1v5edgkGfYb96k4HWN1GwWWUeEnzzgw3NpiVmjpyjKgPmTYvPWZAYt8CLJLWzoQrEcBYhKRedsx8JMEB4LyPVx5vgbcjKsiUK2985t9Pkpn45UAYjDvVmGSbF2y99mMjQxpt7nCwGZ9yKcEm1cLpyHxvbnceZGkf8e9HYs"},"dest":"UZH61eLH3JokEwjMWQoCMwB3PMD6zRBvG6NCv5yVwXz"},"metadata":{"digest":"f8297516300f34624d25bf38b558f8ac9df2830a4e7fe8ccdf6816ec597da4cc","from":"3U8HUen8WcgpbnEz1etnai","reqId":1518718611795589},"type":"0"},"txnMetadata":{"seqNo":8,"txnTime":1518718611},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"3U8HUen8WcgpbnEz1etnai","value":"4wiCViKevghYdtcdJXdAmS4Cwy9dAsc5eDUqHnjZXcnBbVpc71iHdyWj83U4teK65Yq2g2no8ddzJscEVTZn1ueC"}]},"txn":{"data":{"data":{"alias":"australia","blskey":"KMbkBaLigL6wUbYZmh3d41EeCRVrW1hWkpGRcy2CXZ6ugZF1Zb7ZeL3RPRasaARYkuWmjYAuLE8WiVC1dL5ZQuJczAJfDsk73hxivHxqeBaXDQwEBN2dESLZHdK3oMU79ZhqBqnEgvvAvmVyyneW661if5c45AFJgGYPtpenxS49MB"},"dest":"UZH61eLH3JokEwjMWQoCMwB3PMD6zRBvG6NCv5yVwXz"},"metadata":{"digest":"77ab856e84ef72f87a6e99ecd447da338d1eddf332b9cd33a1399aba98d39ef4","from":"3U8HUen8WcgpbnEz1etnai","reqId":1518718754041702},"type":"0"},"txnMetadata":{"seqNo":9,"txnTime":1518718754},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"G3knUCmDrWd1FJrRryuKTw","value":"5owgEB8jgYUaGsH3pV6DyFMSiwXPqMgM4u9NzgCyJpnENTzyF1BmeVaNomRunbL9R4EhfbrDNHW9RJFd5GT5pAPs"}]},"txn":{"data":{"data":{"alias":"brazil","blskey":"2G1tp8pjdRSiZnpsWpN5c4tnGGTCPbqEkf8MyaVnfSxBun7pdtRqq83E7XnY4uzNmzpBF5PZcPBonfZXzCT2qWjRAB7PaDUWU5zWfLKhNoRmEzaeFp2dVkd9XrcefSfynStWsiPmv4tG8CHX153kL9Le7LMBk9qCRjeXn77wCUXqyvB"},"dest":"2MHGDD2XpRJohQzsXu4FAANcmdypfNdpcqRbqnhkQsCq"},"metadata":{"digest":"999bb3eecd2807ebf31c619518775f6219a1a6e51234f3a1f3b1021dd900dd97","from":"G3knUCmDrWd1FJrRryuKTw","reqId":1518719363728031},"type":"0"},"txnMetadata":{"seqNo":10,"txnTime":1518719363},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"22QmMyTEAbaF4VfL7LameE","value":"5yVCBN5z8ehtM14FdGcRPDEc3asUrEH83PdbEBpfyrvHprn8iUZMBSCo4kkirvS1HirLLxU4mHssGvm4baGfTXfc"}]},"txn":{"data":{"data":{"alias":"canada","blskey":"q6nBf5jDDQN23yKEvVsxYjMkS843yspF44867S9Fhht2uUogbAed4cXLfxdTJMLYvsNT2fhA2jmnNSQwUyWfXjBFUSZqNhvJdC3d5XvcW8aqCGnV1BY9fR1kvrQXoLjaYgr1Je33NJxLNpJLumGF6WvuW6SuZYJPbfWxo7F1Vhy8oV"},"dest":"8NZ6tbcPN2NVvf2fVhZWqU11XModNudhbe15JSctCXab"},"metadata":{"digest":"306bb20ca4c46e485e0c93abd6ee9960d8954928d5603d79ade75c7ef22c4288","from":"22QmMyTEAbaF4VfL7LameE","reqId":1518719479176817},"type":"0"},"txnMetadata":{"seqNo":11,"txnTime":1518719479},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"NYh3bcUeSsJJcxBE6TTmEr","value":"G99xrEafV1BhUtgLb8jugDQvu4JLp5R2s5T4ZqSuy5pPNnDRZyhWn6iW89Uwe476uxxdugx7TzEXY61wZXCsUNs"}]},"txn":{"data":{"data":{"alias":"england","blskey":"3TXrLKV5Yn2BE47NBEvM9u6J2DUsn414sUhQQQN1X2mRKhsPvWnixqo1AbFC5kRVjpHDhRPzvenm7cApfGcCGMDME1mSwESxiYgkgpahc9DuGD5hvFieryk3yJ96jcumWA7NUUDYmiHhZfCThXvGS9agXK4Kt3sgxBYQ17yN7wj3cRN"},"dest":"DNuLANU7f1QvW1esN3Sv9Eap9j14QuLiPeYzf28Nub4W"},"metadata":{"digest":"fb5062d61960bd6f742519c6df9ca5463e6c83689cad58a7c84783a7d013c3fb","from":"NYh3bcUeSsJJcxBE6TTmEr","reqId":1518719555172082},"type":"0"},"txnMetadata":{"seqNo":12,"txnTime":1518719555},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"U38UHML5A1BQ1mYh7tYXeu","value":"4ns8r24bUMZqs2AVrBUpK66gGBA3pp2h98BM8XC2nHghbyrmWA6KpSjnmEfLKBgDZcFaoSX4Wu2d6TJzeRsVQQ8Q"}]},"txn":{"data":{"data":{"alias":"korea","blskey":"2b51xiHs4afNBiTUenKJ2XHmPMfYcNFHAwB2x39z953y1YawDTKnUW9Q2gPCQvRR5esvF235PHfv9b5GYFnXPo41wzotm7LiYsYimAarVh2PFo3CAz5DSo9xA6Xo9EhP2JnDSvi2APqGn2UpoYtpRtz2bMFurqrnw6UPz4vq91x23hJ"},"dest":"HCNuqUoXuK9GXGd2EULPaiMso2pJnxR6fCZpmRYbc7vM"},"metadata":{"digest":"4943fc79d796067841ad0aeb0e44c54bb88a1e152e2bc482925ebe3df9e5d032","from":"U38UHML5A1BQ1mYh7tYXeu","reqId":1518719649363976},"type":"0"},"txnMetadata":{"seqNo":13,"txnTime":1518719649},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"HfXThVwhJB4o1Q1Fjr4yrC","value":"2pC8hkN3MxyJeUZmkqhvvUEi3uCwTbKd14Yjc4uVJjNqx2Hj6oXvwaZPvmJn3VJMkKKE7tpFrtwyFXx8CJ5WwArf"}]},"txn":{"data":{"data":{"alias":"singapore","blskey":"CT7HsX8MAcAnWZ8CFF1ttdYG91hNc7K9dGfpcp4QprLRYVR2XSr2ywHuNT5zLPvTkGDjrjyF2HdMbLkdNGgRa5LH1Am3D619yycJjP8t51c2XygEjoa6J1TmUjYkuC44Q6Aq1BriX5hJ2oxJL3bvnM2g7QRzRPyFdM771zNutV72W3"},"dest":"Dh99uW8jSNRBiRQ4JEMpGmJYvzmF35E6ibnmAAf7tbk8"},"metadata":{"digest":"2dce61e98838e65cd7c303adc248c8fabeab4ecc0492f16572521b2f1939c975","from":"HfXThVwhJB4o1Q1Fjr4yrC","reqId":1518719769599617},"type":"0"},"txnMetadata":{"seqNo":14,"txnTime":1518719769},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"SPdfHq6rGcySFVjDX4iyCo","value":"2xLQwrn2jvg6XZcXGuW6AQ3PKiSHPNAdaHM6CVb8iwDA15HHoPUSi2PGkFvUyFya82QiCA22Y11NDX4Yh4Kx7DqR"}]},"txn":{"data":{"data":{"alias":"virginia","blskey":"372y1y4t9JdTtkyA4C5ANi88YGGaBtSpWd1FL6TJawxn1gnkebpztpsiN5AjTkwARMsTZWX8VyBZ3UGhPd7grmVgoBogTBf1LyvpnmVJR2p9TC26fDFz9GFhynAcPfHQ3xLvVjSyAYH8JjEHRS2yMXxhq8gZCTy494shNXP1wKCD8Ny"},"dest":"EoGRm7eRADtHJRThMCrBXMUM2FpPRML19tNxDAG8YTP8"},"metadata":{"digest":"113c1a81394cbadc48d57aef9d9eb93722f318d01261ed3dc162d8e0f527e37a","from":"SPdfHq6rGcySFVjDX4iyCo","reqId":1518719862981841},"type":"0"},"txnMetadata":{"seqNo":15,"txnTime":1518719863},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"A3h7JbvErKPCfaJx3VNRJ9","value":"4jzEdvJYAKB4vMNMU2VVe4dvGwT2fy28WPuvZipVEqf6R7qkuDWBXLYLBSzGAkUErtRKUnb7KH2eSrZSEgHRozTx"}]},"txn":{"data":{"data":{"alias":"ibm","blskey":"Wv1XfnPWngRPQNQnnaMsewidNtc6Rc2mx842q5ApKTgUdUs2YBZZFgSw4TdWa8HVMZvptiukdooXhTimEwxw9dFQRK5faYb2LBdeRZ6RR2kXz39a6vjyG71arL7Q6FnetH6N2NMFBACdu1PBUYKWAyBn5K8ZUUGgt2YhmZJ9DnieLa","client_ip":"169.60.5.114","client_port":9702,"node_ip":"169.60.5.114","node_port":9701,"services":["VALIDATOR"]},"dest":"Eq7m7GMFKPeq5Ek3HH1PkHxzZ46R9VL1Eube3U9wfjp5"},"metadata":{"digest":"a1dfd555da4085210b53245a199a7d431f4a6328e8936050ec3dc794fe5a2b07","from":"A3h7JbvErKPCfaJx3VNRJ9","reqId":1518798036389445},"type":"0"},"txnMetadata":{"seqNo":16,"txnTime":1518798036},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TnxHS11bsfWrzzi612R2X8","value":"5tHfCPQfV2XAqo7V42akRqmtDqmbX4HUMAZSy9xKz6vERMSDFHmraW4ZEK9hUacjiRthn7P5KuLmopu1mCLwWXhq"}]},"txn":{"data":{"data":{"alias":"RFCU","blskey":"3FuY8wqmBi2XxL4EtJDo3Lhad48QN5ZbhH4kEV3Kfkeb53x94qmWfRndZQJo91M3aWtYpZaZqDaqrQMpuEcAvh8g9hLmb9BWbhK6BVvACSJ2RUiDhBRp4NPkg93tNmQjkdzWoUznFZvbPTTBPBcsmngTake7Sm4YLf1tbd8vuF7Nqkd","client_ip":"207.108.62.234","client_port":9702,"node_ip":"207.108.62.234","node_port":9701,"services":["VALIDATOR"]},"dest":"2B8bkZX3SvcBq3amP7aeATsSPz82RyyCJQbEjZpLgZLh"},"metadata":{"digest":"54d0fb8b9ebc2167d16f9d2027b49917fb484ec6e33caad48bf1516ba27460af","from":"TnxHS11bsfWrzzi612R2X8","reqId":1518798718080714},"type":"0"},"txnMetadata":{"seqNo":17,"txnTime":1518798718},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"ApndPYajjcdTnpvopThGwh","value":"5eyGhLmKmJx5SzkqmS5LD4s4rkQHDAeGh7PmZKhTNJ8MxdbSaZEGjVj4XYD37GeGTepfLwmivJDJjfYaDQGV7aoi"}]},"txn":{"data":{"data":{"alias":"pcValidator01","blskey":"3NU2sWYG7eeJY66W1FGpLgLaDS9fDQfKMNgPGMCk9iTcatMd4XdmAF5UqULkLUpGWABftNTrRsgm82DpfJ1cTu7CTB84KYoW4SYf7Rq4a2wi6rVbmU6k76ZYgmny6h8vqBbdRwozxVTjkPyzV6Z5MSA3vrDdf31iiiPEcXTTT3oFhKC","client_ip":"52.175.254.49","client_port":9799,"node_ip":"52.175.254.49","node_port":9701,"services":["VALIDATOR"]},"dest":"5fKwygs8KEGoUPGa65qz1oCm7h6Fb7HrML9r4jmZ9cic"},"metadata":{"digest":"9dd9cd0dc1ee21694c798c41e80922afd44e70b4e067b2c9c3582c929248ee74","from":"ApndPYajjcdTnpvopThGwh","reqId":1518809271040696},"type":"0"},"txnMetadata":{"seqNo":18,"txnTime":1518809270},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"G4zXq8L7L8n73WKSVv2HxY","value":"Yyd84xQCFWTQovZjUFohaXp3UhXdHX4wj25CGnpvcQs9LKE37DRj4DWvh2RkJALeBLtPZJsXwzKyuivPxLA8QVj"}]},"txn":{"data":{"data":{"alias":"NewtonD","blskey":"36fw9Bz4tLCkzZhUQdA2N51AZWCF6sdyiDuAX7WuNsqeq3C2dCzvS9GeSxt9t1BWxtHWc2GJDVBcqZKGh7Tg2eoQa1KTPhPFRdShBhYPDfP85gKKshHa5aEdLBvTsUkADaDoyFv4rhqTLDFbdcu4WsQE59pxyj3QTSAURgRhxkcm2oJ","client_ip":"52.165.40.82","client_port":9701,"node_ip":"40.69.165.222","node_port":9777,"services":["VALIDATOR"]},"dest":"HU8AkmtsqvcfEtvdWAZgZZFfvKYH8vu2YdgkkHrmNDGP"},"metadata":{"digest":"e0afed7d71f511362c2b21cb90c0b68fc1cb176e233d147a267375350133a6b6","from":"G4zXq8L7L8n73WKSVv2HxY","reqId":1519949508036643},"type":"0"},"txnMetadata":{"seqNo":19,"txnTime":1519949508},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"EKvw1VdXwS2pWKLLyBLCDs","value":"DqCfNstgx5q8gaM57b6qUooHCuhFFqqs7H995UDSBARoD7LWn6gaqJAmcz56NMUmtiWSqpqreBFxwPMr66xPj2Z"}]},"txn":{"data":{"data":{"alias":"Aalto","blskey":"emFqQUM4yqEWdhbk8KzLry6okMk5MsQUoR922BdBS8KBFxNAofPPDzDSR6pwu8ytZVVrfWGbVBs3D6WDt8dZAQY1xYJoAax7pt9Bkgen5Tc2BM5dLhuHpDwRLAmXFFxQbTxArAKidQeeB9wBJbScbbVnWjNNiYPreaZjgFXUGoWjSS","client_ip":"130.233.224.231","client_port":9702,"node_ip":"130.233.224.231","node_port":9701,"services":["VALIDATOR"]},"dest":"7JYQmTE6mBxa5RAZwXAj4bxqetAy64tcEUShqzJjLRrE"},"metadata":{"digest":"5c717908d4b75e92767cca818ac7530789c765c08207eec38cd18eff93b76502","from":"EKvw1VdXwS2pWKLLyBLCDs","reqId":1520418048198552},"type":"0"},"txnMetadata":{"seqNo":20,"txnTime":1520418048},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"Qm7Ugni6jFRpfbPkzhXzXH","value":"jAGG7yFmyLXRGUS2yqoNikvCGWhWeS9eFRyb5vfzu9ZjuAqbiyL4SfNv8NpMAs9Bsda5Y9kZfg9wrW8GufX8NNN"}]},"txn":{"data":{"data":{"alias":"Stuard","blskey":"4Yry2Z17vf1Hf24HvRrduj3Zi5LBJ1x7PbDqNWX19RxHcYJVjpy2f9qriZk7Fx812Xip6LEhsEXWRB1qKujBwdLNbCvMFYnJK2kS2B9HNgDgbVwDbpw16QNuJMtUnvQv1B6vCmci96gypYWMvZmJ6p9qsPXA7CZ2ZSjRuLg3RqvD7y4","client_ip":"10.0.0.10","client_port":9702,"node_ip":"10.0.0.10","node_port":9701,"services":["VALIDATOR"]},"dest":"C4e4rEwPZ4bM341VEL9ysnAgBiMW42RH3UmbriPuzoCb"},"metadata":{"digest":"70d1ed111dd5fec2e46378152f0e8ed5a99728e06288f721fad337b8ba9bae3c","from":"Qm7Ugni6jFRpfbPkzhXzXH","reqId":1521022519350930},"type":"0"},"txnMetadata":{"seqNo":21,"txnTime":1521022519},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"Qm7Ugni6jFRpfbPkzhXzXH","value":"5yKYfGouHn494CtFhEMLYYuWHC9rPhsUWBpXLneJT8jt869rjVxeab9iABYS2Uq55Avjwtd25Xfvyru57HwQMfZb"}]},"txn":{"data":{"data":{"alias":"Stuard","blskey":"4Yry2Z17vf1Hf24HvRrduj3Zi5LBJ1x7PbDqNWX19RxHcYJVjpy2f9qriZk7Fx812Xip6LEhsEXWRB1qKujBwdLNbCvMFYnJK2kS2B9HNgDgbVwDbpw16QNuJMtUnvQv1B6vCmci96gypYWMvZmJ6p9qsPXA7CZ2ZSjRuLg3RqvD7y4","client_ip":"185.27.183.66","client_port":9702,"node_ip":"185.27.183.66","node_port":9701,"services":["VALIDATOR"]},"dest":"C4e4rEwPZ4bM341VEL9ysnAgBiMW42RH3UmbriPuzoCb"},"metadata":{"digest":"0c7f5c756b286dcf1c769cec7a3d5cfeaf57c38ac25e4a83e9d37b417b20774c","from":"Qm7Ugni6jFRpfbPkzhXzXH","reqId":1521070797707610},"type":"0"},"txnMetadata":{"seqNo":22,"txnTime":1521070797},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"FzUUYiVKCDnSWd77NHfhpZ","value":"3Q3ijuEPihRyGsZFvmb414AWWQ7iMskCHoP7bC14FgPesNdPNY3pdfddEfPf5FrCg4wzdvdAFjKaBunHHwXCG4V3"}]},"txn":{"data":{"data":{"alias":"TNO","blskey":"37d7DmcwGWM7yfnpwLGzwVy6zZwoc6cAgeeSJFBWbVh6jq5tP8dPf7s2XDxxtWafmr1JdyzycBcNztEsE8Uf9qX2jRoXzhCnjEEYJCAByEn5hWC2VQ9EqkuKzq28Vob7Piof7rEJeUPxuBZtrXL1khyTN2waQtix6CYtv9QejNPZVJ2","client_ip":"134.221.127.143","client_port":9702,"node_ip":"134.221.127.143","node_port":9701,"services":["VALIDATOR"]},"dest":"TZxmZoXwNk1X5o48pXqbDFz6mTJT5QkiRme9z5p86KQ"},"metadata":{"digest":"0f3b44855c6f562b17321efe51f00edab1cdbe8608c667669e8085430fa32cc5","from":"FzUUYiVKCDnSWd77NHfhpZ","reqId":1521195244613677},"type":"0"},"txnMetadata":{"seqNo":23,"txnTime":1521195244},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"3jN1g2dAPKx5giEKnc5k9GiYHBw5yFZD8D8GiuFBL7wuHUDabobCeCCDezboxqkCpHSLsVE5hDzq6RQWUKwHXwv1"}]},"txn":{"data":{"data":{"alias":"Stuard","services":[]},"dest":"C4e4rEwPZ4bM341VEL9ysnAgBiMW42RH3UmbriPuzoCb"},"metadata":{"digest":"f24b5dda0fe64addafbbdd67aa2be5731064d6c6215d56e883e67009df0ce0d8","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1521760233710703},"type":"0"},"txnMetadata":{"seqNo":24,"txnTime":1521761250},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5omTkQAe1LmYQfY4PdYf3YEjVM1jBs2Qr8x8LAhghD3ymeudEvm1dyk3nQtEtNzFvAeGhnajWMA862DWM4Hg51vv"}]},"txn":{"data":{"data":{"alias":"Aalto","services":[]},"dest":"7JYQmTE6mBxa5RAZwXAj4bxqetAy64tcEUShqzJjLRrE"},"metadata":{"digest":"f526af4c7569c941f69f1fb2dc3ad6ef98bdef2aa2aceca33d43dc92900d65bb","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1521822633807532},"type":"0"},"txnMetadata":{"seqNo":25,"txnTime":1521822633},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"4YtbkvnTMfMA6d9FjkjBcueFGq5PnLoHFKn8HAGiLKxcob2QM6KsdwLRapQcbtn9N33NimyeFzrHCerzAcbS8fVq"}]},"txn":{"data":{"data":{"alias":"pcValidator01","services":[]},"dest":"5fKwygs8KEGoUPGa65qz1oCm7h6Fb7HrML9r4jmZ9cic"},"metadata":{"digest":"f0986bab87b08031cfaeb58a06e27e8c1214f4c20af0e26c709c1c3970c0b241","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1521825598199425},"type":"0"},"txnMetadata":{"seqNo":26,"txnTime":1521825598},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"G4zXq8L7L8n73WKSVv2HxY","value":"5kkkxWBUmYYcrFSKQcgaAEhcsiwJft74Js5VpwBzL1ssfFJRJgDdjhW27hZRCao994DW5b17Xgw6UqSyBLP7UmyD"}]},"txn":{"data":{"data":{"alias":"NewtonD","services":[]},"dest":"HU8AkmtsqvcfEtvdWAZgZZFfvKYH8vu2YdgkkHrmNDGP"},"metadata":{"digest":"e2d73bb8154e3372fa0c8d57c1383c2b4710308198a76580f15ce2c3ffd5f204","from":"G4zXq8L7L8n73WKSVv2HxY","reqId":1521831913747645},"type":"0"},"txnMetadata":{"seqNo":27,"txnTime":1521831913},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"G4zXq8L7L8n73WKSVv2HxY","value":"4L9AFEy3gdV1KNHsuG4gWSuETzTmJ2aD5TzSdWiQCm13o6GfNAY8YoemyiTiwnX8mzxdghgc38CLhEBm3DwfC3Dv"}]},"txn":{"data":{"data":{"alias":"NewtonD","services":["VALIDATOR"]},"dest":"HU8AkmtsqvcfEtvdWAZgZZFfvKYH8vu2YdgkkHrmNDGP"},"metadata":{"digest":"d83f3622a59d8fe15448389a185752add786de3eaf0cabfc17cea86dc503c2a5","from":"G4zXq8L7L8n73WKSVv2HxY","reqId":1521833231516195},"type":"0"},"txnMetadata":{"seqNo":28,"txnTime":1521833231},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"xzjjfKfJJJeQxZb5WhMYyHDcDG5dZCAvsYmBh6FtP9J1ckQUazaJ7AC2ksHzjARW9kkcFBS4B1M4R7y5Bc3BN5S"}]},"txn":{"data":{"data":{"alias":"TNO","services":[]},"dest":"TZxmZoXwNk1X5o48pXqbDFz6mTJT5QkiRme9z5p86KQ"},"metadata":{"digest":"03c5763b3be5b2c53be3f2af041071bdb2f2aa08754adbdcebbcbbe055036cd6","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1522073964061797},"type":"0"},"txnMetadata":{"seqNo":29,"txnTime":1522073964},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"nm4hZxHEb86rDjHddyuFgnuy7hS7bf1Biifnje3c75Kgn1eQ5frc9xwVWFUzZNFntfVckXQK3U97wRiiP7MrijK"}]},"txn":{"data":{"data":{"alias":"NewtonD","services":[]},"dest":"HU8AkmtsqvcfEtvdWAZgZZFfvKYH8vu2YdgkkHrmNDGP"},"metadata":{"digest":"a81744dd61919ea58d75904a8d6921be18362cecb174e3d5f318384c99d912c2","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1523554207793968},"type":"0"},"txnMetadata":{"seqNo":30,"txnTime":1523554207},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"LKjUWXR3QpGsMkgB2XFyzt","value":"671v9pVTeRwN4XybdY5tjGyJZCNhGPFq3bcBxymCGJ18EQbBdDa6LXGh3brvWQ53yncspYbywrgC7eGknnqYR2GB"}]},"txn":{"data":{"data":{"alias":"VeridiumIDC","blskey":"2HhwAzNXb6qrptphzJKiAYqGtE6dNNcK8Q33EJU8hNnAhvjC4X1Bk65MbgvPMpn4rP9HZAH78StG12HfU6VyLd6JBbp6gkgwvtXUK1QefTEGcRipj3XnVJ7tjU8KzxWqaZQW5exJQQQhmedCKZphKvvnb2wuVcoBVS3Ad3ZLm2d4apo","client_ip":"18.197.183.58","client_port":9702,"node_ip":"18.197.183.58","node_port":9701,"services":["VALIDATOR"]},"dest":"58uCeMaEiMHSi8MdEdcgVbpmzMKmiLSYCEz1vxPGJND6"},"metadata":{"digest":"64a71eb01fc9becdbea811aa449d9a588c22b47e7d7434b4dae437bf8153303f","from":"LKjUWXR3QpGsMkgB2XFyzt","reqId":1524737343827561},"type":"0"},"txnMetadata":{"seqNo":31,"txnTime":1524737343},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"RtMtkBrkHCEDtGXXqRfGoV","value":"3ontWhK6hYCpGx8DgirvihSqDarZUTQ3NacwtC4okP2BNpF1xp6tzjnx6iigt8kgaRSGPacXL93AHVXeS6fvQ41t"}]},"txn":{"data":{"data":{"alias":"oregon","blskey":"2bQaqiLhyAEJh6t1xhC3jKk5PRc7v8AsEH9dxSjgVvBqwrmoiDKfSmJKBXA9kCT1uQkpaGeYyP4bkb3RA1ABYebqcswkjdVUGRZYqyxasdBD2phUbNm6WNaGtyRkhJ265KZ7YP8QaDS3NCwTXT7b8vMNmaTL8Kd1Buvaq7gS3ZLJXU6","client_ip":"18.236.138.206","client_port":9702,"node_ip":"18.236.138.206","node_port":9701,"services":["VALIDATOR"]},"dest":"4wdqCSyPeiqCbQhjsbP9Xjasm7vuU7ithawkpuoBXCBM"},"metadata":{"digest":"add1f55e950e2411deecd700285802fd154fc68668e2020df9e97cad47d79491","from":"RtMtkBrkHCEDtGXXqRfGoV","reqId":1524852414943816},"type":"0"},"txnMetadata":{"seqNo":32,"txnTime":1524852415},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"2XCnRcUZJH2JEzotFHTqin","value":"5g4zsXjPumLMTVb8rCYoALeERtgue7qq6uda1vxA2wywZc5VDLBmrJbguwMztdXLCJQKg3qbu8bcYdJUERNdX1Bq"}]},"txn":{"data":{"data":{"alias":"findentity","blskey":"4jBpQMFjEabdTHArLHAbidwcaR5o7p4fAuYbfxrtypZtDbsDACj5mZRFVvkXy5F84g7ni6yNMfL5JV1E3qXYsg3fw33Jd3MTRyAGrZZmN3zNEq6WDNT8XQsaDasDUebJaTEmRWVKMZc8BbeipCPBjym2NvfAQyib1ywZZ5B8d7m5XXH","client_ip":"172.31.28.111","client_port":9799,"node_ip":"172.31.46.137","node_port":9700,"services":["VALIDATOR"]},"dest":"5bQhBNkoFKCFAtCxe1vcXBoq6FsnJ3nWKYwUfyVS3129"},"metadata":{"digest":"dcdd47c5bcffd8aeee8b281ed78b57eef5e3ba617f905885c0c7b356f07ab00a","from":"2XCnRcUZJH2JEzotFHTqin","reqId":1525741289118866},"type":"0"},"txnMetadata":{"seqNo":33,"txnTime":1525741289},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"2XCnRcUZJH2JEzotFHTqin","value":"4wTCrfhT5wzBLpEkadt2UP21kPxiPJPWoKUKs3VSGAsi2427aJbTzPMFokSpPukfEHqMikGCeXP95kPZ5eRKazBy"}]},"txn":{"data":{"data":{"alias":"findentity","blskey":"4jBpQMFjEabdTHArLHAbidwcaR5o7p4fAuYbfxrtypZtDbsDACj5mZRFVvkXy5F84g7ni6yNMfL5JV1E3qXYsg3fw33Jd3MTRyAGrZZmN3zNEq6WDNT8XQsaDasDUebJaTEmRWVKMZc8BbeipCPBjym2NvfAQyib1ywZZ5B8d7m5XXH","client_ip":"34.211.203.16","client_port":9799,"node_ip":"34.218.164.50","node_port":9700,"services":["VALIDATOR"]},"dest":"5bQhBNkoFKCFAtCxe1vcXBoq6FsnJ3nWKYwUfyVS3129"},"metadata":{"digest":"0581a913d81b117dc6f5eb67e6faf734f838a9d6dd2f2a550edb620940ed522c","from":"2XCnRcUZJH2JEzotFHTqin","reqId":1525799946176362},"type":"0"},"txnMetadata":{"seqNo":34,"txnTime":1525799946},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"RtMtkBrkHCEDtGXXqRfGoV","value":"2EQyW1W3EVq9Qkr6Dnk1baDeE8vPcDxgPoZdKkxnKYWLdi27NLvzjziUZ2Ckeuw4MqhDdBeafW36DMQo4fDzkjBT"}]},"txn":{"data":{"data":{"alias":"oregon","services":[]},"dest":"4wdqCSyPeiqCbQhjsbP9Xjasm7vuU7ithawkpuoBXCBM"},"metadata":{"digest":"cb346aa8a0234819aa63b5c63cf7928fbbc171f1b3c00e345c24fa3f4f1e9636","from":"RtMtkBrkHCEDtGXXqRfGoV","reqId":1526508235374190101},"type":"0"},"txnMetadata":{"seqNo":35,"txnTime":1526508235},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"YHTFcv8P93i35osabNm99n","value":"2X7YznzieZ1Kc6nzWawdQHG5Z8jV8vNiwHq5BBLn8rY6SGXQCSZhichDp5V7n9he64BKoYxU6YLHuNM2DLSsEvmG"}]},"txn":{"data":{"data":{"alias":"amihan-sovrin","blskey":"14Kn3VBKja9pDCUgoVpMzf4c9rXJpvDsaHrnXkB9WtvNMHPihinjiXUNNuKdVuYiai3iTDe7mjH5o2UjfoKyApdjEgGCKqgDKpH6uzH4ZcUekR5pfe4wC172X5tiBQFScm8Ti1VmqTnUdfvGi4rV4NpBGytPMkZE1qhL1WSDCoi8riW","client_ip":"35.187.226.254","client_port":9702,"node_ip":"35.197.150.130","node_port":9701,"services":["VALIDATOR"]},"dest":"2FZAgVmRC87ZbJXSh6seFi6n7AMfBo9HaCh8HseHi37U"},"metadata":{"digest":"2986a38eaa64cee8ebfa7e5184bc98949a57555bef663ab125f83603371d6591","from":"YHTFcv8P93i35osabNm99n","reqId":1528165772663287},"type":"0"},"txnMetadata":{"seqNo":36,"txnTime":1528165772},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5kJFNauix1UPNtii8g8ahpfmEyJaoAPnFXdeSpJ9Ge3GaaLhWM3Hmr9N8ACdf6Wrs8Yg1pkXLRwmBTuDSvJDe3A"}]},"txn":{"data":{"data":{"alias":"ibm","services":[]},"dest":"Eq7m7GMFKPeq5Ek3HH1PkHxzZ46R9VL1Eube3U9wfjp5"},"metadata":{"digest":"ecd93c53a03d0da0e011973c7c4312e4b5426390930247aa48aca2b70550c2be","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1528236888174137},"type":"0"},"txnMetadata":{"seqNo":37,"txnTime":1528236888},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"PRCWCTWYwGJB7rczzTqBBB","value":"5nJ3vmmFxC1qHjvSWFHLvhqyRtEmxo4Z2SMpuS2U5snEShd1ZMP22eDyd1nDgPJUHRAMuYM519eMoLw4Kj4CqZgf"}]},"txn":{"data":{"data":{"alias":"valNode01","blskey":"24cgjd77KER8uzhxb1c3DbecvrSMQd3nYxBjaJTqLkgBPuAizzoFdXQkdb8LNjgnP27hTHCpLSuatQSE2YYexNXqZDtAUqPMNfsZwAU151kYFfCc6ZWLRzsm4irf4PrS5ZpnSmhT3Ta4c3m12zoTmu3FDxUkJwEBC3ubdNdA8EHcVDz","client_ip":"52.43.138.62","client_port":9702,"node_ip":"52.43.138.62","node_port":9701,"services":["VALIDATOR"]},"dest":"AYQcyJvowniMsxU9P93yzyAPCFUxg7hm1xsXitFoBr6z"},"metadata":{"digest":"5b05dceab82e7288a1003793f0b4ff642284a021b3c5746b5d799b116068428e","from":"PRCWCTWYwGJB7rczzTqBBB","reqId":1528316277953334},"type":"0"},"txnMetadata":{"seqNo":38,"txnTime":1528316278},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"PRCWCTWYwGJB7rczzTqBBB","value":"4FHNA9VCJHMNUssRyaQYFsn6SVQdSddSg2BxRDFp1aurDAMY4o925WCGmoYLeNwMkf34w6nF5NrNHVhXSmPBZUs3"}]},"txn":{"data":{"data":{"alias":"valNode01","blskey":"24cgjd77KER8uzhxb1c3DbecvrSMQd3nYxBjaJTqLkgBPuAizzoFdXQkdb8LNjgnP27hTHCpLSuatQSE2YYexNXqZDtAUqPMNfsZwAU151kYFfCc6ZWLRzsm4irf4PrS5ZpnSmhT3Ta4c3m12zoTmu3FDxUkJwEBC3ubdNdA8EHcVDz","client_ip":"54.214.176.123","client_port":9702,"node_ip":"54.214.176.123","node_port":9701,"services":["VALIDATOR"]},"dest":"AYQcyJvowniMsxU9P93yzyAPCFUxg7hm1xsXitFoBr6z"},"metadata":{"digest":"b2a209bb10c902c01167e24e7f876ea2359356d43772f37cddefe42f5adf8c58","from":"PRCWCTWYwGJB7rczzTqBBB","reqId":1532033264248749},"type":"0"},"txnMetadata":{"seqNo":39,"txnTime":1532033227},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"tkPNgpHinWAPXvkbvnphC54pauknphTCMF5gzG5AHT1EUHJGS3bQnDi7UKNEYKAjujExWYJAHtM5iydk26yatBK"}]},"txn":{"data":{"data":{"alias":"valNode01","services":[]},"dest":"AYQcyJvowniMsxU9P93yzyAPCFUxg7hm1xsXitFoBr6z"},"metadata":{"digest":"a8eebd86b4cc9aa422f1fc3e6950def9498e7f51b1d9a720ba68413e53ccfbe9","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1532035631471362345},"type":"0"},"txnMetadata":{"seqNo":40,"txnTime":1532035631},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"Psfx4mLS23gBvZDoWz336H","value":"5VVAPQH1LaZmJ4XG1kKxnmUXawg9nTVc1kwULndbFR9yk19mT3vaM9DES342cBYmrpXuY8zQwsXHk4kSoBqZvezi"}]},"txn":{"data":{"data":{"alias":"trustscience-validator01","blskey":"2ToF3Pfb78JQ3pFs6mYxtofDnHLTBLP2RKCDfn6eVngN4zh4UiHvz9DuUS2dfTpAeZLqBDkKuU9pYRazeDN9fqWgzk6kgZYf8jeWgra7rk33ZbZjHFz1zQjNMk3eju5n9JNY4AFbUcXCTWCdFoSXF9fEySKuNANPqtFNz92H2VjrySF","client_ip":"54.214.176.123","client_port":9702,"node_ip":"54.214.176.123","node_port":9701,"services":["VALIDATOR"]},"dest":"8Tqj57DbizpjWQCHvybtKNqKFgfw2bjJbPZrhHDoRoND"},"metadata":{"digest":"d2612092e47da9a0bfb8c9367d0149927abe50aca98ed127b8cfd9b5975b290b","from":"Psfx4mLS23gBvZDoWz336H","reqId":1532121668250427244},"type":"0"},"txnMetadata":{"seqNo":41,"txnTime":1532121629},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5gVt2TSEFpJHWN3BwMn1YgcURpxtGfijmXjGu6Cf5CXkwTmTp4dhUN5Ue6WFZU7PcKSrKfu8PvroWPHCiP7AsMvL"}]},"txn":{"data":{"data":{"alias":"amihan-sovrin","services":[]},"dest":"2FZAgVmRC87ZbJXSh6seFi6n7AMfBo9HaCh8HseHi37U"},"metadata":{"digest":"4141b470e5def16f7fde7c3ee5efc02f712bc0e5260a59709385417047516736","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1532979260947795461},"type":"0"},"txnMetadata":{"seqNo":42,"txnTime":1532979261},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"4A2vM1MT3vxNdASCpxgYfzNajpYScAipcRoSyUaRkH9dZ4CmfhHjWogS7VF7WLRNXKUssQVG2DdLrUzuFEckaM6e"}]},"txn":{"data":{"data":{"alias":"findentity","services":[]},"dest":"5bQhBNkoFKCFAtCxe1vcXBoq6FsnJ3nWKYwUfyVS3129"},"metadata":{"digest":"06ee3b89112f96f93df9f91554b5f4ada39ef34dbc4dd198ab7bc60e0d2f0c57","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1532979375523513444},"type":"0"},"txnMetadata":{"seqNo":43,"txnTime":1532979375},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5tqAZojtpBxCaTkLvX6Why6MYyofYTUEt8taHxyXRBPrDugsCZjM5aRxEwXak7qNuUJGt2x9LMfVLdB81rk8yR2e"}]},"txn":{"data":{"data":{"alias":"VeridiumIDC","services":[]},"dest":"58uCeMaEiMHSi8MdEdcgVbpmzMKmiLSYCEz1vxPGJND6"},"metadata":{"digest":"aca82cab749e9d722134d46f0891269fcae59b7fd065fb3155dd632e2f740322","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1532979478035983569},"type":"0"},"txnMetadata":{"seqNo":44,"txnTime":1532979478},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"5wXZxmiE9PJaidic57FXGfTWjJCuEidh3FBRWMBjhg47JsBxJvoCVuGi7LMYYd7Wj5AdqLqLUC6oL7hKbEPmKr3b"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","client_ip":"169.61.131.234","client_port":9702,"node_ip":"169.61.131.234","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"ef3b5b33492990611a2d443d579681be95f504f1f82b4e9b6015418a72b5620d","from":"BD95LAmfVrD3JEwaereykM","reqId":1535389152858873},"type":"0"},"txnMetadata":{"seqNo":45,"txnTime":1535389153},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"PRCWCTWYwGJB7rczzTqBBB","value":"2PrAKjgg1itZrkaaa5YipCgtTKyeczeSrm8HfHUfu6n5raMPmHLCkzoYWcaHUYjMpL2LHrnhPhdG6HhCJgRbQgoj"}]},"txn":{"data":{"data":{"alias":"valNode01","blskey":"24cgjd77KER8uzhxb1c3DbecvrSMQd3nYxBjaJTqLkgBPuAizzoFdXQkdb8LNjgnP27hTHCpLSuatQSE2YYexNXqZDtAUqPMNfsZwAU151kYFfCc6ZWLRzsm4irf4PrS5ZpnSmhT3Ta4c3m12zoTmu3FDxUkJwEBC3ubdNdA8EHcVDz","client_ip":"127.0.0.1","client_port":9702,"node_ip":"127.0.0.1","node_port":9701,"services":[]},"dest":"AYQcyJvowniMsxU9P93yzyAPCFUxg7hm1xsXitFoBr6z"},"metadata":{"digest":"7f244345a273550cf1cbeee4a41a5917fe17947c355917c9c2c235de63d3a2e4","from":"PRCWCTWYwGJB7rczzTqBBB","reqId":1537808479067559676},"type":"0"},"txnMetadata":{"seqNo":46,"txnTime":1537808338},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"Psfx4mLS23gBvZDoWz336H","value":"3rywzxRvJAiFsuFmEayMxKxxsJDeLAWYM5t1Jxw4vNt9RAuh5WwcAUmcD1Un6urHMMBadpkxGVMyTHFca4jBAZTc"}]},"txn":{"data":{"data":{"alias":"trustscience-validator01","blskey":"2ToF3Pfb78JQ3pFs6mYxtofDnHLTBLP2RKCDfn6eVngN4zh4UiHvz9DuUS2dfTpAeZLqBDkKuU9pYRazeDN9fqWgzk6kgZYf8jeWgra7rk33ZbZjHFz1zQjNMk3eju5n9JNY4AFbUcXCTWCdFoSXF9fEySKuNANPqtFNz92H2VjrySF","client_ip":"127.0.0.2","client_port":9702,"node_ip":"127.0.0.2","node_port":9701,"services":[]},"dest":"8Tqj57DbizpjWQCHvybtKNqKFgfw2bjJbPZrhHDoRoND"},"metadata":{"digest":"01bea8a952895652f4ff5fed121fbab75fc5bea0cf4a5b905324efa944a5ba97","from":"Psfx4mLS23gBvZDoWz336H","reqId":1537818353199012189},"type":"0"},"txnMetadata":{"seqNo":47,"txnTime":1537818211},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"MHrp2wUhk1quHK9kGCcQtX","value":"4meKCAvuw588qWkDMy1pXvMtt4X6YK4hiQArsxEJ7wrY84JL9ZAN1efBby4BLZvQcE2Lx7kP9mrhsrAdBGXM8hCK"}]},"txn":{"data":{"data":{"alias":"trustscience-validator02","blskey":"2f8SF5UdftJkr19X7TQxtcy7EiP1MLLxnT4sppJuFfuprEKxdtRq2BbkyRF24Xbdd5tfWkf9MsPBs7aWqrNcoCjbL5hsawUmPy7tjWtZLhLgKYtKxfFtPFJETtTLaaUhyrnjNwYa7GoTBYKMdv72ZL1fjZjo3EK6jx3H6fohvSVK98P","client_ip":"54.214.176.123","client_port":9702,"node_ip":"54.214.176.123","node_port":9701,"services":["VALIDATOR"]},"dest":"2p77huA99n3pmj5hxYapzXMrEgATHAoQX2CkxS4TNya7"},"metadata":{"digest":"30ef842e8ccb04aa4051d12d3a565d921892a7f79254398eb9ab3b8ced265ece","from":"MHrp2wUhk1quHK9kGCcQtX","reqId":1537821923451170792},"type":"0"},"txnMetadata":{"seqNo":48,"txnTime":1537821782},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"2Tk12rX3eU93zqCGe5oeAH7WvudtqwLA9cK2Cg2UbirMhEh2YL7oR68SqMZDhvKDyeRtViLwbhNcfoSARGucm7yo"}]},"txn":{"data":{"data":{"alias":"trustscience-validator02","services":[]},"dest":"2p77huA99n3pmj5hxYapzXMrEgATHAoQX2CkxS4TNya7"},"metadata":{"digest":"8cf0e8b8db40d79a7019f1642de1f85764532b5ee7f6cd3a40872d7317632f3d","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1538150155109252223},"type":"0"},"txnMetadata":{"seqNo":49,"txnTime":1538150957},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"QuCBjYx4CbGCiMcoqQg1y","value":"SkAWnEADFvzxgtnWiEYrdZQivjX587hu1rBq1HgzVBubQAS8NaNcj8FEFYWLgtcYj91wdcNnSrx5aCC8nHRpfAH"}]},"txn":{"data":{"data":{"alias":"xsvalidatorec2irl","blskey":"4ge1yEvjdcV6sDSqbevqPRWq72SgkZqLqfavBXC4LxnYh4QHFpHkrwzMNjpVefvhn1cgejHayXTfTE2Fhpu1grZreUajV36T6sT4BiewAisdEw59mjMxkp9teYDYLQqwPUFPgaGKDbFCUBEaNdAP4E8Q4UFiF13Qo5842pAY13mKC23","blskey_pop":"R5PoEfWvni5BKvy7EbUbwFMQrsgcuzuU1ksxfvySH6FC5jpmisvcHMdVNik6LMvAeSdt6K4sTLrqnaaQCf5aCHkeTcQRgDVR7oFYgyZCkF953m4kSwUM9QHzqWZP89C6GkBx6VPuL1RgPahuBHDJHHiK73xLaEJzzFZtZZxwoWYABH","client_ip":"52.50.114.133","client_port":9702,"node_ip":"52.209.6.196","node_port":9701,"services":["VALIDATOR"]},"dest":"DXn8PUYKZZkq8gC7CZ2PqwECzUs2bpxYiA5TWgoYARa7"},"metadata":{"digest":"c1633443684eed4d621235388d23e6adf0264658bed09e26fd9ac41026fa4dde","from":"QuCBjYx4CbGCiMcoqQg1y","reqId":1540910673107959938},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":50,"txnTime":1540910673},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"FzAaV9Waa1DccDa72qwg13","value":"3q94ydPoBiKq7oBjAt5gTrdLDWagXn2GMGBXa1Shpd8FFqg25tXrkYBDvn1a81rN6E3bc9e9gUJwXNg3CZUBNYG6"}]},"txn":{"data":{"data":{"alias":"vnode1","blskey":"t5jtREu8au2dwFwtH6QWopmTGxu6qmJ3iSnk321yLgeu7mHQRXf2ZCBuez8KCAQvFZGqqAoy2FcYvDGCqQxRCz9qXKgiBtykzxjDjYu87JECwwddnktz5UabPfZmfu6EoDn4rFxvd4myPu2hksb5Z9GT6UeoEYi7Ub3yLFQ3xxaQXc","blskey_pop":"QuHB7tiuFBPQ6zPkwHfMtjzWqXJBLACtfggm7zCRHHgdva18VN4tNg7LUU2FfKGQSLZz1M7oRxhhgJkZLL19aGvaHB2MPtnBWK9Hr8LMiwi95UjX3TVXJri4EvPjQ6UUvHrjZGUFvKQphPyVTMZBJwfkpGAGhpbTQuQpEH7f56m1X5","client_ip":"159.89.118.181","client_port":9797,"node_ip":"206.189.143.34","node_port":9797,"services":["VALIDATOR"]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"6815d516eead933d1163295ac5a1b34ef14fc842d5779a4de23847f5d3652f22","from":"FzAaV9Waa1DccDa72qwg13","reqId":1541014309248416875},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":51,"txnTime":1541014309},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"2Vq2bzfip9c3Zo1b5f9ZEffw1bD3jfWtphJd52Gov6opBcewVQWHcS912J251LTmx1YfNydAYWtL2EYQKuS4EXXm"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","blskey":"2j7jqdynFph7cbSwYgKYfzHKsVcQRfYxCU9AdhTAN8gUV8oFrnuPz348zLX8AMiEt85pKGw97FcACcDTJAGABvwCcXFNXNFGTN2U14JkRcg7yNuHFSWWgmdc1aBQJcJA5ZEtPgq2n47W14L3Y23LUv9E2CLViKUKv6nZqfrEeJi7zUE","blskey_pop":"RHxpCSQFv6Xso4JiEyt9jdTm6J3XUCh1SWy4g6hDsVWYqgrJEeLoXaYBBayB7fi6bDbUPuJVbVYPMA4HNA5eRwagc34gr8JhddgJupLxgzowkKkJa1WEm5vDNwqUfH7JihwwEzUPcmNTjnhGiovhRH4v8Mf1uPyzyS5AHsH8qNbrfZ","client_ip":"194.209.53.115","client_port":9777,"node_ip":"194.209.53.116","node_port":9778,"services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"c94bdafaea83c5668ac61ee754f7de174d90015049a539ddc969a165f6abf871","from":"bPTNiLzWPFHKr7mJGaump","reqId":1541412365363342035},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":52,"txnTime":1541412365},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"NUDC81qrSL5kkiwh4ZmUZ4NepE8sNPLtb3Qii41yiBu1kkudhEBct3Y3TtxJetyfhDmJPiSyWBmBUNxisP4L15t"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","blskey":"2j7jqdynFph7cbSwYgKYfzHKsVcQRfYxCU9AdhTAN8gUV8oFrnuPz348zLX8AMiEt85pKGw97FcACcDTJAGABvwCcXFNXNFGTN2U14JkRcg7yNuHFSWWgmdc1aBQJcJA5ZEtPgq2n47W14L3Y23LUv9E2CLViKUKv6nZqfrEeJi7zUE","blskey_pop":"RHxpCSQFv6Xso4JiEyt9jdTm6J3XUCh1SWy4g6hDsVWYqgrJEeLoXaYBBayB7fi6bDbUPuJVbVYPMA4HNA5eRwagc34gr8JhddgJupLxgzowkKkJa1WEm5vDNwqUfH7JihwwEzUPcmNTjnhGiovhRH4v8Mf1uPyzyS5AHsH8qNbrfZ","client_ip":"194.209.53.116","client_port":9778,"node_ip":"194.209.53.115","node_port":9777,"services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"f7e6c28166e69edb0468869fed131fbca344db0943f020cfb8e0137703401922","from":"bPTNiLzWPFHKr7mJGaump","reqId":1541432813752945620},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":53,"txnTime":1541432814},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5UzHhjZMh4N3w6zSK22RTzb6qFpLijjRgDkCT4XxnJYPYrW7erByfJf2FLkmR4LcdSDrSw4hkFuoH5dkPXpfFZzo"}]},"txn":{"data":{"data":{"alias":"xsvalidatorec2irl","services":[]},"dest":"DXn8PUYKZZkq8gC7CZ2PqwECzUs2bpxYiA5TWgoYARa7"},"metadata":{"digest":"ecdfec24f95a4ef3590f9024f1ce46fa4d8ef2288048c89f18d16822d34f517a","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1541451340102642933},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":54,"txnTime":1541451340},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"3Ygb9RCqsT3SwxpMx2WWrCk9W9pKCpg9qjQkERhKhZuCeEjc1C2YEnf3KtrkCxEVg1xti4gh5kCW97apU53jXBRa"}]},"txn":{"data":{"data":{"alias":"vnode1","services":[]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"e7190621d62f017add97a35214ffe39c2820600e91eb7738ac1b6be14be7f7d2","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1541451384934782442},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":55,"txnTime":1541451385},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"34p6FetGiBaiF9rste9tU4bxjDa6jMhPr8drGFfWMfcDBeHrwu4mMdZBGq3RPpaD7G3E74EkgVNA65mPvTG7s7om"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"c3ec6df9998e376a2b31a4e8bf2f951eaa9779cbfa5b6eed166501f0c0fff6c7","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1541451415119667684},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":56,"txnTime":1541451415},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"FzAaV9Waa1DccDa72qwg13","value":"2GDovjbZyz2rh3rzFpmgqM9TycCxNhbW5esiYXgnkqj43QWz9dwCY5Jv7fSKdmEKK2EiJBuFKt7W8PZZFKyrMuqZ"}]},"txn":{"data":{"data":{"alias":"vnode1","blskey":"t5jtREu8au2dwFwtH6QWopmTGxu6qmJ3iSnk321yLgeu7mHQRXf2ZCBuez8KCAQvFZGqqAoy2FcYvDGCqQxRCz9qXKgiBtykzxjDjYu87JECwwddnktz5UabPfZmfu6EoDn4rFxvd4myPu2hksb5Z9GT6UeoEYi7Ub3yLFQ3xxaQXc","blskey_pop":"QuHB7tiuFBPQ6zPkwHfMtjzWqXJBLACtfggm7zCRHHgdva18VN4tNg7LUU2FfKGQSLZz1M7oRxhhgJkZLL19aGvaHB2MPtnBWK9Hr8LMiwi95UjX3TVXJri4EvPjQ6UUvHrjZGUFvKQphPyVTMZBJwfkpGAGhpbTQuQpEH7f56m1X5","client_ip":"206.189.143.34","client_port":9796,"node_ip":"206.189.143.34","node_port":9797,"services":["VALIDATOR"]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"bf0cdbb6b134fc10fd7797fa24f4354a9e9d70dbc92570d23267e151299b24b4","from":"FzAaV9Waa1DccDa72qwg13","reqId":1541618294089244398},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":57,"txnTime":1541618294},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"Bt44zXEB8HkNHJ8mSGq8Hap4xq6QBo1YECwDscH8aoKocmE8LpDKs9nAwUxu5qrtRNHfj9n1bSeTAq593BT43T6"}]},"txn":{"data":{"data":{"alias":"xsvalidatorec2irl","services":["VALIDATOR"]},"dest":"DXn8PUYKZZkq8gC7CZ2PqwECzUs2bpxYiA5TWgoYARa7"},"metadata":{"digest":"59a07975ea03cca3db85c06f0e12a7095df449c56326f470aab9a5f473c4b41d","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1541715283104974168},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":58,"txnTime":1541715283},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TK4JebQqeqq5t6x2bCwnD7","value":"MC5fG4DowNdB23vHXydtT4f7n1k6wcyZyPA7m3aVZWYfKVT7bwGKWqzmKWGAr1QNm3dkcL2MLVE11ALQsCcFpEt"}]},"txn":{"data":{"data":{"alias":"NodeTwinPeek","blskey":"Jrbf7k1xgkbhfKAmVXqfLLmFieGrxL1f1H6WRBZVB4Rvh8uCHGVoVzMppygH2XPLK4n1cnaBKe7zYxftgMaYXka1HLaScfsVCGqpkSa7d2hzerpcvPQMvo9TCCTP3jWb6uC9kVUHZkVqVvecMDtRkVqr3ZChUAoTM2e4UGmgqvE3Zk","blskey_pop":"RY3ZXV5WoHWMM631ov7ZMWoTX41Cnah4CrwQnXFrPHt49ajB8b5AjnrSDxCb9JEhC8WLVveuQMH7p6FJfoQHRaG2tR9pQLgLCXvbDozYPin4LwVzV3Wh2LNMorAtJgr3PfqxzUmFNEkbiGAbzMdBS1EXbDya9exgrLkrMLuLG1crLw","client_ip":"178.32.102.66","client_port":9782,"node_ip":"87.98.136.246","node_port":9781,"services":["VALIDATOR"]},"dest":"2bDviHYdDiTjyXYXEW92zQHEf1C1QsbFatJ6uSYuYrHh"},"metadata":{"digest":"0d187610d42d46fc90ab873fa1a43132c35d349083dcbf744cf81191ae4a4760","from":"TK4JebQqeqq5t6x2bCwnD7","reqId":1542035094044574100},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":59,"txnTime":1542035094},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6mTar6XRRgYdhswcnq3ybf","value":"UfJqCMUzcX5CfqGouLMSivJ5qm5SqBdsJwKkV9aZHTsmHS3GwcBAur4aUP9VG43praqiqToCQ1jZiMyUYj7wKEw"}]},"txn":{"data":{"data":{"alias":"lab10","blskey":"2Yf73vj1CJBqibWHZTdL4Seygd53dSb4PKJugpeokVx8HdXwqhuEnk2nFBCYmXmFp4RxGprQuKDfGuxYDhKuBysHSCbbYwvoWaXXHYtxvD67Ytw37fQo9Stvgu5nCDwDWD3M8p7fkUF4UQRMqfa8W1tddWXgFr5NPSB13GrjJFcPgAn","blskey_pop":"RBGAkA3X7w1ADtQeYiVZW76uWdwRTdCwamappXLb3sD2iNvVBaSF1jPANo9K99QBe42kEAbJtbwsi4AoDWrjex6tVTQqiSxeAt2kRJpCZTGHfthHzLEnFtZqqksWeXQPRNzeeRagFRyZAQhPuL7wYMiz3a6CNnbgQL7dbMvNBaQsUs","client_ip":"5.9.17.149","client_port":9702,"node_ip":"5.9.17.149","node_port":9701,"services":["VALIDATOR"]},"dest":"7vruXjaKFp2t1WrsMTcVZuNQtmn35yimDrN7THYwcPof"},"metadata":{"digest":"515a3de1e3b1166208d6e2d5c7c020b9d9b56f5fbfb01e9ac1e2da96a8ebacb1","from":"6mTar6XRRgYdhswcnq3ybf","reqId":1542135182121048577},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":60,"txnTime":1542135183},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"2HaQjM7gQXQi4nL2CHLDAM6PaHXUsgQ6SoyHkncrNHQua5WWbcd6DjsB5gagvTAsyD9728xA3npf6c82GNCFqrd3"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"0e549b9dee11241b4b9605b540b7162a84c8fe0a466e30fc029929debb9f6f5f","from":"bPTNiLzWPFHKr7mJGaump","reqId":1542298164808052701},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":61,"txnTime":1542298165},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"wKcykStr9Mj6jbjHUjzjkQXnkz7K3S9GmjgB2kZ7KrWpNDrS3hWWydguhUzFcjHoxBDazdEBKgnu3WH15ytNrxx"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"93b91ab90788049d62246a754432eb2d5f47c8b20e6f7174d57fd42537749c14","from":"bPTNiLzWPFHKr7mJGaump","reqId":1542299088770647926},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":62,"txnTime":1542299089},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KvGE2tKSDuBXEkRc86dL4T","value":"5dwYyoYZu4LRnhdyRFXt7xEFFw2yT8QE7zVKRkD2XswxgsSY1gdnbPDnqBwoUTyUK7MjzeRjuGDJpeBBcHSmH7Wz"}]},"txn":{"data":{"data":{"alias":"trusted_you","blskey":"4Hf3okFu15E52JuH62AD4gNVyBdqg8mP4xzg6bViuYzA3ujCJpC5xCv2afiAgWq5w6ooxhNo4w88jny5je83HvJXUqc1jQNWApzcRr9Zqfz9ipqP3qJv6j8BZJU5VQPfLLfrGRrNG4UFPwHHqXLxcBfFJFqKuBMr9FeQc5LMP6LKhQr","blskey_pop":"RLK3VsTPH8BvpqjBUD1mn21jffYkZdAzEkxt397HcbpHd6zfXE6DbziXrWgVDdofZkuqUhrd7ecwY7yX3rYL182VxfWhvKTDx8VwrPyand6M2DWtR3c3rUwwqBkLJW5dXP2ZrPMnUrukJ88SXVrf4J23jiy9xFTZLAVZnt2Go582aB","client_ip":"51.140.243.125","client_port":9700,"node_ip":"51.140.220.111","node_port":9750,"services":["VALIDATOR"]},"dest":"7wetNy5AJpHfXvhTx4okZokSw5mcrgWgVZ8jJ3WHgrmd"},"metadata":{"digest":"1e72a8499fe7372eb9b3f7876a4bb965801c9ee611d79611afad3355f9133c9b","from":"KvGE2tKSDuBXEkRc86dL4T","reqId":1542323966510001027},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":63,"txnTime":1542323966},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"2LpmtWWx2ykmxYQ9QZ13PoXrtn77ETbjTrBRDmZULykruGVyDWp6Xn3EyrrNuEZVDxjFGKG1tdbcQKhUHKJn6LHA"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"e6a5bb4cd4189ecc6ae0858a32c7df509e81c181bab5cf4f43e72d480ea0f7a0","from":"bPTNiLzWPFHKr7mJGaump","reqId":1542361064125639673},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":64,"txnTime":1542361064},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"uV9yMB5sfwYNRjXfvbD8eajsW16SEfAxE62QVyX2f9YBkr2BBLed9WHE79Ww5v5ycV5mrduAr7rrYZnCNyNvgvv"}]},"txn":{"data":{"data":{"alias":"trusted_you","services":[]},"dest":"7wetNy5AJpHfXvhTx4okZokSw5mcrgWgVZ8jJ3WHgrmd"},"metadata":{"digest":"a915255c0490bd661652aae007d55c88736a9556a283e9087862db948fc01ab0","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1542394857400361543},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":65,"txnTime":1542394857},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"hywDqQdRthvVDSiUXgMueRW621soWAWgZeRFjyzxpvTMBDhxnc36P8PaWYnHsxXzVds57XAcQ3LKfEjZ1UyqvHJ"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"056b23376851dc03079a1c3fea1ec6a37d60d976cef577cb1534bfa5f37509db","from":"bPTNiLzWPFHKr7mJGaump","reqId":1542638324609009633},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":66,"txnTime":1542638324},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TN7Sx7qF9RSmaDcTiFKWzd","value":"4E1w4F5QcM5PxBYYrbJkTDPNwqNnfE9X1nLPVfbfBwFurF2F74GA6BRcPxVoiWsTRMCeWtgZWzHjYcictzv7B7nk"}]},"txn":{"data":{"data":{"alias":"dativa_validator","blskey":"3bYtYhVodD49a3bTK2bZzTAZqt284tKQ2vgXG2arqUyYJRhYnDouhAaQAM7fctC84NvQRG2p1UwVdcdUZPkau5wdJ6fKWwpGo1mM2firHhYtiSZcCAfAbPQhTSSKnsaMnUzacuPC1e81ytr3cXjPobaAg4jJA637N2MGwUWv665o7ae","blskey_pop":"Qm7nQt5HjnaLSpCobPxAH8JG67J6bstaKop2XCsnBELR8tJNm1BYkqTTsj5HVRwXBkMg2vexNQ51B29cp9tSK3zK7ddbhWh8C4cDHoDQgaCHNz61hQxxYMx37yraFLggPF9WCaUckAn4fFxEvLBMV3EdcBZoTecwGPt2g1WhBDjB3M","client_ip":"52.91.89.252","client_port":9799,"node_ip":"35.174.181.186","node_port":9700,"services":["VALIDATOR"]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"58a1d4e0b24778694973e2ff21eca5b9bba33ffb6d918836e1f76b75d1eab56d","from":"TN7Sx7qF9RSmaDcTiFKWzd","reqId":1542652100358243716},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":67,"txnTime":1542652100},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"sYtD5iKjZF1A9rkkY8E2AeHk4B5y81jWiY2BZEsLYy3s4HNQo9YKy5K6X9k1LbscodpMhC4VL4gZ4L7Y9YgvFBs"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"afa88dd032669c15cf2fb1d7f5d921c2325d2d721b6adffc20df7c8e094d4b91","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1542679993748339893},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":68,"txnTime":1542679994},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TN7Sx7qF9RSmaDcTiFKWzd","value":"CRk8NSxyvawVi7LUhDdLgN22L5ZEqMpW5yUqVd9ri623VujthBNW6RWaQEagEJqzj9LtwWG3cRYMZzZ8tW8PFpf"}]},"txn":{"data":{"data":{"alias":"dativa_validator","blskey":"3bYtYhVodD49a3bTK2bZzTAZqt284tKQ2vgXG2arqUyYJRhYnDouhAaQAM7fctC84NvQRG2p1UwVdcdUZPkau5wdJ6fKWwpGo1mM2firHhYtiSZcCAfAbPQhTSSKnsaMnUzacuPC1e81ytr3cXjPobaAg4jJA637N2MGwUWv665o7ae","blskey_pop":"Qm7nQt5HjnaLSpCobPxAH8JG67J6bstaKop2XCsnBELR8tJNm1BYkqTTsj5HVRwXBkMg2vexNQ51B29cp9tSK3zK7ddbhWh8C4cDHoDQgaCHNz61hQxxYMx37yraFLggPF9WCaUckAn4fFxEvLBMV3EdcBZoTecwGPt2g1WhBDjB3M","client_ip":"35.174.181.186","client_port":9799,"node_ip":"35.174.181.186","node_port":9700,"services":["VALIDATOR"]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"c52795b715a91b80167eecf727e15be08c7ea405b32be84ebded577f2bca7dd3","from":"TN7Sx7qF9RSmaDcTiFKWzd","reqId":1542737602414121779},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":69,"txnTime":1542737602},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KvGE2tKSDuBXEkRc86dL4T","value":"57mY4UHLprb4EdgPpnNBiermToDVqkLzJxso2bbsfo4GXomLHssQqjZrZvS1vgDjLgGGKLFpGZJeaKvXyLk1JUNy"}]},"txn":{"data":{"data":{"alias":"trusted_you","services":["VALIDATOR"]},"dest":"7wetNy5AJpHfXvhTx4okZokSw5mcrgWgVZ8jJ3WHgrmd"},"metadata":{"digest":"00477bfb2052242abbb95063d98b5acd1d3ab76e7d1519734e54b07aad6b9e99","from":"KvGE2tKSDuBXEkRc86dL4T","reqId":1542751929819744539},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":70,"txnTime":1542751929},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KvGE2tKSDuBXEkRc86dL4T","value":"td4qZQbCgAxg5jWNUEj5ySAvjN2W2cdywcpYhwrAcyu5H5EbyuyNXDJXLzgCRuTLoNUcKJY1z6GbrFa1rb3c9yU"}]},"txn":{"data":{"data":{"alias":"trusted_you","services":["VALIDATOR"]},"dest":"7wetNy5AJpHfXvhTx4okZokSw5mcrgWgVZ8jJ3WHgrmd"},"metadata":{"digest":"74436d978077d1b2a7325604b305ba71776432f078ae4f0685cd29780466fccd","from":"KvGE2tKSDuBXEkRc86dL4T","reqId":1542754098893802328},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":71,"txnTime":1542754099},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"2odhsxVn68qbBkYcaUWzFpk4KNtrUSh3QM6duqfGwBWN3CPbBYRFfvcYFiQqYZUazipKsWvqHvDsh27iycAadosq"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"a06031660b32d4a6dff612a466d0dad7f0563ac58ca06b2bd11c0f767e0ea25e","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1542820256271098712},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":72,"txnTime":1542820256},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TN7Sx7qF9RSmaDcTiFKWzd","value":"8ubefkYZGbM2F9KeYYhGowKLi27dhss6S8bp8MiirdicFdCZ4PA5qGejbkQhuDfbbRkfxS8ZzreRAg56rkVE5vK"}]},"txn":{"data":{"data":{"alias":"dativa_validator","blskey":"3bYtYhVodD49a3bTK2bZzTAZqt284tKQ2vgXG2arqUyYJRhYnDouhAaQAM7fctC84NvQRG2p1UwVdcdUZPkau5wdJ6fKWwpGo1mM2firHhYtiSZcCAfAbPQhTSSKnsaMnUzacuPC1e81ytr3cXjPobaAg4jJA637N2MGwUWv665o7ae","blskey_pop":"Qm7nQt5HjnaLSpCobPxAH8JG67J6bstaKop2XCsnBELR8tJNm1BYkqTTsj5HVRwXBkMg2vexNQ51B29cp9tSK3zK7ddbhWh8C4cDHoDQgaCHNz61hQxxYMx37yraFLggPF9WCaUckAn4fFxEvLBMV3EdcBZoTecwGPt2g1WhBDjB3M","client_ip":"52.91.89.252","client_port":9799,"node_ip":"35.174.181.186","node_port":9700,"services":["VALIDATOR"]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"62a7363b27f1e10c215c8ac44b0a6d737fd60ad14c4357c6c954d90283f21aab","from":"TN7Sx7qF9RSmaDcTiFKWzd","reqId":1542651103246022659},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":73,"txnTime":1542820263},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5UWP2RqYa8zdejirm5hA7myhrr59jzik9koEjyosJ6U3uHU1ySrKnRsogkXb91sFb6t9Rs9XS7yF6r9wLgW2tQLR"}]},"txn":{"data":{"data":{"alias":"dativa_validator","services":[]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"a6c82dd6a170a73014ce079ce53bcf505bfbee47363a3ea88097cd58f1d38030","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1543358290828986263},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":74,"txnTime":1543359213},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"SYQLd1z2fd6BCcSHsraFbU","value":"5ohoJwSwPD3pGuXhMdvEcYUK3rPPa3HT5SyAgbd4SmHmA1Tgf5zdHef9mNDwR7AKEEgEkUGKNzjAKGTots5oeanF"}]},"txn":{"data":{"data":{"alias":"SovrinNode","blskey":"4ATbikmEcsPinBFgzWk3zKr1HPBg2Qyh4B6dEkR3U8oSauZGJakaHZMDx9LhrmajC5MdSURcLHJig8jqAAvJSkjk2kbpW9m97oWo8jPNw6cDv3bLxmhnkteCrfVvPokbeL4WyFbGZx5VLLrmtzsxodHrEhm6jkZcAhxcA29EzFPKm31","blskey_pop":"RYPJaQyeF6Xjk8jVDbF4gpKdRajTyhDG6VjZeWg93QEMDsWKmTu6CMFQ9SSf4Ao58jySP2Z1LSgKjvW6uJuVm5ZA29Rsdpv7i5y9XktMw14Pa4XH2YJWbpqvZZgteYBbUsFReF3FiSmaHX3JBo7WGWoVmLATxvSxBtPfKKTB2f3KtT","client_ip":"3.16.198.41","client_port":9702,"node_ip":"3.17.50.10","node_port":9701,"services":["VALIDATOR"]},"dest":"GfczFDBo6wCK7bwZA2dtTmEf5xGzZEDeELMP34bS9y1B"},"metadata":{"digest":"2d22f985e30f12bbd0af7dc89be3b82d7254762a212ea865a570063be3a9190c","from":"SYQLd1z2fd6BCcSHsraFbU","reqId":1543447274763531000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":75,"txnTime":1543447275},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"4NFboPNaWijRoMcgQkQFivTjjXaBeDzhQAa93MbAfHp8myBJ1fGnnrnLfyoBMQA1wZhSiAXyeuMiiG8rRhVjbNam"}]},"txn":{"data":{"data":{"alias":"dativa_validator","services":["VALIDATOR"]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"71434b20259474ab9aee98e999a0818e8ac2872043cf5ae9945b307431ce6fbc","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1543513967433499896},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":76,"txnTime":1543513967},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TN7Sx7qF9RSmaDcTiFKWzd","value":"qJLHVvfJiNEexfo7rwxXuNGqhhas1CFY5hxQBrh21dn6oEybkFy41pNVvhU2Qb4eW3j5VyBE65nnFqYi8k6JRRZ"}]},"txn":{"data":{"data":{"alias":"dativa_validator","blskey":"3bYtYhVodD49a3bTK2bZzTAZqt284tKQ2vgXG2arqUyYJRhYnDouhAaQAM7fctC84NvQRG2p1UwVdcdUZPkau5wdJ6fKWwpGo1mM2firHhYtiSZcCAfAbPQhTSSKnsaMnUzacuPC1e81ytr3cXjPobaAg4jJA637N2MGwUWv665o7ae","blskey_pop":"Qm7nQt5HjnaLSpCobPxAH8JG67J6bstaKop2XCsnBELR8tJNm1BYkqTTsj5HVRwXBkMg2vexNQ51B29cp9tSK3zK7ddbhWh8C4cDHoDQgaCHNz61hQxxYMx37yraFLggPF9WCaUckAn4fFxEvLBMV3EdcBZoTecwGPt2g1WhBDjB3M","client_ip":"100.24.186.243","client_port":9799,"node_ip":"35.174.181.186","node_port":9700,"services":["VALIDATOR"]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"47ef7d8fa8fe23a6609710042b27ed83e8ee4520e7c51698ee04419c7b7b0daa","from":"TN7Sx7qF9RSmaDcTiFKWzd","reqId":1543514771626991925},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":77,"txnTime":1543514771},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"326qebvjJFB9dBhhM26n6nqRm1DrjDATdY8JR8r6Wr4snfrmBpasSZATrUarQzAzu3AdZia67zwQsmoepwfRRo7y"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.138","client_port":9702,"node_ip":"169.60.4.138","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"45bf4a0c9d8267ed8cfb37933cdf50ed3eaf23f7bcad6681a65cf55fd0120de0","from":"BD95LAmfVrD3JEwaereykM","reqId":1543518036999212000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":78,"txnTime":1543518052},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"2kHqvEXmgiRcPghcNdGGphFZJdBj4g5CXNsDQkFx15FAprGvmt5DbDC1N4FZQCd7Gi4LzSAn4cQ5eoKsnBmn5UnL"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.138","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"933101316c883ce1ade5c0fd93e226448fc88f38d858788be4986596f7b9be38","from":"BD95LAmfVrD3JEwaereykM","reqId":1543519064797689800},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":79,"txnTime":1543519080},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"zPAr7xh7rcMYkAh3Vd73TFAoX45mtU3eaP57Ke6JPcv6ppMr4iYpafyB1X2DAB5sQsBRn2MVC1BJrfcwdCrDG1U"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.138","client_port":9702,"node_ip":"169.60.4.138","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"2dcd0cac5e059298e5cdfa8cf0081c95b33a6d9a09086909eff9d7b91f05e23a","from":"BD95LAmfVrD3JEwaereykM","reqId":1543519131380345700},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":80,"txnTime":1543519147},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"AWZpBgGbFFCobzuzsqdeZg","value":"35aYZ3mw5UyEZWjKRB6ciL1d3JqZaMmbWCdAp3TtoV5i1YkDN4nRV98bzPqdSeh5sX1atEifuNKSfEWkBVg4qMhW"}]},"txn":{"data":{"data":{"alias":"sparknz","blskey":"34cHakLPF7ZZtRjysMoXT2SFmaqWinh19y2orQ4BPncYsA2J5fkfhtd34jruhjbRWWLpTw92XgCsTrQPPSdUheyqqs2AFZ7QDwKESAxuukV7N6NwWQBEf7i8GTfJaL5vBqqJxDwDNH3j9oLdeMvtTjU8vrnWZLWb6TKjmzD8NrtwF6o","blskey_pop":"Qp3N5anCNnktZFVWpWJQHexcT18j66dXM5cSd6SAsn9uwMAxU8VxVLjDJrRmutVwbR81EzduJfVojMgPfDdHEPxEDFQKjG2EP6qTk7o7HRyts7kaSfkL1f8Dwk8f8tbU5gkaaLrAYGRkXSjnmMPJHXaj6zeeNQRatZJGeRMAG8o8fh","client_ip":"146.171.248.185","client_port":9701,"node_ip":"146.171.248.186","node_port":9701,"services":["VALIDATOR"]},"dest":"DdAqLDrkEW96hcVLsEtf8SrQnUGFK7uMLyHi775kYFVw"},"metadata":{"digest":"5d1e7deda854cda687afab5defd30a1e940eed638dbe7d3c57cb4e326891bd3c","from":"AWZpBgGbFFCobzuzsqdeZg","reqId":1543870622701863717},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":81,"txnTime":1543870623},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"31oppTng8a1BtbZDEo4LNQhF58AMjSvAznR94KxjQkA6BFJg2sgSwzVXWVbEhVL1H4RzaDPjfnHNPWztjDGTUYVX"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"2eb2a01dea5d319f834d1e7a06b8a07258e41f22d4f05422b12f9d5986bc34d5","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1544074481553187626},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":82,"txnTime":1544074482},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"41YVszp9VT9djZsVqswxQTnSRX7BEpv2M7QLvPn6rPUGStbDipB2rxwWxLCzFZRGyNQKRvUi42R2KHrHPfU7Wic7"}]},"txn":{"data":{"data":{"alias":"vnode1","services":[]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"a4f609e0cbf8747f759a746909dbf1e3c9248db7552685ead0405ac72c9e8927","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1544074647137451532},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":83,"txnTime":1544074647},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"2KoQ12pS6MZA3ibexjZ2UqiTS4NiYvT79bwaxzS22cetgwDfqsmvsR7wWLuyXwkSU8HyX8X7NNK6xgfYPBN4mwMt"}]},"txn":{"data":{"data":{"alias":"vnode1","services":["VALIDATOR"]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"92582f39703e76731d5698e5b73e19a8c1ba76f992f91932366607d707bb6a5f","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1544075270586069533},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":84,"txnTime":1544075271},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"32q6n5cXWTbbSafBxY1bS9yXopVjkL6esnq9RNPoWbGgNFRPntZFzZkZRpGf8g9WxJANYgHX5eWRcxtuAjVjuGMY"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"0ba8cb01d0926a2bc950883a1fe1994ac6f1ec3ceded488e0d00fc95f494bfc0","from":"bPTNiLzWPFHKr7mJGaump","reqId":1544110495269165919},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":85,"txnTime":1544110495},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KpBWkKc8yn3iWzjHDDmqBL","value":"5ZWLPJckDRWJc5TJrkpzyBxmsQQBEHfQhSvTKW6NSY2qVroijPMqVByf3tTAUXPfdQ4jGdTSWzS3E4YvvyqTaGf"}]},"txn":{"data":{"data":{"alias":"EBPI-validation-node","blskey":"4XiKTE8hX4d2WVxd85epKmN91wEz9knWXTrEu6Ug9RUb32zaQ4EC6KPmkVzPmE6QAigDaD9soYcKkUVxhzpTFSQuJbSCLUJuNpvDbdMznGw9YoX8n3bBM6bGgPxQzYfRtJGJ1JtWmhViHEF1FhyZxPYqHX1pUbUDd4yKzxJeEabMYDt","blskey_pop":"QkALSfgxL3p3fpswcYJhhaqzi6sYGQNErBSYjqVEuYkuYWPBvnFjNpCrw2GprHS8XcBzss2qeyTXpTRn4PPo3y4MFU61Jwbkbb4Du81Dwh7XUqjiWiV6HvHSdafaeX6P7cGdtcZZAFKsiUWxuosiaeXjk1y9T47ch1hEFSdoh6fBSo","client_ip":"185.242.244.69","client_port":9750,"node_ip":"185.242.244.69","node_port":9700,"services":["VALIDATOR"]},"dest":"j2JLXyTCAMuHSRqZ7eB2JCXSpPniDFUsyT5MJcGAjUG"},"metadata":{"digest":"7ac78f73c3c397596765d3a2b5afbf01096a051c7702d7e29e53573757912d3d","from":"KpBWkKc8yn3iWzjHDDmqBL","reqId":1544725436218772828},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":86,"txnTime":1544725436},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"3TmLPiQF71J954XuFXyPtFKpiECWTL52mCE9AABTCwsFMcx6rforPwsxVKvRjveEuJLv3uucY9ybPnoFfFxGgrKh"}]},"txn":{"data":{"data":{"alias":"EBPI-validation-node","services":[]},"dest":"j2JLXyTCAMuHSRqZ7eB2JCXSpPniDFUsyT5MJcGAjUG"},"metadata":{"digest":"c08be5f00f5976cd163f503430751494dad23d97b16a9c0835e717183039f081","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1544726215993081431},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":87,"txnTime":1544727345},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"5M3i1PbpvEQmTk25EmAY6N","value":"2RTUVnKLx3FGwBQofPD86z4KvgCpN4dbw6Xjvz7Ka9RYdZnydJZ3oE7pZr2Q6V1mZzGqPfAmnW2YEDqozk52THDt"}]},"txn":{"data":{"data":{"alias":"EBPI-validation-node","services":["VALIDATOR"]},"dest":"j2JLXyTCAMuHSRqZ7eB2JCXSpPniDFUsyT5MJcGAjUG"},"metadata":{"digest":"7f6a8dd88af17b623f0f8f28bff0f2188805f9f940b390d9b24b9c0f24956cb2","from":"5M3i1PbpvEQmTk25EmAY6N","reqId":1544733913396713000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":88,"txnTime":1544733914},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"5M3i1PbpvEQmTk25EmAY6N","value":"5hb9wbwvgaYCdwRYUAQvgHkUPzX6F6BhirapR2ni3BAYMGqT9irnJWVMciEdTGZj3rKY2ThAfVtNaMbSJnW6HCyc"}]},"txn":{"data":{"data":{"alias":"EBPI-validation-node","services":[]},"dest":"j2JLXyTCAMuHSRqZ7eB2JCXSpPniDFUsyT5MJcGAjUG"},"metadata":{"digest":"0f52e5c1d547772efd54bfd01d8ec1caa9ba6dce8ca9234ce977008835e4aa85","from":"5M3i1PbpvEQmTk25EmAY6N","reqId":1544734167152848000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":89,"txnTime":1544734168},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"5SwN2QC6rG7iuQpwwgNccDRhfNBG3rbu8trV5UFnQwHAw8FG4UfhEMkMSk1XUouAqrzY8xZVxThTFgHBxUYyPURx"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"796c9b3f2b9f78bdd482763e0685e8d6b7f2764d4a3374c30b113a026dec6509","from":"bPTNiLzWPFHKr7mJGaump","reqId":1544781409602174729},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":90,"txnTime":1544781409},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"558b9TUNBbNFeGd7S5qW14uUYdx8tZzQP26UCMBuMbR1KXowJUPSebASQ5yMQWwTu3AoWwRUEH74en9wpMSLKo7P"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"61352cdff0ee3db0e06ddd2675b04a977efc2ff24ab099e6be4ea37c431f80b4","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1544812283315027137},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":91,"txnTime":1544812284},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"4xgBtM4FFMyfndQgbEb7wz","value":"3vBhqo64dvx2r86WuJKZuVfCtLD64FmWo3K1WY2wY1NYTZ7GZivqHjKi5ALCDyxmorD6U5yeMgFPgQCxCei69Ncx"}]},"txn":{"data":{"data":{"alias":"anonyome","blskey":"497qEgWR2PZx1ZUeCQBq2hTva16CkQZpVPtdG4o3tBFYRzXLQkvrEX7vyRrbov9LQQQriJfRdYZ41C8ju4BjPH77zF34diUeLxrtK1kMGoTdTHinLK1116XUW5GZpj7y7i3Aekxh69rDqZZbbd65JFrD2ZEJoNsHj8HydbVaAjm6wSa","blskey_pop":"QuNLxWz9jWEoFq3gh2DUbNZHBFiK26gQ66URFGGNNbd8WtKY9u8D94k2zL3P4K74Uzp6MmJPMJewAWuzVD7CQJCguzDPYMUtd57J1PX5VoJXp4ynmbDZhJQq4v393fU2YSLkhd6Fhci3nRovvyz3gPW4JbbtipzZGwp3VZPL1qZpf9","client_ip":"13.54.236.56","client_port":9744,"node_ip":"54.66.208.40","node_port":9733,"services":["VALIDATOR"]},"dest":"AM8oxRuxRyKvJoLRtAEBBPMXzpMqTtm9yQDenMkS76JQ"},"metadata":{"digest":"77ab8c07c8a525367353aae971bace52932b713b772dd57e9f6c6688942867d1","from":"4xgBtM4FFMyfndQgbEb7wz","reqId":1545088395580554723},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":92,"txnTime":1545088396},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"4xgBtM4FFMyfndQgbEb7wz","value":"5XCS6eP9z4jmSxCS4h3ai6vPJTaeNMNXttC2UyPFBinMEFQUtiZJFtCCPtY9Dx48wzN8JWuKPv8xnBqZhHb928Ey"}]},"txn":{"data":{"data":{"alias":"anonyome","blskey":"497qEgWR2PZx1ZUeCQBq2hTva16CkQZpVPtdG4o3tBFYRzXLQkvrEX7vyRrbov9LQQQriJfRdYZ41C8ju4BjPH77zF34diUeLxrtK1kMGoTdTHinLK1116XUW5GZpj7y7i3Aekxh69rDqZZbbd65JFrD2ZEJoNsHj8HydbVaAjm6wSa","blskey_pop":"QuNLxWz9jWEoFq3gh2DUbNZHBFiK26gQ66URFGGNNbd8WtKY9u8D94k2zL3P4K74Uzp6MmJPMJewAWuzVD7CQJCguzDPYMUtd57J1PX5VoJXp4ynmbDZhJQq4v393fU2YSLkhd6Fhci3nRovvyz3gPW4JbbtipzZGwp3VZPL1qZpf9","client_ip":"13.54.95.226","client_port":9744,"node_ip":"54.66.208.40","node_port":9733,"services":["VALIDATOR"]},"dest":"AM8oxRuxRyKvJoLRtAEBBPMXzpMqTtm9yQDenMkS76JQ"},"metadata":{"digest":"09742193d02bfd0a16e1a18f71e0cba235cd6872f018398f12945274f3117e65","from":"4xgBtM4FFMyfndQgbEb7wz","reqId":1545089703401067519},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":93,"txnTime":1545089703},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"e3SjQWaGqcQsq8EkBrCm7RTZUq6oB6LFF88w2gZ9h3xPES9AMioygTTYiRuLkgTtjLocHiYV1UjosX6ybGH7Y9F"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"f9d4f83b612a218f58cb2aa50face3f7cb0ce488e6b37775d14f1ac85b68e6ce","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1545149889900994815},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":94,"txnTime":1545149890},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"5M3i1PbpvEQmTk25EmAY6N","value":"4ijAWFcxfZHB2M169arvZMudfZtwUEjpfhHVKsFDx9TzAVhEU8jwgj8ZXmVU2bFa3rLzBPTW3MrT43KyTCj6Y6Pu"}]},"txn":{"data":{"data":{"alias":"NodeTwinPeek","services":[]},"dest":"2bDviHYdDiTjyXYXEW92zQHEf1C1QsbFatJ6uSYuYrHh"},"metadata":{"digest":"b5f9a593b5368b30899793f12e4cec879b232c49746da332a53fe4c83cc94b41","from":"5M3i1PbpvEQmTk25EmAY6N","reqId":1546646026772409000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":95,"txnTime":1546646036},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TK4JebQqeqq5t6x2bCwnD7","value":"2v25oRF7GET3wQZ7Q9TZqdMNVdaJAyR5rmsw3DGkyQkHw9HtyNHkq57EUV9K4Uf75gnyHhRQ9hxau2XJC6SNPa2C"}]},"txn":{"data":{"data":{"alias":"NodeTwinPeek","services":["VALIDATOR"]},"dest":"2bDviHYdDiTjyXYXEW92zQHEf1C1QsbFatJ6uSYuYrHh"},"metadata":{"digest":"f1402734f5bbc90db2dfa3db65d6cdc3ab839eadf13c1a7e16d769507e436696","from":"TK4JebQqeqq5t6x2bCwnD7","reqId":1546880167291826800},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":96,"txnTime":1546880167},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"4RvNoSPKWa1whZRGjpGEq5UDKQUVd3h1m5aRr4xThoFyCR7D2HiszbPGRJH9hhD8V4Sh2cERksU85fyHpW1BUZDz"}]},"txn":{"data":{"data":{"alias":"ibmTest","services":[]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"d847f4140dbc101029081cd2abecc0f32465e310180917e12736d9f102dd2c6b","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1547489538349798313},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":97,"txnTime":1547489539},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5gCEwT2NHiUcuD53F6xW6vp6CnFabbk2kXoLLxfrUHqnjqMQDNwuSU6fm32aYFC2Z7KMjfs9jKfqPLEtwPFWASqi"}]},"txn":{"data":{"data":{"alias":"ibmTest","services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"e92c1fecf19b469d484bad7b3b2115b5e88df9c695afca551c5e1f3422f253f7","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1547497859538640883},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":98,"txnTime":1547497859},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"3Pcohi5dAcVz9k8hryvXn8x6ddGob5hWYzmHoeZdDi628Asc4Au1rmsMjZasvLPqj69MN1VfbE4kTC9oESUPbAeC"}]},"txn":{"data":{"data":{"alias":"ibmTest","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"56af49cfcb420ab39ecee2912fe3acaa2c0e9fcf4bc6dfdf783210cda55495eb","from":"BD95LAmfVrD3JEwaereykM","reqId":1547498794878924300},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":99,"txnTime":1547498795},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"46AVXqBesadhJLZvoRmcyPDDePE9Hi5DahjPC82fhw7irQnVXbvwNhqB7HXfCxtu8w8VifPhEcfihZcuNKBg995B"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":[]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"a1412abace57327ba53e022db6a977e198a6134fec1dc4a17050de981f165845","from":"BD95LAmfVrD3JEwaereykM","reqId":1547500122390156800},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":100,"txnTime":1547500123},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"3yv5pLUCBnbC95FRb2qVrCtxRVBWB9ySRKkTxJ1M4pdTsXZPd3BHkDYTDqms9e3zPNtK5r8RQcg2ws6c5W4Nmy95"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"1f584ac4cc88cb57ad5d9005e4f5f17156b70aad80f302b642289e4840076f74","from":"BD95LAmfVrD3JEwaereykM","reqId":1547500156383195400},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":101,"txnTime":1547500157},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"3f1sTShBSY8s7axeGypUxfY8a4V19kYkkFPyGygGGveJ2KDNVSEtKJHbLQNkaxk1nJnKudWQGKzCS2AdjBG766rw"}]},"txn":{"data":{"data":{"alias":"ibmTest","services":[]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"03f65d7a7bc664f38199f4d34f6c8dd3fbeb5ad8744753b6a3f92def6d148ace","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1547500445740297593},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":102,"txnTime":1547500446},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"5zo62TywH6pZij5L3QU9zmjEmAf7czZDJnyF3zFHXhqcGfGYLWCeUuFqJ7bVMc8Bnfx2XxkYY4UtwZ6oz3HwrqdL"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"da6a5f92b960682e1c372ac18d3287e8a9db6e64cd5c07855a2cd95d5c13263b","from":"BD95LAmfVrD3JEwaereykM","reqId":1547500485921720200},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":103,"txnTime":1547500486},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"ftEtDcapN4TLHkeMDzvf4iQcrtAJvZx1VvvHnhDxqPxTcRVXWXLrQxNZWEjnjFet7ZNtsAQT6MmYHhZGztqrAVY"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.138","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"15e71658452369fb383b2887eb9c4bf3833a3df8e6c48138de55730e086c0e6e","from":"BD95LAmfVrD3JEwaereykM","reqId":1547501596782347800},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":104,"txnTime":1547501597},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"7sTtbnHKD3zyosb1dFQAex","value":"23WRyTk9B2hPHXTMzFnjxJZZUhfsn9DLBbep5fEQqm6eTqYHiGrriTP9PbPLpVF1BHWsygVsVyr1jSQjr3VE6pKy"}]},"txn":{"data":{"data":{"alias":"regioit01","blskey":"RVjJZ8FJDMjFS6hTNVSXMx7S4BfQeX49CLTXvkHWvVQ4LRNBCsWAjwWFcDUzmdA2JA7hMRi9qvjh8vmPDahLeogJyWEByQFdJ4LnFo2NkDAfQwExHjLGXdawHPQjTduRrWYERpjwS9jFs3FXih6FcQRZb9mKrSW1tguSF7qGSdiNmV","blskey_pop":"R2v3TpVYmWpifxideMdW4EQo36w36VsppcDB44JNDxxCREiUZqrBj9RChgu6RRmHjj6SLchea5L515iadvA6STeQYh8tjMF87KH8s6RE5JAQagzX67X2fbpzai6A5Vq6w5wxLPJTKV4P9rkjxnH5Y6R1ReaVcKzZYk6j583WSUJZdZ","client_ip":"91.102.136.180","client_port":9700,"node_ip":"91.102.136.179","node_port":9701,"services":["VALIDATOR"]},"dest":"AQoViW7aucuvi8SC9QWur6u14ppmVvtMvduigy51NeCv"},"metadata":{"digest":"acd16644af0c402f1cce381e9dffcdd138d3d5098c54ac5c7d126be8b2923e50","from":"7sTtbnHKD3zyosb1dFQAex","reqId":1547571055916476853},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":105,"txnTime":1547571053},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"HS2VPUmJ1vJQHCjfH1w42H","value":"5htNrJWGu15CpxU7ocHYRkGQUygcaV41jcRmK9a1rvGoG59qWMJYpc4GvZeh2FttfobbxMZJfB57sggLhFS95y9S"}]},"txn":{"data":{"data":{"alias":"Absa","blskey":"31k6SUK7otXf9MXDgfGRb9N37z8xcZbdRmegNiK5k97sdfNvTSfKeEqSTxBqe7qqNa4ueYKDjW2MYgWBwYF1ohh5GzjUndykwttpffbkDGCrQAaUTJoBi9rJvrwCkkQeLKpoWTMkV6gYp1AiJkhKYiGhtCCAA3R5grGUpcMzDXqzt8R","blskey_pop":"QngATEwvD1MHDL4odeiMqg9AYp9emVmRDSQMeKwFXdtthR9x5tDvKrWFT1gZPECuaRWtEmQBQDzSxebiy5jZJ6DwNbP4EfLtKvHrmHUAVfXKvrzHJiwbeg56oXdyi84xsNLKKZrhhr8hEgpNN1F1FXHfJUDWNyMU3w81peiLLAkYrb","client_ip":"63.33.176.61","client_port":9702,"node_ip":"63.33.176.61","node_port":9701,"services":["VALIDATOR"]},"dest":"BUKQ26j7hqkW2bdQsoxHACyS1n7gCrHeYxLR4yaoWCr"},"metadata":{"digest":"31b150874511509e4ac355e37c9ce7f649fb12bc48a2cf9c591b0f390b076b67","from":"HS2VPUmJ1vJQHCjfH1w42H","reqId":1547574103955392127},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":106,"txnTime":1547574106},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"YTsBtQz1PgjHNNPsGa7i7i","value":"JJD9qYZF7z8nNqP2sAf1ER3HB9rH7FQBhPeVUjyaf3G9TsBUQCv3XVTgV9eGXke5tA7nmDHaQwhFhVDMfpZVq1E"}]},"txn":{"data":{"data":{"alias":"VALIDATOR1","blskey":"uSpMXhzYzgkShiEeWoSrKar8g2iCsg8KL9XaSSs9HNJt5MSCXKjPZtyHNN7KtuLi1ThxKZc8ZUUtjh9uz2ApXZU41PHLX4RsMEGdfMJf3FsPRP8RkodRtqXuxmTzKEvJJ4XihrgHCL85QBpBkmp2u7YioLqwhAxyDmFRLjFnHx4cwr","blskey_pop":"RHFFZHGBUFAkfYQr9nzn2FX2ZQn6u4FmRyfUTMC6DnVfBF7ogJz2oSS4vpi2MitFTwWCofZsB3g58wSPZA4PGAPR8KXjHQvEkB5MS3NDnAgjje1E8fX9XC41qhEJ1kdC68GtgTgJSJRfkmH9c3jjb8rhQskod6N8swtTpqwV4CGgoq","client_ip":"54.180.62.29","client_port":9798,"node_ip":"54.180.16.51","node_port":9799,"services":["VALIDATOR"]},"dest":"99UgWzvjVvhDHfd16V62VFdQEKn8Vk5fuMP2t1d6xx4w"},"metadata":{"digest":"d28d9fab163bd72cf7fbc254ca6b7b495101439870a064ceefd2b18f1d4417ad","from":"YTsBtQz1PgjHNNPsGa7i7i","reqId":1547599663946425568},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":107,"txnTime":1547599664},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KSZhtVyy7yQGxHLq8pxQwX","value":"2tHAgZ2A32YBJzLBWbXcCCfEYjRAfUeswRQQkrfttwk8Av1zvwHyfqQUfQKHKtTaQc1UeUjd7Z1axgEQf9LQqTCS"}]},"txn":{"data":{"data":{"alias":"swisscom","blskey":"2Y6bbfnx22jRKT6vDFq6kJayzqrU3N6hBGvqaepepgQHrC8KyfjwsnbAxr6NAySdFq81SopX5is2nc33d2Kei2jXGjktA7VgT3JPaSQxi6cb1UVKA3taVaqPXdbQvedkkGrgdGuHJgz2Tz5yZQertL2YiqUmKjPn78vSJWF3b6BXQ4B","blskey_pop":"QqARZRNUxwb9DWJW66DAifJNMCeWo2r3Mxy2HPrDEEiFvhba7FiSxQ8czJoVa2r58GwvT9Srvh2tifKUjMsnwt2o1GioMDpTS42MyENa6tvZuGnnsErVHekH5xccnGRe4zVLd3MAmzha8RDL5pMZeLzRw5rDpQLSnJQJKrQzqLho2X","client_ip":"164.128.162.43","client_port":9702,"node_ip":"164.128.162.42","node_port":9701,"services":["VALIDATOR"]},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"b582d138c5f92a84059eccae5c624392fc89899e02b559dfe5521b25230b10f6","from":"KSZhtVyy7yQGxHLq8pxQwX","reqId":1547651916293792395},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":108,"txnTime":1547651916},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KSZhtVyy7yQGxHLq8pxQwX","value":"2eF3euLofexGmoBY8BQutqNkPEGhWvomVQZK1PFs9iKRzUEkZPXAStxG8wuh59DRUcGTX3piZUQYPk6Cb7Dc3cCY"}]},"txn":{"data":{"data":{"alias":"swisscom","blskey":"2Y6bbfnx22jRKT6vDFq6kJayzqrU3N6hBGvqaepepgQHrC8KyfjwsnbAxr6NAySdFq81SopX5is2nc33d2Kei2jXGjktA7VgT3JPaSQxi6cb1UVKA3taVaqPXdbQvedkkGrgdGuHJgz2Tz5yZQertL2YiqUmKjPn78vSJWF3b6BXQ4B","blskey_pop":"QqARZRNUxwb9DWJW66DAifJNMCeWo2r3Mxy2HPrDEEiFvhba7FiSxQ8czJoVa2r58GwvT9Srvh2tifKUjMsnwt2o1GioMDpTS42MyENa6tvZuGnnsErVHekH5xccnGRe4zVLd3MAmzha8RDL5pMZeLzRw5rDpQLSnJQJKrQzqLho2X","client_ip":"164.128.162.42","client_port":9702,"node_ip":"164.128.162.43","node_port":9701,"services":["VALIDATOR"]},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"23c08c4db5ad3ca27e2fd38b3015525d3a76b41ba63c2fb82e2a15f67ca717fb","from":"KSZhtVyy7yQGxHLq8pxQwX","reqId":1547653252643574766},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":109,"txnTime":1547653252},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KSZhtVyy7yQGxHLq8pxQwX","value":"mUhTwVA6XGHF82XJj4eEa5xpaK6qCFF2bwLHsVt4pnfxdVxTMYHJBVHaQfbYALSuDQfdrgktLKv6Goo8PRzvANc"}]},"txn":{"data":{"data":{"alias":"swisscom","services":[]},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"60ac2ccf34f393880b544c5fab223e5daf36a5fd92565556d22d589be6d2d9d1","from":"KSZhtVyy7yQGxHLq8pxQwX","reqId":1547656208364157351},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":110,"txnTime":1547656208},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"24goM7gvgMmhYs7VSd4TJtmUinGTySwYiB59ViLvpbQ9WV4TJZr4R9q36wX7nKRwu9aPBXiJSiEU33ozREQd3SUt"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"2df2c048ffd27254d4abe5face1ca7984d058a819d791d15a11dfe6dc0885cb3","from":"BD95LAmfVrD3JEwaereykM","reqId":1547499944042787200},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":111,"txnTime":1547762408},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KSZhtVyy7yQGxHLq8pxQwX","value":"3dz2LU41uRHr4jByQMQPN8UNbTixsMWnRkCLFBGFLH91NsFkC4hYvTmS1fSqAZWmabMwNyXGWTgCVce2axC6R52M"}]},"txn":{"data":{"data":{"alias":"swisscom","blskey":"2Y6bbfnx22jRKT6vDFq6kJayzqrU3N6hBGvqaepepgQHrC8KyfjwsnbAxr6NAySdFq81SopX5is2nc33d2Kei2jXGjktA7VgT3JPaSQxi6cb1UVKA3taVaqPXdbQvedkkGrgdGuHJgz2Tz5yZQertL2YiqUmKjPn78vSJWF3b6BXQ4B","blskey_pop":"QqARZRNUxwb9DWJW66DAifJNMCeWo2r3Mxy2HPrDEEiFvhba7FiSxQ8czJoVa2r58GwvT9Srvh2tifKUjMsnwt2o1GioMDpTS42MyENa6tvZuGnnsErVHekH5xccnGRe4zVLd3MAmzha8RDL5pMZeLzRw5rDpQLSnJQJKrQzqLho2X","client_ip":"164.128.162.43","client_port":9702,"node_ip":"164.128.162.42","node_port":9701,"services":["VALIDATOR"]},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"a81375c6b2e43e5ed4d44d565901e33066d77785798ddd93ed2726bea6930c4f","from":"KSZhtVyy7yQGxHLq8pxQwX","reqId":1547652168940154534},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":112,"txnTime":1547762409},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"554joew9xsZWAuwzfgK5CvAgw3hapNcET6Z7qEnVXBNBe23c9TCeAWeRoM9GYDpEypkZcQFwiQcV3jRJXq3wiFPF"}]},"txn":{"data":{"data":{"alias":"swisscom","services":[]},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"0a4a47a4080c3899997cc6e71e78d1e3ffd675e13d95908c9a0b122f2dd0dc8d","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1548175587215323240},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":113,"txnTime":1548175587},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"nLE6kCvr6FwEBvZ8p6aw58DMwFSf7Q5CcEEyA17b4HHQMpZuYdwbpz5w2kuiSac4w9qRnPGB8ouLndmzMggFHi1"}]},"txn":{"data":{"data":{"alias":"EBPI-validation-node","services":["VALIDATOR"]},"dest":"j2JLXyTCAMuHSRqZ7eB2JCXSpPniDFUsyT5MJcGAjUG"},"metadata":{"digest":"03c6e7bb56d6a2870bc9cc7a8e3e4c226864faf1db51368047e9e92d38697138","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1548184180516141458},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":114,"txnTime":1548184181},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"3pAYVxsFgE9u41tsucPUW4Jmy2LFQLKeNNiYcVi4MTm57GyheA5cVzbzLKq2wA4NABSd4EqLf2cCwmzZwUF2iAkE"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.138","client_port":9702,"node_ip":"169.60.4.138","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"be3db7c6f4526eaafece89054a366726ff34fb6d93943b847222fe5660454323","from":"BD95LAmfVrD3JEwaereykM","reqId":1548190805953640600},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":115,"txnTime":1548190806},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"2rn9DmGEeqU4V41MbGThxEuvdZ6qLHsVDeYqJDnpDayCWVhdxXERAfKokcxrXVHPA1Q2gyekZ3jMSuLaFua1jCwD"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.138","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"16bcd5c9ea536ed306bd414a3797076156c7e143ddcef630e95ee5b2a7d236d5","from":"BD95LAmfVrD3JEwaereykM","reqId":1548191738654080100},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":116,"txnTime":1548191739},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KSZhtVyy7yQGxHLq8pxQwX","value":"2SedyJRXPkF7yyCHkvEhGeyZ34W9MXrH5AVcFFgQJ4tbsWpF9gKvYL6gawbuvAE8W2FqkKoufWFf8kgxouaZV89v"}]},"txn":{"data":{"data":{"alias":"swisscom","client_ip":"127.0.0.3","client_port":9702,"node_ip":"127.0.0.3","node_port":9701},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"92c8ec4f3f0aaf806b18b74afb1e8e52d06d5096b9e0c3b3996af0dfc4bf627b","from":"KSZhtVyy7yQGxHLq8pxQwX","reqId":1548781193697645899},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":117,"txnTime":1548781193},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"HMT5rCkqvjcjZZHQFvQtsX","value":"5QNoTkHzevZ328EMXUTzWWveowZE1v4bfdhxaKfNGUvuUk4ympwnkzCPRFnz57xrvouC4A2rtd2T3vj4opCgQbMB"}]},"txn":{"data":{"data":{"alias":"Swisscom","blskey":"2Dys6A6wihGsazQLKe2hN8kHQ17u9Hix9pZ2uTBtuvMSLMaaWZrMnbXYoHcv7iDc58mGBnGEA335gXN8Y1Dntjd3YgeDYS7ffpxGHDuvMzuRpD2iktMCzUCRmsSMim32vURLkPTHs8Pg2fgg4vGcsmAeGk4tFVaCVC6gASgNU9JqDKX","blskey_pop":"RZ31hdcUW3zcD2XMTqvazNcX2YxwY4HSWah9tDzTW6A7G2uhzVoy9UTqzdrGHgZ183VoNKw1EeZvB6kRZYFLckwnW8pKT7r1GS4gUPPcnQxAtogy2bMnQQ8S4ZY5e7WYn2URJ2GF1TSGnzUzqu4iQZWiMeFsBc1CVH98A9PGmYQ3z7","client_ip":"164.128.162.43","client_port":9702,"node_ip":"164.128.162.42","node_port":9701,"services":["VALIDATOR"]},"dest":"B3x2KTn46sZmajraNm9oh6EUWnZWC5yQTrJAUifwDWRV"},"metadata":{"digest":"0ad6663c3841906ffafd51a467d7c43480d912551fbd98e9cd415e1571344455","from":"HMT5rCkqvjcjZZHQFvQtsX","reqId":1548781315218601114},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":118,"txnTime":1548781315},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"G4tfohtFDtmQJAEg6Pwgg6","value":"3oR6cXp4AbetwhgHacWjnF7LhnS8q8kVzA4nqvsvvxKzDEbiFSEF4UEU5BFiiAxtXg9nm6xk5X496v6JHETYdYjU"}]},"txn":{"data":{"data":{"alias":"NECValidator","blskey":"4UVe2Ryi4oPiECy8jxEHrXbNKbyjBjADotdD7ibRfpkfHjkD7UnBVcJKq8NFFf3rmGb8G3i7hGvZw8dUyQvcx67uAKNvYA3QMc3AL77aFNXHjiU5HdEBhwvq9qjs3BWZGoPyRfxun7EjMohiHvGTiZUxAzZD3R8qpaYaJ7DUdC3k24Y","blskey_pop":"QkN8FyGfub1yoMMzHhDBdrRyfKyrqX8kuiA6dXfAM3ghMGq1wWGbA8VuuCf4eWtxZvaD8iz9shC5zJn2C6pzo3BpmmP2bufsAGVWcNhTqxKPfXHds2JC4DagX7BV5mDfTriv4mF4EJD8PbwVgGvHzGFj4FuGTx3BnA9oay3rGxf1m9","client_ip":"52.69.239.67","client_port":9702,"node_ip":"13.230.94.222","node_port":9701,"services":["VALIDATOR"]},"dest":"BLu5t8JVbpHrRrocSx1HtMqJC8xruDLisaYZMZverkBs"},"metadata":{"digest":"3e03ca15f515f8fce2287600d02ef5dee412bc2874b836b8a5831ef9cb526701","from":"G4tfohtFDtmQJAEg6Pwgg6","reqId":1548808410060957151},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":119,"txnTime":1548808410},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"Kv2YdE5KGgdruMGW6p5w4b","value":"2Fm6QXXRYDhh34H7xRYFxHJQyHymyimPBJotwKzGUWJBGEcWPdYUhUFk2VDp9JyYhkapDchyhtS7VxjvQnHc6yR1"}]},"txn":{"data":{"data":{"alias":"xsvalidatorec2irl","services":[]},"dest":"DXn8PUYKZZkq8gC7CZ2PqwECzUs2bpxYiA5TWgoYARa7"},"metadata":{"digest":"e5b3e73768c7698aafa3a9679d2b91b58be5b6a4f7e5b9669c27838b94e3cd27","from":"Kv2YdE5KGgdruMGW6p5w4b","reqId":1551902688751838000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":120,"txnTime":1551902689},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"5M3i1PbpvEQmTk25EmAY6N","value":"5Rkz1NJxoU8rjaSeXHb77XrjD1Gedqm6ZxqN89YEtnajxztxcw5iKEBLnFg34in2ta2mkAdkLSBPEQbArPKFyG5f"}]},"txn":{"data":{"data":{"alias":"sparknz","services":[]},"dest":"DdAqLDrkEW96hcVLsEtf8SrQnUGFK7uMLyHi775kYFVw"},"metadata":{"digest":"34c208f6f214e973d926473b807e1220dd5f4167685101baa0fdde25da577054","from":"5M3i1PbpvEQmTk25EmAY6N","reqId":1551981105839004000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":121,"txnTime":1551981106},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"5M3i1PbpvEQmTk25EmAY6N","value":"29EBhTyCNsXJ9rruhPUfY5DLoXW5JiyZy7eGNxZ649sYefMZmJdpf8dnd2LxkCNswD9oGWPXbiRZbGfCEXc35Zkf"}]},"txn":{"data":{"data":{"alias":"vnode1","services":[]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"df690f4b4bd3897bbd321563ef5fbf4fdaba2b095546b19d5cc7840f309871a4","from":"5M3i1PbpvEQmTk25EmAY6N","reqId":1552398621045487000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":122,"txnTime":1552398621},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"HS2VPUmJ1vJQHCjfH1w42H","value":"58FmzCHRRYsiyFE1NQht7Y6n5LLNMmxdVQkBnfBrpmmWHjgLWWjxSK3BwsJW1e2BHhoajGRBZdCSpMHPvwKDuXtU"}]},"txn":{"data":{"data":{"alias":"Absa","client_ip":"99.80.22.248","client_port":9702,"node_ip":"63.33.176.61","node_port":9701,"services":["VALIDATOR"]},"dest":"BUKQ26j7hqkW2bdQsoxHACyS1n7gCrHeYxLR4yaoWCr"},"metadata":{"digest":"96a1552ad574113e94baac125f9032c97e0a60abb5498ac43d2a12a85c0460fb","from":"HS2VPUmJ1vJQHCjfH1w42H","reqId":1552408626878108613},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":123,"txnTime":1552476998},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"4GCt8VdmfVFJtufoKD6HJBiiQTR6ujiK4bLn2NmdcQucKQNKD3Jr3McMAkwqnjDcduDdQW6AURLeSDyFBDqzZTfv"}]},"txn":{"data":{"data":{"alias":"ibmTest","services":[]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"29a7d65b74832fc91178e60089521bf0212b48a05d7fc35be8841eeda8dc8f88","from":"BD95LAmfVrD3JEwaereykM","reqId":1552662332849012735},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":124,"txnTime":1552662333},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"c5GFhSHNMdaqjSyzQeaMa","value":"2ZSByqsx5w6rpQm6FbKt1scnUUu1VSbbwXBMoKcDCkyrdsm9yrgAKsR8myTW1z4EFt91zAFUJPoUaHnAd6oyBgin"}]},"txn":{"data":{"data":{"alias":"cynjanode","blskey":"4oMnfEbqH5fuLGQQSWLZA7L1y8D4zL232t6QiJhspA5GsKJAextNa3oyr1MK46byzax4EmyoyS74YkLD5ri6dJmRXFnKPZ9E4q8UTWFBRdmpwGiZXni9HXL8twBHhfnNE8vXirQLvzQ2gcSBRzdGHanPBwKnvqjoeNGfDfM1kT22pks","blskey_pop":"RFvdDmi1a8b1VYA8eRtTs9cC2dmhK8b2P7k9VWcPpPKwupyTQr2amdbq4GcbASyML6RXxAvZRuj2EJH3KabkT3hVPM8g1Wn1VYY2761pwCjcHfN1E2G2Nwe5sdwRqxvV965aYi9595SBVWWabx6bcJ9S5EDqKevrUnZ9nsG7xfoWEB","client_ip":"3.17.103.221","client_port":9702,"node_ip":"3.17.215.226","node_port":9701,"services":["VALIDATOR"]},"dest":"C8H9SzkM6NrfYB1jD6dMCmdBKXvcCgGZpvwD47xGdJFQ"},"metadata":{"digest":"eac8e6015ba1eb3f1b294f9c53e54bc79d27b0a690ab358bd826668999f9cc4a","from":"c5GFhSHNMdaqjSyzQeaMa","reqId":1552676534057365965},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":125,"txnTime":1552676534},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6aAJEoijPh3yqeDe9JCqRg","value":"2QzZSa4ComF5hNzGYp2KxtrAu57tstBk7jZrhv6CK95C36KL3Naif5hPJ2egD4ANjAo7VDyaSFks8fANFjFYTowH"}]},"txn":{"data":{"data":{"alias":"DigiCert-Node","blskey":"34ZnAnof88aahn2jShZqUPyvWXjM4pdjBukbH44BXAyZGcY2rivuMLHwCPZGGRf7JAVx6zGdnQiFziqwj8ndtGghht67H2DqHhoxxeCvgxv5aMAVW57z8ekGyMQXq1UWYEYgjFqY2Fi9bCTkGb4ywn4JEFvnfk3aEhVS92CpG5eYQHs","blskey_pop":"R5ksJ4cADE265315njhARQJS3eEqC4bBFjz6sW49Lc7cF814pMdKk4AjjHLCvKeViU6EP8YvhvpiuMhEYzmabsMnj7oesJGp6eqxkjSabFZ7LWk5wzfBW53fSAtBrK4KSGzAfU9zsmsNqBMuK1fiC7J1emxjaZfeXWkBV63dD36i95","client_ip":"63.33.233.212","client_port":9702,"node_ip":"34.250.128.221","node_port":9701,"services":["VALIDATOR"]},"dest":"5mYsynpwzx3muLWYP5ZmqWK8oZtP5k7xj5w85NDKJSM6"},"metadata":{"digest":"c4b76246a7000c018f70776f56accb4667a00eaab83933246b218f5cf4234fb2","from":"6aAJEoijPh3yqeDe9JCqRg","reqId":1553027997718160009},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":126,"txnTime":1553027997},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6aAJEoijPh3yqeDe9JCqRg","value":"2KPdokKdhFMouCFG2xFUmPpwhUSUzte5CdjykDd4YE1BdjZ8UuHsW7d7CLiLrcUkLxyFfKKZNHPZaLhTHjoSqTvF"}]},"txn":{"data":{"data":{"alias":"DigiCert-Node","blskey":"34ZnAnof88aahn2jShZqUPyvWXjM4pdjBukbH44BXAyZGcY2rivuMLHwCPZGGRf7JAVx6zGdnQiFziqwj8ndtGghht67H2DqHhoxxeCvgxv5aMAVW57z8ekGyMQXq1UWYEYgjFqY2Fi9bCTkGb4ywn4JEFvnfk3aEhVS92CpG5eYQHs","blskey_pop":"R5ksJ4cADE265315njhARQJS3eEqC4bBFjz6sW49Lc7cF814pMdKk4AjjHLCvKeViU6EP8YvhvpiuMhEYzmabsMnj7oesJGp6eqxkjSabFZ7LWk5wzfBW53fSAtBrK4KSGzAfU9zsmsNqBMuK1fiC7J1emxjaZfeXWkBV63dD36i95","client_ip":"34.250.128.221","client_port":9702,"node_ip":"34.250.128.221","node_port":9701,"services":["VALIDATOR"]},"dest":"5mYsynpwzx3muLWYP5ZmqWK8oZtP5k7xj5w85NDKJSM6"},"metadata":{"digest":"f5597be009afc3b9decda1e09c8f8d74bd039ac6d6cb890051c88ebeffaa16e9","from":"6aAJEoijPh3yqeDe9JCqRg","reqId":1553030138803227716},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":127,"txnTime":1553030138},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"2v7MzY14jwoMvakDWybDyf3o977GWDT1rQMd5eCEnmTjXy5kvoH99zZJVWXJibDYLU137JbsxQkh59T1HD4kNBbS"}]},"txn":{"data":{"data":{"alias":"brazil","services":[]},"dest":"2MHGDD2XpRJohQzsXu4FAANcmdypfNdpcqRbqnhkQsCq"},"metadata":{"digest":"8bca858f90639c68074c2bb5cdec23a1763e3f58ad38d82c8ebcc0c229c72daa","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"a89394bc38773f420ee0fa62a7e4be466a668c996b1a956e173c8c62ad4ec8ff","reqId":1558034106037397876},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":128,"txnTime":1558034106},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"QVvkFcetzE4g22g4px1iHqEonHimSsFBh7XkCTmEeBqK7oaN4j3TCDB7BjTxZmGhovc2GWVxRswN65nvFygYn7E"}]},"txn":{"data":{"data":{"alias":"canada","services":[]},"dest":"8NZ6tbcPN2NVvf2fVhZWqU11XModNudhbe15JSctCXab"},"metadata":{"digest":"59a7f83dc11a5fbb89f21738665dde7818425cade9b27ff2c944879d48aa2890","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"b9597e20b484f700011436a6c8b768918519980f808928de56b24225165e86e1","reqId":1558034149584193019},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":129,"txnTime":1558034149},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"gc57GehP57PUUN59tGadDjdE7LAmrfseFCqb1DgYenmFF73cUAF25gkPJxuLiFpPV5CiFPjSoAa1JQhAGUz5MDk"}]},"txn":{"data":{"data":{"alias":"england","services":[]},"dest":"DNuLANU7f1QvW1esN3Sv9Eap9j14QuLiPeYzf28Nub4W"},"metadata":{"digest":"f59bb98e1be7576c6575a5abc4ac38edd28148d84605a62437aaf3151c962f69","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"fe0b9e5440ac37828d86daa77be8a55c2b52c89274763673db58d9317c2d1925","reqId":1558034190209122296},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":130,"txnTime":1558034190},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"kU4vKskb9iZEy7YfUQWt9cVrYpmXcqTpctKCLnZ4JsQ9DCEL9ESZ9waC8Jw6qFAW7gQfDgqkehmkFbD9jZSgsyf"}]},"txn":{"data":{"data":{"alias":"korea","services":[]},"dest":"HCNuqUoXuK9GXGd2EULPaiMso2pJnxR6fCZpmRYbc7vM"},"metadata":{"digest":"45a6090bbffa535b34b103f0f4209b039e66c05fad50013d30e8cb139510d627","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"5724525adf9d82d113b1f785c39c6a3a6f6ea92e06e9dbdb57740f4e1e8a3654","reqId":1558034231813907676},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":131,"txnTime":1558034232},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5VB9ELm2QkWug8s29obUiSxq5tWi588wnYX5nXJEmm5ewoVR5NSTHQcg9q2nm1rcy2aesVsB77e5LLWpae7uqjkb"}]},"txn":{"data":{"data":{"alias":"singapore","services":[]},"dest":"Dh99uW8jSNRBiRQ4JEMpGmJYvzmF35E6ibnmAAf7tbk8"},"metadata":{"digest":"0fb35dbf7589f7acfa487aa1eed473299d1405ed2c656b50b15175e5487f4aa9","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"0359d686d0935df89d4b8fbad5b7264104f2eef898a93cc388e67188d71980e4","reqId":1558034282845794593},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":132,"txnTime":1558034283},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"2wMAYGVoSt3ZtU3CzcvhzMAQ2EFhZvPwBsGKqpNmWvKVWbFeyC6yMZxHCVdtj2fqfj36FJkvPKkh3gwmvvrt6eeW"}]},"txn":{"data":{"data":{"alias":"virginia","services":[]},"dest":"EoGRm7eRADtHJRThMCrBXMUM2FpPRML19tNxDAG8YTP8"},"metadata":{"digest":"4ee79b267e7a5aa9ca96ee667f75dadfafdf1238c2841d2d5fa28accf542331c","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"1b4afb24a5d19cf90eb41bb9c265610a6922c6e0aa59386dc3af2016988f4dc6","reqId":1558034311268528084},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":133,"txnTime":1558034311},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"3QyhWLE53fg8wsNRFJijV6QKax2deCAzhUa1g152KYJ7exk1iqv6mLsHtY5KXNiXLg1a8vxQiFj8Hp8iRb7CXrCA"}]},"txn":{"data":{"data":{"alias":"RFCU","services":[]},"dest":"2B8bkZX3SvcBq3amP7aeATsSPz82RyyCJQbEjZpLgZLh"},"metadata":{"digest":"58c132bc0b8c96fb7628e8b7af9a9086ff2b2c894091090f88eb328ee945fe28","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"64b6882e3cbf71154369d91f9da431d069b465116dada6ba685928cd11c7b9e3","reqId":1558034435821210238},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":134,"txnTime":1558034436},"ver":"1"} -' \ No newline at end of file + +APP_URL=localhost:4002 +AGENT_HTTP_URL=http://localhost:4002 +HOLDER_REDIRECT=http://localhost:4002/redirect + +HOLDER_CLIENT_ID=wallet + +ALLOW_INSECURE_HTTP_URLS=true + +ROOT_CA_VALIDITY_YEARS=3 +DCS_VALIDITY_YEARS=3 + +ROOT_CA_START_FROM_CURRENT_MONTH=true +DCS_START_FROM_CURRENT_MONTH=true + +NODE_ENV=DEV + +# Authentication type for trust-service calls. Supported: NoAuth | ClientAuth (defaults to NoAuth if not set) +TRUST_SERVICE_AUTH_TYPE= +# Full token endpoint URL for ClientAuth (e.g. http://host:5000/v1/orgs/{clientId}/token) +TRUST_SERVICE_TOKEN_URL= +# Client credentials used for trust-service authentication (ClientAuth only) +TRUST_SERVICE_CLIENT_ID= +TRUST_SERVICE_CLIENT_SECRET= +# Trust list URL — for NoAuth: GitHub/static JSON URL; for ClientAuth: trust-service base URL +TRUST_LIST_URL= + +# Expiry is in seconds +OID4VCI_CRED_OFFER_EXPIRY=3600 +OID4VCI_ACCESS_TOKEN_EXPIRY=3600 +OID4VCI_AUTH_CODE_EXPIRY=3600 +OID4VCI_CNONCE_EXPIRY=3600 + +# Expiry is in seconds +OID4VP_AUTH_REQUEST_PROOF_REQUEST_EXPIRY=3600 + +APP_JSON_BODY_SIZE=5mb +APP_URL_ENCODED_BODY_SIZE=5mb + + +API_KEY=supersecret-that-too-16chars +UPDATE_JWT_SECRET=false + + +STATUS_LIST_SERVER_URL=https://dev-status-list.sovio.id/ +STATUS_LIST_API_KEY=test_key +STATUS_LIST_DEFAULT_SIZE=131072 +ENABLE_CUSTOM_DOCUMENT_LOADER=false +DEPRECATED_DOMAIN=https://schema.credebl.id +CURRENT_DOMAIN=https://schema.new-credebl.id + +BCOVRIN_TEST_GENESIS='{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node1","blskey":"4N8aUNHSgjQVgkpm8nhNEfDf6txHznoYREg9kirmJrkivgL4oSEimFF6nsQ6M41QvhM2Z33nves5vfSn9n1UwNFJBYtWVnHYMATn76vLuL3zU88KyeAYcHfsih3He6UHcXDxcaecHVz6jhCYz1P2UZn2bDVruL5wXpehgBfBaLKm3Ba","blskey_pop":"RahHYiCvoNCtPTrVtP7nMC5eTYrsUA8WjXbdhNc8debh1agE9bGiJxWBXYNFbnJXoXhWFMvyqhqhRoq737YQemH5ik9oL7R4NTTCz2LEZhkgLJzB3QRQqJyBNyv7acbdHrAT8nQ9UkLbaVL9NBpnWXBTw4LEMePaSHEw66RzPNdAX1","client_ip":"138.197.138.255","client_port":9702,"node_ip":"138.197.138.255","node_port":9701,"services":["VALIDATOR"]},"dest":"Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv"},"metadata":{"from":"Th7MpTaRZVRYnPiabds81Y"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"fea82e10e894419fe2bea7d96296a6d46f50f93f9eeda954ec461b2ed2950b62"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node2","blskey":"37rAPpXVoxzKhz7d9gkUe52XuXryuLXoM6P6LbWDB7LSbG62Lsb33sfG7zqS8TK1MXwuCHj1FKNzVpsnafmqLG1vXN88rt38mNFs9TENzm4QHdBzsvCuoBnPH7rpYYDo9DZNJePaDvRvqJKByCabubJz3XXKbEeshzpz4Ma5QYpJqjk","blskey_pop":"Qr658mWZ2YC8JXGXwMDQTzuZCWF7NK9EwxphGmcBvCh6ybUuLxbG65nsX4JvD4SPNtkJ2w9ug1yLTj6fgmuDg41TgECXjLCij3RMsV8CwewBVgVN67wsA45DFWvqvLtu4rjNnE9JbdFTc1Z4WCPA3Xan44K1HoHAq9EVeaRYs8zoF5","client_ip":"138.197.138.255","client_port":9704,"node_ip":"138.197.138.255","node_port":9703,"services":["VALIDATOR"]},"dest":"8ECVSk179mjsjKRLWiQtssMLgp6EPhWXtaYyStWPSGAb"},"metadata":{"from":"EbP4aYNeTHL6q385GuVpRV"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"1ac8aece2a18ced660fef8694b61aac3af08ba875ce3026a160acbc3a3af35fc"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node3","blskey":"3WFpdbg7C5cnLYZwFZevJqhubkFALBfCBBok15GdrKMUhUjGsk3jV6QKj6MZgEubF7oqCafxNdkm7eswgA4sdKTRc82tLGzZBd6vNqU8dupzup6uYUf32KTHTPQbuUM8Yk4QFXjEf2Usu2TJcNkdgpyeUSX42u5LqdDDpNSWUK5deC5","blskey_pop":"QwDeb2CkNSx6r8QC8vGQK3GRv7Yndn84TGNijX8YXHPiagXajyfTjoR87rXUu4G4QLk2cF8NNyqWiYMus1623dELWwx57rLCFqGh7N4ZRbGDRP4fnVcaKg1BcUxQ866Ven4gw8y4N56S5HzxXNBZtLYmhGHvDtk6PFkFwCvxYrNYjh","client_ip":"138.197.138.255","client_port":9706,"node_ip":"138.197.138.255","node_port":9705,"services":["VALIDATOR"]},"dest":"DKVxG2fXXTU8yT5N7hGEbXB3dfdAnYv1JczDUHpmDxya"},"metadata":{"from":"4cU41vWW82ArfxJxHkzXPG"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"7e9f355dffa78ed24668f0e0e369fd8c224076571c51e2ea8be5f26479edebe4"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node4","blskey":"2zN3bHM1m4rLz54MJHYSwvqzPchYp8jkHswveCLAEJVcX6Mm1wHQD1SkPYMzUDTZvWvhuE6VNAkK3KxVeEmsanSmvjVkReDeBEMxeDaayjcZjFGPydyey1qxBHmTvAnBKoPydvuTAqx5f7YNNRAdeLmUi99gERUU7TD8KfAa6MpQ9bw","blskey_pop":"RPLagxaR5xdimFzwmzYnz4ZhWtYQEj8iR5ZU53T2gitPCyCHQneUn2Huc4oeLd2B2HzkGnjAff4hWTJT6C7qHYB1Mv2wU5iHHGFWkhnTX9WsEAbunJCV2qcaXScKj4tTfvdDKfLiVuU2av6hbsMztirRze7LvYBkRHV3tGwyCptsrP","client_ip":"138.197.138.255","client_port":9708,"node_ip":"138.197.138.255","node_port":9707,"services":["VALIDATOR"]},"dest":"4PS3EDQ3dW1tci1Bp6543CfuuebjFrg36kLAUcskGfaA"},"metadata":{"from":"TWwCRQRZ2ZHMJFn9TzLp7W"},"type":"0"},"txnMetadata":{"seqNo":4,"txnId":"aa5e817d7cc626170eca175822029339a444eb0ee8f0bd20d3b0b76e566fb008"},"ver":"1"}' + +INDICIO_TEST_GENESIS='{"reqSignature":{},"txn":{"data":{"data":{"alias":"OpsNode","blskey":"4i39oJqm7fVX33gnYEbFdGurMtwYQJgDEYfXdYykpbJMWogByocaXxKbuXdrg3k9LP33Tamq64gUwnm4oA7FkxqJ5h4WfKH6qyVLvmBu5HgeV8Rm1GJ33mKX6LWPbm1XE9TfzpQXJegKyxHQN9ABquyBVAsfC6NSM4J5t1QGraJBfZi","blskey_pop":"Qq3CzhSfugsCJotxSCRAnPjmNDJidDz7Ra8e4xvLTEzQ5w3ppGray9KynbGPH8T7XnUTU1ioZadTbjXaRY26xd4hQ3DxAyR4GqBymBn3UBomLRJHmj7ukcdJf9WE6tu1Fp1EhxmyaMqHv13KkDrDfCthgd2JjAWvSgMGWwAAzXEow5","client_ip":"13.58.197.208","client_port":"9702","node_ip":"3.135.134.42","node_port":"9701","services":["VALIDATOR"]},"dest":"EVwxHoKXUy2rnRzVdVKnJGWFviamxMwLvUso7KMjjQNH"},"metadata":{"from":"Pms5AZzgPWHSj6nNmJDfmo"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"77ad6682f320be9969f70a37d712344afed8e3fba8d43fa5602c81b578d26088"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"cynjanode","blskey":"32DLSweyJRxVMcVKGjUeNkVF1fwyFfRcFqGU9x7qL2ox2STpF6VxZkbxoLkGMPnt3gywRaY6jAjqgC8XMkf3webMJ4SEViPtBKZJjCCFTf4tGXfEsMwinummaPja85GgTALf7DddCNyCojmkXWHpgjrLx3626Z2MiNxVbaMapG2taFX","blskey_pop":"RQRU8GVYSYZeu9dfH6myhzZ2qfxeVpCL3bTzgto1bRbx3QCt3mFFQQBVbgrqui2JpXhcWXxoDzp1WyYbSZwYqYQbRmvK7PPG82VAvVagv1n83Qa3cdyGwCevZdEzxuETiiXBRWSPfb4JibAXPKkLZHyQHWCEHcAEVeXtx7FRS1wjTd","client_ip":"3.17.103.221","client_port":"9702","node_ip":"3.17.215.226","node_port":"9701","services":["VALIDATOR"]},"dest":"iTq944JTtwHnst7rucfsRA4m26x9i6zCKKohETBCiWu"},"metadata":{"from":"QC174PGaL4zA9YHYqofPH2"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"ce7361e44ec10a275899ece1574f6e38f2f3c7530c179fa07a2924e55775759b"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"GlobaliD","blskey":"4Behdr1KJfLTAPNospghtL7iWdCHca6MZDxAtzYNXq35QCUr4aqpLu6p4Sgu9wNbTACB3DbwmVgE2L7hX6UsasuvZautqUpf4nC5viFpH7X6mHyqLreBJTBH52tSwifQhRjuFAySbbfyRK3wb6R2Emxun9GY7MFNuy792LXYg4C6sRJ","blskey_pop":"RKYDRy8oTxKnyAV3HocapavH2jkw3PVe54JcEekxXz813DFbEy87N3i3BNqwHB7MH93qhtTRb7EZMaEiYhm92uaLKyubUMo5Rqjve2jbEdYEYVRmgNJWpxFKCmUBa5JwBWYuGunLMZZUTU3qjbdDXkJ9UNMQxDULCPU5gzLTy1B5kb","client_ip":"13.56.175.126","client_port":"9702","node_ip":"50.18.84.131","node_port":"9701","services":["VALIDATOR"]},"dest":"2ErWxamsNGBfhkFnwYgs4UW4aApct1kHUvu7jbkA1xX4"},"metadata":{"from":"4H8us7B1paLW9teANv8nam"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"0c3b33b77e0419d6883be35d14b389c3936712c38a469ac5320a3cae68be1293"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"IdRamp","blskey":"LoYzqUMPDZEfRshwGSzkgATxcM5FAS1LYx896zHnMfXP7duDsCQ6CBG2akBkZzgH3tBMvnjhs2z7PFc2gFeaKUF9fKDHhtbVqPofxH3ebcRfA959qU9mgvmkUwMUgwd21puRU6BebUwBiYxMxcE5ChReBnAkdAv19gVorm3prBMk94","blskey_pop":"R1DjpsG7UxgwstuF7WDUL17a9Qq64vCozwJZ88bTrSDPwC1cdRn3WmhqJw5LpEhFQJosDSVVT6tS8dAZrrssRv2YsELbfGEJ7ZGjhNjZHwhqg4qeustZ7PZZE3Vr1ALSHY4Aa6KpNzGodxu1XymYZWXAFokPAs3Kho8mKcJwLCHn3h","client_ip":"207.126.128.12","client_port":"9702","node_ip":"207.126.129.12","node_port":"9701","services":["VALIDATOR"]},"dest":"5Zj5Aec6Kt9ki1runrXu87wZ522mnm3zwmaoHLUcHLx9"},"metadata":{"from":"AFLDFPoJuDQUHqnfmg8U7i"},"type":"0"},"txnMetadata":{"seqNo":4,"txnId":"c9df105558333ac8016610d9da5aad1e9a5dd50b9d9cc5684e94f439fa10f836"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"idlab-node01","blskey":"2fjJVi33U1tCTjW77cJaf1NLz7EzWkVNzR9BEQpVVK64MJpRKNUzt6k7Td2U8yqU5hGyAFH5N7ZymSB55TnpC3rJYLVTcGXZeXpmrQx3mwnXNyfTDnxfTpdQ1KMoFeZoDPZ8acfaH8GWeW2jL1qREE52tetBf4tXTeshmWzGkEN7r4y","blskey_pop":"RSjiM6dYUmN2rv2ca7dUCmEKrivq12rhxhXUKHdmSwUxbCmcijsgoERjYG7MqxhKLjSAJ5715K23fVEc6uK1kTenKmYCcCts8MLMAQG8Upb22nfgHJ3py8RwRoACeAjFF3myAMNRJJPhUdv96drJdwkGRv7f6JjvoB5KWVQYTNgheP","client_ip":"205.159.92.17","client_port":"9702","node_ip":"205.159.92.16","node_port":"9701","services":["VALIDATOR"]},"dest":"8czYgwmLDazVrBHuo53Tyx7Tw8ZhvnoC2BfhQGir4r8F"},"metadata":{"from":"PN8wFxLKjdkwyxoEEXwyz2"},"type":"0"},"txnMetadata":{"seqNo":5,"txnId":"9237eca7d2a203f6e1779f63064d2f22cf28e1bcd4e6fe5d791b15e82969acdc"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"lorica-identity-node1","blskey":"wUh24sVCQ8PHDgSb343g2eLxjD5vwxsrETfuV2sbwMNnYon9nhbaK5jcWTekvXtyiwxHxuiCCoZwKS97MQEAeC2oLbbMeKjYm212QwSnm7aKLEqTStXht35VqZvZLT7Q3mPQRYLjMGixdn4ocNHrBTMwPUQYycEqwaHWgE1ncDueXY","blskey_pop":"R2sMwF7UW6AaD4ALa1uB1YVPuP6JsdJ7LsUoViM9oySFqFt34C1x1tdHDysS9wwruzaaEFui6xNPqJ8eu3UBqcFKkoWhdsMqCALwe63ytxPwvtLtCffJLhHAcgrPC7DorXYdqhdG2cevdqc5oqFEAaKoFDBf12p5SsbbM4PYWCmVCb","client_ip":"35.225.220.151","client_port":"9702","node_ip":"35.224.26.110","node_port":"9701","services":["VALIDATOR"]},"dest":"k74ZsZuUaJEcB8RRxMwkCwdE5g1r9yzA3nx41qvYqYf"},"metadata":{"from":"Ex6hzsJFYzNJ7kzbfncNeU"},"type":"0"},"txnMetadata":{"seqNo":6,"txnId":"6880673ce4ae4a2352f103d2a6ae20469dd070f2027283a1da5e62a64a59d688"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"cysecure-itn","blskey":"GdCvMLkkBYevRFi93b6qaj9G2u1W6Vnbg8QhRD1chhrWR8vRE8x9x7KXVeUBPFf6yW5qq2JCfA2frc8SGni2RwjtTagezfwAwnorLhVJqS5ZxTi4pgcw6smebnt4zWVhTkh6ugDHEypHwNQBcw5WhBZcEJKgNbyVLnHok9ob6cfr3u","blskey_pop":"RbH9mY7M5p3UB3oj4sT1skYwMkxjoUnja8eTYfcm83VcNbxC9zR9pCiRhk4q1dJT3wkDBPGNKnk2p83vaJYLcgMuJtzoWoJAWAxjb3Mcq8Agf6cgQpBuzBq2uCzFPuQCAhDS4Kv9iwA6FsRnfvoeFTs1hhgSJVxQzDWMVTVAD9uCqu","client_ip":"35.169.19.171","client_port":"9702","node_ip":"54.225.56.21","node_port":"9701","services":["VALIDATOR"]},"dest":"4ETBDmHzx8iDQB6Xygmo9nNXtMgq9f6hxGArNhQ6Hh3u"},"metadata":{"from":"uSXXXEdBicPHMMhr3ddNF"},"type":"0"},"txnMetadata":{"seqNo":7,"txnId":"3c21718b07806b2f193b35953dda5b68b288efd551dce4467ce890703d5ba549"},"ver":"1"}' + +# ─── Data Purge — Record Deletion ──────────────────────────────────────────── +# Automatically deletes credential/proof/session records after a configurable TTL. +# Two independent flows — enable one or both: +# Flow A (NATS): schedules deletion at offer-creation time via NATS JetStream +# Flow B (Cron): periodically scans DB and deletes records older than TTL + +PURGE_ENABLED=false +PURGE_WEBHOOK_ENABLED=false + +# ── Flow A: NATS (event-driven, requires NATS connection below) ─────────────── +PURGE_NATS_ENABLED=false +PURGE_NATS_TTL_SECONDS=2592000 + +# ── Flow B: Cron (DB scan, no NATS required) ────────────────────────────────── +PURGE_CRON_ENABLED=false +PURGE_CRON_TTL_SECONDS=2592000 +PURGE_CRON_SCHEDULE=0 * * * * + +# ── Optional: per-type record filtering (default: all 4 types) ──────────────── +# PURGE_DIDCOMM_CREDENTIAL=true +# PURGE_DIDCOMM_PROOF=true +# PURGE_OID4VC_ISSUANCE=true +# PURGE_OID4VC_VERIFICATION=true + +# ─── NATS Connection (required for Flow A) ──────────────────────────────────── +NATS_SERVERS=nats://localhost:4223 +# Auth type — one of: nkey | creds | usernamePassword | none +NATS_AUTH_TYPE=nkey +NATS_NKEY_SEED= diff --git a/.env.sample b/.env.sample index 9c6ae29c..c79ee8ed 100644 --- a/.env.sample +++ b/.env.sample @@ -47,145 +47,99 @@ INDICIO_TEST_GENESIS=`{"reqSignature":{},"txn":{"data":{"data":{"alias":"OpsNode {"reqSignature":{},"txn":{"data":{"data":{"alias":"lorica-identity-node1","blskey":"wUh24sVCQ8PHDgSb343g2eLxjD5vwxsrETfuV2sbwMNnYon9nhbaK5jcWTekvXtyiwxHxuiCCoZwKS97MQEAeC2oLbbMeKjYm212QwSnm7aKLEqTStXht35VqZvZLT7Q3mPQRYLjMGixdn4ocNHrBTMwPUQYycEqwaHWgE1ncDueXY","blskey_pop":"R2sMwF7UW6AaD4ALa1uB1YVPuP6JsdJ7LsUoViM9oySFqFt34C1x1tdHDysS9wwruzaaEFui6xNPqJ8eu3UBqcFKkoWhdsMqCALwe63ytxPwvtLtCffJLhHAcgrPC7DorXYdqhdG2cevdqc5oqFEAaKoFDBf12p5SsbbM4PYWCmVCb","client_ip":"35.225.220.151","client_port":"9702","node_ip":"35.224.26.110","node_port":"9701","services":["VALIDATOR"]},"dest":"k74ZsZuUaJEcB8RRxMwkCwdE5g1r9yzA3nx41qvYqYf"},"metadata":{"from":"Ex6hzsJFYzNJ7kzbfncNeU"},"type":"0"},"txnMetadata":{"seqNo":6,"txnId":"6880673ce4ae4a2352f103d2a6ae20469dd070f2027283a1da5e62a64a59d688"},"ver":"1"} {"reqSignature":{},"txn":{"data":{"data":{"alias":"cysecure-itn","blskey":"GdCvMLkkBYevRFi93b6qaj9G2u1W6Vnbg8QhRD1chhrWR8vRE8x9x7KXVeUBPFf6yW5qq2JCfA2frc8SGni2RwjtTagezfwAwnorLhVJqS5ZxTi4pgcw6smebnt4zWVhTkh6ugDHEypHwNQBcw5WhBZcEJKgNbyVLnHok9ob6cfr3u","blskey_pop":"RbH9mY7M5p3UB3oj4sT1skYwMkxjoUnja8eTYfcm83VcNbxC9zR9pCiRhk4q1dJT3wkDBPGNKnk2p83vaJYLcgMuJtzoWoJAWAxjb3Mcq8Agf6cgQpBuzBq2uCzFPuQCAhDS4Kv9iwA6FsRnfvoeFTs1hhgSJVxQzDWMVTVAD9uCqu","client_ip":"35.169.19.171","client_port":"9702","node_ip":"54.225.56.21","node_port":"9701","services":["VALIDATOR"]},"dest":"4ETBDmHzx8iDQB6Xygmo9nNXtMgq9f6hxGArNhQ6Hh3u"},"metadata":{"from":"uSXXXEdBicPHMMhr3ddNF"},"type":"0"},"txnMetadata":{"seqNo":7,"txnId":"3c21718b07806b2f193b35953dda5b68b288efd551dce4467ce890703d5ba549"},"ver":"1"}` -# Specify Credebl test genesis -CREDEBL_TEST_GENESIS=`{"reqSignature": {}, "txn": {"data": {"data": {"alias": "Node1", "blskey": "4N8aUNHSgjQVgkpm8nhNEfDf6txHznoYREg9kirmJrkivgL4oSEimFF6nsQ6M41QvhM2Z33nves5vfSn9n1UwNFJBYtWVnHYMATn76vLuL3zU88KyeAYcHfsih3He6UHcXDxcaecHVz6jhCYz1P2UZn2bDVruL5wXpehgBfBaLKm3Ba", "blskey_pop": "RahHYiCvoNCtPTrVtP7nMC5eTYrsUA8WjXbdhNc8debh1agE9bGiJxWBXYNFbnJXoXhWFMvyqhqhRoq737YQemH5ik9oL7R4NTTCz2LEZhkgLJzB3QRQqJyBNyv7acbdHrAT8nQ9UkLbaVL9NBpnWXBTw4LEMePaSHEw66RzPNdAX1", "client_ip": "192.168.1.74", "client_port": 9702, "node_ip": "192.168.1.74", "node_port": 9701, "services": ["VALIDATOR"]}, "dest": "Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv"}, "metadata": {"from": "Th7MpTaRZVRYnPiabds81Y"}, "type": "0"}, "txnMetadata": {"seqNo": 1, "txnId": "fea82e10e894419fe2bea7d96296a6d46f50f93f9eeda954ec461b2ed2950b62"}, "ver": "1"} -{"reqSignature": {}, "txn": {"data": {"data": {"alias": "Node2", "blskey": "37rAPpXVoxzKhz7d9gkUe52XuXryuLXoM6P6LbWDB7LSbG62Lsb33sfG7zqS8TK1MXwuCHj1FKNzVpsnafmqLG1vXN88rt38mNFs9TENzm4QHdBzsvCuoBnPH7rpYYDo9DZNJePaDvRvqJKByCabubJz3XXKbEeshzpz4Ma5QYpJqjk", "blskey_pop": "Qr658mWZ2YC8JXGXwMDQTzuZCWF7NK9EwxphGmcBvCh6ybUuLxbG65nsX4JvD4SPNtkJ2w9ug1yLTj6fgmuDg41TgECXjLCij3RMsV8CwewBVgVN67wsA45DFWvqvLtu4rjNnE9JbdFTc1Z4WCPA3Xan44K1HoHAq9EVeaRYs8zoF5", "client_ip": "192.168.1.74", "client_port": 9704, "node_ip": "192.168.1.74", "node_port": 9703, "services": ["VALIDATOR"]}, "dest": "8ECVSk179mjsjKRLWiQtssMLgp6EPhWXtaYyStWPSGAb"}, "metadata": {"from": "EbP4aYNeTHL6q385GuVpRV"}, "type": "0"}, "txnMetadata": {"seqNo": 2, "txnId": "1ac8aece2a18ced660fef8694b61aac3af08ba875ce3026a160acbc3a3af35fc"}, "ver": "1"} -{"reqSignature": {}, "txn": {"data": {"data": {"alias": "Node3", "blskey": "3WFpdbg7C5cnLYZwFZevJqhubkFALBfCBBok15GdrKMUhUjGsk3jV6QKj6MZgEubF7oqCafxNdkm7eswgA4sdKTRc82tLGzZBd6vNqU8dupzup6uYUf32KTHTPQbuUM8Yk4QFXjEf2Usu2TJcNkdgpyeUSX42u5LqdDDpNSWUK5deC5", "blskey_pop": "QwDeb2CkNSx6r8QC8vGQK3GRv7Yndn84TGNijX8YXHPiagXajyfTjoR87rXUu4G4QLk2cF8NNyqWiYMus1623dELWwx57rLCFqGh7N4ZRbGDRP4fnVcaKg1BcUxQ866Ven4gw8y4N56S5HzxXNBZtLYmhGHvDtk6PFkFwCvxYrNYjh", "client_ip": "192.168.1.74", "client_port": 9706, "node_ip": "192.168.1.74", "node_port": 9705, "services": ["VALIDATOR"]}, "dest": "DKVxG2fXXTU8yT5N7hGEbXB3dfdAnYv1JczDUHpmDxya"}, "metadata": {"from": "4cU41vWW82ArfxJxHkzXPG"}, "type": "0"}, "txnMetadata": {"seqNo": 3, "txnId": "7e9f355dffa78ed24668f0e0e369fd8c224076571c51e2ea8be5f26479edebe4"}, "ver": "1"} -{"reqSignature": {}, "txn": {"data": {"data": {"alias": "Node4", "blskey": "2zN3bHM1m4rLz54MJHYSwvqzPchYp8jkHswveCLAEJVcX6Mm1wHQD1SkPYMzUDTZvWvhuE6VNAkK3KxVeEmsanSmvjVkReDeBEMxeDaayjcZjFGPydyey1qxBHmTvAnBKoPydvuTAqx5f7YNNRAdeLmUi99gERUU7TD8KfAa6MpQ9bw", "blskey_pop": "RPLagxaR5xdimFzwmzYnz4ZhWtYQEj8iR5ZU53T2gitPCyCHQneUn2Huc4oeLd2B2HzkGnjAff4hWTJT6C7qHYB1Mv2wU5iHHGFWkhnTX9WsEAbunJCV2qcaXScKj4tTfvdDKfLiVuU2av6hbsMztirRze7LvYBkRHV3tGwyCptsrP", "client_ip": "192.168.1.74", "client_port": 9708, "node_ip": "192.168.1.74", "node_port": 9707, "services": ["VALIDATOR"]}, "dest": "4PS3EDQ3dW1tci1Bp6543CfuuebjFrg36kLAUcskGfaA"}, "metadata": {"from": "TWwCRQRZ2ZHMJFn9TzLp7W"}, "type": "0"}, "txnMetadata": {"seqNo": 4, "txnId": "aa5e817d7cc626170eca175822029339a444eb0ee8f0bd20d3b0b76e566fb008"}, "ver": "1"}` - -# Specify SOVRIN Staging genesis -SOVRIN_STAGING_NET=`{"reqSignature":{},"txn":{"data":{"data":{"alias":"australia","client_ip":"52.64.96.160","client_port":"9702","node_ip":"52.64.96.160","node_port":"9701","services":["VALIDATOR"]},"dest":"UZH61eLH3JokEwjMWQoCMwB3PMD6zRBvG6NCv5yVwXz"},"metadata":{"from":"3U8HUen8WcgpbnEz1etnai"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"c585f1decb986f7ff19b8d03deba346ab8a0494cc1e4d69ad9b8acb0dfbeab6f"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"brazil","client_ip":"54.233.203.241","client_port":"9702","node_ip":"54.233.203.241","node_port":"9701","services":["VALIDATOR"]},"dest":"2MHGDD2XpRJohQzsXu4FAANcmdypfNdpcqRbqnhkQsCq"},"metadata":{"from":"G3knUCmDrWd1FJrRryuKTw"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"5c8f52ca28966103ff0aad98160bc8e978c9ca0285a2043a521481d11ed17506"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"canada","client_ip":"52.60.207.225","client_port":"9702","node_ip":"52.60.207.225","node_port":"9701","services":["VALIDATOR"]},"dest":"8NZ6tbcPN2NVvf2fVhZWqU11XModNudhbe15JSctCXab"},"metadata":{"from":"22QmMyTEAbaF4VfL7LameE"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"408c7c5887a0f3905767754f424989b0089c14ac502d7f851d11b31ea2d1baa6"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"england","client_ip":"52.56.191.9","client_port":"9702","node_ip":"52.56.191.9","node_port":"9701","services":["VALIDATOR"]},"dest":"DNuLANU7f1QvW1esN3Sv9Eap9j14QuLiPeYzf28Nub4W"},"metadata":{"from":"NYh3bcUeSsJJcxBE6TTmEr"},"type":"0"},"txnMetadata":{"seqNo":4,"txnId":"d56d0ff69b62792a00a361fbf6e02e2a634a7a8da1c3e49d59e71e0f19c27875"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"korea","client_ip":"52.79.115.223","client_port":"9702","node_ip":"52.79.115.223","node_port":"9701","services":["VALIDATOR"]},"dest":"HCNuqUoXuK9GXGd2EULPaiMso2pJnxR6fCZpmRYbc7vM"},"metadata":{"from":"U38UHML5A1BQ1mYh7tYXeu"},"type":"0"},"txnMetadata":{"seqNo":5,"txnId":"76201e78aca720dbaf516d86d9342ad5b5d46f5badecf828eb9edfee8ab48a50"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"singapore","client_ip":"13.228.62.7","client_port":"9702","node_ip":"13.228.62.7","node_port":"9701","services":["VALIDATOR"]},"dest":"Dh99uW8jSNRBiRQ4JEMpGmJYvzmF35E6ibnmAAf7tbk8"},"metadata":{"from":"HfXThVwhJB4o1Q1Fjr4yrC"},"type":"0"},"txnMetadata":{"seqNo":6,"txnId":"51e2a46721d104d9148d85b617833e7745fdbd6795cb0b502a5b6ea31d33378e"},"ver":"1"} -{"reqSignature":{},"txn":{"data":{"data":{"alias":"virginia","client_ip":"34.225.215.131","client_port":"9702","node_ip":"34.225.215.131","node_port":"9701","services":["VALIDATOR"]},"dest":"EoGRm7eRADtHJRThMCrBXMUM2FpPRML19tNxDAG8YTP8"},"metadata":{"from":"SPdfHq6rGcySFVjDX4iyCo"},"type":"0"},"txnMetadata":{"seqNo":7,"txnId":"0a4992ea442b53e3dca861deac09a8d4987004a8483079b12861080ea4aa1b52"},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"3U8HUen8WcgpbnEz1etnai","value":"NXjsBfaDijk6P6W6fg1EKrzPYhDvkNHbDcSMaYdja4URdiEdaPFcqXQttgwytcKZL79BsV3i8ShWbDS5L9Um5Pj"}]},"txn":{"data":{"data":{"alias":"australia","blskey":"31My1Ya9D1v5edgkGfYb96k4HWN1GwWWUeEnzzgw3NpiVmjpyjKgPmTYvPWZAYt8CLJLWzoQrEcBYhKRedsx8JMEB4LyPVx5vgbcjKsiUK2985t9Pkpn45UAYjDvVmGSbF2y99mMjQxpt7nCwGZ9yKcEm1cLpyHxvbnceZGkf8e9HYs"},"dest":"UZH61eLH3JokEwjMWQoCMwB3PMD6zRBvG6NCv5yVwXz"},"metadata":{"digest":"f8297516300f34624d25bf38b558f8ac9df2830a4e7fe8ccdf6816ec597da4cc","from":"3U8HUen8WcgpbnEz1etnai","reqId":1518718611795589},"type":"0"},"txnMetadata":{"seqNo":8,"txnTime":1518718611},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"3U8HUen8WcgpbnEz1etnai","value":"4wiCViKevghYdtcdJXdAmS4Cwy9dAsc5eDUqHnjZXcnBbVpc71iHdyWj83U4teK65Yq2g2no8ddzJscEVTZn1ueC"}]},"txn":{"data":{"data":{"alias":"australia","blskey":"KMbkBaLigL6wUbYZmh3d41EeCRVrW1hWkpGRcy2CXZ6ugZF1Zb7ZeL3RPRasaARYkuWmjYAuLE8WiVC1dL5ZQuJczAJfDsk73hxivHxqeBaXDQwEBN2dESLZHdK3oMU79ZhqBqnEgvvAvmVyyneW661if5c45AFJgGYPtpenxS49MB"},"dest":"UZH61eLH3JokEwjMWQoCMwB3PMD6zRBvG6NCv5yVwXz"},"metadata":{"digest":"77ab856e84ef72f87a6e99ecd447da338d1eddf332b9cd33a1399aba98d39ef4","from":"3U8HUen8WcgpbnEz1etnai","reqId":1518718754041702},"type":"0"},"txnMetadata":{"seqNo":9,"txnTime":1518718754},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"G3knUCmDrWd1FJrRryuKTw","value":"5owgEB8jgYUaGsH3pV6DyFMSiwXPqMgM4u9NzgCyJpnENTzyF1BmeVaNomRunbL9R4EhfbrDNHW9RJFd5GT5pAPs"}]},"txn":{"data":{"data":{"alias":"brazil","blskey":"2G1tp8pjdRSiZnpsWpN5c4tnGGTCPbqEkf8MyaVnfSxBun7pdtRqq83E7XnY4uzNmzpBF5PZcPBonfZXzCT2qWjRAB7PaDUWU5zWfLKhNoRmEzaeFp2dVkd9XrcefSfynStWsiPmv4tG8CHX153kL9Le7LMBk9qCRjeXn77wCUXqyvB"},"dest":"2MHGDD2XpRJohQzsXu4FAANcmdypfNdpcqRbqnhkQsCq"},"metadata":{"digest":"999bb3eecd2807ebf31c619518775f6219a1a6e51234f3a1f3b1021dd900dd97","from":"G3knUCmDrWd1FJrRryuKTw","reqId":1518719363728031},"type":"0"},"txnMetadata":{"seqNo":10,"txnTime":1518719363},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"22QmMyTEAbaF4VfL7LameE","value":"5yVCBN5z8ehtM14FdGcRPDEc3asUrEH83PdbEBpfyrvHprn8iUZMBSCo4kkirvS1HirLLxU4mHssGvm4baGfTXfc"}]},"txn":{"data":{"data":{"alias":"canada","blskey":"q6nBf5jDDQN23yKEvVsxYjMkS843yspF44867S9Fhht2uUogbAed4cXLfxdTJMLYvsNT2fhA2jmnNSQwUyWfXjBFUSZqNhvJdC3d5XvcW8aqCGnV1BY9fR1kvrQXoLjaYgr1Je33NJxLNpJLumGF6WvuW6SuZYJPbfWxo7F1Vhy8oV"},"dest":"8NZ6tbcPN2NVvf2fVhZWqU11XModNudhbe15JSctCXab"},"metadata":{"digest":"306bb20ca4c46e485e0c93abd6ee9960d8954928d5603d79ade75c7ef22c4288","from":"22QmMyTEAbaF4VfL7LameE","reqId":1518719479176817},"type":"0"},"txnMetadata":{"seqNo":11,"txnTime":1518719479},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"NYh3bcUeSsJJcxBE6TTmEr","value":"G99xrEafV1BhUtgLb8jugDQvu4JLp5R2s5T4ZqSuy5pPNnDRZyhWn6iW89Uwe476uxxdugx7TzEXY61wZXCsUNs"}]},"txn":{"data":{"data":{"alias":"england","blskey":"3TXrLKV5Yn2BE47NBEvM9u6J2DUsn414sUhQQQN1X2mRKhsPvWnixqo1AbFC5kRVjpHDhRPzvenm7cApfGcCGMDME1mSwESxiYgkgpahc9DuGD5hvFieryk3yJ96jcumWA7NUUDYmiHhZfCThXvGS9agXK4Kt3sgxBYQ17yN7wj3cRN"},"dest":"DNuLANU7f1QvW1esN3Sv9Eap9j14QuLiPeYzf28Nub4W"},"metadata":{"digest":"fb5062d61960bd6f742519c6df9ca5463e6c83689cad58a7c84783a7d013c3fb","from":"NYh3bcUeSsJJcxBE6TTmEr","reqId":1518719555172082},"type":"0"},"txnMetadata":{"seqNo":12,"txnTime":1518719555},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"U38UHML5A1BQ1mYh7tYXeu","value":"4ns8r24bUMZqs2AVrBUpK66gGBA3pp2h98BM8XC2nHghbyrmWA6KpSjnmEfLKBgDZcFaoSX4Wu2d6TJzeRsVQQ8Q"}]},"txn":{"data":{"data":{"alias":"korea","blskey":"2b51xiHs4afNBiTUenKJ2XHmPMfYcNFHAwB2x39z953y1YawDTKnUW9Q2gPCQvRR5esvF235PHfv9b5GYFnXPo41wzotm7LiYsYimAarVh2PFo3CAz5DSo9xA6Xo9EhP2JnDSvi2APqGn2UpoYtpRtz2bMFurqrnw6UPz4vq91x23hJ"},"dest":"HCNuqUoXuK9GXGd2EULPaiMso2pJnxR6fCZpmRYbc7vM"},"metadata":{"digest":"4943fc79d796067841ad0aeb0e44c54bb88a1e152e2bc482925ebe3df9e5d032","from":"U38UHML5A1BQ1mYh7tYXeu","reqId":1518719649363976},"type":"0"},"txnMetadata":{"seqNo":13,"txnTime":1518719649},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"HfXThVwhJB4o1Q1Fjr4yrC","value":"2pC8hkN3MxyJeUZmkqhvvUEi3uCwTbKd14Yjc4uVJjNqx2Hj6oXvwaZPvmJn3VJMkKKE7tpFrtwyFXx8CJ5WwArf"}]},"txn":{"data":{"data":{"alias":"singapore","blskey":"CT7HsX8MAcAnWZ8CFF1ttdYG91hNc7K9dGfpcp4QprLRYVR2XSr2ywHuNT5zLPvTkGDjrjyF2HdMbLkdNGgRa5LH1Am3D619yycJjP8t51c2XygEjoa6J1TmUjYkuC44Q6Aq1BriX5hJ2oxJL3bvnM2g7QRzRPyFdM771zNutV72W3"},"dest":"Dh99uW8jSNRBiRQ4JEMpGmJYvzmF35E6ibnmAAf7tbk8"},"metadata":{"digest":"2dce61e98838e65cd7c303adc248c8fabeab4ecc0492f16572521b2f1939c975","from":"HfXThVwhJB4o1Q1Fjr4yrC","reqId":1518719769599617},"type":"0"},"txnMetadata":{"seqNo":14,"txnTime":1518719769},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"SPdfHq6rGcySFVjDX4iyCo","value":"2xLQwrn2jvg6XZcXGuW6AQ3PKiSHPNAdaHM6CVb8iwDA15HHoPUSi2PGkFvUyFya82QiCA22Y11NDX4Yh4Kx7DqR"}]},"txn":{"data":{"data":{"alias":"virginia","blskey":"372y1y4t9JdTtkyA4C5ANi88YGGaBtSpWd1FL6TJawxn1gnkebpztpsiN5AjTkwARMsTZWX8VyBZ3UGhPd7grmVgoBogTBf1LyvpnmVJR2p9TC26fDFz9GFhynAcPfHQ3xLvVjSyAYH8JjEHRS2yMXxhq8gZCTy494shNXP1wKCD8Ny"},"dest":"EoGRm7eRADtHJRThMCrBXMUM2FpPRML19tNxDAG8YTP8"},"metadata":{"digest":"113c1a81394cbadc48d57aef9d9eb93722f318d01261ed3dc162d8e0f527e37a","from":"SPdfHq6rGcySFVjDX4iyCo","reqId":1518719862981841},"type":"0"},"txnMetadata":{"seqNo":15,"txnTime":1518719863},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"A3h7JbvErKPCfaJx3VNRJ9","value":"4jzEdvJYAKB4vMNMU2VVe4dvGwT2fy28WPuvZipVEqf6R7qkuDWBXLYLBSzGAkUErtRKUnb7KH2eSrZSEgHRozTx"}]},"txn":{"data":{"data":{"alias":"ibm","blskey":"Wv1XfnPWngRPQNQnnaMsewidNtc6Rc2mx842q5ApKTgUdUs2YBZZFgSw4TdWa8HVMZvptiukdooXhTimEwxw9dFQRK5faYb2LBdeRZ6RR2kXz39a6vjyG71arL7Q6FnetH6N2NMFBACdu1PBUYKWAyBn5K8ZUUGgt2YhmZJ9DnieLa","client_ip":"169.60.5.114","client_port":9702,"node_ip":"169.60.5.114","node_port":9701,"services":["VALIDATOR"]},"dest":"Eq7m7GMFKPeq5Ek3HH1PkHxzZ46R9VL1Eube3U9wfjp5"},"metadata":{"digest":"a1dfd555da4085210b53245a199a7d431f4a6328e8936050ec3dc794fe5a2b07","from":"A3h7JbvErKPCfaJx3VNRJ9","reqId":1518798036389445},"type":"0"},"txnMetadata":{"seqNo":16,"txnTime":1518798036},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TnxHS11bsfWrzzi612R2X8","value":"5tHfCPQfV2XAqo7V42akRqmtDqmbX4HUMAZSy9xKz6vERMSDFHmraW4ZEK9hUacjiRthn7P5KuLmopu1mCLwWXhq"}]},"txn":{"data":{"data":{"alias":"RFCU","blskey":"3FuY8wqmBi2XxL4EtJDo3Lhad48QN5ZbhH4kEV3Kfkeb53x94qmWfRndZQJo91M3aWtYpZaZqDaqrQMpuEcAvh8g9hLmb9BWbhK6BVvACSJ2RUiDhBRp4NPkg93tNmQjkdzWoUznFZvbPTTBPBcsmngTake7Sm4YLf1tbd8vuF7Nqkd","client_ip":"207.108.62.234","client_port":9702,"node_ip":"207.108.62.234","node_port":9701,"services":["VALIDATOR"]},"dest":"2B8bkZX3SvcBq3amP7aeATsSPz82RyyCJQbEjZpLgZLh"},"metadata":{"digest":"54d0fb8b9ebc2167d16f9d2027b49917fb484ec6e33caad48bf1516ba27460af","from":"TnxHS11bsfWrzzi612R2X8","reqId":1518798718080714},"type":"0"},"txnMetadata":{"seqNo":17,"txnTime":1518798718},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"ApndPYajjcdTnpvopThGwh","value":"5eyGhLmKmJx5SzkqmS5LD4s4rkQHDAeGh7PmZKhTNJ8MxdbSaZEGjVj4XYD37GeGTepfLwmivJDJjfYaDQGV7aoi"}]},"txn":{"data":{"data":{"alias":"pcValidator01","blskey":"3NU2sWYG7eeJY66W1FGpLgLaDS9fDQfKMNgPGMCk9iTcatMd4XdmAF5UqULkLUpGWABftNTrRsgm82DpfJ1cTu7CTB84KYoW4SYf7Rq4a2wi6rVbmU6k76ZYgmny6h8vqBbdRwozxVTjkPyzV6Z5MSA3vrDdf31iiiPEcXTTT3oFhKC","client_ip":"52.175.254.49","client_port":9799,"node_ip":"52.175.254.49","node_port":9701,"services":["VALIDATOR"]},"dest":"5fKwygs8KEGoUPGa65qz1oCm7h6Fb7HrML9r4jmZ9cic"},"metadata":{"digest":"9dd9cd0dc1ee21694c798c41e80922afd44e70b4e067b2c9c3582c929248ee74","from":"ApndPYajjcdTnpvopThGwh","reqId":1518809271040696},"type":"0"},"txnMetadata":{"seqNo":18,"txnTime":1518809270},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"G4zXq8L7L8n73WKSVv2HxY","value":"Yyd84xQCFWTQovZjUFohaXp3UhXdHX4wj25CGnpvcQs9LKE37DRj4DWvh2RkJALeBLtPZJsXwzKyuivPxLA8QVj"}]},"txn":{"data":{"data":{"alias":"NewtonD","blskey":"36fw9Bz4tLCkzZhUQdA2N51AZWCF6sdyiDuAX7WuNsqeq3C2dCzvS9GeSxt9t1BWxtHWc2GJDVBcqZKGh7Tg2eoQa1KTPhPFRdShBhYPDfP85gKKshHa5aEdLBvTsUkADaDoyFv4rhqTLDFbdcu4WsQE59pxyj3QTSAURgRhxkcm2oJ","client_ip":"52.165.40.82","client_port":9701,"node_ip":"40.69.165.222","node_port":9777,"services":["VALIDATOR"]},"dest":"HU8AkmtsqvcfEtvdWAZgZZFfvKYH8vu2YdgkkHrmNDGP"},"metadata":{"digest":"e0afed7d71f511362c2b21cb90c0b68fc1cb176e233d147a267375350133a6b6","from":"G4zXq8L7L8n73WKSVv2HxY","reqId":1519949508036643},"type":"0"},"txnMetadata":{"seqNo":19,"txnTime":1519949508},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"EKvw1VdXwS2pWKLLyBLCDs","value":"DqCfNstgx5q8gaM57b6qUooHCuhFFqqs7H995UDSBARoD7LWn6gaqJAmcz56NMUmtiWSqpqreBFxwPMr66xPj2Z"}]},"txn":{"data":{"data":{"alias":"Aalto","blskey":"emFqQUM4yqEWdhbk8KzLry6okMk5MsQUoR922BdBS8KBFxNAofPPDzDSR6pwu8ytZVVrfWGbVBs3D6WDt8dZAQY1xYJoAax7pt9Bkgen5Tc2BM5dLhuHpDwRLAmXFFxQbTxArAKidQeeB9wBJbScbbVnWjNNiYPreaZjgFXUGoWjSS","client_ip":"130.233.224.231","client_port":9702,"node_ip":"130.233.224.231","node_port":9701,"services":["VALIDATOR"]},"dest":"7JYQmTE6mBxa5RAZwXAj4bxqetAy64tcEUShqzJjLRrE"},"metadata":{"digest":"5c717908d4b75e92767cca818ac7530789c765c08207eec38cd18eff93b76502","from":"EKvw1VdXwS2pWKLLyBLCDs","reqId":1520418048198552},"type":"0"},"txnMetadata":{"seqNo":20,"txnTime":1520418048},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"Qm7Ugni6jFRpfbPkzhXzXH","value":"jAGG7yFmyLXRGUS2yqoNikvCGWhWeS9eFRyb5vfzu9ZjuAqbiyL4SfNv8NpMAs9Bsda5Y9kZfg9wrW8GufX8NNN"}]},"txn":{"data":{"data":{"alias":"Stuard","blskey":"4Yry2Z17vf1Hf24HvRrduj3Zi5LBJ1x7PbDqNWX19RxHcYJVjpy2f9qriZk7Fx812Xip6LEhsEXWRB1qKujBwdLNbCvMFYnJK2kS2B9HNgDgbVwDbpw16QNuJMtUnvQv1B6vCmci96gypYWMvZmJ6p9qsPXA7CZ2ZSjRuLg3RqvD7y4","client_ip":"10.0.0.10","client_port":9702,"node_ip":"10.0.0.10","node_port":9701,"services":["VALIDATOR"]},"dest":"C4e4rEwPZ4bM341VEL9ysnAgBiMW42RH3UmbriPuzoCb"},"metadata":{"digest":"70d1ed111dd5fec2e46378152f0e8ed5a99728e06288f721fad337b8ba9bae3c","from":"Qm7Ugni6jFRpfbPkzhXzXH","reqId":1521022519350930},"type":"0"},"txnMetadata":{"seqNo":21,"txnTime":1521022519},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"Qm7Ugni6jFRpfbPkzhXzXH","value":"5yKYfGouHn494CtFhEMLYYuWHC9rPhsUWBpXLneJT8jt869rjVxeab9iABYS2Uq55Avjwtd25Xfvyru57HwQMfZb"}]},"txn":{"data":{"data":{"alias":"Stuard","blskey":"4Yry2Z17vf1Hf24HvRrduj3Zi5LBJ1x7PbDqNWX19RxHcYJVjpy2f9qriZk7Fx812Xip6LEhsEXWRB1qKujBwdLNbCvMFYnJK2kS2B9HNgDgbVwDbpw16QNuJMtUnvQv1B6vCmci96gypYWMvZmJ6p9qsPXA7CZ2ZSjRuLg3RqvD7y4","client_ip":"185.27.183.66","client_port":9702,"node_ip":"185.27.183.66","node_port":9701,"services":["VALIDATOR"]},"dest":"C4e4rEwPZ4bM341VEL9ysnAgBiMW42RH3UmbriPuzoCb"},"metadata":{"digest":"0c7f5c756b286dcf1c769cec7a3d5cfeaf57c38ac25e4a83e9d37b417b20774c","from":"Qm7Ugni6jFRpfbPkzhXzXH","reqId":1521070797707610},"type":"0"},"txnMetadata":{"seqNo":22,"txnTime":1521070797},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"FzUUYiVKCDnSWd77NHfhpZ","value":"3Q3ijuEPihRyGsZFvmb414AWWQ7iMskCHoP7bC14FgPesNdPNY3pdfddEfPf5FrCg4wzdvdAFjKaBunHHwXCG4V3"}]},"txn":{"data":{"data":{"alias":"TNO","blskey":"37d7DmcwGWM7yfnpwLGzwVy6zZwoc6cAgeeSJFBWbVh6jq5tP8dPf7s2XDxxtWafmr1JdyzycBcNztEsE8Uf9qX2jRoXzhCnjEEYJCAByEn5hWC2VQ9EqkuKzq28Vob7Piof7rEJeUPxuBZtrXL1khyTN2waQtix6CYtv9QejNPZVJ2","client_ip":"134.221.127.143","client_port":9702,"node_ip":"134.221.127.143","node_port":9701,"services":["VALIDATOR"]},"dest":"TZxmZoXwNk1X5o48pXqbDFz6mTJT5QkiRme9z5p86KQ"},"metadata":{"digest":"0f3b44855c6f562b17321efe51f00edab1cdbe8608c667669e8085430fa32cc5","from":"FzUUYiVKCDnSWd77NHfhpZ","reqId":1521195244613677},"type":"0"},"txnMetadata":{"seqNo":23,"txnTime":1521195244},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"3jN1g2dAPKx5giEKnc5k9GiYHBw5yFZD8D8GiuFBL7wuHUDabobCeCCDezboxqkCpHSLsVE5hDzq6RQWUKwHXwv1"}]},"txn":{"data":{"data":{"alias":"Stuard","services":[]},"dest":"C4e4rEwPZ4bM341VEL9ysnAgBiMW42RH3UmbriPuzoCb"},"metadata":{"digest":"f24b5dda0fe64addafbbdd67aa2be5731064d6c6215d56e883e67009df0ce0d8","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1521760233710703},"type":"0"},"txnMetadata":{"seqNo":24,"txnTime":1521761250},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5omTkQAe1LmYQfY4PdYf3YEjVM1jBs2Qr8x8LAhghD3ymeudEvm1dyk3nQtEtNzFvAeGhnajWMA862DWM4Hg51vv"}]},"txn":{"data":{"data":{"alias":"Aalto","services":[]},"dest":"7JYQmTE6mBxa5RAZwXAj4bxqetAy64tcEUShqzJjLRrE"},"metadata":{"digest":"f526af4c7569c941f69f1fb2dc3ad6ef98bdef2aa2aceca33d43dc92900d65bb","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1521822633807532},"type":"0"},"txnMetadata":{"seqNo":25,"txnTime":1521822633},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"4YtbkvnTMfMA6d9FjkjBcueFGq5PnLoHFKn8HAGiLKxcob2QM6KsdwLRapQcbtn9N33NimyeFzrHCerzAcbS8fVq"}]},"txn":{"data":{"data":{"alias":"pcValidator01","services":[]},"dest":"5fKwygs8KEGoUPGa65qz1oCm7h6Fb7HrML9r4jmZ9cic"},"metadata":{"digest":"f0986bab87b08031cfaeb58a06e27e8c1214f4c20af0e26c709c1c3970c0b241","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1521825598199425},"type":"0"},"txnMetadata":{"seqNo":26,"txnTime":1521825598},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"G4zXq8L7L8n73WKSVv2HxY","value":"5kkkxWBUmYYcrFSKQcgaAEhcsiwJft74Js5VpwBzL1ssfFJRJgDdjhW27hZRCao994DW5b17Xgw6UqSyBLP7UmyD"}]},"txn":{"data":{"data":{"alias":"NewtonD","services":[]},"dest":"HU8AkmtsqvcfEtvdWAZgZZFfvKYH8vu2YdgkkHrmNDGP"},"metadata":{"digest":"e2d73bb8154e3372fa0c8d57c1383c2b4710308198a76580f15ce2c3ffd5f204","from":"G4zXq8L7L8n73WKSVv2HxY","reqId":1521831913747645},"type":"0"},"txnMetadata":{"seqNo":27,"txnTime":1521831913},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"G4zXq8L7L8n73WKSVv2HxY","value":"4L9AFEy3gdV1KNHsuG4gWSuETzTmJ2aD5TzSdWiQCm13o6GfNAY8YoemyiTiwnX8mzxdghgc38CLhEBm3DwfC3Dv"}]},"txn":{"data":{"data":{"alias":"NewtonD","services":["VALIDATOR"]},"dest":"HU8AkmtsqvcfEtvdWAZgZZFfvKYH8vu2YdgkkHrmNDGP"},"metadata":{"digest":"d83f3622a59d8fe15448389a185752add786de3eaf0cabfc17cea86dc503c2a5","from":"G4zXq8L7L8n73WKSVv2HxY","reqId":1521833231516195},"type":"0"},"txnMetadata":{"seqNo":28,"txnTime":1521833231},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"xzjjfKfJJJeQxZb5WhMYyHDcDG5dZCAvsYmBh6FtP9J1ckQUazaJ7AC2ksHzjARW9kkcFBS4B1M4R7y5Bc3BN5S"}]},"txn":{"data":{"data":{"alias":"TNO","services":[]},"dest":"TZxmZoXwNk1X5o48pXqbDFz6mTJT5QkiRme9z5p86KQ"},"metadata":{"digest":"03c5763b3be5b2c53be3f2af041071bdb2f2aa08754adbdcebbcbbe055036cd6","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1522073964061797},"type":"0"},"txnMetadata":{"seqNo":29,"txnTime":1522073964},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"nm4hZxHEb86rDjHddyuFgnuy7hS7bf1Biifnje3c75Kgn1eQ5frc9xwVWFUzZNFntfVckXQK3U97wRiiP7MrijK"}]},"txn":{"data":{"data":{"alias":"NewtonD","services":[]},"dest":"HU8AkmtsqvcfEtvdWAZgZZFfvKYH8vu2YdgkkHrmNDGP"},"metadata":{"digest":"a81744dd61919ea58d75904a8d6921be18362cecb174e3d5f318384c99d912c2","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1523554207793968},"type":"0"},"txnMetadata":{"seqNo":30,"txnTime":1523554207},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"LKjUWXR3QpGsMkgB2XFyzt","value":"671v9pVTeRwN4XybdY5tjGyJZCNhGPFq3bcBxymCGJ18EQbBdDa6LXGh3brvWQ53yncspYbywrgC7eGknnqYR2GB"}]},"txn":{"data":{"data":{"alias":"VeridiumIDC","blskey":"2HhwAzNXb6qrptphzJKiAYqGtE6dNNcK8Q33EJU8hNnAhvjC4X1Bk65MbgvPMpn4rP9HZAH78StG12HfU6VyLd6JBbp6gkgwvtXUK1QefTEGcRipj3XnVJ7tjU8KzxWqaZQW5exJQQQhmedCKZphKvvnb2wuVcoBVS3Ad3ZLm2d4apo","client_ip":"18.197.183.58","client_port":9702,"node_ip":"18.197.183.58","node_port":9701,"services":["VALIDATOR"]},"dest":"58uCeMaEiMHSi8MdEdcgVbpmzMKmiLSYCEz1vxPGJND6"},"metadata":{"digest":"64a71eb01fc9becdbea811aa449d9a588c22b47e7d7434b4dae437bf8153303f","from":"LKjUWXR3QpGsMkgB2XFyzt","reqId":1524737343827561},"type":"0"},"txnMetadata":{"seqNo":31,"txnTime":1524737343},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"RtMtkBrkHCEDtGXXqRfGoV","value":"3ontWhK6hYCpGx8DgirvihSqDarZUTQ3NacwtC4okP2BNpF1xp6tzjnx6iigt8kgaRSGPacXL93AHVXeS6fvQ41t"}]},"txn":{"data":{"data":{"alias":"oregon","blskey":"2bQaqiLhyAEJh6t1xhC3jKk5PRc7v8AsEH9dxSjgVvBqwrmoiDKfSmJKBXA9kCT1uQkpaGeYyP4bkb3RA1ABYebqcswkjdVUGRZYqyxasdBD2phUbNm6WNaGtyRkhJ265KZ7YP8QaDS3NCwTXT7b8vMNmaTL8Kd1Buvaq7gS3ZLJXU6","client_ip":"18.236.138.206","client_port":9702,"node_ip":"18.236.138.206","node_port":9701,"services":["VALIDATOR"]},"dest":"4wdqCSyPeiqCbQhjsbP9Xjasm7vuU7ithawkpuoBXCBM"},"metadata":{"digest":"add1f55e950e2411deecd700285802fd154fc68668e2020df9e97cad47d79491","from":"RtMtkBrkHCEDtGXXqRfGoV","reqId":1524852414943816},"type":"0"},"txnMetadata":{"seqNo":32,"txnTime":1524852415},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"2XCnRcUZJH2JEzotFHTqin","value":"5g4zsXjPumLMTVb8rCYoALeERtgue7qq6uda1vxA2wywZc5VDLBmrJbguwMztdXLCJQKg3qbu8bcYdJUERNdX1Bq"}]},"txn":{"data":{"data":{"alias":"findentity","blskey":"4jBpQMFjEabdTHArLHAbidwcaR5o7p4fAuYbfxrtypZtDbsDACj5mZRFVvkXy5F84g7ni6yNMfL5JV1E3qXYsg3fw33Jd3MTRyAGrZZmN3zNEq6WDNT8XQsaDasDUebJaTEmRWVKMZc8BbeipCPBjym2NvfAQyib1ywZZ5B8d7m5XXH","client_ip":"172.31.28.111","client_port":9799,"node_ip":"172.31.46.137","node_port":9700,"services":["VALIDATOR"]},"dest":"5bQhBNkoFKCFAtCxe1vcXBoq6FsnJ3nWKYwUfyVS3129"},"metadata":{"digest":"dcdd47c5bcffd8aeee8b281ed78b57eef5e3ba617f905885c0c7b356f07ab00a","from":"2XCnRcUZJH2JEzotFHTqin","reqId":1525741289118866},"type":"0"},"txnMetadata":{"seqNo":33,"txnTime":1525741289},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"2XCnRcUZJH2JEzotFHTqin","value":"4wTCrfhT5wzBLpEkadt2UP21kPxiPJPWoKUKs3VSGAsi2427aJbTzPMFokSpPukfEHqMikGCeXP95kPZ5eRKazBy"}]},"txn":{"data":{"data":{"alias":"findentity","blskey":"4jBpQMFjEabdTHArLHAbidwcaR5o7p4fAuYbfxrtypZtDbsDACj5mZRFVvkXy5F84g7ni6yNMfL5JV1E3qXYsg3fw33Jd3MTRyAGrZZmN3zNEq6WDNT8XQsaDasDUebJaTEmRWVKMZc8BbeipCPBjym2NvfAQyib1ywZZ5B8d7m5XXH","client_ip":"34.211.203.16","client_port":9799,"node_ip":"34.218.164.50","node_port":9700,"services":["VALIDATOR"]},"dest":"5bQhBNkoFKCFAtCxe1vcXBoq6FsnJ3nWKYwUfyVS3129"},"metadata":{"digest":"0581a913d81b117dc6f5eb67e6faf734f838a9d6dd2f2a550edb620940ed522c","from":"2XCnRcUZJH2JEzotFHTqin","reqId":1525799946176362},"type":"0"},"txnMetadata":{"seqNo":34,"txnTime":1525799946},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"RtMtkBrkHCEDtGXXqRfGoV","value":"2EQyW1W3EVq9Qkr6Dnk1baDeE8vPcDxgPoZdKkxnKYWLdi27NLvzjziUZ2Ckeuw4MqhDdBeafW36DMQo4fDzkjBT"}]},"txn":{"data":{"data":{"alias":"oregon","services":[]},"dest":"4wdqCSyPeiqCbQhjsbP9Xjasm7vuU7ithawkpuoBXCBM"},"metadata":{"digest":"cb346aa8a0234819aa63b5c63cf7928fbbc171f1b3c00e345c24fa3f4f1e9636","from":"RtMtkBrkHCEDtGXXqRfGoV","reqId":1526508235374190101},"type":"0"},"txnMetadata":{"seqNo":35,"txnTime":1526508235},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"YHTFcv8P93i35osabNm99n","value":"2X7YznzieZ1Kc6nzWawdQHG5Z8jV8vNiwHq5BBLn8rY6SGXQCSZhichDp5V7n9he64BKoYxU6YLHuNM2DLSsEvmG"}]},"txn":{"data":{"data":{"alias":"amihan-sovrin","blskey":"14Kn3VBKja9pDCUgoVpMzf4c9rXJpvDsaHrnXkB9WtvNMHPihinjiXUNNuKdVuYiai3iTDe7mjH5o2UjfoKyApdjEgGCKqgDKpH6uzH4ZcUekR5pfe4wC172X5tiBQFScm8Ti1VmqTnUdfvGi4rV4NpBGytPMkZE1qhL1WSDCoi8riW","client_ip":"35.187.226.254","client_port":9702,"node_ip":"35.197.150.130","node_port":9701,"services":["VALIDATOR"]},"dest":"2FZAgVmRC87ZbJXSh6seFi6n7AMfBo9HaCh8HseHi37U"},"metadata":{"digest":"2986a38eaa64cee8ebfa7e5184bc98949a57555bef663ab125f83603371d6591","from":"YHTFcv8P93i35osabNm99n","reqId":1528165772663287},"type":"0"},"txnMetadata":{"seqNo":36,"txnTime":1528165772},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5kJFNauix1UPNtii8g8ahpfmEyJaoAPnFXdeSpJ9Ge3GaaLhWM3Hmr9N8ACdf6Wrs8Yg1pkXLRwmBTuDSvJDe3A"}]},"txn":{"data":{"data":{"alias":"ibm","services":[]},"dest":"Eq7m7GMFKPeq5Ek3HH1PkHxzZ46R9VL1Eube3U9wfjp5"},"metadata":{"digest":"ecd93c53a03d0da0e011973c7c4312e4b5426390930247aa48aca2b70550c2be","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1528236888174137},"type":"0"},"txnMetadata":{"seqNo":37,"txnTime":1528236888},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"PRCWCTWYwGJB7rczzTqBBB","value":"5nJ3vmmFxC1qHjvSWFHLvhqyRtEmxo4Z2SMpuS2U5snEShd1ZMP22eDyd1nDgPJUHRAMuYM519eMoLw4Kj4CqZgf"}]},"txn":{"data":{"data":{"alias":"valNode01","blskey":"24cgjd77KER8uzhxb1c3DbecvrSMQd3nYxBjaJTqLkgBPuAizzoFdXQkdb8LNjgnP27hTHCpLSuatQSE2YYexNXqZDtAUqPMNfsZwAU151kYFfCc6ZWLRzsm4irf4PrS5ZpnSmhT3Ta4c3m12zoTmu3FDxUkJwEBC3ubdNdA8EHcVDz","client_ip":"52.43.138.62","client_port":9702,"node_ip":"52.43.138.62","node_port":9701,"services":["VALIDATOR"]},"dest":"AYQcyJvowniMsxU9P93yzyAPCFUxg7hm1xsXitFoBr6z"},"metadata":{"digest":"5b05dceab82e7288a1003793f0b4ff642284a021b3c5746b5d799b116068428e","from":"PRCWCTWYwGJB7rczzTqBBB","reqId":1528316277953334},"type":"0"},"txnMetadata":{"seqNo":38,"txnTime":1528316278},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"PRCWCTWYwGJB7rczzTqBBB","value":"4FHNA9VCJHMNUssRyaQYFsn6SVQdSddSg2BxRDFp1aurDAMY4o925WCGmoYLeNwMkf34w6nF5NrNHVhXSmPBZUs3"}]},"txn":{"data":{"data":{"alias":"valNode01","blskey":"24cgjd77KER8uzhxb1c3DbecvrSMQd3nYxBjaJTqLkgBPuAizzoFdXQkdb8LNjgnP27hTHCpLSuatQSE2YYexNXqZDtAUqPMNfsZwAU151kYFfCc6ZWLRzsm4irf4PrS5ZpnSmhT3Ta4c3m12zoTmu3FDxUkJwEBC3ubdNdA8EHcVDz","client_ip":"54.214.176.123","client_port":9702,"node_ip":"54.214.176.123","node_port":9701,"services":["VALIDATOR"]},"dest":"AYQcyJvowniMsxU9P93yzyAPCFUxg7hm1xsXitFoBr6z"},"metadata":{"digest":"b2a209bb10c902c01167e24e7f876ea2359356d43772f37cddefe42f5adf8c58","from":"PRCWCTWYwGJB7rczzTqBBB","reqId":1532033264248749},"type":"0"},"txnMetadata":{"seqNo":39,"txnTime":1532033227},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"tkPNgpHinWAPXvkbvnphC54pauknphTCMF5gzG5AHT1EUHJGS3bQnDi7UKNEYKAjujExWYJAHtM5iydk26yatBK"}]},"txn":{"data":{"data":{"alias":"valNode01","services":[]},"dest":"AYQcyJvowniMsxU9P93yzyAPCFUxg7hm1xsXitFoBr6z"},"metadata":{"digest":"a8eebd86b4cc9aa422f1fc3e6950def9498e7f51b1d9a720ba68413e53ccfbe9","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1532035631471362345},"type":"0"},"txnMetadata":{"seqNo":40,"txnTime":1532035631},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"Psfx4mLS23gBvZDoWz336H","value":"5VVAPQH1LaZmJ4XG1kKxnmUXawg9nTVc1kwULndbFR9yk19mT3vaM9DES342cBYmrpXuY8zQwsXHk4kSoBqZvezi"}]},"txn":{"data":{"data":{"alias":"trustscience-validator01","blskey":"2ToF3Pfb78JQ3pFs6mYxtofDnHLTBLP2RKCDfn6eVngN4zh4UiHvz9DuUS2dfTpAeZLqBDkKuU9pYRazeDN9fqWgzk6kgZYf8jeWgra7rk33ZbZjHFz1zQjNMk3eju5n9JNY4AFbUcXCTWCdFoSXF9fEySKuNANPqtFNz92H2VjrySF","client_ip":"54.214.176.123","client_port":9702,"node_ip":"54.214.176.123","node_port":9701,"services":["VALIDATOR"]},"dest":"8Tqj57DbizpjWQCHvybtKNqKFgfw2bjJbPZrhHDoRoND"},"metadata":{"digest":"d2612092e47da9a0bfb8c9367d0149927abe50aca98ed127b8cfd9b5975b290b","from":"Psfx4mLS23gBvZDoWz336H","reqId":1532121668250427244},"type":"0"},"txnMetadata":{"seqNo":41,"txnTime":1532121629},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5gVt2TSEFpJHWN3BwMn1YgcURpxtGfijmXjGu6Cf5CXkwTmTp4dhUN5Ue6WFZU7PcKSrKfu8PvroWPHCiP7AsMvL"}]},"txn":{"data":{"data":{"alias":"amihan-sovrin","services":[]},"dest":"2FZAgVmRC87ZbJXSh6seFi6n7AMfBo9HaCh8HseHi37U"},"metadata":{"digest":"4141b470e5def16f7fde7c3ee5efc02f712bc0e5260a59709385417047516736","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1532979260947795461},"type":"0"},"txnMetadata":{"seqNo":42,"txnTime":1532979261},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"4A2vM1MT3vxNdASCpxgYfzNajpYScAipcRoSyUaRkH9dZ4CmfhHjWogS7VF7WLRNXKUssQVG2DdLrUzuFEckaM6e"}]},"txn":{"data":{"data":{"alias":"findentity","services":[]},"dest":"5bQhBNkoFKCFAtCxe1vcXBoq6FsnJ3nWKYwUfyVS3129"},"metadata":{"digest":"06ee3b89112f96f93df9f91554b5f4ada39ef34dbc4dd198ab7bc60e0d2f0c57","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1532979375523513444},"type":"0"},"txnMetadata":{"seqNo":43,"txnTime":1532979375},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5tqAZojtpBxCaTkLvX6Why6MYyofYTUEt8taHxyXRBPrDugsCZjM5aRxEwXak7qNuUJGt2x9LMfVLdB81rk8yR2e"}]},"txn":{"data":{"data":{"alias":"VeridiumIDC","services":[]},"dest":"58uCeMaEiMHSi8MdEdcgVbpmzMKmiLSYCEz1vxPGJND6"},"metadata":{"digest":"aca82cab749e9d722134d46f0891269fcae59b7fd065fb3155dd632e2f740322","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1532979478035983569},"type":"0"},"txnMetadata":{"seqNo":44,"txnTime":1532979478},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"5wXZxmiE9PJaidic57FXGfTWjJCuEidh3FBRWMBjhg47JsBxJvoCVuGi7LMYYd7Wj5AdqLqLUC6oL7hKbEPmKr3b"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","client_ip":"169.61.131.234","client_port":9702,"node_ip":"169.61.131.234","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"ef3b5b33492990611a2d443d579681be95f504f1f82b4e9b6015418a72b5620d","from":"BD95LAmfVrD3JEwaereykM","reqId":1535389152858873},"type":"0"},"txnMetadata":{"seqNo":45,"txnTime":1535389153},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"PRCWCTWYwGJB7rczzTqBBB","value":"2PrAKjgg1itZrkaaa5YipCgtTKyeczeSrm8HfHUfu6n5raMPmHLCkzoYWcaHUYjMpL2LHrnhPhdG6HhCJgRbQgoj"}]},"txn":{"data":{"data":{"alias":"valNode01","blskey":"24cgjd77KER8uzhxb1c3DbecvrSMQd3nYxBjaJTqLkgBPuAizzoFdXQkdb8LNjgnP27hTHCpLSuatQSE2YYexNXqZDtAUqPMNfsZwAU151kYFfCc6ZWLRzsm4irf4PrS5ZpnSmhT3Ta4c3m12zoTmu3FDxUkJwEBC3ubdNdA8EHcVDz","client_ip":"127.0.0.1","client_port":9702,"node_ip":"127.0.0.1","node_port":9701,"services":[]},"dest":"AYQcyJvowniMsxU9P93yzyAPCFUxg7hm1xsXitFoBr6z"},"metadata":{"digest":"7f244345a273550cf1cbeee4a41a5917fe17947c355917c9c2c235de63d3a2e4","from":"PRCWCTWYwGJB7rczzTqBBB","reqId":1537808479067559676},"type":"0"},"txnMetadata":{"seqNo":46,"txnTime":1537808338},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"Psfx4mLS23gBvZDoWz336H","value":"3rywzxRvJAiFsuFmEayMxKxxsJDeLAWYM5t1Jxw4vNt9RAuh5WwcAUmcD1Un6urHMMBadpkxGVMyTHFca4jBAZTc"}]},"txn":{"data":{"data":{"alias":"trustscience-validator01","blskey":"2ToF3Pfb78JQ3pFs6mYxtofDnHLTBLP2RKCDfn6eVngN4zh4UiHvz9DuUS2dfTpAeZLqBDkKuU9pYRazeDN9fqWgzk6kgZYf8jeWgra7rk33ZbZjHFz1zQjNMk3eju5n9JNY4AFbUcXCTWCdFoSXF9fEySKuNANPqtFNz92H2VjrySF","client_ip":"127.0.0.2","client_port":9702,"node_ip":"127.0.0.2","node_port":9701,"services":[]},"dest":"8Tqj57DbizpjWQCHvybtKNqKFgfw2bjJbPZrhHDoRoND"},"metadata":{"digest":"01bea8a952895652f4ff5fed121fbab75fc5bea0cf4a5b905324efa944a5ba97","from":"Psfx4mLS23gBvZDoWz336H","reqId":1537818353199012189},"type":"0"},"txnMetadata":{"seqNo":47,"txnTime":1537818211},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"MHrp2wUhk1quHK9kGCcQtX","value":"4meKCAvuw588qWkDMy1pXvMtt4X6YK4hiQArsxEJ7wrY84JL9ZAN1efBby4BLZvQcE2Lx7kP9mrhsrAdBGXM8hCK"}]},"txn":{"data":{"data":{"alias":"trustscience-validator02","blskey":"2f8SF5UdftJkr19X7TQxtcy7EiP1MLLxnT4sppJuFfuprEKxdtRq2BbkyRF24Xbdd5tfWkf9MsPBs7aWqrNcoCjbL5hsawUmPy7tjWtZLhLgKYtKxfFtPFJETtTLaaUhyrnjNwYa7GoTBYKMdv72ZL1fjZjo3EK6jx3H6fohvSVK98P","client_ip":"54.214.176.123","client_port":9702,"node_ip":"54.214.176.123","node_port":9701,"services":["VALIDATOR"]},"dest":"2p77huA99n3pmj5hxYapzXMrEgATHAoQX2CkxS4TNya7"},"metadata":{"digest":"30ef842e8ccb04aa4051d12d3a565d921892a7f79254398eb9ab3b8ced265ece","from":"MHrp2wUhk1quHK9kGCcQtX","reqId":1537821923451170792},"type":"0"},"txnMetadata":{"seqNo":48,"txnTime":1537821782},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"2Tk12rX3eU93zqCGe5oeAH7WvudtqwLA9cK2Cg2UbirMhEh2YL7oR68SqMZDhvKDyeRtViLwbhNcfoSARGucm7yo"}]},"txn":{"data":{"data":{"alias":"trustscience-validator02","services":[]},"dest":"2p77huA99n3pmj5hxYapzXMrEgATHAoQX2CkxS4TNya7"},"metadata":{"digest":"8cf0e8b8db40d79a7019f1642de1f85764532b5ee7f6cd3a40872d7317632f3d","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1538150155109252223},"type":"0"},"txnMetadata":{"seqNo":49,"txnTime":1538150957},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"QuCBjYx4CbGCiMcoqQg1y","value":"SkAWnEADFvzxgtnWiEYrdZQivjX587hu1rBq1HgzVBubQAS8NaNcj8FEFYWLgtcYj91wdcNnSrx5aCC8nHRpfAH"}]},"txn":{"data":{"data":{"alias":"xsvalidatorec2irl","blskey":"4ge1yEvjdcV6sDSqbevqPRWq72SgkZqLqfavBXC4LxnYh4QHFpHkrwzMNjpVefvhn1cgejHayXTfTE2Fhpu1grZreUajV36T6sT4BiewAisdEw59mjMxkp9teYDYLQqwPUFPgaGKDbFCUBEaNdAP4E8Q4UFiF13Qo5842pAY13mKC23","blskey_pop":"R5PoEfWvni5BKvy7EbUbwFMQrsgcuzuU1ksxfvySH6FC5jpmisvcHMdVNik6LMvAeSdt6K4sTLrqnaaQCf5aCHkeTcQRgDVR7oFYgyZCkF953m4kSwUM9QHzqWZP89C6GkBx6VPuL1RgPahuBHDJHHiK73xLaEJzzFZtZZxwoWYABH","client_ip":"52.50.114.133","client_port":9702,"node_ip":"52.209.6.196","node_port":9701,"services":["VALIDATOR"]},"dest":"DXn8PUYKZZkq8gC7CZ2PqwECzUs2bpxYiA5TWgoYARa7"},"metadata":{"digest":"c1633443684eed4d621235388d23e6adf0264658bed09e26fd9ac41026fa4dde","from":"QuCBjYx4CbGCiMcoqQg1y","reqId":1540910673107959938},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":50,"txnTime":1540910673},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"FzAaV9Waa1DccDa72qwg13","value":"3q94ydPoBiKq7oBjAt5gTrdLDWagXn2GMGBXa1Shpd8FFqg25tXrkYBDvn1a81rN6E3bc9e9gUJwXNg3CZUBNYG6"}]},"txn":{"data":{"data":{"alias":"vnode1","blskey":"t5jtREu8au2dwFwtH6QWopmTGxu6qmJ3iSnk321yLgeu7mHQRXf2ZCBuez8KCAQvFZGqqAoy2FcYvDGCqQxRCz9qXKgiBtykzxjDjYu87JECwwddnktz5UabPfZmfu6EoDn4rFxvd4myPu2hksb5Z9GT6UeoEYi7Ub3yLFQ3xxaQXc","blskey_pop":"QuHB7tiuFBPQ6zPkwHfMtjzWqXJBLACtfggm7zCRHHgdva18VN4tNg7LUU2FfKGQSLZz1M7oRxhhgJkZLL19aGvaHB2MPtnBWK9Hr8LMiwi95UjX3TVXJri4EvPjQ6UUvHrjZGUFvKQphPyVTMZBJwfkpGAGhpbTQuQpEH7f56m1X5","client_ip":"159.89.118.181","client_port":9797,"node_ip":"206.189.143.34","node_port":9797,"services":["VALIDATOR"]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"6815d516eead933d1163295ac5a1b34ef14fc842d5779a4de23847f5d3652f22","from":"FzAaV9Waa1DccDa72qwg13","reqId":1541014309248416875},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":51,"txnTime":1541014309},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"2Vq2bzfip9c3Zo1b5f9ZEffw1bD3jfWtphJd52Gov6opBcewVQWHcS912J251LTmx1YfNydAYWtL2EYQKuS4EXXm"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","blskey":"2j7jqdynFph7cbSwYgKYfzHKsVcQRfYxCU9AdhTAN8gUV8oFrnuPz348zLX8AMiEt85pKGw97FcACcDTJAGABvwCcXFNXNFGTN2U14JkRcg7yNuHFSWWgmdc1aBQJcJA5ZEtPgq2n47W14L3Y23LUv9E2CLViKUKv6nZqfrEeJi7zUE","blskey_pop":"RHxpCSQFv6Xso4JiEyt9jdTm6J3XUCh1SWy4g6hDsVWYqgrJEeLoXaYBBayB7fi6bDbUPuJVbVYPMA4HNA5eRwagc34gr8JhddgJupLxgzowkKkJa1WEm5vDNwqUfH7JihwwEzUPcmNTjnhGiovhRH4v8Mf1uPyzyS5AHsH8qNbrfZ","client_ip":"194.209.53.115","client_port":9777,"node_ip":"194.209.53.116","node_port":9778,"services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"c94bdafaea83c5668ac61ee754f7de174d90015049a539ddc969a165f6abf871","from":"bPTNiLzWPFHKr7mJGaump","reqId":1541412365363342035},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":52,"txnTime":1541412365},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"NUDC81qrSL5kkiwh4ZmUZ4NepE8sNPLtb3Qii41yiBu1kkudhEBct3Y3TtxJetyfhDmJPiSyWBmBUNxisP4L15t"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","blskey":"2j7jqdynFph7cbSwYgKYfzHKsVcQRfYxCU9AdhTAN8gUV8oFrnuPz348zLX8AMiEt85pKGw97FcACcDTJAGABvwCcXFNXNFGTN2U14JkRcg7yNuHFSWWgmdc1aBQJcJA5ZEtPgq2n47W14L3Y23LUv9E2CLViKUKv6nZqfrEeJi7zUE","blskey_pop":"RHxpCSQFv6Xso4JiEyt9jdTm6J3XUCh1SWy4g6hDsVWYqgrJEeLoXaYBBayB7fi6bDbUPuJVbVYPMA4HNA5eRwagc34gr8JhddgJupLxgzowkKkJa1WEm5vDNwqUfH7JihwwEzUPcmNTjnhGiovhRH4v8Mf1uPyzyS5AHsH8qNbrfZ","client_ip":"194.209.53.116","client_port":9778,"node_ip":"194.209.53.115","node_port":9777,"services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"f7e6c28166e69edb0468869fed131fbca344db0943f020cfb8e0137703401922","from":"bPTNiLzWPFHKr7mJGaump","reqId":1541432813752945620},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":53,"txnTime":1541432814},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5UzHhjZMh4N3w6zSK22RTzb6qFpLijjRgDkCT4XxnJYPYrW7erByfJf2FLkmR4LcdSDrSw4hkFuoH5dkPXpfFZzo"}]},"txn":{"data":{"data":{"alias":"xsvalidatorec2irl","services":[]},"dest":"DXn8PUYKZZkq8gC7CZ2PqwECzUs2bpxYiA5TWgoYARa7"},"metadata":{"digest":"ecdfec24f95a4ef3590f9024f1ce46fa4d8ef2288048c89f18d16822d34f517a","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1541451340102642933},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":54,"txnTime":1541451340},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"3Ygb9RCqsT3SwxpMx2WWrCk9W9pKCpg9qjQkERhKhZuCeEjc1C2YEnf3KtrkCxEVg1xti4gh5kCW97apU53jXBRa"}]},"txn":{"data":{"data":{"alias":"vnode1","services":[]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"e7190621d62f017add97a35214ffe39c2820600e91eb7738ac1b6be14be7f7d2","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1541451384934782442},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":55,"txnTime":1541451385},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"34p6FetGiBaiF9rste9tU4bxjDa6jMhPr8drGFfWMfcDBeHrwu4mMdZBGq3RPpaD7G3E74EkgVNA65mPvTG7s7om"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"c3ec6df9998e376a2b31a4e8bf2f951eaa9779cbfa5b6eed166501f0c0fff6c7","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1541451415119667684},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":56,"txnTime":1541451415},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"FzAaV9Waa1DccDa72qwg13","value":"2GDovjbZyz2rh3rzFpmgqM9TycCxNhbW5esiYXgnkqj43QWz9dwCY5Jv7fSKdmEKK2EiJBuFKt7W8PZZFKyrMuqZ"}]},"txn":{"data":{"data":{"alias":"vnode1","blskey":"t5jtREu8au2dwFwtH6QWopmTGxu6qmJ3iSnk321yLgeu7mHQRXf2ZCBuez8KCAQvFZGqqAoy2FcYvDGCqQxRCz9qXKgiBtykzxjDjYu87JECwwddnktz5UabPfZmfu6EoDn4rFxvd4myPu2hksb5Z9GT6UeoEYi7Ub3yLFQ3xxaQXc","blskey_pop":"QuHB7tiuFBPQ6zPkwHfMtjzWqXJBLACtfggm7zCRHHgdva18VN4tNg7LUU2FfKGQSLZz1M7oRxhhgJkZLL19aGvaHB2MPtnBWK9Hr8LMiwi95UjX3TVXJri4EvPjQ6UUvHrjZGUFvKQphPyVTMZBJwfkpGAGhpbTQuQpEH7f56m1X5","client_ip":"206.189.143.34","client_port":9796,"node_ip":"206.189.143.34","node_port":9797,"services":["VALIDATOR"]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"bf0cdbb6b134fc10fd7797fa24f4354a9e9d70dbc92570d23267e151299b24b4","from":"FzAaV9Waa1DccDa72qwg13","reqId":1541618294089244398},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":57,"txnTime":1541618294},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"Bt44zXEB8HkNHJ8mSGq8Hap4xq6QBo1YECwDscH8aoKocmE8LpDKs9nAwUxu5qrtRNHfj9n1bSeTAq593BT43T6"}]},"txn":{"data":{"data":{"alias":"xsvalidatorec2irl","services":["VALIDATOR"]},"dest":"DXn8PUYKZZkq8gC7CZ2PqwECzUs2bpxYiA5TWgoYARa7"},"metadata":{"digest":"59a07975ea03cca3db85c06f0e12a7095df449c56326f470aab9a5f473c4b41d","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1541715283104974168},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":58,"txnTime":1541715283},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TK4JebQqeqq5t6x2bCwnD7","value":"MC5fG4DowNdB23vHXydtT4f7n1k6wcyZyPA7m3aVZWYfKVT7bwGKWqzmKWGAr1QNm3dkcL2MLVE11ALQsCcFpEt"}]},"txn":{"data":{"data":{"alias":"NodeTwinPeek","blskey":"Jrbf7k1xgkbhfKAmVXqfLLmFieGrxL1f1H6WRBZVB4Rvh8uCHGVoVzMppygH2XPLK4n1cnaBKe7zYxftgMaYXka1HLaScfsVCGqpkSa7d2hzerpcvPQMvo9TCCTP3jWb6uC9kVUHZkVqVvecMDtRkVqr3ZChUAoTM2e4UGmgqvE3Zk","blskey_pop":"RY3ZXV5WoHWMM631ov7ZMWoTX41Cnah4CrwQnXFrPHt49ajB8b5AjnrSDxCb9JEhC8WLVveuQMH7p6FJfoQHRaG2tR9pQLgLCXvbDozYPin4LwVzV3Wh2LNMorAtJgr3PfqxzUmFNEkbiGAbzMdBS1EXbDya9exgrLkrMLuLG1crLw","client_ip":"178.32.102.66","client_port":9782,"node_ip":"87.98.136.246","node_port":9781,"services":["VALIDATOR"]},"dest":"2bDviHYdDiTjyXYXEW92zQHEf1C1QsbFatJ6uSYuYrHh"},"metadata":{"digest":"0d187610d42d46fc90ab873fa1a43132c35d349083dcbf744cf81191ae4a4760","from":"TK4JebQqeqq5t6x2bCwnD7","reqId":1542035094044574100},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":59,"txnTime":1542035094},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6mTar6XRRgYdhswcnq3ybf","value":"UfJqCMUzcX5CfqGouLMSivJ5qm5SqBdsJwKkV9aZHTsmHS3GwcBAur4aUP9VG43praqiqToCQ1jZiMyUYj7wKEw"}]},"txn":{"data":{"data":{"alias":"lab10","blskey":"2Yf73vj1CJBqibWHZTdL4Seygd53dSb4PKJugpeokVx8HdXwqhuEnk2nFBCYmXmFp4RxGprQuKDfGuxYDhKuBysHSCbbYwvoWaXXHYtxvD67Ytw37fQo9Stvgu5nCDwDWD3M8p7fkUF4UQRMqfa8W1tddWXgFr5NPSB13GrjJFcPgAn","blskey_pop":"RBGAkA3X7w1ADtQeYiVZW76uWdwRTdCwamappXLb3sD2iNvVBaSF1jPANo9K99QBe42kEAbJtbwsi4AoDWrjex6tVTQqiSxeAt2kRJpCZTGHfthHzLEnFtZqqksWeXQPRNzeeRagFRyZAQhPuL7wYMiz3a6CNnbgQL7dbMvNBaQsUs","client_ip":"5.9.17.149","client_port":9702,"node_ip":"5.9.17.149","node_port":9701,"services":["VALIDATOR"]},"dest":"7vruXjaKFp2t1WrsMTcVZuNQtmn35yimDrN7THYwcPof"},"metadata":{"digest":"515a3de1e3b1166208d6e2d5c7c020b9d9b56f5fbfb01e9ac1e2da96a8ebacb1","from":"6mTar6XRRgYdhswcnq3ybf","reqId":1542135182121048577},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":60,"txnTime":1542135183},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"2HaQjM7gQXQi4nL2CHLDAM6PaHXUsgQ6SoyHkncrNHQua5WWbcd6DjsB5gagvTAsyD9728xA3npf6c82GNCFqrd3"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"0e549b9dee11241b4b9605b540b7162a84c8fe0a466e30fc029929debb9f6f5f","from":"bPTNiLzWPFHKr7mJGaump","reqId":1542298164808052701},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":61,"txnTime":1542298165},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"wKcykStr9Mj6jbjHUjzjkQXnkz7K3S9GmjgB2kZ7KrWpNDrS3hWWydguhUzFcjHoxBDazdEBKgnu3WH15ytNrxx"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"93b91ab90788049d62246a754432eb2d5f47c8b20e6f7174d57fd42537749c14","from":"bPTNiLzWPFHKr7mJGaump","reqId":1542299088770647926},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":62,"txnTime":1542299089},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KvGE2tKSDuBXEkRc86dL4T","value":"5dwYyoYZu4LRnhdyRFXt7xEFFw2yT8QE7zVKRkD2XswxgsSY1gdnbPDnqBwoUTyUK7MjzeRjuGDJpeBBcHSmH7Wz"}]},"txn":{"data":{"data":{"alias":"trusted_you","blskey":"4Hf3okFu15E52JuH62AD4gNVyBdqg8mP4xzg6bViuYzA3ujCJpC5xCv2afiAgWq5w6ooxhNo4w88jny5je83HvJXUqc1jQNWApzcRr9Zqfz9ipqP3qJv6j8BZJU5VQPfLLfrGRrNG4UFPwHHqXLxcBfFJFqKuBMr9FeQc5LMP6LKhQr","blskey_pop":"RLK3VsTPH8BvpqjBUD1mn21jffYkZdAzEkxt397HcbpHd6zfXE6DbziXrWgVDdofZkuqUhrd7ecwY7yX3rYL182VxfWhvKTDx8VwrPyand6M2DWtR3c3rUwwqBkLJW5dXP2ZrPMnUrukJ88SXVrf4J23jiy9xFTZLAVZnt2Go582aB","client_ip":"51.140.243.125","client_port":9700,"node_ip":"51.140.220.111","node_port":9750,"services":["VALIDATOR"]},"dest":"7wetNy5AJpHfXvhTx4okZokSw5mcrgWgVZ8jJ3WHgrmd"},"metadata":{"digest":"1e72a8499fe7372eb9b3f7876a4bb965801c9ee611d79611afad3355f9133c9b","from":"KvGE2tKSDuBXEkRc86dL4T","reqId":1542323966510001027},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":63,"txnTime":1542323966},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"2LpmtWWx2ykmxYQ9QZ13PoXrtn77ETbjTrBRDmZULykruGVyDWp6Xn3EyrrNuEZVDxjFGKG1tdbcQKhUHKJn6LHA"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"e6a5bb4cd4189ecc6ae0858a32c7df509e81c181bab5cf4f43e72d480ea0f7a0","from":"bPTNiLzWPFHKr7mJGaump","reqId":1542361064125639673},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":64,"txnTime":1542361064},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"uV9yMB5sfwYNRjXfvbD8eajsW16SEfAxE62QVyX2f9YBkr2BBLed9WHE79Ww5v5ycV5mrduAr7rrYZnCNyNvgvv"}]},"txn":{"data":{"data":{"alias":"trusted_you","services":[]},"dest":"7wetNy5AJpHfXvhTx4okZokSw5mcrgWgVZ8jJ3WHgrmd"},"metadata":{"digest":"a915255c0490bd661652aae007d55c88736a9556a283e9087862db948fc01ab0","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1542394857400361543},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":65,"txnTime":1542394857},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"hywDqQdRthvVDSiUXgMueRW621soWAWgZeRFjyzxpvTMBDhxnc36P8PaWYnHsxXzVds57XAcQ3LKfEjZ1UyqvHJ"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"056b23376851dc03079a1c3fea1ec6a37d60d976cef577cb1534bfa5f37509db","from":"bPTNiLzWPFHKr7mJGaump","reqId":1542638324609009633},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":66,"txnTime":1542638324},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TN7Sx7qF9RSmaDcTiFKWzd","value":"4E1w4F5QcM5PxBYYrbJkTDPNwqNnfE9X1nLPVfbfBwFurF2F74GA6BRcPxVoiWsTRMCeWtgZWzHjYcictzv7B7nk"}]},"txn":{"data":{"data":{"alias":"dativa_validator","blskey":"3bYtYhVodD49a3bTK2bZzTAZqt284tKQ2vgXG2arqUyYJRhYnDouhAaQAM7fctC84NvQRG2p1UwVdcdUZPkau5wdJ6fKWwpGo1mM2firHhYtiSZcCAfAbPQhTSSKnsaMnUzacuPC1e81ytr3cXjPobaAg4jJA637N2MGwUWv665o7ae","blskey_pop":"Qm7nQt5HjnaLSpCobPxAH8JG67J6bstaKop2XCsnBELR8tJNm1BYkqTTsj5HVRwXBkMg2vexNQ51B29cp9tSK3zK7ddbhWh8C4cDHoDQgaCHNz61hQxxYMx37yraFLggPF9WCaUckAn4fFxEvLBMV3EdcBZoTecwGPt2g1WhBDjB3M","client_ip":"52.91.89.252","client_port":9799,"node_ip":"35.174.181.186","node_port":9700,"services":["VALIDATOR"]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"58a1d4e0b24778694973e2ff21eca5b9bba33ffb6d918836e1f76b75d1eab56d","from":"TN7Sx7qF9RSmaDcTiFKWzd","reqId":1542652100358243716},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":67,"txnTime":1542652100},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"sYtD5iKjZF1A9rkkY8E2AeHk4B5y81jWiY2BZEsLYy3s4HNQo9YKy5K6X9k1LbscodpMhC4VL4gZ4L7Y9YgvFBs"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"afa88dd032669c15cf2fb1d7f5d921c2325d2d721b6adffc20df7c8e094d4b91","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1542679993748339893},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":68,"txnTime":1542679994},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TN7Sx7qF9RSmaDcTiFKWzd","value":"CRk8NSxyvawVi7LUhDdLgN22L5ZEqMpW5yUqVd9ri623VujthBNW6RWaQEagEJqzj9LtwWG3cRYMZzZ8tW8PFpf"}]},"txn":{"data":{"data":{"alias":"dativa_validator","blskey":"3bYtYhVodD49a3bTK2bZzTAZqt284tKQ2vgXG2arqUyYJRhYnDouhAaQAM7fctC84NvQRG2p1UwVdcdUZPkau5wdJ6fKWwpGo1mM2firHhYtiSZcCAfAbPQhTSSKnsaMnUzacuPC1e81ytr3cXjPobaAg4jJA637N2MGwUWv665o7ae","blskey_pop":"Qm7nQt5HjnaLSpCobPxAH8JG67J6bstaKop2XCsnBELR8tJNm1BYkqTTsj5HVRwXBkMg2vexNQ51B29cp9tSK3zK7ddbhWh8C4cDHoDQgaCHNz61hQxxYMx37yraFLggPF9WCaUckAn4fFxEvLBMV3EdcBZoTecwGPt2g1WhBDjB3M","client_ip":"35.174.181.186","client_port":9799,"node_ip":"35.174.181.186","node_port":9700,"services":["VALIDATOR"]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"c52795b715a91b80167eecf727e15be08c7ea405b32be84ebded577f2bca7dd3","from":"TN7Sx7qF9RSmaDcTiFKWzd","reqId":1542737602414121779},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":69,"txnTime":1542737602},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KvGE2tKSDuBXEkRc86dL4T","value":"57mY4UHLprb4EdgPpnNBiermToDVqkLzJxso2bbsfo4GXomLHssQqjZrZvS1vgDjLgGGKLFpGZJeaKvXyLk1JUNy"}]},"txn":{"data":{"data":{"alias":"trusted_you","services":["VALIDATOR"]},"dest":"7wetNy5AJpHfXvhTx4okZokSw5mcrgWgVZ8jJ3WHgrmd"},"metadata":{"digest":"00477bfb2052242abbb95063d98b5acd1d3ab76e7d1519734e54b07aad6b9e99","from":"KvGE2tKSDuBXEkRc86dL4T","reqId":1542751929819744539},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":70,"txnTime":1542751929},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KvGE2tKSDuBXEkRc86dL4T","value":"td4qZQbCgAxg5jWNUEj5ySAvjN2W2cdywcpYhwrAcyu5H5EbyuyNXDJXLzgCRuTLoNUcKJY1z6GbrFa1rb3c9yU"}]},"txn":{"data":{"data":{"alias":"trusted_you","services":["VALIDATOR"]},"dest":"7wetNy5AJpHfXvhTx4okZokSw5mcrgWgVZ8jJ3WHgrmd"},"metadata":{"digest":"74436d978077d1b2a7325604b305ba71776432f078ae4f0685cd29780466fccd","from":"KvGE2tKSDuBXEkRc86dL4T","reqId":1542754098893802328},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":71,"txnTime":1542754099},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"2odhsxVn68qbBkYcaUWzFpk4KNtrUSh3QM6duqfGwBWN3CPbBYRFfvcYFiQqYZUazipKsWvqHvDsh27iycAadosq"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"a06031660b32d4a6dff612a466d0dad7f0563ac58ca06b2bd11c0f767e0ea25e","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1542820256271098712},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":72,"txnTime":1542820256},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TN7Sx7qF9RSmaDcTiFKWzd","value":"8ubefkYZGbM2F9KeYYhGowKLi27dhss6S8bp8MiirdicFdCZ4PA5qGejbkQhuDfbbRkfxS8ZzreRAg56rkVE5vK"}]},"txn":{"data":{"data":{"alias":"dativa_validator","blskey":"3bYtYhVodD49a3bTK2bZzTAZqt284tKQ2vgXG2arqUyYJRhYnDouhAaQAM7fctC84NvQRG2p1UwVdcdUZPkau5wdJ6fKWwpGo1mM2firHhYtiSZcCAfAbPQhTSSKnsaMnUzacuPC1e81ytr3cXjPobaAg4jJA637N2MGwUWv665o7ae","blskey_pop":"Qm7nQt5HjnaLSpCobPxAH8JG67J6bstaKop2XCsnBELR8tJNm1BYkqTTsj5HVRwXBkMg2vexNQ51B29cp9tSK3zK7ddbhWh8C4cDHoDQgaCHNz61hQxxYMx37yraFLggPF9WCaUckAn4fFxEvLBMV3EdcBZoTecwGPt2g1WhBDjB3M","client_ip":"52.91.89.252","client_port":9799,"node_ip":"35.174.181.186","node_port":9700,"services":["VALIDATOR"]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"62a7363b27f1e10c215c8ac44b0a6d737fd60ad14c4357c6c954d90283f21aab","from":"TN7Sx7qF9RSmaDcTiFKWzd","reqId":1542651103246022659},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":73,"txnTime":1542820263},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5UWP2RqYa8zdejirm5hA7myhrr59jzik9koEjyosJ6U3uHU1ySrKnRsogkXb91sFb6t9Rs9XS7yF6r9wLgW2tQLR"}]},"txn":{"data":{"data":{"alias":"dativa_validator","services":[]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"a6c82dd6a170a73014ce079ce53bcf505bfbee47363a3ea88097cd58f1d38030","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1543358290828986263},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":74,"txnTime":1543359213},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"SYQLd1z2fd6BCcSHsraFbU","value":"5ohoJwSwPD3pGuXhMdvEcYUK3rPPa3HT5SyAgbd4SmHmA1Tgf5zdHef9mNDwR7AKEEgEkUGKNzjAKGTots5oeanF"}]},"txn":{"data":{"data":{"alias":"SovrinNode","blskey":"4ATbikmEcsPinBFgzWk3zKr1HPBg2Qyh4B6dEkR3U8oSauZGJakaHZMDx9LhrmajC5MdSURcLHJig8jqAAvJSkjk2kbpW9m97oWo8jPNw6cDv3bLxmhnkteCrfVvPokbeL4WyFbGZx5VLLrmtzsxodHrEhm6jkZcAhxcA29EzFPKm31","blskey_pop":"RYPJaQyeF6Xjk8jVDbF4gpKdRajTyhDG6VjZeWg93QEMDsWKmTu6CMFQ9SSf4Ao58jySP2Z1LSgKjvW6uJuVm5ZA29Rsdpv7i5y9XktMw14Pa4XH2YJWbpqvZZgteYBbUsFReF3FiSmaHX3JBo7WGWoVmLATxvSxBtPfKKTB2f3KtT","client_ip":"3.16.198.41","client_port":9702,"node_ip":"3.17.50.10","node_port":9701,"services":["VALIDATOR"]},"dest":"GfczFDBo6wCK7bwZA2dtTmEf5xGzZEDeELMP34bS9y1B"},"metadata":{"digest":"2d22f985e30f12bbd0af7dc89be3b82d7254762a212ea865a570063be3a9190c","from":"SYQLd1z2fd6BCcSHsraFbU","reqId":1543447274763531000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":75,"txnTime":1543447275},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"4NFboPNaWijRoMcgQkQFivTjjXaBeDzhQAa93MbAfHp8myBJ1fGnnrnLfyoBMQA1wZhSiAXyeuMiiG8rRhVjbNam"}]},"txn":{"data":{"data":{"alias":"dativa_validator","services":["VALIDATOR"]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"71434b20259474ab9aee98e999a0818e8ac2872043cf5ae9945b307431ce6fbc","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1543513967433499896},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":76,"txnTime":1543513967},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TN7Sx7qF9RSmaDcTiFKWzd","value":"qJLHVvfJiNEexfo7rwxXuNGqhhas1CFY5hxQBrh21dn6oEybkFy41pNVvhU2Qb4eW3j5VyBE65nnFqYi8k6JRRZ"}]},"txn":{"data":{"data":{"alias":"dativa_validator","blskey":"3bYtYhVodD49a3bTK2bZzTAZqt284tKQ2vgXG2arqUyYJRhYnDouhAaQAM7fctC84NvQRG2p1UwVdcdUZPkau5wdJ6fKWwpGo1mM2firHhYtiSZcCAfAbPQhTSSKnsaMnUzacuPC1e81ytr3cXjPobaAg4jJA637N2MGwUWv665o7ae","blskey_pop":"Qm7nQt5HjnaLSpCobPxAH8JG67J6bstaKop2XCsnBELR8tJNm1BYkqTTsj5HVRwXBkMg2vexNQ51B29cp9tSK3zK7ddbhWh8C4cDHoDQgaCHNz61hQxxYMx37yraFLggPF9WCaUckAn4fFxEvLBMV3EdcBZoTecwGPt2g1WhBDjB3M","client_ip":"100.24.186.243","client_port":9799,"node_ip":"35.174.181.186","node_port":9700,"services":["VALIDATOR"]},"dest":"F15n4nPZcnzDJJMNSZK8yNaeodi1PjZyDs83r4KC75hy"},"metadata":{"digest":"47ef7d8fa8fe23a6609710042b27ed83e8ee4520e7c51698ee04419c7b7b0daa","from":"TN7Sx7qF9RSmaDcTiFKWzd","reqId":1543514771626991925},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":77,"txnTime":1543514771},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"326qebvjJFB9dBhhM26n6nqRm1DrjDATdY8JR8r6Wr4snfrmBpasSZATrUarQzAzu3AdZia67zwQsmoepwfRRo7y"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.138","client_port":9702,"node_ip":"169.60.4.138","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"45bf4a0c9d8267ed8cfb37933cdf50ed3eaf23f7bcad6681a65cf55fd0120de0","from":"BD95LAmfVrD3JEwaereykM","reqId":1543518036999212000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":78,"txnTime":1543518052},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"2kHqvEXmgiRcPghcNdGGphFZJdBj4g5CXNsDQkFx15FAprGvmt5DbDC1N4FZQCd7Gi4LzSAn4cQ5eoKsnBmn5UnL"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.138","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"933101316c883ce1ade5c0fd93e226448fc88f38d858788be4986596f7b9be38","from":"BD95LAmfVrD3JEwaereykM","reqId":1543519064797689800},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":79,"txnTime":1543519080},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"zPAr7xh7rcMYkAh3Vd73TFAoX45mtU3eaP57Ke6JPcv6ppMr4iYpafyB1X2DAB5sQsBRn2MVC1BJrfcwdCrDG1U"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.138","client_port":9702,"node_ip":"169.60.4.138","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"2dcd0cac5e059298e5cdfa8cf0081c95b33a6d9a09086909eff9d7b91f05e23a","from":"BD95LAmfVrD3JEwaereykM","reqId":1543519131380345700},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":80,"txnTime":1543519147},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"AWZpBgGbFFCobzuzsqdeZg","value":"35aYZ3mw5UyEZWjKRB6ciL1d3JqZaMmbWCdAp3TtoV5i1YkDN4nRV98bzPqdSeh5sX1atEifuNKSfEWkBVg4qMhW"}]},"txn":{"data":{"data":{"alias":"sparknz","blskey":"34cHakLPF7ZZtRjysMoXT2SFmaqWinh19y2orQ4BPncYsA2J5fkfhtd34jruhjbRWWLpTw92XgCsTrQPPSdUheyqqs2AFZ7QDwKESAxuukV7N6NwWQBEf7i8GTfJaL5vBqqJxDwDNH3j9oLdeMvtTjU8vrnWZLWb6TKjmzD8NrtwF6o","blskey_pop":"Qp3N5anCNnktZFVWpWJQHexcT18j66dXM5cSd6SAsn9uwMAxU8VxVLjDJrRmutVwbR81EzduJfVojMgPfDdHEPxEDFQKjG2EP6qTk7o7HRyts7kaSfkL1f8Dwk8f8tbU5gkaaLrAYGRkXSjnmMPJHXaj6zeeNQRatZJGeRMAG8o8fh","client_ip":"146.171.248.185","client_port":9701,"node_ip":"146.171.248.186","node_port":9701,"services":["VALIDATOR"]},"dest":"DdAqLDrkEW96hcVLsEtf8SrQnUGFK7uMLyHi775kYFVw"},"metadata":{"digest":"5d1e7deda854cda687afab5defd30a1e940eed638dbe7d3c57cb4e326891bd3c","from":"AWZpBgGbFFCobzuzsqdeZg","reqId":1543870622701863717},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":81,"txnTime":1543870623},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"31oppTng8a1BtbZDEo4LNQhF58AMjSvAznR94KxjQkA6BFJg2sgSwzVXWVbEhVL1H4RzaDPjfnHNPWztjDGTUYVX"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"2eb2a01dea5d319f834d1e7a06b8a07258e41f22d4f05422b12f9d5986bc34d5","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1544074481553187626},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":82,"txnTime":1544074482},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"41YVszp9VT9djZsVqswxQTnSRX7BEpv2M7QLvPn6rPUGStbDipB2rxwWxLCzFZRGyNQKRvUi42R2KHrHPfU7Wic7"}]},"txn":{"data":{"data":{"alias":"vnode1","services":[]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"a4f609e0cbf8747f759a746909dbf1e3c9248db7552685ead0405ac72c9e8927","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1544074647137451532},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":83,"txnTime":1544074647},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"2KoQ12pS6MZA3ibexjZ2UqiTS4NiYvT79bwaxzS22cetgwDfqsmvsR7wWLuyXwkSU8HyX8X7NNK6xgfYPBN4mwMt"}]},"txn":{"data":{"data":{"alias":"vnode1","services":["VALIDATOR"]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"92582f39703e76731d5698e5b73e19a8c1ba76f992f91932366607d707bb6a5f","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1544075270586069533},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":84,"txnTime":1544075271},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"32q6n5cXWTbbSafBxY1bS9yXopVjkL6esnq9RNPoWbGgNFRPntZFzZkZRpGf8g9WxJANYgHX5eWRcxtuAjVjuGMY"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"0ba8cb01d0926a2bc950883a1fe1994ac6f1ec3ceded488e0d00fc95f494bfc0","from":"bPTNiLzWPFHKr7mJGaump","reqId":1544110495269165919},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":85,"txnTime":1544110495},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KpBWkKc8yn3iWzjHDDmqBL","value":"5ZWLPJckDRWJc5TJrkpzyBxmsQQBEHfQhSvTKW6NSY2qVroijPMqVByf3tTAUXPfdQ4jGdTSWzS3E4YvvyqTaGf"}]},"txn":{"data":{"data":{"alias":"EBPI-validation-node","blskey":"4XiKTE8hX4d2WVxd85epKmN91wEz9knWXTrEu6Ug9RUb32zaQ4EC6KPmkVzPmE6QAigDaD9soYcKkUVxhzpTFSQuJbSCLUJuNpvDbdMznGw9YoX8n3bBM6bGgPxQzYfRtJGJ1JtWmhViHEF1FhyZxPYqHX1pUbUDd4yKzxJeEabMYDt","blskey_pop":"QkALSfgxL3p3fpswcYJhhaqzi6sYGQNErBSYjqVEuYkuYWPBvnFjNpCrw2GprHS8XcBzss2qeyTXpTRn4PPo3y4MFU61Jwbkbb4Du81Dwh7XUqjiWiV6HvHSdafaeX6P7cGdtcZZAFKsiUWxuosiaeXjk1y9T47ch1hEFSdoh6fBSo","client_ip":"185.242.244.69","client_port":9750,"node_ip":"185.242.244.69","node_port":9700,"services":["VALIDATOR"]},"dest":"j2JLXyTCAMuHSRqZ7eB2JCXSpPniDFUsyT5MJcGAjUG"},"metadata":{"digest":"7ac78f73c3c397596765d3a2b5afbf01096a051c7702d7e29e53573757912d3d","from":"KpBWkKc8yn3iWzjHDDmqBL","reqId":1544725436218772828},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":86,"txnTime":1544725436},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"3TmLPiQF71J954XuFXyPtFKpiECWTL52mCE9AABTCwsFMcx6rforPwsxVKvRjveEuJLv3uucY9ybPnoFfFxGgrKh"}]},"txn":{"data":{"data":{"alias":"EBPI-validation-node","services":[]},"dest":"j2JLXyTCAMuHSRqZ7eB2JCXSpPniDFUsyT5MJcGAjUG"},"metadata":{"digest":"c08be5f00f5976cd163f503430751494dad23d97b16a9c0835e717183039f081","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1544726215993081431},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":87,"txnTime":1544727345},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"5M3i1PbpvEQmTk25EmAY6N","value":"2RTUVnKLx3FGwBQofPD86z4KvgCpN4dbw6Xjvz7Ka9RYdZnydJZ3oE7pZr2Q6V1mZzGqPfAmnW2YEDqozk52THDt"}]},"txn":{"data":{"data":{"alias":"EBPI-validation-node","services":["VALIDATOR"]},"dest":"j2JLXyTCAMuHSRqZ7eB2JCXSpPniDFUsyT5MJcGAjUG"},"metadata":{"digest":"7f6a8dd88af17b623f0f8f28bff0f2188805f9f940b390d9b24b9c0f24956cb2","from":"5M3i1PbpvEQmTk25EmAY6N","reqId":1544733913396713000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":88,"txnTime":1544733914},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"5M3i1PbpvEQmTk25EmAY6N","value":"5hb9wbwvgaYCdwRYUAQvgHkUPzX6F6BhirapR2ni3BAYMGqT9irnJWVMciEdTGZj3rKY2ThAfVtNaMbSJnW6HCyc"}]},"txn":{"data":{"data":{"alias":"EBPI-validation-node","services":[]},"dest":"j2JLXyTCAMuHSRqZ7eB2JCXSpPniDFUsyT5MJcGAjUG"},"metadata":{"digest":"0f52e5c1d547772efd54bfd01d8ec1caa9ba6dce8ca9234ce977008835e4aa85","from":"5M3i1PbpvEQmTk25EmAY6N","reqId":1544734167152848000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":89,"txnTime":1544734168},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"bPTNiLzWPFHKr7mJGaump","value":"5SwN2QC6rG7iuQpwwgNccDRhfNBG3rbu8trV5UFnQwHAw8FG4UfhEMkMSk1XUouAqrzY8xZVxThTFgHBxUYyPURx"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"796c9b3f2b9f78bdd482763e0685e8d6b7f2764d4a3374c30b113a026dec6509","from":"bPTNiLzWPFHKr7mJGaump","reqId":1544781409602174729},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":90,"txnTime":1544781409},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"558b9TUNBbNFeGd7S5qW14uUYdx8tZzQP26UCMBuMbR1KXowJUPSebASQ5yMQWwTu3AoWwRUEH74en9wpMSLKo7P"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":[]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"61352cdff0ee3db0e06ddd2675b04a977efc2ff24ab099e6be4ea37c431f80b4","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1544812283315027137},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":91,"txnTime":1544812284},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"4xgBtM4FFMyfndQgbEb7wz","value":"3vBhqo64dvx2r86WuJKZuVfCtLD64FmWo3K1WY2wY1NYTZ7GZivqHjKi5ALCDyxmorD6U5yeMgFPgQCxCei69Ncx"}]},"txn":{"data":{"data":{"alias":"anonyome","blskey":"497qEgWR2PZx1ZUeCQBq2hTva16CkQZpVPtdG4o3tBFYRzXLQkvrEX7vyRrbov9LQQQriJfRdYZ41C8ju4BjPH77zF34diUeLxrtK1kMGoTdTHinLK1116XUW5GZpj7y7i3Aekxh69rDqZZbbd65JFrD2ZEJoNsHj8HydbVaAjm6wSa","blskey_pop":"QuNLxWz9jWEoFq3gh2DUbNZHBFiK26gQ66URFGGNNbd8WtKY9u8D94k2zL3P4K74Uzp6MmJPMJewAWuzVD7CQJCguzDPYMUtd57J1PX5VoJXp4ynmbDZhJQq4v393fU2YSLkhd6Fhci3nRovvyz3gPW4JbbtipzZGwp3VZPL1qZpf9","client_ip":"13.54.236.56","client_port":9744,"node_ip":"54.66.208.40","node_port":9733,"services":["VALIDATOR"]},"dest":"AM8oxRuxRyKvJoLRtAEBBPMXzpMqTtm9yQDenMkS76JQ"},"metadata":{"digest":"77ab8c07c8a525367353aae971bace52932b713b772dd57e9f6c6688942867d1","from":"4xgBtM4FFMyfndQgbEb7wz","reqId":1545088395580554723},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":92,"txnTime":1545088396},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"4xgBtM4FFMyfndQgbEb7wz","value":"5XCS6eP9z4jmSxCS4h3ai6vPJTaeNMNXttC2UyPFBinMEFQUtiZJFtCCPtY9Dx48wzN8JWuKPv8xnBqZhHb928Ey"}]},"txn":{"data":{"data":{"alias":"anonyome","blskey":"497qEgWR2PZx1ZUeCQBq2hTva16CkQZpVPtdG4o3tBFYRzXLQkvrEX7vyRrbov9LQQQriJfRdYZ41C8ju4BjPH77zF34diUeLxrtK1kMGoTdTHinLK1116XUW5GZpj7y7i3Aekxh69rDqZZbbd65JFrD2ZEJoNsHj8HydbVaAjm6wSa","blskey_pop":"QuNLxWz9jWEoFq3gh2DUbNZHBFiK26gQ66URFGGNNbd8WtKY9u8D94k2zL3P4K74Uzp6MmJPMJewAWuzVD7CQJCguzDPYMUtd57J1PX5VoJXp4ynmbDZhJQq4v393fU2YSLkhd6Fhci3nRovvyz3gPW4JbbtipzZGwp3VZPL1qZpf9","client_ip":"13.54.95.226","client_port":9744,"node_ip":"54.66.208.40","node_port":9733,"services":["VALIDATOR"]},"dest":"AM8oxRuxRyKvJoLRtAEBBPMXzpMqTtm9yQDenMkS76JQ"},"metadata":{"digest":"09742193d02bfd0a16e1a18f71e0cba235cd6872f018398f12945274f3117e65","from":"4xgBtM4FFMyfndQgbEb7wz","reqId":1545089703401067519},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":93,"txnTime":1545089703},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"e3SjQWaGqcQsq8EkBrCm7RTZUq6oB6LFF88w2gZ9h3xPES9AMioygTTYiRuLkgTtjLocHiYV1UjosX6ybGH7Y9F"}]},"txn":{"data":{"data":{"alias":"sovrin.sicpa.com","services":["VALIDATOR"]},"dest":"AcaN2zJ1vkQyEvmi2EyUMLzvzczQRvarNPjR2CbtNFAX"},"metadata":{"digest":"f9d4f83b612a218f58cb2aa50face3f7cb0ce488e6b37775d14f1ac85b68e6ce","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1545149889900994815},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":94,"txnTime":1545149890},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"5M3i1PbpvEQmTk25EmAY6N","value":"4ijAWFcxfZHB2M169arvZMudfZtwUEjpfhHVKsFDx9TzAVhEU8jwgj8ZXmVU2bFa3rLzBPTW3MrT43KyTCj6Y6Pu"}]},"txn":{"data":{"data":{"alias":"NodeTwinPeek","services":[]},"dest":"2bDviHYdDiTjyXYXEW92zQHEf1C1QsbFatJ6uSYuYrHh"},"metadata":{"digest":"b5f9a593b5368b30899793f12e4cec879b232c49746da332a53fe4c83cc94b41","from":"5M3i1PbpvEQmTk25EmAY6N","reqId":1546646026772409000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":95,"txnTime":1546646036},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"TK4JebQqeqq5t6x2bCwnD7","value":"2v25oRF7GET3wQZ7Q9TZqdMNVdaJAyR5rmsw3DGkyQkHw9HtyNHkq57EUV9K4Uf75gnyHhRQ9hxau2XJC6SNPa2C"}]},"txn":{"data":{"data":{"alias":"NodeTwinPeek","services":["VALIDATOR"]},"dest":"2bDviHYdDiTjyXYXEW92zQHEf1C1QsbFatJ6uSYuYrHh"},"metadata":{"digest":"f1402734f5bbc90db2dfa3db65d6cdc3ab839eadf13c1a7e16d769507e436696","from":"TK4JebQqeqq5t6x2bCwnD7","reqId":1546880167291826800},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":96,"txnTime":1546880167},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"4RvNoSPKWa1whZRGjpGEq5UDKQUVd3h1m5aRr4xThoFyCR7D2HiszbPGRJH9hhD8V4Sh2cERksU85fyHpW1BUZDz"}]},"txn":{"data":{"data":{"alias":"ibmTest","services":[]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"d847f4140dbc101029081cd2abecc0f32465e310180917e12736d9f102dd2c6b","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1547489538349798313},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":97,"txnTime":1547489539},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5gCEwT2NHiUcuD53F6xW6vp6CnFabbk2kXoLLxfrUHqnjqMQDNwuSU6fm32aYFC2Z7KMjfs9jKfqPLEtwPFWASqi"}]},"txn":{"data":{"data":{"alias":"ibmTest","services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"e92c1fecf19b469d484bad7b3b2115b5e88df9c695afca551c5e1f3422f253f7","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1547497859538640883},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":98,"txnTime":1547497859},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"3Pcohi5dAcVz9k8hryvXn8x6ddGob5hWYzmHoeZdDi628Asc4Au1rmsMjZasvLPqj69MN1VfbE4kTC9oESUPbAeC"}]},"txn":{"data":{"data":{"alias":"ibmTest","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"56af49cfcb420ab39ecee2912fe3acaa2c0e9fcf4bc6dfdf783210cda55495eb","from":"BD95LAmfVrD3JEwaereykM","reqId":1547498794878924300},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":99,"txnTime":1547498795},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"46AVXqBesadhJLZvoRmcyPDDePE9Hi5DahjPC82fhw7irQnVXbvwNhqB7HXfCxtu8w8VifPhEcfihZcuNKBg995B"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":[]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"a1412abace57327ba53e022db6a977e198a6134fec1dc4a17050de981f165845","from":"BD95LAmfVrD3JEwaereykM","reqId":1547500122390156800},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":100,"txnTime":1547500123},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"3yv5pLUCBnbC95FRb2qVrCtxRVBWB9ySRKkTxJ1M4pdTsXZPd3BHkDYTDqms9e3zPNtK5r8RQcg2ws6c5W4Nmy95"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"1f584ac4cc88cb57ad5d9005e4f5f17156b70aad80f302b642289e4840076f74","from":"BD95LAmfVrD3JEwaereykM","reqId":1547500156383195400},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":101,"txnTime":1547500157},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"3f1sTShBSY8s7axeGypUxfY8a4V19kYkkFPyGygGGveJ2KDNVSEtKJHbLQNkaxk1nJnKudWQGKzCS2AdjBG766rw"}]},"txn":{"data":{"data":{"alias":"ibmTest","services":[]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"03f65d7a7bc664f38199f4d34f6c8dd3fbeb5ad8744753b6a3f92def6d148ace","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1547500445740297593},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":102,"txnTime":1547500446},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"5zo62TywH6pZij5L3QU9zmjEmAf7czZDJnyF3zFHXhqcGfGYLWCeUuFqJ7bVMc8Bnfx2XxkYY4UtwZ6oz3HwrqdL"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"da6a5f92b960682e1c372ac18d3287e8a9db6e64cd5c07855a2cd95d5c13263b","from":"BD95LAmfVrD3JEwaereykM","reqId":1547500485921720200},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":103,"txnTime":1547500486},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"ftEtDcapN4TLHkeMDzvf4iQcrtAJvZx1VvvHnhDxqPxTcRVXWXLrQxNZWEjnjFet7ZNtsAQT6MmYHhZGztqrAVY"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.138","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"15e71658452369fb383b2887eb9c4bf3833a3df8e6c48138de55730e086c0e6e","from":"BD95LAmfVrD3JEwaereykM","reqId":1547501596782347800},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":104,"txnTime":1547501597},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"7sTtbnHKD3zyosb1dFQAex","value":"23WRyTk9B2hPHXTMzFnjxJZZUhfsn9DLBbep5fEQqm6eTqYHiGrriTP9PbPLpVF1BHWsygVsVyr1jSQjr3VE6pKy"}]},"txn":{"data":{"data":{"alias":"regioit01","blskey":"RVjJZ8FJDMjFS6hTNVSXMx7S4BfQeX49CLTXvkHWvVQ4LRNBCsWAjwWFcDUzmdA2JA7hMRi9qvjh8vmPDahLeogJyWEByQFdJ4LnFo2NkDAfQwExHjLGXdawHPQjTduRrWYERpjwS9jFs3FXih6FcQRZb9mKrSW1tguSF7qGSdiNmV","blskey_pop":"R2v3TpVYmWpifxideMdW4EQo36w36VsppcDB44JNDxxCREiUZqrBj9RChgu6RRmHjj6SLchea5L515iadvA6STeQYh8tjMF87KH8s6RE5JAQagzX67X2fbpzai6A5Vq6w5wxLPJTKV4P9rkjxnH5Y6R1ReaVcKzZYk6j583WSUJZdZ","client_ip":"91.102.136.180","client_port":9700,"node_ip":"91.102.136.179","node_port":9701,"services":["VALIDATOR"]},"dest":"AQoViW7aucuvi8SC9QWur6u14ppmVvtMvduigy51NeCv"},"metadata":{"digest":"acd16644af0c402f1cce381e9dffcdd138d3d5098c54ac5c7d126be8b2923e50","from":"7sTtbnHKD3zyosb1dFQAex","reqId":1547571055916476853},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":105,"txnTime":1547571053},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"HS2VPUmJ1vJQHCjfH1w42H","value":"5htNrJWGu15CpxU7ocHYRkGQUygcaV41jcRmK9a1rvGoG59qWMJYpc4GvZeh2FttfobbxMZJfB57sggLhFS95y9S"}]},"txn":{"data":{"data":{"alias":"Absa","blskey":"31k6SUK7otXf9MXDgfGRb9N37z8xcZbdRmegNiK5k97sdfNvTSfKeEqSTxBqe7qqNa4ueYKDjW2MYgWBwYF1ohh5GzjUndykwttpffbkDGCrQAaUTJoBi9rJvrwCkkQeLKpoWTMkV6gYp1AiJkhKYiGhtCCAA3R5grGUpcMzDXqzt8R","blskey_pop":"QngATEwvD1MHDL4odeiMqg9AYp9emVmRDSQMeKwFXdtthR9x5tDvKrWFT1gZPECuaRWtEmQBQDzSxebiy5jZJ6DwNbP4EfLtKvHrmHUAVfXKvrzHJiwbeg56oXdyi84xsNLKKZrhhr8hEgpNN1F1FXHfJUDWNyMU3w81peiLLAkYrb","client_ip":"63.33.176.61","client_port":9702,"node_ip":"63.33.176.61","node_port":9701,"services":["VALIDATOR"]},"dest":"BUKQ26j7hqkW2bdQsoxHACyS1n7gCrHeYxLR4yaoWCr"},"metadata":{"digest":"31b150874511509e4ac355e37c9ce7f649fb12bc48a2cf9c591b0f390b076b67","from":"HS2VPUmJ1vJQHCjfH1w42H","reqId":1547574103955392127},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":106,"txnTime":1547574106},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"YTsBtQz1PgjHNNPsGa7i7i","value":"JJD9qYZF7z8nNqP2sAf1ER3HB9rH7FQBhPeVUjyaf3G9TsBUQCv3XVTgV9eGXke5tA7nmDHaQwhFhVDMfpZVq1E"}]},"txn":{"data":{"data":{"alias":"VALIDATOR1","blskey":"uSpMXhzYzgkShiEeWoSrKar8g2iCsg8KL9XaSSs9HNJt5MSCXKjPZtyHNN7KtuLi1ThxKZc8ZUUtjh9uz2ApXZU41PHLX4RsMEGdfMJf3FsPRP8RkodRtqXuxmTzKEvJJ4XihrgHCL85QBpBkmp2u7YioLqwhAxyDmFRLjFnHx4cwr","blskey_pop":"RHFFZHGBUFAkfYQr9nzn2FX2ZQn6u4FmRyfUTMC6DnVfBF7ogJz2oSS4vpi2MitFTwWCofZsB3g58wSPZA4PGAPR8KXjHQvEkB5MS3NDnAgjje1E8fX9XC41qhEJ1kdC68GtgTgJSJRfkmH9c3jjb8rhQskod6N8swtTpqwV4CGgoq","client_ip":"54.180.62.29","client_port":9798,"node_ip":"54.180.16.51","node_port":9799,"services":["VALIDATOR"]},"dest":"99UgWzvjVvhDHfd16V62VFdQEKn8Vk5fuMP2t1d6xx4w"},"metadata":{"digest":"d28d9fab163bd72cf7fbc254ca6b7b495101439870a064ceefd2b18f1d4417ad","from":"YTsBtQz1PgjHNNPsGa7i7i","reqId":1547599663946425568},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":107,"txnTime":1547599664},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KSZhtVyy7yQGxHLq8pxQwX","value":"2tHAgZ2A32YBJzLBWbXcCCfEYjRAfUeswRQQkrfttwk8Av1zvwHyfqQUfQKHKtTaQc1UeUjd7Z1axgEQf9LQqTCS"}]},"txn":{"data":{"data":{"alias":"swisscom","blskey":"2Y6bbfnx22jRKT6vDFq6kJayzqrU3N6hBGvqaepepgQHrC8KyfjwsnbAxr6NAySdFq81SopX5is2nc33d2Kei2jXGjktA7VgT3JPaSQxi6cb1UVKA3taVaqPXdbQvedkkGrgdGuHJgz2Tz5yZQertL2YiqUmKjPn78vSJWF3b6BXQ4B","blskey_pop":"QqARZRNUxwb9DWJW66DAifJNMCeWo2r3Mxy2HPrDEEiFvhba7FiSxQ8czJoVa2r58GwvT9Srvh2tifKUjMsnwt2o1GioMDpTS42MyENa6tvZuGnnsErVHekH5xccnGRe4zVLd3MAmzha8RDL5pMZeLzRw5rDpQLSnJQJKrQzqLho2X","client_ip":"164.128.162.43","client_port":9702,"node_ip":"164.128.162.42","node_port":9701,"services":["VALIDATOR"]},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"b582d138c5f92a84059eccae5c624392fc89899e02b559dfe5521b25230b10f6","from":"KSZhtVyy7yQGxHLq8pxQwX","reqId":1547651916293792395},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":108,"txnTime":1547651916},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KSZhtVyy7yQGxHLq8pxQwX","value":"2eF3euLofexGmoBY8BQutqNkPEGhWvomVQZK1PFs9iKRzUEkZPXAStxG8wuh59DRUcGTX3piZUQYPk6Cb7Dc3cCY"}]},"txn":{"data":{"data":{"alias":"swisscom","blskey":"2Y6bbfnx22jRKT6vDFq6kJayzqrU3N6hBGvqaepepgQHrC8KyfjwsnbAxr6NAySdFq81SopX5is2nc33d2Kei2jXGjktA7VgT3JPaSQxi6cb1UVKA3taVaqPXdbQvedkkGrgdGuHJgz2Tz5yZQertL2YiqUmKjPn78vSJWF3b6BXQ4B","blskey_pop":"QqARZRNUxwb9DWJW66DAifJNMCeWo2r3Mxy2HPrDEEiFvhba7FiSxQ8czJoVa2r58GwvT9Srvh2tifKUjMsnwt2o1GioMDpTS42MyENa6tvZuGnnsErVHekH5xccnGRe4zVLd3MAmzha8RDL5pMZeLzRw5rDpQLSnJQJKrQzqLho2X","client_ip":"164.128.162.42","client_port":9702,"node_ip":"164.128.162.43","node_port":9701,"services":["VALIDATOR"]},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"23c08c4db5ad3ca27e2fd38b3015525d3a76b41ba63c2fb82e2a15f67ca717fb","from":"KSZhtVyy7yQGxHLq8pxQwX","reqId":1547653252643574766},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":109,"txnTime":1547653252},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KSZhtVyy7yQGxHLq8pxQwX","value":"mUhTwVA6XGHF82XJj4eEa5xpaK6qCFF2bwLHsVt4pnfxdVxTMYHJBVHaQfbYALSuDQfdrgktLKv6Goo8PRzvANc"}]},"txn":{"data":{"data":{"alias":"swisscom","services":[]},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"60ac2ccf34f393880b544c5fab223e5daf36a5fd92565556d22d589be6d2d9d1","from":"KSZhtVyy7yQGxHLq8pxQwX","reqId":1547656208364157351},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":110,"txnTime":1547656208},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"24goM7gvgMmhYs7VSd4TJtmUinGTySwYiB59ViLvpbQ9WV4TJZr4R9q36wX7nKRwu9aPBXiJSiEU33ozREQd3SUt"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.139","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"2df2c048ffd27254d4abe5face1ca7984d058a819d791d15a11dfe6dc0885cb3","from":"BD95LAmfVrD3JEwaereykM","reqId":1547499944042787200},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":111,"txnTime":1547762408},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KSZhtVyy7yQGxHLq8pxQwX","value":"3dz2LU41uRHr4jByQMQPN8UNbTixsMWnRkCLFBGFLH91NsFkC4hYvTmS1fSqAZWmabMwNyXGWTgCVce2axC6R52M"}]},"txn":{"data":{"data":{"alias":"swisscom","blskey":"2Y6bbfnx22jRKT6vDFq6kJayzqrU3N6hBGvqaepepgQHrC8KyfjwsnbAxr6NAySdFq81SopX5is2nc33d2Kei2jXGjktA7VgT3JPaSQxi6cb1UVKA3taVaqPXdbQvedkkGrgdGuHJgz2Tz5yZQertL2YiqUmKjPn78vSJWF3b6BXQ4B","blskey_pop":"QqARZRNUxwb9DWJW66DAifJNMCeWo2r3Mxy2HPrDEEiFvhba7FiSxQ8czJoVa2r58GwvT9Srvh2tifKUjMsnwt2o1GioMDpTS42MyENa6tvZuGnnsErVHekH5xccnGRe4zVLd3MAmzha8RDL5pMZeLzRw5rDpQLSnJQJKrQzqLho2X","client_ip":"164.128.162.43","client_port":9702,"node_ip":"164.128.162.42","node_port":9701,"services":["VALIDATOR"]},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"a81375c6b2e43e5ed4d44d565901e33066d77785798ddd93ed2726bea6930c4f","from":"KSZhtVyy7yQGxHLq8pxQwX","reqId":1547652168940154534},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":112,"txnTime":1547762409},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"554joew9xsZWAuwzfgK5CvAgw3hapNcET6Z7qEnVXBNBe23c9TCeAWeRoM9GYDpEypkZcQFwiQcV3jRJXq3wiFPF"}]},"txn":{"data":{"data":{"alias":"swisscom","services":[]},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"0a4a47a4080c3899997cc6e71e78d1e3ffd675e13d95908c9a0b122f2dd0dc8d","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1548175587215323240},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":113,"txnTime":1548175587},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"nLE6kCvr6FwEBvZ8p6aw58DMwFSf7Q5CcEEyA17b4HHQMpZuYdwbpz5w2kuiSac4w9qRnPGB8ouLndmzMggFHi1"}]},"txn":{"data":{"data":{"alias":"EBPI-validation-node","services":["VALIDATOR"]},"dest":"j2JLXyTCAMuHSRqZ7eB2JCXSpPniDFUsyT5MJcGAjUG"},"metadata":{"digest":"03c6e7bb56d6a2870bc9cc7a8e3e4c226864faf1db51368047e9e92d38697138","from":"6feBTywcmJUriqqnGc1zSJ","reqId":1548184180516141458},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":114,"txnTime":1548184181},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"3pAYVxsFgE9u41tsucPUW4Jmy2LFQLKeNNiYcVi4MTm57GyheA5cVzbzLKq2wA4NABSd4EqLf2cCwmzZwUF2iAkE"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.138","client_port":9702,"node_ip":"169.60.4.138","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"be3db7c6f4526eaafece89054a366726ff34fb6d93943b847222fe5660454323","from":"BD95LAmfVrD3JEwaereykM","reqId":1548190805953640600},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":115,"txnTime":1548190806},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"2rn9DmGEeqU4V41MbGThxEuvdZ6qLHsVDeYqJDnpDayCWVhdxXERAfKokcxrXVHPA1Q2gyekZ3jMSuLaFua1jCwD"}]},"txn":{"data":{"data":{"alias":"ibmTest","blskey":"232Z7DQcjp5NPVZyzR6WWH9w9829F4NPBz87sx2LHZBnv2xntpaixyUc7J5hUtwnYgL7HyEZsf3Wgtdr5sGua7jhpJzixxtR2p4KoRZ48i62wA9Y5mJ4FmXBg3GxMwbegc2Nmqg33CGjB8cDGUZwR1jBERdZdsi3Y4CL9e9NsBqUu5C","blskey_pop":"RKL3Tji4ZKCsfBLaSAsnvDBn2TvmkkSSEKy2zDk467aXZFG4fpEV8t89w2FXGeU2vLHV1ppYpfefDoi1Qjgm7vxEPdEzys3ZxGJea9FXG78sQPurLF1XZtK1g6DV5L2YAyV3qC1pyGGibJvc5RNS6kdbihSwkpZnVRDwCr3Pk5DPiX","client_ip":"169.60.4.139","client_port":9702,"node_ip":"169.60.4.138","node_port":9701,"services":["VALIDATOR"]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"16bcd5c9ea536ed306bd414a3797076156c7e143ddcef630e95ee5b2a7d236d5","from":"BD95LAmfVrD3JEwaereykM","reqId":1548191738654080100},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":116,"txnTime":1548191739},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"KSZhtVyy7yQGxHLq8pxQwX","value":"2SedyJRXPkF7yyCHkvEhGeyZ34W9MXrH5AVcFFgQJ4tbsWpF9gKvYL6gawbuvAE8W2FqkKoufWFf8kgxouaZV89v"}]},"txn":{"data":{"data":{"alias":"swisscom","client_ip":"127.0.0.3","client_port":9702,"node_ip":"127.0.0.3","node_port":9701},"dest":"58b3Fy45qjcBfVtEt2Zi1MgiRzX9PPmj68FwD143SuWQ"},"metadata":{"digest":"92c8ec4f3f0aaf806b18b74afb1e8e52d06d5096b9e0c3b3996af0dfc4bf627b","from":"KSZhtVyy7yQGxHLq8pxQwX","reqId":1548781193697645899},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":117,"txnTime":1548781193},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"HMT5rCkqvjcjZZHQFvQtsX","value":"5QNoTkHzevZ328EMXUTzWWveowZE1v4bfdhxaKfNGUvuUk4ympwnkzCPRFnz57xrvouC4A2rtd2T3vj4opCgQbMB"}]},"txn":{"data":{"data":{"alias":"Swisscom","blskey":"2Dys6A6wihGsazQLKe2hN8kHQ17u9Hix9pZ2uTBtuvMSLMaaWZrMnbXYoHcv7iDc58mGBnGEA335gXN8Y1Dntjd3YgeDYS7ffpxGHDuvMzuRpD2iktMCzUCRmsSMim32vURLkPTHs8Pg2fgg4vGcsmAeGk4tFVaCVC6gASgNU9JqDKX","blskey_pop":"RZ31hdcUW3zcD2XMTqvazNcX2YxwY4HSWah9tDzTW6A7G2uhzVoy9UTqzdrGHgZ183VoNKw1EeZvB6kRZYFLckwnW8pKT7r1GS4gUPPcnQxAtogy2bMnQQ8S4ZY5e7WYn2URJ2GF1TSGnzUzqu4iQZWiMeFsBc1CVH98A9PGmYQ3z7","client_ip":"164.128.162.43","client_port":9702,"node_ip":"164.128.162.42","node_port":9701,"services":["VALIDATOR"]},"dest":"B3x2KTn46sZmajraNm9oh6EUWnZWC5yQTrJAUifwDWRV"},"metadata":{"digest":"0ad6663c3841906ffafd51a467d7c43480d912551fbd98e9cd415e1571344455","from":"HMT5rCkqvjcjZZHQFvQtsX","reqId":1548781315218601114},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":118,"txnTime":1548781315},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"G4tfohtFDtmQJAEg6Pwgg6","value":"3oR6cXp4AbetwhgHacWjnF7LhnS8q8kVzA4nqvsvvxKzDEbiFSEF4UEU5BFiiAxtXg9nm6xk5X496v6JHETYdYjU"}]},"txn":{"data":{"data":{"alias":"NECValidator","blskey":"4UVe2Ryi4oPiECy8jxEHrXbNKbyjBjADotdD7ibRfpkfHjkD7UnBVcJKq8NFFf3rmGb8G3i7hGvZw8dUyQvcx67uAKNvYA3QMc3AL77aFNXHjiU5HdEBhwvq9qjs3BWZGoPyRfxun7EjMohiHvGTiZUxAzZD3R8qpaYaJ7DUdC3k24Y","blskey_pop":"QkN8FyGfub1yoMMzHhDBdrRyfKyrqX8kuiA6dXfAM3ghMGq1wWGbA8VuuCf4eWtxZvaD8iz9shC5zJn2C6pzo3BpmmP2bufsAGVWcNhTqxKPfXHds2JC4DagX7BV5mDfTriv4mF4EJD8PbwVgGvHzGFj4FuGTx3BnA9oay3rGxf1m9","client_ip":"52.69.239.67","client_port":9702,"node_ip":"13.230.94.222","node_port":9701,"services":["VALIDATOR"]},"dest":"BLu5t8JVbpHrRrocSx1HtMqJC8xruDLisaYZMZverkBs"},"metadata":{"digest":"3e03ca15f515f8fce2287600d02ef5dee412bc2874b836b8a5831ef9cb526701","from":"G4tfohtFDtmQJAEg6Pwgg6","reqId":1548808410060957151},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":119,"txnTime":1548808410},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"Kv2YdE5KGgdruMGW6p5w4b","value":"2Fm6QXXRYDhh34H7xRYFxHJQyHymyimPBJotwKzGUWJBGEcWPdYUhUFk2VDp9JyYhkapDchyhtS7VxjvQnHc6yR1"}]},"txn":{"data":{"data":{"alias":"xsvalidatorec2irl","services":[]},"dest":"DXn8PUYKZZkq8gC7CZ2PqwECzUs2bpxYiA5TWgoYARa7"},"metadata":{"digest":"e5b3e73768c7698aafa3a9679d2b91b58be5b6a4f7e5b9669c27838b94e3cd27","from":"Kv2YdE5KGgdruMGW6p5w4b","reqId":1551902688751838000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":120,"txnTime":1551902689},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"5M3i1PbpvEQmTk25EmAY6N","value":"5Rkz1NJxoU8rjaSeXHb77XrjD1Gedqm6ZxqN89YEtnajxztxcw5iKEBLnFg34in2ta2mkAdkLSBPEQbArPKFyG5f"}]},"txn":{"data":{"data":{"alias":"sparknz","services":[]},"dest":"DdAqLDrkEW96hcVLsEtf8SrQnUGFK7uMLyHi775kYFVw"},"metadata":{"digest":"34c208f6f214e973d926473b807e1220dd5f4167685101baa0fdde25da577054","from":"5M3i1PbpvEQmTk25EmAY6N","reqId":1551981105839004000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":121,"txnTime":1551981106},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"5M3i1PbpvEQmTk25EmAY6N","value":"29EBhTyCNsXJ9rruhPUfY5DLoXW5JiyZy7eGNxZ649sYefMZmJdpf8dnd2LxkCNswD9oGWPXbiRZbGfCEXc35Zkf"}]},"txn":{"data":{"data":{"alias":"vnode1","services":[]},"dest":"9Aj2LjQ2fwszJRSdZqg53q5e6ayScmtpeZyPGgKDswT8"},"metadata":{"digest":"df690f4b4bd3897bbd321563ef5fbf4fdaba2b095546b19d5cc7840f309871a4","from":"5M3i1PbpvEQmTk25EmAY6N","reqId":1552398621045487000},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":122,"txnTime":1552398621},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"HS2VPUmJ1vJQHCjfH1w42H","value":"58FmzCHRRYsiyFE1NQht7Y6n5LLNMmxdVQkBnfBrpmmWHjgLWWjxSK3BwsJW1e2BHhoajGRBZdCSpMHPvwKDuXtU"}]},"txn":{"data":{"data":{"alias":"Absa","client_ip":"99.80.22.248","client_port":9702,"node_ip":"63.33.176.61","node_port":9701,"services":["VALIDATOR"]},"dest":"BUKQ26j7hqkW2bdQsoxHACyS1n7gCrHeYxLR4yaoWCr"},"metadata":{"digest":"96a1552ad574113e94baac125f9032c97e0a60abb5498ac43d2a12a85c0460fb","from":"HS2VPUmJ1vJQHCjfH1w42H","reqId":1552408626878108613},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":123,"txnTime":1552476998},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"BD95LAmfVrD3JEwaereykM","value":"4GCt8VdmfVFJtufoKD6HJBiiQTR6ujiK4bLn2NmdcQucKQNKD3Jr3McMAkwqnjDcduDdQW6AURLeSDyFBDqzZTfv"}]},"txn":{"data":{"data":{"alias":"ibmTest","services":[]},"dest":"7mcctKwaBjyzAbNPS8ix1LTNxex4JchkyLvjYfw2XexR"},"metadata":{"digest":"29a7d65b74832fc91178e60089521bf0212b48a05d7fc35be8841eeda8dc8f88","from":"BD95LAmfVrD3JEwaereykM","reqId":1552662332849012735},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":124,"txnTime":1552662333},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"c5GFhSHNMdaqjSyzQeaMa","value":"2ZSByqsx5w6rpQm6FbKt1scnUUu1VSbbwXBMoKcDCkyrdsm9yrgAKsR8myTW1z4EFt91zAFUJPoUaHnAd6oyBgin"}]},"txn":{"data":{"data":{"alias":"cynjanode","blskey":"4oMnfEbqH5fuLGQQSWLZA7L1y8D4zL232t6QiJhspA5GsKJAextNa3oyr1MK46byzax4EmyoyS74YkLD5ri6dJmRXFnKPZ9E4q8UTWFBRdmpwGiZXni9HXL8twBHhfnNE8vXirQLvzQ2gcSBRzdGHanPBwKnvqjoeNGfDfM1kT22pks","blskey_pop":"RFvdDmi1a8b1VYA8eRtTs9cC2dmhK8b2P7k9VWcPpPKwupyTQr2amdbq4GcbASyML6RXxAvZRuj2EJH3KabkT3hVPM8g1Wn1VYY2761pwCjcHfN1E2G2Nwe5sdwRqxvV965aYi9595SBVWWabx6bcJ9S5EDqKevrUnZ9nsG7xfoWEB","client_ip":"3.17.103.221","client_port":9702,"node_ip":"3.17.215.226","node_port":9701,"services":["VALIDATOR"]},"dest":"C8H9SzkM6NrfYB1jD6dMCmdBKXvcCgGZpvwD47xGdJFQ"},"metadata":{"digest":"eac8e6015ba1eb3f1b294f9c53e54bc79d27b0a690ab358bd826668999f9cc4a","from":"c5GFhSHNMdaqjSyzQeaMa","reqId":1552676534057365965},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":125,"txnTime":1552676534},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6aAJEoijPh3yqeDe9JCqRg","value":"2QzZSa4ComF5hNzGYp2KxtrAu57tstBk7jZrhv6CK95C36KL3Naif5hPJ2egD4ANjAo7VDyaSFks8fANFjFYTowH"}]},"txn":{"data":{"data":{"alias":"DigiCert-Node","blskey":"34ZnAnof88aahn2jShZqUPyvWXjM4pdjBukbH44BXAyZGcY2rivuMLHwCPZGGRf7JAVx6zGdnQiFziqwj8ndtGghht67H2DqHhoxxeCvgxv5aMAVW57z8ekGyMQXq1UWYEYgjFqY2Fi9bCTkGb4ywn4JEFvnfk3aEhVS92CpG5eYQHs","blskey_pop":"R5ksJ4cADE265315njhARQJS3eEqC4bBFjz6sW49Lc7cF814pMdKk4AjjHLCvKeViU6EP8YvhvpiuMhEYzmabsMnj7oesJGp6eqxkjSabFZ7LWk5wzfBW53fSAtBrK4KSGzAfU9zsmsNqBMuK1fiC7J1emxjaZfeXWkBV63dD36i95","client_ip":"63.33.233.212","client_port":9702,"node_ip":"34.250.128.221","node_port":9701,"services":["VALIDATOR"]},"dest":"5mYsynpwzx3muLWYP5ZmqWK8oZtP5k7xj5w85NDKJSM6"},"metadata":{"digest":"c4b76246a7000c018f70776f56accb4667a00eaab83933246b218f5cf4234fb2","from":"6aAJEoijPh3yqeDe9JCqRg","reqId":1553027997718160009},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":126,"txnTime":1553027997},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6aAJEoijPh3yqeDe9JCqRg","value":"2KPdokKdhFMouCFG2xFUmPpwhUSUzte5CdjykDd4YE1BdjZ8UuHsW7d7CLiLrcUkLxyFfKKZNHPZaLhTHjoSqTvF"}]},"txn":{"data":{"data":{"alias":"DigiCert-Node","blskey":"34ZnAnof88aahn2jShZqUPyvWXjM4pdjBukbH44BXAyZGcY2rivuMLHwCPZGGRf7JAVx6zGdnQiFziqwj8ndtGghht67H2DqHhoxxeCvgxv5aMAVW57z8ekGyMQXq1UWYEYgjFqY2Fi9bCTkGb4ywn4JEFvnfk3aEhVS92CpG5eYQHs","blskey_pop":"R5ksJ4cADE265315njhARQJS3eEqC4bBFjz6sW49Lc7cF814pMdKk4AjjHLCvKeViU6EP8YvhvpiuMhEYzmabsMnj7oesJGp6eqxkjSabFZ7LWk5wzfBW53fSAtBrK4KSGzAfU9zsmsNqBMuK1fiC7J1emxjaZfeXWkBV63dD36i95","client_ip":"34.250.128.221","client_port":9702,"node_ip":"34.250.128.221","node_port":9701,"services":["VALIDATOR"]},"dest":"5mYsynpwzx3muLWYP5ZmqWK8oZtP5k7xj5w85NDKJSM6"},"metadata":{"digest":"f5597be009afc3b9decda1e09c8f8d74bd039ac6d6cb890051c88ebeffaa16e9","from":"6aAJEoijPh3yqeDe9JCqRg","reqId":1553030138803227716},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":127,"txnTime":1553030138},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"2v7MzY14jwoMvakDWybDyf3o977GWDT1rQMd5eCEnmTjXy5kvoH99zZJVWXJibDYLU137JbsxQkh59T1HD4kNBbS"}]},"txn":{"data":{"data":{"alias":"brazil","services":[]},"dest":"2MHGDD2XpRJohQzsXu4FAANcmdypfNdpcqRbqnhkQsCq"},"metadata":{"digest":"8bca858f90639c68074c2bb5cdec23a1763e3f58ad38d82c8ebcc0c229c72daa","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"a89394bc38773f420ee0fa62a7e4be466a668c996b1a956e173c8c62ad4ec8ff","reqId":1558034106037397876},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":128,"txnTime":1558034106},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"QVvkFcetzE4g22g4px1iHqEonHimSsFBh7XkCTmEeBqK7oaN4j3TCDB7BjTxZmGhovc2GWVxRswN65nvFygYn7E"}]},"txn":{"data":{"data":{"alias":"canada","services":[]},"dest":"8NZ6tbcPN2NVvf2fVhZWqU11XModNudhbe15JSctCXab"},"metadata":{"digest":"59a7f83dc11a5fbb89f21738665dde7818425cade9b27ff2c944879d48aa2890","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"b9597e20b484f700011436a6c8b768918519980f808928de56b24225165e86e1","reqId":1558034149584193019},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":129,"txnTime":1558034149},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"gc57GehP57PUUN59tGadDjdE7LAmrfseFCqb1DgYenmFF73cUAF25gkPJxuLiFpPV5CiFPjSoAa1JQhAGUz5MDk"}]},"txn":{"data":{"data":{"alias":"england","services":[]},"dest":"DNuLANU7f1QvW1esN3Sv9Eap9j14QuLiPeYzf28Nub4W"},"metadata":{"digest":"f59bb98e1be7576c6575a5abc4ac38edd28148d84605a62437aaf3151c962f69","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"fe0b9e5440ac37828d86daa77be8a55c2b52c89274763673db58d9317c2d1925","reqId":1558034190209122296},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":130,"txnTime":1558034190},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"kU4vKskb9iZEy7YfUQWt9cVrYpmXcqTpctKCLnZ4JsQ9DCEL9ESZ9waC8Jw6qFAW7gQfDgqkehmkFbD9jZSgsyf"}]},"txn":{"data":{"data":{"alias":"korea","services":[]},"dest":"HCNuqUoXuK9GXGd2EULPaiMso2pJnxR6fCZpmRYbc7vM"},"metadata":{"digest":"45a6090bbffa535b34b103f0f4209b039e66c05fad50013d30e8cb139510d627","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"5724525adf9d82d113b1f785c39c6a3a6f6ea92e06e9dbdb57740f4e1e8a3654","reqId":1558034231813907676},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":131,"txnTime":1558034232},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"5VB9ELm2QkWug8s29obUiSxq5tWi588wnYX5nXJEmm5ewoVR5NSTHQcg9q2nm1rcy2aesVsB77e5LLWpae7uqjkb"}]},"txn":{"data":{"data":{"alias":"singapore","services":[]},"dest":"Dh99uW8jSNRBiRQ4JEMpGmJYvzmF35E6ibnmAAf7tbk8"},"metadata":{"digest":"0fb35dbf7589f7acfa487aa1eed473299d1405ed2c656b50b15175e5487f4aa9","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"0359d686d0935df89d4b8fbad5b7264104f2eef898a93cc388e67188d71980e4","reqId":1558034282845794593},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":132,"txnTime":1558034283},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"2wMAYGVoSt3ZtU3CzcvhzMAQ2EFhZvPwBsGKqpNmWvKVWbFeyC6yMZxHCVdtj2fqfj36FJkvPKkh3gwmvvrt6eeW"}]},"txn":{"data":{"data":{"alias":"virginia","services":[]},"dest":"EoGRm7eRADtHJRThMCrBXMUM2FpPRML19tNxDAG8YTP8"},"metadata":{"digest":"4ee79b267e7a5aa9ca96ee667f75dadfafdf1238c2841d2d5fa28accf542331c","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"1b4afb24a5d19cf90eb41bb9c265610a6922c6e0aa59386dc3af2016988f4dc6","reqId":1558034311268528084},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":133,"txnTime":1558034311},"ver":"1"} -{"reqSignature":{"type":"ED25519","values":[{"from":"6feBTywcmJUriqqnGc1zSJ","value":"3QyhWLE53fg8wsNRFJijV6QKax2deCAzhUa1g152KYJ7exk1iqv6mLsHtY5KXNiXLg1a8vxQiFj8Hp8iRb7CXrCA"}]},"txn":{"data":{"data":{"alias":"RFCU","services":[]},"dest":"2B8bkZX3SvcBq3amP7aeATsSPz82RyyCJQbEjZpLgZLh"},"metadata":{"digest":"58c132bc0b8c96fb7628e8b7af9a9086ff2b2c894091090f88eb328ee945fe28","from":"6feBTywcmJUriqqnGc1zSJ","payloadDigest":"64b6882e3cbf71154369d91f9da431d069b465116dada6ba685928cd11c7b9e3","reqId":1558034435821210238},"protocolVersion":2,"type":"0"},"txnMetadata":{"seqNo":134,"txnTime":1558034436},"ver":"1"} -` +# Authentication type for trust-service calls. Supported: NoAuth | ClientAuth (defaults to NoAuth if not set) +TRUST_SERVICE_AUTH_TYPE= +# Full token endpoint URL for ClientAuth (e.g. http://host:5000/v1/orgs/{clientId}/token) +TRUST_SERVICE_TOKEN_URL= +# Client credentials used for trust-service authentication (ClientAuth only) +TRUST_SERVICE_CLIENT_ID= +TRUST_SERVICE_CLIENT_SECRET= +# Trust list URL — for NoAuth: GitHub/static JSON URL; for ClientAuth: trust-service base URL +TRUST_LIST_URL= + +APP_URL= +AGENT_HTTP_URL= +HOLDER_REDIRECT= +HOLDER_CLIENT_ID= + +ALLOW_INSECURE_HTTP_URLS= + +ROOT_CA_VALIDITY_YEARS= +DCS_VALIDITY_YEARS= + +ROOT_CA_START_FROM_CURRENT_MONTH= +DCS_START_FROM_CURRENT_MONTH= + +NODE_ENV= + +# Expiry is in seconds +OID4VCI_CRED_OFFER_EXPIRY=3600 +OID4VCI_ACCESS_TOKEN_EXPIRY=3600 +OID4VCI_AUTH_CODE_EXPIRY=3600 +OID4VCI_CNONCE_EXPIRY=3600 + +# Expiry is in seconds +OID4VP_AUTH_REQUEST_PROOF_REQUEST_EXPIRY=3600 + +APP_JSON_BODY_SIZE=5mb +APP_URL_ENCODED_BODY_SIZE=5mb + +# Security +API_KEY=supersecret-that-too-16chars +UPDATE_JWT_SECRET=false + +# Status List +STATUS_LIST_SERVER_URL=https://dev-status-list.sovio.id/ +STATUS_LIST_API_KEY=test_key +STATUS_LIST_DEFAULT_SIZE=131072 +# Boolean: If we want to enable custom document loader +ENABLE_CUSTOM_DOCUMENT_LOADER=false +# If custom document loader is enabled, add the deprecated domain-url and the current/latest domain url +DEPRECATED_DOMAIN= +CURRENT_DOMAIN= +# Specify Bcovrin test genesis +BCOVRIN_TEST_GENESIS=`{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node1","blskey":"4N8aUNHSgjQVgkpm8nhNEfDf6txHznoYREg9kirmJrkivgL4oSEimFF6nsQ6M41QvhM2Z33nves5vfSn9n1UwNFJBYtWVnHYMATn76vLuL3zU88KyeAYcHfsih3He6UHcXDxcaecHVz6jhCYz1P2UZn2bDVruL5wXpehgBfBaLKm3Ba","blskey_pop":"RahHYiCvoNCtPTrVtP7nMC5eTYrsUA8WjXbdhNc8debh1agE9bGiJxWBXYNFbnJXoXhWFMvyqhqhRoq737YQemH5ik9oL7R4NTTCz2LEZhkgLJzB3QRQqJyBNyv7acbdHrAT8nQ9UkLbaVL9NBpnWXBTw4LEMePaSHEw66RzPNdAX1","client_ip":"138.197.138.255","client_port":9702,"node_ip":"138.197.138.255","node_port":9701,"services":["VALIDATOR"]},"dest":"Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv"},"metadata":{"from":"Th7MpTaRZVRYnPiabds81Y"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"fea82e10e894419fe2bea7d96296a6d46f50f93f9eeda954ec461b2ed2950b62"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node2","blskey":"37rAPpXVoxzKhz7d9gkUe52XuXryuLXoM6P6LbWDB7LSbG62Lsb33sfG7zqS8TK1MXwuCHj1FKNzVpsnafmqLG1vXN88rt38mNFs9TENzm4QHdBzsvCuoBnPH7rpYYDo9DZNJePaDvRvqJKByCabubJz3XXKbEeshzpz4Ma5QYpJqjk","blskey_pop":"Qr658mWZ2YC8JXGXwMDQTzuZCWF7NK9EwxphGmcBvCh6ybUuLxbG65nsX4JvD4SPNtkJ2w9ug1yLTj6fgmuDg41TgECXjLCij3RMsV8CwewBVgVN67wsA45DFWvqvLtu4rjNnE9JbdFTc1Z4WCPA3Xan44K1HoHAq9EVeaRYs8zoF5","client_ip":"138.197.138.255","client_port":9704,"node_ip":"138.197.138.255","node_port":9703,"services":["VALIDATOR"]},"dest":"8ECVSk179mjsjKRLWiQtssMLgp6EPhWXtaYyStWPSGAb"},"metadata":{"from":"EbP4aYNeTHL6q385GuVpRV"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"1ac8aece2a18ced660fef8694b61aac3af08ba875ce3026a160acbc3a3af35fc"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node3","blskey":"3WFpdbg7C5cnLYZwFZevJqhubkFALBfCBBok15GdrKMUhUjGsk3jV6QKj6MZgEubF7oqCafxNdkm7eswgA4sdKTRc82tLGzZBd6vNqU8dupzup6uYUf32KTHTPQbuUM8Yk4QFXjEf2Usu2TJcNkdgpyeUSX42u5LqdDDpNSWUK5deC5","blskey_pop":"QwDeb2CkNSx6r8QC8vGQK3GRv7Yndn84TGNijX8YXHPiagXajyfTjoR87rXUu4G4QLk2cF8NNyqWiYMus1623dELWwx57rLCFqGh7N4ZRbGDRP4fnVcaKg1BcUxQ866Ven4gw8y4N56S5HzxXNBZtLYmhGHvDtk6PFkFwCvxYrNYjh","client_ip":"138.197.138.255","client_port":9706,"node_ip":"138.197.138.255","node_port":9705,"services":["VALIDATOR"]},"dest":"DKVxG2fXXTU8yT5N7hGEbXB3dfdAnYv1JczDUHpmDxya"},"metadata":{"from":"4cU41vWW82ArfxJxHkzXPG"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"7e9f355dffa78ed24668f0e0e369fd8c224076571c51e2ea8be5f26479edebe4"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node4","blskey":"2zN3bHM1m4rLz54MJHYSwvqzPchYp8jkHswveCLAEJVcX6Mm1wHQD1SkPYMzUDTZvWvhuE6VNAkK3KxVeEmsanSmvjVkReDeBEMxeDaayjcZjFGPydyey1qxBHmTvAnBKoPydvuTAqx5f7YNNRAdeLmUi99gERUU7TD8KfAa6MpQ9bw","blskey_pop":"RPLagxaR5xdimFzwmzYnz4ZhWtYQEj8iR5ZU53T2gitPCyCHQneUn2Huc4oeLd2B2HzkGnjAff4hWTJT6C7qHYB1Mv2wU5iHHGFWkhnTX9WsEAbunJCV2qcaXScKj4tTfvdDKfLiVuU2av6hbsMztirRze7LvYBkRHV3tGwyCptsrP","client_ip":"138.197.138.255","client_port":9708,"node_ip":"138.197.138.255","node_port":9707,"services":["VALIDATOR"]},"dest":"4PS3EDQ3dW1tci1Bp6543CfuuebjFrg36kLAUcskGfaA"},"metadata":{"from":"TWwCRQRZ2ZHMJFn9TzLp7W"},"type":"0"},"txnMetadata":{"seqNo":4,"txnId":"aa5e817d7cc626170eca175822029339a444eb0ee8f0bd20d3b0b76e566fb008"},"ver":"1"}` + +# Specify Indicio test genesis +INDICIO_TEST_GENESIS=`{"reqSignature":{},"txn":{"data":{"data":{"alias":"OpsNode","blskey":"4i39oJqm7fVX33gnYEbFdGurMtwYQJgDEYfXdYykpbJMWogByocaXxKbuXdrg3k9LP33Tamq64gUwnm4oA7FkxqJ5h4WfKH6qyVLvmBu5HgeV8Rm1GJ33mKX6LWPbm1XE9TfzpQXJegKyxHQN9ABquyBVAsfC6NSM4J5t1QGraJBfZi","blskey_pop":"Qq3CzhSfugsCJotxSCRAnPjmNDJidDz7Ra8e4xvLTEzQ5w3ppGray9KynbGPH8T7XnUTU1ioZadTbjXaRY26xd4hQ3DxAyR4GqBymBn3UBomLRJHmj7ukcdJf9WE6tu1Fp1EhxmyaMqHv13KkDrDfCthgd2JjAWvSgMGWwAAzXEow5","client_ip":"13.58.197.208","client_port":"9702","node_ip":"3.135.134.42","node_port":"9701","services":["VALIDATOR"]},"dest":"EVwxHoKXUy2rnRzVdVKnJGWFviamxMwLvUso7KMjjQNH"},"metadata":{"from":"Pms5AZzgPWHSj6nNmJDfmo"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"77ad6682f320be9969f70a37d712344afed8e3fba8d43fa5602c81b578d26088"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"cynjanode","blskey":"32DLSweyJRxVMcVKGjUeNkVF1fwyFfRcFqGU9x7qL2ox2STpF6VxZkbxoLkGMPnt3gywRaY6jAjqgC8XMkf3webMJ4SEViPtBKZJjCCFTf4tGXfEsMwinummaPja85GgTALf7DddCNyCojmkXWHpgjrLx3626Z2MiNxVbaMapG2taFX","blskey_pop":"RQRU8GVYSYZeu9dfH6myhzZ2qfxeVpCL3bTzgto1bRbx3QCt3mFFQQBVbgrqui2JpXhcWXxoDzp1WyYbSZwYqYQbRmvK7PPG82VAvVagv1n83Qa3cdyGwCevZdEzxuETiiXBRWSPfb4JibAXPKkLZHyQHWCEHcAEVeXtx7FRS1wjTd","client_ip":"3.17.103.221","client_port":"9702","node_ip":"3.17.215.226","node_port":"9701","services":["VALIDATOR"]},"dest":"iTq944JTtwHnst7rucfsRA4m26x9i6zCKKohETBCiWu"},"metadata":{"from":"QC174PGaL4zA9YHYqofPH2"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"ce7361e44ec10a275899ece1574f6e38f2f3c7530c179fa07a2924e55775759b"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"GlobaliD","blskey":"4Behdr1KJfLTAPNospghtL7iWdCHca6MZDxAtzYNXq35QCUr4aqpLu6p4Sgu9wNbTACB3DbwmVgE2L7hX6UsasuvZautqUpf4nC5viFpH7X6mHyqLreBJTBH52tSwifQhRjuFAySbbfyRK3wb6R2Emxun9GY7MFNuy792LXYg4C6sRJ","blskey_pop":"RKYDRy8oTxKnyAV3HocapavH2jkw3PVe54JcEekxXz813DFbEy87N3i3BNqwHB7MH93qhtTRb7EZMaEiYhm92uaLKyubUMo5Rqjve2jbEdYEYVRmgNJWpxFKCmUBa5JwBWYuGunLMZZUTU3qjbdDXkJ9UNMQxDULCPU5gzLTy1B5kb","client_ip":"13.56.175.126","client_port":"9702","node_ip":"50.18.84.131","node_port":"9701","services":["VALIDATOR"]},"dest":"2ErWxamsNGBfhkFnwYgs4UW4aApct1kHUvu7jbkA1xX4"},"metadata":{"from":"4H8us7B1paLW9teANv8nam"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"0c3b33b77e0419d6883be35d14b389c3936712c38a469ac5320a3cae68be1293"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"IdRamp","blskey":"LoYzqUMPDZEfRshwGSzkgATxcM5FAS1LYx896zHnMfXP7duDsCQ6CBG2akBkZzgH3tBMvnjhs2z7PFc2gFeaKUF9fKDHhtbVqPofxH3ebcRfA959qU9mgvmkUwMUgwd21puRU6BebUwBiYxMxcE5ChReBnAkdAv19gVorm3prBMk94","blskey_pop":"R1DjpsG7UxgwstuF7WDUL17a9Qq64vCozwJZ88bTrSDPwC1cdRn3WmhqJw5LpEhFQJosDSVVT6tS8dAZrrssRv2YsELbfGEJ7ZGjhNjZHwhqg4qeustZ7PZZE3Vr1ALSHY4Aa6KpNzGodxu1XymYZWXAFokPAs3Kho8mKcJwLCHn3h","client_ip":"207.126.128.12","client_port":"9702","node_ip":"207.126.129.12","node_port":"9701","services":["VALIDATOR"]},"dest":"5Zj5Aec6Kt9ki1runrXu87wZ522mnm3zwmaoHLUcHLx9"},"metadata":{"from":"AFLDFPoJuDQUHqnfmg8U7i"},"type":"0"},"txnMetadata":{"seqNo":4,"txnId":"c9df105558333ac8016610d9da5aad1e9a5dd50b9d9cc5684e94f439fa10f836"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"idlab-node01","blskey":"2fjJVi33U1tCTjW77cJaf1NLz7EzWkVNzR9BEQpVVK64MJpRKNUzt6k7Td2U8yqU5hGyAFH5N7ZymSB55TnpC3rJYLVTcGXZeXpmrQx3mwnXNyfTDnxfTpdQ1KMoFeZoDPZ8acfaH8GWeW2jL1qREE52tetBf4tXTeshmWzGkEN7r4y","blskey_pop":"RSjiM6dYUmN2rv2ca7dUCmEKrivq12rhxhXUKHdmSwUxbCmcijsgoERjYG7MqxhKLjSAJ5715K23fVEc6uK1kTenKmYCcCts8MLMAQG8Upb22nfgHJ3py8RwRoACeAjFF3myAMNRJJPhUdv96drJdwkGRv7f6JjvoB5KWVQYTNgheP","client_ip":"205.159.92.17","client_port":"9702","node_ip":"205.159.92.16","node_port":"9701","services":["VALIDATOR"]},"dest":"8czYgwmLDazVrBHuo53Tyx7Tw8ZhvnoC2BfhQGir4r8F"},"metadata":{"from":"PN8wFxLKjdkwyxoEEXwyz2"},"type":"0"},"txnMetadata":{"seqNo":5,"txnId":"9237eca7d2a203f6e1779f63064d2f22cf28e1bcd4e6fe5d791b15e82969acdc"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"lorica-identity-node1","blskey":"wUh24sVCQ8PHDgSb343g2eLxjD5vwxsrETfuV2sbwMNnYon9nhbaK5jcWTekvXtyiwxHxuiCCoZwKS97MQEAeC2oLbbMeKjYm212QwSnm7aKLEqTStXht35VqZvZLT7Q3mPQRYLjMGixdn4ocNHrBTMwPUQYycEqwaHWgE1ncDueXY","blskey_pop":"R2sMwF7UW6AaD4ALa1uB1YVPuP6JsdJ7LsUoViM9oySFqFt34C1x1tdHDysS9wwruzaaEFui6xNPqJ8eu3UBqcFKkoWhdsMqCALwe63ytxPwvtLtCffJLhHAcgrPC7DorXYdqhdG2cevdqc5oqFEAaKoFDBf12p5SsbbM4PYWCmVCb","client_ip":"35.225.220.151","client_port":"9702","node_ip":"35.224.26.110","node_port":"9701","services":["VALIDATOR"]},"dest":"k74ZsZuUaJEcB8RRxMwkCwdE5g1r9yzA3nx41qvYqYf"},"metadata":{"from":"Ex6hzsJFYzNJ7kzbfncNeU"},"type":"0"},"txnMetadata":{"seqNo":6,"txnId":"6880673ce4ae4a2352f103d2a6ae20469dd070f2027283a1da5e62a64a59d688"},"ver":"1"} +{"reqSignature":{},"txn":{"data":{"data":{"alias":"cysecure-itn","blskey":"GdCvMLkkBYevRFi93b6qaj9G2u1W6Vnbg8QhRD1chhrWR8vRE8x9x7KXVeUBPFf6yW5qq2JCfA2frc8SGni2RwjtTagezfwAwnorLhVJqS5ZxTi4pgcw6smebnt4zWVhTkh6ugDHEypHwNQBcw5WhBZcEJKgNbyVLnHok9ob6cfr3u","blskey_pop":"RbH9mY7M5p3UB3oj4sT1skYwMkxjoUnja8eTYfcm83VcNbxC9zR9pCiRhk4q1dJT3wkDBPGNKnk2p83vaJYLcgMuJtzoWoJAWAxjb3Mcq8Agf6cgQpBuzBq2uCzFPuQCAhDS4Kv9iwA6FsRnfvoeFTs1hhgSJVxQzDWMVTVAD9uCqu","client_ip":"35.169.19.171","client_port":"9702","node_ip":"54.225.56.21","node_port":"9701","services":["VALIDATOR"]},"dest":"4ETBDmHzx8iDQB6Xygmo9nNXtMgq9f6hxGArNhQ6Hh3u"},"metadata":{"from":"uSXXXEdBicPHMMhr3ddNF"},"type":"0"},"txnMetadata":{"seqNo":7,"txnId":"3c21718b07806b2f193b35953dda5b68b288efd551dce4467ce890703d5ba549"},"ver":"1"}` +# ─── Data Purge ─────────────────────────────────────────────────────────────── +# Automatically deletes records after a configurable TTL. +# Two independent flows — enable one or both: +# Flow A (NATS): schedules deletion at offer-creation time via NATS JetStream +# Flow B (Cron): periodically scans DB and deletes records older than TTL + +# Master switch — set to true to activate purge system +PURGE_ENABLED= +# Set to false to skip webhook calls after deletion (default: true) +PURGE_WEBHOOK_ENABLED= + +# ── Flow A: NATS (requires NATS_SERVERS below) ──────────────────────────────── +PURGE_NATS_ENABLED= +PURGE_NATS_TTL_SECONDS= # seconds from offer creation to deletion (e.g. 2592000 = 30 days) + +# ── Flow B: Cron (DB scan, no NATS required) ────────────────────────────────── +PURGE_CRON_ENABLED= +PURGE_CRON_TTL_SECONDS= # records older than this (createdAt) are deleted (e.g. 2592000 = 30 days) +PURGE_CRON_SCHEDULE= # cron expression for scan frequency (e.g. 0 * * * * = hourly) + +# ── Optional: per-type record filtering ─────────────────────────────────────── +# Uncomment to restrict purge to specific record types (default: all types enabled) +# PURGE_DIDCOMM_CREDENTIAL=true +# PURGE_DIDCOMM_PROOF=true +# PURGE_OID4VC_ISSUANCE=true +# PURGE_OID4VC_VERIFICATION=true + +# ─── NATS Connection (required for Flow A) ──────────────────────────────────── +NATS_SERVERS= +# Auth type — one of: nkey | creds | usernamePassword | none +NATS_AUTH_TYPE= +NATS_NKEY_SEED= # required when NATS_AUTH_TYPE=nkey # required when NATS_AUTH_TYPE=usernamePassword diff --git a/.sonarcloud.properties b/.sonarcloud.properties new file mode 100644 index 00000000..76caf6f6 --- /dev/null +++ b/.sonarcloud.properties @@ -0,0 +1 @@ +sonar.exclusions=samples/cliConfig.json,src/routes/routes.ts diff --git a/Dockerfile b/Dockerfile index 782ed195..6be76a6c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Stage 1: Builder stage -FROM node:18.19.0 AS builder +FROM node:22.22.0 AS builder WORKDIR /app @@ -18,8 +18,15 @@ RUN yarn global add patch-package # Build the application RUN yarn build -# Stage 2: Production stage -FROM node:18.19.0-slim +# Stage 2: Production stage +FROM node:22.22.0-slim + +# Update system packages and install security updates +RUN apt-get update && apt-get upgrade -y && \ + apt-get install -y --no-install-recommends \ + ca-certificates && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* WORKDIR /app @@ -30,5 +37,12 @@ COPY --from=builder /app/package.json ./ COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/patches ./patches +# Create non-root user for security +RUN groupadd -r appuser && useradd -r -g appuser appuser && \ + chown -R appuser:appuser /app && \ + chmod -R 755 /app + +USER appuser + # Set entry point ENTRYPOINT ["node", "./bin/afj-rest.js", "start"] diff --git a/eslint.config.mjs b/eslint.config.mjs index 9b366d5c..e35eed41 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -9,12 +9,12 @@ const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); export default [ + { + ignores: ['**/build/**', '**/*.js', '**/*.d.ts'], + }, { ignores: [ - '**/tests/*', - '**/build/**', - '**/*.js', - '**/*.d.ts', + '**/tests/*', ], files: ['**/*.ts'], languageOptions: { diff --git a/package.json b/package.json index 8ef8a494..9ad5fcdc 100644 --- a/package.json +++ b/package.json @@ -39,18 +39,20 @@ "validate": "yarn lint && yarn check-types && yarn check-format" }, "dependencies": { - "@ayanworks/credo-polygon-w3c-module": "1.0.1-alpha.1", - "@credo-ts/anoncreds": "0.5.15", - "@credo-ts/askar": "0.5.15", - "@credo-ts/core": "0.5.15", - "@credo-ts/indy-vdr": "0.5.15", - "@credo-ts/node": "^0.5.15", + "@ayanworks/credo-polygon-w3c-module": "2.0.2", + "@sd-jwt/jwt-status-list": "0.19.0", + "@credo-ts/anoncreds": "0.6.2", + "@credo-ts/askar": "0.6.2", + "@credo-ts/core": "0.6.2", + "@credo-ts/didcomm": "0.6.2", + "@credo-ts/indy-vdr": "0.6.2", + "@credo-ts/node": "0.6.2", + "@credo-ts/openid4vc": "0.6.2", "@credo-ts/push-notifications": "^0.7.1", - "@credo-ts/question-answer": "0.5.15", - "@credo-ts/tenants": "0.5.15", - "@hyperledger/anoncreds-nodejs": "0.3.1", - "@hyperledger/aries-askar-nodejs": "0.2.3", - "@hyperledger/indy-vdr-nodejs": "0.2.2", + "@credo-ts/question-answer": "0.6.2", + "@credo-ts/tenants": "0.6.2", + "@hyperledger/anoncreds-nodejs": "^0.3.4", + "@hyperledger/indy-vdr-nodejs": "^0.2.3", "@opentelemetry/api": "^1.9.0", "@opentelemetry/exporter-logs-otlp-http": "^0.202.0", "@opentelemetry/exporter-trace-otlp-http": "^0.202.0", @@ -61,12 +63,13 @@ "@opentelemetry/sdk-logs": "^0.202.0", "@opentelemetry/sdk-node": "^0.202.0", "@opentelemetry/semantic-conventions": "^1.34.0", + "@openwallet-foundation/askar-nodejs": "^0.4.3", "@tsoa/runtime": "^6.6.0", "@types/node-fetch": "^2.6.4", "@types/ref-struct-di": "^1.1.12", "@types/uuid": "^10.0.0", "@types/ws": "^8.18.1", - "axios": "^1.9.0", + "axios": "1.13.5", "body-parser": "^2.2.0", "cors": "^2.8.5", "dotenv": "^16.5.0", @@ -74,13 +77,16 @@ "express-rate-limit": "^7.5.0", "joi": "^17.13.3", "jsonwebtoken": "^9.0.2", + "nats": "^2.29.3", + "node-cron": "^4.2.1", "node-fetch": "2", "patch-package": "^8.0.0", "reflect-metadata": "^0.2.2", "swagger-ui-express": "^4.4.0", "tslog": "^3.3.3", "tsoa": "^6.0.1", - "tsyringe": "^4.8.0", + "tsyringe": "^4.10.0", + "uuid": "^13.0.0", "ws": "^8.18.2", "yargs": "^17.7.2" }, @@ -94,6 +100,7 @@ "@types/jsonwebtoken": "^9.0.9", "@types/multer": "^1.4.12", "@types/node": "^20.17.0", + "@types/node-cron": "^3.0.11", "@types/ref-array-di": "^1.2.8", "@types/ref-struct-di": "^1.1.12", "@types/supertest": "^6.0.3", @@ -115,7 +122,9 @@ "typescript": "^5.8.3" }, "resolutions": { - "@credo-ts/core": "0.5.15", - "@credo-ts/askar": "0.5.15" + "@credo-ts/core": "0.6.2", + "@credo-ts/askar": "0.6.2", + "flatted": "3.4.0", + "undici": "6.24.0" } } diff --git a/patches/@credo-ts+anoncreds+0.5.3+001+fix: Extensible model confict in Anoncreds and Did.patch b/patches/@credo-ts+anoncreds+0.5.3+001+fix: Extensible model confict in Anoncreds and Did.patch deleted file mode 100644 index 454a3389..00000000 --- a/patches/@credo-ts+anoncreds+0.5.3+001+fix: Extensible model confict in Anoncreds and Did.patch +++ /dev/null @@ -1,272 +0,0 @@ -diff --git a/node_modules/@credo-ts/anoncreds/build/AnonCredsApi.d.ts b/node_modules/@credo-ts/anoncreds/build/AnonCredsApi.d.ts -index e9d0a20..479b157 100644 ---- a/node_modules/@credo-ts/anoncreds/build/AnonCredsApi.d.ts -+++ b/node_modules/@credo-ts/anoncreds/build/AnonCredsApi.d.ts -@@ -1,7 +1,7 @@ - import type { AnonCredsCreateLinkSecretOptions, AnonCredsRegisterCredentialDefinitionOptions, AnonCredsRegisterRevocationRegistryDefinitionOptions, AnonCredsRegisterRevocationStatusListOptions, AnonCredsUpdateRevocationStatusListOptions } from './AnonCredsApiOptions'; - import type { AnonCredsSchema } from './models'; - import type { GetCredentialDefinitionReturn, GetCredentialsOptions, GetRevocationRegistryDefinitionReturn, GetRevocationStatusListReturn, GetSchemaReturn, RegisterCredentialDefinitionReturn, RegisterSchemaReturn, RegisterRevocationRegistryDefinitionReturn, RegisterRevocationStatusListReturn } from './services'; --import type { Extensible } from './services/registry/base'; -+import type { CredoExtensible } from './services/registry/base'; - import type { SimpleQuery } from '@credo-ts/core'; - import { AgentContext } from '@credo-ts/core'; - import { AnonCredsModuleConfig } from './AnonCredsModuleConfig'; -@@ -41,28 +41,28 @@ export declare class AnonCredsApi { - * with the {@link schemaId} - */ - getSchema(schemaId: string): Promise; -- registerSchema(options: AnonCredsRegisterSchema): Promise; -+ registerSchema(options: AnonCredsRegisterSchema): Promise; - getCreatedSchemas(query: SimpleQuery): Promise; - /** - * Retrieve a {@link GetCredentialDefinitionReturn} from the registry associated - * with the {@link credentialDefinitionId} - */ - getCredentialDefinition(credentialDefinitionId: string): Promise; -- registerCredentialDefinition(options: AnonCredsRegisterCredentialDefinition): Promise; -+ registerCredentialDefinition(options: AnonCredsRegisterCredentialDefinition): Promise; - getCreatedCredentialDefinitions(query: SimpleQuery): Promise; - /** - * Retrieve a {@link AnonCredsRevocationRegistryDefinition} from the registry associated - * with the {@link revocationRegistryDefinitionId} - */ - getRevocationRegistryDefinition(revocationRegistryDefinitionId: string): Promise; -- registerRevocationRegistryDefinition(options: AnonCredsRegisterRevocationRegistryDefinition): Promise; -+ registerRevocationRegistryDefinition(options: AnonCredsRegisterRevocationRegistryDefinition): Promise; - /** - * Retrieve the {@link AnonCredsRevocationStatusList} for the given {@link timestamp} from the registry associated - * with the {@link revocationRegistryDefinitionId} - */ - getRevocationStatusList(revocationRegistryDefinitionId: string, timestamp: number): Promise; -- registerRevocationStatusList(options: AnonCredsRegisterRevocationStatusList): Promise; -- updateRevocationStatusList(options: AnonCredsUpdateRevocationStatusList): Promise; -+ registerRevocationStatusList(options: AnonCredsRegisterRevocationStatusList): Promise; -+ updateRevocationStatusList(options: AnonCredsUpdateRevocationStatusList): Promise; - getCredential(id: string): Promise; - getCredentials(options: GetCredentialsOptions): Promise; - private storeRevocationRegistryDefinitionRecord; -@@ -74,23 +74,23 @@ export declare class AnonCredsApi { - export interface AnonCredsRegisterCredentialDefinitionApiOptions { - supportRevocation: boolean; - } --interface AnonCredsRegisterCredentialDefinition { -+interface AnonCredsRegisterCredentialDefinition { - credentialDefinition: AnonCredsRegisterCredentialDefinitionOptions; - options: T & AnonCredsRegisterCredentialDefinitionApiOptions; - } --interface AnonCredsRegisterSchema { -+interface AnonCredsRegisterSchema { - schema: AnonCredsSchema; - options: T; - } --interface AnonCredsRegisterRevocationRegistryDefinition { -+interface AnonCredsRegisterRevocationRegistryDefinition { - revocationRegistryDefinition: AnonCredsRegisterRevocationRegistryDefinitionOptions; - options: T; - } --interface AnonCredsRegisterRevocationStatusList { -+interface AnonCredsRegisterRevocationStatusList { - revocationStatusList: AnonCredsRegisterRevocationStatusListOptions; - options: T; - } --interface AnonCredsUpdateRevocationStatusList { -+interface AnonCredsUpdateRevocationStatusList { - revocationStatusList: AnonCredsUpdateRevocationStatusListOptions; - options: T; - } -diff --git a/node_modules/@credo-ts/anoncreds/build/repository/anonCredsCredentialDefinitionRecordMetadataTypes.d.ts b/node_modules/@credo-ts/anoncreds/build/repository/anonCredsCredentialDefinitionRecordMetadataTypes.d.ts -index 2980520..0304d87 100644 ---- a/node_modules/@credo-ts/anoncreds/build/repository/anonCredsCredentialDefinitionRecordMetadataTypes.d.ts -+++ b/node_modules/@credo-ts/anoncreds/build/repository/anonCredsCredentialDefinitionRecordMetadataTypes.d.ts -@@ -1,9 +1,9 @@ --import type { Extensible } from '../services/registry/base'; -+import type { CredoExtensible } from '../services/registry/base'; - export declare enum AnonCredsCredentialDefinitionRecordMetadataKeys { - CredentialDefinitionRegistrationMetadata = "_internal/anonCredsCredentialDefinitionRegistrationMetadata", - CredentialDefinitionMetadata = "_internal/anonCredsCredentialDefinitionMetadata" - } - export type AnonCredsCredentialDefinitionRecordMetadata = { -- [AnonCredsCredentialDefinitionRecordMetadataKeys.CredentialDefinitionRegistrationMetadata]: Extensible; -- [AnonCredsCredentialDefinitionRecordMetadataKeys.CredentialDefinitionMetadata]: Extensible; -+ [AnonCredsCredentialDefinitionRecordMetadataKeys.CredentialDefinitionRegistrationMetadata]: CredoExtensible; -+ [AnonCredsCredentialDefinitionRecordMetadataKeys.CredentialDefinitionMetadata]: CredoExtensible; - }; -diff --git a/node_modules/@credo-ts/anoncreds/build/repository/anonCredsRevocationRegistryDefinitionRecordMetadataTypes.d.ts b/node_modules/@credo-ts/anoncreds/build/repository/anonCredsRevocationRegistryDefinitionRecordMetadataTypes.d.ts -index 25aea87..1b0c4aa 100644 ---- a/node_modules/@credo-ts/anoncreds/build/repository/anonCredsRevocationRegistryDefinitionRecordMetadataTypes.d.ts -+++ b/node_modules/@credo-ts/anoncreds/build/repository/anonCredsRevocationRegistryDefinitionRecordMetadataTypes.d.ts -@@ -1,9 +1,9 @@ --import type { Extensible } from '../services/registry/base'; -+import type { CredoExtensible } from '../services/registry/base'; - export declare enum AnonCredsRevocationRegistryDefinitionRecordMetadataKeys { - RevocationRegistryDefinitionRegistrationMetadata = "_internal/anonCredsRevocationRegistryDefinitionRegistrationMetadata", - RevocationRegistryDefinitionMetadata = "_internal/anonCredsRevocationRegistryDefinitionMetadata" - } - export type AnonCredsRevocationRegistryDefinitionRecordMetadata = { -- [AnonCredsRevocationRegistryDefinitionRecordMetadataKeys.RevocationRegistryDefinitionRegistrationMetadata]: Extensible; -- [AnonCredsRevocationRegistryDefinitionRecordMetadataKeys.RevocationRegistryDefinitionMetadata]: Extensible; -+ [AnonCredsRevocationRegistryDefinitionRecordMetadataKeys.RevocationRegistryDefinitionRegistrationMetadata]: CredoExtensible; -+ [AnonCredsRevocationRegistryDefinitionRecordMetadataKeys.RevocationRegistryDefinitionMetadata]: CredoExtensible; - }; -diff --git a/node_modules/@credo-ts/anoncreds/build/repository/anonCredsSchemaRecordMetadataTypes.d.ts b/node_modules/@credo-ts/anoncreds/build/repository/anonCredsSchemaRecordMetadataTypes.d.ts -index 452ec04..f66058d 100644 ---- a/node_modules/@credo-ts/anoncreds/build/repository/anonCredsSchemaRecordMetadataTypes.d.ts -+++ b/node_modules/@credo-ts/anoncreds/build/repository/anonCredsSchemaRecordMetadataTypes.d.ts -@@ -1,9 +1,9 @@ --import type { Extensible } from '../services/registry/base'; -+import type { CredoExtensible } from '../services/registry/base'; - export declare enum AnonCredsSchemaRecordMetadataKeys { - SchemaRegistrationMetadata = "_internal/anonCredsSchemaRegistrationMetadata", - SchemaMetadata = "_internal/anonCredsSchemaMetadata" - } - export type AnonCredsSchemaRecordMetadata = { -- [AnonCredsSchemaRecordMetadataKeys.SchemaRegistrationMetadata]: Extensible; -- [AnonCredsSchemaRecordMetadataKeys.SchemaMetadata]: Extensible; -+ [AnonCredsSchemaRecordMetadataKeys.SchemaRegistrationMetadata]: CredoExtensible; -+ [AnonCredsSchemaRecordMetadataKeys.SchemaMetadata]: CredoExtensible; - }; -diff --git a/node_modules/@credo-ts/anoncreds/build/services/registry/CredentialDefinitionOptions.d.ts b/node_modules/@credo-ts/anoncreds/build/services/registry/CredentialDefinitionOptions.d.ts -index 95c0949..aa82d57 100644 ---- a/node_modules/@credo-ts/anoncreds/build/services/registry/CredentialDefinitionOptions.d.ts -+++ b/node_modules/@credo-ts/anoncreds/build/services/registry/CredentialDefinitionOptions.d.ts -@@ -1,14 +1,14 @@ --import type { AnonCredsOperationStateAction, AnonCredsOperationStateFailed, AnonCredsOperationStateFinished, AnonCredsOperationStateWait, AnonCredsResolutionMetadata, Extensible } from './base'; -+import type { AnonCredsOperationStateAction, AnonCredsOperationStateFailed, AnonCredsOperationStateFinished, AnonCredsOperationStateWait, AnonCredsResolutionMetadata, CredoExtensible } from './base'; - import type { AnonCredsCredentialDefinition } from '../../models/registry'; - export interface GetCredentialDefinitionReturn { - credentialDefinition?: AnonCredsCredentialDefinition; - credentialDefinitionId: string; - resolutionMetadata: AnonCredsResolutionMetadata; -- credentialDefinitionMetadata: Extensible; -+ credentialDefinitionMetadata: CredoExtensible; - } - export interface RegisterCredentialDefinitionOptions { - credentialDefinition: AnonCredsCredentialDefinition; -- options: Extensible; -+ options: CredoExtensible; - } - export interface RegisterCredentialDefinitionReturnStateFailed extends AnonCredsOperationStateFailed { - credentialDefinition?: AnonCredsCredentialDefinition; -@@ -29,6 +29,6 @@ export interface RegisterCredentialDefinitionReturnStateAction extends AnonCreds - export interface RegisterCredentialDefinitionReturn { - jobId?: string; - credentialDefinitionState: RegisterCredentialDefinitionReturnStateWait | RegisterCredentialDefinitionReturnStateAction | RegisterCredentialDefinitionReturnStateFinished | RegisterCredentialDefinitionReturnStateFailed; -- credentialDefinitionMetadata: Extensible; -- registrationMetadata: Extensible; -+ credentialDefinitionMetadata: CredoExtensible; -+ registrationMetadata: CredoExtensible; - } -diff --git a/node_modules/@credo-ts/anoncreds/build/services/registry/RevocationRegistryDefinitionOptions.d.ts b/node_modules/@credo-ts/anoncreds/build/services/registry/RevocationRegistryDefinitionOptions.d.ts -index e911d79..df4fa0b 100644 ---- a/node_modules/@credo-ts/anoncreds/build/services/registry/RevocationRegistryDefinitionOptions.d.ts -+++ b/node_modules/@credo-ts/anoncreds/build/services/registry/RevocationRegistryDefinitionOptions.d.ts -@@ -1,14 +1,14 @@ --import type { AnonCredsOperationStateWait, AnonCredsOperationStateFailed, AnonCredsOperationStateFinished, AnonCredsResolutionMetadata, Extensible, AnonCredsOperationStateAction } from './base'; -+import type { AnonCredsOperationStateWait, AnonCredsOperationStateFailed, AnonCredsOperationStateFinished, AnonCredsResolutionMetadata, CredoExtensible, AnonCredsOperationStateAction } from './base'; - import type { AnonCredsRevocationRegistryDefinition } from '../../models/registry'; - export interface GetRevocationRegistryDefinitionReturn { - revocationRegistryDefinition?: AnonCredsRevocationRegistryDefinition; - revocationRegistryDefinitionId: string; - resolutionMetadata: AnonCredsResolutionMetadata; -- revocationRegistryDefinitionMetadata: Extensible; -+ revocationRegistryDefinitionMetadata: CredoExtensible; - } - export interface RegisterRevocationRegistryDefinitionOptions { - revocationRegistryDefinition: AnonCredsRevocationRegistryDefinition; -- options: Extensible; -+ options: CredoExtensible; - } - export interface RegisterRevocationRegistryDefinitionReturnStateAction extends AnonCredsOperationStateAction { - revocationRegistryDefinition: AnonCredsRevocationRegistryDefinition; -@@ -29,6 +29,6 @@ export interface RegisterRevocationRegistryDefinitionReturnStateFinished extends - export interface RegisterRevocationRegistryDefinitionReturn { - jobId?: string; - revocationRegistryDefinitionState: RegisterRevocationRegistryDefinitionReturnStateWait | RegisterRevocationRegistryDefinitionReturnStateAction | RegisterRevocationRegistryDefinitionReturnStateFailed | RegisterRevocationRegistryDefinitionReturnStateFinished; -- revocationRegistryDefinitionMetadata: Extensible; -- registrationMetadata: Extensible; -+ revocationRegistryDefinitionMetadata: CredoExtensible; -+ registrationMetadata: CredoExtensible; - } -diff --git a/node_modules/@credo-ts/anoncreds/build/services/registry/RevocationStatusListOptions.d.ts b/node_modules/@credo-ts/anoncreds/build/services/registry/RevocationStatusListOptions.d.ts -index b5ee11d..01b38dd 100644 ---- a/node_modules/@credo-ts/anoncreds/build/services/registry/RevocationStatusListOptions.d.ts -+++ b/node_modules/@credo-ts/anoncreds/build/services/registry/RevocationStatusListOptions.d.ts -@@ -1,16 +1,16 @@ --import type { AnonCredsOperationStateWait, AnonCredsOperationStateFailed, AnonCredsOperationStateFinished, AnonCredsResolutionMetadata, Extensible, AnonCredsOperationStateAction } from './base'; -+import type { AnonCredsOperationStateWait, AnonCredsOperationStateFailed, AnonCredsOperationStateFinished, AnonCredsResolutionMetadata, CredoExtensible, AnonCredsOperationStateAction } from './base'; - import type { AnonCredsRevocationStatusList } from '../../models/registry'; - import type { Optional } from '@credo-ts/core'; - export interface GetRevocationStatusListReturn { - revocationStatusList?: AnonCredsRevocationStatusList; - resolutionMetadata: AnonCredsResolutionMetadata; -- revocationStatusListMetadata: Extensible; -+ revocationStatusListMetadata: CredoExtensible; - } - export type AnonCredsRevocationStatusListWithoutTimestamp = Omit; - export type AnonCredsRevocationStatusListWithOptionalTimestamp = Optional; - export interface RegisterRevocationStatusListOptions { - revocationStatusList: AnonCredsRevocationStatusListWithoutTimestamp; -- options: Extensible; -+ options: CredoExtensible; - } - export interface RegisterRevocationStatusListReturnStateAction extends AnonCredsOperationStateAction { - revocationStatusList: AnonCredsRevocationStatusListWithOptionalTimestamp; -@@ -27,6 +27,6 @@ export interface RegisterRevocationStatusListReturnStateFinished extends AnonCre - export interface RegisterRevocationStatusListReturn { - jobId?: string; - revocationStatusListState: RegisterRevocationStatusListReturnStateWait | RegisterRevocationStatusListReturnStateAction | RegisterRevocationStatusListReturnStateFailed | RegisterRevocationStatusListReturnStateFinished; -- revocationStatusListMetadata: Extensible; -- registrationMetadata: Extensible; -+ revocationStatusListMetadata: CredoExtensible; -+ registrationMetadata: CredoExtensible; - } -diff --git a/node_modules/@credo-ts/anoncreds/build/services/registry/SchemaOptions.d.ts b/node_modules/@credo-ts/anoncreds/build/services/registry/SchemaOptions.d.ts -index 2743b39..6aee13e 100644 ---- a/node_modules/@credo-ts/anoncreds/build/services/registry/SchemaOptions.d.ts -+++ b/node_modules/@credo-ts/anoncreds/build/services/registry/SchemaOptions.d.ts -@@ -1,14 +1,14 @@ --import type { AnonCredsOperationStateAction, AnonCredsOperationStateFailed, AnonCredsOperationStateFinished, AnonCredsOperationStateWait, AnonCredsResolutionMetadata, Extensible } from './base'; -+import type { AnonCredsOperationStateAction, AnonCredsOperationStateFailed, AnonCredsOperationStateFinished, AnonCredsOperationStateWait, AnonCredsResolutionMetadata, CredoExtensible } from './base'; - import type { AnonCredsSchema } from '../../models/registry'; - export interface GetSchemaReturn { - schema?: AnonCredsSchema; - schemaId: string; - resolutionMetadata: AnonCredsResolutionMetadata; -- schemaMetadata: Extensible; -+ schemaMetadata: CredoExtensible; - } - export interface RegisterSchemaOptions { - schema: AnonCredsSchema; -- options: Extensible; -+ options: CredoExtensible; - } - export interface RegisterSchemaReturnStateFailed extends AnonCredsOperationStateFailed { - schema?: AnonCredsSchema; -@@ -29,6 +29,6 @@ export interface RegisterSchemaReturnStateWait extends AnonCredsOperationStateWa - export interface RegisterSchemaReturn { - jobId?: string; - schemaState: RegisterSchemaReturnStateWait | RegisterSchemaReturnStateAction | RegisterSchemaReturnStateFinished | RegisterSchemaReturnStateFailed; -- schemaMetadata: Extensible; -- registrationMetadata: Extensible; -+ schemaMetadata: CredoExtensible; -+ registrationMetadata: CredoExtensible; - } -diff --git a/node_modules/@credo-ts/anoncreds/build/services/registry/base.d.ts b/node_modules/@credo-ts/anoncreds/build/services/registry/base.d.ts -index 3b37667..931bcc6 100644 ---- a/node_modules/@credo-ts/anoncreds/build/services/registry/base.d.ts -+++ b/node_modules/@credo-ts/anoncreds/build/services/registry/base.d.ts -@@ -1,4 +1,4 @@ --export type Extensible = Record; -+export type CredoExtensible = Record; - export interface AnonCredsOperationStateWait { - state: 'wait'; - } -@@ -13,7 +13,7 @@ export interface AnonCredsOperationStateFailed { - state: 'failed'; - reason: string; - } --export interface AnonCredsResolutionMetadata extends Extensible { -+export interface AnonCredsResolutionMetadata extends CredoExtensible { - error?: 'invalid' | 'notFound' | 'unsupportedAnonCredsMethod' | string; - message?: string; - } \ No newline at end of file diff --git a/patches/@credo-ts+core+0.5.15+001+message-type-for-messages.patch b/patches/@credo-ts+core+0.5.15+001+message-type-for-messages.patch deleted file mode 100644 index d4ed27a7..00000000 --- a/patches/@credo-ts+core+0.5.15+001+message-type-for-messages.patch +++ /dev/null @@ -1,43 +0,0 @@ -diff --git a/node_modules/@credo-ts/core/build/agent/EnvelopeService.js b/node_modules/@credo-ts/core/build/agent/EnvelopeService.js -index 72821a7..d11d209 100644 ---- a/node_modules/@credo-ts/core/build/agent/EnvelopeService.js -+++ b/node_modules/@credo-ts/core/build/agent/EnvelopeService.js -@@ -38,6 +38,7 @@ let EnvelopeService = class EnvelopeService { - message: encryptedMessage, - }); - recipientKeysBase58 = [routingKeyBase58]; -+ forwardMessage["messageType"] = message['@type']; - this.logger.debug('Forward message created', forwardMessage); - const forwardJson = forwardMessage.toJSON({ - useDidSovPrefixWhereAllowed: agentContext.config.useDidSovPrefixWhereAllowed, -diff --git a/node_modules/@credo-ts/core/build/modules/routing/messages/ForwardMessage.d.ts b/node_modules/@credo-ts/core/build/modules/routing/messages/ForwardMessage.d.ts -index 4f8577b..396f78a 100644 ---- a/node_modules/@credo-ts/core/build/modules/routing/messages/ForwardMessage.d.ts -+++ b/node_modules/@credo-ts/core/build/modules/routing/messages/ForwardMessage.d.ts -@@ -3,6 +3,7 @@ import { EncryptedMessage } from '../../../types'; - export interface ForwardMessageOptions { - id?: string; - to: string; -+ messageType: string; - message: EncryptedMessage; - } - /** -@@ -19,5 +20,6 @@ export declare class ForwardMessage extends AgentMessage { - readonly type: string; - static readonly type: import("../../../utils/messageType").ParsedMessageType; - to: string; -+ messageType: string; - message: EncryptedMessage; - } -diff --git a/node_modules/@credo-ts/core/build/types.d.ts b/node_modules/@credo-ts/core/build/types.d.ts -index 0d52d00..4bdb736 100644 ---- a/node_modules/@credo-ts/core/build/types.d.ts -+++ b/node_modules/@credo-ts/core/build/types.d.ts -@@ -82,6 +82,7 @@ export interface PlaintextMessage { - thid?: string; - pthid?: string; - }; -+ messageType: string; - [key: string]: unknown; - } - export interface OutboundPackage { diff --git a/patches/@credo-ts+core+0.5.15+003+added-prettyVc-in-JsonCredential-interface.patch b/patches/@credo-ts+core+0.5.15+003+added-prettyVc-in-JsonCredential-interface.patch deleted file mode 100644 index 9619e9c3..00000000 --- a/patches/@credo-ts+core+0.5.15+003+added-prettyVc-in-JsonCredential-interface.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/@credo-ts/core/build/modules/credentials/formats/jsonld/JsonLdCredentialFormat.d.ts b/node_modules/@credo-ts/core/build/modules/credentials/formats/jsonld/JsonLdCredentialFormat.d.ts -index d12468b..ae70f36 100644 ---- a/node_modules/@credo-ts/core/build/modules/credentials/formats/jsonld/JsonLdCredentialFormat.d.ts -+++ b/node_modules/@credo-ts/core/build/modules/credentials/formats/jsonld/JsonLdCredentialFormat.d.ts -@@ -10,6 +10,8 @@ export interface JsonCredential { - issuanceDate: string; - expirationDate?: string; - credentialSubject: SingleOrArray; -+ //TODO change type -+ prettyVc?: any; - [key: string]: unknown; - } - /** \ No newline at end of file diff --git a/patches/@credo-ts+core+0.5.15+004+commenting validationPresentation to avoid abandoned issue.patch b/patches/@credo-ts+core+0.5.15+004+commenting validationPresentation to avoid abandoned issue.patch deleted file mode 100644 index 4a87cf28..00000000 --- a/patches/@credo-ts+core+0.5.15+004+commenting validationPresentation to avoid abandoned issue.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff --git a/node_modules/@credo-ts/core/build/modules/proofs/formats/dif-presentation-exchange/DifPresentationExchangeProofFormatService.js b/node_modules/@credo-ts/core/build/modules/proofs/formats/dif-presentation-exchange/DifPresentationExchangeProofFormatService.js -index 7644850..db26554 100644 ---- a/node_modules/@credo-ts/core/build/modules/proofs/formats/dif-presentation-exchange/DifPresentationExchangeProofFormatService.js -+++ b/node_modules/@credo-ts/core/build/modules/proofs/formats/dif-presentation-exchange/DifPresentationExchangeProofFormatService.js -@@ -172,7 +172,8 @@ class DifPresentationExchangeProofFormatService { - try { - ps.validatePresentationDefinition(request.presentation_definition); - ps.validatePresentationSubmission(jsonPresentation.presentation_submission); -- ps.validatePresentation(request.presentation_definition, parsedPresentation); -+ // FIXME: Commenting validatePresentation() for now due to intermittent abandoned issue -+ //ps.validatePresentation(request.presentation_definition, parsedPresentation); - let verificationResult; - // FIXME: for some reason it won't accept the input if it doesn't know - // whether it's a JWT or JSON-LD VP even though the input is the same. -diff --git a/node_modules/@credo-ts/core/build/utils/version.d.ts b/node_modules/@credo-ts/core/build/utils/version.d.ts -index 0ad7e14..e0588dc 100644 ---- a/node_modules/@credo-ts/core/build/utils/version.d.ts -+++ b/node_modules/@credo-ts/core/build/utils/version.d.ts -@@ -1,7 +1,7 @@ - export declare function parseVersionString(version: VersionString): Version; - export declare function isFirstVersionHigherThanSecond(first: Version, second: Version): boolean; - export declare function isFirstVersionEqualToSecond(first: Version, second: Version): boolean; --export type VersionString = `${number}.${number}` | `${number}.${number}.${number}`; -+export type VersionString = string; - export type MajorVersion = number; - export type MinorVersion = number; - export type PatchVersion = number; diff --git a/patches/@credo-ts+core+0.5.15+005+credential-get-format-data.patch b/patches/@credo-ts+core+0.5.15+005+credential-get-format-data.patch deleted file mode 100644 index e0a63329..00000000 --- a/patches/@credo-ts+core+0.5.15+005+credential-get-format-data.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff --git a/node_modules/@credo-ts/core/build/modules/credentials/CredentialsApi.js b/node_modules/@credo-ts/core/build/modules/credentials/CredentialsApi.js -index 7b54cfb..3ed891d 100644 ---- a/node_modules/@credo-ts/core/build/modules/credentials/CredentialsApi.js -+++ b/node_modules/@credo-ts/core/build/modules/credentials/CredentialsApi.js -@@ -415,10 +415,17 @@ let CredentialsApi = class CredentialsApi { - return credentialRecord; - } - async getFormatData(credentialRecordId) { -- const credentialRecord = await this.getById(credentialRecordId); -- const protocol = this.getProtocol(credentialRecord.protocolVersion); -- return protocol.getFormatData(this.agentContext, credentialRecordId); -+ try { -+ const credentialRecord = await this.getById(credentialRecordId); -+ const protocol = this.getProtocol(credentialRecord.protocolVersion); -+ return protocol.getFormatData(this.agentContext, credentialRecordId); -+ } catch (error) { -+ this.logger?.error?.(`Error in getFormatData for credential ID ${credentialRecordId}: ${error?.message}`, error); -+ return null; // Prevents application from crashing -+ } - } -+ -+ - /** - * Retrieve a credential record by id - * -@@ -500,11 +507,11 @@ exports.CredentialsApi = CredentialsApi = __decorate([ - (0, plugins_1.injectable)(), - __param(3, (0, plugins_1.inject)(constants_1.InjectionSymbols.Logger)), - __metadata("design:paramtypes", [MessageSender_1.MessageSender, -- services_1.ConnectionService, -- agent_1.AgentContext, Object, CredentialRepository_1.CredentialRepository, -- RoutingService_1.RoutingService, -- DidCommMessageRepository_1.DidCommMessageRepository, -- services_2.RevocationNotificationService, -- CredentialsModuleConfig_1.CredentialsModuleConfig]) -+ services_1.ConnectionService, -+ agent_1.AgentContext, Object, CredentialRepository_1.CredentialRepository, -+ RoutingService_1.RoutingService, -+ DidCommMessageRepository_1.DidCommMessageRepository, -+ services_2.RevocationNotificationService, -+ CredentialsModuleConfig_1.CredentialsModuleConfig]) - ], CredentialsApi); - //# sourceMappingURL=CredentialsApi.js.map -\ No newline at end of file diff --git a/patches/@credo-ts+core+0.6.2+001+fix: change version string type-import esm-export interface.patch b/patches/@credo-ts+core+0.6.2+001+fix: change version string type-import esm-export interface.patch new file mode 100644 index 00000000..276af6b3 --- /dev/null +++ b/patches/@credo-ts+core+0.6.2+001+fix: change version string type-import esm-export interface.patch @@ -0,0 +1,62 @@ +diff --git a/node_modules/@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil.d.mts b/node_modules/@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil.d.mts +index 5a311c1..4d640d0 100644 +--- a/node_modules/@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil.d.mts ++++ b/node_modules/@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil.d.mts +@@ -14,7 +14,7 @@ interface Proof extends JsonObject { + verificationMethod: string | VerificationMethod; + [key: string]: JsonValue; + } +-interface DocumentLoaderResult { ++export interface DocumentLoaderResult { + contextUrl?: string | null; + documentUrl: string; + document: Record; +diff --git a/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/nativeDocumentLoader.mjs b/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/nativeDocumentLoader.mjs +index 49ee03f..aa7e43a 100644 +--- a/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/nativeDocumentLoader.mjs ++++ b/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/nativeDocumentLoader.mjs +@@ -2,7 +2,7 @@ + + //#region src/modules/vc/data-integrity/libraries/nativeDocumentLoader.ts + async function getNativeDocumentLoader() { +- const loader = await import("@digitalcredentials/jsonld/lib/documentLoaders/node"); ++ const loader = await import("@digitalcredentials/jsonld/lib/documentLoaders/node.js"); + if (!loader) throw new Error("Could not load node document loader. Module did not contain a loader function"); + if (typeof loader === "function") return loader; + if (typeof loader === "object" && typeof loader.default === "function") return loader.default; +diff --git a/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/nativeDocumentLoader.native.mjs b/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/nativeDocumentLoader.native.mjs +index 6a8ca37..0287e99 100644 +--- a/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/nativeDocumentLoader.native.mjs ++++ b/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/nativeDocumentLoader.native.mjs +@@ -1,8 +1,9 @@ + + ++ + //#region src/modules/vc/data-integrity/libraries/nativeDocumentLoader.native.ts + async function getNativeDocumentLoader() { +- const loader = await import("@digitalcredentials/jsonld/lib/documentLoaders/xhr"); ++ const loader = await import("@digitalcredentials/jsonld/lib/documentLoaders/xhr.js"); + if (!loader) throw new Error("Could not load node document loader. Module did not contain a loader function"); + if (typeof loader === "function") return loader; + if (typeof loader === "object" && typeof loader.default === "function") return loader.default; +diff --git a/node_modules/@credo-ts/core/build/utils/version.d.mts b/node_modules/@credo-ts/core/build/utils/version.d.mts +index a71659d..8ed88e2 100644 +--- a/node_modules/@credo-ts/core/build/utils/version.d.mts ++++ b/node_modules/@credo-ts/core/build/utils/version.d.mts +@@ -1,5 +1,5 @@ + //#region src/utils/version.d.ts +-type VersionString = `${number}.${number}` | `${number}.${number}.${number}`; ++type VersionString = string; + //#endregion + export { VersionString }; + //# sourceMappingURL=version.d.mts.map +\ No newline at end of file +diff --git a/node_modules/@credo-ts/core/build/utils/version.mjs.map b/node_modules/@credo-ts/core/build/utils/version.mjs.map +index 19457ed..5fb595f 100644 +--- a/node_modules/@credo-ts/core/build/utils/version.mjs.map ++++ b/node_modules/@credo-ts/core/build/utils/version.mjs.map +@@ -1 +1 @@ +-{"version":3,"file":"version.mjs","names":[],"sources":["../../src/utils/version.ts"],"sourcesContent":["export function parseVersionString(version: VersionString): Version {\n const [major, minor, patch] = version.split('.')\n\n return [Number(major), Number(minor), Number(patch ?? '0')]\n}\n\nexport function isFirstVersionHigherThanSecond(first: Version, second: Version) {\n return (\n first[0] > second[0] ||\n (first[0] === second[0] && first[1] > second[1]) ||\n (first[0] === second[0] && first[1] === second[1] && first[2] > second[2])\n )\n}\n\nexport function isFirstVersionEqualToSecond(first: Version, second: Version) {\n return first[0] === second[0] && first[1] === second[1] && first[2] === second[2]\n}\n\nexport type VersionString = `${number}.${number}` | `${number}.${number}.${number}`\nexport type MajorVersion = number\nexport type MinorVersion = number\nexport type PatchVersion = number\nexport type Version = [MajorVersion, MinorVersion, PatchVersion]\n"],"mappings":";;;AAAA,SAAgB,mBAAmB,SAAiC;CAClE,MAAM,CAAC,OAAO,OAAO,SAAS,QAAQ,MAAM,IAAI;AAEhD,QAAO;EAAC,OAAO,MAAM;EAAE,OAAO,MAAM;EAAE,OAAO,SAAS,IAAI;EAAC;;AAG7D,SAAgB,+BAA+B,OAAgB,QAAiB;AAC9E,QACE,MAAM,KAAK,OAAO,MACjB,MAAM,OAAO,OAAO,MAAM,MAAM,KAAK,OAAO,MAC5C,MAAM,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,MAAM,MAAM,KAAK,OAAO;;AAI3E,SAAgB,4BAA4B,OAAgB,QAAiB;AAC3E,QAAO,MAAM,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO"} +\ No newline at end of file ++{"version":3,"file":"version.mjs","names":[],"sources":["../../src/utils/version.ts"],"sourcesContent":["export function parseVersionString(version: VersionString): Version {\n const [major, minor, patch] = version.split('.')\n\n return [Number(major), Number(minor), Number(patch ?? '0')]\n}\n\nexport function isFirstVersionHigherThanSecond(first: Version, second: Version) {\n return (\n first[0] > second[0] ||\n (first[0] === second[0] && first[1] > second[1]) ||\n (first[0] === second[0] && first[1] === second[1] && first[2] > second[2])\n )\n}\n\nexport function isFirstVersionEqualToSecond(first: Version, second: Version) {\n return first[0] === second[0] && first[1] === second[1] && first[2] === second[2]\n}\n\nexport type VersionString = string\nexport type MajorVersion = number\nexport type MinorVersion = number\nexport type PatchVersion = number\nexport type Version = [MajorVersion, MinorVersion, PatchVersion]\n"],"mappings":";;;AAAA,SAAgB,mBAAmB,SAAiC;CAClE,MAAM,CAAC,OAAO,OAAO,SAAS,QAAQ,MAAM,IAAI;AAEhD,QAAO;EAAC,OAAO,MAAM;EAAE,OAAO,MAAM;EAAE,OAAO,SAAS,IAAI;EAAC;;AAG7D,SAAgB,+BAA+B,OAAgB,QAAiB;AAC9E,QACE,MAAM,KAAK,OAAO,MACjB,MAAM,OAAO,OAAO,MAAM,MAAM,KAAK,OAAO,MAC5C,MAAM,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,MAAM,MAAM,KAAK,OAAO;;AAI3E,SAAgB,4BAA4B,OAAgB,QAAiB;AAC3E,QAAO,MAAM,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO"} +\ No newline at end of file diff --git a/patches/@credo-ts+core+0.6.2+002+fix: export defaultDocumentLoader.patch b/patches/@credo-ts+core+0.6.2+002+fix: export defaultDocumentLoader.patch new file mode 100644 index 00000000..81c03cb3 --- /dev/null +++ b/patches/@credo-ts+core+0.6.2+002+fix: export defaultDocumentLoader.patch @@ -0,0 +1,27 @@ +diff --git a/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader.d.mts b/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader.d.mts +index 195af1d..30d1638 100644 +--- a/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader.d.mts ++++ b/node_modules/@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader.d.mts +@@ -5,4 +5,5 @@ import { AgentContext } from "../../../../agent/context/AgentContext.mjs"; + type DocumentLoaderWithContext = (agentContext: AgentContext) => DocumentLoader; + //#endregion + export { DocumentLoaderWithContext }; ++export declare function defaultDocumentLoader(agentContext: AgentContext): DocumentLoader; + //# sourceMappingURL=documentLoader.d.mts.map +\ No newline at end of file +diff --git a/node_modules/@credo-ts/core/package.json b/node_modules/@credo-ts/core/package.json +index 8198ea2..5d23e62 100644 +--- a/node_modules/@credo-ts/core/package.json ++++ b/node_modules/@credo-ts/core/package.json +@@ -7,6 +7,11 @@ + "import": "./build/modules/kms/index.mjs", + "require": "./build/modules/kms/index.mjs", + "types": "./build/modules/kms/index.d.mts" ++ }, ++ "./build/modules/vc/data-integrity/libraries/documentLoader.mjs": { ++ "import": "./build/modules/vc/data-integrity/libraries/documentLoader.mjs", ++ "require": "./build/modules/vc/data-integrity/libraries/documentLoader.mjs", ++ "types": "./build/modules/vc/data-integrity/libraries/documentLoader.d.mts" + } + }, + "version": "0.6.2", diff --git a/patches/@credo-ts+openid4vc+0.6.2.patch b/patches/@credo-ts+openid4vc+0.6.2.patch new file mode 100644 index 00000000..2025930b --- /dev/null +++ b/patches/@credo-ts+openid4vc+0.6.2.patch @@ -0,0 +1,37 @@ +diff --git a/node_modules/@credo-ts/openid4vc/build/index.d.mts b/node_modules/@credo-ts/openid4vc/build/index.d.mts +index 6684f74..f1c9849 100644 +--- a/node_modules/@credo-ts/openid4vc/build/index.d.mts ++++ b/node_modules/@credo-ts/openid4vc/build/index.d.mts +@@ -39,4 +39,5 @@ import { OpenId4VcIssuerModule } from "./openid4vc-issuer/OpenId4VcIssuerModule. + import "./openid4vc-issuer/index.mjs"; + import { OpenId4VcApi } from "./OpenId4VcApi.mjs"; + import { OpenId4VcModule } from "./OpenId4VcModule.mjs"; +-export { DefaultOpenId4VcVerificationSessionRecordTags, DefaultOpenId4VcVerifierRecordTags, OpenId4VcApi, OpenId4VcAuthorizationCodeTokenRequestOptions, OpenId4VcCredentialHolderAttestationBinding, OpenId4VcCredentialHolderBinding, OpenId4VcCredentialHolderDidBinding, OpenId4VcCredentialHolderJwkBinding, OpenId4VcHolderApi, OpenId4VcHolderModule, OpenId4VcIssuanceSessionAuthorization, OpenId4VcIssuanceSessionChainedIdentity, OpenId4VcIssuanceSessionDpop, OpenId4VcIssuanceSessionPkce, OpenId4VcIssuanceSessionPresentation, OpenId4VcIssuanceSessionRecord, OpenId4VcIssuanceSessionRecordTransaction, OpenId4VcIssuanceSessionRepository, OpenId4VcIssuanceSessionState, OpenId4VcIssuanceSessionStateChangedEvent, OpenId4VcIssuanceSessionWalletAttestation, OpenId4VcIssuerApi, OpenId4VcIssuerEvents, OpenId4VcIssuerModule, OpenId4VcIssuerModuleConfig, OpenId4VcIssuerModuleConfigOptions, OpenId4VcIssuerRecord, OpenId4VcIssuerRecordProps, OpenId4VcIssuerRecordSignedMetadata, OpenId4VcIssuerRecordTags, OpenId4VcIssuerService, OpenId4VcJwtIssuer, OpenId4VcJwtIssuerDid, OpenId4VcJwtIssuerEncoded, OpenId4VcJwtIssuerJwk, OpenId4VcJwtIssuerJwkEncoded, OpenId4VcJwtIssuerX5c, OpenId4VcJwtIssuerX5cEncoded, OpenId4VcModule, OpenId4VcModuleConfig, OpenId4VcModuleConfigOptions, OpenId4VcParseAndVerifyAuthorizationResponseOptions, OpenId4VcUpdateIssuerRecordOptions, OpenId4VcUpdateVerifierRecordOptions, OpenId4VcVerificationSessionRecord, OpenId4VcVerificationSessionRecordProps, OpenId4VcVerificationSessionRecordTags, OpenId4VcVerificationSessionRepository, OpenId4VcVerificationSessionState, OpenId4VcVerificationSessionStateChangedEvent, OpenId4VcVerifierApi, OpenId4VcVerifierEvents, OpenId4VcVerifierModule, OpenId4VcVerifierModuleConfig, OpenId4VcVerifierModuleConfigOptions, OpenId4VcVerifierRecord, OpenId4VcVerifierRecordProps, OpenId4VcVerifierRecordTags, OpenId4VcVerifierRepository, OpenId4VciAcceptCredentialOfferOptions, OpenId4VciAccessTokenResponse, OpenId4VciAuthCodeFlowOptions, OpenId4VciAuthorizationCodeFlowConfig, OpenId4VciAuthorizationFlow, OpenId4VciAuthorizationServerClientAuthenticationClientSecret, OpenId4VciAuthorizationServerConfig, OpenId4VciBatchCredentialIssuanceOptions, OpenId4VciChainedAuthorizationServerConfig, OpenId4VciCreateCredentialOfferOptions, OpenId4VciCreateCredentialResponseOptions, OpenId4VciCreateDeferredCredentialResponseOptions, OpenId4VciCreateIssuerOptions, OpenId4VciCreateStatelessCredentialOfferOptions, OpenId4VciCredentialBindingOptions, OpenId4VciCredentialBindingResolver, OpenId4VciCredentialConfigurationSupported, OpenId4VciCredentialConfigurationSupportedWithFormats, OpenId4VciCredentialConfigurationsSupported, OpenId4VciCredentialConfigurationsSupportedWithFormats, OpenId4VciCredentialFormatProfile, OpenId4VciCredentialIssuerMetadata, OpenId4VciCredentialIssuerMetadataDisplay, OpenId4VciCredentialOfferPayload, OpenId4VciCredentialRequest, OpenId4VciCredentialRequestAuthorization, OpenId4VciCredentialRequestFormatSpecific, OpenId4VciCredentialRequestOptions, OpenId4VciCredentialRequestToCredentialMapper, OpenId4VciCredentialRequestToCredentialMapperOptions, OpenId4VciCredentialRequestWithFormats, OpenId4VciCredentialResponse, OpenId4VciDeferredCredentialRequest, OpenId4VciDeferredCredentialRequestOptions, OpenId4VciDeferredCredentialRequestToCredentialMapper, OpenId4VciDeferredCredentialRequestToCredentialMapperOptions, OpenId4VciDeferredCredentialResponse, OpenId4VciDeferredCredentials, OpenId4VciDirectAuthorizationServerConfig, OpenId4VciDpopRequestOptions, OpenId4VciGetVerificationSessionForIssuanceSessionAuthorization, OpenId4VciHolderService, OpenId4VciMetadata, OpenId4VciNotificationEvent, OpenId4VciParsedCredentialRequest, OpenId4VciPreAuthorizedCodeFlowConfig, OpenId4VciPreAuthorizedTokenRequestOptions, OpenId4VciProofOfPossessionRequirements, OpenId4VciProofOfPressionProofTypes, OpenId4VciRequestTokenResponse, OpenId4VciResolvedAuthorizationRequest, OpenId4VciResolvedCredentialOffer, OpenId4VciRetrieveAuthorizationCodeUsingPresentationOptions, OpenId4VciSendNotificationOptions, OpenId4VciSignCredentials, OpenId4VciSignMdocCredentials, OpenId4VciSignSdJwtCredentials, OpenId4VciSignW3cCredentials, OpenId4VciSignW3cV2Credentials, OpenId4VciSupportedCredentialFormats, OpenId4VciTokenRefreshOptions, OpenId4VciTokenRequestOptions, OpenId4VciTxCode, OpenId4VciVersion, OpenId4VpAcceptAuthorizationRequestOptions, OpenId4VpAuthorizationRequestPayload, OpenId4VpAuthorizationResponsePayload, OpenId4VpCreateAuthorizationRequestOptions, OpenId4VpCreateAuthorizationRequestReturn, OpenId4VpCreateVerifierOptions, OpenId4VpHolderService, OpenId4VpResolvedAuthorizationRequest, OpenId4VpVerifiedAuthorizationRequest, OpenId4VpVerifiedAuthorizationResponse, OpenId4VpVerifiedAuthorizationResponseDcql, OpenId4VpVerifiedAuthorizationResponsePresentationExchange, OpenId4VpVerifiedAuthorizationResponseTransactionData, OpenId4VpVerifierClientMetadata, OpenId4VpVerifierService, OpenId4VpVerifyAuthorizationResponseOptions, OpenId4VpVersion, Openid4vpAuthorizationRequest, ParsedTransactionDataEntry, ResolveOpenId4VpAuthorizationRequestOptions, ResponseMode, VerifiedOpenId4VcCredentialHolderBinding, authorizationCodeGrantIdentifier, dynamicOid4vciClientAuthentication, getAllowedAndRequestedScopeValues, getCredentialConfigurationsSupportedForScopes, getOfferedCredentials, getOid4vcCallbacks, getOid4vcDecryptJweCallback, getOid4vcEncryptJweCallback, getOid4vcJwtSignCallback, getOid4vcJwtVerifyCallback, getScopesFromCredentialConfigurationsSupported, openId4VciSupportedCredentialFormats, preAuthorizedCodeGrantIdentifier }; +\ No newline at end of file ++import { OpenId4VcIssuerRepository } from "./openid4vc-issuer/repository/OpenId4VcIssuerRepository.mjs"; ++export { OpenId4VcIssuerRepository, DefaultOpenId4VcVerificationSessionRecordTags, DefaultOpenId4VcVerifierRecordTags, OpenId4VcApi, OpenId4VcAuthorizationCodeTokenRequestOptions, OpenId4VcCredentialHolderAttestationBinding, OpenId4VcCredentialHolderBinding, OpenId4VcCredentialHolderDidBinding, OpenId4VcCredentialHolderJwkBinding, OpenId4VcHolderApi, OpenId4VcHolderModule, OpenId4VcIssuanceSessionAuthorization, OpenId4VcIssuanceSessionChainedIdentity, OpenId4VcIssuanceSessionDpop, OpenId4VcIssuanceSessionPkce, OpenId4VcIssuanceSessionPresentation, OpenId4VcIssuanceSessionRecord, OpenId4VcIssuanceSessionRecordTransaction, OpenId4VcIssuanceSessionRepository, OpenId4VcIssuanceSessionState, OpenId4VcIssuanceSessionStateChangedEvent, OpenId4VcIssuanceSessionWalletAttestation, OpenId4VcIssuerApi, OpenId4VcIssuerEvents, OpenId4VcIssuerModule, OpenId4VcIssuerModuleConfig, OpenId4VcIssuerModuleConfigOptions, OpenId4VcIssuerRecord, OpenId4VcIssuerRecordProps, OpenId4VcIssuerRecordSignedMetadata, OpenId4VcIssuerRecordTags, OpenId4VcIssuerService, OpenId4VcJwtIssuer, OpenId4VcJwtIssuerDid, OpenId4VcJwtIssuerEncoded, OpenId4VcJwtIssuerJwk, OpenId4VcJwtIssuerJwkEncoded, OpenId4VcJwtIssuerX5c, OpenId4VcJwtIssuerX5cEncoded, OpenId4VcModule, OpenId4VcModuleConfig, OpenId4VcModuleConfigOptions, OpenId4VcParseAndVerifyAuthorizationResponseOptions, OpenId4VcUpdateIssuerRecordOptions, OpenId4VcUpdateVerifierRecordOptions, OpenId4VcVerificationSessionRecord, OpenId4VcVerificationSessionRecordProps, OpenId4VcVerificationSessionRecordTags, OpenId4VcVerificationSessionRepository, OpenId4VcVerificationSessionState, OpenId4VcVerificationSessionStateChangedEvent, OpenId4VcVerifierApi, OpenId4VcVerifierEvents, OpenId4VcVerifierModule, OpenId4VcVerifierModuleConfig, OpenId4VcVerifierModuleConfigOptions, OpenId4VcVerifierRecord, OpenId4VcVerifierRecordProps, OpenId4VcVerifierRecordTags, OpenId4VcVerifierRepository, OpenId4VciAcceptCredentialOfferOptions, OpenId4VciAccessTokenResponse, OpenId4VciAuthCodeFlowOptions, OpenId4VciAuthorizationCodeFlowConfig, OpenId4VciAuthorizationFlow, OpenId4VciAuthorizationServerClientAuthenticationClientSecret, OpenId4VciAuthorizationServerConfig, OpenId4VciBatchCredentialIssuanceOptions, OpenId4VciChainedAuthorizationServerConfig, OpenId4VciCreateCredentialOfferOptions, OpenId4VciCreateCredentialResponseOptions, OpenId4VciCreateDeferredCredentialResponseOptions, OpenId4VciCreateIssuerOptions, OpenId4VciCreateStatelessCredentialOfferOptions, OpenId4VciCredentialBindingOptions, OpenId4VciCredentialBindingResolver, OpenId4VciCredentialConfigurationSupported, OpenId4VciCredentialConfigurationSupportedWithFormats, OpenId4VciCredentialConfigurationsSupported, OpenId4VciCredentialConfigurationsSupportedWithFormats, OpenId4VciCredentialFormatProfile, OpenId4VciCredentialIssuerMetadata, OpenId4VciCredentialIssuerMetadataDisplay, OpenId4VciCredentialOfferPayload, OpenId4VciCredentialRequest, OpenId4VciCredentialRequestAuthorization, OpenId4VciCredentialRequestFormatSpecific, OpenId4VciCredentialRequestOptions, OpenId4VciCredentialRequestToCredentialMapper, OpenId4VciCredentialRequestToCredentialMapperOptions, OpenId4VciCredentialRequestWithFormats, OpenId4VciCredentialResponse, OpenId4VciDeferredCredentialRequest, OpenId4VciDeferredCredentialRequestOptions, OpenId4VciDeferredCredentialRequestToCredentialMapper, OpenId4VciDeferredCredentialRequestToCredentialMapperOptions, OpenId4VciDeferredCredentialResponse, OpenId4VciDeferredCredentials, OpenId4VciDirectAuthorizationServerConfig, OpenId4VciDpopRequestOptions, OpenId4VciGetVerificationSessionForIssuanceSessionAuthorization, OpenId4VciHolderService, OpenId4VciMetadata, OpenId4VciNotificationEvent, OpenId4VciParsedCredentialRequest, OpenId4VciPreAuthorizedCodeFlowConfig, OpenId4VciPreAuthorizedTokenRequestOptions, OpenId4VciProofOfPossessionRequirements, OpenId4VciProofOfPressionProofTypes, OpenId4VciRequestTokenResponse, OpenId4VciResolvedAuthorizationRequest, OpenId4VciResolvedCredentialOffer, OpenId4VciRetrieveAuthorizationCodeUsingPresentationOptions, OpenId4VciSendNotificationOptions, OpenId4VciSignCredentials, OpenId4VciSignMdocCredentials, OpenId4VciSignSdJwtCredentials, OpenId4VciSignW3cCredentials, OpenId4VciSignW3cV2Credentials, OpenId4VciSupportedCredentialFormats, OpenId4VciTokenRefreshOptions, OpenId4VciTokenRequestOptions, OpenId4VciTxCode, OpenId4VciVersion, OpenId4VpAcceptAuthorizationRequestOptions, OpenId4VpAuthorizationRequestPayload, OpenId4VpAuthorizationResponsePayload, OpenId4VpCreateAuthorizationRequestOptions, OpenId4VpCreateAuthorizationRequestReturn, OpenId4VpCreateVerifierOptions, OpenId4VpHolderService, OpenId4VpResolvedAuthorizationRequest, OpenId4VpVerifiedAuthorizationRequest, OpenId4VpVerifiedAuthorizationResponse, OpenId4VpVerifiedAuthorizationResponseDcql, OpenId4VpVerifiedAuthorizationResponsePresentationExchange, OpenId4VpVerifiedAuthorizationResponseTransactionData, OpenId4VpVerifierClientMetadata, OpenId4VpVerifierService, OpenId4VpVerifyAuthorizationResponseOptions, OpenId4VpVersion, Openid4vpAuthorizationRequest, ParsedTransactionDataEntry, ResolveOpenId4VpAuthorizationRequestOptions, ResponseMode, VerifiedOpenId4VcCredentialHolderBinding, authorizationCodeGrantIdentifier, dynamicOid4vciClientAuthentication, getAllowedAndRequestedScopeValues, getCredentialConfigurationsSupportedForScopes, getOfferedCredentials, getOid4vcCallbacks, getOid4vcDecryptJweCallback, getOid4vcEncryptJweCallback, getOid4vcJwtSignCallback, getOid4vcJwtVerifyCallback, getScopesFromCredentialConfigurationsSupported, openId4VciSupportedCredentialFormats, preAuthorizedCodeGrantIdentifier }; +\ No newline at end of file +diff --git a/node_modules/@credo-ts/openid4vc/build/index.mjs b/node_modules/@credo-ts/openid4vc/build/index.mjs +index 27b6afa..bf990b8 100644 +--- a/node_modules/@credo-ts/openid4vc/build/index.mjs ++++ b/node_modules/@credo-ts/openid4vc/build/index.mjs +@@ -33,5 +33,5 @@ import { OpenId4VcIssuerModule } from "./openid4vc-issuer/OpenId4VcIssuerModule. + import "./openid4vc-issuer/index.mjs"; + import { OpenId4VcApi } from "./OpenId4VcApi.mjs"; + import { OpenId4VcModule } from "./OpenId4VcModule.mjs"; +- +-export { OpenId4VcApi, OpenId4VcHolderApi, OpenId4VcHolderModule, OpenId4VcIssuanceSessionRecord, OpenId4VcIssuanceSessionRepository, OpenId4VcIssuanceSessionState, OpenId4VcIssuerApi, OpenId4VcIssuerEvents, OpenId4VcIssuerModule, OpenId4VcIssuerModuleConfig, OpenId4VcIssuerRecord, OpenId4VcIssuerService, OpenId4VcModule, OpenId4VcModuleConfig, OpenId4VcVerificationSessionRecord, OpenId4VcVerificationSessionRepository, OpenId4VcVerificationSessionState, OpenId4VcVerifierApi, OpenId4VcVerifierEvents, OpenId4VcVerifierModule, OpenId4VcVerifierModuleConfig, OpenId4VcVerifierRecord, OpenId4VcVerifierRepository, OpenId4VciAuthorizationFlow, OpenId4VciCredentialFormatProfile, OpenId4VciHolderService, OpenId4VpHolderService, OpenId4VpVerifierService, authorizationCodeGrantIdentifier, dynamicOid4vciClientAuthentication, getAllowedAndRequestedScopeValues, getCredentialConfigurationsSupportedForScopes, getOfferedCredentials, getOid4vcCallbacks, getOid4vcDecryptJweCallback, getOid4vcEncryptJweCallback, getOid4vcJwtSignCallback, getOid4vcJwtVerifyCallback, getScopesFromCredentialConfigurationsSupported, openId4VciSupportedCredentialFormats, preAuthorizedCodeGrantIdentifier }; +\ No newline at end of file ++import { OpenId4VcIssuerRepository } from "./openid4vc-issuer/repository/OpenId4VcIssuerRepository.mjs"; ++export { OpenId4VcIssuerRepository, OpenId4VcApi, OpenId4VcHolderApi, OpenId4VcHolderModule, OpenId4VcIssuanceSessionRecord, OpenId4VcIssuanceSessionRepository, OpenId4VcIssuanceSessionState, OpenId4VcIssuerApi, OpenId4VcIssuerEvents, OpenId4VcIssuerModule, OpenId4VcIssuerModuleConfig, OpenId4VcIssuerRecord, OpenId4VcIssuerService, OpenId4VcModule, OpenId4VcModuleConfig, OpenId4VcVerificationSessionRecord, OpenId4VcVerificationSessionRepository, OpenId4VcVerificationSessionState, OpenId4VcVerifierApi, OpenId4VcVerifierEvents, OpenId4VcVerifierModule, OpenId4VcVerifierModuleConfig, OpenId4VcVerifierRecord, OpenId4VcVerifierRepository, OpenId4VciAuthorizationFlow, OpenId4VciCredentialFormatProfile, OpenId4VciHolderService, OpenId4VpHolderService, OpenId4VpVerifierService, authorizationCodeGrantIdentifier, dynamicOid4vciClientAuthentication, getAllowedAndRequestedScopeValues, getCredentialConfigurationsSupportedForScopes, getOfferedCredentials, getOid4vcCallbacks, getOid4vcDecryptJweCallback, getOid4vcEncryptJweCallback, getOid4vcJwtSignCallback, getOid4vcJwtVerifyCallback, getScopesFromCredentialConfigurationsSupported, openId4VciSupportedCredentialFormats, preAuthorizedCodeGrantIdentifier }; +\ No newline at end of file +diff --git a/node_modules/@credo-ts/openid4vc/build/openid4vc-issuer/index.mjs b/node_modules/@credo-ts/openid4vc/build/openid4vc-issuer/index.mjs +index c389872..4faeb68 100644 +--- a/node_modules/@credo-ts/openid4vc/build/openid4vc-issuer/index.mjs ++++ b/node_modules/@credo-ts/openid4vc/build/openid4vc-issuer/index.mjs +@@ -8,4 +8,5 @@ import "./repository/index.mjs"; + import { OpenId4VcIssuerService } from "./OpenId4VcIssuerService.mjs"; + import { OpenId4VcIssuerApi } from "./OpenId4VcIssuerApi.mjs"; + import { OpenId4VcIssuerModule } from "./OpenId4VcIssuerModule.mjs"; ++import { OpenId4VcIssuerRepository } from "./repository/OpenId4VcIssuerRepository.mjs"; + import "./OpenId4VcIssuerServiceOptions.mjs"; diff --git a/patches/@credo-ts+tenants+0.5.3+001+cache-tenant-record-patch.patch b/patches/@credo-ts+tenants+0.5.3+001+cache-tenant-record-patch.patch deleted file mode 100644 index 8c03a89d..00000000 --- a/patches/@credo-ts+tenants+0.5.3+001+cache-tenant-record-patch.patch +++ /dev/null @@ -1,56 +0,0 @@ -diff --git a/node_modules/@credo-ts/tenants/build/context/TenantAgentContextProvider.d.ts b/node_modules/@credo-ts/tenants/build/context/TenantAgentContextProvider.d.ts -index 91bb8f4..b4dae61 100644 ---- a/node_modules/@credo-ts/tenants/build/context/TenantAgentContextProvider.d.ts -+++ b/node_modules/@credo-ts/tenants/build/context/TenantAgentContextProvider.d.ts -@@ -1,5 +1,5 @@ - import type { TenantRecord } from '../repository'; --import type { AgentContextProvider, UpdateAssistantUpdateOptions } from '@credo-ts/core'; -+import type { AgentContextProvider, UpdateAssistantUpdateOptions , CacheModule, InMemoryLruCache } from '@credo-ts/core'; - import { AgentContext, EventEmitter, Logger } from '@credo-ts/core'; - import { TenantRecordService } from '../services'; - import { TenantSessionCoordinator } from './TenantSessionCoordinator'; -@@ -9,7 +9,9 @@ export declare class TenantAgentContextProvider implements AgentContextProvider - private eventEmitter; - private logger; - private tenantSessionCoordinator; -- constructor(tenantRecordService: TenantRecordService, rootAgentContext: AgentContext, eventEmitter: EventEmitter, tenantSessionCoordinator: TenantSessionCoordinator, logger: Logger); -+ private cacheModule; -+ private inMemoryLruCache; -+ constructor(tenantRecordService: TenantRecordService, rootAgentContext: AgentContext, eventEmitter: EventEmitter, tenantSessionCoordinator: TenantSessionCoordinator, logger: Logger, cache: InMemoryLruCache); - getAgentContextForContextCorrelationId(contextCorrelationId: string): Promise; - getContextForInboundMessage(inboundMessage: unknown, options?: { - contextCorrelationId?: string; -diff --git a/node_modules/@credo-ts/tenants/build/context/TenantAgentContextProvider.js b/node_modules/@credo-ts/tenants/build/context/TenantAgentContextProvider.js -index d491d4e..d60ec79 100644 ---- a/node_modules/@credo-ts/tenants/build/context/TenantAgentContextProvider.js -+++ b/node_modules/@credo-ts/tenants/build/context/TenantAgentContextProvider.js -@@ -24,16 +24,28 @@ let TenantAgentContextProvider = class TenantAgentContextProvider { - this.eventEmitter = eventEmitter; - this.tenantSessionCoordinator = tenantSessionCoordinator; - this.logger = logger; -+ this.cache = new core_1.CacheModule({ -+ cache: new core_1.InMemoryLruCache({ limit: 100 }), -+ }); - // Start listener for newly created routing keys, so we can register a mapping for each new key for the tenant - this.listenForRoutingKeyCreatedEvents(); - } - async getAgentContextForContextCorrelationId(contextCorrelationId) { -+ this.logger.debug('debug ========= Inside getAgentContextForContextCorrelationId') - // It could be that the root agent context is requested, in that case we return the root agent context - if (contextCorrelationId === this.rootAgentContext.contextCorrelationId) { - return this.rootAgentContext; - } - // TODO: maybe we can look at not having to retrieve the tenant record if there's already a context available. -- const tenantRecord = await this.tenantRecordService.getTenantById(this.rootAgentContext, contextCorrelationId); -+ this.logger.debug('debug ========= Get tenantRecord from cache') -+ let tenantRecord = await this.cache.config.cache.get(this.rootAgentContext, `contextCorrelationId-${contextCorrelationId}`) -+ if(!tenantRecord) { -+ // TODO: maybe we can look at not having to retrieve the tenant record if there's already a context available. -+ this.logger.debug('debug ========= TenantRecord not found in cache') -+ tenantRecord = await this.tenantRecordService.getTenantById(this.rootAgentContext, contextCorrelationId) -+ await this.cache.config.cache.set(this.rootAgentContext,`contextCorrelationId-${contextCorrelationId}`,tenantRecord) -+ this.logger.debug(`debug ========= Cached tenant agent context for tenant '${contextCorrelationId}'`) -+ } - const shouldUpdate = !(0, core_1.isStorageUpToDate)(tenantRecord.storageVersion); - // If the tenant storage is not up to date, and autoUpdate is disabled we throw an error - if (shouldUpdate && !this.rootAgentContext.config.autoUpdateStorageOnStartup) { \ No newline at end of file diff --git a/patches/@digitalcredentials+jsonld-signatures+12.0.1.patch b/patches/@digitalcredentials+jsonld-signatures+12.0.1.patch new file mode 100644 index 00000000..e5ade717 --- /dev/null +++ b/patches/@digitalcredentials+jsonld-signatures+12.0.1.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/@digitalcredentials/jsonld-signatures/lib/suites/LinkedDataSignature.js b/node_modules/@digitalcredentials/jsonld-signatures/lib/suites/LinkedDataSignature.js +index 3aec367..4bb5517 100644 +--- a/node_modules/@digitalcredentials/jsonld-signatures/lib/suites/LinkedDataSignature.js ++++ b/node_modules/@digitalcredentials/jsonld-signatures/lib/suites/LinkedDataSignature.js +@@ -204,7 +204,7 @@ module.exports = class LinkedDataSignature extends LinkedDataProof { + documentLoader, + // throw errors if any values would be dropped due to missing + // definitions or relative URLs +- safe: true, ++ safe: false, + skipExpansion, + useNative: this.useNativeCanonize, + ...this.canonizeOptions +@@ -301,7 +301,7 @@ module.exports = class LinkedDataSignature extends LinkedDataProof { + '@context': constants.SECURITY_CONTEXT_URL, + '@embed': '@always', + id: verificationMethod +- }, {documentLoader, compactToRelative: false, safe: true}); ++ }, {documentLoader, compactToRelative: false, safe: false}); + if(!framed) { + throw new Error(`Verification method ${verificationMethod} not found.`); + } diff --git a/samples/cliConfig.json b/samples/cliConfig.json index 105845d7..44c44c9c 100644 --- a/samples/cliConfig.json +++ b/samples/cliConfig.json @@ -1,7 +1,7 @@ { "label": "AFJ Rest Agent 1", - "walletId": "sample", - "walletKey": "sample", + "walletId": "sample10", + "walletKey": "sample10", "walletType": "postgres", "walletUrl": "localhost:5432", "walletAccount": "postgres", @@ -19,7 +19,7 @@ "indyNamespace": "indicio:demonet" }, { - "genesisTransactions": "https://raw.githubusercontent.com/bcgov/von-network/main/BCovrin/genesis_test", + "genesisTransactions": "https://test.bcovrin.vonx.io/genesis", "indyNamespace": "bcovrin:testnet" } ], @@ -42,7 +42,5 @@ "schemaManagerContractAddress": "0x4742d43C2dFCa5a1d4238240Afa8547Daf87Ee7a", "rpcUrl": "https://rpc-amoy.polygon.technology", "fileServerUrl": "https://schema.credebl.id", - "fileServerToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJBeWFuV29ya3MiLCJpZCI6ImNhZDI3ZjhjLTMyNWYtNDRmZC04ZmZkLWExNGNhZTY3NTMyMSJ9.I3IR7abjWbfStnxzn1BhxhV0OEzt1x3mULjDdUcgWHk", - "apiKey": "supersecret-that-too-16chars", - "updateJwtSecret": false + "fileServerToken": "" } diff --git a/samples/sample.ts b/samples/sample.ts index 3bbd6c88..fece0f8a 100644 --- a/samples/sample.ts +++ b/samples/sample.ts @@ -11,7 +11,8 @@ const run = async () => { const agent = await setupAgent({ port: 3001, endpoints: [endpoint], - name: 'Aries Test Agent', + id: 'Sample', + key: 'Sample', }) const conf: ServerConfig = { diff --git a/samples/sampleWithApp.ts b/samples/sampleWithApp.ts index 5d844e0f..d79db758 100644 --- a/samples/sampleWithApp.ts +++ b/samples/sampleWithApp.ts @@ -14,7 +14,8 @@ const run = async () => { const agent = await setupAgent({ port: 3001, endpoints: [endpoint], - name: 'Aries Test Agent', + id: 'Sample', + key: 'Sample', }) const app = express() @@ -23,7 +24,7 @@ const run = async () => { app.post('/greeting', jsonParser, (req, res) => { const config = agent.dependencyManager.resolve(AgentConfig) - res.send(`Hello, ${config.label}!`) + res.send(`Hello, agent initialized: , ${agent.isInitialized}!`) }) const conf: ServerConfig = { diff --git a/src/authentication.ts b/src/authentication.ts index c9004794..838a2cbf 100644 --- a/src/authentication.ts +++ b/src/authentication.ts @@ -1,10 +1,10 @@ import type { RestAgentModules, RestMultiTenantAgentModules } from './cliAgent' -import type { TenantAgent } from '@credo-ts/tenants/build/TenantAgent' +import type { TenantAgent } from '@credo-ts/tenants' import type { Request } from 'express' import { Agent, LogLevel } from '@credo-ts/core' -import { uuid } from '@credo-ts/core/build/utils/uuid' import jwt, { decode } from 'jsonwebtoken' +import { randomUUID as uuid } from 'node:crypto' import { container } from 'tsyringe' import { AgentRole, ErrorMessages, SCOPES } from './enums' @@ -25,9 +25,6 @@ export async function expressAuthentication(request: Request, securityName: stri const logger = new TsLogger(LogLevel.info) const agent = container.resolve(Agent) - logger.info(`securityName::: ${securityName}`) - logger.info(`scopes::: ${scopes}`) - if (scopes && scopes?.includes(SCOPES.UNPROTECTED)) { // Skip authentication for this route or controller request.agent = agent diff --git a/src/cli.ts b/src/cli.ts index 8c7efa63..78f49d03 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,8 +1,11 @@ import type { AriesRestConfig } from './cliAgent.js' +import dotenv from 'dotenv' import yargs from 'yargs' import { hideBin } from 'yargs/helpers' +dotenv.config() + import { runRestAgent } from './cliAgent.js' interface IndyLedger { @@ -151,7 +154,9 @@ async function parseArguments(): Promise { .option('wallet-idle-timeout', { number: true }) .option('apiKey', { string: true, - coerce: (input: string) => { + default: process.env.API_KEY, + coerce: (input: string | undefined) => { + if (!input) return input input = input.trim() if (input && input.length < 16) { throw new Error('API key must be at least 16 characters long') @@ -161,7 +166,7 @@ async function parseArguments(): Promise { }) .option('updateJwtSecret', { boolean: true, - default: false, + default: process.env.UPDATE_JWT_SECRET === 'true', }) .config() .env('AFJ_REST') @@ -176,7 +181,7 @@ export async function runCliServer() { walletConfig: { id: parsed['wallet-id'], key: parsed['wallet-key'], - storage: { + database: { type: parsed['wallet-type'], config: { host: parsed['wallet-url'], diff --git a/src/cliAgent.ts b/src/cliAgent.ts index 3fc9272d..c2575ddd 100644 --- a/src/cliAgent.ts +++ b/src/cliAgent.ts @@ -1,61 +1,89 @@ +// Note: For now we need to import askar-nodejs at the top to handle the undefined askar issue +// Refer from: https://github.com/credebl/mobile-sdk/blob/main/packages/ssi/src/wallet/wallet.ts +import '@openwallet-foundation/askar-nodejs' +import '@hyperledger/indy-vdr-nodejs' +import '@hyperledger/anoncreds-nodejs' +import type { AskarModuleConfigStoreOptions } from '@credo-ts/askar' import type { InitConfig } from '@credo-ts/core' -import type { WalletConfig } from '@credo-ts/core/build/types' import type { IndyVdrPoolConfig } from '@credo-ts/indy-vdr' import { PolygonDidRegistrar, PolygonDidResolver, PolygonModule } from '@ayanworks/credo-polygon-w3c-module' import { - AnonCredsCredentialFormatService, + AnonCredsDidCommCredentialFormatService, AnonCredsModule, - AnonCredsProofFormatService, - LegacyIndyCredentialFormatService, - LegacyIndyProofFormatService, - V1CredentialProtocol, - V1ProofProtocol, + AnonCredsDidCommProofFormatService, + LegacyIndyDidCommCredentialFormatService, + LegacyIndyDidCommProofFormatService, + DidCommCredentialV1Protocol, + DidCommProofV1Protocol, } from '@credo-ts/anoncreds' import { AskarModule, AskarMultiWalletDatabaseScheme } from '@credo-ts/askar' import { - AutoAcceptCredential, - AutoAcceptProof, DidsModule, - ProofsModule, - V2ProofProtocol, - CredentialsModule, - V2CredentialProtocol, - ConnectionsModule, W3cCredentialsModule, KeyDidRegistrar, KeyDidResolver, CacheModule, InMemoryLruCache, WebDidResolver, - HttpOutboundTransport, - WsOutboundTransport, LogLevel, Agent, - JsonLdCredentialFormatService, - DifPresentationExchangeProofFormatService, + X509Module, + JwkDidRegistrar, + JwkDidResolver, + SdJwtVcModule, + PeerDidNumAlgo, } from '@credo-ts/core' +import { + DidCommHttpOutboundTransport, + DidCommWsOutboundTransport, + DidCommJsonLdCredentialFormatService, + DidCommDifPresentationExchangeProofFormatService, + DidCommAutoAcceptCredential, + DidCommAutoAcceptProof, + DidCommProofV2Protocol, + DidCommCredentialV2Protocol, + DidCommModule, + DidCommDiscoverFeaturesModule, +} from '@credo-ts/didcomm' import { IndyVdrAnonCredsRegistry, IndyVdrIndyDidResolver, IndyVdrModule, IndyVdrIndyDidRegistrar, } from '@credo-ts/indy-vdr' -import { agentDependencies, HttpInboundTransport, WsInboundTransport } from '@credo-ts/node' +import { agentDependencies, DidCommHttpInboundTransport, DidCommWsInboundTransport } from '@credo-ts/node' +import { OpenId4VcHolderModule, OpenId4VcModule } from '@credo-ts/openid4vc' import { QuestionAnswerModule } from '@credo-ts/question-answer' import { TenantsModule } from '@credo-ts/tenants' import { anoncreds } from '@hyperledger/anoncreds-nodejs' -import { ariesAskar } from '@hyperledger/aries-askar-nodejs' import { indyVdr } from '@hyperledger/indy-vdr-nodejs' +import { askar } from '@openwallet-foundation/askar-nodejs' import axios from 'axios' +import bodyParser from 'body-parser' +import express from 'express' import { readFile } from 'fs/promises' import { IndicioAcceptanceMechanism, IndicioTransactionAuthorAgreement, Network, NetworkName } from './enums' +import { validatePurgeConfig } from './purge/PurgeConfigValidator' +import { + initPurgeSchedulers, + stopPurgeSchedulers, + getNatsPurgeScheduler, + getCronPurgeScheduler, +} from './purge/PurgeSchedulerFactory' +import { buildPurgeConfig } from './purge/PurgeTypes' import { setupServer } from './server' +import { AuthTypes, getAuthType } from './utils/auth' import { isCustomDocumentLoaderEnabled } from './utils/config' import { CustomDocumentLoader } from './utils/customDocumentLoader' import { generateSecretKey } from './utils/helpers' import { TsLogger } from './utils/logger' +import { + getMixedCredentialRequestToCredentialMapper, + getX509CertsByClientToken, + getX509CertsByUrl, +} from './utils/oid4vc-agent' export type Transports = 'ws' | 'http' export type InboundTransport = { @@ -64,13 +92,13 @@ export type InboundTransport = { } const inboundTransportMapping = { - http: HttpInboundTransport, - ws: WsInboundTransport, + http: DidCommHttpInboundTransport, + ws: DidCommWsInboundTransport, } as const const outboundTransportMapping = { - http: HttpOutboundTransport, - ws: WsOutboundTransport, + http: DidCommHttpOutboundTransport, + ws: DidCommWsOutboundTransport, } as const interface indyLedger { @@ -79,14 +107,14 @@ interface indyLedger { } export interface AriesRestConfig { label: string - walletConfig: WalletConfig + walletConfig: AskarModuleConfigStoreOptions indyLedger: indyLedger[] adminPort: number publicDidSeed?: string endpoints?: string[] autoAcceptConnections?: boolean - autoAcceptCredentials?: AutoAcceptCredential - autoAcceptProofs?: AutoAcceptProof + autoAcceptCredentials?: DidCommAutoAcceptCredential + autoAcceptProofs?: DidCommAutoAcceptProof logLevel?: LogLevel inboundTransports?: InboundTransport[] outboundTransports?: Transports[] @@ -115,7 +143,17 @@ export async function readRestConfig(path: string) { export type RestMultiTenantAgentModules = Awaited> export type RestAgentModules = Awaited> - +function requireEnv(name: string): string { + const value = process.env[name] + if (!value) { + throw new Error(`Missing environment variable: ${name}`) + } + return value +} +const expressApp = express() +expressApp.disable('x-powered-by') +expressApp.use(express.json({ limit: process.env.APP_JSON_BODY_SIZE ?? '5mb' })) +expressApp.use(express.urlencoded({ limit: process.env.APP_URL_ENCODED_BODY_SIZE ?? '5mb', extended: true })) // TODO: add object const getModules = ( networkConfig: [IndyVdrPoolConfig, ...IndyVdrPoolConfig[]], @@ -125,19 +163,25 @@ const getModules = ( rpcUrl: string, schemaManagerContractAddress: string, autoAcceptConnections: boolean, - autoAcceptCredentials: AutoAcceptCredential, - autoAcceptProofs: AutoAcceptProof, + autoAcceptCredentials: DidCommAutoAcceptCredential, + autoAcceptProofs: DidCommAutoAcceptProof, walletScheme: AskarMultiWalletDatabaseScheme, + storeOptions: AskarModuleConfigStoreOptions, + endpoints: string[], ) => { - const legacyIndyCredentialFormat = new LegacyIndyCredentialFormatService() - const legacyIndyProofFormat = new LegacyIndyProofFormatService() - const jsonLdCredentialFormatService = new JsonLdCredentialFormatService() - const anonCredsCredentialFormatService = new AnonCredsCredentialFormatService() - const anonCredsProofFormatService = new AnonCredsProofFormatService() - const presentationExchangeProofFormatService = new DifPresentationExchangeProofFormatService() + const legacyIndyCredentialFormat = new LegacyIndyDidCommCredentialFormatService() + const legacyIndyProofFormat = new LegacyIndyDidCommProofFormatService() + const jsonLdCredentialFormatService = new DidCommJsonLdCredentialFormatService() + const anonCredsCredentialFormatService = new AnonCredsDidCommCredentialFormatService() + const anonCredsProofFormatService = new AnonCredsDidCommProofFormatService() + const presentationExchangeProofFormatService = new DidCommDifPresentationExchangeProofFormatService() + return { askar: new AskarModule({ - ariesAskar, + askar, + store: { + ...storeOptions, + }, multiWalletDatabaseScheme: walletScheme || AskarMultiWalletDatabaseScheme.ProfilePerWallet, }), @@ -145,51 +189,71 @@ const getModules = ( indyVdr, networks: networkConfig, }), - dids: new DidsModule({ - registrars: [new IndyVdrIndyDidRegistrar(), new KeyDidRegistrar(), new PolygonDidRegistrar()], - resolvers: [new IndyVdrIndyDidResolver(), new KeyDidResolver(), new WebDidResolver(), new PolygonDidResolver()], + registrars: [ + new IndyVdrIndyDidRegistrar(), + new KeyDidRegistrar(), + new JwkDidRegistrar(), + new PolygonDidRegistrar(), + ], + resolvers: [ + new IndyVdrIndyDidResolver(), + new KeyDidResolver(), + new WebDidResolver(), + new JwkDidResolver(), + new PolygonDidResolver(), + ], }), anoncreds: new AnonCredsModule({ registries: [new IndyVdrAnonCredsRegistry()], anoncreds, }), - - connections: new ConnectionsModule({ - autoAcceptConnections: autoAcceptConnections || true, - }), - proofs: new ProofsModule({ - autoAcceptProofs: autoAcceptProofs || AutoAcceptProof.ContentApproved, - proofProtocols: [ - new V1ProofProtocol({ - indyProofFormat: legacyIndyProofFormat, - }), - new V2ProofProtocol({ - proofFormats: [legacyIndyProofFormat, anonCredsProofFormatService, presentationExchangeProofFormatService], - }), - ], - }), - credentials: new CredentialsModule({ - autoAcceptCredentials: autoAcceptCredentials || AutoAcceptCredential.Always, - credentialProtocols: [ - new V1CredentialProtocol({ - indyCredentialFormat: legacyIndyCredentialFormat, - }), - new V2CredentialProtocol({ - credentialFormats: [ - legacyIndyCredentialFormat, - jsonLdCredentialFormatService, - anonCredsCredentialFormatService, - ], - }), - ], - }), w3cCredentials: isCustomDocumentLoaderEnabled() ? new W3cCredentialsModule({ documentLoader: CustomDocumentLoader, }) : new W3cCredentialsModule(), + didcomm: new DidCommModule({ + processDidCommMessagesConcurrently: true, + mediationRecipient: true, + messagePickup: true, + mediator: false, + endpoints: endpoints || [], + + basicMessages: true, + connections: { + autoAcceptConnections: autoAcceptConnections ?? true, + peerNumAlgoForDidExchangeRequests: PeerDidNumAlgo.GenesisDoc, + peerNumAlgoForDidRotation: PeerDidNumAlgo.ShortFormAndLongForm, + }, + proofs: { + autoAcceptProofs: autoAcceptProofs || DidCommAutoAcceptProof.ContentApproved, + proofProtocols: [ + new DidCommProofV1Protocol({ + indyProofFormat: legacyIndyProofFormat, + }), + new DidCommProofV2Protocol({ + proofFormats: [legacyIndyProofFormat, anonCredsProofFormatService, presentationExchangeProofFormatService], + }), + ], + }, + credentials: { + autoAcceptCredentials: autoAcceptCredentials || DidCommAutoAcceptCredential.Always, + credentialProtocols: [ + new DidCommCredentialV1Protocol({ + indyCredentialFormat: legacyIndyCredentialFormat, + }), + new DidCommCredentialV2Protocol({ + credentialFormats: [ + legacyIndyCredentialFormat, + jsonLdCredentialFormatService, + anonCredsCredentialFormatService, + ], + }), + ], + }, + }), cache: new CacheModule({ cache: new InMemoryLruCache({ limit: Number(process.env.INMEMORY_LRU_CACHE_LIMIT) || Infinity }), }), @@ -205,6 +269,50 @@ const getModules = ( rpcUrl: rpcUrl ? rpcUrl : (process.env.RPC_URL as string), serverUrl: fileServerUrl ? fileServerUrl : (process.env.SERVER_URL as string), }), + sdJwtVc: new SdJwtVcModule(), + openid4vc: new OpenId4VcModule({ + app: expressApp, + issuer: { + baseUrl: + process.env.NODE_ENV === 'PROD' + ? `https://${requireEnv('APP_URL')}/oid4vci` + : `${requireEnv('AGENT_HTTP_URL')}/oid4vci`, + app: expressApp, + statefulCredentialOfferExpirationInSeconds: Number(process.env.OID4VCI_CRED_OFFER_EXPIRY) || 3600, + accessTokenExpiresInSeconds: Number(process.env.OID4VCI_ACCESS_TOKEN_EXPIRY) || 3600, + authorizationCodeExpiresInSeconds: Number(process.env.OID4VCI_AUTH_CODE_EXPIRY) || 3600, + cNonceExpiresInSeconds: Number(process.env.OID4VCI_CNONCE_EXPIRY) || 3600, + dpopRequired: false, + credentialRequestToCredentialMapper: (...args) => getMixedCredentialRequestToCredentialMapper()(...args), + }, + verifier: { + baseUrl: + process.env.NODE_ENV === 'PROD' + ? `https://${requireEnv('APP_URL')}/oid4vp` + : `${requireEnv('AGENT_HTTP_URL')}/oid4vp`, + // app: openId4VpApp, + authorizationRequestExpirationInSeconds: Number(process.env.OID4VP_AUTH_REQUEST_PROOF_REQUEST_EXPIRY) || 3600, + }, + }), + openId4VcHolderModule: new OpenId4VcHolderModule(), + x509: new X509Module({ + getTrustedCertificatesForVerification: async ( + agentContext, + { certificateChain, verification: _verification }, + ) => { + //TODO: We need to trust the certificate tenant wise, for that we need to fetch those details from platform + const tenantId = agentContext.contextCorrelationId + + const authType = getAuthType() + + if (authType === AuthTypes.ClientAuth) { + return await getX509CertsByClientToken(tenantId, certificateChain) + } + + // NoAuth: return all certs from the static trust list URL + return await getX509CertsByUrl() + }, + }), } } @@ -217,9 +325,11 @@ const getWithTenantModules = ( rpcUrl: string, schemaManagerContractAddress: string, autoAcceptConnections: boolean, - autoAcceptCredentials: AutoAcceptCredential, - autoAcceptProofs: AutoAcceptProof, + autoAcceptCredentials: DidCommAutoAcceptCredential, + autoAcceptProofs: DidCommAutoAcceptProof, walletScheme: AskarMultiWalletDatabaseScheme, + walletConfig: AskarModuleConfigStoreOptions, + endpoints: string[], ) => { const modules = getModules( networkConfig, @@ -232,6 +342,8 @@ const getWithTenantModules = ( autoAcceptCredentials, autoAcceptProofs, walletScheme, + walletConfig, + endpoints, ) return { tenants: new TenantsModule({ @@ -262,6 +374,7 @@ const getWithTenantModules = ( export async function runRestAgent(restConfig: AriesRestConfig) { const { + endpoints, schemaFileServerURL, logLevel, inboundTransports = [], @@ -286,21 +399,13 @@ export async function runRestAgent(restConfig: AriesRestConfig) { const logger = new TsLogger(logLevel ?? LogLevel.error) const agentConfig: InitConfig = { - walletConfig: { - id: walletConfig.id, - key: walletConfig.key, - storage: walletConfig.storage, - }, ...afjConfig, logger, autoUpdateStorageOnStartup: true, - // As backup is only supported for sqlite storage - // we need to manually take backup of the storage before updating the storage - backupBeforeStorageUpdate: false, // Ideally for testing connection between tenant agent we need to set this to 'true'. Default is 'false' // TODO: triage: not sure if we want it to be 'true', as it would mean parallel requests on BW - // Setting it for now - processDidCommMessagesConcurrently: true, + // Setting it for now //TODO: check if this is needed + allowInsecureHttpUrls: process.env.ALLOW_INSECURE_HTTP_URLS === 'true', } async function fetchLedgerData(ledgerConfig: { @@ -341,7 +446,7 @@ export async function runRestAgent(restConfig: AriesRestConfig) { let networkConfig: [IndyVdrPoolConfig, ...IndyVdrPoolConfig[]] - const parseIndyLedger = afjConfig?.indyLedger + const parseIndyLedger = afjConfig?.indyLedger ?? [] if (parseIndyLedger.length !== 0) { networkConfig = [ await fetchLedgerData(parseIndyLedger[0]), @@ -357,39 +462,43 @@ export async function runRestAgent(restConfig: AriesRestConfig) { }, ] } + let modules + + if (afjConfig.tenancy) { + modules = getWithTenantModules( + networkConfig, + didRegistryContractAddress || '', + fileServerToken || '', + fileServerUrl || '', + rpcUrl || '', + schemaManagerContractAddress || '', + autoAcceptConnections ?? true, + autoAcceptCredentials || DidCommAutoAcceptCredential.Always, + autoAcceptProofs || DidCommAutoAcceptProof.ContentApproved, + walletScheme || AskarMultiWalletDatabaseScheme.ProfilePerWallet, + walletConfig, + endpoints || [], + ) + } else { + modules = getModules( + networkConfig, + didRegistryContractAddress || '', + fileServerToken || '', + fileServerUrl || '', + rpcUrl || '', + schemaManagerContractAddress || '', + autoAcceptConnections ?? true, + autoAcceptCredentials || DidCommAutoAcceptCredential.Always, + autoAcceptProofs || DidCommAutoAcceptProof.ContentApproved, + walletScheme || AskarMultiWalletDatabaseScheme.ProfilePerWallet, + walletConfig, + endpoints || [], + ) + } - const tenantModule = await getWithTenantModules( - networkConfig, - didRegistryContractAddress || '', - fileServerToken || '', - fileServerUrl || '', - rpcUrl || '', - schemaManagerContractAddress || '', - autoAcceptConnections || true, - autoAcceptCredentials || AutoAcceptCredential.Always, - autoAcceptProofs || AutoAcceptProof.ContentApproved, - walletScheme || AskarMultiWalletDatabaseScheme.ProfilePerWallet, - ) - const modules = getModules( - networkConfig, - didRegistryContractAddress || '', - fileServerToken || '', - fileServerUrl || '', - rpcUrl || '', - schemaManagerContractAddress || '', - autoAcceptConnections || true, - autoAcceptCredentials || AutoAcceptCredential.Always, - autoAcceptProofs || AutoAcceptProof.ContentApproved, - walletScheme || AskarMultiWalletDatabaseScheme.ProfilePerWallet, - ) const agent = new Agent({ config: agentConfig, modules: { - ...(afjConfig.tenancy - ? { - ...tenantModule, - } - : {}), ...modules, }, dependencies: agentDependencies, @@ -398,13 +507,25 @@ export async function runRestAgent(restConfig: AriesRestConfig) { // Register outbound transports for (const outboundTransport of outboundTransports) { const OutboundTransport = outboundTransportMapping[outboundTransport] - agent.registerOutboundTransport(new OutboundTransport()) + agent.modules.didcomm.registerOutboundTransport(new OutboundTransport()) } // Register inbound transports for (const inboundTransport of inboundTransports) { const InboundTransport = inboundTransportMapping[inboundTransport.transport] - agent.registerInboundTransport(new InboundTransport({ port: inboundTransport.port })) + const transport = new InboundTransport({ port: inboundTransport.port }) + agent.modules.didcomm.registerInboundTransport(transport) + + // Configure the oid4vc routers on the http inbound transport + if (transport instanceof DidCommHttpInboundTransport) { + transport.app.use( + bodyParser.urlencoded({ + extended: true, + limit: process.env.APP_URL_ENCODED_BODY_SIZE ?? '5mb', + }), + ) + transport.app.use(bodyParser.json({ limit: process.env.APP_JSON_BODY_SIZE ?? '5mb' })) + } } await agent.initialize() @@ -439,13 +560,43 @@ export async function runRestAgent(restConfig: AriesRestConfig) { webhookUrl, port: adminPort, schemaFileServerURL, + app: expressApp, }, apiKey, ) logger.info(`*** API Key: ${apiKey}`) - app.listen(adminPort, () => { + // Start purge schedulers if enabled (NATS and Cron are independent) + const purgeConfig = buildPurgeConfig() + if (purgeConfig) { + await validatePurgeConfig(purgeConfig) + initPurgeSchedulers(purgeConfig.natsConfig.enabled, purgeConfig.cronConfig.enabled) + + const purgeWebhookUrl = purgeConfig.webhookEnabled ? webhookUrl : undefined + + if (purgeConfig.natsConfig.enabled) { + await getNatsPurgeScheduler()!.start(agent, purgeConfig, purgeWebhookUrl) + } + + if (purgeConfig.cronConfig.enabled) { + await getCronPurgeScheduler()!.start(agent, purgeConfig, purgeWebhookUrl) + } + } + + const server = app.listen(adminPort, () => { logger.info(`Successfully started server on port ${adminPort}`) }) + + // Graceful shutdown + const shutdown = async () => { + agent.config.logger.info('[Shutdown] Stopping services...') + server.close() + await stopPurgeSchedulers() + await agent.shutdown() + process.exit(0) + } + + process.on('SIGTERM', shutdown) + process.on('SIGINT', shutdown) } diff --git a/src/controllers/agent/AgentController.ts b/src/controllers/agent/AgentController.ts index cb203190..891ad5a2 100644 --- a/src/controllers/agent/AgentController.ts +++ b/src/controllers/agent/AgentController.ts @@ -1,31 +1,13 @@ -import type { RestAgentModules } from '../../cliAgent' -import type { - AgentInfo, - AgentToken, - CustomW3cJsonLdSignCredentialOptions, - SafeW3cJsonLdVerifyCredentialOptions, - SignDataOptions, - VerifyDataOptions, -} from '../types' +import type { AgentInfo, AgentToken, SafeW3cJsonLdVerifyCredentialOptions } from '../types' -import { assertAskarWallet } from '@credo-ts/askar/build/utils/assertAskarWallet' -import { - Agent, - ClaimFormat, - JsonTransformer, - Key, - TypedArrayEncoder, - W3cJsonLdSignCredentialOptions, - W3cJsonLdVerifiableCredential, -} from '@credo-ts/core' +import { JsonTransformer, W3cJsonLdVerifiableCredential } from '@credo-ts/core' import { Request as Req } from 'express' import jwt from 'jsonwebtoken' -import { Controller, Delete, Get, Route, Tags, Security, Request, Post, Body, Path, Query } from 'tsoa' +import { Controller, Get, Route, Tags, Security, Request, Post, Body } from 'tsoa' import { injectable } from 'tsyringe' import { AgentRole, SCOPES } from '../../enums' import ErrorHandlingService from '../../errorHandlingService' -import { BadRequestError } from '../../errors' @Tags('Agent') @Route('/agent') @@ -38,9 +20,10 @@ export class AgentController extends Controller { @Get('/') public async getAgentInfo(@Request() request: Req): Promise { try { + // TODO: Need to update this config payload based on modules like didcom amd openid4vc return { - label: request.agent.config.label, - endpoints: request.agent.config.endpoints, + label: request.agent.context.contextCorrelationId, + endpoints: request.agent.modules.didcomm.config.endpoints, isInitialized: request.agent.isInitialized, publicDid: undefined, } @@ -71,108 +54,108 @@ export class AgentController extends Controller { } } - /** - * Delete wallet - */ - @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) - @Delete('/wallet') - public async deleteWallet(@Request() request: Req) { - try { - const deleteWallet = await request.agent.wallet.delete() - return deleteWallet - } catch (error) { - throw ErrorHandlingService.handle(error) - } - } + // /** + // * Delete wallet + // */ + // @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) + // @Delete('/wallet') + // public async deleteWallet(@Request() request: Req) { + // try { + // const deleteWallet = await request.agent.wallet.delete() + // return deleteWallet + // } catch (error) { + // throw ErrorHandlingService.handle(error) + // } + // } - /** - * Verify data using a key - * - * @param tenantId Tenant identifier - * @param request Verify options - * data - Data has to be in base64 format - * publicKeyBase58 - Public key in base58 format - * signature - Signature in base64 format - * @returns isValidSignature - true if signature is valid, false otherwise - */ - @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) - @Post('/verify') - public async verify(@Request() request: Req, @Body() body: VerifyDataOptions) { - try { - assertAskarWallet(request.agent.context.wallet) - const isValidSignature = await request.agent.context.wallet.verify({ - data: TypedArrayEncoder.fromBase64(body.data), - key: Key.fromPublicKeyBase58(body.publicKeyBase58, body.keyType), - signature: TypedArrayEncoder.fromBase64(body.signature), - }) - return isValidSignature - } catch (error) { - throw ErrorHandlingService.handle(error) - } - } + // /** + // * Verify data using a key + // * + // * @param tenantId Tenant identifier + // * @param request Verify options + // * data - Data has to be in base64 format + // * publicKeyBase58 - Public key in base58 format + // * signature - Signature in base64 format + // * @returns isValidSignature - true if signature is valid, false otherwise + // */ + // @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) + // @Post('/verify') + // public async verify(@Request() request: Req, @Body() body: VerifyDataOptions) { + // try { + // assertAskarWallet(request.agent.context.wallet) + // const isValidSignature = await request.agent.context.wallet.verify({ + // data: TypedArrayEncoder.fromBase64(body.data), + // key: Key.fromPublicKeyBase58(body.publicKeyBase58, body.keyType), + // signature: TypedArrayEncoder.fromBase64(body.signature), + // }) + // return isValidSignature + // } catch (error) { + // throw ErrorHandlingService.handle(error) + // } + // } - //Triage: Do we want the BW to be able to sign and verify as well? - @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) - @Post('/credential/sign') - public async signCredential( - @Request() request: Req, - @Query('storeCredential') storeCredential: boolean, - @Query('dataTypeToSign') dataTypeToSign: 'rawData' | 'jsonLd', - @Body() data: CustomW3cJsonLdSignCredentialOptions | SignDataOptions | unknown, - ) { - try { - // JSON-LD VC Signing - if (dataTypeToSign === 'jsonLd') { - const credentialData = data as unknown as W3cJsonLdSignCredentialOptions - credentialData.format = ClaimFormat.LdpVc - const signedCredential = (await request.agent.w3cCredentials.signCredential( - credentialData, - )) as W3cJsonLdVerifiableCredential - if (storeCredential) { - return await request.agent.w3cCredentials.storeCredential({ credential: signedCredential }) - } - return signedCredential.toJson() - } + // //Triage: Do we want the BW to be able to sign and verify as well? + // @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) + // @Post('/credential/sign') + // public async signCredential( + // @Request() request: Req, + // @Query('storeCredential') storeCredential: boolean, + // @Query('dataTypeToSign') dataTypeToSign: 'rawData' | 'jsonLd', + // @Body() data: CustomW3cJsonLdSignCredentialOptions | SignDataOptions | unknown, + // ) { + // try { + // // JSON-LD VC Signing + // if (dataTypeToSign === 'jsonLd') { + // const credentialData = data as unknown as W3cJsonLdSignCredentialOptions + // credentialData.format = ClaimFormat.LdpVc + // const signedCredential = (await request.agent.w3cCredentials.signCredential( + // credentialData, + // )) as W3cJsonLdVerifiableCredential + // if (storeCredential) { + // return await request.agent.w3cCredentials.storeCredential({ credential: signedCredential }) + // } + // return signedCredential.toJson() + // } - // Raw Data Signing - const rawData = data as SignDataOptions - if (!rawData.data) throw new BadRequestError('Missing "data" for raw data signing.') + // // Raw Data Signing + // const rawData = data as SignDataOptions + // if (!rawData.data) throw new BadRequestError('Missing "data" for raw data signing.') - const hasDidOrMethod = rawData.did || rawData.method - const hasPublicKey = rawData.publicKeyBase58 && rawData.keyType - if (!hasDidOrMethod && !hasPublicKey) { - throw new BadRequestError('Either (did or method) OR (publicKeyBase58 and keyType) must be provided.') - } + // const hasDidOrMethod = rawData.did || rawData.method + // const hasPublicKey = rawData.publicKeyBase58 && rawData.keyType + // if (!hasDidOrMethod && !hasPublicKey) { + // throw new BadRequestError('Either (did or method) OR (publicKeyBase58 and keyType) must be provided.') + // } - let keyToUse: Key - if (hasDidOrMethod) { - const dids = await request.agent.dids.getCreatedDids({ - method: rawData.method || undefined, - did: rawData.did || undefined, - }) - const verificationMethod = dids[0]?.didDocument?.verificationMethod?.[0]?.publicKeyBase58 - if (!verificationMethod) { - throw new BadRequestError('No publicKeyBase58 found for the given DID or method.') - } - keyToUse = Key.fromPublicKeyBase58(verificationMethod, rawData.keyType) - } else { - keyToUse = Key.fromPublicKeyBase58(rawData.publicKeyBase58, rawData.keyType) - } + // let keyToUse: Key + // if (hasDidOrMethod) { + // const dids = await request.agent.dids.getCreatedDids({ + // method: rawData.method || undefined, + // did: rawData.did || undefined, + // }) + // const verificationMethod = dids[0]?.didDocument?.verificationMethod?.[0]?.publicKeyBase58 + // if (!verificationMethod) { + // throw new BadRequestError('No publicKeyBase58 found for the given DID or method.') + // } + // keyToUse = Key.fromPublicKeyBase58(verificationMethod, rawData.keyType) + // } else { + // keyToUse = Key.fromPublicKeyBase58(rawData.publicKeyBase58, rawData.keyType) + // } - if (!keyToUse) { - throw new Error('Unable to construct signing key. ') - } + // if (!keyToUse) { + // throw new Error('Unable to construct signing key. ') + // } - const signature = await request.agent.context.wallet.sign({ - data: TypedArrayEncoder.fromBase64(rawData.data), - key: keyToUse, - }) + // const signature = await request.agent.context.wallet.sign({ + // data: TypedArrayEncoder.fromBase64(rawData.data), + // key: keyToUse, + // }) - return TypedArrayEncoder.toBase64(signature) - } catch (error) { - throw ErrorHandlingService.handle(error) - } - } + // return TypedArrayEncoder.toBase64(signature) + // } catch (error) { + // throw ErrorHandlingService.handle(error) + // } + // } @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) @Post('/credential/verify') diff --git a/src/controllers/anoncreds/cred-def/CredentialDefinitionController.ts b/src/controllers/anoncreds/cred-def/CredentialDefinitionController.ts index 4c643bba..3578956e 100644 --- a/src/controllers/anoncreds/cred-def/CredentialDefinitionController.ts +++ b/src/controllers/anoncreds/cred-def/CredentialDefinitionController.ts @@ -12,6 +12,11 @@ import ErrorHandlingService from '../../../errorHandlingService' import { ENDORSER_DID_NOT_PRESENT } from '../../../errorMessages' import { BadRequestError, InternalServerError, NotFoundError } from '../../../errors/errors' import { CredentialDefinitionExample, CredentialDefinitionId } from '../../examples' +import { + CredentialDefinitionStates, + GetCredentialDefinitionReturn, + RegisterCredentialDefinitionReturn, +} from '../../types' @Tags('Anoncreds - Credential Definitions') @Route('/anoncreds/credential-definitions') @@ -29,7 +34,7 @@ export class CredentialDefinitionController extends Controller { public async getCredentialDefinitionById( @Request() request: Req, @Path('credentialDefinitionId') credentialDefinitionId: CredentialDefinitionId, - ) { + ): Promise { try { const credentialDefinitionResult = await request.agent.modules.anoncreds.getCredentialDefinition(credentialDefinitionId) @@ -73,7 +78,7 @@ export class CredentialDefinitionController extends Controller { endorse?: boolean endorserDid?: string }, - ) { + ): Promise { try { const { issuerId, schemaId, tag, endorse, endorserDid } = credentialDefinitionRequest credentialDefinitionRequest.endorse = credentialDefinitionRequest.endorse @@ -108,7 +113,10 @@ export class CredentialDefinitionController extends Controller { await request.agent.modules.anoncreds.registerCredentialDefinition(credentialDefinitionPayload) if (registerCredentialDefinitionResult.credentialDefinitionState.state === CredentialEnum.Failed) { - throw new InternalServerError('Falied to register credef on ledger') + const failureReason = + registerCredentialDefinitionResult.credentialDefinitionState?.reason ?? + 'Failed to register credential definition on ledger' + throw new InternalServerError(failureReason) } if (registerCredentialDefinitionResult.credentialDefinitionState.state === CredentialEnum.Wait) { diff --git a/src/controllers/anoncreds/endorser-transaction/EndorserTransactionController.ts b/src/controllers/anoncreds/endorser-transaction/EndorserTransactionController.ts index fb0ff621..cbe41fb0 100644 --- a/src/controllers/anoncreds/endorser-transaction/EndorserTransactionController.ts +++ b/src/controllers/anoncreds/endorser-transaction/EndorserTransactionController.ts @@ -1,203 +1,203 @@ -import type { IndyVdrDidCreateOptions } from '@credo-ts/indy-vdr' +// import type { IndyVdrDidCreateOptions } from '@credo-ts/indy-vdr' -import { - getUnqualifiedCredentialDefinitionId, - getUnqualifiedSchemaId, - parseIndyCredentialDefinitionId, - parseIndySchemaId, -} from '@credo-ts/anoncreds' -import { Request as Req } from 'express' -import { Body, Controller, Post, Route, Tags, Security, Request } from 'tsoa' -import { injectable } from 'tsyringe' +// import { +// getUnqualifiedCredentialDefinitionId, +// getUnqualifiedSchemaId, +// parseIndyCredentialDefinitionId, +// parseIndySchemaId, +// } from '@credo-ts/anoncreds' +// import { Request as Req } from 'express' +// import { Body, Controller, Post, Route, Tags, Security, Request } from 'tsoa' +// import { injectable } from 'tsyringe' -import { CredentialEnum, EndorserMode, SCOPES } from '../../../enums' -import ErrorHandlingService from '../../../errorHandlingService' -import { BadRequestError } from '../../../errors' -import { AgentType } from '../../../types' -import { DidNymTransaction, EndorserTransaction, WriteTransaction } from '../../types' +// import { CredentialEnum, EndorserMode, SCOPES } from '../../../enums' +// import ErrorHandlingService from '../../../errorHandlingService' +// import { BadRequestError } from '../../../errors' +// import { AgentType } from '../../../types' +// import { DidNymTransaction, EndorserTransaction, WriteTransaction } from '../../types' -@Tags('Anoncreds - EndorserTransaction') -@Route('/anoncreds/transactions') -@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) -@injectable() -export class EndorserTransactionController extends Controller { - @Post('/endorse') - public async endorserTransaction(@Request() request: Req, @Body() endorserTransaction: EndorserTransaction) { - try { - if (!endorserTransaction.transaction) { - throw new BadRequestError('Transaction is required') - } - if (!endorserTransaction.endorserDid) { - throw new BadRequestError('EndorserDid is required') - } - const signedTransaction = await request.agent.modules.indyVdr.endorseTransaction( - endorserTransaction.transaction, - endorserTransaction.endorserDid, - ) +// @Tags('Anoncreds - EndorserTransaction') +// @Route('/anoncreds/transactions') +// @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) +// @injectable() +// export class EndorserTransactionController extends Controller { +// @Post('/endorse') +// public async endorserTransaction(@Request() request: Req, @Body() endorserTransaction: EndorserTransaction) { +// try { +// if (!endorserTransaction.transaction) { +// throw new BadRequestError('Transaction is required') +// } +// if (!endorserTransaction.endorserDid) { +// throw new BadRequestError('EndorserDid is required') +// } +// const signedTransaction = await request.agent.modules.indyVdr.endorseTransaction( +// endorserTransaction.transaction, +// endorserTransaction.endorserDid, +// ) - return { signedTransaction } - } catch (error) { - throw ErrorHandlingService.handle(error) - } - } +// return { signedTransaction } +// } catch (error) { +// throw ErrorHandlingService.handle(error) +// } +// } - @Post('/set-endorser-role') - public async didNymTransaction(@Request() request: Req, @Body() didNymTransaction: DidNymTransaction) { - try { - const didCreateSubmitResult = await request.agent.dids.create({ - did: didNymTransaction.did, - options: { - endorserMode: EndorserMode.External, - endorsedTransaction: { - nymRequest: didNymTransaction.nymRequest, - }, - }, - }) +// @Post('/set-endorser-role') +// public async didNymTransaction(@Request() request: Req, @Body() didNymTransaction: DidNymTransaction) { +// try { +// const didCreateSubmitResult = await request.agent.dids.create({ +// did: didNymTransaction.did, +// options: { +// endorserMode: EndorserMode.External, +// endorsedTransaction: { +// nymRequest: didNymTransaction.nymRequest, +// }, +// }, +// }) - // Importing did in accordance to the multi-tenant flow - await request.agent.dids.import({ - did: didNymTransaction.did, - overwrite: true, - }) +// // Importing did in accordance to the multi-tenant flow +// await request.agent.dids.import({ +// did: didNymTransaction.did, +// overwrite: true, +// }) - return didCreateSubmitResult - } catch (error) { - throw ErrorHandlingService.handle(error) - } - } +// return didCreateSubmitResult +// } catch (error) { +// throw ErrorHandlingService.handle(error) +// } +// } - @Post('/write') - public async writeSchemaAndCredDefOnLedger( - @Request() request: Req, - @Body() - writeTransaction: WriteTransaction, - ) { - try { - if (writeTransaction.schema) { - const writeSchema = await this.submitSchemaOnLedger( - request.agent, - writeTransaction.schema, - writeTransaction.endorsedTransaction, - ) - return writeSchema - } else if (writeTransaction.credentialDefinition) { - const writeCredDef = await this.submitCredDefOnLedger( - request.agent, - writeTransaction.credentialDefinition, - writeTransaction.endorsedTransaction, - ) - return writeCredDef - } else { - throw new Error('Please provide valid schema or credential-def!') - } - } catch (error) { - throw ErrorHandlingService.handle(error) - } - } +// @Post('/write') +// public async writeSchemaAndCredDefOnLedger( +// @Request() request: Req, +// @Body() +// writeTransaction: WriteTransaction, +// ) { +// try { +// if (writeTransaction.schema) { +// const writeSchema = await this.submitSchemaOnLedger( +// request.agent, +// writeTransaction.schema, +// writeTransaction.endorsedTransaction, +// ) +// return writeSchema +// } else if (writeTransaction.credentialDefinition) { +// const writeCredDef = await this.submitCredDefOnLedger( +// request.agent, +// writeTransaction.credentialDefinition, +// writeTransaction.endorsedTransaction, +// ) +// return writeCredDef +// } else { +// throw new Error('Please provide valid schema or credential-def!') +// } +// } catch (error) { +// throw ErrorHandlingService.handle(error) +// } +// } - public async submitSchemaOnLedger( - agent: AgentType, - schema: { - issuerId: string - name: string - version: string - attributes: string[] - }, - endorsedTransaction?: string, - ) { - if (!schema.issuerId) { - throw new BadRequestError('IssuerId is required') - } - if (!schema.name) { - throw new BadRequestError('Name is required') - } - if (!schema.version) { - throw new BadRequestError('Version is required') - } - if (!schema.attributes) { - throw new BadRequestError('Attributes is required') - } - const { issuerId, name, version, attributes } = schema - const { schemaState } = await agent.modules.anoncreds.registerSchema({ - options: { - endorserMode: EndorserMode.External, - endorsedTransaction, - }, - schema: { - attrNames: attributes, - issuerId: issuerId, - name: name, - version: version, - }, - }) +// public async submitSchemaOnLedger( +// agent: AgentType, +// schema: { +// issuerId: string +// name: string +// version: string +// attributes: string[] +// }, +// endorsedTransaction?: string, +// ) { +// if (!schema.issuerId) { +// throw new BadRequestError('IssuerId is required') +// } +// if (!schema.name) { +// throw new BadRequestError('Name is required') +// } +// if (!schema.version) { +// throw new BadRequestError('Version is required') +// } +// if (!schema.attributes) { +// throw new BadRequestError('Attributes is required') +// } +// const { issuerId, name, version, attributes } = schema +// const { schemaState } = await agent.modules.anoncreds.registerSchema({ +// options: { +// endorserMode: EndorserMode.External, +// endorsedTransaction, +// }, +// schema: { +// attrNames: attributes, +// issuerId: issuerId, +// name: name, +// version: version, +// }, +// }) - if (!schemaState.schemaId) { - throw new Error('Schema not created') - } - const indySchemaId = parseIndySchemaId(schemaState.schemaId) - const getSchemaUnqualifiedId = await getUnqualifiedSchemaId( - indySchemaId.namespaceIdentifier, - indySchemaId.schemaName, - indySchemaId.schemaVersion, - ) - if (schemaState.state === CredentialEnum.Finished || schemaState.state === CredentialEnum.Action) { - schemaState.schemaId = getSchemaUnqualifiedId - } - return schemaState - } +// if (!schemaState.schemaId) { +// throw new Error('Schema not created') +// } +// const indySchemaId = parseIndySchemaId(schemaState.schemaId) +// const getSchemaUnqualifiedId = await getUnqualifiedSchemaId( +// indySchemaId.namespaceIdentifier, +// indySchemaId.schemaName, +// indySchemaId.schemaVersion, +// ) +// if (schemaState.state === CredentialEnum.Finished || schemaState.state === CredentialEnum.Action) { +// schemaState.schemaId = getSchemaUnqualifiedId +// } +// return schemaState +// } - public async submitCredDefOnLedger( - agent: AgentType, - credentialDefinition: { - schemaId: string - issuerId: string - tag: string - value: unknown - type: string - }, - endorsedTransaction?: string, - ) { - if (!credentialDefinition.schemaId) { - throw new BadRequestError('SchemaId is required') - } - if (!credentialDefinition.issuerId) { - throw new BadRequestError('IssuerId is required') - } - if (!credentialDefinition.tag) { - throw new BadRequestError('Tag is required') - } - if (!credentialDefinition.value) { - throw new BadRequestError('Value is required') - } - if (!credentialDefinition.type) { - throw new BadRequestError('Type is required') - } - const { credentialDefinitionState } = await agent.modules.anoncreds.registerCredentialDefinition({ - credentialDefinition, - options: { - endorserMode: EndorserMode.External, - endorsedTransaction: endorsedTransaction, - // Keep false for now - supportRevocation: false, - }, - }) +// public async submitCredDefOnLedger( +// agent: AgentType, +// credentialDefinition: { +// schemaId: string +// issuerId: string +// tag: string +// value: unknown +// type: string +// }, +// endorsedTransaction?: string, +// ) { +// if (!credentialDefinition.schemaId) { +// throw new BadRequestError('SchemaId is required') +// } +// if (!credentialDefinition.issuerId) { +// throw new BadRequestError('IssuerId is required') +// } +// if (!credentialDefinition.tag) { +// throw new BadRequestError('Tag is required') +// } +// if (!credentialDefinition.value) { +// throw new BadRequestError('Value is required') +// } +// if (!credentialDefinition.type) { +// throw new BadRequestError('Type is required') +// } +// const { credentialDefinitionState } = await agent.modules.anoncreds.registerCredentialDefinition({ +// credentialDefinition, +// options: { +// endorserMode: EndorserMode.External, +// endorsedTransaction: endorsedTransaction, +// // Keep false for now +// supportRevocation: false, +// }, +// }) - if (!credentialDefinitionState.credentialDefinitionId) { - throw Error('Credential Definition Id not found') - } +// if (!credentialDefinitionState.credentialDefinitionId) { +// throw Error('Credential Definition Id not found') +// } - const indyCredDefId = parseIndyCredentialDefinitionId(credentialDefinitionState.credentialDefinitionId) - const getCredentialDefinitionId = await getUnqualifiedCredentialDefinitionId( - indyCredDefId.namespaceIdentifier, - indyCredDefId.schemaSeqNo, - indyCredDefId.tag, - ) - if ( - credentialDefinitionState.state === CredentialEnum.Finished || - credentialDefinitionState.state === CredentialEnum.Action - ) { - credentialDefinitionState.credentialDefinitionId = getCredentialDefinitionId - } - return credentialDefinitionState - } -} +// const indyCredDefId = parseIndyCredentialDefinitionId(credentialDefinitionState.credentialDefinitionId) +// const getCredentialDefinitionId = await getUnqualifiedCredentialDefinitionId( +// indyCredDefId.namespaceIdentifier, +// indyCredDefId.schemaSeqNo, +// indyCredDefId.tag, +// ) +// if ( +// credentialDefinitionState.state === CredentialEnum.Finished || +// credentialDefinitionState.state === CredentialEnum.Action +// ) { +// credentialDefinitionState.credentialDefinitionId = getCredentialDefinitionId +// } +// return credentialDefinitionState +// } +// } diff --git a/src/controllers/anoncreds/schema/SchemaController.ts b/src/controllers/anoncreds/schema/SchemaController.ts index e72fd2aa..9bb1f9fb 100644 --- a/src/controllers/anoncreds/schema/SchemaController.ts +++ b/src/controllers/anoncreds/schema/SchemaController.ts @@ -1,4 +1,4 @@ -import { getUnqualifiedSchemaId, parseIndySchemaId } from '@credo-ts/anoncreds' +import { getUnqualifiedSchemaId, parseIndySchemaId, RegisterSchemaReturnStateFinished } from '@credo-ts/anoncreds' import { Request as Req } from 'express' import { Example, Get, Post, Route, Tags, Security, Path, Body, Controller, Request } from 'tsoa' import { injectable } from 'tsyringe' @@ -8,7 +8,7 @@ import ErrorHandlingService from '../../../errorHandlingService' import { ENDORSER_DID_NOT_PRESENT } from '../../../errorMessages' import { BadRequestError, InternalServerError, NotFoundError } from '../../../errors/errors' import { CreateSchemaSuccessful, SchemaExample, SchemaId } from '../../examples' -import { CreateSchemaInput } from '../../types' +import { CreateSchemaInput, RegisterSchemaReturn, SchemaResponseDTO } from '../../types' @Tags('Anoncreds - Schemas') @Route('/anoncreds/schemas') @@ -26,7 +26,10 @@ export class SchemaController extends Controller { */ @Example(SchemaExample) @Get('/:schemaId') - public async getSchemaById(@Request() request: Req, @Path('schemaId') schemaId: SchemaId) { + public async getSchemaById( + @Request() request: Req, + @Path('schemaId') schemaId: SchemaId, + ): Promise { try { const schemBySchemaId = await request.agent.modules.anoncreds.getSchema(schemaId) @@ -58,7 +61,10 @@ export class SchemaController extends Controller { */ @Post('/') @Example(CreateSchemaSuccessful) - public async createSchema(@Request() request: Req, @Body() schema: CreateSchemaInput) { + public async createSchema( + @Request() request: Req, + @Body() schema: CreateSchemaInput, + ): Promise { try { const { issuerId, name, version, attributes } = schema @@ -118,6 +124,8 @@ export class SchemaController extends Controller { } return createSchemaTxResult } + // If none of the above conditions are met, throw an error or return a default value + throw new InternalServerError('Unexpected schema creation state.') } catch (error) { throw ErrorHandlingService.handle(error) } diff --git a/src/controllers/auth/AuthController.ts b/src/controllers/auth/AuthController.ts new file mode 100644 index 00000000..9f7c66d5 --- /dev/null +++ b/src/controllers/auth/AuthController.ts @@ -0,0 +1,44 @@ +import axios from 'axios' +import { Request as Req } from 'express' +import { Body, Controller, Path, Post, Request, Route, Tags } from 'tsoa' +import { injectable } from 'tsyringe' + +import { BadRequestError } from '../../errors' + +interface OrgTokenRequest { + clientId: string + clientSecret: string +} + +interface OrgTokenResponse { + token: string +} + +@Tags('Auth') +@Route('/v1/orgs') +@injectable() +export class AuthController extends Controller { + /** + * Generate an organization token by forwarding credentials to the platform + */ + // @Security('jwt', [SCOPES.UNPROTECTED]) + @Post('/{orgId}/token') + public async getOrgToken( + @Request() _request: Req, + @Path('orgId') orgId: string, + @Body() body: OrgTokenRequest, + ): Promise { + const trustServiceTokenUrl = process.env.TRUST_SERVICE_TOKEN_URL + if (!trustServiceTokenUrl) { + throw new BadRequestError('TRUST_SERVICE_TOKEN_URL is not configured') + } + + const response = await axios.post( + `${trustServiceTokenUrl}`, + { clientId: body.clientId, clientSecret: body.clientSecret }, + { headers: { 'Content-Type': 'application/json', accept: 'application/json' } }, + ) + + return response.data + } +} diff --git a/src/controllers/did/DidController.ts b/src/controllers/did/DidController.ts index c5427216..f1bf0077 100644 --- a/src/controllers/did/DidController.ts +++ b/src/controllers/did/DidController.ts @@ -1,27 +1,36 @@ import type { DidResolutionResultProps } from '../types' -import type { PolygonDidCreateOptions } from '@ayanworks/credo-polygon-w3c-module/build/dids' +import type { PolygonDidCreateOptions } from '@ayanworks/credo-polygon-w3c-module/build/dids/PolygonDidRegistrar.mjs' import type { DidDocument, KeyDidCreateOptions, PeerDidNumAlgo2CreateOptions } from '@credo-ts/core' +import { transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk } from '@credo-ts/askar' import { - KeyType, TypedArrayEncoder, DidDocumentBuilder, getEd25519VerificationKey2018, - getBls12381G2Key2020, createPeerDidDocumentFromServices, PeerDidNumAlgo, + Kms, + Hasher, + LogLevel, + Agent, + DidKey, } from '@credo-ts/core' +import { Key, KeyAlgorithm, askar } from '@openwallet-foundation/askar-nodejs' import axios from 'axios' import { Request as Req } from 'express' import { Body, Controller, Example, Get, Path, Post, Route, Tags, Security, Request } from 'tsoa' import { injectable } from 'tsyringe' +import { container } from 'tsyringe' -import { DidMethod, Network, Role, SCOPES } from '../../enums' +import { RestMultiTenantAgentModules } from '../../cliAgent' +import { DidMethod, KeyAlgorithmCurve, Network, Role, SCOPES } from '../../enums' import ErrorHandlingService from '../../errorHandlingService' import { BadRequestError, InternalServerError } from '../../errors' import { AgentType } from '../../types' +import { keyAlgorithmToCurve, p521, verkey } from '../../utils/constant' +import { getTypeFromCurve } from '../../utils/helpers' import { CreateDidResponse, Did, DidRecordExample } from '../examples' -import { DidCreate } from '../types' +import { DidCreate, supportedKeyTypesDID } from '../types' @Tags('Dids') @Route('/dids') @@ -33,6 +42,8 @@ export class DidController extends Controller { * @param did Decentralized Identifier * @returns DidResolutionResult */ + private agent = container.resolve(Agent) + @Example(DidRecordExample) @Get('/:did') public async getDidRecordByDid(@Request() request: Req, @Path('did') did: Did) { @@ -63,6 +74,7 @@ export class DidController extends Controller { public async writeDid(@Request() request: Req, @Body() createDidOptions: DidCreate) { let didRes + this.agent.config.logger.info(`askar version ${askar.version()}`) try { if (!createDidOptions.method) { throw new BadRequestError('Method is required') @@ -110,21 +122,25 @@ export class DidController extends Controller { throw Error('keyType is required') } - const didRouting = await agent.mediationRecipient.getRouting({}) - const didDocument = createPeerDidDocumentFromServices([ - { - id: 'didcomm', - recipientKeys: [didRouting.recipientKey], - routingKeys: didRouting.routingKeys, - serviceEndpoint: didRouting.endpoints[0], - }, - ]) + const didRouting = await agent.modules.didcomm.mediationRecipient.getRouting({}) + const { didDocument, keys } = createPeerDidDocumentFromServices( + [ + { + id: 'didcomm', + recipientKeys: [didRouting.recipientKey], + routingKeys: didRouting.routingKeys, + serviceEndpoint: didRouting.endpoints[0], + }, + ], + true, + ) const didPeerResponse = await agent.dids.create({ didDocument, method: DidMethod.Peer, options: { numAlgo: PeerDidNumAlgo.MultipleInceptionKeyWithoutDoc, + keys, }, }) @@ -145,11 +161,11 @@ export class DidController extends Controller { throw new BadRequestError('For indy method network is required') } - if (createDidOptions.keyType !== KeyType.Ed25519) { + if (createDidOptions.keyType !== KeyAlgorithm.Ed25519) { throw new BadRequestError('Only ed25519 key type supported') } - if (!Network.Bcovrin_Testnet && !Network.Indicio_Demonet && !Network.Indicio_Testnet) { + if (!Object.values(Network).includes(createDidOptions.network as Network)) { throw new BadRequestError(`Invalid network for 'indy' method: ${createDidOptions.network}`) } @@ -184,7 +200,9 @@ export class DidController extends Controller { } if (createDidOptions?.role?.toLowerCase() === Role.Endorser) { if (createDidOptions.did) { - await this.importDid(agent, didMethod, createDidOptions.did, createDidOptions.seed) + // Hint: Bcovrin uses seed as private key when creating key. But seed is written as a NYM transaction + // Triage: Make sure what to use, seed or privateKey when accepting from API itself + await this.importDid(agent, didMethod, createDidOptions.did, '', createDidOptions.seed) const getDid = await agent.dids.getCreatedDids({ method: createDidOptions.method, did: `did:${createDidOptions.method}:${createDidOptions.network}:${createDidOptions.did}`, @@ -198,6 +216,9 @@ export class DidController extends Controller { didDocument: didDocument, } } else { + if (!process.env.BCOVRIN_REGISTER_URL) { + throw new InternalServerError('BCOVRIN_REGISTER_URL is not set in environment variables') + } const BCOVRIN_REGISTER_URL = process.env.BCOVRIN_REGISTER_URL as string const res = await axios.post(BCOVRIN_REGISTER_URL, { role: 'ENDORSER', @@ -205,7 +226,7 @@ export class DidController extends Controller { seed: createDidOptions.seed, }) const { did } = res?.data || {} - await this.importDid(agent, didMethod, did, createDidOptions.seed) + await this.importDid(agent, didMethod, did, '', createDidOptions.seed) const didRecord = await agent.dids.getCreatedDids({ method: DidMethod.Indy, did: `did:${DidMethod.Indy}:${Network.Bcovrin_Testnet}:${res.data.did}`, @@ -251,11 +272,11 @@ export class DidController extends Controller { didDocument: didDocument, } } else { - const key = await this.createIndicioKey(agent, createDidOptions) + const { keyId, ...key } = await this.createIndicioKey(agent, createDidOptions) const INDICIO_NYM_URL = process.env.INDICIO_NYM_URL as string const res = await axios.post(INDICIO_NYM_URL, key) if (res.data.statusCode === 200) { - await this.importDid(agent, didMethod, key.did, createDidOptions.seed) + await this.importDid(agent, didMethod, key.did, createDidOptions.seed, undefined, keyId) const didRecord = await agent.dids.getCreatedDids({ method: DidMethod.Indy, did: `${didMethod}:${key.did}`, @@ -269,6 +290,10 @@ export class DidController extends Controller { did: `${didMethod}:${key.did}`, didDocument: didDocument, } + } else { + throw new InternalServerError( + `Failed to register DID with Indicio: ${res.data.message || res.data.body || 'Unknown error'}`, + ) } } } else { @@ -294,26 +319,48 @@ export class DidController extends Controller { if (!createDidOptions.seed) { throw new BadRequestError('Seed is required') } - const key = await agent.wallet.createKey({ - privateKey: TypedArrayEncoder.fromString(createDidOptions.seed), - keyType: KeyType.Ed25519, + // TODO: Remove comments afterwards + // const key = await agent.kms.createKey({ + // privateKey: TypedArrayEncoder.fromString(createDidOptions.seed), + // keyType: KeyAlgorithm.Ed25519, + // }) + + // const buffer = TypedArrayEncoder.fromBase58(key.publicKeyBase58) + // const did = TypedArrayEncoder.toBase58(buffer.slice(0, 16)) + + const privateJwk = transformSeedToPrivateJwk({ + seed: TypedArrayEncoder.fromString(createDidOptions.seed), + type: { + crv: 'Ed25519', + kty: 'OKP', + }, + }).privateJwk + + const key = await agent.kms.importKey({ + privateJwk, }) - const buffer = TypedArrayEncoder.fromBase58(key.publicKeyBase58) - const did = TypedArrayEncoder.toBase58(buffer.slice(0, 16)) + const verificationKey = Kms.PublicJwk.fromPublicJwk(key.publicJwk) as Kms.PublicJwk + + // Create a new key and calculate did according to the rules for indy did method + const publicKeyBytes = verificationKey.publicKey.publicKey + + const did = TypedArrayEncoder.toBase58(publicKeyBytes.slice(0, 16)) let body if (createDidOptions.network === Network.Indicio_Testnet) { body = { network: 'testnet', did, - verkey: TypedArrayEncoder.toBase58(buffer), + verkey: TypedArrayEncoder.toBase58(publicKeyBytes), + keyId: key.keyId, } } else if (createDidOptions.network === Network.Indicio_Demonet) { body = { network: 'demonet', did, - verkey: TypedArrayEncoder.toBase58(buffer), + verkey: TypedArrayEncoder.toBase58(publicKeyBytes), + keyId: key.keyId, } } else { throw new BadRequestError('Please provide a valid did method') @@ -321,51 +368,127 @@ export class DidController extends Controller { return body } - private async importDid(agent: AgentType, didMethod: string, did: string, seed: string) { + private async importDid( + agent: AgentType, + didMethod: string, + did: string, + seed: string, + privateKey?: string, + keyId?: string, + ) { + let _keyId: string + + if (!keyId) { + const { privateJwk } = privateKey + ? transformPrivateKeyToPrivateJwk({ + type: { + crv: 'Ed25519', + kty: 'OKP', + }, + privateKey: TypedArrayEncoder.fromString(privateKey), + }) + : seed + ? transformSeedToPrivateJwk({ + seed: TypedArrayEncoder.fromString(seed), + type: { + crv: 'Ed25519', + kty: 'OKP', + }, + }) + : { + privateJwk: undefined, + } + + if (!privateJwk) { + throw new Error('Either privateKey or seed is required') + } + + const key = await agent.kms.importKey({ privateJwk }) + _keyId = key.keyId + } else { + _keyId = keyId + } + + const completeDid = `${didMethod}:${did}` await agent.dids.import({ - did: `${didMethod}:${did}`, - overwrite: true, - privateKeys: [ + did: completeDid, + keys: [ { - keyType: KeyType.Ed25519, - privateKey: TypedArrayEncoder.fromString(seed), + kmsKeyId: _keyId, + didDocumentRelativeKeyId: verkey, }, ], }) } - public async handleKey(agent: AgentType, didOptions: DidCreate) { let did let didResponse let didDocument - if (!didOptions.seed) { - throw new BadRequestError('Seed is required') - } if (!didOptions.keyType) { throw new BadRequestError('keyType is required') } - if (didOptions.keyType !== KeyType.Ed25519 && didOptions.keyType !== KeyType.Bls12381g2) { - throw new BadRequestError('Only ed25519 and bls12381g2 key type supported') + if (didOptions.keyType === KeyAlgorithm.Bls12381G2) { + throw new BadRequestError('didOptions.keyType for type "bls12381g2" has been deprecated') + } + if (didOptions.keyType === (p521 as KeyAlgorithm)) { + throw new BadRequestError('didOptions.keyType for type p521 is not supported') } - if (!didOptions.did) { - await agent.wallet.createKey({ - keyType: didOptions.keyType, - seed: TypedArrayEncoder.fromString(didOptions.seed), - }) + const normalizedCurve = keyAlgorithmToCurve[didOptions.keyType as KeyAlgorithm] + if (!(normalizedCurve && supportedKeyTypesDID[DidMethod.Key]?.some((kt) => kt.crv === normalizedCurve))) { + throw new BadRequestError(`Invalid keyType: ${didOptions.keyType}`) + } - didResponse = await agent.dids.create({ - method: DidMethod.Key, - options: { - keyType: KeyType.Ed25519, - }, - secret: { + if (!didOptions.did) { + if (didOptions.seed) { + this.agent.config.logger.info('Creating DID:key with provided seed') + const privateJwk = transformPrivateKeyToPrivateJwk({ privateKey: TypedArrayEncoder.fromString(didOptions.seed), - }, - }) - did = `${didResponse.didState.did}` - didDocument = didResponse.didState.didDocument + type: getTypeFromCurve(didOptions.keyType ?? KeyAlgorithm.Ed25519), + }).privateJwk + + const { keyId, publicJwk } = await agent.kms.importKey({ + privateJwk, + }) + + this.agent.config.logger.info(`This is keyId:::::: ${keyId}`) + const publicKey = Kms.PublicJwk.fromPublicJwk(publicJwk) + + const didKey = new DidKey(publicKey) + didDocument = didKey.didDocument + did = didDocument.id + + const verificationMethodId = didDocument.verificationMethod?.[0]?.id + const relativeKeyId = verificationMethodId?.split('#')[1] + + this.agent.config.logger.info(`This is did:::::: ${did}`) + this.agent.config.logger.info(`This is verificationMethodId:::::: ${verificationMethodId}`) + + await agent.dids.import({ + did, + didDocument, + overwrite: true, + keys: [ + { + didDocumentRelativeKeyId: `#${relativeKeyId}`, + kmsKeyId: keyId, + }, + ], + }) + } else { + this.agent.config.logger.info('Creating DID:key without seed') + const { keyId } = await agent.kms.createKey({ + type: getTypeFromCurve(didOptions.keyType ?? KeyAlgorithm.Ed25519), + }) + this.agent.config.logger.info(`This is did:::::: ${did}`) + const didCreateResult = await agent.dids.create({ + method: 'key', + options: { keyId }, + }) + didDocument = didCreateResult.didState.didDocument + did = didCreateResult.didState.did + } } else { did = didOptions.did const createdDid = await agent.dids.getCreatedDids({ @@ -373,16 +496,21 @@ export class DidController extends Controller { did: didOptions.did, }) didDocument = createdDid[0]?.didDocument + + await agent.dids.import({ + did, + overwrite: true, + didDocument, + }) } - await agent.dids.import({ - did, - overwrite: true, - didDocument, - }) + this.agent.config.logger.info(`This is did ${did}`) + this.agent.config.logger.info(`This is didDocument ${JSON.stringify(didDocument)}`) + return { did: did, didDocument: didDocument } } + // TODO: Right now we are using seed as privateKey for did creation. Fix this is API payload public async handleWeb(agent: AgentType, didOptions: DidCreate) { let didDocument: DidDocument if (!didOptions.domain) { @@ -397,35 +525,38 @@ export class DidController extends Controller { throw new BadRequestError('keyType is required') } - if (didOptions.keyType !== KeyType.Ed25519 && didOptions.keyType !== KeyType.Bls12381g2) { - throw new BadRequestError('Only ed25519 and bls12381g2 key type supported') + if (didOptions.keyType !== KeyAlgorithm.Ed25519) { + throw new BadRequestError('Only ed25519 key type supported') } const domain = didOptions.domain const did = `did:${didOptions.method}:${domain}` const keyId = `${did}#key-1` - const key = await agent.wallet.createKey({ - keyType: didOptions.keyType, - // Commenting for now, as per the multi-tenant endpoint - // privateKey: TypedArrayEncoder.fromString(didOptions.seed), - seed: TypedArrayEncoder.fromString(didOptions.seed), - }) + let key + let publicJwk + + if (didOptions.keyType === KeyAlgorithm.Ed25519) { + const { privateJwk } = transformPrivateKeyToPrivateJwk({ + type: { + crv: 'Ed25519', + kty: 'OKP', + }, + privateKey: TypedArrayEncoder.fromString(didOptions.seed), + }) + + key = await agent.kms.importKey({ privateJwk }) - if (didOptions.keyType === KeyType.Ed25519) { + publicJwk = Kms.PublicJwk.fromPublicJwk(key.publicJwk) didDocument = new DidDocumentBuilder(did) .addContext('https://w3id.org/security/suites/ed25519-2018/v1') - .addVerificationMethod(getEd25519VerificationKey2018({ key, id: keyId, controller: did })) - .addAuthentication(keyId) - .addAssertionMethod(keyId) - .build() - } else if (didOptions.keyType === KeyType.Bls12381g2) { - didDocument = new DidDocumentBuilder(did) - .addContext('https://w3id.org/security/bbs/v1') - .addVerificationMethod(getBls12381G2Key2020({ key, id: keyId, controller: did })) + .addVerificationMethod(getEd25519VerificationKey2018({ id: keyId, publicJwk, controller: did })) .addAuthentication(keyId) .addAssertionMethod(keyId) .build() + } else if (didOptions.keyType === KeyAlgorithm.Bls12381G2) { + // Support for BBS signature is discontinued from credo-ts version 0.6.0 + throw new BadRequestError(`Support for ${KeyAlgorithm.Bls12381G2} has been deprecated`) } else { throw new BadRequestError('Unsupported key type') // fallback, but this won't hit due to earlier check } @@ -434,6 +565,12 @@ export class DidController extends Controller { did, overwrite: true, didDocument, + keys: [ + { + didDocumentRelativeKeyId: `#key-1`, + kmsKeyId: key.keyId, + }, + ], }) return { did, didDocument } } diff --git a/src/controllers/didcomm/basic-messages/BasicMessageController.ts b/src/controllers/didcomm/basic-messages/BasicMessageController.ts index 9ba075cd..bc691b92 100644 --- a/src/controllers/didcomm/basic-messages/BasicMessageController.ts +++ b/src/controllers/didcomm/basic-messages/BasicMessageController.ts @@ -1,58 +1,58 @@ -import type { BasicMessageRecord, BasicMessageStorageProps } from '@credo-ts/core' +// import type { DidCommBasicMessageRecord, DidCommBasicMessageStorageProps } from '@credo-ts/didcomm' -import { Request as Req } from 'express' -import { Body, Controller, Example, Get, Path, Post, Route, Tags, Security, Request } from 'tsoa' -import { injectable } from 'tsyringe' +// import { Request as Req } from 'express' +// import { Body, Controller, Example, Get, Path, Post, Route, Tags, Security, Request } from 'tsoa' +// import { injectable } from 'tsyringe' -import { SCOPES } from '../../../enums' -import ErrorHandlingService from '../../../errorHandlingService' -import { BasicMessageRecordExample, RecordId } from '../../examples' +// import { SCOPES } from '../../../enums' +// import ErrorHandlingService from '../../../errorHandlingService' +// import { BasicMessageRecordExample, RecordId } from '../../examples' -@Tags('DIDComm - Basic Messages') -@Route('/didcomm/basic-messages') -@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) -@injectable() -export class BasicMessageController extends Controller { - /** - * Retrieve basic messages by connection id - * - * @param connectionId Connection identifier - * @returns BasicMessageRecord[] - */ - @Example([BasicMessageRecordExample]) - @Get('/:connectionId') - public async getBasicMessages( - @Request() request: Req, - @Path('connectionId') connectionId: RecordId, - ): Promise { - try { - const basicMessageRecords = await request.agent.basicMessages.findAllByQuery({ connectionId }) - this.setStatus(200) - return basicMessageRecords - } catch (error) { - throw ErrorHandlingService.handle(error) - } - } +// @Tags('DIDComm - Basic Messages') +// @Route('/didcomm/basic-messages') +// @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) +// @injectable() +// export class BasicMessageController extends Controller { +// /** +// * Retrieve basic messages by connection id +// * +// * @param connectionId Connection identifier +// * @returns DidCommBasicMessageRecord[] +// */ +// @Example([BasicMessageRecordExample]) +// @Get('/:connectionId') +// public async getBasicMessages( +// @Request() request: Req, +// @Path('connectionId') connectionId: RecordId, +// ): Promise { +// try { +// const basicMessageRecords = await request.agent.modules.basicMessages.findAllByQuery({ connectionId }) +// this.setStatus(200) +// return basicMessageRecords +// } catch (error) { +// throw ErrorHandlingService.handle(error) +// } +// } - /** - * Send a basic message to a connection - * - * @param connectionId Connection identifier - * @param content The content of the message - */ - @Example(BasicMessageRecordExample) - @Post('/:connectionId') - public async sendMessage( - @Request() request: Req, - @Path('connectionId') connectionId: RecordId, - @Body() body: Record<'content', string>, - ) { - try { - const basicMessageRecord = await request.agent.basicMessages.sendMessage(connectionId, body.content) - this.setStatus(201) - return basicMessageRecord - } catch (error) { - throw ErrorHandlingService.handle(error) - } - } -} +// /** +// * Send a basic message to a connection +// * +// * @param connectionId Connection identifier +// * @param content The content of the message +// */ +// @Example(BasicMessageRecordExample) +// @Post('/:connectionId') +// public async sendMessage( +// @Request() request: Req, +// @Path('connectionId') connectionId: RecordId, +// @Body() body: Record<'content', string>, +// ) { +// try { +// const basicMessageRecord = await request.agent.modules.basicMessages.sendMessage(connectionId, body.content) +// this.setStatus(201) +// return basicMessageRecord +// } catch (error) { +// throw ErrorHandlingService.handle(error) +// } +// } +// } diff --git a/src/controllers/didcomm/connections/ConnectionController.ts b/src/controllers/didcomm/connections/ConnectionController.ts index db7cc602..6e7e7ed9 100644 --- a/src/controllers/didcomm/connections/ConnectionController.ts +++ b/src/controllers/didcomm/connections/ConnectionController.ts @@ -1,6 +1,6 @@ -import type { ConnectionRecordProps } from '@credo-ts/core' +import type { DidCommConnectionRecordProps } from '@credo-ts/didcomm' -import { DidExchangeState } from '@credo-ts/core' +import { DidCommDidExchangeState } from '@credo-ts/didcomm' import { Request as Req } from 'express' import { Controller, Delete, Example, Get, Path, Post, Query, Route, Tags, Security, Request } from 'tsoa' import { injectable } from 'tsyringe' @@ -23,20 +23,20 @@ export class ConnectionController extends Controller { * @param theirLabel Their label * @returns ConnectionRecord[] */ - @Example([ConnectionRecordExample]) + @Example([ConnectionRecordExample]) @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) @Get('/didcomm/connections') public async getAllConnections( @Request() request: Req, @Query('outOfBandId') outOfBandId?: string, @Query('alias') alias?: string, - @Query('state') state?: DidExchangeState, + @Query('state') state?: DidCommDidExchangeState, @Query('myDid') myDid?: string, @Query('theirDid') theirDid?: string, @Query('theirLabel') theirLabel?: string, ) { try { - const connections = await request.agent.connections.findAllByQuery({ + const connections = await request.agent.modules.didcomm.connections.findAllByQuery({ outOfBandId, alias, myDid, @@ -56,12 +56,12 @@ export class ConnectionController extends Controller { * @param connectionId Connection identifier * @returns ConnectionRecord */ - @Example(ConnectionRecordExample) + @Example(ConnectionRecordExample) @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) @Get('/didcomm/connections/:connectionId') public async getConnectionById(@Request() request: Req, @Path('connectionId') connectionId: RecordId) { try { - const connection = await request.agent.connections.findById(connectionId) + const connection = await request.agent.modules.didcomm.connections.findById(connectionId) if (!connection) throw new NotFoundError(`Connection with connection id "${connectionId}" not found.`) @@ -81,7 +81,7 @@ export class ConnectionController extends Controller { public async deleteConnection(@Request() request: Req, @Path('connectionId') connectionId: RecordId) { try { this.setStatus(204) - await request.agent.connections.deleteById(connectionId) + await request.agent.modules.didcomm.connections.deleteById(connectionId) } catch (error) { throw ErrorHandlingService.handle(error) } @@ -96,12 +96,12 @@ export class ConnectionController extends Controller { * @param connectionId Connection identifier * @returns ConnectionRecord */ - @Example(ConnectionRecordExample) + @Example(ConnectionRecordExample) @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) @Post('/didcomm/connections/:connectionId/accept-request') public async acceptRequest(@Request() request: Req, @Path('connectionId') connectionId: RecordId) { try { - const connection = await request.agent.connections.acceptRequest(connectionId) + const connection = await request.agent.modules.didcomm.connections.acceptRequest(connectionId) return connection.toJSON() } catch (error) { throw ErrorHandlingService.handle(error) @@ -117,12 +117,12 @@ export class ConnectionController extends Controller { * @param connectionId Connection identifier * @returns ConnectionRecord */ - @Example(ConnectionRecordExample) + @Example(ConnectionRecordExample) @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) @Post('/didcomm/connections/:connectionId/accept-response') public async acceptResponse(@Request() request: Req, @Path('connectionId') connectionId: RecordId) { try { - const connection = await request.agent.connections.acceptResponse(connectionId) + const connection = await request.agent.modules.didcomm.connections.acceptResponse(connectionId) return connection.toJSON() } catch (error) { throw ErrorHandlingService.handle(error) @@ -132,13 +132,11 @@ export class ConnectionController extends Controller { @Get('/didcomm/url/:invitationId') public async getInvitation(@Request() request: Req, @Path('invitationId') invitationId: string) { try { - const outOfBandRecord = await request.agent.oob.findByCreatedInvitationId(invitationId) + const outOfBandRecord = await request.agent.modules.didcomm.connections.findByInvitationDid(invitationId) - if (!outOfBandRecord || outOfBandRecord.state !== 'await-response') - throw new NotFoundError(`connection with invitationId "${invitationId}" not found.`) + if (!outOfBandRecord) throw new NotFoundError(`connection with invitationId "${invitationId}" not found.`) - const invitationJson = outOfBandRecord.outOfBandInvitation.toJSON({ useDidSovPrefixWhereAllowed: true }) - return invitationJson + return outOfBandRecord } catch (error) { throw ErrorHandlingService.handle(error) } diff --git a/src/controllers/didcomm/credentials/CredentialController.ts b/src/controllers/didcomm/credentials/CredentialController.ts index 2cacc5bf..e7a7e1c3 100644 --- a/src/controllers/didcomm/credentials/CredentialController.ts +++ b/src/controllers/didcomm/credentials/CredentialController.ts @@ -1,23 +1,21 @@ -import type { - CredentialExchangeRecordProps, - CredentialProtocolVersionType, - PeerDidNumAlgo2CreateOptions, - Routing, -} from '@credo-ts/core' +import type { PeerDidNumAlgo2CreateOptions } from '@credo-ts/core' +import { W3cCredentialService, createPeerDidDocumentFromServices, PeerDidNumAlgo } from '@credo-ts/core' import { - CredentialState, - W3cCredentialService, - CredentialRole, - createPeerDidDocumentFromServices, - PeerDidNumAlgo, -} from '@credo-ts/core' + DidCommCredentialExchangeRecordProps, + CredentialProtocolVersionType, + DidCommCredentialState, + DidCommCredentialRole, + DidCommRouting, +} from '@credo-ts/didcomm' import { Request as Req } from 'express' import { Body, Controller, Get, Path, Post, Route, Tags, Example, Query, Security, Request } from 'tsoa' import { injectable } from 'tsyringe' import { SCOPES } from '../../../enums' import ErrorHandlingService from '../../../errorHandlingService' +import { PurgeRecordType } from '../../../purge/PurgeTypes' +import { SchedulePurge } from '../../../purge/decorators/SchedulePurge' import { AgentType } from '../../../types' import { CredentialExchangeRecordExample, RecordId } from '../../examples' import { @@ -49,18 +47,18 @@ export class CredentialController extends Controller { * * @returns CredentialExchangeRecord[] */ - @Example([CredentialExchangeRecordExample]) + @Example([CredentialExchangeRecordExample]) @Get('/') public async getAllCredentials( @Request() request: Req, @Query('threadId') threadId?: ThreadId, @Query('parentThreadId') parentThreadId?: ThreadId, @Query('connectionId') connectionId?: RecordId, - @Query('state') state?: CredentialState, - @Query('role') role?: CredentialRole, + @Query('state') state?: DidCommCredentialState, + @Query('role') role?: DidCommCredentialRole, ) { try { - const credentials = await request.agent.credentials.findAllByQuery({ + const credentials = await request.agent.modules.didcomm.credentials.findAllByQuery({ connectionId, threadId, state, @@ -106,11 +104,11 @@ export class CredentialController extends Controller { * @param credentialRecordId * @returns CredentialExchangeRecord */ - @Example(CredentialExchangeRecordExample) + @Example(CredentialExchangeRecordExample) @Get('/:credentialRecordId') public async getCredentialById(@Request() request: Req, @Path('credentialRecordId') credentialRecordId: RecordId) { try { - const credential = await request.agent.credentials.getById(credentialRecordId) + const credential = await request.agent.modules.didcomm.credentials.getById(credentialRecordId) return credential.toJSON() } catch (error) { throw ErrorHandlingService.handle(error) @@ -124,11 +122,11 @@ export class CredentialController extends Controller { * @param options * @returns CredentialExchangeRecord */ - @Example(CredentialExchangeRecordExample) + @Example(CredentialExchangeRecordExample) @Post('/propose-credential') public async proposeCredential(@Request() request: Req, @Body() proposeCredentialOptions: ProposeCredentialOptions) { try { - const credential = await request.agent.credentials.proposeCredential(proposeCredentialOptions) + const credential = await request.agent.modules.didcomm.credentials.proposeCredential(proposeCredentialOptions) return credential } catch (error) { throw ErrorHandlingService.handle(error) @@ -143,14 +141,14 @@ export class CredentialController extends Controller { * @param options * @returns CredentialExchangeRecord */ - @Example(CredentialExchangeRecordExample) + @Example(CredentialExchangeRecordExample) @Post('/accept-proposal') public async acceptProposal( @Request() request: Req, @Body() acceptCredentialProposal: AcceptCredentialProposalOptions, ) { try { - const credential = await request.agent.credentials.acceptProposal(acceptCredentialProposal) + const credential = await request.agent.modules.didcomm.credentials.acceptProposal(acceptCredentialProposal) return credential } catch (error) { @@ -165,11 +163,12 @@ export class CredentialController extends Controller { * @param options * @returns AgentMessage, CredentialExchangeRecord */ - @Example(CredentialExchangeRecordExample) + @Example(CredentialExchangeRecordExample) @Post('/create-offer') + @SchedulePurge(PurgeRecordType.DIDCOMM_CREDENTIAL, (r) => (r as any)?.id) public async createOffer(@Request() request: Req, @Body() createOfferOptions: CreateOfferOptions) { try { - const offer = await request.agent.credentials.offerCredential(createOfferOptions) + const offer = await request.agent.modules.didcomm.credentials.offerCredential(createOfferOptions) return offer } catch (error) { throw ErrorHandlingService.handle(error) @@ -177,35 +176,40 @@ export class CredentialController extends Controller { } @Post('/create-offer-oob') + @SchedulePurge(PurgeRecordType.DIDCOMM_CREDENTIAL, (r) => (r as any)?.credentialExchangeRecordId) public async createOfferOob(@Request() request: Req, @Body() outOfBandOption: CreateOfferOobOptions) { try { let invitationDid: string | undefined - let routing: Routing + let routing: DidCommRouting await this.ensureLinkSecretExists(request.agent) if (outOfBandOption?.invitationDid) { invitationDid = outOfBandOption?.invitationDid } else { - routing = await request.agent.mediationRecipient.getRouting({}) - const didDocument = createPeerDidDocumentFromServices([ - { - id: 'didcomm', - recipientKeys: [routing.recipientKey], - routingKeys: routing.routingKeys, - serviceEndpoint: routing.endpoints[0], - }, - ]) + routing = await request.agent.modules.didcomm.mediationRecipient.getRouting({}) + const { didDocument, keys } = createPeerDidDocumentFromServices( + [ + { + id: 'didcomm', + recipientKeys: [routing.recipientKey], + routingKeys: routing.routingKeys, + serviceEndpoint: routing.endpoints[0], + }, + ], + true, + ) const did = await request.agent.dids.create({ didDocument, method: 'peer', options: { + keys, numAlgo: PeerDidNumAlgo.MultipleInceptionKeyWithoutDoc, }, }) invitationDid = did.didState.did } - const offerOob = await request.agent.credentials.createOffer({ + const offerOob = await request.agent.modules.didcomm.credentials.createOffer({ protocolVersion: outOfBandOption.protocolVersion as CredentialProtocolVersionType<[]>, credentialFormats: outOfBandOption.credentialFormats, autoAcceptCredential: outOfBandOption.autoAcceptCredential, @@ -213,7 +217,7 @@ export class CredentialController extends Controller { }) const credentialMessage = offerOob.message - const outOfBandRecord = await request.agent.oob.createInvitation({ + const outOfBandRecord = await request.agent.modules.didcomm.oob.createInvitation({ label: outOfBandOption.label, messages: [credentialMessage], autoAcceptConnection: true, @@ -223,15 +227,16 @@ export class CredentialController extends Controller { }) return { invitationUrl: outOfBandRecord.outOfBandInvitation.toUrl({ - domain: request.agent.config.endpoints[0], + domain: request.agent.modules.didcomm.config.endpoints[0], }), invitation: outOfBandRecord.outOfBandInvitation.toJSON({ - useDidSovPrefixWhereAllowed: request.agent.config.useDidSovPrefixWhereAllowed, + useDidSovPrefixWhereAllowed: request.agent.modules.didcomm.config.useDidSovPrefixWhereAllowed, }), outOfBandRecord: outOfBandRecord.toJSON(), outOfBandRecordId: outOfBandRecord.id, - credentialRequestThId: offerOob.credentialRecord.threadId, - invitationDid: outOfBandOption?.invitationDid ? '' : invitationDid, + credentialExchangeRecordId: offerOob.credentialExchangeRecord.id, + credentialRequestThId: offerOob.credentialExchangeRecord.threadId, + invitationDid, } } catch (error) { throw ErrorHandlingService.handle(error) @@ -246,12 +251,12 @@ export class CredentialController extends Controller { * @param options * @returns CredentialExchangeRecord */ - @Example(CredentialExchangeRecordExample) + @Example(CredentialExchangeRecordExample) @Post('/accept-offer') public async acceptOffer(@Request() request: Req, @Body() acceptCredentialOfferOptions: CredentialOfferOptions) { try { await this.ensureLinkSecretExists(request.agent) - const acceptOffer = await request.agent.credentials.acceptOffer(acceptCredentialOfferOptions) + const acceptOffer = await request.agent.modules.didcomm.credentials.acceptOffer(acceptCredentialOfferOptions) return acceptOffer } catch (error) { throw ErrorHandlingService.handle(error) @@ -266,14 +271,14 @@ export class CredentialController extends Controller { * @param options * @returns CredentialExchangeRecord */ - @Example(CredentialExchangeRecordExample) + @Example(CredentialExchangeRecordExample) @Post('/accept-request') public async acceptRequest( @Request() request: Req, @Body() acceptCredentialRequestOptions: AcceptCredentialRequestOptions, ) { try { - const credential = await request.agent.credentials.acceptRequest(acceptCredentialRequestOptions) + const credential = await request.agent.modules.didcomm.credentials.acceptRequest(acceptCredentialRequestOptions) return credential } catch (error) { throw ErrorHandlingService.handle(error) @@ -287,11 +292,11 @@ export class CredentialController extends Controller { * @param options * @returns CredentialExchangeRecord */ - @Example(CredentialExchangeRecordExample) + @Example(CredentialExchangeRecordExample) @Post('/accept-credential') public async acceptCredential(@Request() request: Req, @Body() acceptCredential: AcceptCredential) { try { - const credential = await request.agent.credentials.acceptCredential(acceptCredential) + const credential = await request.agent.modules.didcomm.credentials.acceptCredential(acceptCredential) return credential } catch (error) { throw ErrorHandlingService.handle(error) @@ -307,7 +312,7 @@ export class CredentialController extends Controller { @Get('/:credentialRecordId/form-data') public async credentialFormData(@Request() request: Req, @Path('credentialRecordId') credentialRecordId: string) { try { - const credentialDetails = await request.agent.credentials.getFormatData(credentialRecordId) + const credentialDetails = await request.agent.modules.didcomm.credentials.getFormatData(credentialRecordId) return credentialDetails } catch (error) { throw ErrorHandlingService.handle(error) diff --git a/src/controllers/didcomm/outofband/OutOfBandController.ts b/src/controllers/didcomm/outofband/OutOfBandController.ts index ff5d40e4..7b945ecc 100644 --- a/src/controllers/didcomm/outofband/OutOfBandController.ts +++ b/src/controllers/didcomm/outofband/OutOfBandController.ts @@ -1,21 +1,14 @@ import type { OutOfBandInvitationProps, OutOfBandRecordWithInvitationProps } from '../../examples' -import type { AgentMessageType, RecipientKeyOption, CreateInvitationOptions } from '../../types' -import type { - ConnectionRecordProps, - CreateLegacyInvitationConfig, - PeerDidNumAlgo2CreateOptions, - Routing, -} from '@credo-ts/core' +import type { RecipientKeyOption, CreateInvitationOptions, AgentMessageType } from '../../types' +import type { PeerDidNumAlgo2CreateOptions } from '@credo-ts/core' +import { createPeerDidDocumentFromServices, JsonTransformer, PeerDidNumAlgo } from '@credo-ts/core' import { - AgentMessage, - JsonTransformer, - OutOfBandInvitation, - Key, - KeyType, - createPeerDidDocumentFromServices, - PeerDidNumAlgo, -} from '@credo-ts/core' + DidCommConnectionRecordProps, + DidCommRouting, + DidCommOutOfBandInvitation, + DidCommMessage, +} from '@credo-ts/didcomm' import { Request as Req } from 'express' import { Body, Controller, Delete, Example, Get, Path, Post, Query, Route, Tags, Security, Request } from 'tsoa' import { injectable } from 'tsyringe' @@ -45,9 +38,9 @@ export class OutOfBandController extends Controller { invitationId: invitationId, } : {} - const outOfBandRecords = await request.agent.oob.findAllByQuery(query) + const outOfBandRecords = await request.agent.modules.didcomm.oob.findAllByQuery(query) - return outOfBandRecords.map((c) => c.toJSON()) + return outOfBandRecords.map((c: { toJSON: () => any }) => c.toJSON()) } catch (error) { throw ErrorHandlingService.handle(error) } @@ -62,7 +55,7 @@ export class OutOfBandController extends Controller { @Get('/:outOfBandId') public async getOutOfBandRecordById(@Request() request: Req, @Path('outOfBandId') outOfBandId: RecordId) { try { - const outOfBandRecord = await request.agent.oob.findById(outOfBandId) + const outOfBandRecord = await request.agent.modules.didcomm.oob.findById(outOfBandId) if (!outOfBandRecord) throw new NotFoundError(`Out of band record with id "${outOfBandId}" not found.`) @@ -97,20 +90,24 @@ export class OutOfBandController extends Controller { if (config?.invitationDid) { invitationDid = config?.invitationDid } else { - const didRouting = await request.agent.mediationRecipient.getRouting({}) - const didDocument = createPeerDidDocumentFromServices([ - { - id: 'didcomm', - recipientKeys: [didRouting.recipientKey], - routingKeys: didRouting.routingKeys, - serviceEndpoint: didRouting.endpoints[0], - }, - ]) + const didRouting = await request.agent.modules.didcomm.mediationRecipient.getRouting({}) + const { didDocument, keys } = createPeerDidDocumentFromServices( + [ + { + id: 'didcomm', + recipientKeys: [didRouting.recipientKey], + routingKeys: didRouting.routingKeys, + serviceEndpoint: didRouting.endpoints[0], + }, + ], + true, + ) const did = await request.agent.dids.create({ didDocument, method: 'peer', options: { numAlgo: PeerDidNumAlgo.MultipleInceptionKeyWithoutDoc, + keys, }, }) @@ -121,13 +118,13 @@ export class OutOfBandController extends Controller { } } - const outOfBandRecord = await request.agent.oob.createInvitation({ ...config, invitationDid }) + const outOfBandRecord = await request.agent.modules.didcomm.oob.createInvitation({ ...config, invitationDid }) return { invitationUrl: outOfBandRecord.outOfBandInvitation.toUrl({ - domain: request.agent.config.endpoints[0], + domain: request.agent.modules.didcomm.config.endpoints[0], }), invitation: outOfBandRecord.outOfBandInvitation.toJSON({ - useDidSovPrefixWhereAllowed: request.agent.config.useDidSovPrefixWhereAllowed, + useDidSovPrefixWhereAllowed: request.agent.modules.didcomm.config.useDidSovPrefixWhereAllowed, }), outOfBandRecord: outOfBandRecord.toJSON(), invitationDid: config?.invitationDid ? '' : invitationDid, @@ -137,55 +134,6 @@ export class OutOfBandController extends Controller { } } - /** - * Creates an outbound out-of-band record in the same way how `createInvitation` method does it, - * but it also converts out-of-band invitation message to an "legacy" invitation message defined - * in RFC 0160: Connection Protocol and returns it together with out-of-band record. - * - * @param config configuration of how a invitation should be created - * @returns out-of-band record and invitation - */ - @Example<{ invitation: OutOfBandInvitationProps; outOfBandRecord: OutOfBandRecordWithInvitationProps }>({ - invitation: outOfBandInvitationExample, - outOfBandRecord: outOfBandRecordExample, - }) - @Post('/create-legacy-invitation') - public async createLegacyInvitation( - @Request() request: Req, - @Body() config?: Omit & RecipientKeyOption, - ) { - try { - let routing: Routing - if (config?.recipientKey) { - routing = { - endpoints: request.agent.config.endpoints, - routingKeys: [], - recipientKey: Key.fromPublicKeyBase58(config.recipientKey, KeyType.Ed25519), - mediatorId: undefined, - } - } else { - routing = await request.agent.mediationRecipient.getRouting({}) - } - const { outOfBandRecord, invitation } = await request.agent.oob.createLegacyInvitation({ - ...config, - routing, - }) - return { - invitationUrl: invitation.toUrl({ - domain: request.agent.config.endpoints[0], - useDidSovPrefixWhereAllowed: request.agent.config.useDidSovPrefixWhereAllowed, - }), - invitation: invitation.toJSON({ - useDidSovPrefixWhereAllowed: request.agent.config.useDidSovPrefixWhereAllowed, - }), - outOfBandRecord: outOfBandRecord.toJSON(), - ...(config?.recipientKey ? {} : { recipientKey: routing.recipientKey.publicKeyBase58 }), - } - } catch (error) { - throw ErrorHandlingService.handle(error) - } - } - /** * Creates a new connectionless legacy invitation. * @@ -205,14 +153,15 @@ export class OutOfBandController extends Controller { @Body() config: { recordId: string - message: AgentMessageType + message: Record domain: string + routing?: DidCommRouting }, ) { try { - const agentMessage = JsonTransformer.fromJSON(config.message, AgentMessage) + const agentMessage = JsonTransformer.fromJSON(config.message, DidCommMessage) as DidCommMessage - return await request.agent.oob.createLegacyConnectionlessInvitation({ + return await request.agent.modules.didcomm.oob.createLegacyConnectionlessInvitation({ ...config, message: agentMessage, }) @@ -225,11 +174,11 @@ export class OutOfBandController extends Controller { * Creates inbound out-of-band record and assigns out-of-band invitation message to it if the * message is valid. * - * @param invitation either OutOfBandInvitation or ConnectionInvitationMessage + * @param invitation either DidCommOutOfBandInvitation or ConnectionInvitationMessage * @param config config for handling of invitation * @returns out-of-band record and connection record if one has been created. */ - @Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: ConnectionRecordProps }>({ + @Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: DidCommConnectionRecordProps }>({ outOfBandRecord: outOfBandRecordExample, connectionRecord: ConnectionRecordExample, }) @@ -238,8 +187,14 @@ export class OutOfBandController extends Controller { const { invitation, ...config } = invitationRequest try { - const invite = new OutOfBandInvitation({ ...invitation, handshakeProtocols: invitation.handshake_protocols }) - const { outOfBandRecord, connectionRecord } = await request.agent.oob.receiveInvitation(invite, config) + const invite = new DidCommOutOfBandInvitation({ + ...invitation, + handshakeProtocols: invitation.handshake_protocols, + }) + const { outOfBandRecord, connectionRecord } = await request.agent.modules.didcomm.oob.receiveInvitation( + invite, + config, + ) return { outOfBandRecord: outOfBandRecord.toJSON(), @@ -258,7 +213,7 @@ export class OutOfBandController extends Controller { * @param config config for handling of invitation * @returns out-of-band record and connection record if one has been created. */ - @Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: ConnectionRecordProps }>({ + @Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: DidCommConnectionRecordProps }>({ outOfBandRecord: outOfBandRecordExample, connectionRecord: ConnectionRecordExample, }) @@ -274,7 +229,7 @@ export class OutOfBandController extends Controller { // if (linkSecretIds.length === 0) { // await request.agent.modules.anoncreds.createLinkSecret() // } - const { outOfBandRecord, connectionRecord } = await request.agent.oob.receiveInvitationFromUrl( + const { outOfBandRecord, connectionRecord } = await request.agent.modules.didcomm.oob.receiveInvitationFromUrl( invitationUrl, config, ) @@ -291,7 +246,7 @@ export class OutOfBandController extends Controller { * Accept a connection invitation as invitee (by sending a connection request message) for the connection with the specified connection id. * This is not needed when auto accepting of connections is enabled. */ - @Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: ConnectionRecordProps }>({ + @Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: DidCommConnectionRecordProps }>({ outOfBandRecord: outOfBandRecordExample, connectionRecord: ConnectionRecordExample, }) @@ -302,7 +257,7 @@ export class OutOfBandController extends Controller { @Body() acceptInvitationConfig: AcceptInvitationConfig, ) { try { - const { outOfBandRecord, connectionRecord } = await request.agent.oob.acceptInvitation( + const { outOfBandRecord, connectionRecord } = await request.agent.modules.didcomm.oob.acceptInvitation( outOfBandId, acceptInvitationConfig, ) @@ -325,7 +280,7 @@ export class OutOfBandController extends Controller { public async deleteOutOfBandRecord(@Request() request: Req, @Path('outOfBandId') outOfBandId: RecordId) { try { this.setStatus(204) - await request.agent.oob.deleteById(outOfBandId) + await request.agent.modules.didcomm.oob.deleteById(outOfBandId) } catch (error) { throw ErrorHandlingService.handle(error) } diff --git a/src/controllers/didcomm/proofs/ProofController.ts b/src/controllers/didcomm/proofs/ProofController.ts index b2b99e9f..76a870de 100644 --- a/src/controllers/didcomm/proofs/ProofController.ts +++ b/src/controllers/didcomm/proofs/ProofController.ts @@ -1,18 +1,20 @@ -import type { - AcceptProofRequestOptions, - PeerDidNumAlgo2CreateOptions, - ProofExchangeRecordProps, - ProofsProtocolVersionType, - Routing, -} from '@credo-ts/core' +import type { PeerDidNumAlgo2CreateOptions } from '@credo-ts/core' import { PeerDidNumAlgo, createPeerDidDocumentFromServices } from '@credo-ts/core' +import { + AcceptProofRequestOptions, + DidCommProofExchangeRecordProps, + ProofsProtocolVersionType, + DidCommRouting, +} from '@credo-ts/didcomm' import { Request as Req } from 'express' import { Body, Controller, Example, Get, Path, Post, Query, Route, Tags, Security, Request } from 'tsoa' import { injectable } from 'tsyringe' import { SCOPES } from '../../../enums' import ErrorHandlingService from '../../../errorHandlingService' +import { PurgeRecordType } from '../../../purge/PurgeTypes' +import { SchedulePurge } from '../../../purge/decorators/SchedulePurge' import { ProofRecordExample, RecordId } from '../../examples' import { AcceptProofProposal, @@ -32,12 +34,12 @@ export class ProofController extends Controller { * @param threadId * @returns ProofRecord[] */ - @Example([ProofRecordExample]) + @Example([ProofRecordExample]) @Get('/') public async getAllProofs(@Request() request: Req, @Query('threadId') threadId?: string) { try { const query = threadId ? { threadId } : {} - const proofs = await request.agent.proofs.findAllByQuery(query) + const proofs = await request.agent.modules.didcomm.proofs.findAllByQuery(query) return proofs.map((proof) => proof.toJSON()) } catch (error) { @@ -52,10 +54,10 @@ export class ProofController extends Controller { * @returns ProofRecord */ @Get('/:proofRecordId') - @Example(ProofRecordExample) + @Example(ProofRecordExample) public async getProofById(@Request() request: Req, @Path('proofRecordId') proofRecordId: RecordId) { try { - const proof = await request.agent.proofs.getById(proofRecordId) + const proof = await request.agent.modules.didcomm.proofs.getById(proofRecordId) return proof.toJSON() } catch (error) { @@ -71,12 +73,12 @@ export class ProofController extends Controller { * @returns ProofRecord */ @Post('/propose-proof') - @Example(ProofRecordExample) + @Example(ProofRecordExample) public async proposeProof(@Request() request: Req, @Body() requestProofProposalOptions: RequestProofProposalOptions) { try { - const proof = await request.agent.proofs.proposeProof({ + const proof = await request.agent.modules.didcomm.proofs.proposeProof({ connectionId: requestProofProposalOptions.connectionId, - protocolVersion: 'v1' as ProofsProtocolVersionType<[]>, + protocolVersion: requestProofProposalOptions.protocolVersion as ProofsProtocolVersionType<[]>, proofFormats: requestProofProposalOptions.proofFormats, comment: requestProofProposalOptions.comment, autoAcceptProof: requestProofProposalOptions.autoAcceptProof, @@ -98,11 +100,11 @@ export class ProofController extends Controller { * @param proposal * @returns ProofRecord */ - @Post('/:proofRecordId/accept-proposal') - @Example(ProofRecordExample) + @Post('/accept-proposal') + @Example(ProofRecordExample) public async acceptProposal(@Request() request: Req, @Body() acceptProposal: AcceptProofProposal) { try { - const proof = await request.agent.proofs.acceptProposal(acceptProposal) + const proof = await request.agent.modules.didcomm.proofs.acceptProposal(acceptProposal) return proof } catch (error) { @@ -114,7 +116,8 @@ export class ProofController extends Controller { * Creates a presentation request bound to existing connection */ @Post('/request-proof') - @Example(ProofRecordExample) + @Example(ProofRecordExample) + @SchedulePurge(PurgeRecordType.DIDCOMM_PROOF, (r) => (r as any)?.id) public async requestProof(@Request() request: Req, @Body() requestProofOptions: RequestProofOptions) { try { const requestProofPayload = { @@ -127,7 +130,7 @@ export class ProofController extends Controller { parentThreadId: requestProofOptions.parentThreadId, willConfirm: requestProofOptions.willConfirm, } - const proof = await request.agent.proofs.requestProof(requestProofPayload) + const proof = await request.agent.modules.didcomm.proofs.requestProof(requestProofPayload) return proof } catch (error) { @@ -139,35 +142,40 @@ export class ProofController extends Controller { * Creates a presentation request not bound to any proposal or existing connection */ @Post('create-request-oob') - @Example(ProofRecordExample) + @Example(ProofRecordExample) + @SchedulePurge(PurgeRecordType.DIDCOMM_PROOF, (r) => (r as any)?.proofRecordId) public async createRequest(@Request() request: Req, @Body() createRequestOptions: CreateProofRequestOobOptions) { try { - let routing: Routing + let routing: DidCommRouting let invitationDid: string | undefined if (createRequestOptions?.invitationDid) { invitationDid = createRequestOptions?.invitationDid } else { - routing = await request.agent.mediationRecipient.getRouting({}) - const didDocument = createPeerDidDocumentFromServices([ - { - id: 'didcomm', - recipientKeys: [routing.recipientKey], - routingKeys: routing.routingKeys, - serviceEndpoint: routing.endpoints[0], - }, - ]) + routing = await request.agent.modules.didcomm.mediationRecipient.getRouting({}) + const { didDocument, keys } = createPeerDidDocumentFromServices( + [ + { + id: 'didcomm', + recipientKeys: [routing.recipientKey], + routingKeys: routing.routingKeys, + serviceEndpoint: routing.endpoints[0], + }, + ], + true, + ) const did = await request.agent.dids.create({ didDocument, method: 'peer', options: { numAlgo: PeerDidNumAlgo.MultipleInceptionKeyWithoutDoc, + keys, }, }) invitationDid = did.didState.did } - const proof = await request.agent.proofs.createRequest({ + const proof = await request.agent.modules.didcomm.proofs.createRequest({ protocolVersion: createRequestOptions.protocolVersion as ProofsProtocolVersionType<[]>, proofFormats: createRequestOptions.proofFormats, goalCode: createRequestOptions.goalCode, @@ -177,7 +185,7 @@ export class ProofController extends Controller { comment: createRequestOptions.comment, }) const proofMessage = proof.message - const outOfBandRecord = await request.agent.oob.createInvitation({ + const outOfBandRecord = await request.agent.modules.didcomm.oob.createInvitation({ label: createRequestOptions.label, messages: [proofMessage], autoAcceptConnection: true, @@ -188,13 +196,14 @@ export class ProofController extends Controller { return { invitationUrl: outOfBandRecord.outOfBandInvitation.toUrl({ - domain: request.agent.config.endpoints[0], + domain: request.agent.modules.didcomm.config.endpoints[0], }), invitation: outOfBandRecord.outOfBandInvitation.toJSON({ - useDidSovPrefixWhereAllowed: request.agent.config.useDidSovPrefixWhereAllowed, + useDidSovPrefixWhereAllowed: request.agent.modules.didcomm.config.useDidSovPrefixWhereAllowed, }), outOfBandRecord: outOfBandRecord.toJSON(), - invitationDid: createRequestOptions?.invitationDid ? '' : invitationDid, + invitationDid, + proofRecordId: proof.proofRecord.id, proofRecordThId: proof.proofRecord.threadId, proofMessageId: proof.message.thread?.threadId || proof.message.threadId || proof.message.id, } @@ -212,29 +221,30 @@ export class ProofController extends Controller { * @returns ProofRecord */ @Post('/:proofRecordId/accept-request') - @Example(ProofRecordExample) + @Example(ProofRecordExample) public async acceptRequest( @Request() request: Req, @Path('proofRecordId') proofRecordId: string, @Body() body: { + // TODO: Check if we can remove the below body options as they are not used filterByPresentationPreview?: boolean filterByNonRevocationRequirements?: boolean comment?: string }, ) { try { - const requestedCredentials = await request.agent.proofs.selectCredentialsForRequest({ - proofRecordId, + const requestedCredentials = await request.agent.modules.didcomm.proofs.selectCredentialsForRequest({ + proofExchangeRecordId: proofRecordId, }) const acceptProofRequest: AcceptProofRequestOptions = { - proofRecordId, + proofExchangeRecordId: proofRecordId, comment: body.comment, proofFormats: requestedCredentials.proofFormats, } - const proof = await request.agent.proofs.acceptRequest(acceptProofRequest) + const proof = await request.agent.modules.didcomm.proofs.acceptRequest(acceptProofRequest) return proof.toJSON() } catch (error) { @@ -250,10 +260,12 @@ export class ProofController extends Controller { * @returns ProofRecord */ @Post('/:proofRecordId/accept-presentation') - @Example(ProofRecordExample) + @Example(ProofRecordExample) public async acceptPresentation(@Request() request: Req, @Path('proofRecordId') proofRecordId: string) { try { - const proof = await request.agent.proofs.acceptPresentation({ proofRecordId }) + const proof = await request.agent.modules.didcomm.proofs.acceptPresentation({ + proofExchangeRecordId: proofRecordId, + }) return proof } catch (error) { throw ErrorHandlingService.handle(error) @@ -267,11 +279,11 @@ export class ProofController extends Controller { * @returns ProofRecord */ @Get('/:proofRecordId/form-data') - @Example(ProofRecordExample) + @Example(ProofRecordExample) // TODO: Add return type public async proofFormData(@Request() request: Req, @Path('proofRecordId') proofRecordId: string) { try { - const proof = await request.agent.proofs.getFormatData(proofRecordId) + const proof = await request.agent.modules.didcomm.proofs.getFormatData(proofRecordId) return proof } catch (error) { throw ErrorHandlingService.handle(error) diff --git a/src/controllers/didcomm/question-answer/QuestionAnswerController.ts b/src/controllers/didcomm/question-answer/QuestionAnswerController.ts index 5f812efe..845f8d98 100644 --- a/src/controllers/didcomm/question-answer/QuestionAnswerController.ts +++ b/src/controllers/didcomm/question-answer/QuestionAnswerController.ts @@ -39,7 +39,7 @@ export class QuestionAnswerController extends Controller { state, threadId, }) - return questionAnswerRecords.map((record) => record.toJSON()) + return questionAnswerRecords.map((record: { toJSON: () => any }) => record.toJSON()) } catch (error) { throw ErrorHandlingService.handle(error) } diff --git a/src/controllers/examples.ts b/src/controllers/examples.ts index 7a125b4c..b6027fcf 100644 --- a/src/controllers/examples.ts +++ b/src/controllers/examples.ts @@ -1,18 +1,18 @@ import type { - ProofRole, - AutoAcceptProof, - BasicMessageRole, - CredentialState, - DidExchangeRole, - DidExchangeState, - OutOfBandInvitationOptions, - OutOfBandRecordProps, - ProofExchangeRecordProps, - ProofState, - OutOfBandRole, - OutOfBandState, - CredentialRole, -} from '@credo-ts/core' + DidCommProofRole, + DidCommBasicMessageRole, + DidCommCredentialState, + DidCommDidExchangeRole, + DidCommDidExchangeState, + DidCommOutOfBandInvitationOptions, + DidCommOutOfBandRecordProps, + DidCommProofExchangeRecordProps, + DidCommProofState, + DidCommOutOfBandRole, + DidCommOutOfBandState, + DidCommCredentialRole, + DidCommAutoAcceptProof, +} from '@credo-ts/didcomm' /** * @example "821f9b26-ad04-4f56-89b6-e2ef9c72b36e" @@ -50,7 +50,7 @@ export const BasicMessageRecordExample = { content: 'string', sentTime: '2022-08-18T08:38:40.216Z', connectionId: '2aecf74c-3073-4f98-9acb-92415d096834', - role: 'sender' as BasicMessageRole, + role: 'sender' as DidCommBasicMessageRole, } export const ConnectionRecordExample = { @@ -58,18 +58,18 @@ export const ConnectionRecordExample = { invitationDid: 'did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119', did: 'did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv', - state: 'invitation-sent' as DidExchangeState, + state: 'invitation-sent' as DidCommDidExchangeState, invitationKey: '9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz', outOfBandId: 'edbc89fe-785f-4774-a288-46012486881d', verkey: '9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz', - role: 'responder' as DidExchangeRole, + role: 'responder' as DidCommDidExchangeRole, }, metadata: {}, id: '821f9b26-ad04-4f56-89b6-e2ef9c72b36e', createdAt: new Date('2022-01-01T00:00:00.000Z'), did: 'did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv', - state: 'invitation-sent' as DidExchangeState, - role: 'responder' as DidExchangeRole, + state: 'invitation-sent' as DidCommDidExchangeState, + role: 'responder' as DidCommDidExchangeRole, invitationDid: 'did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119', outOfBandId: 'edbc89fe-785f-4774-a288-46012486881d', @@ -121,9 +121,9 @@ export const DidRecordExample = { }, } -type OutOfBandRecordProperties = Omit +type OutOfBandRecordProperties = Omit export type OutOfBandInvitationProps = Omit< - OutOfBandInvitationOptions, + DidCommOutOfBandInvitationOptions, 'handshakeProtocols' | 'services' | 'appendedAttachments' > @@ -159,8 +159,8 @@ export const outOfBandRecordExample = { metadata: {}, id: '42a95528-0e30-4f86-a462-0efb02178b53', createdAt: new Date('2022-01-01T00:00:00.000Z'), - role: 'sender' as OutOfBandRole, - state: 'await-response' as OutOfBandState, + role: 'sender' as DidCommOutOfBandRole, + state: 'await-response' as DidCommOutOfBandState, reusable: false, } @@ -208,29 +208,29 @@ export const CredentialExchangeRecordExample = { credentials: [], id: '821f9b26-ad04-4f56-89b6-e2ef9c72b36e', createdAt: new Date('2022-01-01T00:00:00.000Z'), - state: 'offer-sent' as CredentialState, + state: 'offer-sent' as DidCommCredentialState, connectionId: 'ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b', threadId: '82701488-b43c-4d7b-9244-4bb204a7ae26', credentialAttributes: [], protocolVersion: 'v1', - role: 'issuer' as CredentialRole.Issuer, + role: 'issuer' as DidCommCredentialRole.Issuer, } export const ProofRecordExample = { _tags: { - state: 'proposal-sent' as ProofState, + state: 'proposal-sent' as DidCommProofState, threadId: '0019d466-5eea-4269-8c40-031b4896c5b7', connectionId: '2aecf74c-3073-4f98-9acb-92415d096834', - } as ProofExchangeRecordProps, + } as DidCommProofExchangeRecordProps, metadata: {}, id: '821f9b26-ad04-4f56-89b6-e2ef9c72b36e', createdAt: new Date('2022-01-01T00:00:00.000Z'), - state: 'proposal-sent' as ProofState, + state: 'proposal-sent' as DidCommProofState, connectionId: '2aecf74c-3073-4f98-9acb-92415d096834', threadId: '0019d466-5eea-4269-8c40-031b4896c5b7', - autoAcceptProof: 'always' as AutoAcceptProof, + autoAcceptProof: 'always' as DidCommAutoAcceptProof, protocolVersion: 'v1', - role: 'verifier' as ProofRole.Verifier, + role: 'verifier' as DidCommProofRole.Verifier, } export const SchemaExample = { diff --git a/src/controllers/openid4vc/examples/issuer.examples.ts b/src/controllers/openid4vc/examples/issuer.examples.ts new file mode 100644 index 00000000..5b3c9b79 --- /dev/null +++ b/src/controllers/openid4vc/examples/issuer.examples.ts @@ -0,0 +1,118 @@ +export const OpenId4VcUpdateIssuerRecordOptionsExample = { + withScope: { + value: { + issuerId: 'abc-gov', + accessTokenSignerKeyType: 'ed25519', + display: [ + { + name: 'ABC Gov', + locale: 'en', + logo: { + uri: 'https://upload.wikimedia.org/wikipedia/commons/2/2f/ABC-2021-LOGO.svg', + alt_text: 'abc_logo', + }, + }, + ], + dpopSigningAlgValuesSupported: ['RS256', 'ES256'], + credentialConfigurationsSupported: { + 'VaccinationCredential-sdjwt': { + format: 'vc+sd-jwt', + vct: 'VaccinationCredential', + scope: 'openid4vc:credential:VaccinationCredential-sdjwt', + claims: { + name: { mandatory: true, value_type: 'string', display: { name: 'Full Name', locale: 'en' } }, + vaccine: { mandatory: true, value_type: 'string', display: { name: 'Vaccine Type', locale: 'en' } }, + lotNumber: { value_type: 'string', display: { name: 'Batch Number', locale: 'en' } }, + performer: { value_type: 'string', display: { name: 'Healthcare Provider', locale: 'en' } }, + doseDate: { value_type: 'date', display: { name: 'Date of Dose', locale: 'en' } }, + }, + credential_signing_alg_values_supported: ['ES256'], + cryptographic_binding_methods_supported: ['did:key'], + display: [ + { + name: 'COVID-19 Vaccination Certificate', + description: 'Proof of vaccination against COVID-19', + locale: 'en', + }, + ], + }, + 'NationalIDCredential-mdoc': { + format: 'mso_mdoc', + doctype: 'org.iso.18013.5.1', + scope: 'openid4vc:credential:NationalIDCredential-mdoc', + claims: { + family_name: { mandatory: true, value_type: 'string', display: { name: 'Last Name', locale: 'en' } }, + given_name: { mandatory: true, value_type: 'string', display: { name: 'First Name', locale: 'en' } }, + birth_date: { value_type: 'date', display: { name: 'Date of Birth', locale: 'en' } }, + gender: { value_type: 'string', display: { name: 'Gender', locale: 'en' } }, + nationality: { value_type: 'string', display: { name: 'Nationality', locale: 'en' } }, + document_number: { + mandatory: true, + value_type: 'string', + display: { name: 'Document Number', locale: 'en' }, + }, + issuing_authority: { value_type: 'string', display: { name: 'Issuing Authority', locale: 'en' } }, + expiry_date: { value_type: 'date', display: { name: 'Expiry Date', locale: 'en' } }, + }, + credential_signing_alg_values_supported: ['ES256'], + cryptographic_binding_methods_supported: ['did:key'], + display: [ + { + name: 'National ID', + description: 'Digital government-issued identity credential', + locale: 'en', + }, + ], + }, + 'UniversityDegreeCredential-sdjwt': { + format: 'vc+sd-jwt', + vct: 'UniversityDegreeCredential', + scope: 'openid4vc:credential:UniversityDegreeCredential-sdjwt', + claims: { + full_name: { mandatory: true, value_type: 'string', display: { name: 'Full Name', locale: 'en' } }, + diploma_name: { mandatory: true, value_type: 'string', display: { name: 'Degree Title', locale: 'en' } }, + college_name: { value_type: 'string', display: { name: 'College/University', locale: 'en' } }, + graduation_date: { value_type: 'date', display: { name: 'Graduation Date', locale: 'en' } }, + awarded_date: { value_type: 'date', display: { name: 'Award Date', locale: 'en' } }, + }, + credential_signing_alg_values_supported: ['ES256', 'EdDSA'], + cryptographic_binding_methods_supported: ['did:key'], + display: [ + { + name: 'University Degree Credential', + description: 'Issued by a recognized educational institution', + locale: 'en', + }, + ], + }, + 'DrivingLicenseCredential-mdoc': { + format: 'mso_mdoc', + doctype: 'org.iso.18013.5.1', + scope: 'openid4vc:credential:DrivingLicenseCredential-mdoc', + claims: { + family_name: { mandatory: true, value_type: 'string', display: { name: 'Surname', locale: 'en' } }, + given_name: { mandatory: true, value_type: 'string', display: { name: 'Given Name', locale: 'en' } }, + birth_date: { value_type: 'date', display: { name: 'Date of Birth', locale: 'en' } }, + issue_date: { value_type: 'date', display: { name: 'Issued On', locale: 'en' } }, + expiry_date: { value_type: 'date', display: { name: 'Expires On', locale: 'en' } }, + issuing_country: { value_type: 'string', display: { name: 'Issuing Country', locale: 'en' } }, + license_number: { value_type: 'string', display: { name: 'License Number', locale: 'en' } }, + categories_of_vehicles: { + value_type: 'string', + display: { name: 'Authorized Vehicle Types', locale: 'en' }, + }, + }, + credential_signing_alg_values_supported: ['ES256'], + cryptographic_binding_methods_supported: ['did:key'], + display: [ + { + name: 'Driving License', + description: 'ISO-compliant mobile driving license', + locale: 'en', + }, + ], + }, + }, + }, + }, +} diff --git a/src/controllers/openid4vc/holder/credentialBindingResolver.ts b/src/controllers/openid4vc/holder/credentialBindingResolver.ts new file mode 100644 index 00000000..5eb6e12d --- /dev/null +++ b/src/controllers/openid4vc/holder/credentialBindingResolver.ts @@ -0,0 +1,119 @@ +import { DidJwk, DidKey, DidsApi, type JwkDidCreateOptions, type KeyDidCreateOptions, Kms } from '@credo-ts/core' +import { type OpenId4VciCredentialBindingResolver, OpenId4VciCredentialFormatProfile } from '@credo-ts/openid4vc' + +export function getCredentialBindingResolver({ + requestBatch, +}: { + requestBatch?: boolean | number +}): OpenId4VciCredentialBindingResolver { + return async ({ + supportedDidMethods, + credentialConfiguration, + issuerMaxBatchSize, + proofTypes, + supportsAllDidMethods, + supportsJwk, + credentialFormat, + agentContext, + }) => { + const kms = agentContext.resolve(Kms.KeyManagementApi) + + // First, we try to pick a did method + // Prefer did:jwk, otherwise use did:key, otherwise use undefined + let didMethod: 'key' | 'jwk' | undefined = + supportsAllDidMethods || supportedDidMethods?.includes('did:jwk') + ? 'jwk' + : supportedDidMethods?.includes('did:key') + ? 'key' + : undefined + + // If supportedDidMethods is undefined, and supportsJwk is false, we will default to did:key + // this is important as part of MATTR launchpad support which MUST use did:key but doesn't + // define which did methods they support + if (!supportedDidMethods && !supportsJwk) { + didMethod = 'key' + } + + // We don't want to request more than 10 credentials + const batchSize = + requestBatch === true + ? Math.min(issuerMaxBatchSize, 10) + : typeof requestBatch === 'number' + ? Math.min(issuerMaxBatchSize, requestBatch) + : 1 + // TODO: support key attestations + if (!proofTypes.jwt || proofTypes.jwt.keyAttestationsRequired) { + throw new Error('Unable to request credentials. Only jwt proof type without key attestations supported') + } + + const signatureAlgorithm = proofTypes.jwt?.supportedSignatureAlgorithms?.[0] + + if (!signatureAlgorithm) { + throw new Error('No supported signature algorithms found for JWT proof type') + } + const keys = await Promise.all( + new Array(batchSize).fill(0).map(() => + kms + .createKeyForSignatureAlgorithm({ + algorithm: signatureAlgorithm!, + backend: 'askar', + }) + .then((key) => Kms.PublicJwk.fromUnknown(key.publicJwk)), + ), + ) + + if (didMethod) { + const dm = didMethod + const didsApi = agentContext.dependencyManager.resolve(DidsApi) + const didResults = await Promise.all( + keys.map(async (key) => { + const didResult = await didsApi.create({ + method: dm, + options: { + keyId: key.keyId, + }, + }) + + if (didResult.didState.state !== 'finished') { + throw new Error('DID creation failed.') + } + + let verificationMethodId: string + if (didMethod === 'jwk') { + const didJwk = DidJwk.fromDid(didResult.didState.did) + verificationMethodId = didJwk.verificationMethodId + } else { + const didKey = DidKey.fromDid(didResult.didState.did) + verificationMethodId = `${didKey.did}#${didKey.publicJwk.fingerprint}` + } + + return verificationMethodId + }), + ) + + return { + method: 'did', + didUrls: didResults, + } + } + + // Otherwise we also support plain jwk for sd-jwt only + if ( + supportsJwk && + (credentialFormat === OpenId4VciCredentialFormatProfile.SdJwtVc || + credentialFormat === OpenId4VciCredentialFormatProfile.SdJwtDc || + credentialFormat === OpenId4VciCredentialFormatProfile.MsoMdoc) + ) { + return { + method: 'jwk', + keys, + } + } + + throw new Error( + `No supported binding method could be found. Supported methods are did:key and did:jwk, or plain jwk for sd-jwt/mdoc. Issuer supports ${ + supportsJwk ? 'jwk, ' : '' + }${supportedDidMethods?.join(', ') ?? 'Unknown'}`, + ) + } +} diff --git a/src/controllers/openid4vc/holder/holder.Controller.ts b/src/controllers/openid4vc/holder/holder.Controller.ts new file mode 100644 index 00000000..2e2ad76e --- /dev/null +++ b/src/controllers/openid4vc/holder/holder.Controller.ts @@ -0,0 +1,103 @@ +import { Request as Req } from 'express' +import { Body, Controller, Get, Post, Route, Security, Tags, Request, Delete } from 'tsoa' +import { injectable } from 'tsyringe' + +import { SCOPES } from '../../../enums/enum' +import { + AuthorizeRequestCredentialOffer, + DeleteCredentialBody, + RequestCredentialBody, + ResolveCredentialOfferBody, + ResolveProofRequest, +} from '../types/holder.types' + +import { holderService } from './holder.service' + +@Tags('oid4vc holders') +@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) +@Route('openid4vc/holder') +@injectable() +export class HolderController extends Controller { + /** + * Get SdJwt type of credentials + */ + @Get('/sd-jwt-vcs') + public async getSdJwtCredentials(@Request() request: Req) { + return await holderService.getSdJwtCredentials(request) + } + + /** + * Fetch all mso mdoc credentials in wallet + */ + @Get('/mdoc-vcs') + public async getMdocCredentials(@Request() request: Req) { + return await holderService.getMdocCredentials(request) + } + + /** + * Decode mso mdoc credential in wallet + */ + @Post('/mdoc-vcs/decode') + public async decodeMdocCredential( + @Request() request: Req, + @Body() + body: { + base64Url: string + }, + ) { + return await holderService.decodeMdocCredential(request, body) + } + + /** + * Resolve a credential offer + */ + @Post('resolve-credential-offer') + public async resolveCredOffer(@Request() request: Req, @Body() body: ResolveCredentialOfferBody) { + return await holderService.resolveCredentialOffer(request, body) + } + + // /** + // * Initiate an OID4VCI authorization request + // */ + @Post('authorization-request') + public async requestAuthorizationForCredential( + @Request() request: Req, + @Body() body: AuthorizeRequestCredentialOffer, + ) { + return await holderService.requestAuthorizationForCredential(request, body) + } + + /** + * Initiates a token request, then requests credentials from issuer + */ + @Post('request-credential') + public async requestCredential(@Request() request: Req, @Body() body: RequestCredentialBody) { + return await holderService.requestCredential(request, body) + } + + /** + * Resolve a proof request + */ + @Post('resolve-proof-request') + public async resolveProofRequest(@Request() request: Req, @Body() body: ResolveProofRequest) { + return await holderService.resolveProofRequest(request, body) + } + + /** + * Accept a proof request + */ + @Post('accept-proof-request') + public async acceptProofRequest(@Request() request: Req, @Body() body: ResolveProofRequest) { + return await holderService.acceptPresentationRequest(request, body) + } + + @Post('decode-sdjwt') + public async decodeSdJwt(@Request() request: Req, @Body() body: { jwt: string }) { + return await holderService.decodeSdJwt(request, body) + } + + @Delete('credential') + public async delete(@Request() agentReq: Req, @Body() body: DeleteCredentialBody) { + return await holderService.deleteCredential(agentReq, body) + } +} diff --git a/src/controllers/openid4vc/holder/holder.service.ts b/src/controllers/openid4vc/holder/holder.service.ts new file mode 100644 index 00000000..f7970458 --- /dev/null +++ b/src/controllers/openid4vc/holder/holder.service.ts @@ -0,0 +1,268 @@ +import type { + AuthorizeRequestCredentialOffer, + DeleteCredentialBody, + RequestCredentialBody, + ResolveCredentialOfferBody, + ResolveProofRequest, +} from '../types/holder.types' +import type { Agent, DcqlCredentialsForRequest, DcqlQueryResult } from '@credo-ts/core' +import type { + OpenId4VcAuthorizationCodeTokenRequestOptions, + OpenId4VciPreAuthorizedTokenRequestOptions, + OpenId4VciResolvedCredentialOffer, + OpenId4VciTokenRequestOptions, +} from '@credo-ts/openid4vc' +import type { Request as Req } from 'express' + +import { Mdoc, SdJwtVcRecord, MdocRecord } from '@credo-ts/core' +import { + OpenId4VciAuthorizationFlow, + authorizationCodeGrantIdentifier, + preAuthorizedCodeGrantIdentifier, +} from '@credo-ts/openid4vc' + +import { CredentialType } from '../types/holder.types' + +import { getCredentialBindingResolver } from './credentialBindingResolver' +export class HolderService { + private HOLDER_REDIRECT = process.env.HOLDER_REDIRECT ?? 'http://localhost:4001/redirect' + private HOLDER_CLIENT_ID = process.env.HOLDER_CLIENT_ID ?? 'wallet' + + public async getSdJwtCredentials(agentReq: Req) { + return await agentReq.agent.sdJwtVc.getAll() + } + + public async getMdocCredentials(agentReq: Req) { + return await agentReq.agent.mdoc.getAll() + } + + public async decodeMdocCredential( + agentReq: Req, + options: { + base64Url: string + }, + ) { + const credential = Mdoc.fromBase64Url(options.base64Url) + return { + namespace: credential.issuerSignedNamespaces, + docType: credential.docType, + validityInfo: credential.validityInfo, + issuerSignedCertificateChain: credential.issuerSignedCertificateChain, + } as any + } + + public async resolveCredentialOffer(agentReq: Req, body: ResolveCredentialOfferBody) { + return (await agentReq.agent.modules.openid4vc.holder.resolveCredentialOffer(body.credentialOfferUri)) as any + } + + public async requestAuthorizationForCredential(agentReq: Req, body: AuthorizeRequestCredentialOffer) { + const resolvedCredentialOffer = await agentReq.agent.modules.openid4vc.holder.resolveCredentialOffer( + body.credentialOfferUri, + ) + const resolvedAuthorization = await this.initiateAuthorization( + agentReq, + resolvedCredentialOffer, + body.credentialsToRequest, + ) + + let actionToTake = '' + let authorizationRequestUrl: string | undefined = undefined + let codeVerifier: string | undefined = undefined + + switch (resolvedAuthorization.authorizationFlow) { + case 'Oauth2Redirect': + actionToTake = 'Open the authorizationRequestUrl in your browser.' + authorizationRequestUrl = resolvedAuthorization.authorizationRequestUrl + codeVerifier = resolvedAuthorization.codeVerifier + break + case 'PresentationDuringIssuance': + actionToTake = 'Presentation during issuance not supported yet' + break + case 'PreAuthorized': + if (resolvedCredentialOffer.credentialOfferPayload.grants?.[preAuthorizedCodeGrantIdentifier]?.tx_code) { + actionToTake = 'Ask for txcode from issuer and use it further' + } + break + } + + return { actionToTake, authorizationRequestUrl, codeVerifier } as any + } + + public async requestCredential(agentReq: Req, body: RequestCredentialBody) { + const resolvedCredentialOffer = await agentReq.agent.modules.openid4vc.holder.resolveCredentialOffer( + body.credentialOfferUri, + ) + + let options: OpenId4VciTokenRequestOptions + if (resolvedCredentialOffer.credentialOfferPayload.grants?.[preAuthorizedCodeGrantIdentifier]) { + options = { + resolvedCredentialOffer, + txCode: body.txCode, + } as OpenId4VciPreAuthorizedTokenRequestOptions + } else { + options = { + resolvedCredentialOffer, + code: body.authorizationCode, + clientId: this.HOLDER_CLIENT_ID, + codeVerifier: body.codeVerifier, + redirectUri: this.HOLDER_REDIRECT, + } as OpenId4VcAuthorizationCodeTokenRequestOptions + } + + return (await this.requestAndStoreCredentials(agentReq, resolvedCredentialOffer, options)) as any + } + private async requestAndStoreCredentials( + agentReq: Req, + resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, + options: OpenId4VciTokenRequestOptions, + ) { + const tokenResponse = await agentReq.agent.modules.openid4vc.holder.requestToken({ ...options }) + const credentialResponse = await agentReq.agent.modules.openid4vc.holder.requestCredentials({ + ...options, + credentialConfigurationIds: resolvedCredentialOffer.credentialOfferPayload.credential_configuration_ids, + credentialBindingResolver: getCredentialBindingResolver({ + requestBatch: false, + }), + ...tokenResponse, + }) + + const storedCredentials = await Promise.all( + credentialResponse.credentials.map(async (response) => { + const credentialRecord = response.record + // TODO: We can add this later + // if (credential instanceof W3cJwtVerifiableCredential || credential instanceof W3cJsonLdVerifiableCredential) { + // return await agentReq.agent.w3cCredentials.storeCredential({ credential }) + // } + if (credentialRecord instanceof MdocRecord) { + return await agentReq.agent.mdoc.store({ record: credentialRecord }) + } + if (credentialRecord instanceof SdJwtVcRecord) { + return await agentReq.agent.sdJwtVc.store({ + record: credentialRecord, + }) + } + throw new Error(`Unsupported credential record type`) + }), + ) + + return storedCredentials as any + } + + private async initiateAuthorization( + agentReq: Req, + resolvedCredentialOffer: OpenId4VciResolvedCredentialOffer, + credentialsToRequest: string[], + ) { + const grants = resolvedCredentialOffer.credentialOfferPayload.grants + + // 👉 Handle Pre-Authorized Code Grant + if (grants?.[preAuthorizedCodeGrantIdentifier]) { + const preAuthorizedCode = grants[preAuthorizedCodeGrantIdentifier]['pre-authorized_code'] + return { + authorizationFlow: 'PreAuthorized' as const, + preAuthorizedCode, + } + } + + // 👉 Handle Authorization Code Grant + if (grants?.[authorizationCodeGrantIdentifier]) { + const scope = Object.entries(resolvedCredentialOffer.offeredCredentialConfigurations) + .map(([id, val]) => (credentialsToRequest.includes(id) ? val.scope : undefined)) + .filter((v): v is string => Boolean(v)) + + const resolved = await agentReq.agent.modules.openid4vc.holder.resolveOpenId4VciAuthorizationRequest( + resolvedCredentialOffer, + { + clientId: this.HOLDER_CLIENT_ID, + redirectUri: this.HOLDER_REDIRECT, + scope, + }, + ) + + // 👉 Support Presentation During Issuance flow + if (resolved.authorizationFlow === OpenId4VciAuthorizationFlow.PresentationDuringIssuance) { + return { + ...resolved, + authorizationFlow: 'PresentationDuringIssuance' as const, + } + } + + return { + ...resolved, + authorizationFlow: 'Oauth2Redirect' as const, + } as any + } + + // ❌ Unsupported grant + throw new Error('Unsupported grant type') + } + + public async resolveProofRequest(agentReq: Req, body: ResolveProofRequest) { + return (await agentReq.agent.modules.openid4vc.holder.resolveOpenId4VpAuthorizationRequest( + body.proofRequestUri, + body.options, + )) as any + } + + public async acceptPresentationRequest(agentReq: Req, body: ResolveProofRequest) { + const resolved = await agentReq.agent.modules.openid4vc.holder.resolveOpenId4VpAuthorizationRequest( + body.proofRequestUri, + body.options, + ) + // const presentationExchangeService = agent.dependencyManager.resolve(DifPresentationExchangeService) + + if (!resolved.dcql) throw new Error('Missing DCQL on request') + // + let dcqlCredentials + try { + dcqlCredentials = await agentReq.agent.modules.openid4vc.holder.selectCredentialsForDcqlRequest( + resolved.dcql.queryResult, + ) + } catch (error) { + throw error + } + const submissionResult = await agentReq.agent.modules.openid4vc.holder.acceptOpenId4VpAuthorizationRequest({ + authorizationRequestPayload: resolved.authorizationRequestPayload, + dcql: { + credentials: dcqlCredentials as DcqlCredentialsForRequest, + }, + origin: body.options?.origin, + }) + if (submissionResult.serverResponse) { + const { serverResponse, ...rest } = submissionResult + + return { + ...serverResponse, + body: rest, + } as any + } + return { + status: 200, + body: submissionResult, + } as any + } + + public async deleteCredential(agentReq: Req, { credentialId, credentialType }: DeleteCredentialBody) { + if (credentialType === CredentialType.SD_JWT) { + const sdJwtRecord = await agentReq.agent.sdJwtVc.getById(credentialId) + if (sdJwtRecord) { + return await agentReq.agent.sdJwtVc.deleteById(credentialId) + } + throw new Error(`Credential with id ${credentialId} not found`) + } else if (credentialType === CredentialType.MSO_MDOC) { + const mdocRecord = await agentReq.agent.mdoc.getById(credentialId) + if (mdocRecord) { + return await agentReq.agent.mdoc.deleteById(credentialId) + } + throw new Error(`Credential with id ${credentialId} not found`) + } else { + throw new Error(`Unsupported credential type: ${credentialType}`) + } + } + + public async decodeSdJwt(agentReq: Req, body: { jwt: string }) { + const sdJwt = agentReq.agent.sdJwtVc.fromCompact(body.jwt) + return sdJwt as any + } +} +export const holderService = new HolderService() diff --git a/src/controllers/openid4vc/issuance-sessions/issuance-sessions.Controller.ts b/src/controllers/openid4vc/issuance-sessions/issuance-sessions.Controller.ts new file mode 100644 index 00000000..642458cc --- /dev/null +++ b/src/controllers/openid4vc/issuance-sessions/issuance-sessions.Controller.ts @@ -0,0 +1,120 @@ +import { OpenId4VcIssuanceSessionState } from '@credo-ts/openid4vc' +import { Request as Req } from 'express' +import { Body, Controller, Delete, Get, Path, Post, Put, Query, Request, Route, Tags, Security } from 'tsoa' +import { injectable } from 'tsyringe' + +import { SCOPES } from '../../../enums' +import ErrorHandlingService from '../../../errorHandlingService' +import { PurgeRecordType } from '../../../purge/PurgeTypes' +import { SchedulePurge } from '../../../purge/decorators/SchedulePurge' +// import { AgentWithRootOrTenant } from '../../types/agent' +import { OpenId4VcIssuanceSessionsCreateOffer } from '../types/issuer.types' + +import { issuanceSessionService } from './issuance-sessions.service' + +/** + * Controller for managing OpenID4VC issuance sessions. + * Provides endpoints to create credential offers, retrieve issuance sessions, + * update session metadata, and delete sessions. + */ +@Tags('oid4vc issuance sessions') +@Route('/openid4vc/issuance-sessions') +@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) +@injectable() +export class IssuanceSessionsController extends Controller { + /** + * Creates a credential offer with the specified credential configurations and authorization type. + */ + @Post('/create-credential-offer') + @SchedulePurge(PurgeRecordType.OID4VC_ISSUANCE, (r) => (r as any)?.issuanceSession?.id) + public async createCredentialOffer(@Request() request: Req, @Body() options: OpenId4VcIssuanceSessionsCreateOffer) { + try { + return await issuanceSessionService.createCredentialOffer(options, request) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Get issuance details by issuance SessionId + */ + @Get('{issuanceSessionId}') + public async getIssuanceSessionsById(@Request() request: Req, @Path('issuanceSessionId') issuanceSessionId: string) { + try { + return await issuanceSessionService.getIssuanceSessionsById(request, issuanceSessionId) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Fetch all issuance sessions by query + */ + @Get('/') + public async getIssuanceSessionsByQuery( + @Request() request: Req, + @Query() cNonce?: string, + @Query() publicIssuerId?: string, + @Query() preAuthorizedCode?: string, + @Query() state?: OpenId4VcIssuanceSessionState, + @Query() credentialOfferUri?: string, + @Query() authorizationCode?: string, + ) { + try { + return await issuanceSessionService.getIssuanceSessionsByQuery( + request, + cNonce, + publicIssuerId, + preAuthorizedCode, + state, + credentialOfferUri, + authorizationCode, + ) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Update issuance session metadata by session ID + */ + @Put('{issuanceSessionId}') + public async updateSessionById( + @Request() request: Req, + @Path('issuanceSessionId') issuanceSessionId: string, + @Body() metadata: Record, + ) { + try { + return await issuanceSessionService.updateSessionIssuanceMetadataById(request, issuanceSessionId, metadata) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Delete issuance session by session ID + */ + @Delete('{issuanceSessionId}') + public async deleteIssuanceSessionById( + @Request() request: Req, + @Path('issuanceSessionId') issuanceSessionId: string, + ) { + try { + await issuanceSessionService.deleteById(request, issuanceSessionId) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Revoke credentials in an issuance session by session ID + */ + @Post('{issuanceSessionId}/revoke') + public async revokeSessionById(@Request() request: Req, @Path('issuanceSessionId') issuanceSessionId: string) { + try { + return await issuanceSessionService.revokeBySessionId(request, issuanceSessionId) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } +} diff --git a/src/controllers/openid4vc/issuance-sessions/issuance-sessions.service.ts b/src/controllers/openid4vc/issuance-sessions/issuance-sessions.service.ts new file mode 100644 index 00000000..97ed3f35 --- /dev/null +++ b/src/controllers/openid4vc/issuance-sessions/issuance-sessions.service.ts @@ -0,0 +1,275 @@ +import type { OpenId4VcIssuanceSessionsCreateOffer } from '../types/issuer.types' +import type { Request as Req } from 'express' + +import { type OpenId4VcIssuanceSessionState } from '@credo-ts/openid4vc' +import { OpenId4VcIssuanceSessionRepository } from '@credo-ts/openid4vc' + +import { CredentialFormat, SignerMethod } from '../../../enums/enum' +import { BadRequestError, NotFoundError } from '../../../errors/errors' +import { STATUS_LISTS_PATH } from '../../../utils/constant' +import { checkAndCreateStatusList, getServerUrl, revokeCredentialInStatusList } from '../../../utils/statusListService' + +class IssuanceSessionsService { + public async createCredentialOffer(options: OpenId4VcIssuanceSessionsCreateOffer, agentReq: Req) { + const { credentials, publicIssuerId } = options + + const issuer = await agentReq.agent.modules.openid4vc.issuer?.getIssuerByIssuerId(publicIssuerId) + if (!issuer) { + throw new NotFoundError(`Issuer with id ${publicIssuerId} not found`) + } + + const offerStatusInfo: any[] = [] + + const mappedCredentials = await Promise.all( + credentials.map(async (cred) => { + const supported = issuer.credentialConfigurationsSupported[cred.credentialSupportedId] + + this.validateCredentialConfig(cred, supported) + + const statusBlock = await this.processStatusList(cred, options, agentReq, offerStatusInfo) + + const currentVct = cred.payload && 'vct' in cred.payload ? cred.payload.vct : undefined + return { + ...cred, + payload: { + ...cred.payload, + vct: currentVct ?? (typeof supported.vct === 'string' ? supported.vct : undefined), + ...(statusBlock ? { status: statusBlock } : {}), + }, + } + }), + ) + + options.issuanceMetadata ||= {} + options.issuanceMetadata.credentials = mappedCredentials + options.issuanceMetadata.isRevocable = options.isRevocable + + if (offerStatusInfo.length > 0) { + options.issuanceMetadata.StatusListInfo = offerStatusInfo + } + + const issuerModule = agentReq.agent.modules.openid4vc.issuer + + if (!issuerModule) { + throw new Error('OID4VC issuer module not initialized') + } + const preAuthorizedCodeFlowConfig = this.resolvePreAuthorizedCodeFlowConfig(options.preAuthorizedCodeFlowConfig) + + const { credentialOffer, issuanceSession } = await issuerModule.createCredentialOffer({ + issuerId: publicIssuerId, + issuanceMetadata: options.issuanceMetadata, + credentialConfigurationIds: credentials.map((c) => c.credentialSupportedId), + preAuthorizedCodeFlowConfig, + authorizationCodeFlowConfig: options.authorizationCodeFlowConfig, + }) + + return { credentialOffer, issuanceSession } + } + + private resolvePreAuthorizedCodeFlowConfig( + config: OpenId4VcIssuanceSessionsCreateOffer['preAuthorizedCodeFlowConfig'], + ) { + if (!config) return undefined + + const hasTxCode = config.txCode != null + const hasAuthServerUrl = config.authorizationServerUrl != null + + if (hasTxCode !== hasAuthServerUrl) { + throw new BadRequestError( + 'Both txCode and authorizationServerUrl must be provided together for normal flow, or both must be omitted for no-auth flow', + ) + } + + if (!hasTxCode) return {} + + if (Object.keys(config.txCode!).length === 0) { + throw new BadRequestError('txCode must not be an empty object when provided') + } + + if (config.authorizationServerUrl!.trim() === '') { + throw new BadRequestError('authorizationServerUrl must not be an empty string when provided') + } + + return { txCode: config.txCode, authorizationServerUrl: config.authorizationServerUrl } + } + + private validateCredentialConfig(cred: any, supported: any) { + if (!supported) { + throw new Error(`CredentialSupportedId '${cred.credentialSupportedId}' is not supported by issuer`) + } + if (supported.format !== cred.format) { + throw new Error( + `Format mismatch for '${cred.credentialSupportedId}': expected '${supported.format}', got '${cred.format}'`, + ) + } + + if (!cred.signerOptions?.method) { + throw new BadRequestError( + `signerOptions must be provided and allowed methods are ${Object.values(SignerMethod).join(', ')}`, + ) + } + + if (cred.signerOptions.method === SignerMethod.Did && !cred.signerOptions.did) { + throw new BadRequestError( + `For ${cred.credentialSupportedId} : did must be present inside signerOptions if SignerMethod is 'did' `, + ) + } + + if (cred.signerOptions.method === SignerMethod.X5c && !cred.signerOptions.x5c) { + throw new BadRequestError( + `For ${cred.credentialSupportedId} : x5c must be present inside signerOptions if SignerMethod is 'x5c' `, + ) + } + } + + private async processStatusList( + cred: any, + options: OpenId4VcIssuanceSessionsCreateOffer, + agentReq: Req, + offerStatusInfo: any[], + ) { + if (!options.isRevocable) { + return undefined + } + + const effectiveIssuerDid = cred.signerOptions?.method === SignerMethod.Did ? cred.signerOptions.did : undefined + const effectiveStatusList = cred.statusListDetails || options.statusListDetails + + if (![CredentialFormat.VcSdJwt, CredentialFormat.DcSdJwt].includes(cred.format as unknown as CredentialFormat)) { + throw new BadRequestError( + `Revocation is only supported for SD-JWT formats (vc+sd-jwt, dc+sd-jwt), got '${cred.format}'`, + ) + } + + if (!process.env.STATUS_LIST_SERVER_URL) { + throw new BadRequestError('Cannot create revocable credentials: STATUS_LIST_SERVER_URL is not configured') + } + + if (cred.signerOptions.method !== SignerMethod.Did || !effectiveIssuerDid) { + throw new BadRequestError(`Revocation is not supported without a DID signer (found ${cred.signerOptions.method})`) + } + + if (!effectiveStatusList) { + throw new BadRequestError('Status list details must be provided for revocable credentials') + } + + await checkAndCreateStatusList( + agentReq.agent as any, + effectiveStatusList.listId, + effectiveIssuerDid, + effectiveStatusList.listSize, + ) + + const listUri = `${getServerUrl()}/${STATUS_LISTS_PATH}/${effectiveStatusList.listId}` + + offerStatusInfo.push({ + credentialSupportedId: cred.credentialSupportedId, + listId: effectiveStatusList.listId, + index: effectiveStatusList.index, + issuerDid: effectiveIssuerDid, + }) + + return { + status_list: { + uri: listUri, + idx: effectiveStatusList.index, + }, + } + } + + public async getIssuanceSessionsById(agentReq: Req, sessionId: string) { + const issuer = agentReq.agent.modules.openid4vc.issuer + if (!issuer) { + throw new Error('OID4VC issuer module not initialized') + } + return issuer.getIssuanceSessionById(sessionId) + } + + public async getIssuanceSessionsByQuery( + agentReq: Req, + cNonce?: string, + publicIssuerId?: string, + preAuthorizedCode?: string, + state?: OpenId4VcIssuanceSessionState, + credentialOfferUri?: string, + authorizationCode?: string, + ) { + const issuanceSessionRepository = agentReq.agent.dependencyManager.resolve(OpenId4VcIssuanceSessionRepository) + const issuanceSessions = await issuanceSessionRepository.findByQuery(agentReq.agent.context, { + cNonce, + issuerId: publicIssuerId, + preAuthorizedCode, + state, + credentialOfferUri, + authorizationCode, + }) + + return issuanceSessions + } + + /** + * update an existing issuance session metadata, useful for mobile edge + * agents that will scan QR codes to notify the system of their + * wallet user id + * + * @param issuerAgent + * @param sessionId + * @param metadata + * @returns the updated issuance session record + */ + public async updateSessionIssuanceMetadataById(agentReq: Req, sessionId: string, metadata: Record) { + const issuanceSessionRepository = agentReq.agent.dependencyManager.resolve(OpenId4VcIssuanceSessionRepository) + + const record = await issuanceSessionRepository.findById(agentReq.agent.context, sessionId) + + if (!record) { + throw new NotFoundError(`Issuance session with id ${sessionId} not found`) + } + + record.issuanceMetadata = { + ...record.issuanceMetadata, + ...metadata, + } + + await issuanceSessionRepository.update(agentReq.agent.context, record) + + return record + } + + /** + * deletes ann issuance session by id + * + * @param sessionId + * @param issuerAgent + */ + public async deleteById(agentReq: Req, sessionId: string): Promise { + const issuanceSessionRepository = agentReq.agent.dependencyManager.resolve(OpenId4VcIssuanceSessionRepository) + await issuanceSessionRepository.deleteById(agentReq.agent.context, sessionId) + } + + public async revokeBySessionId(agentReq: Req, sessionId: string) { + const issuanceSessionRepository = agentReq.agent.dependencyManager.resolve(OpenId4VcIssuanceSessionRepository) + const record = await issuanceSessionRepository.findById(agentReq.agent.context, sessionId) + + if (!record) { + throw new NotFoundError(`Issuance session with id ${sessionId} not found`) + } + + const statusInfo = record.issuanceMetadata?.StatusListInfo as any[] + if (!statusInfo || statusInfo.length === 0) { + throw new Error(`No status list information found for session ${sessionId}`) + } + + if (!process.env.STATUS_LIST_SERVER_URL) { + throw new BadRequestError('Cannot execute revocation: STATUS_LIST_SERVER_URL is not configured') + } + + for (const info of statusInfo) { + await revokeCredentialInStatusList(agentReq.agent as any, info.listId, info.index, info.issuerDid) + } + + return { message: 'Credentials in session revoked successfully' } + } +} + +export const issuanceSessionService = new IssuanceSessionsService() diff --git a/src/controllers/openid4vc/issuers/issuer.Controller.ts b/src/controllers/openid4vc/issuers/issuer.Controller.ts new file mode 100644 index 00000000..d95c18aa --- /dev/null +++ b/src/controllers/openid4vc/issuers/issuer.Controller.ts @@ -0,0 +1,93 @@ +import { Request as Req } from 'express' +import { Controller, Delete, Get, Post, Put, Route, Tags, Path, Query, Body, Security, Request, Example } from 'tsoa' +import { injectable } from 'tsyringe' + +import { SCOPES } from '../../../enums' +import ErrorHandlingService from '../../../errorHandlingService' +import { OpenId4VcUpdateIssuerRecordOptionsExample } from '../examples/issuer.examples' +import { CreateIssuerOptions, UpdateIssuerRecordOptions } from '../types/issuer.types' + +import { issuerService } from './issuer.service' + +@Route('/openid4vc/issuer') +@Tags('oid4vc issuers') +@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) +@injectable() +export class IssuerController extends Controller { + /** + * Creates an issuer with issuer metadata. + */ + @Post() + @Example(OpenId4VcUpdateIssuerRecordOptionsExample.withScope.value) + public async createIssuer(@Request() request: Req, @Body() createIssuerOptions: CreateIssuerOptions) { + try { + return await issuerService.createIssuerAgent(request, createIssuerOptions) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Updates issuer metadata for a given publicIssuerId. + */ + @Put('{publicIssuerId}') + public async updateIssuerMetadata( + @Request() request: Req, + @Path() publicIssuerId: string, + @Body() updateIssuerRecordOptions: UpdateIssuerRecordOptions, + ) { + try { + return await issuerService.updateIssuerMetadata(request, publicIssuerId, updateIssuerRecordOptions) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Returns metadata for a specific issuer. + */ + @Get('{issuerId}/metadata') + public async getIssuerAgentMetaData(@Request() request: Req, @Path() issuerId: string) { + try { + return await issuerService.getIssuerAgentMetaData(request, issuerId) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Query issuers by optional publicIssuerId. + */ + @Get() + public async getIssuersByQuery(@Request() request: Req, @Query() publicIssuerId?: string) { + try { + return await issuerService.getIssuersByQuery(request, publicIssuerId) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Returns a specific issuer by publicIssuerId. + */ + @Get('{publicIssuerId}') + public async getIssuer(@Request() request: Req, @Path() publicIssuerId: string) { + try { + return await issuerService.getIssuer(request, publicIssuerId) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Deletes a specific issuer by record id. + */ + @Delete('{id}') + public async deleteIssuer(@Request() request: Req, @Path() id: string) { + try { + return await issuerService.deleteIssuer(request, id) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } +} diff --git a/src/controllers/openid4vc/issuers/issuer.service.ts b/src/controllers/openid4vc/issuers/issuer.service.ts new file mode 100644 index 00000000..d5afc0e1 --- /dev/null +++ b/src/controllers/openid4vc/issuers/issuer.service.ts @@ -0,0 +1,58 @@ +import type { RestAgentModules } from '../../../cliAgent' +import type { CreateIssuerOptions } from '../types/issuer.types' +import type { Agent } from '@credo-ts/core' +import type { Request as Req } from 'express' + +import { OpenId4VcIssuerRepository } from '@credo-ts/openid4vc' + +export class IssuerService { + public async createIssuerAgent( + agentReq: Req, + createIssuerOptions: any, //TODO: Replace with OpenId4VciCreateIssuerOptions, + ) { + const issuer = agentReq.agent.modules.openid4vc.issuer + if (!issuer) { + throw new Error('OID4VC issuer module not initialized') + } + const issuerRecord = await issuer.createIssuer(createIssuerOptions) + const issuerMetadata = await issuer.getIssuerMetadata(issuerRecord?.issuerId ?? '') + // eslint-disable-next-line no-console + console.log(`\nIssuer URL: ${issuerMetadata?.credentialIssuer.credential_issuer}`) + return issuerRecord + } + + public async updateIssuerMetadata( + agentReq: Req, + publicIssuerId: string, + updateIssuerRecordOptions: any, // TODO: Replace with OpenId4VcUpdateIssuerRecordOptions + ) { + await agentReq.agent.modules.openid4vc.issuer?.updateIssuerMetadata({ + issuerId: publicIssuerId, + ...updateIssuerRecordOptions, + }) + return await this.getIssuer(agentReq, publicIssuerId) + } + + public async getIssuersByQuery(agentReq: Req, publicIssuerId?: string) { + const result = publicIssuerId + ? (agentReq.agent as Agent).openid4vc.issuer?.getIssuerByIssuerId(publicIssuerId) + : (agentReq.agent as Agent).openid4vc.issuer?.getAllIssuers() + return result + } + + public async getIssuer(agentReq: Req, publicIssuerId: string) { + return await agentReq.agent.modules.openid4vc.issuer?.getIssuerByIssuerId(publicIssuerId) + } + + public async deleteIssuer(agentReq: Req, issuerId: string) { + const issuanceRepository = agentReq.agent.dependencyManager.resolve(OpenId4VcIssuerRepository) + await issuanceRepository.deleteById(agentReq.agent.context, issuerId) + return { message: 'Record deleted successfully' } + } + + public async getIssuerAgentMetaData(agentReq: Req, issuerId: string) { + return (await agentReq.agent.modules.openid4vc.issuer?.getIssuerMetadata(issuerId)) as any + } +} + +export const issuerService = new IssuerService() diff --git a/src/controllers/openid4vc/types/holder.types.ts b/src/controllers/openid4vc/types/holder.types.ts new file mode 100644 index 00000000..852470ca --- /dev/null +++ b/src/controllers/openid4vc/types/holder.types.ts @@ -0,0 +1,38 @@ +import type { ResolveOpenId4VpAuthorizationRequestOptions } from '@credo-ts/openid4vc' + +export interface ResolveCredentialOfferBody { + credentialOfferUri: string +} + +export interface RequestCredentialBody { + credentialOfferUri: string + credentialsToRequest: string[] + authorizationCode?: string + codeVerifier?: string + txCode?: string +} + +export interface AuthorizeRequestCredentialOffer { + credentialOfferUri: string + credentialsToRequest: string[] +} + +export interface ResolveProofRequest { + proofRequestUri: string + options?: ResolveOpenId4VpAuthorizationRequestOptions +} + +export interface AcceptProofRequest { + proofRequestUri: string + // selectedCredentials?: { [inputDescriptorId: string]: string } +} + +export interface DeleteCredentialBody { + credentialType: CredentialType + credentialId: string +} + +export enum CredentialType { + SD_JWT = 'sd-jwt-vc', + MSO_MDOC = 'mso_mdoc', +} diff --git a/src/controllers/openid4vc/types/issuer.types.ts b/src/controllers/openid4vc/types/issuer.types.ts new file mode 100644 index 00000000..93b6dca4 --- /dev/null +++ b/src/controllers/openid4vc/types/issuer.types.ts @@ -0,0 +1,185 @@ +import type { SignerMethod } from '../../../enums/enum' +import type { MdocNameSpaces, W3cCredential } from '@credo-ts/core' +import type { OpenId4VciCredentialFormatProfile } from '@credo-ts/openid4vc' + +import { Kms } from '@credo-ts/core' +import { OpenId4VciCreateCredentialOfferOptions, OpenId4VciSignCredentials } from '@credo-ts/openid4vc' + +export interface OpenId4VciOfferCredentials { + credentialSupportedId: string + format: OpenId4VciCredentialFormatProfile + signerOptions: { + method: SignerMethod + did?: string + x5c?: string[] + keyId?: string + } + statusListDetails?: { + listId: string + index: number + listSize?: number + } +} + +export interface DisclosureFrameForOffer { + _sd?: string[] + [claim: string]: DisclosureFrameForOffer | DisclosureFrameForOffer[] | string[] | undefined +} + +export interface OpenId4VciOfferSdJwtCredential extends OpenId4VciOfferCredentials { + payload: { + vct?: string + [key: string]: unknown + } + disclosureFrame?: DisclosureFrameForOffer +} +export interface ValidityInfo { + signed: Date + validFrom: Date + validUntil: Date + expectedUpdate?: Date +} + +export interface OpenId4VciOfferMdocCredential extends OpenId4VciOfferCredentials { + payload: { + docType: 'org.iso.18013.5.1.mDL' | (string & {}) + validityInfo?: Partial + namespaces: MdocNameSpaces + } +} + +export interface OpenId4VciOfferW3cCredential extends OpenId4VciOfferCredentials { + payload: { + verificationMethod: string + credential: W3cCredential + } +} + +export interface OpenId4VcIssuanceSessionsCreateOffer { + publicIssuerId: string + credentials: Array + authorizationCodeFlowConfig?: { + authorizationServerUrl: string + requirePresentationDuringIssuance?: boolean + issuerState?: string + } + preAuthorizedCodeFlowConfig?: { + txCode?: { + description?: string + length?: number + input_mode?: 'numeric' | 'text' + } + authorizationServerUrl?: string + } + issuanceMetadata?: Record + statusListDetails?: { + listId: string + index: number + listSize?: number + } + isRevocable?: boolean +} + +export interface X509GenericRecordContent { + dcs?: string | string[] + root?: string +} + +export interface X509GenericRecord { + id: string + content?: X509GenericRecordContent +} + +export interface Logo { + uri?: string + alt_text?: string + [key: string]: unknown +} + +export interface CredentialDisplay { + name?: string + locale?: string + logo?: Logo + [key: string]: unknown +} + +export interface AuthorizationServerClientAuth { + clientId: string + clientSecret: string +} + +export interface AuthorizationServerConfig { + issuer: string + clientAuthentication?: AuthorizationServerClientAuth +} + +export interface BatchCredentialIssuanceOptions { + batchSize: number +} + +export interface KeyAttestationRequiredRecords { + key_storage: string[] + user_authentication: string[] +} +export interface ProofTypeConfig { + proof_signing_alg_values_supported: string[] + key_attestations_required?: KeyAttestationRequiredRecords +} + +export interface CredentialConfigurationDisplay { + name: string + locale?: string + logo?: Logo + description?: string + background_color?: string + background_image?: Logo + text_color?: string +} + +export interface CredentialDefinition { + type: string[] + [key: string]: any +} + +export interface Claim { + path: string[] + display?: ClaimDisplay[] + mandatory?: boolean +} + +export interface ClaimDisplay { + name: string + locale: string +} +export interface CredentialMetadata { + display: CredentialDisplay[] + claims: Claim[] +} + +export interface CredentialConfigurationSupportedWithFormats { + format: 'vc+sd-jwt' | 'mso_mdoc' | 'jwt_vc_json' | string + vct?: string + doctype?: string + scope?: string + cryptographic_binding_methods_supported?: string[] + credential_signing_alg_values_supported?: string[] | number[] + proof_types_supported?: Record + credential_definition?: CredentialDefinition + credential_metadata?: CredentialMetadata +} +export interface CreateIssuerOptions { + issuerId?: string + accessTokenSignerKeyType?: any + display?: CredentialDisplay[] + authorizationServerConfigs?: AuthorizationServerConfig[] + dpopSigningAlgValuesSupported?: string[] + credentialConfigurationsSupported: Record + batchCredentialIssuance?: BatchCredentialIssuanceOptions +} + +export interface UpdateIssuerRecordOptions { + display?: CredentialDisplay[] + dpopSigningAlgValuesSupported?: string[] + credentialConfigurationsSupported: Record + batchCredentialIssuance?: BatchCredentialIssuanceOptions +} diff --git a/src/controllers/openid4vc/types/verifier.types.ts b/src/controllers/openid4vc/types/verifier.types.ts new file mode 100644 index 00000000..9191d0d8 --- /dev/null +++ b/src/controllers/openid4vc/types/verifier.types.ts @@ -0,0 +1,117 @@ +/* eslint-disable @typescript-eslint/explicit-member-accessibility */ +import type { DifPresentationExchangeDefinitionV2 } from '@credo-ts/core' +import type { Format, Issuance, InputDescriptorV2 } from '@sphereon/pex-models' + +export enum ResponseModeEnum { + DIRECT_POST = 'direct_post', + DIRECT_POST_JWT = 'direct_post.jwt', + DC_API = 'dc_api', + DC_API_JWT = 'dc_api.jwt', +} + +/* -------------------------------------------------------------------------- */ +/* PRESENTATION MODELS */ +/* -------------------------------------------------------------------------- */ + +export interface InputDescriptorV2Model extends InputDescriptorV2 { + format?: Format + group?: string[] + issuance?: Issuance[] +} + +export interface DifPresentationExchangeDefinitionV2Model extends DifPresentationExchangeDefinitionV2 { + format?: Format + submission_requirements?: any[] + input_descriptors: InputDescriptorV2Model[] + frame?: object +} + +export interface PresentationDefinition { + definition: DifPresentationExchangeDefinitionV2Model +} + +/* -------------------------------------------------------------------------- */ +/* DCQL MODELS */ +/* -------------------------------------------------------------------------- */ + +// export interface DcqlClaim { +// path: string[] +// intent_to_retain?: boolean +// } + +// export interface DcqlCredential { +// id: string +// format: string +// meta?: Record +// require_cryptographic_holder_binding?: boolean +// claims: DcqlClaim[] +// } + +// export interface DcqlQuery { +// combine?: 'all' | 'any' +// credentials: DcqlCredential[] +// } + +export interface DcqlDefinition { + query: any +} + +/* -------------------------------------------------------------------------- */ +/* AUTHORIZATION REQUEST MODEL */ +/* -------------------------------------------------------------------------- */ +export type OpenId4VcJwtIssuerDid = { + method: 'did' + didUrl: string +} + +export type OpenId4VcIssuerX5c = { + method: 'x5c' + issuer?: string + x5c: string[] + alg?: string + keyId?: string +} + +export type OpenId4VcIssuerX5cOptions = OpenId4VcIssuerX5c & { + clientIdPrefix?: ClientIdPrefix +} + +export enum ClientIdPrefix { + X509SanDns = 'x509_san_dns', + X509Hash = 'x509_hash', +} + +export interface CreateAuthorizationRequest { + verifierId: string + presentationExchange?: PresentationDefinition + dcql?: string | DcqlDefinition + + responseMode?: ResponseModeEnum + + requestSigner: OpenId4VcJwtIssuerDid | OpenId4VcIssuerX5cOptions + expectedOrigins?: string[] +} + +/* -------------------------------------------------------------------------- */ +/* VERIFIER METADATA */ +/* -------------------------------------------------------------------------- */ + +export class OpenId4VcSiopVerifierClientMetadata { + client_name?: string + logo_uri?: string +} + +export class OpenId4VcSiopCreateVerifierOptions { + verifierId?: string + clientMetadata?: OpenId4VcSiopVerifierClientMetadata +} + +export class OpenId4VcUpdateVerifierRecordOptions { + clientMetadata?: OpenId4VcSiopVerifierClientMetadata +} + +export interface OpenId4VCDCQLVerificationSessionRecord { + verificationSessionId: string + authorizationResponse: Record + origin?: string +} diff --git a/src/controllers/openid4vc/verifier-sessions/verification-sessions.Controller.ts b/src/controllers/openid4vc/verifier-sessions/verification-sessions.Controller.ts new file mode 100644 index 00000000..86c58f51 --- /dev/null +++ b/src/controllers/openid4vc/verifier-sessions/verification-sessions.Controller.ts @@ -0,0 +1,109 @@ +import { OpenId4VcVerificationSessionState } from '@credo-ts/openid4vc' +import { Request as Req } from 'express' +import { Controller, Get, Path, Query, Route, Request, Security, Tags, Post, Body } from 'tsoa' +import { injectable } from 'tsyringe' + +import { SCOPES } from '../../../enums' +import ErrorHandlingService from '../../../errorHandlingService' +import { PurgeRecordType } from '../../../purge/PurgeTypes' +import { SchedulePurge } from '../../../purge/decorators/SchedulePurge' +import { CreateAuthorizationRequest, OpenId4VCDCQLVerificationSessionRecord } from '../types/verifier.types' + +import { VerificationSessionsService } from './verification-sessions.service' + +@Tags('oid4vc verification sessions') +@Route('/openid4vc/verification-sessions') +@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) +@injectable() +export class VerificationSessionsController extends Controller { + public constructor(private verificationSessionService: VerificationSessionsService) { + super() + } + /** + * Create an authorization request, acting as a Relying Party (RP) + */ + @Post('/create-presentation-request') + @SchedulePurge(PurgeRecordType.OID4VC_VERIFICATION, (r) => (r as any)?.verificationSession?.id) + public async createProofRequest( + @Request() request: Req, + @Body() createAuthorizationRequest: CreateAuthorizationRequest, + ) { + try { + return await this.verificationSessionService.createProofRequest(request, createAuthorizationRequest) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Retrieve all verification session records + */ + @Get('/') + public async getAllVerificationSessions( + @Request() request: Req, + @Query('publicVerifierId') publicVerifierId?: string, + @Query('payloadState') payloadState?: string, + @Query('state') state?: OpenId4VcVerificationSessionState, + @Query('authorizationRequestUri') authorizationRequestUri?: string, + @Query('authorizationRequestId') authorizationRequestId?: string, + @Query('nonce') nonce?: string, + ) { + try { + return await this.verificationSessionService.findVerificationSessionsByQuery( + request, + publicVerifierId, + payloadState, + state, + authorizationRequestUri, + nonce, + authorizationRequestId, + ) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Get verification session by ID + */ + @Get('/:verificationSessionId') + public async getVerificationSessionsById( + @Request() request: Req, + @Path('verificationSessionId') verificationSessionId: string, + ) { + try { + return await this.verificationSessionService.getVerificationSessionsById(request, verificationSessionId) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + // /** + // * Get verification response by verification Session ID + // */ + @Get('/response/:verificationSessionId') + public async getVerifiedAuthorizationResponse( + @Request() request: Req, + @Path('verificationSessionId') verificationSessionId: string, + ) { + try { + return await this.verificationSessionService.getVerifiedAuthorizationResponse(request, verificationSessionId) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + /** + * Verify authorization response for a DCAPI proof request + */ + @Post('/verify-authorization-response') + public async verifyDcqlProofRequest( + @Request() request: Req, + @Body() verifydcqlProofRquest: OpenId4VCDCQLVerificationSessionRecord, + ) { + try { + return await this.verificationSessionService.verifyAuthorizationResponse(request, verifydcqlProofRquest) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } +} diff --git a/src/controllers/openid4vc/verifier-sessions/verification-sessions.service.ts b/src/controllers/openid4vc/verifier-sessions/verification-sessions.service.ts new file mode 100644 index 00000000..c1aa7850 --- /dev/null +++ b/src/controllers/openid4vc/verifier-sessions/verification-sessions.service.ts @@ -0,0 +1,218 @@ +import { + JsonTransformer, + MdocDeviceResponse, + TypedArrayEncoder, + W3cJsonLdVerifiablePresentation, + W3cJwtVerifiablePresentation, + X509Service, +} from '@credo-ts/core' +import { OpenId4VcJwtIssuerDid, OpenId4VcVerificationSessionState } from '@credo-ts/openid4vc' +import { Request as Req } from 'express' +import { injectable } from 'tsyringe' + +import { SignerMethod } from '../../../enums' +import { + CreateAuthorizationRequest, + OpenId4VCDCQLVerificationSessionRecord, + ClientIdPrefix, + OpenId4VcIssuerX5cOptions, + ResponseModeEnum, +} from '../types/verifier.types' + +@injectable() +export class VerificationSessionsService { + public async createProofRequest(agentReq: Req, dto: CreateAuthorizationRequest) { + const verifier = agentReq.agent.modules.openid4vc.verifier + if (!verifier) throw new Error('OID4VC verifier module not initialized') + + let requestSigner + let parsedCertificate + if (dto.requestSigner.method === SignerMethod.Did) { + requestSigner = dto.requestSigner as OpenId4VcJwtIssuerDid + + const didToResolve = dto.requestSigner?.didUrl + if (!didToResolve) { + throw new Error('No DID provided to resolve (neither requestSigner.didUrl nor verifierDid present)') + } + + const didDocument = await agentReq.agent.dids.resolveDidDocument(didToResolve) + + let verifierDidUrl: string | undefined = undefined + if (didDocument.verificationMethod?.[0]?.id) { + verifierDidUrl = didDocument.verificationMethod[0].id + } + + if (!verifierDidUrl) { + throw new Error('No matching verification method found on verifier DID document') + } + + if (!requestSigner.didUrl || !String(requestSigner.didUrl).includes('#')) { + requestSigner.didUrl = verifierDidUrl + } + + requestSigner = { method: 'did', didUrl: verifierDidUrl } as any + } else { + requestSigner = dto.requestSigner as OpenId4VcIssuerX5cOptions + + parsedCertificate = X509Service.parseCertificate(agentReq.agent.context, { + encodedCertificate: requestSigner.x5c[0], + }) + requestSigner.issuer = parsedCertificate.sanUriNames[0] + requestSigner.clientIdPrefix = dto.requestSigner.clientIdPrefix ?? ClientIdPrefix.X509Hash + } + const options: any = { + requestSigner, + verifierId: dto.verifierId, + } + + if (dto.responseMode === ResponseModeEnum.DC_API || dto.responseMode === ResponseModeEnum.DC_API_JWT) { + options.expectedOrigins = dto.expectedOrigins + } + + if (dto.responseMode) options.responseMode = dto.responseMode + if (dto.presentationExchange) { + // options.presentationExchange = dto.presentationExchange + throw new Error('Presentation Exchange is not supported for now') + } + if (parsedCertificate) { + parsedCertificate.publicJwk.keyId = requestSigner.keyId + } + options.requestSigner.x5c = [parsedCertificate] + options.dcql = dto.dcql + // } + return (await verifier.createAuthorizationRequest(options)) as any + } + + public async findVerificationSessionsByQuery( + agentReq: Req, + publicVerifierId?: string, + payloadState?: string, + state?: OpenId4VcVerificationSessionState, + authorizationRequestUri?: string, + nonce?: string, + authorizationRequestId?: string, + ) { + return await agentReq.agent.modules.openid4vc.verifier?.findVerificationSessionsByQuery({ + verifierId: publicVerifierId, + payloadState, + state, + authorizationRequestUri, + nonce, + authorizationRequestId, + }) + } + + public async getVerificationSessionsById(agentReq: Req, verificationSessionId: string) { + const verifier = agentReq.agent.modules.openid4vc.verifier + if (!verifier) { + throw new Error('OID4VC verifier module not initialized') + } + return await verifier.getVerificationSessionById(verificationSessionId) + } + + public async getVerifiedAuthorizationResponse(request: Req, verificationSessionId: string) { + const verifier = request.agent.modules.openid4vc.verifier + if (!verifier) { + throw new Error('OID4VC verifier module not initialized') + } + const verificationSession = await verifier.getVerificationSessionById(verificationSessionId) + if (!verificationSession) { + throw new Error(`Verification session with id ${verificationSessionId} not found`) + } + const verified = await verifier.getVerifiedAuthorizationResponse(verificationSession.id) + if (!verified) { + throw new Error(`No verified response found for verification session with id ${verificationSessionId}`) + } + const presentations = await Promise.all( + (verified.presentationExchange?.presentations ?? Object.values(verified.dcql?.presentations ?? {})) + .flat() + .map(async (presentation: any) => { + if (presentation instanceof W3cJsonLdVerifiablePresentation) { + return { + pretty: presentation.toJson(), + encoded: presentation.toJson(), + } + } + + if (presentation instanceof W3cJwtVerifiablePresentation) { + return { + pretty: JsonTransformer.toJSON(presentation.presentation), + encoded: presentation.serializedJwt, + } + } + + if (presentation instanceof MdocDeviceResponse) { + return { + pretty: JsonTransformer.toJSON({ + documents: presentation.documents.map((doc) => ({ + doctype: doc.docType, + alg: doc.alg, + base64Url: doc.base64Url, + validityInfo: doc.validityInfo, + deviceSignedNamespaces: doc.deviceSignedNamespaces, + issuerSignedNamespaces: Object.entries(doc.issuerSignedNamespaces).map( + ([nameSpace, nameSpacEntries]) => [ + nameSpace, + // TODO: Address it later to check whether the received Uint8Array is an image or not. + Object.entries(nameSpacEntries).map(([key, value]) => + value instanceof Uint8Array + ? [`base64:${key}`, `data:image/jpeg;base64,${TypedArrayEncoder.toBase64(value)}`] + : [key, value], + ), + ], + ), + })), + }), + encoded: presentation.base64Url, + } + } + + return { + pretty: { + ...presentation, + compact: undefined, + }, + encoded: presentation.compact, + } + }) ?? [], + ) + const dcqlSubmission = verified?.dcql + ? Object.entries(verified.dcql.presentations).flatMap(([queryCredentialId, presentations]) => + presentations.map((_, presentationIndex) => ({ + queryCredentialId, + presentationIndex, + })), + ) + : undefined + + return { + verificationSessionId: verificationSession?.id, + responseStatus: verificationSession?.state, + error: verificationSession?.errorMessage, + //authorizationRequest, + + presentations: presentations, + + submission: verified!.presentationExchange?.submission, + definition: verified!.presentationExchange?.definition, + transactionDataSubmission: verified!.transactionData, + + // dcqlQuery, + dcqlSubmission: verified!.dcql + ? { ...verified!.dcql.presentationResult, vpTokenMapping: dcqlSubmission } + : undefined, + } as any + } + + public async verifyAuthorizationResponse( + agentReq: Req, + verifydcqlProofRquest: OpenId4VCDCQLVerificationSessionRecord, + ) { + const verifier = agentReq.agent.modules.openid4vc.verifier + if (!verifier) { + throw new Error('OID4VC verifier module not initialized') + } + const result = (await verifier.verifyAuthorizationResponse({ ...verifydcqlProofRquest })) as any + return result + } +} diff --git a/src/controllers/openid4vc/verifiers/verifier.Controller.ts b/src/controllers/openid4vc/verifiers/verifier.Controller.ts new file mode 100644 index 00000000..c49aa84b --- /dev/null +++ b/src/controllers/openid4vc/verifiers/verifier.Controller.ts @@ -0,0 +1,70 @@ +import { Request as Req } from 'express' +import { Body, Delete, Get, Path, Post, Put, Query, Route, Request, Security, Tags } from 'tsoa' + +import { SCOPES } from '../../../enums' +import { OpenId4VcSiopCreateVerifierOptions, OpenId4VcUpdateVerifierRecordOptions } from '../types/verifier.types' +import { VerifierService } from '../verifiers/verifier.service' + +@Tags('oid4vc verifiers') +@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) +@Route('openid4vc/verifier') +export class VerifierController { + private verifierService: VerifierService + + public constructor() { + this.verifierService = new VerifierService() + } + + /** + * Create a new verifier and store the verifier record + */ + @Post('/') + public async createVerifier(@Request() request: Req, @Body() options: OpenId4VcSiopCreateVerifierOptions) { + return await this.verifierService.createVerifier(request, options) + } + + /** + * Update verifier metadata + */ + @Put('{publicVerifierId}') + public async updateVerifierMetadata( + @Request() request: Req, + @Path('publicVerifierId') publicVerifierId: string, + @Body() verifierRecordOptions: OpenId4VcUpdateVerifierRecordOptions, + ) { + if (!publicVerifierId) { + throw new Error('verifierId is required to update verifier metadata') + } + return await this.verifierService.updateVerifierMetadata(request, { + verifierId: publicVerifierId, + clientMetadata: verifierRecordOptions.clientMetadata, + }) + } + + /** + * Get verifiers by query + */ + @Get('/') + public async getVerifiersByQuery(@Request() request: Req, @Query() publicVerifierId?: string) { + return await this.verifierService.getVerifiersByQuery(request, publicVerifierId) + } + + /** + * Get single verifier by ID + */ + @Get('{publicVerifierId}') + public async getVerifier(@Request() request: Req, @Path('publicVerifierId') publicVerifierId: string) { + return await this.verifierService.getVerifier(request, publicVerifierId) + } + + /** + * Delete verifier by ID + */ + @Delete('{verifierId}') + public async deleteVerifier( + @Request() request: Req, + @Path('verifierId') verifierId: string, + ): Promise<{ message: string }> { + return await this.verifierService.deleteVerifier(request, verifierId) + } +} diff --git a/src/controllers/openid4vc/verifiers/verifier.service.ts b/src/controllers/openid4vc/verifiers/verifier.service.ts new file mode 100644 index 00000000..5d9fd510 --- /dev/null +++ b/src/controllers/openid4vc/verifiers/verifier.service.ts @@ -0,0 +1,40 @@ +import type { RestAgentModules, RestMultiTenantAgentModules } from '../../../../src/cliAgent' +import type { OpenId4VcSiopCreateVerifierOptions } from '../types/verifier.types' +import type { Agent } from '@credo-ts/core' +import type { OpenId4VcUpdateVerifierRecordOptions } from '@credo-ts/openid4vc' +import type { Request as Req } from 'express' + +import { OpenId4VcVerifierRepository } from '@credo-ts/openid4vc' + +export class VerifierService { + public async createVerifier(agentReq: Req, options: OpenId4VcSiopCreateVerifierOptions) { + const verifierRecord = await agentReq.agent.modules.openid4vc.verifier.createVerifier(options) + return verifierRecord + } + + public async updateVerifierMetadata(agentReq: Req, options: OpenId4VcUpdateVerifierRecordOptions) { + await agentReq.agent.modules.openid4vc.verifier.updateVerifierMetadata(options) + const verifierRecord = await this.getVerifier(agentReq, options.verifierId) + return verifierRecord + } + + public async getVerifiersByQuery(agentReq: Req, publicVerifierId?: string) { + const verifierRepository = agentReq.agent.dependencyManager.resolve(OpenId4VcVerifierRepository) + const verifiers = await verifierRepository.findByQuery(agentReq.agent.context, { + verifierId: publicVerifierId, + }) + + return verifiers + } + + public async getVerifier(agentReq: Req, publicVerifierId: string) { + return await agentReq.agent.modules.openid4vc.verifier.getVerifierByVerifierId(publicVerifierId) + } + + public async deleteVerifier(agentReq: Req, verifierId: string) { + const verifierRepository = agentReq.agent.dependencyManager.resolve(OpenId4VcVerifierRepository) + return await verifierRepository + .deleteById(agentReq.agent.context, verifierId) + .then(() => ({ message: 'Record deleted successfully' })) + } +} diff --git a/src/controllers/polygon/PolygonController.ts b/src/controllers/polygon/PolygonController.ts index edcc46cb..034817bc 100644 --- a/src/controllers/polygon/PolygonController.ts +++ b/src/controllers/polygon/PolygonController.ts @@ -1,7 +1,7 @@ import type { SchemaMetadata } from '../types' import { generateSecp256k1KeyPair } from '@ayanworks/credo-polygon-w3c-module' -import { DidOperation, DidOperationOptions } from '@ayanworks/credo-polygon-w3c-module/build/ledger' +import { DidOperation, DidOperationOptions } from '@ayanworks/credo-polygon-w3c-module' import { Request as Req } from 'express' import * as fs from 'fs' import { Route, Tags, Security, Controller, Post, Body, Get, Path, Request } from 'tsoa' @@ -107,8 +107,7 @@ export class Polygon extends Controller { ): Promise { try { const { operation } = estimateTransactionRequest - - if (!(operation in DidOperation)) { + if (!Object.values(DidOperation).includes(operation)) { throw new BadRequestError('Invalid method parameter!') } if (operation === DidOperation.Create) { diff --git a/src/controllers/types.ts b/src/controllers/types.ts index 8f9ded7f..1c5ef7b3 100644 --- a/src/controllers/types.ts +++ b/src/controllers/types.ts @@ -1,43 +1,59 @@ import type { RecordId } from './examples' -import type { CustomHandshakeProtocol } from '../enums' -import type { AnonCredsCredentialFormat, LegacyIndyCredentialFormat } from '@credo-ts/anoncreds' import type { - AutoAcceptCredential, - AutoAcceptProof, - CredentialFormatPayload, - HandshakeProtocol, - ReceiveOutOfBandInvitationConfig, - OutOfBandDidCommService, + AnonCredsCredentialDefinition, + AnonCredsDidCommCredentialFormat, + AnonCredsDidCommProofFormat, + LegacyIndyCredentialFormat, + LegacyIndyDidCommProofFormat, + RegisterCredentialDefinitionReturnStateAction, + RegisterCredentialDefinitionReturnStateFailed, + RegisterCredentialDefinitionReturnStateFinished, + RegisterCredentialDefinitionReturnStateWait, + RegisterSchemaReturnStateAction, + RegisterSchemaReturnStateFailed, + RegisterSchemaReturnStateFinished, + RegisterSchemaReturnStateWait, +} from '@credo-ts/anoncreds' +import type { DidResolutionMetadata, DidDocumentMetadata, - ProofExchangeRecord, - ProofFormat, DidRegistrationExtraOptions, DidDocument, DidRegistrationSecretOptions, - InitConfig, - WalletConfig, - CredentialExchangeRecord, DidResolutionOptions, - JsonCredential, - AgentMessage, - Routing, - Attachment, - KeyType, - JsonLdCredentialFormat, JsonObject, W3cJsonLdVerifyCredentialOptions, DataIntegrityProofOptions, W3cJsonLdSignCredentialOptions, W3cCredential, W3cCredentialSubject, + X509CertificateIssuerAndSubjectOptions, + SingleOrArray, } from '@credo-ts/core' -import type { LinkedDataProofOptions } from '@credo-ts/core/build/modules/vc/data-integrity/models/LinkedDataProof' -import type { SingleOrArray } from '@credo-ts/core/build/utils' +import type { + JsonCredential, + ReceiveOutOfBandInvitationConfig, + OutOfBandDidCommService, + DidCommCredentialFormatPayload, + DidCommAutoAcceptCredential, + DidCommProofExchangeRecord, + DidCommJsonLdCredentialFormat, + DidCommCredentialExchangeRecord, + DidCommAutoAcceptProof, + DidCommHandshakeProtocol, + DidCommMessage, + DidCommRouting, + DidCommAttachment, + DidCommProofFormatPayload, + DidCommDifPresentationExchangeProofFormat, +} from '@credo-ts/didcomm' +import type { KeyAlgorithm } from '@openwallet-foundation/askar-nodejs' import type { DIDDocument } from 'did-resolver' -export type CustomTenantConfig = Pick & { - walletConfig: Pick +import { DidMethod, type CustomHandshakeProtocol } from '../enums' + +export type CustomTenantConfig = { label: string } & { + connectionImageUrl?: string } export interface AgentInfo { @@ -51,6 +67,25 @@ export interface AgentToken { token: string } +export enum CredentialState { + ProposalSent = 'proposal-sent', + ProposalReceived = 'proposal-received', + OfferSent = 'offer-sent', + OfferReceived = 'offer-received', + Declined = 'declined', + RequestSent = 'request-sent', + RequestReceived = 'request-received', + CredentialIssued = 'credential-issued', + CredentialReceived = 'credential-received', + Done = 'done', + Abandoned = 'abandoned', +} + +export enum CredentialRole { + Issuer = 'issuer', + Holder = 'holder', +} + export interface AgentMessageType { '@id': string '@type': string @@ -65,11 +100,16 @@ export interface DidResolutionResultProps { export interface ProofRequestMessageResponse { message: string - proofRecord: ProofExchangeRecord + proofRecord: DidCommProofExchangeRecord } // type CredentialFormats = [CredentialFormat] -type CredentialFormats = [LegacyIndyCredentialFormat, AnonCredsCredentialFormat, JsonLdCredentialFormat] +type CredentialFormats = [LegacyIndyCredentialFormat, AnonCredsDidCommCredentialFormat, DidCommJsonLdCredentialFormat] +type ProofFormats = [ + LegacyIndyDidCommProofFormat, + AnonCredsDidCommProofFormat, + DidCommDifPresentationExchangeProofFormat, +] enum ProtocolVersion { v1 = 'v1', @@ -77,41 +117,38 @@ enum ProtocolVersion { } export interface ProposeCredentialOptions { protocolVersion: ProtocolVersion - credentialFormats: CredentialFormatPayload - autoAcceptCredential?: AutoAcceptCredential + credentialFormats: DidCommCredentialFormatPayload + autoAcceptCredential?: DidCommAutoAcceptCredential comment?: string connectionId: RecordId } -// export interface ProposeCredentialOptions extends BaseOptions { -// connectionId: string -// protocolVersion: CredentialProtocolVersionType -// credentialFormats: CredentialFormatPayload, 'createProposal'> -// } - export interface AcceptCredentialProposalOptions { - credentialRecordId: string - credentialFormats?: CredentialFormatPayload - autoAcceptCredential?: AutoAcceptCredential + credentialExchangeRecordId: string + credentialFormats?: DidCommCredentialFormatPayload + autoAcceptCredential?: DidCommAutoAcceptCredential comment?: string } export interface CreateOfferOptions { protocolVersion: ProtocolVersion connectionId: RecordId - credentialFormats: CredentialFormatPayload - autoAcceptCredential?: AutoAcceptCredential + credentialFormats: DidCommCredentialFormatPayload + autoAcceptCredential?: DidCommAutoAcceptCredential comment?: string goalCode?: string goal?: string } -type CredentialFormatType = LegacyIndyCredentialFormat | JsonLdCredentialFormat | AnonCredsCredentialFormat +type CredentialFormatType = + | LegacyIndyCredentialFormat + | DidCommJsonLdCredentialFormat + | AnonCredsDidCommCredentialFormat export interface CreateOfferOobOptions { - protocolVersion: string - credentialFormats: CredentialFormatPayload - autoAcceptCredential?: AutoAcceptCredential + protocolVersion: ProtocolVersion + credentialFormats: DidCommCredentialFormatPayload + autoAcceptCredential?: DidCommAutoAcceptCredential comment?: string goalCode?: string parentThreadId?: string @@ -122,7 +159,7 @@ export interface CreateOfferOobOptions { invitationDid?: string } export interface CredentialCreateOfferOptions { - credentialRecord: CredentialExchangeRecord + credentialRecord: DidCommCredentialExchangeRecord credentialFormats: JsonCredential options: any attachmentId?: string @@ -134,7 +171,7 @@ export interface CreateProofRequestOobOptions { goalCode?: string parentThreadId?: string willConfirm?: boolean - autoAcceptProof?: AutoAcceptProof + autoAcceptProof?: DidCommAutoAcceptProof comment?: string label?: string imageUrl?: string @@ -152,7 +189,7 @@ export interface OfferCredentialOptions { }[] } } - autoAcceptCredential?: AutoAcceptCredential + autoAcceptCredential?: DidCommAutoAcceptCredential comment?: string connectionId: string } @@ -173,20 +210,20 @@ export interface V2OfferCredentialOptions { } export interface AcceptCredential { - credentialRecordId: RecordId + credentialExchangeRecordId: RecordId } export interface CredentialOfferOptions { - credentialRecordId: RecordId - credentialFormats?: CredentialFormatPayload - autoAcceptCredential?: AutoAcceptCredential + credentialExchangeRecordId: RecordId + credentialFormats?: DidCommCredentialFormatPayload + autoAcceptCredential?: DidCommAutoAcceptCredential comment?: string } export interface AcceptCredentialRequestOptions { - credentialRecordId: RecordId - credentialFormats?: CredentialFormatPayload - autoAcceptCredential?: AutoAcceptCredential + credentialExchangeRecordId: RecordId + credentialFormats?: DidCommCredentialFormatPayload + autoAcceptCredential?: DidCommAutoAcceptCredential comment?: string } @@ -203,7 +240,7 @@ export interface ReceiveInvitationByUrlProps extends ReceiveOutOfBandInvitationP export interface AcceptInvitationConfig { autoAcceptConnection?: boolean reuseConnection?: boolean - label?: string + label: string alias?: string imageUrl?: string mediatorId?: string @@ -232,23 +269,12 @@ export interface ConnectionInvitationSchema { imageUrl?: string } -// TODO: added type in protocolVersion -// export interface RequestProofOptions { -// protocolVersion: 'v1' | 'v2' -// connectionId: string -// // TODO: added indy proof formate -// proofFormats: ProofFormatPayload<[IndyProofFormat], 'createRequest'> -// comment: string -// autoAcceptProof?: AutoAcceptProof -// parentThreadId?: string -// } - export interface RequestProofOptions { connectionId: string protocolVersion: string proofFormats: any comment: string - autoAcceptProof: AutoAcceptProof + autoAcceptProof: DidCommAutoAcceptProof goalCode?: string parentThreadId?: string willConfirm?: boolean @@ -256,19 +282,20 @@ export interface RequestProofOptions { // TODO: added type in protocolVersion export interface RequestProofProposalOptions { + protocolVersion: ProtocolVersion connectionId: string - proofFormats: any + proofFormats: DidCommProofFormatPayload goalCode?: string parentThreadId?: string - autoAcceptProof?: AutoAcceptProof + autoAcceptProof?: DidCommAutoAcceptProof comment?: string } export interface AcceptProofProposal { - proofRecordId: string - proofFormats: any + proofExchangeRecordId: string + proofFormats: DidCommProofFormatPayload comment?: string - autoAcceptProof?: AutoAcceptProof + autoAcceptProof?: DidCommAutoAcceptProof goalCode?: string willConfirm?: boolean } @@ -292,7 +319,7 @@ export interface ResolvedDid { } export interface DidCreate { - keyType?: KeyType + keyType?: KeyAlgorithm seed?: string domain?: string method: string @@ -331,12 +358,12 @@ export interface CreateInvitationOptions { goalCode?: string goal?: string handshake?: boolean - handshakeProtocols?: HandshakeProtocol[] - messages?: AgentMessage[] + handshakeProtocols?: DidCommHandshakeProtocol[] + messages?: DidCommMessage[] multiUseInvitation?: boolean autoAcceptConnection?: boolean - routing?: Routing - appendedAttachments?: Attachment[] + routing?: DidCommRouting + appendedAttachments?: DidCommAttachment[] invitationDid?: string } @@ -395,7 +422,8 @@ export type ThreadId = string export type SignDataOptions = { data: string - keyType: KeyType + // FIXME: Check type + keyType: any publicKeyBase58: string did?: string method?: string @@ -403,7 +431,8 @@ export type SignDataOptions = { export type VerifyDataOptions = { data: string - keyType: KeyType + // FIXME: Check type + keyType: any publicKeyBase58: string signature: string } @@ -422,7 +451,8 @@ export interface credentialPayloadToSign { } export interface SafeW3cJsonLdVerifyCredentialOptions extends W3cJsonLdVerifyCredentialOptions { // Ommited due to issues with TSOA - proof: SingleOrArray | DataIntegrityProofOptions> + // FIXME: Check type + proof: SingleOrArray } export type ExtensibleW3cCredentialSubject = W3cCredentialSubject & { @@ -437,3 +467,113 @@ export type ExtensibleW3cCredential = W3cCredential & { export type CustomW3cJsonLdSignCredentialOptions = Omit & { [key: string]: unknown } + +export type DisclosureFrame = { + [key: string]: boolean | DisclosureFrame +} + +export interface BasicX509CreateCertificateConfig extends X509CertificateIssuerAndSubjectOptions { + // FIXME: Check type + keyType: any + issuerAlternativeNameURL: string +} + +export interface X509ImportCertificateOptionsDto { + /* + X.509 certificate in base64 string format + */ + certificate: string + + /* + Private key in base64 string format + */ + privateKey?: string + + // FIXME: Check type + keyType: any +} + +export const supportedKeyTypesDID: Record = { + [DidMethod.Indy]: [{ kty: 'OKP', crv: 'Ed25519' }], + + [DidMethod.Peer]: [ + { kty: 'OKP', crv: 'Ed25519' }, + { kty: 'OKP', crv: 'X25519' }, + ], + + [DidMethod.Key]: [ + { kty: 'OKP', crv: 'Ed25519' }, + { kty: 'OKP', crv: 'X25519' }, + { kty: 'EC', crv: 'P-256' }, + { kty: 'EC', crv: 'P-384' }, + { kty: 'EC', crv: 'P-521' }, + { kty: 'EC', crv: 'secp256k1' }, + ], + + [DidMethod.Web]: [ + { kty: 'OKP', crv: 'Ed25519' }, + { kty: 'OKP', crv: 'X25519' }, + { kty: 'EC', crv: 'P-256' }, + { kty: 'EC', crv: 'secp256k1' }, + ], + + [DidMethod.Polygon]: [{ kty: 'EC', crv: 'secp256k1' }], +} + +export type Curve = 'Ed25519' | 'X25519' | 'P-256' | 'P-384' | 'P-521' | 'secp256k1' + +export type OkpCurve = 'Ed25519' | 'X25519' +export type EcCurve = 'P-256' | 'P-384' | 'P-521' | 'secp256k1' + +export type OkpType = { + kty: 'OKP' + crv: 'Ed25519' | 'X25519' +} + +export type EcType = { + kty: 'EC' + crv: 'P-256' | 'P-384' | 'P-521' | 'secp256k1' +} + +export interface SchemaResponseDTO { + schemaId: string + schema?: { + issuerId: string + name: string + version: string + attrNames: string[] + } + resolutionMetadata: Record // Use Record or explicitly define what you need + schemaMetadata: Record +} + +export interface RegisterSchemaReturn { + jobId?: string + schemaState: + | RegisterSchemaReturnStateWait + | RegisterSchemaReturnStateAction + | RegisterSchemaReturnStateFinished + | RegisterSchemaReturnStateFailed + schemaMetadata: Record + registrationMetadata: Record +} + +export interface GetCredentialDefinitionReturn { + credentialDefinition?: AnonCredsCredentialDefinition + credentialDefinitionId: string + resolutionMetadata: Record + credentialDefinitionMetadata: Record +} + +export type CredentialDefinitionStates = + | RegisterCredentialDefinitionReturnStateWait + | RegisterCredentialDefinitionReturnStateAction + | RegisterCredentialDefinitionReturnStateFinished + | RegisterCredentialDefinitionReturnStateFailed + +export interface RegisterCredentialDefinitionReturn { + jobId?: string + credentialDefinitionState: CredentialDefinitionStates + credentialDefinitionMetadata: Record + registrationMetadata: Record +} diff --git a/src/controllers/x509/crypto-util.ts b/src/controllers/x509/crypto-util.ts new file mode 100644 index 00000000..c01e4e65 --- /dev/null +++ b/src/controllers/x509/crypto-util.ts @@ -0,0 +1,40 @@ +import type { KeyObject } from 'crypto' + +import { createPrivateKey } from 'crypto' + +/** + * Extracts the raw private key (hex) from a PEM-encoded EC (P-256) private key. + */ +async function pemToRawEcPrivateKey(pem: string): Promise { + const keyObj: KeyObject = createPrivateKey({ + key: pem, + format: 'pem', + }) + + // Extract raw private key (as Buffer) + const rawPrivateKey = keyObj.export({ + format: 'jwk', + }).d! + + return Buffer.from(rawPrivateKey, 'base64').toString('hex') +} + +/** + * Extracts the raw private key (hex) from a PEM-encoded Ed25519 private key. + */ +export async function pemToRawPrivateKey(derKey: string | Buffer): Promise { + // If it's a base64 string, convert to Buffer + const keyBuffer = typeof derKey === 'string' ? Buffer.from(derKey, 'base64') : derKey + + const keyObj: KeyObject = createPrivateKey({ + key: keyBuffer, + format: 'der', + type: 'pkcs8', // Use 'pkcs8' for private keys (works for Ed25519, P256, RSA) + }) + + // Ed25519 JWK exports the *seed* (first 32 bytes of the private key) + const jwk = keyObj.export({ format: 'jwk' }) + if (!jwk.d) throw new Error('Failed to extract private key material: missing d component in JWK') + + return Buffer.from(jwk.d, 'base64').toString('hex') +} diff --git a/src/controllers/x509/x509.Controller.ts b/src/controllers/x509/x509.Controller.ts new file mode 100644 index 00000000..cc4725e4 --- /dev/null +++ b/src/controllers/x509/x509.Controller.ts @@ -0,0 +1,79 @@ +import { injectable } from '@credo-ts/core' +import { Request as Req } from 'express' +import { Body, Controller, Post, Route, Tags, Security, Request, Get } from 'tsoa' + +import { SCOPES } from '../../enums' +import ErrorHandlingService from '../../errorHandlingService' +import { X509ImportCertificateOptionsDto } from '../types' + +import { x509ServiceT } from './x509.service' +import { X509CreateCertificateOptionsDto } from './x509.types' + +@Tags('x509') +@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT]) +@Route('/x509') +@injectable() +export class X509Controller extends Controller { + @Post('/') + public async createX509Certificate( + @Request() request: Req, + @Body() createX509Options: X509CreateCertificateOptionsDto, + ) { + try { + return await x509ServiceT.createCertificate(request, createX509Options) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + @Post('/import') + public async ImportX509Certificates( + @Request() request: Req, + @Body() importX509Options: X509ImportCertificateOptionsDto, + ) { + try { + return await x509ServiceT.ImportX509Certificates(request, importX509Options) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + @Post('/trusted') + public async addTrustedCertificate( + @Request() request: Req, + @Body() + options: { + certificate: string + }, + ) { + try { + return await x509ServiceT.addTrustedCertificate(request, options) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + @Get('/trusted') + public async getTrustedCertificates(@Request() request: Req) { + try { + return await x509ServiceT.getTrustedCertificates(request) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } + + @Post('/decode') + public async decodeCertificate( + @Request() request: Req, + @Body() + options: { + certificate: string + }, + ) { + try { + return await x509ServiceT.decodeCertificate(request, options) + } catch (error) { + throw ErrorHandlingService.handle(error) + } + } +} diff --git a/src/controllers/x509/x509.service.ts b/src/controllers/x509/x509.service.ts new file mode 100644 index 00000000..b2789ccb --- /dev/null +++ b/src/controllers/x509/x509.service.ts @@ -0,0 +1,236 @@ +import type { BasicX509CreateCertificateConfig, X509ImportCertificateOptionsDto } from '../types' +import type { CredoError } from '@credo-ts/core' +import type { Request as Req } from 'express' + +import { transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk } from '@credo-ts/askar' +import { + Kms, + TypedArrayEncoder, + X509Certificate, + X509ExtendedKeyUsage, + X509KeyUsage, + X509ModuleConfig, + X509Service, + type Agent, +} from '@credo-ts/core' +import { KeyAlgorithm } from '@openwallet-foundation/askar-nodejs' + +import { keyAlgorithmToCurve } from '../../utils/constant' +import { generateSecretKey, getCertificateValidityForSystem, getTypeFromCurve } from '../../utils/helpers' + +import { pemToRawPrivateKey } from './crypto-util' +import { type X509CreateCertificateOptionsDto } from './x509.types' + +class x509Service { + public async createSelfSignedDCS(createX509Options: BasicX509CreateCertificateConfig, agentReq: Req) { + const agent = agentReq.agent + + const authorityKey = await createKey(agent as Agent, createX509Options.keyType) + const AGENT_HOST = createX509Options.issuerAlternativeNameURL + const AGENT_DNS = new URL(AGENT_HOST).hostname + const selfSignedx509certificate = await X509Service.createCertificate(agent.context, { + authorityKey: Kms.PublicJwk.fromPublicJwk(authorityKey.publicJwk), //createX509Options.subjectKey, + issuer: { countryName: createX509Options.countryName, commonName: createX509Options.commonName }, + validity: getCertificateValidityForSystem(false), + extensions: { + subjectKeyIdentifier: { + include: true, + }, + keyUsage: { + usages: [X509KeyUsage.KeyCertSign, X509KeyUsage.CrlSign, X509KeyUsage.DigitalSignature], + markAsCritical: true, + }, + subjectAlternativeName: { + name: [ + { type: 'dns', value: AGENT_DNS }, + { type: 'url', value: AGENT_HOST }, + ], + }, + issuerAlternativeName: { + name: [ + { type: 'dns', value: AGENT_DNS }, + { type: 'url', value: AGENT_HOST }, + ], + }, + extendedKeyUsage: { + usages: [X509ExtendedKeyUsage.MdlDs], + markAsCritical: true, + }, + basicConstraints: { + ca: true, + pathLenConstraint: 0, + markAsCritical: true, + }, + // TODO: Create revocation list and add URL here - store this in platform + // crlDistributionPoints: { + // urls: [`${"AGENT_HOST"}/crl`], + // }, + }, + }) + + agent.config.logger.info('======= X.509 IACA Self Signed Certificate ===========') + const selfSignedx509certificateBase64 = selfSignedx509certificate.toString('base64') + agent.config.logger.debug('selfSignedx509certificateBase64', { selfSignedx509certificateBase64 }) + return { publicCertificateBase64: selfSignedx509certificateBase64 } + } + + public async createCertificate(agentReq: Req, options: X509CreateCertificateOptionsDto) { + const agent = agentReq.agent + + let authorityKeyID, subjectPublicKeyID, authorityKeyKmsId + + if (options.authorityKey && options?.authorityKey?.seed) { + const { privateJwk } = transformSeedToPrivateJwk({ + type: getTypeFromCurve(options.authorityKey.keyType ?? 'P-256'), + seed: TypedArrayEncoder.fromString(options.authorityKey!.seed!), + }) + + const { publicJwk } = await agent.kms.importKey({ privateJwk }) + authorityKeyID = publicJwk + } else { + const { publicJwk, keyId } = await agent.kms.createKey({ + type: getTypeFromCurve(options.authorityKey?.keyType ?? 'P-256'), + }) + authorityKeyID = publicJwk + authorityKeyKmsId = keyId + } + + if (options.subjectPublicKey) { + if (options?.subjectPublicKey?.seed) { + const importedKey = await agentReq.agent.kms.importKey({ + privateJwk: transformSeedToPrivateJwk({ + seed: TypedArrayEncoder.fromString(options.subjectPublicKey.seed), + type: getTypeFromCurve(options.subjectPublicKey?.keyType ?? 'P-256'), + }).privateJwk, + }) + + subjectPublicKeyID = importedKey.publicJwk + } else { + const { publicJwk } = await agent.kms.createKey({ + type: getTypeFromCurve(options.subjectPublicKey?.keyType ?? 'P-256'), + }) + subjectPublicKeyID = publicJwk + } + } + const certificate = await agent.x509.createCertificate({ + authorityKey: Kms.PublicJwk.fromPublicJwk(authorityKeyID), + subjectPublicKey: subjectPublicKeyID ? Kms.PublicJwk.fromPublicJwk(subjectPublicKeyID) : undefined, + serialNumber: options.serialNumber, + issuer: options.issuer, + extensions: options.extensions, + subject: options.subject, + validity: options.validity, + }) + + const issuerCertificate = certificate.toString('base64') + + return { publicCertificateBase64: issuerCertificate, keyId: authorityKeyKmsId } + } + + public async ImportX509Certificates(agentReq: Req, options: X509ImportCertificateOptionsDto) { + const agent = agentReq.agent + if (!options.privateKey) throw new Error('[ImportX509Certificates] privateKey is required') + agent.config.logger.debug(`Start validating keys`) + const secretHexKey = await pemToRawPrivateKey(options.privateKey) + const privateKey = TypedArrayEncoder.fromHex(secretHexKey) + + agent.config.logger.debug(`Decode certificate`) + const parsedCertificate = X509Service.parseCertificate(agent.context, { + encodedCertificate: options.certificate, + }) + const issuerCertificate = parsedCertificate.toString('base64') + let key + try { + const keyTypeInfo = getTypeFromCurve(options.keyType) + const { privateJwk } = transformPrivateKeyToPrivateJwk({ + type: keyTypeInfo, + privateKey, + }) + + key = await agent.kms.importKey({ + privateJwk, + }) + if ( + parsedCertificate.publicJwk.publicKey.kty !== keyTypeInfo.kty || + !parsedCertificate.publicJwk.equals(Kms.PublicJwk.fromPublicJwk(key.publicJwk)) + ) { + throw new Error(`Key mismatched in provided X509_CERTIFICATE to import`) + } + agent.config.logger.info(`Keys matched with certificate`) + } catch (error) { + // If the key already exists, we assume the self-signed certificate is already created + if (error instanceof Kms.KeyManagementKeyExistsError) { + agent.config.logger.warn( + '[ImportX509Certificates] Key already exists — assuming certificate was already imported', + ) + } else { + agent.config.logger.error('[ImportX509Certificates] Failed to import key', { + message: (error as Error)?.message, + }) + throw error + } + } + + return { issuerCertificate, keyId: key?.keyId } + } + + public addTrustedCertificate( + agentReq: Req, + options: { + certificate: string + }, + ) { + const agent = agentReq.agent + return agent.x509.config.addTrustedCertificate(options.certificate) + } + + public getTrustedCertificates(agentReq: Req) { + const trustedCertificates = agentReq.agent.context.dependencyManager + .resolve(X509ModuleConfig) + .trustedCertificates?.map((cert) => X509Certificate.fromEncodedCertificate(cert).toString('base64')) // as [string, ...string[]] + + return trustedCertificates + } + + /** + * Parses a base64-encoded X.509 certificate into a X509Certificate + * + * @param issuerAgent {Agent} + * @param options {x509Input} + * @returns + */ + public decodeCertificate( + agentReq: Req, + options: { + certificate: string + }, + ) { + const parsedCertificate = X509Service.parseCertificate(agentReq.agent.context, { + encodedCertificate: options.certificate, + }) + + return parsedCertificate + } +} + +export const x509ServiceT = new x509Service() + +export async function createKey(agent: Agent, keyType: KeyAlgorithm) { + try { + const seed = await generateSecretKey(keyType === KeyAlgorithm.EcSecp256r1 ? 64 : 32) + + const normalizedCurve = keyAlgorithmToCurve[keyType] + if (!normalizedCurve) throw new Error('Unspported key type for method importKey') + const importedKey = await agent.kms.importKey({ + privateJwk: transformSeedToPrivateJwk({ + seed: TypedArrayEncoder.fromString(seed), + type: getTypeFromCurve(normalizedCurve), + }).privateJwk, + }) + + return importedKey + } catch (error) { + agent.config.logger.debug(`Error while creating authorityKey`, { message: (error as CredoError).message }) + throw error + } +} diff --git a/src/controllers/x509/x509.types.ts b/src/controllers/x509/x509.types.ts new file mode 100644 index 00000000..a642a0ae --- /dev/null +++ b/src/controllers/x509/x509.types.ts @@ -0,0 +1,203 @@ +import type { Curve } from '../types' +import type { X509ExtendedKeyUsage, X509KeyUsage } from '@credo-ts/core' + +// Enum remains the same +export enum GeneralNameType { + DNS = 'dns', + DN = 'dn', + EMAIL = 'email', + GUID = 'guid', + IP = 'ip', + URL = 'url', + UPN = 'upn', + REGISTERED_ID = 'id', +} + +export interface AuthorityAndSubjectKeyDto { + /** + * @example "my-seed-12345" + * @description Seed to deterministically derive the key (optional) + */ + seed?: string + + /** + * @example "3yPQbnk6WwLgX8K3JZ4t7vBnJ8XqY2mMpRcD9fNvGtHw" + * @description publicKeyBase58 for using existing key in wallet (optional) + */ + publicKeyBase58?: string + + /** + * @example "p256" + * @description Type of the key used for signing the X.509 Certificate (default is p256) + */ + keyType?: Curve +} + +export interface NameDto { + /** + * @example "dns" + */ + type: GeneralNameType + + /** + * @example "example.com" + */ + value: string +} + +export interface X509CertificateIssuerAndSubjectOptionsDto { + /** + * @example "US" + */ + countryName?: string + + /** + * @example "California" + */ + stateOrProvinceName?: string + + /** + * @example "IT Department" + */ + organizationalUnit?: string + + /** + * @example "Example Corporation" + */ + commonName?: string +} + +export interface ValidityDto { + /** + * @example "2024-01-01T00:00:00.000Z" + */ + notBefore?: Date + + /** + * @example "2025-01-01T00:00:00.000Z" + */ + notAfter?: Date +} + +export interface KeyUsageDto { + /** + * @example ["digitalSignature", "keyEncipherment", "crlSign"] + */ + usages: X509KeyUsage[] + + /** + * @example true + */ + markAsCritical?: boolean +} + +export interface ExtendedKeyUsageDto { + /** + * @example ["MdlDs", "ServerAuth", "ClientAuth"] + */ + usages: X509ExtendedKeyUsage[] + + /** + * @example true + */ + markAsCritical?: boolean +} + +export interface NameListDto { + /** + * @example [{ "type": "dns", "value": "example.com" }, { "type": "email", "value": "admin@example.com" }] + */ + name: NameDto[] + + /** + * @example true + */ + markAsCritical?: boolean +} + +export interface AuthorityAndSubjectKeyIdentifierDto { + /** + * @example true + */ + include: boolean + + /** + * @example true + */ + markAsCritical?: boolean +} + +export interface BasicConstraintsDto { + /** + * @example false + */ + ca: boolean + + /** + * @example 0 + */ + pathLenConstraint?: number + + /** + * @example true + */ + markAsCritical?: boolean +} + +export interface CrlDistributionPointsDto { + /** + * @example ["http://crl.example.com/ca.crl"] + */ + urls: string[] + + /** + * @example true + */ + markAsCritical?: boolean +} + +export interface X509CertificateExtensionsOptionsDto { + keyUsage?: KeyUsageDto + extendedKeyUsage?: ExtendedKeyUsageDto + authorityKeyIdentifier?: AuthorityAndSubjectKeyIdentifierDto + subjectKeyIdentifier?: AuthorityAndSubjectKeyIdentifierDto + issuerAlternativeName?: NameListDto + subjectAlternativeName?: NameListDto + basicConstraints?: BasicConstraintsDto + crlDistributionPoints?: CrlDistributionPointsDto +} + +// Main DTO Interface +export interface X509CreateCertificateOptionsDto { + authorityKey?: AuthorityAndSubjectKeyDto + subjectPublicKey?: AuthorityAndSubjectKeyDto + + /** + * @example "1234567890" + */ + serialNumber?: string + + /** + * @example { + * "countryName": "US", + * "stateOrProvinceName": "California", + * "commonName": "Example CA" + * } + * OR + * @example "/C=US/ST=California/O=Example Corporation/CN=Example CA" + */ + issuer: X509CertificateIssuerAndSubjectOptionsDto | string + + /** + * @example { + * "countryName": "US", + * "commonName": "www.example.com" + * } + * OR + * @example "/C=US/CN=www.example.com" + */ + subject?: X509CertificateIssuerAndSubjectOptionsDto | string + + validity?: ValidityDto + extensions?: X509CertificateExtensionsOptionsDto +} diff --git a/src/enums/enum.ts b/src/enums/enum.ts index d01d77c3..8eb51544 100644 --- a/src/enums/enum.ts +++ b/src/enums/enum.ts @@ -44,7 +44,11 @@ export enum NetworkTypes { export enum IndicioAcceptanceMechanism { Wallet_Agreement = 'wallet_agreement', - Accept = 'accept', + At_Submission = 'at_submission', + For_Session = 'for_session', + On_File = 'on_file', + Product_Eula = 'product_eula', + Service_Agreement = 'service_agreement', } export enum EndorserMode { @@ -93,3 +97,25 @@ export enum SCOPES { TENANT_AGENT = 'tenant', DEDICATED_AGENT = 'dedicated', } + +export enum SignerMethod { + Did = 'did', + X5c = 'x5c', +} +export enum KeyAlgorithmCurve { + Ed25519 = 'Ed25519', + X25519 = 'X25519', + P256 = 'P-256', + P384 = 'P-384', + P521 = 'P-521', + secp256k1 = 'secp256k1', + Bls12381G2 = 'bls12381g2', +} + +export enum CredentialFormat { + VcSdJwt = 'vc+sd-jwt', + DcSdJwt = 'dc+sd-jwt', + JwtVcJson = 'jwt_vc_json', + JwtVcJsonLd = 'jwt_vc_json-ld', + LdpVc = 'ldp_vc', +} diff --git a/src/errorHandlingService.ts b/src/errorHandlingService.ts index 5fa11a21..b3ad6aa4 100644 --- a/src/errorHandlingService.ts +++ b/src/errorHandlingService.ts @@ -1,13 +1,8 @@ import type { BaseError } from './errors/errors' import { AnonCredsError, AnonCredsRsError, AnonCredsStoreRecordError } from '@credo-ts/anoncreds' -import { - CredoError, - RecordNotFoundError, - RecordDuplicateError, - ClassValidationError, - MessageSendingError, -} from '@credo-ts/core' +import { CredoError, RecordNotFoundError, RecordDuplicateError, ClassValidationError } from '@credo-ts/core' +import { MessageSendingError } from '@credo-ts/didcomm' import { IndyVdrError } from '@hyperledger/indy-vdr-nodejs' import { RecordDuplicateError as CustomRecordDuplicateError, NotFoundError, InternalServerError } from './errors/errors' diff --git a/src/events/BasicMessageEvents.ts b/src/events/BasicMessageEvents.ts index d062e56b..18c411ea 100644 --- a/src/events/BasicMessageEvents.ts +++ b/src/events/BasicMessageEvents.ts @@ -1,30 +1,34 @@ import type { ServerConfig } from '../utils/ServerConfig' -import type { Agent, BasicMessageStateChangedEvent } from '@credo-ts/core' +import type { Agent } from '@credo-ts/core' +import type { DidCommBasicMessageStateChangedEvent } from '@credo-ts/didcomm' -import { BasicMessageEventTypes } from '@credo-ts/core' +import { DidCommBasicMessageEventTypes } from '@credo-ts/didcomm' import { sendWebSocketEvent } from './WebSocketEvents' import { sendWebhookEvent } from './WebhookEvent' export const basicMessageEvents = async (agent: Agent, config: ServerConfig) => { - agent.events.on(BasicMessageEventTypes.BasicMessageStateChanged, async (event: BasicMessageStateChangedEvent) => { - const record = event.payload.basicMessageRecord - const body = record.toJSON() + agent.events.on( + DidCommBasicMessageEventTypes.DidCommBasicMessageStateChanged, + async (event: DidCommBasicMessageStateChangedEvent) => { + const record = event.payload.basicMessageRecord + const body = record.toJSON() - // Only send webhook if webhook url is configured - if (config.webhookUrl) { - await sendWebhookEvent(config.webhookUrl + '/basic-messages', body, agent.config.logger) - } + // Only send webhook if webhook url is configured + if (config.webhookUrl) { + await sendWebhookEvent(config.webhookUrl + '/basic-messages', body, agent.config.logger) + } - if (config.socketServer) { - // Always emit websocket event to clients (could be 0) - sendWebSocketEvent(config.socketServer, { - ...event, - payload: { - message: event.payload.message.toJSON(), - basicMessageRecord: body, - }, - }) - } - }) + if (config.socketServer) { + // Always emit websocket event to clients (could be 0) + sendWebSocketEvent(config.socketServer, { + ...event, + payload: { + message: event.payload.message.toJSON(), + basicMessageRecord: body, + }, + }) + } + }, + ) } diff --git a/src/events/ConnectionEvents.ts b/src/events/ConnectionEvents.ts index 562caa2f..108e4515 100644 --- a/src/events/ConnectionEvents.ts +++ b/src/events/ConnectionEvents.ts @@ -1,30 +1,34 @@ import type { ServerConfig } from '../utils/ServerConfig' -import type { Agent, ConnectionStateChangedEvent } from '@credo-ts/core' +import type { Agent } from '@credo-ts/core' +import type { DidCommConnectionStateChangedEvent } from '@credo-ts/didcomm' -import { ConnectionEventTypes } from '@credo-ts/core' +import { DidCommConnectionEventTypes } from '@credo-ts/didcomm' import { sendWebSocketEvent } from './WebSocketEvents' import { sendWebhookEvent } from './WebhookEvent' export const connectionEvents = async (agent: Agent, config: ServerConfig) => { - agent.events.on(ConnectionEventTypes.ConnectionStateChanged, async (event: ConnectionStateChangedEvent) => { - const record = event.payload.connectionRecord - const body = { ...record.toJSON(), ...event.metadata } + agent.events.on( + DidCommConnectionEventTypes.DidCommConnectionStateChanged, + async (event: DidCommConnectionStateChangedEvent) => { + const record = event.payload.connectionRecord + const body = { ...record.toJSON(), ...event.metadata } - // Only send webhook if webhook url is configured - if (config.webhookUrl) { - await sendWebhookEvent(config.webhookUrl + '/connections', body, agent.config.logger) - } + // Only send webhook if webhook url is configured + if (config.webhookUrl) { + await sendWebhookEvent(config.webhookUrl + '/connections', body, agent.config.logger) + } - if (config.socketServer) { - // Always emit websocket event to clients (could be 0) - sendWebSocketEvent(config.socketServer, { - ...event, - payload: { - ...event.payload, - connectionRecord: body, - }, - }) - } - }) + if (config.socketServer) { + // Always emit websocket event to clients (could be 0) + sendWebSocketEvent(config.socketServer, { + ...event, + payload: { + ...event.payload, + connectionRecord: body, + }, + }) + } + }, + ) } diff --git a/src/events/CredentialEvents.ts b/src/events/CredentialEvents.ts index 9ebbbcda..426dc61a 100644 --- a/src/events/CredentialEvents.ts +++ b/src/events/CredentialEvents.ts @@ -1,65 +1,76 @@ import type { RestMultiTenantAgentModules } from '../cliAgent' import type { ServerConfig } from '../utils/ServerConfig' -import type { Agent, CredentialStateChangedEvent } from '@credo-ts/core' +import type { Agent } from '@credo-ts/core' +import type { DidCommCredentialStateChangedEvent } from '@credo-ts/didcomm' -import { CredentialEventTypes } from '@credo-ts/core' +import { DidCommCredentialEventTypes } from '@credo-ts/didcomm' import { sendWebSocketEvent } from './WebSocketEvents' import { sendWebhookEvent } from './WebhookEvent' export const credentialEvents = async (agent: Agent, config: ServerConfig) => { - agent.events.on(CredentialEventTypes.CredentialStateChanged, async (event: CredentialStateChangedEvent) => { - const record = event.payload.credentialRecord + agent.events.on( + DidCommCredentialEventTypes.DidCommCredentialStateChanged, + async (event: DidCommCredentialStateChangedEvent) => { + const record = event.payload.credentialExchangeRecord + const tenantId = + !event.metadata.contextCorrelationId || event.metadata.contextCorrelationId === 'default' + ? event.metadata.contextCorrelationId + : event.metadata.contextCorrelationId.split('tenant-')[1] - const body: Record = { - ...record.toJSON(), - ...event.metadata, - outOfBandId: null, - credentialData: null, - } + const body: Record = { + ...record.toJSON(), + ...event.metadata, + contextCorrelationId: tenantId, + outOfBandId: null, + credentialData: null, + } + + if (record?.connectionId) { + let connectionRecord + if (tenantId && tenantId !== 'default') { + await (agent as Agent).modules.tenants.withTenantAgent( + { tenantId: body.contextCorrelationId as string }, + async (tenantAgent) => { + connectionRecord = await tenantAgent.modules.didcomm.connections.findById( + record.connectionId ? record.connectionId : '', + ) + }, + ) + } else { + connectionRecord = await agent.modules.didcomm.connections.findById(record.connectionId) + } + body.outOfBandId = connectionRecord?.outOfBandId + } - if (record?.connectionId) { - let connectionRecord - if (event.metadata.contextCorrelationId && event.metadata.contextCorrelationId !== 'default') { + let formatData = null + if (tenantId && tenantId !== 'default') { await (agent as Agent).modules.tenants.withTenantAgent( { tenantId: body.contextCorrelationId as string }, async (tenantAgent) => { - connectionRecord = await tenantAgent.connections.findById(record.connectionId ? record.connectionId : '') + formatData = await tenantAgent.modules.didcomm.credentials.getFormatData(record.id) }, ) } else { - connectionRecord = await agent.connections.getById(record.connectionId) + formatData = await agent.modules.didcomm.credentials.getFormatData(record.id) } - body.outOfBandId = connectionRecord?.outOfBandId - } - - let formatData = null - if (event.metadata.contextCorrelationId && event.metadata.contextCorrelationId !== 'default') { - await (agent as Agent).modules.tenants.withTenantAgent( - { tenantId: body.contextCorrelationId as string }, - async (tenantAgent) => { - formatData = await tenantAgent.credentials.getFormatData(record.id) - }, - ) - } else { - formatData = await agent.credentials.getFormatData(record.id) - } - body.credentialData = formatData + body.credentialData = formatData - if (config.webhookUrl) { - await sendWebhookEvent(config.webhookUrl + '/credentials', body, agent.config.logger) - } + if (config.webhookUrl) { + await sendWebhookEvent(config.webhookUrl + '/credentials', body, agent.config.logger) + } - if (config.socketServer) { - // Always emit websocket event to clients (could be 0) - sendWebSocketEvent(config.socketServer, { - ...event, - payload: { - ...event.payload, - credentialRecord: body, - }, - }) - } - }) + if (config.socketServer) { + // Always emit websocket event to clients (could be 0) + sendWebSocketEvent(config.socketServer, { + ...event, + payload: { + ...event.payload, + credentialRecord: body, + }, + }) + } + }, + ) } diff --git a/src/events/ProofEvents.ts b/src/events/ProofEvents.ts index ca0ed7a0..df6ebaed 100644 --- a/src/events/ProofEvents.ts +++ b/src/events/ProofEvents.ts @@ -1,26 +1,27 @@ import type { ServerConfig } from '../utils/ServerConfig' -import type { Agent, ProofStateChangedEvent } from '@credo-ts/core' +import type { Agent } from '@credo-ts/core' +import type { DidCommProofStateChangedEvent } from '@credo-ts/didcomm' -import { ProofEventTypes } from '@credo-ts/core' +import { DidCommProofEventTypes } from '@credo-ts/didcomm' import { sendWebSocketEvent } from './WebSocketEvents' import { sendWebhookEvent } from './WebhookEvent' export const proofEvents = async (agent: Agent, config: ServerConfig) => { - agent.events.on(ProofEventTypes.ProofStateChanged, async (event: ProofStateChangedEvent) => { + agent.events.on(DidCommProofEventTypes.ProofStateChanged, async (event: DidCommProofStateChangedEvent) => { const record = event.payload.proofRecord const body = { ...record.toJSON(), ...event.metadata } as { proofData?: any } - if (event.metadata.contextCorrelationId !== 'default') { + if (event.metadata.contextCorrelationId && event.metadata.contextCorrelationId !== 'default') { const tenantAgent = await agent.modules.tenants.getTenantAgent({ - tenantId: event.metadata.contextCorrelationId, + tenantId: event.metadata.contextCorrelationId.split('tenant-')[1], }) - const data = await tenantAgent.proofs.getFormatData(record.id) + const data = await tenantAgent.modules.didcomm.proofs.getFormatData(record.id) body.proofData = data } //Emit webhook for dedicated agent if (event.metadata.contextCorrelationId === 'default') { - const data = await agent.proofs.getFormatData(record.id) + const data = await agent.modules.didcomm.proofs.getFormatData(record.id) body.proofData = data } diff --git a/src/events/ReuseConnectionEvents.ts b/src/events/ReuseConnectionEvents.ts index c4ee435f..275bc700 100644 --- a/src/events/ReuseConnectionEvents.ts +++ b/src/events/ReuseConnectionEvents.ts @@ -1,13 +1,14 @@ import type { ServerConfig } from '../utils/ServerConfig' -import type { Agent, HandshakeReusedEvent } from '@credo-ts/core' +import type { Agent } from '@credo-ts/core' +import type { DidCommHandshakeReusedEvent } from '@credo-ts/didcomm' -import { OutOfBandEventTypes } from '@credo-ts/core' +import { DidCommOutOfBandEventTypes } from '@credo-ts/didcomm' import { sendWebSocketEvent } from './WebSocketEvents' import { sendWebhookEvent } from './WebhookEvent' export const reuseConnectionEvents = async (agent: Agent, config: ServerConfig) => { - agent.events.on(OutOfBandEventTypes.HandshakeReused, async (event: HandshakeReusedEvent) => { + agent.events.on(DidCommOutOfBandEventTypes.HandshakeReused, async (event: DidCommHandshakeReusedEvent) => { const body = { ...event.payload.connectionRecord.toJSON(), outOfBandRecord: event.payload.outOfBandRecord.toJSON(), diff --git a/src/events/WebSocketEvents.ts b/src/events/WebSocketEvents.ts index 1e968775..a5193024 100644 --- a/src/events/WebSocketEvents.ts +++ b/src/events/WebSocketEvents.ts @@ -1,6 +1,6 @@ -import WebSocket from 'ws' +import { WebSocket, type Server } from 'ws' -export const sendWebSocketEvent = async (server: WebSocket.Server, data: unknown) => { +export const sendWebSocketEvent = async (server: Server, data: unknown) => { server.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { typeof data === 'string' ? client.send(data) : client.send(JSON.stringify(data)) diff --git a/src/events/openId4VcIssuanceSessionEvents.ts b/src/events/openId4VcIssuanceSessionEvents.ts new file mode 100644 index 00000000..cc8c63ea --- /dev/null +++ b/src/events/openId4VcIssuanceSessionEvents.ts @@ -0,0 +1,33 @@ +import type { ServerConfig } from '../utils/ServerConfig' +import type { Agent } from '@credo-ts/core' +import type { OpenId4VcIssuanceSessionStateChangedEvent } from '@credo-ts/openid4vc' + +import { OpenId4VcIssuerEvents } from '@credo-ts/openid4vc' + +import { sendWebSocketEvent } from './WebSocketEvents' +import { sendWebhookEvent } from './WebhookEvent' + +export const openId4VcIssuanceSessionEvents = async (agent: Agent, config: ServerConfig) => { + agent.events.on( + OpenId4VcIssuerEvents.IssuanceSessionStateChanged, + async (event: OpenId4VcIssuanceSessionStateChangedEvent) => { + const record = event.payload.issuanceSession + + const body = { ...record.toJSON(), ...event.metadata } + + if (config.webhookUrl) { + await sendWebhookEvent(config.webhookUrl + '/openid4vc-issuance', body, agent.config.logger) + } + + if (config.socketServer) { + sendWebSocketEvent(config.socketServer, { + ...event, + payload: { + ...event.payload, + issuanceRecord: body, + }, + }) + } + }, + ) +} diff --git a/src/events/openId4VcVerificationSessionEvents.ts b/src/events/openId4VcVerificationSessionEvents.ts new file mode 100644 index 00000000..302881a2 --- /dev/null +++ b/src/events/openId4VcVerificationSessionEvents.ts @@ -0,0 +1,32 @@ +import type { ServerConfig } from '../utils/ServerConfig' +import type { Agent } from '@credo-ts/core' +import type { OpenId4VcVerificationSessionStateChangedEvent } from '@credo-ts/openid4vc' + +import { OpenId4VcVerifierEvents } from '@credo-ts/openid4vc' + +import { sendWebSocketEvent } from './WebSocketEvents' +import { sendWebhookEvent } from './WebhookEvent' + +export const openId4VcVerificationSessionEvents = async (agent: Agent, config: ServerConfig) => { + agent.events.on( + OpenId4VcVerifierEvents.VerificationSessionStateChanged, + async (event: OpenId4VcVerificationSessionStateChangedEvent) => { + const record = event.payload.verificationSession + const body = { ...record.toJSON(), ...event.metadata } + + if (config.webhookUrl) { + await sendWebhookEvent(config.webhookUrl + '/openid4vc-verification', body, agent.config.logger) + } + + if (config.socketServer) { + sendWebSocketEvent(config.socketServer, { + ...event, + payload: { + ...event.payload, + verificationRecord: body, + }, + }) + } + }, + ) +} diff --git a/src/index.ts b/src/index.ts index bd27e821..1a1547d1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,12 +4,12 @@ import type { ServerConfig } from './utils/ServerConfig' import type { Agent } from '@credo-ts/core' import type { Socket } from 'net' -import { Server } from 'ws' +import { WebSocketServer } from 'ws' import { setupServer } from './server' export const startServer = async (agent: Agent, config: ServerConfig) => { - const socketServer = config.socketServer ?? new Server({ noServer: true }) + const socketServer = config.socketServer ?? new WebSocketServer({ noServer: true }) const app = await setupServer(agent, { ...config, socketServer }) const server = app.listen(config.port) diff --git a/src/purge/PurgeConfigValidator.ts b/src/purge/PurgeConfigValidator.ts new file mode 100644 index 00000000..0096f8f6 --- /dev/null +++ b/src/purge/PurgeConfigValidator.ts @@ -0,0 +1,47 @@ +import type { NatsConfig, PurgeConfig } from './PurgeTypes' + +import { connect } from 'nats' + +import { buildNatsAuthenticator } from '../utils/NatsAuthenticator' + +export async function validatePurgeConfig(config: PurgeConfig): Promise { + const { natsConfig, cronConfig } = config + + if (!natsConfig.enabled && !cronConfig.enabled) { + throw new Error( + '[Purge] PURGE_ENABLED=true but neither PURGE_NATS_ENABLED nor PURGE_CRON_ENABLED is set to true. ' + + 'Enable at least one mode.', + ) + } + + if (natsConfig.enabled) { + await verifyNatsJetStream(natsConfig.nats) + } +} + +async function verifyNatsJetStream(nats: NatsConfig): Promise { + let nc: Awaited> | null = null + + try { + nc = await connect({ + servers: nats.servers, + ...buildNatsAuthenticator(nats), + timeout: 5000, + maxReconnectAttempts: 0, + }) + } catch (err: any) { + throw new Error( + `[Purge] PURGE_NATS_ENABLED=true but cannot connect to NATS at ${nats.servers.join(', ')}: ${err?.message}`, + ) + } + + try { + await nc.jetstreamManager() + } catch (err: any) { + throw new Error( + `[Purge] Connected to NATS but JetStream is not enabled. Start NATS with the -js flag. Error: ${err?.message}`, + ) + } finally { + await nc.close() + } +} diff --git a/src/purge/PurgeConstants.ts b/src/purge/PurgeConstants.ts new file mode 100644 index 00000000..b71117a5 --- /dev/null +++ b/src/purge/PurgeConstants.ts @@ -0,0 +1,48 @@ +import { PurgeRecordType } from './PurgeTypes' + +export const PURGE_STREAM = 'PURGE' + +// Schedule and execution subjects must be in the same stream for Nats-Schedule-Target to work +export const PURGE_SCHEDULER_SUBJECTS: Record = { + [PurgeRecordType.DIDCOMM_CREDENTIAL]: 'purge.schedule.didcomm.credential', + [PurgeRecordType.DIDCOMM_PROOF]: 'purge.schedule.didcomm.proof', + [PurgeRecordType.OID4VC_ISSUANCE]: 'purge.schedule.oid4vc.issuance', + [PurgeRecordType.OID4VC_VERIFICATION]: 'purge.schedule.oid4vc.verification', +} + +export const PURGE_EXECUTION_SUBJECTS: Record = { + [PurgeRecordType.DIDCOMM_CREDENTIAL]: 'purge.execute.didcomm.credential', + [PurgeRecordType.DIDCOMM_PROOF]: 'purge.execute.didcomm.proof', + [PurgeRecordType.OID4VC_ISSUANCE]: 'purge.execute.oid4vc.issuance', + [PurgeRecordType.OID4VC_VERIFICATION]: 'purge.execute.oid4vc.verification', +} + +export const PURGE_CONSUMER_NAMES: Record = { + [PurgeRecordType.DIDCOMM_CREDENTIAL]: 'purge-worker-didcomm-credential', + [PurgeRecordType.DIDCOMM_PROOF]: 'purge-worker-didcomm-proof', + [PurgeRecordType.OID4VC_ISSUANCE]: 'purge-worker-oid4vc-issuance', + [PurgeRecordType.OID4VC_VERIFICATION]: 'purge-worker-oid4vc-verification', +} + +// Added to ttlSeconds when computing stream max_age — covers worker processing time after fire +export const PURGE_STREAM_BUFFER_NS = 7 * 24 * 60 * 60 * 1_000_000_000 + +export const PURGE_CONSUMER_ACK_WAIT_NS = 30 * 1_000_000_000 + +export const PURGE_CONSUMER_MAX_DELIVER = 3 + +export const PURGE_CONSUMER_BACKOFF_NS = [ + 5_000_000_000, // 5s + 30_000_000_000, // 30s +] + +export const PURGE_WEBHOOK_PATHS: Record = { + [PurgeRecordType.DIDCOMM_CREDENTIAL]: '/purge/didcomm-credential', + [PurgeRecordType.DIDCOMM_PROOF]: '/purge/didcomm-proof', + [PurgeRecordType.OID4VC_ISSUANCE]: '/purge/oid4vc-issuance', + [PurgeRecordType.OID4VC_VERIFICATION]: '/purge/oid4vc-verification', +} + +export const PURGE_WEBHOOK_RETRY_DELAYS_MS = [1000, 5000, 30000] + +export const PURGE_WORKER_RESTART_DELAY_MS = 5_000 diff --git a/src/purge/PurgeDeleteRecord.ts b/src/purge/PurgeDeleteRecord.ts new file mode 100644 index 00000000..6de526e4 --- /dev/null +++ b/src/purge/PurgeDeleteRecord.ts @@ -0,0 +1,34 @@ +import type { Agent } from '@credo-ts/core' + +import { OpenId4VcIssuanceSessionRepository, OpenId4VcVerificationSessionRepository } from '@credo-ts/openid4vc' + +import { PurgeRecordType } from './PurgeTypes' + +export async function deletePurgeRecord(agent: Agent, recordType: PurgeRecordType, recordId: string): Promise { + switch (recordType) { + case PurgeRecordType.DIDCOMM_CREDENTIAL: + await (agent as any).modules.didcomm.credentials.deleteById(recordId) + break + + case PurgeRecordType.DIDCOMM_PROOF: + await (agent as any).modules.didcomm.proofs.deleteById(recordId) + break + + case PurgeRecordType.OID4VC_ISSUANCE: { + const repo = agent.dependencyManager.resolve(OpenId4VcIssuanceSessionRepository) + await repo.deleteById(agent.context, recordId) + break + } + + case PurgeRecordType.OID4VC_VERIFICATION: { + const repo = agent.dependencyManager.resolve(OpenId4VcVerificationSessionRepository) + await repo.deleteById(agent.context, recordId) + break + } + + default: { + const _exhaustive: never = recordType + throw new Error(`[Purge] Unhandled record type: ${_exhaustive}`) + } + } +} diff --git a/src/purge/PurgeSchedulerFactory.ts b/src/purge/PurgeSchedulerFactory.ts new file mode 100644 index 00000000..22454280 --- /dev/null +++ b/src/purge/PurgeSchedulerFactory.ts @@ -0,0 +1,23 @@ +import { CronPurgeScheduler } from './schedulers/CronPurgeScheduler' +import { NatsPurgeScheduler } from './schedulers/NatsPurgeScheduler' + +let _natsScheduler: NatsPurgeScheduler | null = null +let _cronScheduler: CronPurgeScheduler | null = null + +export function getNatsPurgeScheduler(): NatsPurgeScheduler | null { + return _natsScheduler +} + +export function getCronPurgeScheduler(): CronPurgeScheduler | null { + return _cronScheduler +} + +export function initPurgeSchedulers(natsEnabled: boolean, cronEnabled: boolean): void { + if (natsEnabled) _natsScheduler = new NatsPurgeScheduler() + if (cronEnabled) _cronScheduler = new CronPurgeScheduler() +} + +export async function stopPurgeSchedulers(): Promise { + await _natsScheduler?.stop() + await _cronScheduler?.stop() +} diff --git a/src/purge/PurgeTypes.ts b/src/purge/PurgeTypes.ts new file mode 100644 index 00000000..ceebde02 --- /dev/null +++ b/src/purge/PurgeTypes.ts @@ -0,0 +1,120 @@ +export interface NatsConfig { + servers: string[] + nkeySeed?: string + credentialsFile?: string + username?: string + password?: string +} + +export type AgentMode = 'shared' | 'dedicated' + +export enum PurgeRecordType { + DIDCOMM_CREDENTIAL = 'didcomm_credential', + DIDCOMM_PROOF = 'didcomm_proof', + OID4VC_ISSUANCE = 'oid4vc_issuance', + OID4VC_VERIFICATION = 'oid4vc_verification', +} + +export interface PurgeJob { + recordId: string + recordType: PurgeRecordType + tenantId: string + agentMode: AgentMode + scheduledAt: string +} + +export interface PurgeNatsConfig { + enabled: boolean + ttlSeconds: number + nats: NatsConfig + recordTypes: PurgeRecordType[] +} + +export interface PurgeCronConfig { + enabled: boolean + ttlSeconds: number + cronSchedule: string + recordTypes: PurgeRecordType[] +} + +export interface PurgeConfig { + natsConfig: PurgeNatsConfig + cronConfig: PurgeCronConfig + webhookEnabled: boolean +} + +export function buildPurgeConfig(): PurgeConfig | undefined { + if (process.env.PURGE_ENABLED !== 'true') return undefined + + const natsEnabled = process.env.PURGE_NATS_ENABLED === 'true' + const cronEnabled = process.env.PURGE_CRON_ENABLED === 'true' + + if (!natsEnabled && !cronEnabled) return undefined + + return { + natsConfig: { + enabled: natsEnabled, + ttlSeconds: parseTtlSeconds(process.env.PURGE_NATS_TTL_SECONDS, 'PURGE_NATS_TTL_SECONDS'), + nats: { + servers: (process.env.NATS_SERVERS || 'nats://localhost:4222') + .split(',') + .map((s) => s.trim()) + .filter(Boolean), + nkeySeed: process.env.NATS_NKEY_SEED, + credentialsFile: process.env.NATS_CREDENTIALS_FILE, + username: process.env.NATS_USER, + password: process.env.NATS_PASSWORD, + }, + recordTypes: buildPurgeRecordTypes(), + }, + cronConfig: { + enabled: cronEnabled, + ttlSeconds: parseTtlSeconds(process.env.PURGE_CRON_TTL_SECONDS, 'PURGE_CRON_TTL_SECONDS'), + cronSchedule: process.env.PURGE_CRON_SCHEDULE || '0 * * * *', + recordTypes: buildPurgeRecordTypes(), + }, + webhookEnabled: process.env.PURGE_WEBHOOK_ENABLED !== 'false', + } +} + +function parseTtlSeconds(value: string | undefined, envKey: string, defaultSeconds = 2592000): number { + if (value === undefined || value === '') return defaultSeconds + const parsed = Number(value) + if (!Number.isInteger(parsed) || parsed <= 0) { + throw new Error(`[Purge] ${envKey} must be a positive integer, got: "${value}"`) + } + return parsed +} + +function buildPurgeRecordTypes(): PurgeRecordType[] { + const envFlags: Record = { + PURGE_DIDCOMM_CREDENTIAL: PurgeRecordType.DIDCOMM_CREDENTIAL, + PURGE_DIDCOMM_PROOF: PurgeRecordType.DIDCOMM_PROOF, + PURGE_OID4VC_ISSUANCE: PurgeRecordType.OID4VC_ISSUANCE, + PURGE_OID4VC_VERIFICATION: PurgeRecordType.OID4VC_VERIFICATION, + } + + const anyEnvSet = Object.keys(envFlags).some((key) => process.env[key] !== undefined) + + if (anyEnvSet) { + const selected = Object.entries(envFlags) + .filter(([key]) => process.env[key] === 'true') + .map(([, type]) => type) + + if (selected.length === 0) { + throw new Error( + '[Purge] At least one PURGE_* record type flag must be set to "true" when any flag is present. ' + + 'Set PURGE_ENABLED=false to disable purge entirely.', + ) + } + + return selected + } + + return [ + PurgeRecordType.DIDCOMM_CREDENTIAL, + PurgeRecordType.DIDCOMM_PROOF, + PurgeRecordType.OID4VC_ISSUANCE, + PurgeRecordType.OID4VC_VERIFICATION, + ] +} diff --git a/src/purge/PurgeWebhook.ts b/src/purge/PurgeWebhook.ts new file mode 100644 index 00000000..377676d1 --- /dev/null +++ b/src/purge/PurgeWebhook.ts @@ -0,0 +1,57 @@ +import type { PurgeRecordType } from './PurgeTypes' +import type { Logger } from '@credo-ts/core' + +import { sleep } from '../utils/webhook' + +import { PURGE_WEBHOOK_PATHS, PURGE_WEBHOOK_RETRY_DELAYS_MS } from './PurgeConstants' + +export enum PurgeDeletionStatus { + DELETED = 'deleted', + ALREADY_ABSENT = 'already-absent', +} + +export async function sendPurgeWebhook( + webhookUrl: string, + recordId: string, + recordType: PurgeRecordType, + tenantId: string, + status: PurgeDeletionStatus, + logger: Logger, +): Promise { + const url = `${webhookUrl}${PURGE_WEBHOOK_PATHS[recordType]}` + const body = { + eventType: 'purge.deletion.complete', + occurredAt: new Date().toISOString(), + tenantId, + deletion: { + recordId, + recordType, + status, + deletedAt: new Date().toISOString(), + }, + } + + const delays = PURGE_WEBHOOK_RETRY_DELAYS_MS + const maxAttempts = delays.length + 1 + + for (let attempt = 0; attempt < maxAttempts; attempt++) { + try { + const res = await fetch(url, { + method: 'POST', + body: JSON.stringify(body), + headers: { 'Content-Type': 'application/json' }, + signal: AbortSignal.timeout(10000), + }) + if (!res.ok) throw new Error(`HTTP ${res.status}`) + logger.debug('[Purge] Webhook delivered', { url, recordId }) + return + } catch (err: any) { + if (attempt === maxAttempts - 1) { + logger.warn('[Purge] Webhook failed after all retries', { url, recordId, error: err?.message }) + } else { + logger.debug(`[Purge] Webhook attempt ${attempt + 1} failed — retrying in ${delays[attempt]}ms`) + await sleep(delays[attempt]) + } + } + } +} diff --git a/src/purge/PurgeWorker.ts b/src/purge/PurgeWorker.ts new file mode 100644 index 00000000..c28531db --- /dev/null +++ b/src/purge/PurgeWorker.ts @@ -0,0 +1,145 @@ +import type { PurgeJob } from './PurgeTypes' +import type { PurgeRecordType } from './PurgeTypes' +import type { Agent } from '@credo-ts/core' +import type { Consumer } from 'nats' + +import { RecordNotFoundError } from '@credo-ts/core' +import { StringCodec } from 'nats' + +import { PURGE_CONSUMER_MAX_DELIVER, PURGE_WORKER_RESTART_DELAY_MS } from './PurgeConstants' +import { deletePurgeRecord } from './PurgeDeleteRecord' +import { sendPurgeWebhook, PurgeDeletionStatus } from './PurgeWebhook' + +const sc = StringCodec() + +export class PurgeWorker { + private recordType: PurgeRecordType + private consumerName: string + private webhookUrl: string | undefined + private stopped = false + + public constructor(recordType: PurgeRecordType, consumerName: string, webhookUrl?: string) { + this.recordType = recordType + this.consumerName = consumerName + this.webhookUrl = webhookUrl + } + + public stop(): void { + this.stopped = true + } + + public async start(agent: Agent, consumer: Consumer): Promise { + agent.config.logger.info('[Purge] Worker started', { consumer: this.consumerName }) + + while (!this.stopped) { + try { + const messages = await consumer.consume() + for await (const msg of messages) { + await this.processMessage(msg, agent) + } + agent.config.logger.warn('[Purge] Consume loop ended — restarting', { consumer: this.consumerName }) + } catch (err: any) { + if (this.stopped) return + agent.config.logger.error('[Purge] Consume loop error — restarting after delay', { + consumer: this.consumerName, + error: err?.message, + }) + await new Promise((resolve) => setTimeout(resolve, PURGE_WORKER_RESTART_DELAY_MS)) + } + } + } + + private async processMessage(msg: any, agent: Agent): Promise { + let job: PurgeJob | undefined + + try { + job = JSON.parse(sc.decode(msg.data)) as PurgeJob + } catch { + agent.config.logger.error('[Purge] Failed to parse job — discarding', { consumer: this.consumerName }) + msg.ack() + return + } + + const { recordId, recordType, tenantId, agentMode } = job + const logger = agent.config.logger + const deliveryCount: number = msg.info.deliveryCount + + if (recordType !== this.recordType) { + logger.error('[Purge] Job record type mismatch — discarding', { + expected: this.recordType, + received: recordType, + recordId, + }) + msg.ack() + return + } + + logger.info('[Purge] Job received', { recordId, recordType, tenantId, deliveryCount }) + + try { + if (agentMode === 'shared') { + await (agent as any).modules.tenants.withTenantAgent({ tenantId }, async (tenantAgent: Agent) => { + await deletePurgeRecord(tenantAgent, this.recordType, recordId) + }) + } else { + await deletePurgeRecord(agent, this.recordType, recordId) + } + + logger.info('[Purge] Record deleted', { recordId, recordType, tenantId }) + msg.ack() + + if (this.webhookUrl) { + try { + await sendPurgeWebhook( + this.webhookUrl, + recordId, + this.recordType, + tenantId, + PurgeDeletionStatus.DELETED, + logger, + ) + } catch (webhookErr: any) { + logger.warn('[Purge] Webhook delivery failed after deletion', { + recordId, + recordType, + error: webhookErr?.message, + }) + } + } + } catch (err: any) { + if (err instanceof RecordNotFoundError) { + logger.warn('[Purge] Record already absent — treating as success', { recordId, recordType }) + msg.ack() + + if (this.webhookUrl) { + try { + await sendPurgeWebhook( + this.webhookUrl, + recordId, + this.recordType, + tenantId, + PurgeDeletionStatus.ALREADY_ABSENT, + logger, + ) + } catch (webhookErr: any) { + logger.warn('[Purge] Webhook delivery failed for already-absent record', { + recordId, + recordType, + error: webhookErr?.message, + }) + } + } + return + } + + logger.warn('[Purge] Job failed', { recordId, recordType, deliveryCount, error: err?.message }) + + if (deliveryCount >= PURGE_CONSUMER_MAX_DELIVER) { + logger.error('[Purge] Job dropped after max retries', { recordId, recordType, tenantId, deliveryCount }) + msg.ack() + } else { + msg.nak() + } + } + } +} diff --git a/src/purge/decorators/SchedulePurge.ts b/src/purge/decorators/SchedulePurge.ts new file mode 100644 index 00000000..8c6d8d02 --- /dev/null +++ b/src/purge/decorators/SchedulePurge.ts @@ -0,0 +1,43 @@ +import type { AgentMode, PurgeRecordType } from '../PurgeTypes' + +import { getNatsPurgeScheduler } from '../PurgeSchedulerFactory' + +export function SchedulePurge(recordType: PurgeRecordType, idExtractor: (result: unknown) => string | undefined) { + return function (_target: object, _key: string, descriptor: PropertyDescriptor) { + const original = descriptor.value as (...args: unknown[]) => Promise + + descriptor.value = async function (...args: unknown[]) { + const result = await original.apply(this, args) + + const scheduler = getNatsPurgeScheduler() + + if (!scheduler) { + return result + } + + const recordId = idExtractor(result) + + if (!recordId) { + return result + } + + const request = args[0] as any + // TenantAgent.context.contextCorrelationId = `tenant-${tenantId}` (Credo internals) + const contextCorrelationId: string = (request?.agent as any)?.context?.contextCorrelationId ?? '' + const tenantId: string = contextCorrelationId.startsWith('tenant-') + ? contextCorrelationId.slice('tenant-'.length) + : '' + const agentMode: AgentMode = tenantId ? 'shared' : 'dedicated' + + // Fire-and-forget: purge scheduling must not block record creation. + // If NATS publish fails and cron is disabled, this record will not be purged. + scheduler.schedulePurge(recordType, recordId, tenantId, agentMode).catch(() => { + // intentionally silent — cron fallback or record TTL handles cleanup + }) + + return result + } + + return descriptor + } +} diff --git a/src/purge/schedulers/CronPurgeScheduler.ts b/src/purge/schedulers/CronPurgeScheduler.ts new file mode 100644 index 00000000..0b41854a --- /dev/null +++ b/src/purge/schedulers/CronPurgeScheduler.ts @@ -0,0 +1,178 @@ +import type { PurgeConfig } from '../PurgeTypes' +import type { Agent } from '@credo-ts/core' +import type { ScheduledTask } from 'node-cron' + +import { RecordNotFoundError } from '@credo-ts/core' +import { OpenId4VcIssuanceSessionRepository, OpenId4VcVerificationSessionRepository } from '@credo-ts/openid4vc' +import cron from 'node-cron' + +import { deletePurgeRecord } from '../PurgeDeleteRecord' +import { PurgeRecordType } from '../PurgeTypes' +import { sendPurgeWebhook, PurgeDeletionStatus } from '../PurgeWebhook' + +export class CronPurgeScheduler { + private job: ScheduledTask | null = null + private isRunning = false + + public async start(agent: Agent, config: PurgeConfig, webhookUrl: string | undefined): Promise { + const { cronConfig } = config + + this.job = cron.schedule(cronConfig.cronSchedule, () => { + if (this.isRunning) { + agent.config.logger.warn('[Purge] Cron scan still running — skipping this tick') + return + } + this.isRunning = true + this.runScan(agent, config, webhookUrl) + .catch((err: Error) => { + agent.config.logger.error('[Purge] Cron scan error', { error: err?.message }) + }) + .finally(() => { + this.isRunning = false + }) + }) + + agent.config.logger.info('[Purge] CronPurgeScheduler started', { + cronSchedule: cronConfig.cronSchedule, + ttlSeconds: cronConfig.ttlSeconds, + recordTypes: cronConfig.recordTypes, + }) + } + + public async stop(): Promise { + this.job?.stop() + this.job = null + } + + private async runScan(agent: Agent, config: PurgeConfig, webhookUrl: string | undefined): Promise { + const logger = agent.config.logger + const isShared = typeof (agent as any).modules?.tenants?.getAllTenants === 'function' + + logger.info('[Purge] Cron scan started', { agentMode: isShared ? 'shared' : 'dedicated' }) + + let totalDeleted = 0 + + if (isShared) { + const tenants: Array<{ id: string }> = await (agent as any).modules.tenants.getAllTenants() + + for (const tenant of tenants) { + try { + await (agent as any).modules.tenants.withTenantAgent({ tenantId: tenant.id }, async (tenantAgent: Agent) => { + const count = await this.scanTenant(tenantAgent, tenant.id, config, webhookUrl) + totalDeleted += count + }) + } catch (err: any) { + logger.error('[Purge] Failed to scan tenant', { tenantId: tenant.id, error: err?.message }) + } + } + } else { + totalDeleted = await this.scanTenant(agent, '', config, webhookUrl) + } + + logger.info('[Purge] Cron scan completed', { totalDeleted }) + } + + private async scanTenant( + tenantAgent: Agent, + tenantId: string, + config: PurgeConfig, + webhookUrl: string | undefined, + ): Promise { + let deleted = 0 + const { cronConfig } = config + + for (const recordType of cronConfig.recordTypes) { + try { + const expiredIds = await this.queryExpiredRecords(tenantAgent, recordType, cronConfig.ttlSeconds) + + for (const recordId of expiredIds) { + if (await this.deleteAndNotify(tenantAgent, recordId, recordType, tenantId, webhookUrl)) { + deleted++ + } + } + } catch (err: any) { + tenantAgent.config.logger.error('[Purge] Error scanning record type', { + tenantId, + recordType, + error: err?.message, + }) + } + } + + return deleted + } + + private async queryExpiredRecords(agent: Agent, recordType: PurgeRecordType, ttlSeconds: number): Promise { + const cutoffMs = Date.now() - ttlSeconds * 1000 + const ids: string[] = [] + + switch (recordType) { + case PurgeRecordType.DIDCOMM_CREDENTIAL: { + const records = await (agent as any).modules.didcomm.credentials.findAllByQuery({}) + for (const r of records) { + if (r.createdAt && new Date(r.createdAt).getTime() < cutoffMs) ids.push(r.id) + } + break + } + + case PurgeRecordType.DIDCOMM_PROOF: { + const records = await (agent as any).modules.didcomm.proofs.findAllByQuery({}) + for (const r of records) { + if (r.createdAt && new Date(r.createdAt).getTime() < cutoffMs) ids.push(r.id) + } + break + } + + case PurgeRecordType.OID4VC_ISSUANCE: { + const repo = agent.dependencyManager.resolve(OpenId4VcIssuanceSessionRepository) + const records = await repo.findByQuery(agent.context, {}) + for (const r of records) { + if (r.createdAt && new Date(r.createdAt).getTime() < cutoffMs) ids.push(r.id) + } + break + } + + case PurgeRecordType.OID4VC_VERIFICATION: { + const repo = agent.dependencyManager.resolve(OpenId4VcVerificationSessionRepository) + const records = await repo.findByQuery(agent.context, {}) + for (const r of records) { + if (r.createdAt && new Date(r.createdAt).getTime() < cutoffMs) ids.push(r.id) + } + break + } + } + + return ids + } + + private async deleteAndNotify( + agent: Agent, + recordId: string, + recordType: PurgeRecordType, + tenantId: string, + webhookUrl: string | undefined, + ): Promise { + const logger = agent.config.logger + let status: PurgeDeletionStatus + + try { + await deletePurgeRecord(agent, recordType, recordId) + logger.info('[Purge] Record deleted by cron', { recordId, recordType, tenantId }) + status = PurgeDeletionStatus.DELETED + } catch (err: any) { + if (err instanceof RecordNotFoundError) { + logger.warn('[Purge] Record already absent — skipping', { recordId, recordType }) + status = PurgeDeletionStatus.ALREADY_ABSENT + } else { + logger.error('[Purge] Failed to delete record', { recordId, recordType, error: err?.message }) + return false + } + } + + if (webhookUrl) { + await sendPurgeWebhook(webhookUrl, recordId, recordType, tenantId, status, logger) + } + + return true + } +} diff --git a/src/purge/schedulers/NatsPurgeScheduler.ts b/src/purge/schedulers/NatsPurgeScheduler.ts new file mode 100644 index 00000000..e9404c91 --- /dev/null +++ b/src/purge/schedulers/NatsPurgeScheduler.ts @@ -0,0 +1,215 @@ +import type { AgentMode, PurgeConfig, PurgeJob } from '../PurgeTypes' +import type { PurgeRecordType } from '../PurgeTypes' +import type { Agent } from '@credo-ts/core' +import type { JetStreamClient, JetStreamManager, NatsConnection } from 'nats' + +import { AckPolicy, DiscardPolicy, RetentionPolicy, StorageType, StringCodec, connect, headers } from 'nats' + +import { buildNatsAuthenticator } from '../../utils/NatsAuthenticator' +import { + NATS_ERR_CONSUMER_ALREADY_EXISTS, + NATS_ERR_STREAM_ALREADY_EXISTS, + NATS_MAX_RECONNECT_ATTEMPTS, + NATS_RECONNECT_TIME_WAIT_MS, +} from '../../utils/NatsConstants' +import { + PURGE_CONSUMER_ACK_WAIT_NS, + PURGE_CONSUMER_BACKOFF_NS, + PURGE_CONSUMER_MAX_DELIVER, + PURGE_CONSUMER_NAMES, + PURGE_EXECUTION_SUBJECTS, + PURGE_SCHEDULER_SUBJECTS, + PURGE_STREAM, + PURGE_STREAM_BUFFER_NS, +} from '../PurgeConstants' +import { PurgeWorker } from '../PurgeWorker' + +const sc = StringCodec() + +export class NatsPurgeScheduler { + private nc: NatsConnection | null = null + private js: JetStreamClient | null = null + private jsm: JetStreamManager | null = null + private ttlSeconds = 0 + private recordTypes: PurgeRecordType[] = [] + private workers: PurgeWorker[] = [] + + public async start(agent: Agent, config: PurgeConfig, webhookUrl: string | undefined): Promise { + const { natsConfig } = config + this.ttlSeconds = natsConfig.ttlSeconds + this.recordTypes = natsConfig.recordTypes + + this.nc = await connect({ + servers: natsConfig.nats.servers, + ...buildNatsAuthenticator(natsConfig.nats), + maxReconnectAttempts: NATS_MAX_RECONNECT_ATTEMPTS, + reconnectTimeWait: NATS_RECONNECT_TIME_WAIT_MS, + }) + this.js = this.nc.jetstream() + this.jsm = await this.nc.jetstreamManager() + + agent.config.logger.info('[Purge] Provisioning NATS streams...') + await this.provisionStreams() + agent.config.logger.info('[Purge] NATS streams ready') + + agent.config.logger.info('[Purge] Provisioning NATS consumers...') + await this.provisionConsumers() + agent.config.logger.info('[Purge] NATS consumers ready') + + await this.startWorkers(agent, webhookUrl) + + agent.config.logger.info('[Purge] NatsPurgeScheduler started', { ttlSeconds: this.ttlSeconds }) + } + + public async schedulePurge( + recordType: PurgeRecordType, + recordId: string, + tenantId: string, + agentMode: AgentMode, + ): Promise { + if (!this.js) throw new Error('[Purge] NatsPurgeScheduler not started') + + const fireAt = new Date(Date.now() + this.ttlSeconds * 1000).toISOString() + const job: PurgeJob = { recordId, recordType, tenantId, agentMode, scheduledAt: fireAt } + + // tenantScope ensures subjects and dedup IDs are unique across tenants in shared mode + const tenantScope = agentMode === 'shared' ? tenantId : 'dedicated' + // Subject is unique per tenant+record — NATS allows only one active schedule per subject + const scheduleSubject = `${PURGE_SCHEDULER_SUBJECTS[recordType]}.${tenantScope}.${recordId}` + + const h = headers() + h.set('Nats-Schedule', `@at ${fireAt}`) + h.set('Nats-Schedule-Target', PURGE_EXECUTION_SUBJECTS[recordType]) + h.set('Nats-Msg-Id', `purge-${recordType}-${tenantScope}-${recordId}`) + + await this.js.publish(scheduleSubject, sc.encode(JSON.stringify(job)), { headers: h }) + } + + public async stop(): Promise { + for (const worker of this.workers) { + worker.stop() + } + this.workers = [] + if (this.nc) { + await this.nc.drain() + this.nc = null + this.js = null + this.jsm = null + } + } + + private async provisionStreams(): Promise { + if (!this.jsm) throw new Error('[Purge] Not connected') + + await this.addOrUpdateStream({ + name: PURGE_STREAM, + subjects: ['purge.schedule.>', 'purge.execute.>'], + retention: RetentionPolicy.Limits, + storage: StorageType.File, + max_age: this.ttlSeconds * 1_000_000_000 + PURGE_STREAM_BUFFER_NS, + discard: DiscardPolicy.Old, + allow_msg_schedules: true, + }) + } + + private async addOrUpdateStream(config: any): Promise { + if (!this.jsm) throw new Error('[Purge] Not connected') + try { + await this.jsm.streams.add(config) + } catch (err: any) { + if (this.isAlreadyExistsError(err)) { + await this.jsm.streams.update(config.name, config) + } else if (err?.message?.includes('subjects overlap')) { + await this.deleteStaleStreams(config.subjects) + await this.jsm.streams.add(config) + } else { + throw err + } + } + } + + private async deleteStaleStreams(_subjects: string[]): Promise { + if (!this.jsm) return + const list = await this.jsm.streams.list().next() + for (const stream of list) { + if (stream.config.name === PURGE_STREAM) continue + // Only delete streams that explicitly claim purge.* subjects — never touch unrelated streams + const isPurgeStream = stream.config.subjects?.some( + (s: string) => s.startsWith('purge.schedule.') || s.startsWith('purge.execute.'), + ) + if (isPurgeStream) { + await this.jsm.streams.delete(stream.config.name) + } + } + } + + private async provisionConsumers(): Promise { + if (!this.jsm) throw new Error('[Purge] Not connected') + + for (const recordType of this.recordTypes) { + try { + await this.jsm.consumers.add(PURGE_STREAM, { + durable_name: PURGE_CONSUMER_NAMES[recordType], + ack_policy: AckPolicy.Explicit, + ack_wait: PURGE_CONSUMER_ACK_WAIT_NS, + max_deliver: PURGE_CONSUMER_MAX_DELIVER, + backoff: PURGE_CONSUMER_BACKOFF_NS, + filter_subject: PURGE_EXECUTION_SUBJECTS[recordType], + }) + } catch (err: any) { + if (!this.isAlreadyExistsError(err)) throw err + } + } + } + + private async startWorkers(agent: Agent, webhookUrl: string | undefined): Promise { + if (!this.js) throw new Error('[Purge] Not connected') + + for (const recordType of this.recordTypes) { + const consumerName = PURGE_CONSUMER_NAMES[recordType] + agent.config.logger.info('[Purge] Starting worker', { recordType, consumerName }) + this.runWorkerWithRestart(agent, recordType, consumerName, webhookUrl) + } + } + + private runWorkerWithRestart( + agent: Agent, + recordType: PurgeRecordType, + consumerName: string, + webhookUrl: string | undefined, + attempt = 0, + ): void { + if (!this.js) return + + const delayMs = Math.min(1000 * 2 ** attempt, 60_000) + + const launch = async () => { + const consumer = await this.js!.consumers.get(PURGE_STREAM, consumerName) + const worker = new PurgeWorker(recordType, consumerName, webhookUrl) + this.workers.push(worker) + await worker.start(agent, consumer) + this.workers = this.workers.filter((w) => w !== worker) + } + + launch().catch((err: Error) => { + if (!this.nc) return // scheduler stopped — do not restart + agent.config.logger.error('[Purge] Worker crashed — restarting', { + consumerName, + attempt, + delayMs, + error: err?.message, + }) + setTimeout(() => this.runWorkerWithRestart(agent, recordType, consumerName, webhookUrl, attempt + 1), delayMs) + }) + } + + private isAlreadyExistsError(err: any): boolean { + const msg: string = err?.message ?? '' + return ( + msg.includes('stream name already in use') || + msg.includes('consumer name already in use') || + err?.api_error?.err_code === NATS_ERR_STREAM_ALREADY_EXISTS || + err?.api_error?.err_code === NATS_ERR_CONSUMER_ALREADY_EXISTS + ) + } +} diff --git a/src/routes/routes.ts b/src/routes/routes.ts index 2a30e20a..3285a6ec 100644 --- a/src/routes/routes.ts +++ b/src/routes/routes.ts @@ -4,31 +4,41 @@ import type { TsoaRoute } from '@tsoa/runtime'; import { fetchMiddlewares, ExpressTemplateService } from '@tsoa/runtime'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { X509Controller } from './../controllers/x509/x509.Controller'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa import { Polygon } from './../controllers/polygon/PolygonController'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { EndorserTransactionController } from './../controllers/anoncreds/endorser-transaction/EndorserTransactionController'; +import { VerificationSessionsController } from './../controllers/openid4vc/verifier-sessions/verification-sessions.Controller'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { DidController } from './../controllers/did/DidController'; +import { IssuerController } from './../controllers/openid4vc/issuers/issuer.Controller'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { SchemaController } from './../controllers/anoncreds/schema/SchemaController'; +import { IssuanceSessionsController } from './../controllers/openid4vc/issuance-sessions/issuance-sessions.Controller'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { CredentialDefinitionController } from './../controllers/anoncreds/cred-def/CredentialDefinitionController'; +import { HolderController } from './../controllers/openid4vc/holder/holder.Controller'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { AgentController } from './../controllers/agent/AgentController'; +import { MultiTenancyController } from './../controllers/multi-tenancy/MultiTenancyController'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa import { QuestionAnswerController } from './../controllers/didcomm/question-answer/QuestionAnswerController'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { ProofController } from './../controllers/didcomm/proofs/ProofController'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa import { OutOfBandController } from './../controllers/didcomm/outofband/OutOfBandController'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { CredentialController } from './../controllers/didcomm/credentials/CredentialController'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa import { ConnectionController } from './../controllers/didcomm/connections/ConnectionController'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { BasicMessageController } from './../controllers/didcomm/basic-messages/BasicMessageController'; +import { DidController } from './../controllers/did/DidController'; // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { MultiTenancyController } from './../controllers/multi-tenancy/MultiTenancyController'; +import { AuthController } from './../controllers/auth/AuthController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { AgentController } from './../controllers/agent/AgentController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { SchemaController } from './../controllers/anoncreds/schema/SchemaController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { CredentialDefinitionController } from './../controllers/anoncreds/cred-def/CredentialDefinitionController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { CredentialController } from './../controllers/didcomm/credentials/CredentialController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { ProofController } from './../controllers/didcomm/proofs/ProofController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { VerifierController } from './../controllers/openid4vc/verifiers/verifier.Controller'; import { expressAuthentication } from './../authentication'; // @ts-ignore - no great way to install types from subpackage import { iocContainer } from './../utils/tsyringeTsoaIocContainer'; @@ -41,6 +51,187 @@ const expressAuthenticationRecasted = expressAuthentication as (req: ExRequest, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa const models: TsoaRoute.Models = { + "Curve": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["Ed25519"]},{"dataType":"enum","enums":["X25519"]},{"dataType":"enum","enums":["P-256"]},{"dataType":"enum","enums":["P-384"]},{"dataType":"enum","enums":["P-521"]},{"dataType":"enum","enums":["secp256k1"]}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AuthorityAndSubjectKeyDto": { + "dataType": "refObject", + "properties": { + "seed": {"dataType":"string"}, + "publicKeyBase58": {"dataType":"string"}, + "keyType": {"ref":"Curve"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "X509CertificateIssuerAndSubjectOptionsDto": { + "dataType": "refObject", + "properties": { + "countryName": {"dataType":"string"}, + "stateOrProvinceName": {"dataType":"string"}, + "organizationalUnit": {"dataType":"string"}, + "commonName": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ValidityDto": { + "dataType": "refObject", + "properties": { + "notBefore": {"dataType":"datetime"}, + "notAfter": {"dataType":"datetime"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "X509KeyUsage": { + "dataType": "refEnum", + "enums": [1,2,4,8,16,32,64,128,256], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "KeyUsageDto": { + "dataType": "refObject", + "properties": { + "usages": {"dataType":"array","array":{"dataType":"refEnum","ref":"X509KeyUsage"},"required":true}, + "markAsCritical": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "X509ExtendedKeyUsage": { + "dataType": "refEnum", + "enums": ["1.3.6.1.5.5.7.3.1","1.3.6.1.5.5.7.3.2","1.3.6.1.5.5.7.3.3","1.3.6.1.5.5.7.3.4","1.3.6.1.5.5.7.3.8","1.3.6.1.5.5.7.3.9","1.0.18013.5.1.2"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ExtendedKeyUsageDto": { + "dataType": "refObject", + "properties": { + "usages": {"dataType":"array","array":{"dataType":"refEnum","ref":"X509ExtendedKeyUsage"},"required":true}, + "markAsCritical": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AuthorityAndSubjectKeyIdentifierDto": { + "dataType": "refObject", + "properties": { + "include": {"dataType":"boolean","required":true}, + "markAsCritical": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "GeneralNameType": { + "dataType": "refEnum", + "enums": ["dns","dn","email","guid","ip","url","upn","id"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "NameDto": { + "dataType": "refObject", + "properties": { + "type": {"ref":"GeneralNameType","required":true}, + "value": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "NameListDto": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"array","array":{"dataType":"refObject","ref":"NameDto"},"required":true}, + "markAsCritical": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "BasicConstraintsDto": { + "dataType": "refObject", + "properties": { + "ca": {"dataType":"boolean","required":true}, + "pathLenConstraint": {"dataType":"double"}, + "markAsCritical": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CrlDistributionPointsDto": { + "dataType": "refObject", + "properties": { + "urls": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "markAsCritical": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "X509CertificateExtensionsOptionsDto": { + "dataType": "refObject", + "properties": { + "keyUsage": {"ref":"KeyUsageDto"}, + "extendedKeyUsage": {"ref":"ExtendedKeyUsageDto"}, + "authorityKeyIdentifier": {"ref":"AuthorityAndSubjectKeyIdentifierDto"}, + "subjectKeyIdentifier": {"ref":"AuthorityAndSubjectKeyIdentifierDto"}, + "issuerAlternativeName": {"ref":"NameListDto"}, + "subjectAlternativeName": {"ref":"NameListDto"}, + "basicConstraints": {"ref":"BasicConstraintsDto"}, + "crlDistributionPoints": {"ref":"CrlDistributionPointsDto"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "X509CreateCertificateOptionsDto": { + "dataType": "refObject", + "properties": { + "authorityKey": {"ref":"AuthorityAndSubjectKeyDto"}, + "subjectPublicKey": {"ref":"AuthorityAndSubjectKeyDto"}, + "serialNumber": {"dataType":"string"}, + "issuer": {"dataType":"union","subSchemas":[{"ref":"X509CertificateIssuerAndSubjectOptionsDto"},{"dataType":"string"}],"required":true}, + "subject": {"dataType":"union","subSchemas":[{"ref":"X509CertificateIssuerAndSubjectOptionsDto"},{"dataType":"string"}]}, + "validity": {"ref":"ValidityDto"}, + "extensions": {"ref":"X509CertificateExtensionsOptionsDto"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "X509ImportCertificateOptionsDto": { + "dataType": "refObject", + "properties": { + "certificate": {"dataType":"string","required":true}, + "privateKey": {"dataType":"string"}, + "keyType": {"dataType":"any","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "PublicJwk": { + "dataType": "refObject", + "properties": { + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Uint8Array": { + "dataType": "refObject", + "properties": { + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnyUint8Array": { + "dataType": "refAlias", + "type": {"ref":"Uint8Array","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "X509Certificate": { + "dataType": "refObject", + "properties": { + "publicJwk": {"ref":"PublicJwk","required":true}, + "privateKey": {"ref":"AnyUint8Array"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa "Record_string.unknown_": { "dataType": "refAlias", "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"dataType":"any"},"validators":{}}, @@ -101,377 +292,566 @@ const models: TsoaRoute.Models = { "type": {"dataType":"union","subSchemas":[{"ref":"CreateDidOperationOptions"},{"ref":"UpdateDidOperationOptions"},{"ref":"DeactivateDidOperationOptions"},{"ref":"AddResourceDidOperationOptions"}],"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "EndorserTransaction": { + "JwtObject": { "dataType": "refObject", "properties": { - "transaction": {"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"Record_string.unknown_"}],"required":true}, - "endorserDid": {"dataType":"string","required":true}, + "alg": {"dataType":"array","array":{"dataType":"string"},"required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidRegistrationSecretOptions": { - "dataType": "refAlias", - "type": {"ref":"Record_string.unknown_","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidOperationStateWait": { + "LdpObject": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["wait"],"required":true}, - "did": {"dataType":"string"}, - "secret": {"ref":"DidRegistrationSecretOptions"}, - "didDocument": {"ref":"DidDocument"}, + "proof_type": {"dataType":"array","array":{"dataType":"string"},"required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidOperationStateActionBase": { + "DiObject": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["action"],"required":true}, - "action": {"dataType":"string","required":true}, - "did": {"dataType":"string"}, - "secret": {"ref":"DidRegistrationSecretOptions"}, - "didDocument": {"ref":"DidDocument"}, + "proof_type": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "cryptosuite": {"dataType":"array","array":{"dataType":"string"},"required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidOperationStateFinished": { + "SdJwtObject": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["finished"],"required":true}, - "did": {"dataType":"string","required":true}, - "secret": {"ref":"DidRegistrationSecretOptions"}, - "didDocument": {"ref":"DidDocument","required":true}, + "undefined": {"dataType":"array","array":{"dataType":"string"}}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidOperationStateFailed": { + "MsoMdocObject": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["failed"],"required":true}, - "did": {"dataType":"string"}, - "secret": {"ref":"DidRegistrationSecretOptions"}, - "didDocument": {"ref":"DidDocument"}, - "reason": {"dataType":"string","required":true}, + "alg": {"dataType":"array","array":{"dataType":"string"},"required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidRegistrationMetadata": { - "dataType": "refAlias", - "type": {"ref":"Record_string.unknown_","validators":{}}, + "Format": { + "dataType": "refObject", + "properties": { + "jwt": {"ref":"JwtObject"}, + "jwt_vc": {"ref":"JwtObject"}, + "jwt_vc_json": {"ref":"JwtObject"}, + "jwt_vp": {"ref":"JwtObject"}, + "jwt_vp_json": {"ref":"JwtObject"}, + "ldp": {"ref":"LdpObject"}, + "ldp_vc": {"ref":"LdpObject"}, + "ldp_vp": {"ref":"LdpObject"}, + "di": {"ref":"DiObject"}, + "di_vc": {"ref":"DiObject"}, + "di_vp": {"ref":"DiObject"}, + "undefined": {"ref":"SdJwtObject"}, + "mso_mdoc": {"ref":"MsoMdocObject"}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidResolutionMetadata": { + "Issuance": { "dataType": "refObject", "properties": { - "contentType": {"dataType":"string"}, - "error": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["invalidDid"]},{"dataType":"enum","enums":["notFound"]},{"dataType":"enum","enums":["representationNotSupported"]},{"dataType":"enum","enums":["unsupportedDidMethod"]},{"dataType":"string"}]}, - "message": {"dataType":"string"}, - "servedFromCache": {"dataType":"boolean"}, - "servedFromDidRecord": {"dataType":"boolean"}, + "manifest": {"dataType":"string"}, }, - "additionalProperties": false, + "additionalProperties": {"dataType":"union","subSchemas":[{"dataType":"any"},{"dataType":"any"}]}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Optionality": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["required"]},{"dataType":"enum","enums":["preferred"]}],"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidCreateResult_DidOperationStateActionBase_": { + "Directives": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["required"]},{"dataType":"enum","enums":["allowed"]},{"dataType":"enum","enums":["disallowed"]}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "PdStatus": { "dataType": "refObject", "properties": { - "jobId": {"dataType":"string"}, - "didState": {"dataType":"union","subSchemas":[{"ref":"DidOperationStateWait"},{"ref":"DidOperationStateActionBase"},{"ref":"DidOperationStateFinished"},{"ref":"DidOperationStateFailed"}],"required":true}, - "didRegistrationMetadata": {"ref":"DidRegistrationMetadata","required":true}, - "didDocumentMetadata": {"ref":"DidResolutionMetadata","required":true}, + "directive": {"ref":"Directives"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidNymTransaction": { + "Statuses": { "dataType": "refObject", "properties": { - "did": {"dataType":"string","required":true}, - "nymRequest": {"dataType":"string","required":true}, + "active": {"ref":"PdStatus"}, + "suspended": {"ref":"PdStatus"}, + "revoked": {"ref":"PdStatus"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AnonCredsSchema": { + "OneOfNumberStringBoolean": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"boolean"},{"dataType":"double"},{"dataType":"string"}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OneOfNumberString": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"double"},{"dataType":"string"}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "FilterV2": { "dataType": "refObject", "properties": { - "issuerId": {"dataType":"string","required":true}, - "name": {"dataType":"string","required":true}, - "version": {"dataType":"string","required":true}, - "attrNames": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "const": {"ref":"OneOfNumberStringBoolean"}, + "enum": {"dataType":"array","array":{"dataType":"refAlias","ref":"OneOfNumberStringBoolean"}}, + "exclusiveMinimum": {"ref":"OneOfNumberString"}, + "exclusiveMaximum": {"ref":"OneOfNumberString"}, + "format": {"dataType":"string"}, + "formatMaximum": {"dataType":"string"}, + "formatMinimum": {"dataType":"string"}, + "formatExclusiveMaximum": {"dataType":"string"}, + "formatExclusiveMinimum": {"dataType":"string"}, + "minLength": {"dataType":"double"}, + "maxLength": {"dataType":"double"}, + "minimum": {"ref":"OneOfNumberString"}, + "maximum": {"ref":"OneOfNumberString"}, + "not": {"dataType":"object"}, + "pattern": {"dataType":"string"}, + "type": {"dataType":"string"}, + "contains": {"ref":"FilterV2"}, + "items": {"ref":"FilterV2Items"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RegisterSchemaReturnStateWait": { + "FilterV2Items": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["wait"],"required":true}, - "schema": {"ref":"AnonCredsSchema"}, - "schemaId": {"dataType":"string"}, + "const": {"ref":"OneOfNumberStringBoolean"}, + "enum": {"dataType":"array","array":{"dataType":"refAlias","ref":"OneOfNumberStringBoolean"}}, + "exclusiveMinimum": {"ref":"OneOfNumberString"}, + "exclusiveMaximum": {"ref":"OneOfNumberString"}, + "format": {"dataType":"string"}, + "formatMaximum": {"dataType":"string"}, + "formatMinimum": {"dataType":"string"}, + "formatExclusiveMaximum": {"dataType":"string"}, + "formatExclusiveMinimum": {"dataType":"string"}, + "minLength": {"dataType":"double"}, + "maxLength": {"dataType":"double"}, + "minimum": {"ref":"OneOfNumberString"}, + "maximum": {"ref":"OneOfNumberString"}, + "not": {"dataType":"object"}, + "pattern": {"dataType":"string"}, + "type": {"dataType":"string"}, + "contains": {"ref":"FilterV2"}, + "items": {"ref":"FilterV2Items"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RegisterSchemaReturnStateAction": { + "FieldV2": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["action"],"required":true}, - "action": {"dataType":"string","required":true}, - "schema": {"ref":"AnonCredsSchema","required":true}, - "schemaId": {"dataType":"string","required":true}, + "id": {"dataType":"string"}, + "path": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "purpose": {"dataType":"string"}, + "filter": {"ref":"FilterV2"}, + "predicate": {"ref":"Optionality"}, + "intent_to_retain": {"dataType":"boolean"}, + "name": {"dataType":"string"}, + "optional": {"dataType":"boolean"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RegisterSchemaReturnStateFinished": { + "HolderSubject": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["finished"],"required":true}, - "schema": {"ref":"AnonCredsSchema","required":true}, - "schemaId": {"dataType":"string","required":true}, + "field_id": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "directive": {"ref":"Optionality","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RegisterSchemaReturnStateFailed": { + "ConstraintsV2": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["failed"],"required":true}, - "reason": {"dataType":"string","required":true}, - "schema": {"ref":"AnonCredsSchema"}, - "schemaId": {"dataType":"string"}, + "limit_disclosure": {"ref":"Optionality"}, + "statuses": {"ref":"Statuses"}, + "fields": {"dataType":"array","array":{"dataType":"refObject","ref":"FieldV2"}}, + "subject_is_issuer": {"ref":"Optionality"}, + "is_holder": {"dataType":"array","array":{"dataType":"refObject","ref":"HolderSubject"}}, + "same_subject": {"dataType":"array","array":{"dataType":"refObject","ref":"HolderSubject"}}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AnonCredsCredentialDefinition": { + "InputDescriptorV2Model": { "dataType": "refObject", "properties": { - "issuerId": {"dataType":"string","required":true}, - "schemaId": {"dataType":"string","required":true}, - "type": {"dataType":"enum","enums":["CL"],"required":true}, - "tag": {"dataType":"string","required":true}, - "value": {"dataType":"nestedObjectLiteral","nestedProperties":{"revocation":{"dataType":"any"},"primary":{"ref":"Record_string.unknown_","required":true}},"required":true}, + "id": {"dataType":"string","required":true}, + "name": {"dataType":"string"}, + "purpose": {"dataType":"string"}, + "format": {"ref":"Format"}, + "group": {"dataType":"array","array":{"dataType":"string"}}, + "issuance": {"dataType":"array","array":{"dataType":"refObject","ref":"Issuance"}}, + "constraints": {"ref":"ConstraintsV2","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RegisterCredentialDefinitionReturnStateWait": { + "Rules": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["all"]},{"dataType":"enum","enums":["pick"]}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "SubmissionRequirement": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["wait"],"required":true}, - "credentialDefinition": {"ref":"AnonCredsCredentialDefinition"}, - "credentialDefinitionId": {"dataType":"string"}, + "name": {"dataType":"string"}, + "purpose": {"dataType":"string"}, + "rule": {"ref":"Rules","required":true}, + "count": {"dataType":"double"}, + "min": {"dataType":"double"}, + "max": {"dataType":"double"}, + "from": {"dataType":"string"}, + "from_nested": {"dataType":"array","array":{"dataType":"refObject","ref":"SubmissionRequirement"}}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RegisterCredentialDefinitionReturnStateAction": { + "InputDescriptorV2": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["action"],"required":true}, - "action": {"dataType":"string","required":true}, - "credentialDefinitionId": {"dataType":"string","required":true}, - "credentialDefinition": {"ref":"AnonCredsCredentialDefinition","required":true}, + "id": {"dataType":"string","required":true}, + "name": {"dataType":"string"}, + "purpose": {"dataType":"string"}, + "format": {"ref":"Format"}, + "group": {"dataType":"array","array":{"dataType":"string"}}, + "issuance": {"dataType":"array","array":{"dataType":"refObject","ref":"Issuance"}}, + "constraints": {"ref":"ConstraintsV2","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RegisterCredentialDefinitionReturnStateFinished": { + "PresentationDefinitionV2": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["finished"],"required":true}, - "credentialDefinition": {"ref":"AnonCredsCredentialDefinition","required":true}, - "credentialDefinitionId": {"dataType":"string","required":true}, + "id": {"dataType":"string","required":true}, + "name": {"dataType":"string"}, + "purpose": {"dataType":"string"}, + "format": {"ref":"Format"}, + "submission_requirements": {"dataType":"array","array":{"dataType":"refObject","ref":"SubmissionRequirement"}}, + "input_descriptors": {"dataType":"array","array":{"dataType":"refObject","ref":"InputDescriptorV2"},"required":true}, + "frame": {"dataType":"object"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RegisterCredentialDefinitionReturnStateFailed": { + "DifPresentationExchangeDefinitionV2Model": { "dataType": "refObject", "properties": { - "state": {"dataType":"enum","enums":["failed"],"required":true}, - "reason": {"dataType":"string","required":true}, - "credentialDefinition": {"ref":"AnonCredsCredentialDefinition"}, - "credentialDefinitionId": {"dataType":"string"}, + "id": {"dataType":"string","required":true}, + "name": {"dataType":"string"}, + "purpose": {"dataType":"string"}, + "format": {"ref":"Format"}, + "submission_requirements": {"dataType":"array","array":{"dataType":"any"}}, + "input_descriptors": {"dataType":"array","array":{"dataType":"refObject","ref":"InputDescriptorV2Model"},"required":true}, + "frame": {"dataType":"object"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "WriteTransaction": { + "PresentationDefinition": { "dataType": "refObject", "properties": { - "endorsedTransaction": {"dataType":"string","required":true}, - "endorserDid": {"dataType":"string"}, - "schema": {"dataType":"nestedObjectLiteral","nestedProperties":{"attributes":{"dataType":"array","array":{"dataType":"string"},"required":true},"version":{"dataType":"string","required":true},"name":{"dataType":"string","required":true},"issuerId":{"dataType":"string","required":true}}}, - "credentialDefinition": {"dataType":"nestedObjectLiteral","nestedProperties":{"type":{"dataType":"string","required":true},"value":{"dataType":"any","required":true},"tag":{"dataType":"string","required":true},"issuerId":{"dataType":"string","required":true},"schemaId":{"dataType":"string","required":true}}}, + "definition": {"ref":"DifPresentationExchangeDefinitionV2Model","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DIDDocumentMetadata": { + "DcqlDefinition": { "dataType": "refObject", "properties": { - "created": {"dataType":"string"}, - "updated": {"dataType":"string"}, - "deactivated": {"dataType":"boolean"}, - "versionId": {"dataType":"string"}, - "nextUpdate": {"dataType":"string"}, - "nextVersionId": {"dataType":"string"}, - "equivalentId": {"dataType":"string"}, - "canonicalId": {"dataType":"string"}, + "query": {"dataType":"any","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Did": { + "ResponseModeEnum": { + "dataType": "refEnum", + "enums": ["direct_post","direct_post.jwt","dc_api","dc_api.jwt"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OpenId4VcJwtIssuerDid": { "dataType": "refAlias", - "type": {"dataType":"string","validators":{}}, + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"didUrl":{"dataType":"string","required":true},"method":{"dataType":"enum","enums":["did"],"required":true}},"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "KeyType": { + "OpenId4VcIssuerX5c": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"keyId":{"dataType":"string"},"alg":{"dataType":"string"},"x5c":{"dataType":"array","array":{"dataType":"string"},"required":true},"issuer":{"dataType":"string"},"method":{"dataType":"enum","enums":["x5c"],"required":true}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ClientIdPrefix": { "dataType": "refEnum", - "enums": ["ed25519","bls12381g1g2","bls12381g1","bls12381g2","x25519","p256","p384","p521","k256"], + "enums": ["x509_san_dns","x509_hash"], }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidCreate": { + "OpenId4VcIssuerX5cOptions": { + "dataType": "refAlias", + "type": {"dataType":"intersection","subSchemas":[{"ref":"OpenId4VcIssuerX5c"},{"dataType":"nestedObjectLiteral","nestedProperties":{"clientIdPrefix":{"ref":"ClientIdPrefix"}}}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CreateAuthorizationRequest": { "dataType": "refObject", "properties": { - "keyType": {"ref":"KeyType"}, - "seed": {"dataType":"string"}, - "domain": {"dataType":"string"}, - "method": {"dataType":"string","required":true}, - "network": {"dataType":"string"}, - "did": {"dataType":"string"}, - "role": {"dataType":"string"}, - "endorserDid": {"dataType":"string"}, - "didDocument": {"ref":"DidDocument"}, - "privatekey": {"dataType":"string"}, - "endpoint": {"dataType":"string"}, + "verifierId": {"dataType":"string","required":true}, + "presentationExchange": {"ref":"PresentationDefinition"}, + "dcql": {"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"DcqlDefinition"}]}, + "responseMode": {"ref":"ResponseModeEnum"}, + "requestSigner": {"dataType":"union","subSchemas":[{"ref":"OpenId4VcJwtIssuerDid"},{"ref":"OpenId4VcIssuerX5cOptions"}],"required":true}, + "expectedOrigins": {"dataType":"array","array":{"dataType":"string"}}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidRecord": { + "OpenId4VcVerificationSessionRecord": { "dataType": "refAlias", "type": {"ref":"Record_string.unknown_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AnonCredsResolutionMetadata": { + "OpenId4VcVerificationSessionState": { + "dataType": "refEnum", + "enums": ["RequestCreated","RequestUriRetrieved","ResponseVerified","Error"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OpenId4VCDCQLVerificationSessionRecord": { "dataType": "refObject", "properties": { - "error": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["invalid"]},{"dataType":"enum","enums":["notFound"]},{"dataType":"enum","enums":["unsupportedAnonCredsMethod"]},{"dataType":"string"}]}, - "message": {"dataType":"string"}, + "verificationSessionId": {"dataType":"string","required":true}, + "authorizationResponse": {"ref":"Record_string.unknown_","required":true}, + "origin": {"dataType":"string"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredoExtensible": { + "OpenId4VcIssuerRecord": { "dataType": "refAlias", "type": {"ref":"Record_string.unknown_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "GetSchemaReturn": { + "Logo": { "dataType": "refObject", "properties": { - "schema": {"ref":"AnonCredsSchema"}, - "schemaId": {"dataType":"string","required":true}, - "resolutionMetadata": {"ref":"AnonCredsResolutionMetadata","required":true}, - "schemaMetadata": {"ref":"CredoExtensible","required":true}, + "uri": {"dataType":"string"}, + "alt_text": {"dataType":"string"}, + }, + "additionalProperties": {"dataType":"any"}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialDisplay": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string"}, + "locale": {"dataType":"string"}, + "logo": {"ref":"Logo"}, + }, + "additionalProperties": {"dataType":"any"}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AuthorizationServerClientAuth": { + "dataType": "refObject", + "properties": { + "clientId": {"dataType":"string","required":true}, + "clientSecret": {"dataType":"string","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "SchemaId": { - "dataType": "refAlias", - "type": {"dataType":"string","validators":{}}, + "AuthorizationServerConfig": { + "dataType": "refObject", + "properties": { + "issuer": {"dataType":"string","required":true}, + "clientAuthentication": {"ref":"AuthorizationServerClientAuth"}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RegisterSchemaReturn": { + "KeyAttestationRequiredRecords": { "dataType": "refObject", "properties": { - "jobId": {"dataType":"string"}, - "schemaState": {"dataType":"union","subSchemas":[{"ref":"RegisterSchemaReturnStateWait"},{"ref":"RegisterSchemaReturnStateAction"},{"ref":"RegisterSchemaReturnStateFinished"},{"ref":"RegisterSchemaReturnStateFailed"}],"required":true}, - "schemaMetadata": {"ref":"CredoExtensible","required":true}, - "registrationMetadata": {"ref":"CredoExtensible","required":true}, + "key_storage": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "user_authentication": {"dataType":"array","array":{"dataType":"string"},"required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CreateSchemaInput": { + "ProofTypeConfig": { + "dataType": "refObject", + "properties": { + "proof_signing_alg_values_supported": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "key_attestations_required": {"ref":"KeyAttestationRequiredRecords"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.ProofTypeConfig_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"ProofTypeConfig"},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialDefinition": { + "dataType": "refObject", + "properties": { + "type": {"dataType":"array","array":{"dataType":"string"},"required":true}, + }, + "additionalProperties": {"dataType":"any"}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ClaimDisplay": { "dataType": "refObject", "properties": { - "issuerId": {"dataType":"string","required":true}, "name": {"dataType":"string","required":true}, - "version": {"dataType":"string","required":true}, - "attributes": {"dataType":"array","array":{"dataType":"string"},"required":true}, - "endorse": {"dataType":"boolean"}, - "endorserDid": {"dataType":"string"}, + "locale": {"dataType":"string","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "GetCredentialDefinitionReturn": { + "Claim": { "dataType": "refObject", "properties": { - "credentialDefinition": {"ref":"AnonCredsCredentialDefinition"}, - "credentialDefinitionId": {"dataType":"string","required":true}, - "resolutionMetadata": {"ref":"AnonCredsResolutionMetadata","required":true}, - "credentialDefinitionMetadata": {"ref":"CredoExtensible","required":true}, + "path": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "display": {"dataType":"array","array":{"dataType":"refObject","ref":"ClaimDisplay"}}, + "mandatory": {"dataType":"boolean"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialDefinitionId": { + "CredentialMetadata": { + "dataType": "refObject", + "properties": { + "display": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialDisplay"},"required":true}, + "claims": {"dataType":"array","array":{"dataType":"refObject","ref":"Claim"},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialConfigurationSupportedWithFormats": { + "dataType": "refObject", + "properties": { + "format": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["vc+sd-jwt"]},{"dataType":"enum","enums":["mso_mdoc"]},{"dataType":"enum","enums":["jwt_vc_json"]},{"dataType":"string"}],"required":true}, + "vct": {"dataType":"string"}, + "doctype": {"dataType":"string"}, + "scope": {"dataType":"string"}, + "cryptographic_binding_methods_supported": {"dataType":"array","array":{"dataType":"string"}}, + "credential_signing_alg_values_supported": {"dataType":"union","subSchemas":[{"dataType":"array","array":{"dataType":"string"}},{"dataType":"array","array":{"dataType":"double"}}]}, + "proof_types_supported": {"ref":"Record_string.ProofTypeConfig_"}, + "credential_definition": {"ref":"CredentialDefinition"}, + "credential_metadata": {"ref":"CredentialMetadata"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.CredentialConfigurationSupportedWithFormats_": { "dataType": "refAlias", - "type": {"dataType":"string","validators":{}}, + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"CredentialConfigurationSupportedWithFormats"},"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RegisterCredentialDefinitionReturn": { + "BatchCredentialIssuanceOptions": { "dataType": "refObject", "properties": { - "jobId": {"dataType":"string"}, - "credentialDefinitionState": {"dataType":"union","subSchemas":[{"ref":"RegisterCredentialDefinitionReturnStateWait"},{"ref":"RegisterCredentialDefinitionReturnStateAction"},{"ref":"RegisterCredentialDefinitionReturnStateFinished"},{"ref":"RegisterCredentialDefinitionReturnStateFailed"}],"required":true}, - "credentialDefinitionMetadata": {"ref":"CredoExtensible","required":true}, - "registrationMetadata": {"ref":"CredoExtensible","required":true}, + "batchSize": {"dataType":"double","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AgentInfo": { + "CreateIssuerOptions": { "dataType": "refObject", "properties": { - "label": {"dataType":"string","required":true}, - "endpoints": {"dataType":"array","array":{"dataType":"string"},"required":true}, - "isInitialized": {"dataType":"boolean","required":true}, - "publicDid": {"dataType":"void","required":true}, + "issuerId": {"dataType":"string"}, + "accessTokenSignerKeyType": {"dataType":"any"}, + "display": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialDisplay"}}, + "authorizationServerConfigs": {"dataType":"array","array":{"dataType":"refObject","ref":"AuthorizationServerConfig"}}, + "dpopSigningAlgValuesSupported": {"dataType":"array","array":{"dataType":"string"}}, + "credentialConfigurationsSupported": {"ref":"Record_string.CredentialConfigurationSupportedWithFormats_","required":true}, + "batchCredentialIssuance": {"ref":"BatchCredentialIssuanceOptions"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AgentToken": { + "UpdateIssuerRecordOptions": { "dataType": "refObject", "properties": { - "token": {"dataType":"string","required":true}, + "display": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialDisplay"}}, + "dpopSigningAlgValuesSupported": {"dataType":"array","array":{"dataType":"string"}}, + "credentialConfigurationsSupported": {"ref":"Record_string.CredentialConfigurationSupportedWithFormats_","required":true}, + "batchCredentialIssuance": {"ref":"BatchCredentialIssuanceOptions"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "VerifyDataOptions": { + "OpenId4VcIssuanceSessionRecord": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"signature":{"dataType":"string","required":true},"publicKeyBase58":{"dataType":"string","required":true},"keyType":{"ref":"KeyType","required":true},"data":{"dataType":"string","required":true}},"validators":{}}, + "type": {"ref":"Record_string.unknown_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "W3cCredentialRecord": { + "DisclosureFrameForOffer": { + "dataType": "refObject", + "properties": { + "_sd": {"dataType":"array","array":{"dataType":"string"}}, + }, + "additionalProperties": {"dataType":"union","subSchemas":[{"ref":"DisclosureFrameForOffer"},{"dataType":"array","array":{"dataType":"refObject","ref":"DisclosureFrameForOffer"}},{"dataType":"array","array":{"dataType":"string"}},{"dataType":"undefined"}]}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OpenId4VciCredentialFormatProfile": { + "dataType": "refEnum", + "enums": ["jwt_vc_json","jwt_vc_json-ld","ldp_vc","vc+sd-jwt","dc+sd-jwt","mso_mdoc"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "SignerMethod": { + "dataType": "refEnum", + "enums": ["did","x5c"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OpenId4VciOfferSdJwtCredential": { + "dataType": "refObject", + "properties": { + "credentialSupportedId": {"dataType":"string","required":true}, + "format": {"ref":"OpenId4VciCredentialFormatProfile","required":true}, + "signerOptions": {"dataType":"nestedObjectLiteral","nestedProperties":{"keyId":{"dataType":"string"},"x5c":{"dataType":"array","array":{"dataType":"string"}},"did":{"dataType":"string"},"method":{"ref":"SignerMethod","required":true}},"required":true}, + "statusListDetails": {"dataType":"nestedObjectLiteral","nestedProperties":{"listSize":{"dataType":"double"},"index":{"dataType":"double","required":true},"listId":{"dataType":"string","required":true}}}, + "payload": {"dataType":"nestedObjectLiteral","nestedProperties":{"vct":{"dataType":"string"}},"additionalProperties":{"dataType":"any"},"required":true}, + "disclosureFrame": {"ref":"DisclosureFrameForOffer"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Partial_ValidityInfo_": { "dataType": "refAlias", - "type": {"ref":"Record_string.unknown_","validators":{}}, + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"signed":{"dataType":"datetime"},"validFrom":{"dataType":"datetime"},"validUntil":{"dataType":"datetime"},"expectedUpdate":{"dataType":"datetime"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.Record_string.unknown__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"Record_string.unknown_"},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "MdocNameSpaces": { + "dataType": "refAlias", + "type": {"ref":"Record_string.Record_string.unknown__","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OpenId4VciOfferMdocCredential": { + "dataType": "refObject", + "properties": { + "credentialSupportedId": {"dataType":"string","required":true}, + "format": {"ref":"OpenId4VciCredentialFormatProfile","required":true}, + "signerOptions": {"dataType":"nestedObjectLiteral","nestedProperties":{"keyId":{"dataType":"string"},"x5c":{"dataType":"array","array":{"dataType":"string"}},"did":{"dataType":"string"},"method":{"ref":"SignerMethod","required":true}},"required":true}, + "statusListDetails": {"dataType":"nestedObjectLiteral","nestedProperties":{"listSize":{"dataType":"double"},"index":{"dataType":"double","required":true},"listId":{"dataType":"string","required":true}}}, + "payload": {"dataType":"nestedObjectLiteral","nestedProperties":{"namespaces":{"ref":"MdocNameSpaces","required":true},"validityInfo":{"ref":"Partial_ValidityInfo_"},"docType":{"dataType":"union","subSchemas":[{"dataType":"enum","enums":["org.iso.18013.5.1.mDL"]},{"dataType":"intersection","subSchemas":[{"dataType":"string"},{"dataType":"nestedObjectLiteral","nestedProperties":{}}]}],"required":true}},"required":true}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa "JsonObject": { @@ -552,157 +932,150 @@ const models: TsoaRoute.Models = { "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_W3cJsonLdSignCredentialOptions.Exclude_keyofW3cJsonLdSignCredentialOptions.format__": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"credential":{"ref":"W3cCredential","required":true},"proofType":{"dataType":"string","required":true},"proofPurpose":{"dataType":"any"},"created":{"dataType":"string"},"verificationMethod":{"dataType":"string","required":true}},"validators":{}}, + "OpenId4VciOfferW3cCredential": { + "dataType": "refObject", + "properties": { + "credentialSupportedId": {"dataType":"string","required":true}, + "format": {"ref":"OpenId4VciCredentialFormatProfile","required":true}, + "signerOptions": {"dataType":"nestedObjectLiteral","nestedProperties":{"keyId":{"dataType":"string"},"x5c":{"dataType":"array","array":{"dataType":"string"}},"did":{"dataType":"string"},"method":{"ref":"SignerMethod","required":true}},"required":true}, + "statusListDetails": {"dataType":"nestedObjectLiteral","nestedProperties":{"listSize":{"dataType":"double"},"index":{"dataType":"double","required":true},"listId":{"dataType":"string","required":true}}}, + "payload": {"dataType":"nestedObjectLiteral","nestedProperties":{"credential":{"ref":"W3cCredential","required":true},"verificationMethod":{"dataType":"string","required":true}},"required":true}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Omit_W3cJsonLdSignCredentialOptions.format_": { - "dataType": "refAlias", - "type": {"ref":"Pick_W3cJsonLdSignCredentialOptions.Exclude_keyofW3cJsonLdSignCredentialOptions.format__","validators":{}}, + "OpenId4VcIssuanceSessionsCreateOffer": { + "dataType": "refObject", + "properties": { + "publicIssuerId": {"dataType":"string","required":true}, + "credentials": {"dataType":"array","array":{"dataType":"union","subSchemas":[{"ref":"OpenId4VciOfferSdJwtCredential"},{"ref":"OpenId4VciOfferMdocCredential"},{"ref":"OpenId4VciOfferW3cCredential"}]},"required":true}, + "authorizationCodeFlowConfig": {"dataType":"nestedObjectLiteral","nestedProperties":{"issuerState":{"dataType":"string"},"requirePresentationDuringIssuance":{"dataType":"boolean"},"authorizationServerUrl":{"dataType":"string","required":true}}}, + "preAuthorizedCodeFlowConfig": {"dataType":"nestedObjectLiteral","nestedProperties":{"authorizationServerUrl":{"dataType":"string"},"txCode":{"dataType":"nestedObjectLiteral","nestedProperties":{"input_mode":{"dataType":"union","subSchemas":[{"dataType":"enum","enums":["numeric"]},{"dataType":"enum","enums":["text"]}]},"length":{"dataType":"double"},"description":{"dataType":"string"}}}}}, + "issuanceMetadata": {"ref":"Record_string.unknown_"}, + "statusListDetails": {"dataType":"nestedObjectLiteral","nestedProperties":{"listSize":{"dataType":"double"},"index":{"dataType":"double","required":true},"listId":{"dataType":"string","required":true}}}, + "isRevocable": {"dataType":"boolean"}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CustomW3cJsonLdSignCredentialOptions": { - "dataType": "refAlias", - "type": {"dataType":"intersection","subSchemas":[{"ref":"Omit_W3cJsonLdSignCredentialOptions.format_"},{"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"dataType":"any"}}],"validators":{}}, + "OpenId4VcIssuanceSessionState": { + "dataType": "refEnum", + "enums": ["OfferCreated","OfferUriRetrieved","AuthorizationInitiated","AuthorizationGranted","AccessTokenRequested","AccessTokenCreated","CredentialRequestReceived","CredentialsPartiallyIssued","Completed","Error"], }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "SignDataOptions": { + "SdJwtVcRecord": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"method":{"dataType":"string"},"did":{"dataType":"string"},"publicKeyBase58":{"dataType":"string","required":true},"keyType":{"ref":"KeyType","required":true},"data":{"dataType":"string","required":true}},"validators":{}}, + "type": {"ref":"Record_string.unknown_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Partial_W3cCredentialValidations_": { + "MdocRecord": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + "type": {"ref":"Record_string.unknown_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Error": { + "ResolveCredentialOfferBody": { "dataType": "refObject", "properties": { - "name": {"dataType":"string","required":true}, - "message": {"dataType":"string","required":true}, - "stack": {"dataType":"string"}, + "credentialOfferUri": {"dataType":"string","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "W3cVerifyResult_W3cCredentialValidations_": { + "AuthorizeRequestCredentialOffer": { "dataType": "refObject", "properties": { - "isValid": {"dataType":"boolean","required":true}, - "validations": {"ref":"Partial_W3cCredentialValidations_","required":true}, - "error": {"ref":"Error"}, + "credentialOfferUri": {"dataType":"string","required":true}, + "credentialsToRequest": {"dataType":"array","array":{"dataType":"string"},"required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "W3cVerifyCredentialResult": { - "dataType": "refAlias", - "type": {"ref":"W3cVerifyResult_W3cCredentialValidations_","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_LinkedDataProofOptions.Exclude_keyofLinkedDataProofOptions.cryptosuite__": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"proofPurpose":{"dataType":"string","required":true},"created":{"dataType":"string","required":true},"verificationMethod":{"dataType":"string","required":true},"type":{"dataType":"string","required":true},"domain":{"dataType":"string"},"challenge":{"dataType":"string"},"jws":{"dataType":"string"},"proofValue":{"dataType":"string"},"nonce":{"dataType":"string"}},"validators":{}}, + "RequestCredentialBody": { + "dataType": "refObject", + "properties": { + "credentialOfferUri": {"dataType":"string","required":true}, + "credentialsToRequest": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "authorizationCode": {"dataType":"string"}, + "codeVerifier": {"dataType":"string"}, + "txCode": {"dataType":"string"}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Omit_LinkedDataProofOptions.cryptosuite_": { + "EncodedX509Certificate": { "dataType": "refAlias", - "type": {"ref":"Pick_LinkedDataProofOptions.Exclude_keyofLinkedDataProofOptions.cryptosuite__","validators":{}}, + "type": {"dataType":"string","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DataIntegrityProofOptions": { + "ResolveOpenId4VpAuthorizationRequestOptions": { "dataType": "refObject", "properties": { - "type": {"dataType":"string","required":true}, - "cryptosuite": {"dataType":"string","required":true}, - "verificationMethod": {"dataType":"string","required":true}, - "proofPurpose": {"dataType":"string","required":true}, - "domain": {"dataType":"string"}, - "challenge": {"dataType":"string"}, - "nonce": {"dataType":"string"}, - "created": {"dataType":"string"}, - "expires": {"dataType":"string"}, - "proofValue": {"dataType":"string"}, - "previousProof": {"dataType":"string"}, + "trustedCertificates": {"dataType":"array","array":{"dataType":"refAlias","ref":"EncodedX509Certificate"}}, + "origin": {"dataType":"string"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "SingleOrArray_Omit_LinkedDataProofOptions.cryptosuite_-or-DataIntegrityProofOptions_": { - "dataType": "refAlias", - "type": {"dataType":"union","subSchemas":[{"dataType":"union","subSchemas":[{"ref":"Omit_LinkedDataProofOptions.cryptosuite_"},{"ref":"DataIntegrityProofOptions"}]},{"dataType":"array","array":{"dataType":"union","subSchemas":[{"ref":"Omit_LinkedDataProofOptions.cryptosuite_"},{"ref":"DataIntegrityProofOptions"}]}}],"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "LinkedDataProof": { + "ResolveProofRequest": { "dataType": "refObject", "properties": { - "type": {"dataType":"string","required":true}, - "proofPurpose": {"dataType":"string","required":true}, - "verificationMethod": {"dataType":"string","required":true}, - "created": {"dataType":"string","required":true}, - "domain": {"dataType":"string"}, - "challenge": {"dataType":"string"}, - "jws": {"dataType":"string"}, - "proofValue": {"dataType":"string"}, - "nonce": {"dataType":"string"}, + "proofRequestUri": {"dataType":"string","required":true}, + "options": {"ref":"ResolveOpenId4VpAuthorizationRequestOptions"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DataIntegrityProof": { + "CredentialType": { + "dataType": "refEnum", + "enums": ["sd-jwt-vc","mso_mdoc"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DeleteCredentialBody": { "dataType": "refObject", "properties": { - "type": {"dataType":"string","required":true}, - "cryptosuite": {"dataType":"string","required":true}, - "proofPurpose": {"dataType":"string","required":true}, - "verificationMethod": {"dataType":"string","required":true}, - "domain": {"dataType":"string"}, - "challenge": {"dataType":"string"}, - "nonce": {"dataType":"string"}, - "created": {"dataType":"string"}, - "expires": {"dataType":"string"}, - "proofValue": {"dataType":"string"}, - "previousProof": {"dataType":"string"}, + "credentialType": {"ref":"CredentialType","required":true}, + "credentialId": {"dataType":"string","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "SingleOrArray_LinkedDataProof-or-DataIntegrityProof_": { + "TenantConfig": { "dataType": "refAlias", - "type": {"dataType":"union","subSchemas":[{"dataType":"union","subSchemas":[{"ref":"LinkedDataProof"},{"ref":"DataIntegrityProof"}]},{"dataType":"array","array":{"dataType":"union","subSchemas":[{"ref":"LinkedDataProof"},{"ref":"DataIntegrityProof"}]}}],"validators":{}}, + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"label":{"dataType":"string","required":true}},"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "W3cJsonLdVerifiableCredential": { + "MetadataValue": { + "dataType": "refAlias", + "type": {"ref":"Record_string.any_","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "MetadataBase": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"MetadataValue"},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Metadata____": { "dataType": "refObject", "properties": { - "context": {"dataType":"array","array":{"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"JsonObject"}]},"required":true}, - "id": {"dataType":"string"}, - "type": {"dataType":"array","array":{"dataType":"string"},"required":true}, - "issuer": {"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"W3cIssuer"}],"required":true}, - "issuanceDate": {"dataType":"string","required":true}, - "expirationDate": {"dataType":"string"}, - "credentialSubject": {"ref":"SingleOrArray_W3cCredentialSubject_","required":true}, - "credentialSchema": {"ref":"SingleOrArray_W3cCredentialSchema_"}, - "credentialStatus": {"ref":"W3cCredentialStatus"}, - "proof": {"ref":"SingleOrArray_LinkedDataProof-or-DataIntegrityProof_","required":true}, + "data": {"ref":"MetadataBase","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProofPurpose": { + "Pick_CustomTenantConfig.Exclude_keyofCustomTenantConfig.walletConfig__": { "dataType": "refAlias", - "type": {"dataType":"any","validators":{}}, + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"label":{"dataType":"string","required":true},"connectionImageUrl":{"dataType":"string"}},"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "SafeW3cJsonLdVerifyCredentialOptions": { + "Omit_CustomTenantConfig.walletConfig_": { + "dataType": "refAlias", + "type": {"ref":"Pick_CustomTenantConfig.Exclude_keyofCustomTenantConfig.walletConfig__","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CreateTenantOptions": { "dataType": "refObject", "properties": { - "credential": {"ref":"W3cJsonLdVerifiableCredential","required":true}, - "verifyCredentialStatus": {"dataType":"boolean"}, - "proofPurpose": {"ref":"ProofPurpose"}, - "proof": {"ref":"SingleOrArray_Omit_LinkedDataProofOptions.cryptosuite_-or-DataIntegrityProofOptions_","required":true}, + "config": {"ref":"Omit_CustomTenantConfig.walletConfig_","required":true}, }, "additionalProperties": false, }, @@ -735,131 +1108,39 @@ const models: TsoaRoute.Models = { "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"response":{"dataType":"string","required":true}},"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProofExchangeRecord": { - "dataType": "refAlias", - "type": {"ref":"Record_string.unknown_","validators":{}}, + "DidCommPlaintextMessage": { + "dataType": "refObject", + "properties": { + "@type": {"dataType":"string","required":true}, + "@id": {"dataType":"string","required":true}, + "~thread": {"dataType":"nestedObjectLiteral","nestedProperties":{"pthid":{"dataType":"string"},"thid":{"dataType":"string"}}}, + }, + "additionalProperties": {"dataType":"any"}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AutoAcceptProof": { + "DidCommHandshakeProtocol": { "dataType": "refEnum", - "enums": ["always","contentApproved","never"], + "enums": ["https://didcomm.org/didexchange/1.x","https://didcomm.org/connections/1.x"], }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RequestProofProposalOptions": { + "DidCommMessage": { + "dataType": "refAlias", + "type": {"ref":"DidCommPlaintextMessage","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "PublicJwk_Ed25519PublicJwk_": { "dataType": "refObject", "properties": { - "connectionId": {"dataType":"string","required":true}, - "proofFormats": {"dataType":"any","required":true}, - "goalCode": {"dataType":"string"}, - "parentThreadId": {"dataType":"string"}, - "autoAcceptProof": {"ref":"AutoAcceptProof"}, - "comment": {"dataType":"string"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AcceptProofProposal": { - "dataType": "refObject", - "properties": { - "proofRecordId": {"dataType":"string","required":true}, - "proofFormats": {"dataType":"any","required":true}, - "comment": {"dataType":"string"}, - "autoAcceptProof": {"ref":"AutoAcceptProof"}, - "goalCode": {"dataType":"string"}, - "willConfirm": {"dataType":"boolean"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RequestProofOptions": { - "dataType": "refObject", - "properties": { - "connectionId": {"dataType":"string","required":true}, - "protocolVersion": {"dataType":"string","required":true}, - "proofFormats": {"dataType":"any","required":true}, - "comment": {"dataType":"string","required":true}, - "autoAcceptProof": {"ref":"AutoAcceptProof","required":true}, - "goalCode": {"dataType":"string"}, - "parentThreadId": {"dataType":"string"}, - "willConfirm": {"dataType":"boolean"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "PlaintextMessage": { - "dataType": "refObject", - "properties": { - "@type": {"dataType":"string","required":true}, - "@id": {"dataType":"string","required":true}, - "~thread": {"dataType":"nestedObjectLiteral","nestedProperties":{"pthid":{"dataType":"string"},"thid":{"dataType":"string"}}}, - "messageType": {"dataType":"string","required":true}, - }, - "additionalProperties": {"dataType":"any"}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CreateProofRequestOobOptions": { - "dataType": "refObject", - "properties": { - "protocolVersion": {"dataType":"string","required":true}, - "proofFormats": {"dataType":"any","required":true}, - "goalCode": {"dataType":"string"}, - "parentThreadId": {"dataType":"string"}, - "willConfirm": {"dataType":"boolean"}, - "autoAcceptProof": {"ref":"AutoAcceptProof"}, - "comment": {"dataType":"string"}, - "label": {"dataType":"string"}, - "imageUrl": {"dataType":"string"}, - "recipientKey": {"dataType":"string"}, - "invitationDid": {"dataType":"string"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.proposal_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.request_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.presentation_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "GetProofFormatDataReturn__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"presentation":{"ref":"ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.presentation_"},"request":{"ref":"ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.request_"},"proposal":{"ref":"ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.proposal_"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "HandshakeProtocol": { - "dataType": "refEnum", - "enums": ["https://didcomm.org/didexchange/1.x","https://didcomm.org/connections/1.x"], - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AgentMessage": { - "dataType": "refAlias", - "type": {"ref":"PlaintextMessage","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Key": { - "dataType": "refObject", - "properties": { - "publicKey": {"dataType":"buffer","required":true}, - "keyType": {"ref":"KeyType","required":true}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Routing": { + "DidCommRouting": { "dataType": "refObject", "properties": { "endpoints": {"dataType":"array","array":{"dataType":"string"},"required":true}, - "recipientKey": {"ref":"Key","required":true}, - "routingKeys": {"dataType":"array","array":{"dataType":"refObject","ref":"Key"},"required":true}, + "recipientKey": {"ref":"PublicJwk_Ed25519PublicJwk_","required":true}, + "routingKeys": {"dataType":"array","array":{"dataType":"refObject","ref":"PublicJwk_Ed25519PublicJwk_"},"required":true}, "mediatorId": {"dataType":"string"}, }, "additionalProperties": false, @@ -888,7 +1169,7 @@ const models: TsoaRoute.Models = { "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AttachmentData": { + "DidCommAttachmentData": { "dataType": "refObject", "properties": { "base64": {"dataType":"string"}, @@ -900,7 +1181,7 @@ const models: TsoaRoute.Models = { "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Attachment": { + "DidCommAttachment": { "dataType": "refObject", "properties": { "id": {"dataType":"string","required":true}, @@ -909,7 +1190,7 @@ const models: TsoaRoute.Models = { "mimeType": {"dataType":"string"}, "lastmodTime": {"dataType":"datetime"}, "byteCount": {"dataType":"double"}, - "data": {"ref":"AttachmentData","required":true}, + "data": {"ref":"DidCommAttachmentData","required":true}, }, "additionalProperties": false, }, @@ -923,12 +1204,12 @@ const models: TsoaRoute.Models = { "goalCode": {"dataType":"string"}, "goal": {"dataType":"string"}, "handshake": {"dataType":"boolean"}, - "handshakeProtocols": {"dataType":"array","array":{"dataType":"refEnum","ref":"HandshakeProtocol"}}, - "messages": {"dataType":"array","array":{"dataType":"refAlias","ref":"AgentMessage"}}, + "handshakeProtocols": {"dataType":"array","array":{"dataType":"refEnum","ref":"DidCommHandshakeProtocol"}}, + "messages": {"dataType":"array","array":{"dataType":"refAlias","ref":"DidCommMessage"}}, "multiUseInvitation": {"dataType":"boolean"}, "autoAcceptConnection": {"dataType":"boolean"}, - "routing": {"ref":"Routing"}, - "appendedAttachments": {"dataType":"array","array":{"dataType":"refObject","ref":"Attachment"}}, + "routing": {"ref":"DidCommRouting"}, + "appendedAttachments": {"dataType":"array","array":{"dataType":"refObject","ref":"DidCommAttachment"}}, "invitationDid": {"dataType":"string"}, }, "additionalProperties": false, @@ -942,30 +1223,11 @@ const models: TsoaRoute.Models = { "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_CreateLegacyInvitationConfig.Exclude_keyofCreateLegacyInvitationConfig.routing__": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"alias":{"dataType":"string"},"label":{"dataType":"string"},"imageUrl":{"dataType":"string"},"multiUseInvitation":{"dataType":"boolean"},"autoAcceptConnection":{"dataType":"boolean"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Omit_CreateLegacyInvitationConfig.routing_": { - "dataType": "refAlias", - "type": {"ref":"Pick_CreateLegacyInvitationConfig.Exclude_keyofCreateLegacyInvitationConfig.routing__","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "OutOfBandRecord": { + "DidCommOutOfBandRecord": { "dataType": "refAlias", "type": {"ref":"Record_string.unknown_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AgentMessageType": { - "dataType": "refObject", - "properties": { - "@id": {"dataType":"string","required":true}, - "@type": {"dataType":"string","required":true}, - }, - "additionalProperties": {"dataType":"any"}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa "CustomHandshakeProtocol": { "dataType": "refEnum", "enums": ["https://didcomm.org/didexchange/1.1","https://didcomm.org/connections/1.0"], @@ -1007,7 +1269,7 @@ const models: TsoaRoute.Models = { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa "Pick_ReceiveOutOfBandInvitationConfig.Exclude_keyofReceiveOutOfBandInvitationConfig.routing__": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"alias":{"dataType":"string"},"label":{"dataType":"string"},"imageUrl":{"dataType":"string"},"autoAcceptConnection":{"dataType":"boolean"},"autoAcceptInvitation":{"dataType":"boolean"},"reuseConnection":{"dataType":"boolean"},"acceptInvitationTimeoutMs":{"dataType":"double"},"ourDid":{"dataType":"string"}},"validators":{}}, + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"alias":{"dataType":"string"},"label":{"dataType":"string","required":true},"imageUrl":{"dataType":"string"},"autoAcceptInvitation":{"dataType":"boolean"},"autoAcceptConnection":{"dataType":"boolean"},"reuseConnection":{"dataType":"boolean"},"acceptInvitationTimeoutMs":{"dataType":"double"},"ourDid":{"dataType":"string"}},"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa "Omit_ReceiveOutOfBandInvitationConfig.routing_": { @@ -1019,10 +1281,10 @@ const models: TsoaRoute.Models = { "dataType": "refObject", "properties": { "alias": {"dataType":"string"}, - "label": {"dataType":"string"}, + "label": {"dataType":"string","required":true}, "imageUrl": {"dataType":"string"}, - "autoAcceptConnection": {"dataType":"boolean"}, "autoAcceptInvitation": {"dataType":"boolean"}, + "autoAcceptConnection": {"dataType":"boolean"}, "reuseConnection": {"dataType":"boolean"}, "acceptInvitationTimeoutMs": {"dataType":"double"}, "ourDid": {"dataType":"string"}, @@ -1035,10 +1297,10 @@ const models: TsoaRoute.Models = { "dataType": "refObject", "properties": { "alias": {"dataType":"string"}, - "label": {"dataType":"string"}, + "label": {"dataType":"string","required":true}, "imageUrl": {"dataType":"string"}, - "autoAcceptConnection": {"dataType":"boolean"}, "autoAcceptInvitation": {"dataType":"boolean"}, + "autoAcceptConnection": {"dataType":"boolean"}, "reuseConnection": {"dataType":"boolean"}, "acceptInvitationTimeoutMs": {"dataType":"double"}, "ourDid": {"dataType":"string"}, @@ -1052,7 +1314,7 @@ const models: TsoaRoute.Models = { "properties": { "autoAcceptConnection": {"dataType":"boolean"}, "reuseConnection": {"dataType":"boolean"}, - "label": {"dataType":"string"}, + "label": {"dataType":"string","required":true}, "alias": {"dataType":"string"}, "imageUrl": {"dataType":"string"}, "mediatorId": {"dataType":"string"}, @@ -1060,431 +1322,1922 @@ const models: TsoaRoute.Models = { "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ThreadId": { - "dataType": "refAlias", - "type": {"dataType":"string","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialState": { - "dataType": "refEnum", - "enums": ["proposal-sent","proposal-received","offer-sent","offer-received","declined","request-sent","request-received","credential-issued","credential-received","done","abandoned"], - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialRole": { + "DidCommDidExchangeState": { "dataType": "refEnum", - "enums": ["issuer","holder"], + "enums": ["start","invitation-sent","invitation-received","request-sent","request-received","response-sent","response-received","abandoned","completed"], }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialExchangeRecord": { + "DidCommConnectionRecord": { "dataType": "refAlias", "type": {"ref":"Record_string.unknown_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProtocolVersion": { - "dataType": "refEnum", - "enums": ["v1","v2"], - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialPreviewAttributeOptions": { + "DidResolutionMetadata": { "dataType": "refObject", "properties": { - "name": {"dataType":"string","required":true}, - "mimeType": {"dataType":"string"}, - "value": {"dataType":"string","required":true}, + "contentType": {"dataType":"string"}, + "error": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["invalidDid"]},{"dataType":"enum","enums":["notFound"]},{"dataType":"enum","enums":["representationNotSupported"]},{"dataType":"enum","enums":["unsupportedDidMethod"]},{"dataType":"string"}]}, + "message": {"dataType":"string"}, + "servedFromCache": {"dataType":"boolean"}, + "servedFromDidRecord": {"dataType":"boolean"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "LinkedAttachment": { + "DIDDocumentMetadata": { "dataType": "refObject", "properties": { - "attributeName": {"dataType":"string","required":true}, - "attachment": {"ref":"Attachment","required":true}, + "created": {"dataType":"string"}, + "updated": {"dataType":"string"}, + "deactivated": {"dataType":"boolean"}, + "versionId": {"dataType":"string"}, + "nextUpdate": {"dataType":"string"}, + "nextVersionId": {"dataType":"string"}, + "equivalentId": {"dataType":"string"}, + "canonicalId": {"dataType":"string"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_AnonCredsProposeCredentialFormat.Exclude_keyofAnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId__": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"schemaId":{"dataType":"string"},"schemaName":{"dataType":"string"},"schemaVersion":{"dataType":"string"},"credentialDefinitionId":{"dataType":"string"},"attributes":{"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"}},"linkedAttachments":{"dataType":"array","array":{"dataType":"refObject","ref":"LinkedAttachment"}},"schemaIssuerDid":{"dataType":"string"},"issuerDid":{"dataType":"string"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Omit_AnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId_": { + "Did": { "dataType": "refAlias", - "type": {"ref":"Pick_AnonCredsProposeCredentialFormat.Exclude_keyofAnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId__","validators":{}}, + "type": {"dataType":"string","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "LegacyIndyProposeCredentialFormat": { - "dataType": "refAlias", - "type": {"ref":"Omit_AnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId_","validators":{}}, + "KeyAlgorithm": { + "dataType": "refEnum", + "enums": ["a128gcm","a256gcm","a128cbchs256","a256cbchs512","a128kw","a256kw","bls12381g1","bls12381g2","c20p","xc20p","ed25519","x25519","k256","p256","p384"], }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "W3cIssuerOptions": { + "DidCreate": { "dataType": "refObject", "properties": { - "id": {"dataType":"string","required":true}, + "keyType": {"ref":"KeyAlgorithm"}, + "seed": {"dataType":"string"}, + "domain": {"dataType":"string"}, + "method": {"dataType":"string","required":true}, + "network": {"dataType":"string"}, + "did": {"dataType":"string"}, + "role": {"dataType":"string"}, + "endorserDid": {"dataType":"string"}, + "didDocument": {"ref":"DidDocument"}, + "privatekey": {"dataType":"string"}, + "endpoint": {"dataType":"string"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "SingleOrArray_JsonObject_": { + "DidRecord": { "dataType": "refAlias", - "type": {"dataType":"union","subSchemas":[{"ref":"JsonObject"},{"dataType":"array","array":{"dataType":"refObject","ref":"JsonObject"}}],"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "JsonCredential": { - "dataType": "refObject", - "properties": { - "@context": {"dataType":"union","subSchemas":[{"dataType":"array","array":{"dataType":"string"}},{"ref":"JsonObject"}],"required":true}, - "id": {"dataType":"string"}, - "type": {"dataType":"array","array":{"dataType":"string"},"required":true}, - "issuer": {"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"W3cIssuerOptions"}],"required":true}, - "issuanceDate": {"dataType":"string","required":true}, - "expirationDate": {"dataType":"string"}, - "credentialSubject": {"ref":"SingleOrArray_JsonObject_","required":true}, - "prettyVc": {"dataType":"any"}, - }, - "additionalProperties": {"dataType":"any"}, + "type": {"ref":"Record_string.unknown_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "JsonLdCredentialDetailFormat": { + "OrgTokenResponse": { "dataType": "refObject", "properties": { - "credential": {"ref":"JsonCredential","required":true}, - "options": {"dataType":"nestedObjectLiteral","nestedProperties":{"proofType":{"dataType":"string","required":true},"proofPurpose":{"dataType":"string","required":true}},"required":true}, + "token": {"dataType":"string","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AnonCredsProposeCredentialFormat": { + "OrgTokenRequest": { "dataType": "refObject", "properties": { - "schemaIssuerId": {"dataType":"string"}, - "schemaId": {"dataType":"string"}, - "schemaName": {"dataType":"string"}, - "schemaVersion": {"dataType":"string"}, - "credentialDefinitionId": {"dataType":"string"}, - "issuerId": {"dataType":"string"}, - "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"}}, - "linkedAttachments": {"dataType":"array","array":{"dataType":"refObject","ref":"LinkedAttachment"}}, - "schemaIssuerDid": {"dataType":"string"}, - "issuerDid": {"dataType":"string"}, + "clientId": {"dataType":"string","required":true}, + "clientSecret": {"dataType":"string","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatPayload_CredentialFormatType-Array.createProposal_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"LegacyIndyProposeCredentialFormat"},"jsonld":{"ref":"JsonLdCredentialDetailFormat"},"anoncreds":{"ref":"AnonCredsProposeCredentialFormat"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AutoAcceptCredential": { - "dataType": "refEnum", - "enums": ["always","contentApproved","never"], - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProposeCredentialOptions": { + "AgentInfo": { "dataType": "refObject", "properties": { - "protocolVersion": {"ref":"ProtocolVersion","required":true}, - "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormatType-Array.createProposal_","required":true}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, - "connectionId": {"ref":"RecordId","required":true}, + "label": {"dataType":"string","required":true}, + "endpoints": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "isInitialized": {"dataType":"boolean","required":true}, + "publicDid": {"dataType":"void","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AnonCredsAcceptProposalFormat": { + "AgentToken": { "dataType": "refObject", "properties": { - "credentialDefinitionId": {"dataType":"string"}, - "revocationRegistryDefinitionId": {"dataType":"string"}, - "revocationRegistryIndex": {"dataType":"double"}, - "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"}}, - "linkedAttachments": {"dataType":"array","array":{"dataType":"refObject","ref":"LinkedAttachment"}}, + "token": {"dataType":"string","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Record_string.never_": { + "Partial_W3cCredentialValidations_": { "dataType": "refAlias", "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "EmptyObject": { - "dataType": "refAlias", - "type": {"ref":"Record_string.never_","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatPayload_CredentialFormats.acceptProposal_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsAcceptProposalFormat"},"jsonld":{"ref":"EmptyObject"},"anoncreds":{"ref":"AnonCredsAcceptProposalFormat"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AcceptCredentialProposalOptions": { + "Error": { "dataType": "refObject", "properties": { - "credentialRecordId": {"dataType":"string","required":true}, - "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormats.acceptProposal_"}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, + "name": {"dataType":"string","required":true}, + "message": {"dataType":"string","required":true}, + "stack": {"dataType":"string"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AnonCredsOfferCredentialFormat": { + "W3cVerifyResult_W3cCredentialValidations_": { "dataType": "refObject", "properties": { - "credentialDefinitionId": {"dataType":"string","required":true}, - "revocationRegistryDefinitionId": {"dataType":"string"}, - "revocationRegistryIndex": {"dataType":"double"}, - "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"},"required":true}, - "linkedAttachments": {"dataType":"array","array":{"dataType":"refObject","ref":"LinkedAttachment"}}, + "isValid": {"dataType":"boolean","required":true}, + "validations": {"ref":"Partial_W3cCredentialValidations_","required":true}, + "error": {"ref":"Error"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatPayload_CredentialFormats.createOffer_": { + "W3cVerifyCredentialResult": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsOfferCredentialFormat"},"jsonld":{"ref":"JsonLdCredentialDetailFormat"},"anoncreds":{"ref":"AnonCredsOfferCredentialFormat"}},"validators":{}}, + "type": {"ref":"W3cVerifyResult_W3cCredentialValidations_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CreateOfferOptions": { + "DataIntegrityProofOptions": { "dataType": "refObject", "properties": { - "protocolVersion": {"ref":"ProtocolVersion","required":true}, - "connectionId": {"ref":"RecordId","required":true}, - "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormats.createOffer_","required":true}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, - "goalCode": {"dataType":"string"}, - "goal": {"dataType":"string"}, + "type": {"dataType":"string","required":true}, + "cryptosuite": {"dataType":"string","required":true}, + "verificationMethod": {"dataType":"string","required":true}, + "proofPurpose": {"dataType":"string","required":true}, + "domain": {"dataType":"string"}, + "challenge": {"dataType":"string"}, + "nonce": {"dataType":"string"}, + "created": {"dataType":"string"}, + "expires": {"dataType":"string"}, + "proofValue": {"dataType":"string"}, + "previousProof": {"dataType":"string"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatPayload_CredentialFormatType-Array.createOffer_": { + "SingleOrArray_any-or-DataIntegrityProofOptions_": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsOfferCredentialFormat"},"jsonld":{"ref":"JsonLdCredentialDetailFormat"},"anoncreds":{"ref":"AnonCredsOfferCredentialFormat"}},"validators":{}}, + "type": {"dataType":"union","subSchemas":[{"dataType":"union","subSchemas":[{"dataType":"any"},{"ref":"DataIntegrityProofOptions"}]},{"dataType":"array","array":{"dataType":"union","subSchemas":[{"dataType":"any"},{"ref":"DataIntegrityProofOptions"}]}}],"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CreateOfferOobOptions": { + "LinkedDataProof": { "dataType": "refObject", "properties": { - "protocolVersion": {"dataType":"string","required":true}, - "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormatType-Array.createOffer_","required":true}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, - "goalCode": {"dataType":"string"}, - "parentThreadId": {"dataType":"string"}, - "willConfirm": {"dataType":"boolean"}, - "label": {"dataType":"string"}, - "imageUrl": {"dataType":"string"}, - "recipientKey": {"dataType":"string"}, - "invitationDid": {"dataType":"string"}, + "type": {"dataType":"string","required":true}, + "proofPurpose": {"dataType":"string","required":true}, + "verificationMethod": {"dataType":"string","required":true}, + "created": {"dataType":"string","required":true}, + "domain": {"dataType":"string"}, + "challenge": {"dataType":"string"}, + "jws": {"dataType":"string"}, + "proofValue": {"dataType":"string"}, + "nonce": {"dataType":"string"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AnonCredsAcceptOfferFormat": { + "DataIntegrityProof": { "dataType": "refObject", "properties": { - "linkSecretId": {"dataType":"string"}, + "type": {"dataType":"string","required":true}, + "cryptosuite": {"dataType":"string","required":true}, + "proofPurpose": {"dataType":"string","required":true}, + "verificationMethod": {"dataType":"string","required":true}, + "domain": {"dataType":"string"}, + "challenge": {"dataType":"string"}, + "nonce": {"dataType":"string"}, + "created": {"dataType":"string"}, + "expires": {"dataType":"string"}, + "proofValue": {"dataType":"string"}, + "previousProof": {"dataType":"string"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatPayload_CredentialFormats.acceptOffer_": { + "SingleOrArray_LinkedDataProof-or-DataIntegrityProof_": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsAcceptOfferFormat"},"jsonld":{"ref":"EmptyObject"},"anoncreds":{"ref":"AnonCredsAcceptOfferFormat"}},"validators":{}}, + "type": {"dataType":"union","subSchemas":[{"dataType":"union","subSchemas":[{"ref":"LinkedDataProof"},{"ref":"DataIntegrityProof"}]},{"dataType":"array","array":{"dataType":"union","subSchemas":[{"ref":"LinkedDataProof"},{"ref":"DataIntegrityProof"}]}}],"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialOfferOptions": { + "W3cJsonLdVerifiableCredential": { "dataType": "refObject", "properties": { - "credentialRecordId": {"ref":"RecordId","required":true}, - "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormats.acceptOffer_"}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, + "context": {"dataType":"array","array":{"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"JsonObject"}]},"required":true}, + "id": {"dataType":"string"}, + "type": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "issuer": {"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"W3cIssuer"}],"required":true}, + "issuanceDate": {"dataType":"string","required":true}, + "expirationDate": {"dataType":"string"}, + "credentialSubject": {"ref":"SingleOrArray_W3cCredentialSubject_","required":true}, + "credentialSchema": {"ref":"SingleOrArray_W3cCredentialSchema_"}, + "credentialStatus": {"ref":"W3cCredentialStatus"}, + "proof": {"ref":"SingleOrArray_LinkedDataProof-or-DataIntegrityProof_","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AnonCredsAcceptRequestFormat": { + "ProofPurpose": { "dataType": "refAlias", - "type": {"ref":"Record_string.never_","validators":{}}, + "type": {"dataType":"any","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "JsonLdAcceptRequestFormat": { + "SafeW3cJsonLdVerifyCredentialOptions": { "dataType": "refObject", "properties": { - "verificationMethod": {"dataType":"string"}, + "credential": {"ref":"W3cJsonLdVerifiableCredential","required":true}, + "verifyCredentialStatus": {"dataType":"boolean"}, + "proofPurpose": {"ref":"ProofPurpose"}, + "proof": {"ref":"SingleOrArray_any-or-DataIntegrityProofOptions_","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "SchemaResponseDTO": { + "dataType": "refObject", + "properties": { + "schemaId": {"dataType":"string","required":true}, + "schema": {"dataType":"nestedObjectLiteral","nestedProperties":{"attrNames":{"dataType":"array","array":{"dataType":"string"},"required":true},"version":{"dataType":"string","required":true},"name":{"dataType":"string","required":true},"issuerId":{"dataType":"string","required":true}}}, + "resolutionMetadata": {"ref":"Record_string.unknown_","required":true}, + "schemaMetadata": {"ref":"Record_string.unknown_","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatPayload_CredentialFormats.acceptRequest_": { + "SchemaId": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsAcceptRequestFormat"},"jsonld":{"ref":"JsonLdAcceptRequestFormat"},"anoncreds":{"ref":"AnonCredsAcceptRequestFormat"}},"validators":{}}, + "type": {"dataType":"string","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AcceptCredentialRequestOptions": { + "AnonCredsSchema": { "dataType": "refObject", "properties": { - "credentialRecordId": {"ref":"RecordId","required":true}, - "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormats.acceptRequest_"}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, + "issuerId": {"dataType":"string","required":true}, + "name": {"dataType":"string","required":true}, + "version": {"dataType":"string","required":true}, + "attrNames": {"dataType":"array","array":{"dataType":"string"},"required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AcceptCredential": { + "RegisterSchemaReturnStateWait": { "dataType": "refObject", "properties": { - "credentialRecordId": {"ref":"RecordId","required":true}, + "state": {"dataType":"enum","enums":["wait"],"required":true}, + "schema": {"ref":"AnonCredsSchema"}, + "schemaId": {"dataType":"string"}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.proposal_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + "RegisterSchemaReturnStateAction": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["action"],"required":true}, + "action": {"dataType":"string","required":true}, + "schema": {"ref":"AnonCredsSchema","required":true}, + "schemaId": {"dataType":"string","required":true}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.offer_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + "RegisterSchemaReturnStateFinished": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["finished"],"required":true}, + "schema": {"ref":"AnonCredsSchema","required":true}, + "schemaId": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterSchemaReturnStateFailed": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["failed"],"required":true}, + "reason": {"dataType":"string","required":true}, + "schema": {"ref":"AnonCredsSchema"}, + "schemaId": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterSchemaReturn": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "schemaState": {"dataType":"union","subSchemas":[{"ref":"RegisterSchemaReturnStateWait"},{"ref":"RegisterSchemaReturnStateAction"},{"ref":"RegisterSchemaReturnStateFinished"},{"ref":"RegisterSchemaReturnStateFailed"}],"required":true}, + "schemaMetadata": {"ref":"Record_string.unknown_","required":true}, + "registrationMetadata": {"ref":"Record_string.unknown_","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CreateSchemaInput": { + "dataType": "refObject", + "properties": { + "issuerId": {"dataType":"string","required":true}, + "name": {"dataType":"string","required":true}, + "version": {"dataType":"string","required":true}, + "attributes": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "endorse": {"dataType":"boolean"}, + "endorserDid": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsCredentialDefinition": { + "dataType": "refObject", + "properties": { + "issuerId": {"dataType":"string","required":true}, + "schemaId": {"dataType":"string","required":true}, + "type": {"dataType":"enum","enums":["CL"],"required":true}, + "tag": {"dataType":"string","required":true}, + "value": {"dataType":"nestedObjectLiteral","nestedProperties":{"revocation":{"dataType":"any"},"primary":{"ref":"Record_string.unknown_","required":true}},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "GetCredentialDefinitionReturn": { + "dataType": "refObject", + "properties": { + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition"}, + "credentialDefinitionId": {"dataType":"string","required":true}, + "resolutionMetadata": {"ref":"Record_string.unknown_","required":true}, + "credentialDefinitionMetadata": {"ref":"Record_string.unknown_","required":true}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.request_": { + "CredentialDefinitionId": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + "type": {"dataType":"string","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterCredentialDefinitionReturnStateWait": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["wait"],"required":true}, + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition"}, + "credentialDefinitionId": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterCredentialDefinitionReturnStateAction": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["action"],"required":true}, + "action": {"dataType":"string","required":true}, + "credentialDefinitionId": {"dataType":"string","required":true}, + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterCredentialDefinitionReturnStateFinished": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["finished"],"required":true}, + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition","required":true}, + "credentialDefinitionId": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterCredentialDefinitionReturnStateFailed": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["failed"],"required":true}, + "reason": {"dataType":"string","required":true}, + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition"}, + "credentialDefinitionId": {"dataType":"string"}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.credential_": { + "CredentialDefinitionStates": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + "type": {"dataType":"union","subSchemas":[{"ref":"RegisterCredentialDefinitionReturnStateWait"},{"ref":"RegisterCredentialDefinitionReturnStateAction"},{"ref":"RegisterCredentialDefinitionReturnStateFinished"},{"ref":"RegisterCredentialDefinitionReturnStateFailed"}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterCredentialDefinitionReturn": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "credentialDefinitionState": {"ref":"CredentialDefinitionStates","required":true}, + "credentialDefinitionMetadata": {"ref":"Record_string.unknown_","required":true}, + "registrationMetadata": {"ref":"Record_string.unknown_","required":true}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "GetCredentialFormatDataReturn__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array_": { + "ThreadId": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"credential":{"ref":"CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.credential_"},"request":{"ref":"CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.request_"},"offerAttributes":{"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"}},"offer":{"ref":"CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.offer_"},"proposal":{"ref":"CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.proposal_"},"proposalAttributes":{"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"}}},"validators":{}}, + "type": {"dataType":"string","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidExchangeState": { + "DidCommCredentialState": { "dataType": "refEnum", - "enums": ["start","invitation-sent","invitation-received","request-sent","request-received","response-sent","response-received","abandoned","completed"], + "enums": ["proposal-sent","proposal-received","offer-sent","offer-received","declined","request-sent","request-received","credential-issued","credential-received","done","abandoned"], }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "BasicMessageRecord": { - "dataType": "refAlias", - "type": {"ref":"Record_string.unknown_","validators":{}}, + "DidCommCredentialRole": { + "dataType": "refEnum", + "enums": ["issuer","holder"], }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Record_content.string_": { + "W3cCredentialRecord": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"content":{"dataType":"string","required":true}},"validators":{}}, + "type": {"ref":"Record_string.unknown_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_InitConfig.label-or-connectionImageUrl_": { + "DidCommCredentialExchangeRecord": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"label":{"dataType":"string","required":true},"connectionImageUrl":{"dataType":"string"}},"validators":{}}, + "type": {"ref":"Record_string.unknown_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "KeyDerivationMethod": { + "ProtocolVersion": { "dataType": "refEnum", - "enums": ["ARGON2I_MOD","ARGON2I_INT","RAW"], + "enums": ["v1","v2"], }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_WalletConfig.id-or-key-or-keyDerivationMethod_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"key":{"dataType":"string","required":true},"id":{"dataType":"string","required":true},"keyDerivationMethod":{"ref":"KeyDerivationMethod"}},"validators":{}}, + "DidCommCredentialPreviewAttributeOptions": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string","required":true}, + "mimeType": {"dataType":"string"}, + "value": {"dataType":"string","required":true}, + }, + "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "TenantConfig": { + "Pick_AnonCredsDidCommProposeCredentialFormat.Exclude_keyofAnonCredsDidCommProposeCredentialFormat.schemaIssuerId-or-issuerId__": { "dataType": "refAlias", - "type": {"dataType":"intersection","subSchemas":[{"ref":"Pick_InitConfig.label-or-connectionImageUrl_"},{"dataType":"nestedObjectLiteral","nestedProperties":{"walletConfig":{"ref":"Pick_WalletConfig.id-or-key-or-keyDerivationMethod_","required":true}}}],"validators":{}}, + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"schemaId":{"dataType":"string"},"schemaName":{"dataType":"string"},"schemaVersion":{"dataType":"string"},"credentialDefinitionId":{"dataType":"string"},"attributes":{"dataType":"array","array":{"dataType":"refObject","ref":"DidCommCredentialPreviewAttributeOptions"}},"schemaIssuerDid":{"dataType":"string"},"issuerDid":{"dataType":"string"}},"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "MetadataValue": { + "Omit_AnonCredsDidCommProposeCredentialFormat.schemaIssuerId-or-issuerId_": { "dataType": "refAlias", - "type": {"ref":"Record_string.any_","validators":{}}, + "type": {"ref":"Pick_AnonCredsDidCommProposeCredentialFormat.Exclude_keyofAnonCredsDidCommProposeCredentialFormat.schemaIssuerId-or-issuerId__","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "MetadataBase": { + "LegacyIndyDidCommProposeCredentialFormat": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"MetadataValue"},"validators":{}}, + "type": {"ref":"Omit_AnonCredsDidCommProposeCredentialFormat.schemaIssuerId-or-issuerId_","validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Metadata____": { + "W3cIssuerOptions": { "dataType": "refObject", "properties": { - "data": {"ref":"MetadataBase","required":true}, + "id": {"dataType":"string","required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_CustomTenantConfig.Exclude_keyofCustomTenantConfig.walletConfig__": { + "SingleOrArray_JsonObject_": { "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"label":{"dataType":"string","required":true},"connectionImageUrl":{"dataType":"string"}},"validators":{}}, + "type": {"dataType":"union","subSchemas":[{"ref":"JsonObject"},{"dataType":"array","array":{"dataType":"refObject","ref":"JsonObject"}}],"validators":{}}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Omit_CustomTenantConfig.walletConfig_": { - "dataType": "refAlias", - "type": {"ref":"Pick_CustomTenantConfig.Exclude_keyofCustomTenantConfig.walletConfig__","validators":{}}, + "JsonCredential": { + "dataType": "refObject", + "properties": { + "@context": {"dataType":"union","subSchemas":[{"dataType":"array","array":{"dataType":"string"}},{"ref":"JsonObject"}],"required":true}, + "id": {"dataType":"string"}, + "type": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "issuer": {"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"W3cIssuerOptions"}],"required":true}, + "issuanceDate": {"dataType":"string","required":true}, + "expirationDate": {"dataType":"string"}, + "credentialSubject": {"ref":"SingleOrArray_JsonObject_","required":true}, + }, + "additionalProperties": {"dataType":"any"}, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CreateTenantOptions": { + "DidCommJsonLdCredentialDetailFormat": { "dataType": "refObject", "properties": { - "config": {"ref":"Omit_CustomTenantConfig.walletConfig_","required":true}, + "credential": {"ref":"JsonCredential","required":true}, + "options": {"dataType":"nestedObjectLiteral","nestedProperties":{"proofType":{"dataType":"string","required":true},"proofPurpose":{"dataType":"string","required":true}},"required":true}, }, "additionalProperties": false, }, // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -}; -const templateService = new ExpressTemplateService(models, {"noImplicitAdditionalProperties":"throw-on-extras","bodyCoercion":true}); + "AnonCredsDidCommProposeCredentialFormat": { + "dataType": "refObject", + "properties": { + "schemaIssuerId": {"dataType":"string"}, + "schemaId": {"dataType":"string"}, + "schemaName": {"dataType":"string"}, + "schemaVersion": {"dataType":"string"}, + "credentialDefinitionId": {"dataType":"string"}, + "issuerId": {"dataType":"string"}, + "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"DidCommCredentialPreviewAttributeOptions"}}, + "schemaIssuerDid": {"dataType":"string"}, + "issuerDid": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommCredentialFormatPayload_CredentialFormatType-Array.createProposal_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"LegacyIndyDidCommProposeCredentialFormat"},"jsonld":{"ref":"DidCommJsonLdCredentialDetailFormat"},"anoncreds":{"ref":"AnonCredsDidCommProposeCredentialFormat"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommAutoAcceptCredential": { + "dataType": "refEnum", + "enums": ["always","contentApproved","never"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ProposeCredentialOptions": { + "dataType": "refObject", + "properties": { + "protocolVersion": {"ref":"ProtocolVersion","required":true}, + "credentialFormats": {"ref":"DidCommCredentialFormatPayload_CredentialFormatType-Array.createProposal_","required":true}, + "autoAcceptCredential": {"ref":"DidCommAutoAcceptCredential"}, + "comment": {"dataType":"string"}, + "connectionId": {"ref":"RecordId","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsDidCommAcceptProposalFormat": { + "dataType": "refObject", + "properties": { + "credentialDefinitionId": {"dataType":"string"}, + "revocationRegistryDefinitionId": {"dataType":"string"}, + "revocationRegistryIndex": {"dataType":"double"}, + "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"DidCommCredentialPreviewAttributeOptions"}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.never_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "EmptyObject": { + "dataType": "refAlias", + "type": {"ref":"Record_string.never_","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommCredentialFormatPayload_CredentialFormats.acceptProposal_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsDidCommAcceptProposalFormat"},"jsonld":{"ref":"EmptyObject"},"anoncreds":{"ref":"AnonCredsDidCommAcceptProposalFormat"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AcceptCredentialProposalOptions": { + "dataType": "refObject", + "properties": { + "credentialExchangeRecordId": {"dataType":"string","required":true}, + "credentialFormats": {"ref":"DidCommCredentialFormatPayload_CredentialFormats.acceptProposal_"}, + "autoAcceptCredential": {"ref":"DidCommAutoAcceptCredential"}, + "comment": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsDidCommOfferCredentialFormat": { + "dataType": "refObject", + "properties": { + "credentialDefinitionId": {"dataType":"string","required":true}, + "revocationRegistryDefinitionId": {"dataType":"string"}, + "revocationRegistryIndex": {"dataType":"double"}, + "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"DidCommCredentialPreviewAttributeOptions"},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommCredentialFormatPayload_CredentialFormats.createOffer_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsDidCommOfferCredentialFormat"},"jsonld":{"ref":"DidCommJsonLdCredentialDetailFormat"},"anoncreds":{"ref":"AnonCredsDidCommOfferCredentialFormat"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CreateOfferOptions": { + "dataType": "refObject", + "properties": { + "protocolVersion": {"ref":"ProtocolVersion","required":true}, + "connectionId": {"ref":"RecordId","required":true}, + "credentialFormats": {"ref":"DidCommCredentialFormatPayload_CredentialFormats.createOffer_","required":true}, + "autoAcceptCredential": {"ref":"DidCommAutoAcceptCredential"}, + "comment": {"dataType":"string"}, + "goalCode": {"dataType":"string"}, + "goal": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommCredentialFormatPayload_CredentialFormatType-Array.createOffer_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsDidCommOfferCredentialFormat"},"jsonld":{"ref":"DidCommJsonLdCredentialDetailFormat"},"anoncreds":{"ref":"AnonCredsDidCommOfferCredentialFormat"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CreateOfferOobOptions": { + "dataType": "refObject", + "properties": { + "protocolVersion": {"ref":"ProtocolVersion","required":true}, + "credentialFormats": {"ref":"DidCommCredentialFormatPayload_CredentialFormatType-Array.createOffer_","required":true}, + "autoAcceptCredential": {"ref":"DidCommAutoAcceptCredential"}, + "comment": {"dataType":"string"}, + "goalCode": {"dataType":"string"}, + "parentThreadId": {"dataType":"string"}, + "willConfirm": {"dataType":"boolean"}, + "label": {"dataType":"string"}, + "imageUrl": {"dataType":"string"}, + "recipientKey": {"dataType":"string"}, + "invitationDid": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsDidCommAcceptOfferFormat": { + "dataType": "refObject", + "properties": { + "linkSecretId": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommCredentialFormatPayload_CredentialFormats.acceptOffer_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsDidCommAcceptOfferFormat"},"jsonld":{"ref":"EmptyObject"},"anoncreds":{"ref":"AnonCredsDidCommAcceptOfferFormat"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialOfferOptions": { + "dataType": "refObject", + "properties": { + "credentialExchangeRecordId": {"ref":"RecordId","required":true}, + "credentialFormats": {"ref":"DidCommCredentialFormatPayload_CredentialFormats.acceptOffer_"}, + "autoAcceptCredential": {"ref":"DidCommAutoAcceptCredential"}, + "comment": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsDidCommAcceptRequestFormat": { + "dataType": "refAlias", + "type": {"ref":"Record_string.never_","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommJsonLdAcceptRequestFormat": { + "dataType": "refObject", + "properties": { + "verificationMethod": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommCredentialFormatPayload_CredentialFormats.acceptRequest_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsDidCommAcceptRequestFormat"},"jsonld":{"ref":"DidCommJsonLdAcceptRequestFormat"},"anoncreds":{"ref":"AnonCredsDidCommAcceptRequestFormat"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AcceptCredentialRequestOptions": { + "dataType": "refObject", + "properties": { + "credentialExchangeRecordId": {"ref":"RecordId","required":true}, + "credentialFormats": {"ref":"DidCommCredentialFormatPayload_CredentialFormats.acceptRequest_"}, + "autoAcceptCredential": {"ref":"DidCommAutoAcceptCredential"}, + "comment": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AcceptCredential": { + "dataType": "refObject", + "properties": { + "credentialExchangeRecordId": {"ref":"RecordId","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.proposal_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.offer_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.request_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.credential_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "GetCredentialFormatDataReturn__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"credential":{"ref":"CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.credential_"},"request":{"ref":"CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.request_"},"offerAttributes":{"dataType":"array","array":{"dataType":"refObject","ref":"DidCommCredentialPreviewAttributeOptions"}},"offer":{"ref":"CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.offer_"},"proposal":{"ref":"CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.proposal_"},"proposalAttributes":{"dataType":"array","array":{"dataType":"refObject","ref":"DidCommCredentialPreviewAttributeOptions"}}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommProofExchangeRecord": { + "dataType": "refAlias", + "type": {"ref":"Record_string.unknown_","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsPresentationPreviewAttribute": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string","required":true}, + "credentialDefinitionId": {"dataType":"string"}, + "mimeType": {"dataType":"string"}, + "value": {"dataType":"string"}, + "referent": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsPredicateType": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":[">="]},{"dataType":"enum","enums":[">"]},{"dataType":"enum","enums":["<="]},{"dataType":"enum","enums":["<"]}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsPresentationPreviewPredicate": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string","required":true}, + "credentialDefinitionId": {"dataType":"string","required":true}, + "predicate": {"ref":"AnonCredsPredicateType","required":true}, + "threshold": {"dataType":"double","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsNonRevokedInterval": { + "dataType": "refObject", + "properties": { + "from": {"dataType":"double"}, + "to": {"dataType":"double"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsProposeProofFormat": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string"}, + "version": {"dataType":"string"}, + "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"AnonCredsPresentationPreviewAttribute"}}, + "predicates": {"dataType":"array","array":{"dataType":"refObject","ref":"AnonCredsPresentationPreviewPredicate"}}, + "nonRevokedInterval": {"ref":"AnonCredsNonRevokedInterval"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Schema": { + "dataType": "refObject", + "properties": { + "uri": {"dataType":"string","required":true}, + "required": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "FilterV1": { + "dataType": "refObject", + "properties": { + "const": {"ref":"OneOfNumberStringBoolean"}, + "enum": {"dataType":"array","array":{"dataType":"refAlias","ref":"OneOfNumberStringBoolean"}}, + "exclusiveMinimum": {"ref":"OneOfNumberString"}, + "exclusiveMaximum": {"ref":"OneOfNumberString"}, + "format": {"dataType":"string"}, + "minLength": {"dataType":"double"}, + "maxLength": {"dataType":"double"}, + "minimum": {"ref":"OneOfNumberString"}, + "maximum": {"ref":"OneOfNumberString"}, + "not": {"dataType":"object"}, + "pattern": {"dataType":"string"}, + "type": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "FieldV1": { + "dataType": "refObject", + "properties": { + "id": {"dataType":"string"}, + "path": {"dataType":"array","array":{"dataType":"string"},"required":true}, + "purpose": {"dataType":"string"}, + "filter": {"ref":"FilterV1"}, + "predicate": {"ref":"Optionality"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ConstraintsV1": { + "dataType": "refObject", + "properties": { + "limit_disclosure": {"ref":"Optionality"}, + "statuses": {"ref":"Statuses"}, + "fields": {"dataType":"array","array":{"dataType":"refObject","ref":"FieldV1"}}, + "subject_is_issuer": {"ref":"Optionality"}, + "is_holder": {"dataType":"array","array":{"dataType":"refObject","ref":"HolderSubject"}}, + "same_subject": {"dataType":"array","array":{"dataType":"refObject","ref":"HolderSubject"}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "InputDescriptorV1": { + "dataType": "refObject", + "properties": { + "id": {"dataType":"string","required":true}, + "name": {"dataType":"string"}, + "purpose": {"dataType":"string"}, + "group": {"dataType":"array","array":{"dataType":"string"}}, + "schema": {"dataType":"array","array":{"dataType":"refObject","ref":"Schema"},"required":true}, + "issuance": {"dataType":"array","array":{"dataType":"refObject","ref":"Issuance"}}, + "constraints": {"ref":"ConstraintsV1"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "PresentationDefinitionV1": { + "dataType": "refObject", + "properties": { + "id": {"dataType":"string","required":true}, + "name": {"dataType":"string"}, + "purpose": {"dataType":"string"}, + "format": {"ref":"Format"}, + "submission_requirements": {"dataType":"array","array":{"dataType":"refObject","ref":"SubmissionRequirement"}}, + "input_descriptors": {"dataType":"array","array":{"dataType":"refObject","ref":"InputDescriptorV1"},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommProofFormatPayload_ProofFormats.createProposal_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsProposeProofFormat"},"anoncreds":{"ref":"AnonCredsProposeProofFormat"},"presentationExchange":{"dataType":"nestedObjectLiteral","nestedProperties":{"presentationDefinition":{"ref":"PresentationDefinitionV1","required":true}}}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommAutoAcceptProof": { + "dataType": "refEnum", + "enums": ["always","contentApproved","never"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RequestProofProposalOptions": { + "dataType": "refObject", + "properties": { + "protocolVersion": {"ref":"ProtocolVersion","required":true}, + "connectionId": {"dataType":"string","required":true}, + "proofFormats": {"ref":"DidCommProofFormatPayload_ProofFormats.createProposal_","required":true}, + "goalCode": {"dataType":"string"}, + "parentThreadId": {"dataType":"string"}, + "autoAcceptProof": {"ref":"DidCommAutoAcceptProof"}, + "comment": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommProofFormatPayload_ProofFormats.acceptProposal_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"dataType":"nestedObjectLiteral","nestedProperties":{"version":{"dataType":"string"},"name":{"dataType":"string"}}},"anoncreds":{"dataType":"nestedObjectLiteral","nestedProperties":{"version":{"dataType":"string"},"name":{"dataType":"string"}}},"presentationExchange":{"dataType":"nestedObjectLiteral","nestedProperties":{"options":{"dataType":"nestedObjectLiteral","nestedProperties":{"domain":{"dataType":"string"},"challenge":{"dataType":"string"}}}}}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AcceptProofProposal": { + "dataType": "refObject", + "properties": { + "proofExchangeRecordId": {"dataType":"string","required":true}, + "proofFormats": {"ref":"DidCommProofFormatPayload_ProofFormats.acceptProposal_","required":true}, + "comment": {"dataType":"string"}, + "autoAcceptProof": {"ref":"DidCommAutoAcceptProof"}, + "goalCode": {"dataType":"string"}, + "willConfirm": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RequestProofOptions": { + "dataType": "refObject", + "properties": { + "connectionId": {"dataType":"string","required":true}, + "protocolVersion": {"dataType":"string","required":true}, + "proofFormats": {"dataType":"any","required":true}, + "comment": {"dataType":"string","required":true}, + "autoAcceptProof": {"ref":"DidCommAutoAcceptProof","required":true}, + "goalCode": {"dataType":"string"}, + "parentThreadId": {"dataType":"string"}, + "willConfirm": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CreateProofRequestOobOptions": { + "dataType": "refObject", + "properties": { + "protocolVersion": {"dataType":"string","required":true}, + "proofFormats": {"dataType":"any","required":true}, + "goalCode": {"dataType":"string"}, + "parentThreadId": {"dataType":"string"}, + "willConfirm": {"dataType":"boolean"}, + "autoAcceptProof": {"ref":"DidCommAutoAcceptProof"}, + "comment": {"dataType":"string"}, + "label": {"dataType":"string"}, + "imageUrl": {"dataType":"string"}, + "recipientKey": {"dataType":"string"}, + "invitationDid": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.proposal_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.request_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.presentation_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "GetProofFormatDataReturn__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"presentation":{"ref":"ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.presentation_"},"request":{"ref":"ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.request_"},"proposal":{"ref":"ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.proposal_"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OpenId4VcVerifierRecord": { + "dataType": "refAlias", + "type": {"ref":"Record_string.unknown_","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OpenId4VcSiopVerifierClientMetadata": { + "dataType": "refObject", + "properties": { + "client_name": {"dataType":"string"}, + "logo_uri": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OpenId4VcSiopCreateVerifierOptions": { + "dataType": "refObject", + "properties": { + "verifierId": {"dataType":"string"}, + "clientMetadata": {"ref":"OpenId4VcSiopVerifierClientMetadata"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OpenId4VcUpdateVerifierRecordOptions": { + "dataType": "refObject", + "properties": { + "clientMetadata": {"ref":"OpenId4VcSiopVerifierClientMetadata"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +}; +const templateService = new ExpressTemplateService(models, {"noImplicitAdditionalProperties":"throw-on-extras","bodyCoercion":true}); + +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + + + +export function RegisterRoutes(app: Router) { + + // ########################################################################################################### + // NOTE: If you do not see routes for all of your controllers in this file, then you might not have informed tsoa of where to look + // Please look into the "controllerPathGlobs" config option described in the readme: https://github.com/lukeautry/tsoa + // ########################################################################################################### + + + + const argsX509Controller_createX509Certificate: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + createX509Options: {"in":"body","name":"createX509Options","required":true,"ref":"X509CreateCertificateOptionsDto"}, + }; + app.post('/x509', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(X509Controller)), + ...(fetchMiddlewares(X509Controller.prototype.createX509Certificate)), + + async function X509Controller_createX509Certificate(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsX509Controller_createX509Certificate, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(X509Controller); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createX509Certificate', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsX509Controller_ImportX509Certificates: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + importX509Options: {"in":"body","name":"importX509Options","required":true,"ref":"X509ImportCertificateOptionsDto"}, + }; + app.post('/x509/import', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(X509Controller)), + ...(fetchMiddlewares(X509Controller.prototype.ImportX509Certificates)), + + async function X509Controller_ImportX509Certificates(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsX509Controller_ImportX509Certificates, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(X509Controller); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'ImportX509Certificates', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsX509Controller_addTrustedCertificate: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + options: {"in":"body","name":"options","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"certificate":{"dataType":"string","required":true}}}, + }; + app.post('/x509/trusted', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(X509Controller)), + ...(fetchMiddlewares(X509Controller.prototype.addTrustedCertificate)), + + async function X509Controller_addTrustedCertificate(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsX509Controller_addTrustedCertificate, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(X509Controller); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'addTrustedCertificate', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsX509Controller_getTrustedCertificates: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + }; + app.get('/x509/trusted', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(X509Controller)), + ...(fetchMiddlewares(X509Controller.prototype.getTrustedCertificates)), + + async function X509Controller_getTrustedCertificates(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsX509Controller_getTrustedCertificates, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(X509Controller); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getTrustedCertificates', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsX509Controller_decodeCertificate: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + options: {"in":"body","name":"options","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"certificate":{"dataType":"string","required":true}}}, + }; + app.post('/x509/decode', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(X509Controller)), + ...(fetchMiddlewares(X509Controller.prototype.decodeCertificate)), + + async function X509Controller_decodeCertificate(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsX509Controller_decodeCertificate, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(X509Controller); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'decodeCertificate', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsPolygon_createKeyPair: Record = { + }; + app.post('/polygon/create-keys', + authenticateMiddleware([{"jwt":["tenant","dedicated","Basewallet"]}]), + ...(fetchMiddlewares(Polygon)), + ...(fetchMiddlewares(Polygon.prototype.createKeyPair)), + + async function Polygon_createKeyPair(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsPolygon_createKeyPair, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(Polygon); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createKeyPair', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsPolygon_createSchema: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + createSchemaRequest: {"in":"body","name":"createSchemaRequest","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"schema":{"ref":"Record_string.unknown_","required":true},"schemaName":{"dataType":"string","required":true},"did":{"dataType":"string","required":true}}}, + }; + app.post('/polygon/create-schema', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(Polygon)), + ...(fetchMiddlewares(Polygon.prototype.createSchema)), + + async function Polygon_createSchema(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsPolygon_createSchema, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(Polygon); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createSchema', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsPolygon_estimateTransaction: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + estimateTransactionRequest: {"in":"body","name":"estimateTransactionRequest","required":true,"ref":"DidOperationOptions"}, + }; + app.post('/polygon/estimate-transaction', + authenticateMiddleware([{"jwt":["tenant","dedicated","Basewallet"]}]), + ...(fetchMiddlewares(Polygon)), + ...(fetchMiddlewares(Polygon.prototype.estimateTransaction)), + + async function Polygon_estimateTransaction(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsPolygon_estimateTransaction, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(Polygon); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'estimateTransaction', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsPolygon_getSchemaById: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + did: {"in":"path","name":"did","required":true,"dataType":"string"}, + schemaId: {"in":"path","name":"schemaId","required":true,"dataType":"string"}, + }; + app.get('/polygon/:did/:schemaId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(Polygon)), + ...(fetchMiddlewares(Polygon.prototype.getSchemaById)), + + async function Polygon_getSchemaById(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsPolygon_getSchemaById, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(Polygon); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getSchemaById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsVerificationSessionsController_createProofRequest: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + createAuthorizationRequest: {"in":"body","name":"createAuthorizationRequest","required":true,"ref":"CreateAuthorizationRequest"}, + }; + app.post('/openid4vc/verification-sessions/create-presentation-request', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(VerificationSessionsController)), + ...(fetchMiddlewares(VerificationSessionsController.prototype.createProofRequest)), + + async function VerificationSessionsController_createProofRequest(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsVerificationSessionsController_createProofRequest, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(VerificationSessionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createProofRequest', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsVerificationSessionsController_getAllVerificationSessions: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + publicVerifierId: {"in":"query","name":"publicVerifierId","dataType":"string"}, + payloadState: {"in":"query","name":"payloadState","dataType":"string"}, + state: {"in":"query","name":"state","ref":"OpenId4VcVerificationSessionState"}, + authorizationRequestUri: {"in":"query","name":"authorizationRequestUri","dataType":"string"}, + authorizationRequestId: {"in":"query","name":"authorizationRequestId","dataType":"string"}, + nonce: {"in":"query","name":"nonce","dataType":"string"}, + }; + app.get('/openid4vc/verification-sessions', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(VerificationSessionsController)), + ...(fetchMiddlewares(VerificationSessionsController.prototype.getAllVerificationSessions)), + + async function VerificationSessionsController_getAllVerificationSessions(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsVerificationSessionsController_getAllVerificationSessions, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(VerificationSessionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getAllVerificationSessions', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsVerificationSessionsController_getVerificationSessionsById: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + verificationSessionId: {"in":"path","name":"verificationSessionId","required":true,"dataType":"string"}, + }; + app.get('/openid4vc/verification-sessions/:verificationSessionId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(VerificationSessionsController)), + ...(fetchMiddlewares(VerificationSessionsController.prototype.getVerificationSessionsById)), + + async function VerificationSessionsController_getVerificationSessionsById(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsVerificationSessionsController_getVerificationSessionsById, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(VerificationSessionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getVerificationSessionsById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsVerificationSessionsController_getVerifiedAuthorizationResponse: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + verificationSessionId: {"in":"path","name":"verificationSessionId","required":true,"dataType":"string"}, + }; + app.get('/openid4vc/verification-sessions/response/:verificationSessionId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(VerificationSessionsController)), + ...(fetchMiddlewares(VerificationSessionsController.prototype.getVerifiedAuthorizationResponse)), + + async function VerificationSessionsController_getVerifiedAuthorizationResponse(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsVerificationSessionsController_getVerifiedAuthorizationResponse, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(VerificationSessionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getVerifiedAuthorizationResponse', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsVerificationSessionsController_verifyDcqlProofRequest: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + verifydcqlProofRquest: {"in":"body","name":"verifydcqlProofRquest","required":true,"ref":"OpenId4VCDCQLVerificationSessionRecord"}, + }; + app.post('/openid4vc/verification-sessions/verify-authorization-response', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(VerificationSessionsController)), + ...(fetchMiddlewares(VerificationSessionsController.prototype.verifyDcqlProofRequest)), + + async function VerificationSessionsController_verifyDcqlProofRequest(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsVerificationSessionsController_verifyDcqlProofRequest, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(VerificationSessionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'verifyDcqlProofRequest', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuerController_createIssuer: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + createIssuerOptions: {"in":"body","name":"createIssuerOptions","required":true,"ref":"CreateIssuerOptions"}, + }; + app.post('/openid4vc/issuer', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuerController)), + ...(fetchMiddlewares(IssuerController.prototype.createIssuer)), + + async function IssuerController_createIssuer(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsIssuerController_createIssuer, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(IssuerController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createIssuer', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuerController_updateIssuerMetadata: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + publicIssuerId: {"in":"path","name":"publicIssuerId","required":true,"dataType":"string"}, + updateIssuerRecordOptions: {"in":"body","name":"updateIssuerRecordOptions","required":true,"ref":"UpdateIssuerRecordOptions"}, + }; + app.put('/openid4vc/issuer/:publicIssuerId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuerController)), + ...(fetchMiddlewares(IssuerController.prototype.updateIssuerMetadata)), + + async function IssuerController_updateIssuerMetadata(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsIssuerController_updateIssuerMetadata, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(IssuerController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'updateIssuerMetadata', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuerController_getIssuerAgentMetaData: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + issuerId: {"in":"path","name":"issuerId","required":true,"dataType":"string"}, + }; + app.get('/openid4vc/issuer/:issuerId/metadata', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuerController)), + ...(fetchMiddlewares(IssuerController.prototype.getIssuerAgentMetaData)), + + async function IssuerController_getIssuerAgentMetaData(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsIssuerController_getIssuerAgentMetaData, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(IssuerController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getIssuerAgentMetaData', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuerController_getIssuersByQuery: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + publicIssuerId: {"in":"query","name":"publicIssuerId","dataType":"string"}, + }; + app.get('/openid4vc/issuer', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuerController)), + ...(fetchMiddlewares(IssuerController.prototype.getIssuersByQuery)), + + async function IssuerController_getIssuersByQuery(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsIssuerController_getIssuersByQuery, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(IssuerController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getIssuersByQuery', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuerController_getIssuer: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + publicIssuerId: {"in":"path","name":"publicIssuerId","required":true,"dataType":"string"}, + }; + app.get('/openid4vc/issuer/:publicIssuerId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuerController)), + ...(fetchMiddlewares(IssuerController.prototype.getIssuer)), + + async function IssuerController_getIssuer(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsIssuerController_getIssuer, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(IssuerController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getIssuer', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuerController_deleteIssuer: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + id: {"in":"path","name":"id","required":true,"dataType":"string"}, + }; + app.delete('/openid4vc/issuer/:id', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuerController)), + ...(fetchMiddlewares(IssuerController.prototype.deleteIssuer)), + + async function IssuerController_deleteIssuer(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsIssuerController_deleteIssuer, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(IssuerController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'deleteIssuer', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuanceSessionsController_createCredentialOffer: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + options: {"in":"body","name":"options","required":true,"ref":"OpenId4VcIssuanceSessionsCreateOffer"}, + }; + app.post('/openid4vc/issuance-sessions/create-credential-offer', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuanceSessionsController)), + ...(fetchMiddlewares(IssuanceSessionsController.prototype.createCredentialOffer)), + + async function IssuanceSessionsController_createCredentialOffer(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsIssuanceSessionsController_createCredentialOffer, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(IssuanceSessionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createCredentialOffer', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuanceSessionsController_getIssuanceSessionsById: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + issuanceSessionId: {"in":"path","name":"issuanceSessionId","required":true,"dataType":"string"}, + }; + app.get('/openid4vc/issuance-sessions/:issuanceSessionId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuanceSessionsController)), + ...(fetchMiddlewares(IssuanceSessionsController.prototype.getIssuanceSessionsById)), + + async function IssuanceSessionsController_getIssuanceSessionsById(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsIssuanceSessionsController_getIssuanceSessionsById, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(IssuanceSessionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getIssuanceSessionsById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuanceSessionsController_getIssuanceSessionsByQuery: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + cNonce: {"in":"query","name":"cNonce","dataType":"string"}, + publicIssuerId: {"in":"query","name":"publicIssuerId","dataType":"string"}, + preAuthorizedCode: {"in":"query","name":"preAuthorizedCode","dataType":"string"}, + state: {"in":"query","name":"state","ref":"OpenId4VcIssuanceSessionState"}, + credentialOfferUri: {"in":"query","name":"credentialOfferUri","dataType":"string"}, + authorizationCode: {"in":"query","name":"authorizationCode","dataType":"string"}, + }; + app.get('/openid4vc/issuance-sessions', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuanceSessionsController)), + ...(fetchMiddlewares(IssuanceSessionsController.prototype.getIssuanceSessionsByQuery)), + + async function IssuanceSessionsController_getIssuanceSessionsByQuery(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsIssuanceSessionsController_getIssuanceSessionsByQuery, request, response }); + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + const controller: any = await container.get(IssuanceSessionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + await templateService.apiHandler({ + methodName: 'getIssuanceSessionsByQuery', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuanceSessionsController_updateSessionById: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + issuanceSessionId: {"in":"path","name":"issuanceSessionId","required":true,"dataType":"string"}, + metadata: {"in":"body","name":"metadata","required":true,"ref":"Record_string.unknown_"}, + }; + app.put('/openid4vc/issuance-sessions/:issuanceSessionId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuanceSessionsController)), + ...(fetchMiddlewares(IssuanceSessionsController.prototype.updateSessionById)), -export function RegisterRoutes(app: Router) { + async function IssuanceSessionsController_updateSessionById(request: ExRequest, response: ExResponse, next: any) { - // ########################################################################################################### - // NOTE: If you do not see routes for all of your controllers in this file, then you might not have informed tsoa of where to look - // Please look into the "controllerPathGlobs" config option described in the readme: https://github.com/lukeautry/tsoa - // ########################################################################################################### + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsIssuanceSessionsController_updateSessionById, request, response }); - - const argsPolygon_createKeyPair: Record = { + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(IssuanceSessionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'updateSessionById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsIssuanceSessionsController_deleteIssuanceSessionById: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + issuanceSessionId: {"in":"path","name":"issuanceSessionId","required":true,"dataType":"string"}, }; - app.post('/polygon/create-keys', - authenticateMiddleware([{"jwt":["tenant","dedicated","Basewallet"]}]), - ...(fetchMiddlewares(Polygon)), - ...(fetchMiddlewares(Polygon.prototype.createKeyPair)), + app.delete('/openid4vc/issuance-sessions/:issuanceSessionId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(IssuanceSessionsController)), + ...(fetchMiddlewares(IssuanceSessionsController.prototype.deleteIssuanceSessionById)), - async function Polygon_createKeyPair(request: ExRequest, response: ExResponse, next: any) { + async function IssuanceSessionsController_deleteIssuanceSessionById(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsPolygon_createKeyPair, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsIssuanceSessionsController_deleteIssuanceSessionById, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(Polygon); + const controller: any = await container.get(IssuanceSessionsController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'createKeyPair', + methodName: 'deleteIssuanceSessionById', controller, response, next, @@ -1496,32 +3249,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsPolygon_createSchema: Record = { + const argsIssuanceSessionsController_revokeSessionById: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - createSchemaRequest: {"in":"body","name":"createSchemaRequest","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"schema":{"ref":"Record_string.unknown_","required":true},"schemaName":{"dataType":"string","required":true},"did":{"dataType":"string","required":true}}}, + issuanceSessionId: {"in":"path","name":"issuanceSessionId","required":true,"dataType":"string"}, }; - app.post('/polygon/create-schema', + app.post('/openid4vc/issuance-sessions/:issuanceSessionId/revoke', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(Polygon)), - ...(fetchMiddlewares(Polygon.prototype.createSchema)), + ...(fetchMiddlewares(IssuanceSessionsController)), + ...(fetchMiddlewares(IssuanceSessionsController.prototype.revokeSessionById)), - async function Polygon_createSchema(request: ExRequest, response: ExResponse, next: any) { + async function IssuanceSessionsController_revokeSessionById(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsPolygon_createSchema, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsIssuanceSessionsController_revokeSessionById, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(Polygon); + const controller: any = await container.get(IssuanceSessionsController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'createSchema', + methodName: 'revokeSessionById', controller, response, next, @@ -1533,32 +3286,31 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsPolygon_estimateTransaction: Record = { + const argsHolderController_getSdJwtCredentials: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - estimateTransactionRequest: {"in":"body","name":"estimateTransactionRequest","required":true,"ref":"DidOperationOptions"}, }; - app.post('/polygon/estimate-transaction', - authenticateMiddleware([{"jwt":["tenant","dedicated","Basewallet"]}]), - ...(fetchMiddlewares(Polygon)), - ...(fetchMiddlewares(Polygon.prototype.estimateTransaction)), + app.get('/openid4vc/holder/sd-jwt-vcs', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(HolderController)), + ...(fetchMiddlewares(HolderController.prototype.getSdJwtCredentials)), - async function Polygon_estimateTransaction(request: ExRequest, response: ExResponse, next: any) { + async function HolderController_getSdJwtCredentials(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsPolygon_estimateTransaction, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsHolderController_getSdJwtCredentials, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(Polygon); + const controller: any = await container.get(HolderController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'estimateTransaction', + methodName: 'getSdJwtCredentials', controller, response, next, @@ -1570,33 +3322,31 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsPolygon_getSchemaById: Record = { + const argsHolderController_getMdocCredentials: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - did: {"in":"path","name":"did","required":true,"dataType":"string"}, - schemaId: {"in":"path","name":"schemaId","required":true,"dataType":"string"}, }; - app.get('/polygon/:did/:schemaId', + app.get('/openid4vc/holder/mdoc-vcs', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(Polygon)), - ...(fetchMiddlewares(Polygon.prototype.getSchemaById)), + ...(fetchMiddlewares(HolderController)), + ...(fetchMiddlewares(HolderController.prototype.getMdocCredentials)), - async function Polygon_getSchemaById(request: ExRequest, response: ExResponse, next: any) { + async function HolderController_getMdocCredentials(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsPolygon_getSchemaById, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsHolderController_getMdocCredentials, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(Polygon); + const controller: any = await container.get(HolderController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getSchemaById', + methodName: 'getMdocCredentials', controller, response, next, @@ -1608,32 +3358,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsEndorserTransactionController_endorserTransaction: Record = { + const argsHolderController_decodeMdocCredential: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - endorserTransaction: {"in":"body","name":"endorserTransaction","required":true,"ref":"EndorserTransaction"}, + body: {"in":"body","name":"body","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"base64Url":{"dataType":"string","required":true}}}, }; - app.post('/anoncreds/transactions/endorse', + app.post('/openid4vc/holder/mdoc-vcs/decode', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(EndorserTransactionController)), - ...(fetchMiddlewares(EndorserTransactionController.prototype.endorserTransaction)), + ...(fetchMiddlewares(HolderController)), + ...(fetchMiddlewares(HolderController.prototype.decodeMdocCredential)), - async function EndorserTransactionController_endorserTransaction(request: ExRequest, response: ExResponse, next: any) { + async function HolderController_decodeMdocCredential(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsEndorserTransactionController_endorserTransaction, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsHolderController_decodeMdocCredential, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(EndorserTransactionController); + const controller: any = await container.get(HolderController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'endorserTransaction', + methodName: 'decodeMdocCredential', controller, response, next, @@ -1645,32 +3395,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsEndorserTransactionController_didNymTransaction: Record = { + const argsHolderController_resolveCredOffer: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - didNymTransaction: {"in":"body","name":"didNymTransaction","required":true,"ref":"DidNymTransaction"}, + body: {"in":"body","name":"body","required":true,"ref":"ResolveCredentialOfferBody"}, }; - app.post('/anoncreds/transactions/set-endorser-role', + app.post('/openid4vc/holder/resolve-credential-offer', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(EndorserTransactionController)), - ...(fetchMiddlewares(EndorserTransactionController.prototype.didNymTransaction)), + ...(fetchMiddlewares(HolderController)), + ...(fetchMiddlewares(HolderController.prototype.resolveCredOffer)), - async function EndorserTransactionController_didNymTransaction(request: ExRequest, response: ExResponse, next: any) { + async function HolderController_resolveCredOffer(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsEndorserTransactionController_didNymTransaction, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsHolderController_resolveCredOffer, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(EndorserTransactionController); + const controller: any = await container.get(HolderController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'didNymTransaction', + methodName: 'resolveCredOffer', controller, response, next, @@ -1682,32 +3432,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsEndorserTransactionController_writeSchemaAndCredDefOnLedger: Record = { + const argsHolderController_requestAuthorizationForCredential: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - writeTransaction: {"in":"body","name":"writeTransaction","required":true,"ref":"WriteTransaction"}, + body: {"in":"body","name":"body","required":true,"ref":"AuthorizeRequestCredentialOffer"}, }; - app.post('/anoncreds/transactions/write', + app.post('/openid4vc/holder/authorization-request', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(EndorserTransactionController)), - ...(fetchMiddlewares(EndorserTransactionController.prototype.writeSchemaAndCredDefOnLedger)), + ...(fetchMiddlewares(HolderController)), + ...(fetchMiddlewares(HolderController.prototype.requestAuthorizationForCredential)), - async function EndorserTransactionController_writeSchemaAndCredDefOnLedger(request: ExRequest, response: ExResponse, next: any) { + async function HolderController_requestAuthorizationForCredential(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsEndorserTransactionController_writeSchemaAndCredDefOnLedger, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsHolderController_requestAuthorizationForCredential, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(EndorserTransactionController); + const controller: any = await container.get(HolderController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'writeSchemaAndCredDefOnLedger', + methodName: 'requestAuthorizationForCredential', controller, response, next, @@ -1719,32 +3469,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsDidController_getDidRecordByDid: Record = { + const argsHolderController_requestCredential: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - did: {"in":"path","name":"did","required":true,"ref":"Did"}, + body: {"in":"body","name":"body","required":true,"ref":"RequestCredentialBody"}, }; - app.get('/dids/:did', + app.post('/openid4vc/holder/request-credential', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(DidController)), - ...(fetchMiddlewares(DidController.prototype.getDidRecordByDid)), + ...(fetchMiddlewares(HolderController)), + ...(fetchMiddlewares(HolderController.prototype.requestCredential)), - async function DidController_getDidRecordByDid(request: ExRequest, response: ExResponse, next: any) { + async function HolderController_requestCredential(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsDidController_getDidRecordByDid, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsHolderController_requestCredential, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(DidController); + const controller: any = await container.get(HolderController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getDidRecordByDid', + methodName: 'requestCredential', controller, response, next, @@ -1756,32 +3506,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsDidController_writeDid: Record = { + const argsHolderController_resolveProofRequest: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - createDidOptions: {"in":"body","name":"createDidOptions","required":true,"ref":"DidCreate"}, + body: {"in":"body","name":"body","required":true,"ref":"ResolveProofRequest"}, }; - app.post('/dids/write', + app.post('/openid4vc/holder/resolve-proof-request', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(DidController)), - ...(fetchMiddlewares(DidController.prototype.writeDid)), + ...(fetchMiddlewares(HolderController)), + ...(fetchMiddlewares(HolderController.prototype.resolveProofRequest)), - async function DidController_writeDid(request: ExRequest, response: ExResponse, next: any) { + async function HolderController_resolveProofRequest(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsDidController_writeDid, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsHolderController_resolveProofRequest, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(DidController); + const controller: any = await container.get(HolderController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'writeDid', + methodName: 'resolveProofRequest', controller, response, next, @@ -1793,31 +3543,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsDidController_getDids: Record = { + const argsHolderController_acceptProofRequest: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","required":true,"ref":"ResolveProofRequest"}, }; - app.get('/dids', + app.post('/openid4vc/holder/accept-proof-request', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(DidController)), - ...(fetchMiddlewares(DidController.prototype.getDids)), + ...(fetchMiddlewares(HolderController)), + ...(fetchMiddlewares(HolderController.prototype.acceptProofRequest)), - async function DidController_getDids(request: ExRequest, response: ExResponse, next: any) { + async function HolderController_acceptProofRequest(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsDidController_getDids, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsHolderController_acceptProofRequest, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(DidController); + const controller: any = await container.get(HolderController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getDids', + methodName: 'acceptProofRequest', controller, response, next, @@ -1829,32 +3580,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsSchemaController_getSchemaById: Record = { + const argsHolderController_decodeSdJwt: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - schemaId: {"in":"path","name":"schemaId","required":true,"ref":"SchemaId"}, + body: {"in":"body","name":"body","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"jwt":{"dataType":"string","required":true}}}, }; - app.get('/anoncreds/schemas/:schemaId', + app.post('/openid4vc/holder/decode-sdjwt', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(SchemaController)), - ...(fetchMiddlewares(SchemaController.prototype.getSchemaById)), + ...(fetchMiddlewares(HolderController)), + ...(fetchMiddlewares(HolderController.prototype.decodeSdJwt)), - async function SchemaController_getSchemaById(request: ExRequest, response: ExResponse, next: any) { + async function HolderController_decodeSdJwt(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsSchemaController_getSchemaById, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsHolderController_decodeSdJwt, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(SchemaController); + const controller: any = await container.get(HolderController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getSchemaById', + methodName: 'decodeSdJwt', controller, response, next, @@ -1866,32 +3617,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsSchemaController_createSchema: Record = { - request: {"in":"request","name":"request","required":true,"dataType":"object"}, - schema: {"in":"body","name":"schema","required":true,"ref":"CreateSchemaInput"}, + const argsHolderController_delete: Record = { + agentReq: {"in":"request","name":"agentReq","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","required":true,"ref":"DeleteCredentialBody"}, }; - app.post('/anoncreds/schemas', + app.delete('/openid4vc/holder/credential', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(SchemaController)), - ...(fetchMiddlewares(SchemaController.prototype.createSchema)), + ...(fetchMiddlewares(HolderController)), + ...(fetchMiddlewares(HolderController.prototype.delete)), - async function SchemaController_createSchema(request: ExRequest, response: ExResponse, next: any) { + async function HolderController_delete(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsSchemaController_createSchema, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsHolderController_delete, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(SchemaController); + const controller: any = await container.get(HolderController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'createSchema', + methodName: 'delete', controller, response, next, @@ -1903,32 +3654,149 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsCredentialDefinitionController_getCredentialDefinitionById: Record = { + const argsMultiTenancyController_createTenant: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - credentialDefinitionId: {"in":"path","name":"credentialDefinitionId","required":true,"ref":"CredentialDefinitionId"}, + createTenantOptions: {"in":"body","name":"createTenantOptions","required":true,"ref":"CreateTenantOptions"}, + }; + app.post('/multi-tenancy/create-tenant', + authenticateMiddleware([{"jwt":["Basewallet"]}]), + ...(fetchMiddlewares(MultiTenancyController)), + ...(fetchMiddlewares(MultiTenancyController.prototype.createTenant)), + + async function MultiTenancyController_createTenant(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsMultiTenancyController_createTenant, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(MultiTenancyController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createTenant', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsMultiTenancyController_getTenantToken: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + tenantId: {"in":"path","name":"tenantId","required":true,"dataType":"string"}, + notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, + internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, + }; + app.post('/multi-tenancy/get-token/:tenantId', + authenticateMiddleware([{"jwt":["Basewallet"]}]), + ...(fetchMiddlewares(MultiTenancyController)), + ...(fetchMiddlewares(MultiTenancyController.prototype.getTenantToken)), + + async function MultiTenancyController_getTenantToken(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsMultiTenancyController_getTenantToken, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(MultiTenancyController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getTenantToken', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsMultiTenancyController_getTenantById: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + tenantId: {"in":"path","name":"tenantId","required":true,"dataType":"string"}, + notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, + internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, + }; + app.get('/multi-tenancy/:tenantId', + authenticateMiddleware([{"jwt":["Basewallet"]}]), + ...(fetchMiddlewares(MultiTenancyController)), + ...(fetchMiddlewares(MultiTenancyController.prototype.getTenantById)), + + async function MultiTenancyController_getTenantById(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsMultiTenancyController_getTenantById, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(MultiTenancyController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getTenantById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsMultiTenancyController_deleteTenantById: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + tenantId: {"in":"path","name":"tenantId","required":true,"dataType":"string"}, + notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, + internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, }; - app.get('/anoncreds/credential-definitions/:credentialDefinitionId', - authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(CredentialDefinitionController)), - ...(fetchMiddlewares(CredentialDefinitionController.prototype.getCredentialDefinitionById)), + app.delete('/multi-tenancy/:tenantId', + authenticateMiddleware([{"jwt":["Basewallet"]}]), + ...(fetchMiddlewares(MultiTenancyController)), + ...(fetchMiddlewares(MultiTenancyController.prototype.deleteTenantById)), - async function CredentialDefinitionController_getCredentialDefinitionById(request: ExRequest, response: ExResponse, next: any) { + async function MultiTenancyController_deleteTenantById(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsCredentialDefinitionController_getCredentialDefinitionById, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsMultiTenancyController_deleteTenantById, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(CredentialDefinitionController); + const controller: any = await container.get(MultiTenancyController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getCredentialDefinitionById', + methodName: 'deleteTenantById', controller, response, next, @@ -1940,32 +3808,35 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsCredentialDefinitionController_createCredentialDefinition: Record = { + const argsQuestionAnswerController_getQuestionAnswerRecords: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - credentialDefinitionRequest: {"in":"body","name":"credentialDefinitionRequest","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"endorserDid":{"dataType":"string"},"endorse":{"dataType":"boolean"},"tag":{"dataType":"string","required":true},"schemaId":{"ref":"SchemaId","required":true},"issuerId":{"dataType":"string","required":true}}}, + connectionId: {"in":"query","name":"connectionId","dataType":"string"}, + role: {"in":"query","name":"role","ref":"QuestionAnswerRole"}, + state: {"in":"query","name":"state","ref":"QuestionAnswerState"}, + threadId: {"in":"query","name":"threadId","dataType":"string"}, }; - app.post('/anoncreds/credential-definitions', + app.get('/didcomm/question-answer', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(CredentialDefinitionController)), - ...(fetchMiddlewares(CredentialDefinitionController.prototype.createCredentialDefinition)), + ...(fetchMiddlewares(QuestionAnswerController)), + ...(fetchMiddlewares(QuestionAnswerController.prototype.getQuestionAnswerRecords)), - async function CredentialDefinitionController_createCredentialDefinition(request: ExRequest, response: ExResponse, next: any) { + async function QuestionAnswerController_getQuestionAnswerRecords(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsCredentialDefinitionController_createCredentialDefinition, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsQuestionAnswerController_getQuestionAnswerRecords, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(CredentialDefinitionController); + const controller: any = await container.get(QuestionAnswerController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'createCredentialDefinition', + methodName: 'getQuestionAnswerRecords', controller, response, next, @@ -1977,31 +3848,33 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsAgentController_getAgentInfo: Record = { + const argsQuestionAnswerController_sendQuestion: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, + connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, + config: {"in":"body","name":"config","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"detail":{"dataType":"string"},"validResponses":{"dataType":"array","array":{"dataType":"refObject","ref":"ValidResponse"},"required":true},"question":{"dataType":"string","required":true}}}, }; - app.get('/agent', - authenticateMiddleware([{"jwt":["tenant","dedicated","Basewallet"]}]), - ...(fetchMiddlewares(AgentController)), - ...(fetchMiddlewares(AgentController.prototype.getAgentInfo)), + app.post('/didcomm/question-answer/question/:connectionId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(QuestionAnswerController)), + ...(fetchMiddlewares(QuestionAnswerController.prototype.sendQuestion)), - async function AgentController_getAgentInfo(request: ExRequest, response: ExResponse, next: any) { + async function QuestionAnswerController_sendQuestion(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsAgentController_getAgentInfo, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsQuestionAnswerController_sendQuestion, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(AgentController); + const controller: any = await container.get(QuestionAnswerController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getAgentInfo', + methodName: 'sendQuestion', controller, response, next, @@ -2013,31 +3886,33 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsAgentController_getAgentToken: Record = { + const argsQuestionAnswerController_sendAnswer: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, + id: {"in":"path","name":"id","required":true,"ref":"RecordId"}, + body: {"in":"body","name":"body","required":true,"ref":"Record_response.string_"}, }; - app.post('/agent/token', - authenticateMiddleware([{"apiKey":[]}]), - ...(fetchMiddlewares(AgentController)), - ...(fetchMiddlewares(AgentController.prototype.getAgentToken)), + app.post('/didcomm/question-answer/answer/:id', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(QuestionAnswerController)), + ...(fetchMiddlewares(QuestionAnswerController.prototype.sendAnswer)), - async function AgentController_getAgentToken(request: ExRequest, response: ExResponse, next: any) { + async function QuestionAnswerController_sendAnswer(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsAgentController_getAgentToken, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsQuestionAnswerController_sendAnswer, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(AgentController); + const controller: any = await container.get(QuestionAnswerController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getAgentToken', + methodName: 'sendAnswer', controller, response, next, @@ -2049,31 +3924,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsAgentController_deleteWallet: Record = { + const argsQuestionAnswerController_getQuestionAnswerRecordById: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, + id: {"in":"path","name":"id","required":true,"ref":"RecordId"}, }; - app.delete('/agent/wallet', + app.get('/didcomm/question-answer/:id', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(AgentController)), - ...(fetchMiddlewares(AgentController.prototype.deleteWallet)), + ...(fetchMiddlewares(QuestionAnswerController)), + ...(fetchMiddlewares(QuestionAnswerController.prototype.getQuestionAnswerRecordById)), - async function AgentController_deleteWallet(request: ExRequest, response: ExResponse, next: any) { + async function QuestionAnswerController_getQuestionAnswerRecordById(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsAgentController_deleteWallet, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsQuestionAnswerController_getQuestionAnswerRecordById, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(AgentController); + const controller: any = await container.get(QuestionAnswerController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'deleteWallet', + methodName: 'getQuestionAnswerRecordById', controller, response, next, @@ -2085,32 +3961,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsAgentController_verify: Record = { + const argsOutOfBandController_getAllOutOfBandRecords: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - body: {"in":"body","name":"body","required":true,"ref":"VerifyDataOptions"}, + invitationId: {"in":"query","name":"invitationId","ref":"RecordId"}, }; - app.post('/agent/verify', + app.get('/didcomm/oob', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(AgentController)), - ...(fetchMiddlewares(AgentController.prototype.verify)), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.getAllOutOfBandRecords)), - async function AgentController_verify(request: ExRequest, response: ExResponse, next: any) { + async function OutOfBandController_getAllOutOfBandRecords(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsAgentController_verify, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_getAllOutOfBandRecords, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(AgentController); + const controller: any = await container.get(OutOfBandController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'verify', + methodName: 'getAllOutOfBandRecords', controller, response, next, @@ -2122,34 +3998,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsAgentController_signCredential: Record = { + const argsOutOfBandController_getOutOfBandRecordById: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - storeCredential: {"in":"query","name":"storeCredential","required":true,"dataType":"boolean"}, - dataTypeToSign: {"in":"query","name":"dataTypeToSign","required":true,"dataType":"union","subSchemas":[{"dataType":"enum","enums":["rawData"]},{"dataType":"enum","enums":["jsonLd"]}]}, - data: {"in":"body","name":"data","required":true,"dataType":"union","subSchemas":[{"ref":"CustomW3cJsonLdSignCredentialOptions"},{"ref":"SignDataOptions"}]}, + outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, }; - app.post('/agent/credential/sign', + app.get('/didcomm/oob/:outOfBandId', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(AgentController)), - ...(fetchMiddlewares(AgentController.prototype.signCredential)), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.getOutOfBandRecordById)), - async function AgentController_signCredential(request: ExRequest, response: ExResponse, next: any) { + async function OutOfBandController_getOutOfBandRecordById(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsAgentController_signCredential, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_getOutOfBandRecordById, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(AgentController); + const controller: any = await container.get(OutOfBandController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'signCredential', + methodName: 'getOutOfBandRecordById', controller, response, next, @@ -2161,32 +4035,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsAgentController_verifyCredential: Record = { + const argsOutOfBandController_createInvitation: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - credentialToVerify: {"in":"body","name":"credentialToVerify","required":true,"ref":"SafeW3cJsonLdVerifyCredentialOptions"}, + config: {"in":"body","name":"config","required":true,"dataType":"intersection","subSchemas":[{"ref":"CreateInvitationOptions"},{"ref":"RecipientKeyOption"}]}, }; - app.post('/agent/credential/verify', + app.post('/didcomm/oob/create-invitation', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(AgentController)), - ...(fetchMiddlewares(AgentController.prototype.verifyCredential)), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.createInvitation)), - async function AgentController_verifyCredential(request: ExRequest, response: ExResponse, next: any) { + async function OutOfBandController_createInvitation(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsAgentController_verifyCredential, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_createInvitation, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(AgentController); + const controller: any = await container.get(OutOfBandController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'verifyCredential', + methodName: 'createInvitation', controller, response, next, @@ -2198,35 +4072,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsQuestionAnswerController_getQuestionAnswerRecords: Record = { + const argsOutOfBandController_createLegacyConnectionlessInvitation: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - connectionId: {"in":"query","name":"connectionId","dataType":"string"}, - role: {"in":"query","name":"role","ref":"QuestionAnswerRole"}, - state: {"in":"query","name":"state","ref":"QuestionAnswerState"}, - threadId: {"in":"query","name":"threadId","dataType":"string"}, + config: {"in":"body","name":"config","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"routing":{"ref":"DidCommRouting"},"domain":{"dataType":"string","required":true},"message":{"ref":"Record_string.unknown_","required":true},"recordId":{"dataType":"string","required":true}}}, }; - app.get('/didcomm/question-answer', + app.post('/didcomm/oob/create-legacy-connectionless-invitation', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(QuestionAnswerController)), - ...(fetchMiddlewares(QuestionAnswerController.prototype.getQuestionAnswerRecords)), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.createLegacyConnectionlessInvitation)), - async function QuestionAnswerController_getQuestionAnswerRecords(request: ExRequest, response: ExResponse, next: any) { + async function OutOfBandController_createLegacyConnectionlessInvitation(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsQuestionAnswerController_getQuestionAnswerRecords, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_createLegacyConnectionlessInvitation, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(QuestionAnswerController); + const controller: any = await container.get(OutOfBandController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getQuestionAnswerRecords', + methodName: 'createLegacyConnectionlessInvitation', controller, response, next, @@ -2238,33 +4109,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsQuestionAnswerController_sendQuestion: Record = { + const argsOutOfBandController_receiveInvitation: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, - config: {"in":"body","name":"config","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"detail":{"dataType":"string"},"validResponses":{"dataType":"array","array":{"dataType":"refObject","ref":"ValidResponse"},"required":true},"question":{"dataType":"string","required":true}}}, + invitationRequest: {"in":"body","name":"invitationRequest","required":true,"ref":"ReceiveInvitationProps"}, }; - app.post('/didcomm/question-answer/question/:connectionId', + app.post('/didcomm/oob/receive-invitation', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(QuestionAnswerController)), - ...(fetchMiddlewares(QuestionAnswerController.prototype.sendQuestion)), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.receiveInvitation)), - async function QuestionAnswerController_sendQuestion(request: ExRequest, response: ExResponse, next: any) { + async function OutOfBandController_receiveInvitation(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsQuestionAnswerController_sendQuestion, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_receiveInvitation, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(QuestionAnswerController); + const controller: any = await container.get(OutOfBandController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'sendQuestion', + methodName: 'receiveInvitation', controller, response, next, @@ -2276,33 +4146,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsQuestionAnswerController_sendAnswer: Record = { + const argsOutOfBandController_receiveInvitationFromUrl: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - id: {"in":"path","name":"id","required":true,"ref":"RecordId"}, - body: {"in":"body","name":"body","required":true,"ref":"Record_response.string_"}, + invitationRequest: {"in":"body","name":"invitationRequest","required":true,"ref":"ReceiveInvitationByUrlProps"}, }; - app.post('/didcomm/question-answer/answer/:id', + app.post('/didcomm/oob/receive-invitation-url', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(QuestionAnswerController)), - ...(fetchMiddlewares(QuestionAnswerController.prototype.sendAnswer)), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.receiveInvitationFromUrl)), - async function QuestionAnswerController_sendAnswer(request: ExRequest, response: ExResponse, next: any) { + async function OutOfBandController_receiveInvitationFromUrl(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsQuestionAnswerController_sendAnswer, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_receiveInvitationFromUrl, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(QuestionAnswerController); + const controller: any = await container.get(OutOfBandController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'sendAnswer', + methodName: 'receiveInvitationFromUrl', controller, response, next, @@ -2314,32 +4183,33 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsQuestionAnswerController_getQuestionAnswerRecordById: Record = { + const argsOutOfBandController_acceptInvitation: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - id: {"in":"path","name":"id","required":true,"ref":"RecordId"}, + outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, + acceptInvitationConfig: {"in":"body","name":"acceptInvitationConfig","required":true,"ref":"AcceptInvitationConfig"}, }; - app.get('/didcomm/question-answer/:id', + app.post('/didcomm/oob/:outOfBandId/accept-invitation', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(QuestionAnswerController)), - ...(fetchMiddlewares(QuestionAnswerController.prototype.getQuestionAnswerRecordById)), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.acceptInvitation)), - async function QuestionAnswerController_getQuestionAnswerRecordById(request: ExRequest, response: ExResponse, next: any) { + async function OutOfBandController_acceptInvitation(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsQuestionAnswerController_getQuestionAnswerRecordById, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_acceptInvitation, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(QuestionAnswerController); + const controller: any = await container.get(OutOfBandController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getQuestionAnswerRecordById', + methodName: 'acceptInvitation', controller, response, next, @@ -2351,32 +4221,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsProofController_getAllProofs: Record = { + const argsOutOfBandController_deleteOutOfBandRecord: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - threadId: {"in":"query","name":"threadId","dataType":"string"}, + outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, }; - app.get('/didcomm/proofs', + app.delete('/didcomm/oob/:outOfBandId', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.getAllProofs)), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.deleteOutOfBandRecord)), - async function ProofController_getAllProofs(request: ExRequest, response: ExResponse, next: any) { + async function OutOfBandController_deleteOutOfBandRecord(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsProofController_getAllProofs, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_deleteOutOfBandRecord, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ProofController); + const controller: any = await container.get(OutOfBandController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getAllProofs', + methodName: 'deleteOutOfBandRecord', controller, response, next, @@ -2388,32 +4258,37 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsProofController_getProofById: Record = { + const argsConnectionController_getAllConnections: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - proofRecordId: {"in":"path","name":"proofRecordId","required":true,"ref":"RecordId"}, + outOfBandId: {"in":"query","name":"outOfBandId","dataType":"string"}, + alias: {"in":"query","name":"alias","dataType":"string"}, + state: {"in":"query","name":"state","ref":"DidCommDidExchangeState"}, + myDid: {"in":"query","name":"myDid","dataType":"string"}, + theirDid: {"in":"query","name":"theirDid","dataType":"string"}, + theirLabel: {"in":"query","name":"theirLabel","dataType":"string"}, }; - app.get('/didcomm/proofs/:proofRecordId', + app.get('/didcomm/connections', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.getProofById)), + ...(fetchMiddlewares(ConnectionController)), + ...(fetchMiddlewares(ConnectionController.prototype.getAllConnections)), - async function ProofController_getProofById(request: ExRequest, response: ExResponse, next: any) { + async function ConnectionController_getAllConnections(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsProofController_getProofById, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_getAllConnections, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ProofController); + const controller: any = await container.get(ConnectionController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getProofById', + methodName: 'getAllConnections', controller, response, next, @@ -2425,32 +4300,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsProofController_proposeProof: Record = { + const argsConnectionController_getConnectionById: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - requestProofProposalOptions: {"in":"body","name":"requestProofProposalOptions","required":true,"ref":"RequestProofProposalOptions"}, + connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, }; - app.post('/didcomm/proofs/propose-proof', + app.get('/didcomm/connections/:connectionId', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.proposeProof)), + ...(fetchMiddlewares(ConnectionController)), + ...(fetchMiddlewares(ConnectionController.prototype.getConnectionById)), - async function ProofController_proposeProof(request: ExRequest, response: ExResponse, next: any) { + async function ConnectionController_getConnectionById(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsProofController_proposeProof, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_getConnectionById, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ProofController); + const controller: any = await container.get(ConnectionController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'proposeProof', + methodName: 'getConnectionById', controller, response, next, @@ -2462,32 +4337,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsProofController_acceptProposal: Record = { + const argsConnectionController_deleteConnection: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - acceptProposal: {"in":"body","name":"acceptProposal","required":true,"ref":"AcceptProofProposal"}, + connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, }; - app.post('/didcomm/proofs/:proofRecordId/accept-proposal', + app.delete('/didcomm/connections/:connectionId', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.acceptProposal)), + ...(fetchMiddlewares(ConnectionController)), + ...(fetchMiddlewares(ConnectionController.prototype.deleteConnection)), - async function ProofController_acceptProposal(request: ExRequest, response: ExResponse, next: any) { + async function ConnectionController_deleteConnection(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsProofController_acceptProposal, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_deleteConnection, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ProofController); + const controller: any = await container.get(ConnectionController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'acceptProposal', + methodName: 'deleteConnection', controller, response, next, @@ -2499,32 +4374,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsProofController_requestProof: Record = { + const argsConnectionController_acceptRequest: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - requestProofOptions: {"in":"body","name":"requestProofOptions","required":true,"ref":"RequestProofOptions"}, + connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, }; - app.post('/didcomm/proofs/request-proof', + app.post('/didcomm/connections/:connectionId/accept-request', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.requestProof)), + ...(fetchMiddlewares(ConnectionController)), + ...(fetchMiddlewares(ConnectionController.prototype.acceptRequest)), - async function ProofController_requestProof(request: ExRequest, response: ExResponse, next: any) { + async function ConnectionController_acceptRequest(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsProofController_requestProof, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_acceptRequest, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ProofController); + const controller: any = await container.get(ConnectionController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'requestProof', + methodName: 'acceptRequest', controller, response, next, @@ -2536,32 +4411,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsProofController_createRequest: Record = { + const argsConnectionController_acceptResponse: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - createRequestOptions: {"in":"body","name":"createRequestOptions","required":true,"ref":"CreateProofRequestOobOptions"}, + connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, }; - app.post('/didcomm/proofs/create-request-oob', + app.post('/didcomm/connections/:connectionId/accept-response', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.createRequest)), + ...(fetchMiddlewares(ConnectionController)), + ...(fetchMiddlewares(ConnectionController.prototype.acceptResponse)), - async function ProofController_createRequest(request: ExRequest, response: ExResponse, next: any) { + async function ConnectionController_acceptResponse(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsProofController_createRequest, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_acceptResponse, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ProofController); + const controller: any = await container.get(ConnectionController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'createRequest', + methodName: 'acceptResponse', controller, response, next, @@ -2573,33 +4448,31 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsProofController_acceptRequest: Record = { + const argsConnectionController_getInvitation: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - proofRecordId: {"in":"path","name":"proofRecordId","required":true,"dataType":"string"}, - body: {"in":"body","name":"body","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"comment":{"dataType":"string"},"filterByNonRevocationRequirements":{"dataType":"boolean"},"filterByPresentationPreview":{"dataType":"boolean"}}}, + invitationId: {"in":"path","name":"invitationId","required":true,"dataType":"string"}, }; - app.post('/didcomm/proofs/:proofRecordId/accept-request', - authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.acceptRequest)), + app.get('/didcomm/url/:invitationId', + ...(fetchMiddlewares(ConnectionController)), + ...(fetchMiddlewares(ConnectionController.prototype.getInvitation)), - async function ProofController_acceptRequest(request: ExRequest, response: ExResponse, next: any) { + async function ConnectionController_getInvitation(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsProofController_acceptRequest, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_getInvitation, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ProofController); + const controller: any = await container.get(ConnectionController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'acceptRequest', + methodName: 'getInvitation', controller, response, next, @@ -2611,32 +4484,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsProofController_acceptPresentation: Record = { + const argsDidController_getDidRecordByDid: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - proofRecordId: {"in":"path","name":"proofRecordId","required":true,"dataType":"string"}, + did: {"in":"path","name":"did","required":true,"ref":"Did"}, }; - app.post('/didcomm/proofs/:proofRecordId/accept-presentation', + app.get('/dids/:did', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.acceptPresentation)), + ...(fetchMiddlewares(DidController)), + ...(fetchMiddlewares(DidController.prototype.getDidRecordByDid)), - async function ProofController_acceptPresentation(request: ExRequest, response: ExResponse, next: any) { + async function DidController_getDidRecordByDid(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsProofController_acceptPresentation, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsDidController_getDidRecordByDid, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ProofController); + const controller: any = await container.get(DidController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'acceptPresentation', + methodName: 'getDidRecordByDid', controller, response, next, @@ -2648,32 +4521,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsProofController_proofFormData: Record = { + const argsDidController_writeDid: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - proofRecordId: {"in":"path","name":"proofRecordId","required":true,"dataType":"string"}, + createDidOptions: {"in":"body","name":"createDidOptions","required":true,"ref":"DidCreate"}, }; - app.get('/didcomm/proofs/:proofRecordId/form-data', + app.post('/dids/write', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.proofFormData)), + ...(fetchMiddlewares(DidController)), + ...(fetchMiddlewares(DidController.prototype.writeDid)), - async function ProofController_proofFormData(request: ExRequest, response: ExResponse, next: any) { + async function DidController_writeDid(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsProofController_proofFormData, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsDidController_writeDid, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ProofController); + const controller: any = await container.get(DidController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'proofFormData', + methodName: 'writeDid', controller, response, next, @@ -2685,32 +4558,31 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsOutOfBandController_getAllOutOfBandRecords: Record = { + const argsDidController_getDids: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - invitationId: {"in":"query","name":"invitationId","ref":"RecordId"}, }; - app.get('/didcomm/oob', + app.get('/dids', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.getAllOutOfBandRecords)), + ...(fetchMiddlewares(DidController)), + ...(fetchMiddlewares(DidController.prototype.getDids)), - async function OutOfBandController_getAllOutOfBandRecords(request: ExRequest, response: ExResponse, next: any) { + async function DidController_getDids(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_getAllOutOfBandRecords, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsDidController_getDids, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(OutOfBandController); + const controller: any = await container.get(DidController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getAllOutOfBandRecords', + methodName: 'getDids', controller, response, next, @@ -2722,32 +4594,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsOutOfBandController_getOutOfBandRecordById: Record = { - request: {"in":"request","name":"request","required":true,"dataType":"object"}, - outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, + const argsAuthController_getOrgToken: Record = { + _request: {"in":"request","name":"_request","required":true,"dataType":"object"}, + orgId: {"in":"path","name":"orgId","required":true,"dataType":"string"}, + body: {"in":"body","name":"body","required":true,"ref":"OrgTokenRequest"}, }; - app.get('/didcomm/oob/:outOfBandId', - authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.getOutOfBandRecordById)), + app.post('/v1/orgs/:orgId/token', + ...(fetchMiddlewares(AuthController)), + ...(fetchMiddlewares(AuthController.prototype.getOrgToken)), - async function OutOfBandController_getOutOfBandRecordById(request: ExRequest, response: ExResponse, next: any) { + async function AuthController_getOrgToken(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_getOutOfBandRecordById, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsAuthController_getOrgToken, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(OutOfBandController); + const controller: any = await container.get(AuthController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getOutOfBandRecordById', + methodName: 'getOrgToken', controller, response, next, @@ -2759,32 +4631,31 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsOutOfBandController_createInvitation: Record = { + const argsAgentController_getAgentInfo: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - config: {"in":"body","name":"config","required":true,"dataType":"intersection","subSchemas":[{"ref":"CreateInvitationOptions"},{"ref":"RecipientKeyOption"}]}, }; - app.post('/didcomm/oob/create-invitation', - authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.createInvitation)), + app.get('/agent', + authenticateMiddleware([{"jwt":["tenant","dedicated","Basewallet"]}]), + ...(fetchMiddlewares(AgentController)), + ...(fetchMiddlewares(AgentController.prototype.getAgentInfo)), - async function OutOfBandController_createInvitation(request: ExRequest, response: ExResponse, next: any) { + async function AgentController_getAgentInfo(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_createInvitation, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsAgentController_getAgentInfo, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(OutOfBandController); + const controller: any = await container.get(AgentController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'createInvitation', + methodName: 'getAgentInfo', controller, response, next, @@ -2796,32 +4667,31 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsOutOfBandController_createLegacyInvitation: Record = { + const argsAgentController_getAgentToken: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - config: {"in":"body","name":"config","dataType":"intersection","subSchemas":[{"ref":"Omit_CreateLegacyInvitationConfig.routing_"},{"ref":"RecipientKeyOption"}]}, }; - app.post('/didcomm/oob/create-legacy-invitation', - authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.createLegacyInvitation)), + app.post('/agent/token', + authenticateMiddleware([{"apiKey":[]}]), + ...(fetchMiddlewares(AgentController)), + ...(fetchMiddlewares(AgentController.prototype.getAgentToken)), - async function OutOfBandController_createLegacyInvitation(request: ExRequest, response: ExResponse, next: any) { + async function AgentController_getAgentToken(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_createLegacyInvitation, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsAgentController_getAgentToken, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(OutOfBandController); + const controller: any = await container.get(AgentController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'createLegacyInvitation', + methodName: 'getAgentToken', controller, response, next, @@ -2833,32 +4703,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsOutOfBandController_createLegacyConnectionlessInvitation: Record = { + const argsAgentController_verifyCredential: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - config: {"in":"body","name":"config","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"domain":{"dataType":"string","required":true},"message":{"ref":"AgentMessageType","required":true},"recordId":{"dataType":"string","required":true}}}, + credentialToVerify: {"in":"body","name":"credentialToVerify","required":true,"dataType":"union","subSchemas":[{"ref":"SafeW3cJsonLdVerifyCredentialOptions"},{"dataType":"any"}]}, }; - app.post('/didcomm/oob/create-legacy-connectionless-invitation', + app.post('/agent/credential/verify', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.createLegacyConnectionlessInvitation)), + ...(fetchMiddlewares(AgentController)), + ...(fetchMiddlewares(AgentController.prototype.verifyCredential)), - async function OutOfBandController_createLegacyConnectionlessInvitation(request: ExRequest, response: ExResponse, next: any) { + async function AgentController_verifyCredential(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_createLegacyConnectionlessInvitation, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsAgentController_verifyCredential, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(OutOfBandController); + const controller: any = await container.get(AgentController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'createLegacyConnectionlessInvitation', + methodName: 'verifyCredential', controller, response, next, @@ -2870,32 +4740,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsOutOfBandController_receiveInvitation: Record = { + const argsSchemaController_getSchemaById: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - invitationRequest: {"in":"body","name":"invitationRequest","required":true,"ref":"ReceiveInvitationProps"}, + schemaId: {"in":"path","name":"schemaId","required":true,"ref":"SchemaId"}, }; - app.post('/didcomm/oob/receive-invitation', + app.get('/anoncreds/schemas/:schemaId', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.receiveInvitation)), + ...(fetchMiddlewares(SchemaController)), + ...(fetchMiddlewares(SchemaController.prototype.getSchemaById)), - async function OutOfBandController_receiveInvitation(request: ExRequest, response: ExResponse, next: any) { + async function SchemaController_getSchemaById(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_receiveInvitation, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsSchemaController_getSchemaById, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(OutOfBandController); + const controller: any = await container.get(SchemaController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'receiveInvitation', + methodName: 'getSchemaById', controller, response, next, @@ -2907,32 +4777,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsOutOfBandController_receiveInvitationFromUrl: Record = { + const argsSchemaController_createSchema: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - invitationRequest: {"in":"body","name":"invitationRequest","required":true,"ref":"ReceiveInvitationByUrlProps"}, + schema: {"in":"body","name":"schema","required":true,"ref":"CreateSchemaInput"}, }; - app.post('/didcomm/oob/receive-invitation-url', + app.post('/anoncreds/schemas', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.receiveInvitationFromUrl)), + ...(fetchMiddlewares(SchemaController)), + ...(fetchMiddlewares(SchemaController.prototype.createSchema)), - async function OutOfBandController_receiveInvitationFromUrl(request: ExRequest, response: ExResponse, next: any) { + async function SchemaController_createSchema(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_receiveInvitationFromUrl, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsSchemaController_createSchema, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(OutOfBandController); + const controller: any = await container.get(SchemaController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'receiveInvitationFromUrl', + methodName: 'createSchema', controller, response, next, @@ -2944,33 +4814,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsOutOfBandController_acceptInvitation: Record = { + const argsCredentialDefinitionController_getCredentialDefinitionById: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, - acceptInvitationConfig: {"in":"body","name":"acceptInvitationConfig","required":true,"ref":"AcceptInvitationConfig"}, + credentialDefinitionId: {"in":"path","name":"credentialDefinitionId","required":true,"ref":"CredentialDefinitionId"}, }; - app.post('/didcomm/oob/:outOfBandId/accept-invitation', + app.get('/anoncreds/credential-definitions/:credentialDefinitionId', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.acceptInvitation)), + ...(fetchMiddlewares(CredentialDefinitionController)), + ...(fetchMiddlewares(CredentialDefinitionController.prototype.getCredentialDefinitionById)), - async function OutOfBandController_acceptInvitation(request: ExRequest, response: ExResponse, next: any) { + async function CredentialDefinitionController_getCredentialDefinitionById(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_acceptInvitation, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsCredentialDefinitionController_getCredentialDefinitionById, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(OutOfBandController); + const controller: any = await container.get(CredentialDefinitionController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'acceptInvitation', + methodName: 'getCredentialDefinitionById', controller, response, next, @@ -2982,32 +4851,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsOutOfBandController_deleteOutOfBandRecord: Record = { + const argsCredentialDefinitionController_createCredentialDefinition: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, + credentialDefinitionRequest: {"in":"body","name":"credentialDefinitionRequest","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"endorserDid":{"dataType":"string"},"endorse":{"dataType":"boolean"},"tag":{"dataType":"string","required":true},"schemaId":{"ref":"SchemaId","required":true},"issuerId":{"dataType":"string","required":true}}}, }; - app.delete('/didcomm/oob/:outOfBandId', + app.post('/anoncreds/credential-definitions', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.deleteOutOfBandRecord)), + ...(fetchMiddlewares(CredentialDefinitionController)), + ...(fetchMiddlewares(CredentialDefinitionController.prototype.createCredentialDefinition)), - async function OutOfBandController_deleteOutOfBandRecord(request: ExRequest, response: ExResponse, next: any) { + async function CredentialDefinitionController_createCredentialDefinition(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsOutOfBandController_deleteOutOfBandRecord, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsCredentialDefinitionController_createCredentialDefinition, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(OutOfBandController); + const controller: any = await container.get(CredentialDefinitionController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'deleteOutOfBandRecord', + methodName: 'createCredentialDefinition', controller, response, next, @@ -3024,8 +4893,8 @@ export function RegisterRoutes(app: Router) { threadId: {"in":"query","name":"threadId","ref":"ThreadId"}, parentThreadId: {"in":"query","name":"parentThreadId","ref":"ThreadId"}, connectionId: {"in":"query","name":"connectionId","ref":"RecordId"}, - state: {"in":"query","name":"state","ref":"CredentialState"}, - role: {"in":"query","name":"role","ref":"CredentialRole"}, + state: {"in":"query","name":"state","ref":"DidCommCredentialState"}, + role: {"in":"query","name":"role","ref":"DidCommCredentialRole"}, }; app.get('/didcomm/credentials', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), @@ -3466,37 +5335,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsConnectionController_getAllConnections: Record = { + const argsProofController_getAllProofs: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - outOfBandId: {"in":"query","name":"outOfBandId","dataType":"string"}, - alias: {"in":"query","name":"alias","dataType":"string"}, - state: {"in":"query","name":"state","ref":"DidExchangeState"}, - myDid: {"in":"query","name":"myDid","dataType":"string"}, - theirDid: {"in":"query","name":"theirDid","dataType":"string"}, - theirLabel: {"in":"query","name":"theirLabel","dataType":"string"}, + threadId: {"in":"query","name":"threadId","dataType":"string"}, }; - app.get('/didcomm/connections', + app.get('/didcomm/proofs', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.getAllConnections)), + ...(fetchMiddlewares(ProofController)), + ...(fetchMiddlewares(ProofController.prototype.getAllProofs)), - async function ConnectionController_getAllConnections(request: ExRequest, response: ExResponse, next: any) { + async function ProofController_getAllProofs(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_getAllConnections, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsProofController_getAllProofs, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ConnectionController); + const controller: any = await container.get(ProofController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getAllConnections', + methodName: 'getAllProofs', controller, response, next, @@ -3508,32 +5372,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsConnectionController_getConnectionById: Record = { + const argsProofController_getProofById: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, + proofRecordId: {"in":"path","name":"proofRecordId","required":true,"ref":"RecordId"}, }; - app.get('/didcomm/connections/:connectionId', + app.get('/didcomm/proofs/:proofRecordId', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.getConnectionById)), + ...(fetchMiddlewares(ProofController)), + ...(fetchMiddlewares(ProofController.prototype.getProofById)), - async function ConnectionController_getConnectionById(request: ExRequest, response: ExResponse, next: any) { + async function ProofController_getProofById(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_getConnectionById, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsProofController_getProofById, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ConnectionController); + const controller: any = await container.get(ProofController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getConnectionById', + methodName: 'getProofById', controller, response, next, @@ -3545,32 +5409,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsConnectionController_deleteConnection: Record = { + const argsProofController_proposeProof: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, + requestProofProposalOptions: {"in":"body","name":"requestProofProposalOptions","required":true,"ref":"RequestProofProposalOptions"}, }; - app.delete('/didcomm/connections/:connectionId', + app.post('/didcomm/proofs/propose-proof', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.deleteConnection)), + ...(fetchMiddlewares(ProofController)), + ...(fetchMiddlewares(ProofController.prototype.proposeProof)), - async function ConnectionController_deleteConnection(request: ExRequest, response: ExResponse, next: any) { + async function ProofController_proposeProof(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_deleteConnection, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsProofController_proposeProof, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ConnectionController); + const controller: any = await container.get(ProofController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'deleteConnection', + methodName: 'proposeProof', controller, response, next, @@ -3582,32 +5446,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsConnectionController_acceptRequest: Record = { + const argsProofController_acceptProposal: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, + acceptProposal: {"in":"body","name":"acceptProposal","required":true,"ref":"AcceptProofProposal"}, }; - app.post('/didcomm/connections/:connectionId/accept-request', + app.post('/didcomm/proofs/accept-proposal', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.acceptRequest)), + ...(fetchMiddlewares(ProofController)), + ...(fetchMiddlewares(ProofController.prototype.acceptProposal)), - async function ConnectionController_acceptRequest(request: ExRequest, response: ExResponse, next: any) { + async function ProofController_acceptProposal(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_acceptRequest, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsProofController_acceptProposal, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ConnectionController); + const controller: any = await container.get(ProofController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'acceptRequest', + methodName: 'acceptProposal', controller, response, next, @@ -3619,32 +5483,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsConnectionController_acceptResponse: Record = { + const argsProofController_requestProof: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, + requestProofOptions: {"in":"body","name":"requestProofOptions","required":true,"ref":"RequestProofOptions"}, }; - app.post('/didcomm/connections/:connectionId/accept-response', + app.post('/didcomm/proofs/request-proof', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.acceptResponse)), + ...(fetchMiddlewares(ProofController)), + ...(fetchMiddlewares(ProofController.prototype.requestProof)), - async function ConnectionController_acceptResponse(request: ExRequest, response: ExResponse, next: any) { + async function ProofController_requestProof(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_acceptResponse, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsProofController_requestProof, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ConnectionController); + const controller: any = await container.get(ProofController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'acceptResponse', + methodName: 'requestProof', controller, response, next, @@ -3656,31 +5520,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsConnectionController_getInvitation: Record = { + const argsProofController_createRequest: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - invitationId: {"in":"path","name":"invitationId","required":true,"dataType":"string"}, + createRequestOptions: {"in":"body","name":"createRequestOptions","required":true,"ref":"CreateProofRequestOobOptions"}, }; - app.get('/didcomm/url/:invitationId', - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.getInvitation)), + app.post('/didcomm/proofs/create-request-oob', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(ProofController)), + ...(fetchMiddlewares(ProofController.prototype.createRequest)), - async function ConnectionController_getInvitation(request: ExRequest, response: ExResponse, next: any) { + async function ProofController_createRequest(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsConnectionController_getInvitation, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsProofController_createRequest, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(ConnectionController); + const controller: any = await container.get(ProofController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getInvitation', + methodName: 'createRequest', controller, response, next, @@ -3692,32 +5557,70 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsBasicMessageController_getBasicMessages: Record = { + const argsProofController_acceptRequest: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, + proofRecordId: {"in":"path","name":"proofRecordId","required":true,"dataType":"string"}, + body: {"in":"body","name":"body","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"comment":{"dataType":"string"},"filterByNonRevocationRequirements":{"dataType":"boolean"},"filterByPresentationPreview":{"dataType":"boolean"}}}, + }; + app.post('/didcomm/proofs/:proofRecordId/accept-request', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(ProofController)), + ...(fetchMiddlewares(ProofController.prototype.acceptRequest)), + + async function ProofController_acceptRequest(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsProofController_acceptRequest, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ProofController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptRequest', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsProofController_acceptPresentation: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + proofRecordId: {"in":"path","name":"proofRecordId","required":true,"dataType":"string"}, }; - app.get('/didcomm/basic-messages/:connectionId', + app.post('/didcomm/proofs/:proofRecordId/accept-presentation', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(BasicMessageController)), - ...(fetchMiddlewares(BasicMessageController.prototype.getBasicMessages)), + ...(fetchMiddlewares(ProofController)), + ...(fetchMiddlewares(ProofController.prototype.acceptPresentation)), - async function BasicMessageController_getBasicMessages(request: ExRequest, response: ExResponse, next: any) { + async function ProofController_acceptPresentation(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsBasicMessageController_getBasicMessages, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsProofController_acceptPresentation, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(BasicMessageController); + const controller: any = await container.get(ProofController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getBasicMessages', + methodName: 'acceptPresentation', controller, response, next, @@ -3729,33 +5632,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsBasicMessageController_sendMessage: Record = { + const argsProofController_proofFormData: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, - body: {"in":"body","name":"body","required":true,"ref":"Record_content.string_"}, + proofRecordId: {"in":"path","name":"proofRecordId","required":true,"dataType":"string"}, }; - app.post('/didcomm/basic-messages/:connectionId', + app.get('/didcomm/proofs/:proofRecordId/form-data', authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), - ...(fetchMiddlewares(BasicMessageController)), - ...(fetchMiddlewares(BasicMessageController.prototype.sendMessage)), + ...(fetchMiddlewares(ProofController)), + ...(fetchMiddlewares(ProofController.prototype.proofFormData)), - async function BasicMessageController_sendMessage(request: ExRequest, response: ExResponse, next: any) { + async function ProofController_proofFormData(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsBasicMessageController_sendMessage, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsProofController_proofFormData, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(BasicMessageController); + const controller: any = await container.get(ProofController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'sendMessage', + methodName: 'proofFormData', controller, response, next, @@ -3767,32 +5669,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsMultiTenancyController_createTenant: Record = { + const argsVerifierController_createVerifier: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - createTenantOptions: {"in":"body","name":"createTenantOptions","required":true,"ref":"CreateTenantOptions"}, + options: {"in":"body","name":"options","required":true,"ref":"OpenId4VcSiopCreateVerifierOptions"}, }; - app.post('/multi-tenancy/create-tenant', - authenticateMiddleware([{"jwt":["Basewallet"]}]), - ...(fetchMiddlewares(MultiTenancyController)), - ...(fetchMiddlewares(MultiTenancyController.prototype.createTenant)), + app.post('/openid4vc/verifier', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(VerifierController)), + ...(fetchMiddlewares(VerifierController.prototype.createVerifier)), - async function MultiTenancyController_createTenant(request: ExRequest, response: ExResponse, next: any) { + async function VerifierController_createVerifier(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsMultiTenancyController_createTenant, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsVerifierController_createVerifier, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(MultiTenancyController); + const controller: any = await container.get(VerifierController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'createTenant', + methodName: 'createVerifier', controller, response, next, @@ -3804,34 +5706,33 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsMultiTenancyController_getTenantToken: Record = { + const argsVerifierController_updateVerifierMetadata: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - tenantId: {"in":"path","name":"tenantId","required":true,"dataType":"string"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, + publicVerifierId: {"in":"path","name":"publicVerifierId","required":true,"dataType":"string"}, + verifierRecordOptions: {"in":"body","name":"verifierRecordOptions","required":true,"ref":"OpenId4VcUpdateVerifierRecordOptions"}, }; - app.post('/multi-tenancy/get-token/:tenantId', - authenticateMiddleware([{"jwt":["Basewallet"]}]), - ...(fetchMiddlewares(MultiTenancyController)), - ...(fetchMiddlewares(MultiTenancyController.prototype.getTenantToken)), + app.put('/openid4vc/verifier/:publicVerifierId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(VerifierController)), + ...(fetchMiddlewares(VerifierController.prototype.updateVerifierMetadata)), - async function MultiTenancyController_getTenantToken(request: ExRequest, response: ExResponse, next: any) { + async function VerifierController_updateVerifierMetadata(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsMultiTenancyController_getTenantToken, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsVerifierController_updateVerifierMetadata, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(MultiTenancyController); + const controller: any = await container.get(VerifierController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getTenantToken', + methodName: 'updateVerifierMetadata', controller, response, next, @@ -3843,34 +5744,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsMultiTenancyController_getTenantById: Record = { + const argsVerifierController_getVerifiersByQuery: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - tenantId: {"in":"path","name":"tenantId","required":true,"dataType":"string"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, + publicVerifierId: {"in":"query","name":"publicVerifierId","dataType":"string"}, }; - app.get('/multi-tenancy/:tenantId', - authenticateMiddleware([{"jwt":["Basewallet"]}]), - ...(fetchMiddlewares(MultiTenancyController)), - ...(fetchMiddlewares(MultiTenancyController.prototype.getTenantById)), + app.get('/openid4vc/verifier', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(VerifierController)), + ...(fetchMiddlewares(VerifierController.prototype.getVerifiersByQuery)), - async function MultiTenancyController_getTenantById(request: ExRequest, response: ExResponse, next: any) { + async function VerifierController_getVerifiersByQuery(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsMultiTenancyController_getTenantById, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsVerifierController_getVerifiersByQuery, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(MultiTenancyController); + const controller: any = await container.get(VerifierController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'getTenantById', + methodName: 'getVerifiersByQuery', controller, response, next, @@ -3882,34 +5781,69 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - const argsMultiTenancyController_deleteTenantById: Record = { + const argsVerifierController_getVerifier: Record = { request: {"in":"request","name":"request","required":true,"dataType":"object"}, - tenantId: {"in":"path","name":"tenantId","required":true,"dataType":"string"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, + publicVerifierId: {"in":"path","name":"publicVerifierId","required":true,"dataType":"string"}, }; - app.delete('/multi-tenancy/:tenantId', - authenticateMiddleware([{"jwt":["Basewallet"]}]), - ...(fetchMiddlewares(MultiTenancyController)), - ...(fetchMiddlewares(MultiTenancyController.prototype.deleteTenantById)), + app.get('/openid4vc/verifier/:publicVerifierId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(VerifierController)), + ...(fetchMiddlewares(VerifierController.prototype.getVerifier)), - async function MultiTenancyController_deleteTenantById(request: ExRequest, response: ExResponse, next: any) { + async function VerifierController_getVerifier(request: ExRequest, response: ExResponse, next: any) { // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa let validatedArgs: any[] = []; try { - validatedArgs = templateService.getValidatedArgs({ args: argsMultiTenancyController_deleteTenantById, request, response }); + validatedArgs = templateService.getValidatedArgs({ args: argsVerifierController_getVerifier, request, response }); const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - const controller: any = await container.get(MultiTenancyController); + const controller: any = await container.get(VerifierController); if (typeof controller['setStatus'] === 'function') { controller.setStatus(undefined); } await templateService.apiHandler({ - methodName: 'deleteTenantById', + methodName: 'getVerifier', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + const argsVerifierController_deleteVerifier: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + verifierId: {"in":"path","name":"verifierId","required":true,"dataType":"string"}, + }; + app.delete('/openid4vc/verifier/:verifierId', + authenticateMiddleware([{"jwt":["tenant","dedicated"]}]), + ...(fetchMiddlewares(VerifierController)), + ...(fetchMiddlewares(VerifierController.prototype.deleteVerifier)), + + async function VerifierController_deleteVerifier(request: ExRequest, response: ExResponse, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args: argsVerifierController_deleteVerifier, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(VerifierController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'deleteVerifier', controller, response, next, diff --git a/src/routes/swagger.json b/src/routes/swagger.json index b1ae2ef3..4fceed67 100644 --- a/src/routes/swagger.json +++ b/src/routes/swagger.json @@ -7,6 +7,389 @@ "requestBodies": {}, "responses": {}, "schemas": { + "Curve": { + "type": "string", + "enum": [ + "Ed25519", + "X25519", + "P-256", + "P-384", + "P-521", + "secp256k1" + ] + }, + "AuthorityAndSubjectKeyDto": { + "properties": { + "seed": { + "type": "string", + "example": "my-seed-12345" + }, + "publicKeyBase58": { + "type": "string", + "example": "3yPQbnk6WwLgX8K3JZ4t7vBnJ8XqY2mMpRcD9fNvGtHw" + }, + "keyType": { + "$ref": "#/components/schemas/Curve", + "example": "p256" + } + }, + "type": "object", + "additionalProperties": false + }, + "X509CertificateIssuerAndSubjectOptionsDto": { + "properties": { + "countryName": { + "type": "string", + "example": "US" + }, + "stateOrProvinceName": { + "type": "string", + "example": "California" + }, + "organizationalUnit": { + "type": "string", + "example": "IT Department" + }, + "commonName": { + "type": "string", + "example": "Example Corporation" + } + }, + "type": "object", + "additionalProperties": false + }, + "ValidityDto": { + "properties": { + "notBefore": { + "type": "string", + "format": "date-time", + "example": "2024-01-01T00:00:00.000Z" + }, + "notAfter": { + "type": "string", + "format": "date-time", + "example": "2025-01-01T00:00:00.000Z" + } + }, + "type": "object", + "additionalProperties": false + }, + "X509KeyUsage": { + "enum": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128, + 256 + ], + "type": "number" + }, + "KeyUsageDto": { + "properties": { + "usages": { + "items": { + "$ref": "#/components/schemas/X509KeyUsage" + }, + "type": "array", + "example": [ + "digitalSignature", + "keyEncipherment", + "crlSign" + ] + }, + "markAsCritical": { + "type": "boolean", + "example": true + } + }, + "required": [ + "usages" + ], + "type": "object", + "additionalProperties": false + }, + "X509ExtendedKeyUsage": { + "enum": [ + "1.3.6.1.5.5.7.3.1", + "1.3.6.1.5.5.7.3.2", + "1.3.6.1.5.5.7.3.3", + "1.3.6.1.5.5.7.3.4", + "1.3.6.1.5.5.7.3.8", + "1.3.6.1.5.5.7.3.9", + "1.0.18013.5.1.2" + ], + "type": "string" + }, + "ExtendedKeyUsageDto": { + "properties": { + "usages": { + "items": { + "$ref": "#/components/schemas/X509ExtendedKeyUsage" + }, + "type": "array", + "example": [ + "MdlDs", + "ServerAuth", + "ClientAuth" + ] + }, + "markAsCritical": { + "type": "boolean", + "example": true + } + }, + "required": [ + "usages" + ], + "type": "object", + "additionalProperties": false + }, + "AuthorityAndSubjectKeyIdentifierDto": { + "properties": { + "include": { + "type": "boolean", + "example": true + }, + "markAsCritical": { + "type": "boolean", + "example": true + } + }, + "required": [ + "include" + ], + "type": "object", + "additionalProperties": false + }, + "GeneralNameType": { + "enum": [ + "dns", + "dn", + "email", + "guid", + "ip", + "url", + "upn", + "id" + ], + "type": "string" + }, + "NameDto": { + "properties": { + "type": { + "$ref": "#/components/schemas/GeneralNameType", + "example": "dns" + }, + "value": { + "type": "string", + "example": "example.com" + } + }, + "required": [ + "type", + "value" + ], + "type": "object", + "additionalProperties": false + }, + "NameListDto": { + "properties": { + "name": { + "items": { + "$ref": "#/components/schemas/NameDto" + }, + "type": "array", + "example": [ + { + "type": "dns", + "value": "example.com" + }, + { + "type": "email", + "value": "admin@example.com" + } + ] + }, + "markAsCritical": { + "type": "boolean", + "example": true + } + }, + "required": [ + "name" + ], + "type": "object", + "additionalProperties": false + }, + "BasicConstraintsDto": { + "properties": { + "ca": { + "type": "boolean", + "example": false + }, + "pathLenConstraint": { + "type": "number", + "format": "double", + "example": 0 + }, + "markAsCritical": { + "type": "boolean", + "example": true + } + }, + "required": [ + "ca" + ], + "type": "object", + "additionalProperties": false + }, + "CrlDistributionPointsDto": { + "properties": { + "urls": { + "items": { + "type": "string" + }, + "type": "array", + "example": [ + "http://crl.example.com/ca.crl" + ] + }, + "markAsCritical": { + "type": "boolean", + "example": true + } + }, + "required": [ + "urls" + ], + "type": "object", + "additionalProperties": false + }, + "X509CertificateExtensionsOptionsDto": { + "properties": { + "keyUsage": { + "$ref": "#/components/schemas/KeyUsageDto" + }, + "extendedKeyUsage": { + "$ref": "#/components/schemas/ExtendedKeyUsageDto" + }, + "authorityKeyIdentifier": { + "$ref": "#/components/schemas/AuthorityAndSubjectKeyIdentifierDto" + }, + "subjectKeyIdentifier": { + "$ref": "#/components/schemas/AuthorityAndSubjectKeyIdentifierDto" + }, + "issuerAlternativeName": { + "$ref": "#/components/schemas/NameListDto" + }, + "subjectAlternativeName": { + "$ref": "#/components/schemas/NameListDto" + }, + "basicConstraints": { + "$ref": "#/components/schemas/BasicConstraintsDto" + }, + "crlDistributionPoints": { + "$ref": "#/components/schemas/CrlDistributionPointsDto" + } + }, + "type": "object", + "additionalProperties": false + }, + "X509CreateCertificateOptionsDto": { + "properties": { + "authorityKey": { + "$ref": "#/components/schemas/AuthorityAndSubjectKeyDto" + }, + "subjectPublicKey": { + "$ref": "#/components/schemas/AuthorityAndSubjectKeyDto" + }, + "serialNumber": { + "type": "string", + "example": "1234567890" + }, + "issuer": { + "anyOf": [ + { + "$ref": "#/components/schemas/X509CertificateIssuerAndSubjectOptionsDto" + }, + { + "type": "string" + } + ] + }, + "subject": { + "anyOf": [ + { + "$ref": "#/components/schemas/X509CertificateIssuerAndSubjectOptionsDto" + }, + { + "type": "string" + } + ] + }, + "validity": { + "$ref": "#/components/schemas/ValidityDto" + }, + "extensions": { + "$ref": "#/components/schemas/X509CertificateExtensionsOptionsDto" + } + }, + "required": [ + "issuer" + ], + "type": "object", + "additionalProperties": false + }, + "X509ImportCertificateOptionsDto": { + "properties": { + "certificate": { + "type": "string" + }, + "privateKey": { + "type": "string" + }, + "keyType": {} + }, + "required": [ + "certificate", + "keyType" + ], + "type": "object", + "additionalProperties": false + }, + "PublicJwk": { + "properties": {}, + "type": "object", + "additionalProperties": false + }, + "Uint8Array": { + "description": "A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the\nrequested number of bytes could not be allocated an exception is raised.", + "properties": {}, + "type": "object", + "additionalProperties": false + }, + "AnyUint8Array": { + "$ref": "#/components/schemas/Uint8Array" + }, + "X509Certificate": { + "properties": { + "publicJwk": { + "$ref": "#/components/schemas/PublicJwk" + }, + "privateKey": { + "$ref": "#/components/schemas/AnyUint8Array" + } + }, + "required": [ + "publicJwk" + ], + "type": "object", + "additionalProperties": false + }, "Record_string.unknown_": { "properties": {}, "additionalProperties": {}, @@ -134,1432 +517,1504 @@ } ] }, - "EndorserTransaction": { + "JwtObject": { "properties": { - "transaction": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/Record_string.unknown_" - } - ] - }, - "endorserDid": { - "type": "string" + "alg": { + "items": { + "type": "string" + }, + "type": "array" } }, "required": [ - "transaction", - "endorserDid" + "alg" ], "type": "object", "additionalProperties": false }, - "DidRegistrationSecretOptions": { - "$ref": "#/components/schemas/Record_string.unknown_" + "LdpObject": { + "properties": { + "proof_type": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "proof_type" + ], + "type": "object", + "additionalProperties": false }, - "DidOperationStateWait": { + "DiObject": { "properties": { - "state": { - "type": "string", - "enum": [ - "wait" - ], - "nullable": false - }, - "did": { - "type": "string" - }, - "secret": { - "$ref": "#/components/schemas/DidRegistrationSecretOptions" + "proof_type": { + "items": { + "type": "string" + }, + "type": "array" }, - "didDocument": { - "$ref": "#/components/schemas/DidDocument" + "cryptosuite": { + "items": { + "type": "string" + }, + "type": "array" } }, "required": [ - "state" + "proof_type", + "cryptosuite" ], "type": "object", "additionalProperties": false }, - "DidOperationStateActionBase": { + "SdJwtObject": { "properties": { - "state": { - "type": "string", - "enum": [ - "action" - ], - "nullable": false - }, - "action": { - "type": "string" - }, - "did": { - "type": "string" - }, - "secret": { - "$ref": "#/components/schemas/DidRegistrationSecretOptions" - }, - "didDocument": { - "$ref": "#/components/schemas/DidDocument" + "undefined": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object", + "additionalProperties": false + }, + "MsoMdocObject": { + "properties": { + "alg": { + "items": { + "type": "string" + }, + "type": "array" } }, "required": [ - "state", - "action" + "alg" ], "type": "object", "additionalProperties": false }, - "DidOperationStateFinished": { + "Format": { "properties": { - "state": { - "type": "string", - "enum": [ - "finished" - ], - "nullable": false + "jwt": { + "$ref": "#/components/schemas/JwtObject" }, - "did": { - "type": "string" + "jwt_vc": { + "$ref": "#/components/schemas/JwtObject" }, - "secret": { - "$ref": "#/components/schemas/DidRegistrationSecretOptions" + "jwt_vc_json": { + "$ref": "#/components/schemas/JwtObject" }, - "didDocument": { - "$ref": "#/components/schemas/DidDocument" + "jwt_vp": { + "$ref": "#/components/schemas/JwtObject" + }, + "jwt_vp_json": { + "$ref": "#/components/schemas/JwtObject" + }, + "ldp": { + "$ref": "#/components/schemas/LdpObject" + }, + "ldp_vc": { + "$ref": "#/components/schemas/LdpObject" + }, + "ldp_vp": { + "$ref": "#/components/schemas/LdpObject" + }, + "di": { + "$ref": "#/components/schemas/DiObject" + }, + "di_vc": { + "$ref": "#/components/schemas/DiObject" + }, + "di_vp": { + "$ref": "#/components/schemas/DiObject" + }, + "undefined": { + "$ref": "#/components/schemas/SdJwtObject" + }, + "mso_mdoc": { + "$ref": "#/components/schemas/MsoMdocObject" } }, - "required": [ - "state", - "did", - "didDocument" - ], "type": "object", "additionalProperties": false }, - "DidOperationStateFailed": { + "Issuance": { "properties": { - "state": { - "type": "string", - "enum": [ - "failed" - ], - "nullable": false - }, - "did": { + "manifest": { "type": "string" + } + }, + "type": "object", + "additionalProperties": {} + }, + "Optionality": { + "type": "string", + "enum": [ + "required", + "preferred" + ] + }, + "Directives": { + "type": "string", + "enum": [ + "required", + "allowed", + "disallowed" + ] + }, + "PdStatus": { + "properties": { + "directive": { + "$ref": "#/components/schemas/Directives" + } + }, + "type": "object", + "additionalProperties": false + }, + "Statuses": { + "properties": { + "active": { + "$ref": "#/components/schemas/PdStatus" }, - "secret": { - "$ref": "#/components/schemas/DidRegistrationSecretOptions" - }, - "didDocument": { - "$ref": "#/components/schemas/DidDocument" + "suspended": { + "$ref": "#/components/schemas/PdStatus" }, - "reason": { - "type": "string" + "revoked": { + "$ref": "#/components/schemas/PdStatus" } }, - "required": [ - "state", - "reason" - ], "type": "object", "additionalProperties": false }, - "DidRegistrationMetadata": { - "$ref": "#/components/schemas/Record_string.unknown_" + "OneOfNumberStringBoolean": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number", + "format": "double" + }, + { + "type": "string" + } + ] }, - "DidResolutionMetadata": { + "OneOfNumberString": { + "anyOf": [ + { + "type": "number", + "format": "double" + }, + { + "type": "string" + } + ] + }, + "FilterV2": { "properties": { - "contentType": { + "const": { + "$ref": "#/components/schemas/OneOfNumberStringBoolean" + }, + "enum": { + "items": { + "$ref": "#/components/schemas/OneOfNumberStringBoolean" + }, + "type": "array" + }, + "exclusiveMinimum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "exclusiveMaximum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "format": { "type": "string" }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "string", - "enum": [ - "invalidDid", - "notFound", - "representationNotSupported", - "unsupportedDidMethod" - ] - } - ] + "formatMaximum": { + "type": "string" }, - "message": { + "formatMinimum": { "type": "string" }, - "servedFromCache": { - "type": "boolean", - "description": "Whether the did document was served from the cache" + "formatExclusiveMaximum": { + "type": "string" }, - "servedFromDidRecord": { - "type": "boolean", - "description": "Whether the did document was served from a local did record" + "formatExclusiveMinimum": { + "type": "string" + }, + "minLength": { + "type": "number", + "format": "double" + }, + "maxLength": { + "type": "number", + "format": "double" + }, + "minimum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "maximum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "not": { + "additionalProperties": false, + "type": "object" + }, + "pattern": { + "type": "string" + }, + "type": { + "type": "string" + }, + "contains": { + "$ref": "#/components/schemas/FilterV2" + }, + "items": { + "$ref": "#/components/schemas/FilterV2Items" } }, "type": "object", "additionalProperties": false }, - "DidCreateResult_DidOperationStateActionBase_": { + "FilterV2Items": { "properties": { - "jobId": { + "const": { + "$ref": "#/components/schemas/OneOfNumberStringBoolean" + }, + "enum": { + "items": { + "$ref": "#/components/schemas/OneOfNumberStringBoolean" + }, + "type": "array" + }, + "exclusiveMinimum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "exclusiveMaximum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "format": { "type": "string" }, - "didState": { - "anyOf": [ - { - "$ref": "#/components/schemas/DidOperationStateWait" - }, - { - "$ref": "#/components/schemas/DidOperationStateActionBase" - }, - { - "$ref": "#/components/schemas/DidOperationStateFinished" - }, - { - "$ref": "#/components/schemas/DidOperationStateFailed" - } - ] + "formatMaximum": { + "type": "string" + }, + "formatMinimum": { + "type": "string" + }, + "formatExclusiveMaximum": { + "type": "string" + }, + "formatExclusiveMinimum": { + "type": "string" + }, + "minLength": { + "type": "number", + "format": "double" + }, + "maxLength": { + "type": "number", + "format": "double" + }, + "minimum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "maximum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "not": { + "additionalProperties": false, + "type": "object" + }, + "pattern": { + "type": "string" + }, + "type": { + "type": "string" }, - "didRegistrationMetadata": { - "$ref": "#/components/schemas/DidRegistrationMetadata" + "contains": { + "$ref": "#/components/schemas/FilterV2" }, - "didDocumentMetadata": { - "$ref": "#/components/schemas/DidResolutionMetadata" + "items": { + "$ref": "#/components/schemas/FilterV2Items" } }, - "required": [ - "didState", - "didRegistrationMetadata", - "didDocumentMetadata" - ], "type": "object", "additionalProperties": false }, - "DidNymTransaction": { + "FieldV2": { "properties": { - "did": { + "id": { + "type": "string" + }, + "path": { + "items": { + "type": "string" + }, + "type": "array" + }, + "purpose": { "type": "string" }, - "nymRequest": { + "filter": { + "$ref": "#/components/schemas/FilterV2" + }, + "predicate": { + "$ref": "#/components/schemas/Optionality" + }, + "intent_to_retain": { + "type": "boolean" + }, + "name": { "type": "string" + }, + "optional": { + "type": "boolean" } }, "required": [ - "did", - "nymRequest" + "path" ], "type": "object", "additionalProperties": false }, - "AnonCredsSchema": { + "HolderSubject": { "properties": { - "issuerId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "attrNames": { + "field_id": { "items": { "type": "string" }, "type": "array" + }, + "directive": { + "$ref": "#/components/schemas/Optionality" } }, "required": [ - "issuerId", - "name", - "version", - "attrNames" + "field_id", + "directive" ], "type": "object", "additionalProperties": false }, - "RegisterSchemaReturnStateWait": { + "ConstraintsV2": { "properties": { - "state": { - "type": "string", - "enum": [ - "wait" - ], - "nullable": false + "limit_disclosure": { + "$ref": "#/components/schemas/Optionality" }, - "schema": { - "$ref": "#/components/schemas/AnonCredsSchema" + "statuses": { + "$ref": "#/components/schemas/Statuses" }, - "schemaId": { - "type": "string" + "fields": { + "items": { + "$ref": "#/components/schemas/FieldV2" + }, + "type": "array" + }, + "subject_is_issuer": { + "$ref": "#/components/schemas/Optionality" + }, + "is_holder": { + "items": { + "$ref": "#/components/schemas/HolderSubject" + }, + "type": "array" + }, + "same_subject": { + "items": { + "$ref": "#/components/schemas/HolderSubject" + }, + "type": "array" } }, - "required": [ - "state" - ], "type": "object", "additionalProperties": false }, - "RegisterSchemaReturnStateAction": { + "InputDescriptorV2Model": { "properties": { - "state": { - "type": "string", - "enum": [ - "action" - ], - "nullable": false - }, - "action": { + "id": { "type": "string" }, - "schema": { - "$ref": "#/components/schemas/AnonCredsSchema" + "name": { + "type": "string" }, - "schemaId": { + "purpose": { "type": "string" + }, + "format": { + "$ref": "#/components/schemas/Format" + }, + "group": { + "items": { + "type": "string" + }, + "type": "array" + }, + "issuance": { + "items": { + "$ref": "#/components/schemas/Issuance" + }, + "type": "array" + }, + "constraints": { + "$ref": "#/components/schemas/ConstraintsV2" } }, "required": [ - "state", - "action", - "schema", - "schemaId" + "id", + "constraints" ], "type": "object", "additionalProperties": false }, - "RegisterSchemaReturnStateFinished": { + "Rules": { + "type": "string", + "enum": [ + "all", + "pick" + ] + }, + "SubmissionRequirement": { "properties": { - "state": { - "type": "string", - "enum": [ - "finished" - ], - "nullable": false + "name": { + "type": "string" }, - "schema": { - "$ref": "#/components/schemas/AnonCredsSchema" + "purpose": { + "type": "string" }, - "schemaId": { + "rule": { + "$ref": "#/components/schemas/Rules" + }, + "count": { + "type": "number", + "format": "double" + }, + "min": { + "type": "number", + "format": "double" + }, + "max": { + "type": "number", + "format": "double" + }, + "from": { "type": "string" + }, + "from_nested": { + "items": { + "$ref": "#/components/schemas/SubmissionRequirement" + }, + "type": "array" } }, "required": [ - "state", - "schema", - "schemaId" + "rule" ], "type": "object", "additionalProperties": false }, - "RegisterSchemaReturnStateFailed": { + "InputDescriptorV2": { "properties": { - "state": { - "type": "string", - "enum": [ - "failed" - ], - "nullable": false - }, - "reason": { + "id": { "type": "string" }, - "schema": { - "$ref": "#/components/schemas/AnonCredsSchema" + "name": { + "type": "string" }, - "schemaId": { + "purpose": { "type": "string" + }, + "format": { + "$ref": "#/components/schemas/Format" + }, + "group": { + "items": { + "type": "string" + }, + "type": "array" + }, + "issuance": { + "items": { + "$ref": "#/components/schemas/Issuance" + }, + "type": "array" + }, + "constraints": { + "$ref": "#/components/schemas/ConstraintsV2" } }, "required": [ - "state", - "reason" + "id", + "constraints" ], "type": "object", "additionalProperties": false }, - "AnonCredsCredentialDefinition": { + "PresentationDefinitionV2": { "properties": { - "issuerId": { + "id": { "type": "string" }, - "schemaId": { + "name": { "type": "string" }, - "type": { - "type": "string", - "enum": [ - "CL" - ], - "nullable": false - }, - "tag": { + "purpose": { "type": "string" }, - "value": { - "properties": { - "revocation": {}, - "primary": { - "$ref": "#/components/schemas/Record_string.unknown_" - } + "format": { + "$ref": "#/components/schemas/Format" + }, + "submission_requirements": { + "items": { + "$ref": "#/components/schemas/SubmissionRequirement" }, - "required": [ - "primary" - ], + "type": "array" + }, + "input_descriptors": { + "items": { + "$ref": "#/components/schemas/InputDescriptorV2" + }, + "type": "array" + }, + "frame": { + "additionalProperties": false, "type": "object" } }, "required": [ - "issuerId", - "schemaId", - "type", - "tag", - "value" + "id", + "input_descriptors" ], "type": "object", "additionalProperties": false }, - "RegisterCredentialDefinitionReturnStateWait": { + "DifPresentationExchangeDefinitionV2Model": { "properties": { - "state": { - "type": "string", - "enum": [ - "wait" - ], - "nullable": false + "id": { + "type": "string" }, - "credentialDefinition": { - "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + "name": { + "type": "string" }, - "credentialDefinitionId": { + "purpose": { "type": "string" + }, + "format": { + "$ref": "#/components/schemas/Format" + }, + "submission_requirements": { + "items": {}, + "type": "array" + }, + "input_descriptors": { + "items": { + "$ref": "#/components/schemas/InputDescriptorV2Model" + }, + "type": "array" + }, + "frame": { + "additionalProperties": false, + "type": "object" } }, "required": [ - "state" + "id", + "input_descriptors" ], "type": "object", "additionalProperties": false }, - "RegisterCredentialDefinitionReturnStateAction": { + "PresentationDefinition": { "properties": { - "state": { - "type": "string", - "enum": [ - "action" - ], - "nullable": false - }, - "action": { - "type": "string" - }, - "credentialDefinitionId": { - "type": "string" - }, - "credentialDefinition": { - "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + "definition": { + "$ref": "#/components/schemas/DifPresentationExchangeDefinitionV2Model" } }, "required": [ - "state", - "action", - "credentialDefinitionId", - "credentialDefinition" + "definition" ], "type": "object", "additionalProperties": false }, - "RegisterCredentialDefinitionReturnStateFinished": { + "DcqlDefinition": { "properties": { - "state": { - "type": "string", - "enum": [ - "finished" - ], - "nullable": false - }, - "credentialDefinition": { - "$ref": "#/components/schemas/AnonCredsCredentialDefinition" - }, - "credentialDefinitionId": { - "type": "string" - } + "query": {} }, "required": [ - "state", - "credentialDefinition", - "credentialDefinitionId" + "query" ], "type": "object", "additionalProperties": false }, - "RegisterCredentialDefinitionReturnStateFailed": { + "ResponseModeEnum": { + "enum": [ + "direct_post", + "direct_post.jwt", + "dc_api", + "dc_api.jwt" + ], + "type": "string" + }, + "OpenId4VcJwtIssuerDid": { "properties": { - "state": { + "didUrl": { + "type": "string" + }, + "method": { "type": "string", "enum": [ - "failed" + "did" ], "nullable": false - }, - "reason": { - "type": "string" - }, - "credentialDefinition": { - "$ref": "#/components/schemas/AnonCredsCredentialDefinition" - }, - "credentialDefinitionId": { - "type": "string" } }, "required": [ - "state", - "reason" + "didUrl", + "method" ], - "type": "object", - "additionalProperties": false + "type": "object" }, - "WriteTransaction": { + "OpenId4VcIssuerX5c": { "properties": { - "endorsedTransaction": { + "keyId": { "type": "string" }, - "endorserDid": { + "alg": { "type": "string" }, - "schema": { - "properties": { - "attributes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "version": { - "type": "string" - }, - "name": { - "type": "string" - }, - "issuerId": { - "type": "string" - } + "x5c": { + "items": { + "type": "string" }, - "required": [ - "attributes", - "version", - "name", - "issuerId" + "type": "array" + }, + "issuer": { + "type": "string" + }, + "method": { + "type": "string", + "enum": [ + "x5c" ], - "type": "object" + "nullable": false + } + }, + "required": [ + "x5c", + "method" + ], + "type": "object" + }, + "ClientIdPrefix": { + "enum": [ + "x509_san_dns", + "x509_hash" + ], + "type": "string" + }, + "OpenId4VcIssuerX5cOptions": { + "allOf": [ + { + "$ref": "#/components/schemas/OpenId4VcIssuerX5c" }, - "credentialDefinition": { + { "properties": { - "type": { - "type": "string" - }, - "value": {}, - "tag": { - "type": "string" - }, - "issuerId": { - "type": "string" - }, - "schemaId": { - "type": "string" + "clientIdPrefix": { + "$ref": "#/components/schemas/ClientIdPrefix" } }, - "required": [ - "type", - "value", - "tag", - "issuerId", - "schemaId" - ], "type": "object" } - }, - "required": [ - "endorsedTransaction" - ], - "type": "object", - "additionalProperties": false + ] }, - "DIDDocumentMetadata": { - "description": "Represents metadata about the DID document resulting from a {@link Resolvable.resolve} operation.", + "CreateAuthorizationRequest": { "properties": { - "created": { + "verifierId": { "type": "string" }, - "updated": { - "type": "string" - }, - "deactivated": { - "type": "boolean" - }, - "versionId": { - "type": "string" + "presentationExchange": { + "$ref": "#/components/schemas/PresentationDefinition" }, - "nextUpdate": { - "type": "string" + "dcql": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/DcqlDefinition" + } + ] }, - "nextVersionId": { - "type": "string" + "responseMode": { + "$ref": "#/components/schemas/ResponseModeEnum" }, - "equivalentId": { - "type": "string" + "requestSigner": { + "anyOf": [ + { + "$ref": "#/components/schemas/OpenId4VcJwtIssuerDid" + }, + { + "$ref": "#/components/schemas/OpenId4VcIssuerX5cOptions" + } + ] }, - "canonicalId": { - "type": "string" + "expectedOrigins": { + "items": { + "type": "string" + }, + "type": "array" } }, + "required": [ + "verifierId", + "requestSigner" + ], "type": "object", "additionalProperties": false }, - "Did": { - "type": "string", - "example": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" + "OpenId4VcVerificationSessionRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" }, - "KeyType": { + "OpenId4VcVerificationSessionState": { "enum": [ - "ed25519", - "bls12381g1g2", - "bls12381g1", - "bls12381g2", - "x25519", - "p256", - "p384", - "p521", - "k256" + "RequestCreated", + "RequestUriRetrieved", + "ResponseVerified", + "Error" ], "type": "string" }, - "DidCreate": { + "OpenId4VCDCQLVerificationSessionRecord": { "properties": { - "keyType": { - "$ref": "#/components/schemas/KeyType" - }, - "seed": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "method": { - "type": "string" - }, - "network": { - "type": "string" - }, - "did": { + "verificationSessionId": { "type": "string" }, - "role": { - "type": "string" - }, - "endorserDid": { - "type": "string" - }, - "didDocument": { - "$ref": "#/components/schemas/DidDocument" - }, - "privatekey": { - "type": "string" + "authorizationResponse": { + "$ref": "#/components/schemas/Record_string.unknown_" }, - "endpoint": { + "origin": { "type": "string" } }, "required": [ - "method" + "verificationSessionId", + "authorizationResponse" ], "type": "object", "additionalProperties": false }, - "DidRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" + "OpenId4VcIssuerRecord": { + "$ref": "#/components/schemas/Record_string.unknown_", + "description": "For OID4VC you need to expose metadata files. Each issuer needs to host this metadata. This is not the case for DIDComm where we can just have one /didcomm endpoint.\nSo we create a record per openid issuer/verifier that you want, and each tenant can create multiple issuers/verifiers which have different endpoints\nand metadata files" }, - "AnonCredsResolutionMetadata": { + "Logo": { "properties": { - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "string", - "enum": [ - "invalid", - "notFound", - "unsupportedAnonCredsMethod" - ] - } - ] + "uri": { + "type": "string" }, - "message": { + "alt_text": { "type": "string" } }, "type": "object", - "additionalProperties": false - }, - "CredoExtensible": { - "$ref": "#/components/schemas/Record_string.unknown_" + "additionalProperties": {} }, - "GetSchemaReturn": { + "CredentialDisplay": { "properties": { - "schema": { - "$ref": "#/components/schemas/AnonCredsSchema" + "name": { + "type": "string" }, - "schemaId": { + "locale": { "type": "string" }, - "resolutionMetadata": { - "$ref": "#/components/schemas/AnonCredsResolutionMetadata" + "logo": { + "$ref": "#/components/schemas/Logo" + } + }, + "type": "object", + "additionalProperties": {} + }, + "AuthorizationServerClientAuth": { + "properties": { + "clientId": { + "type": "string" }, - "schemaMetadata": { - "$ref": "#/components/schemas/CredoExtensible" + "clientSecret": { + "type": "string" } }, "required": [ - "schemaId", - "resolutionMetadata", - "schemaMetadata" + "clientId", + "clientSecret" ], "type": "object", "additionalProperties": false }, - "SchemaId": { - "type": "string", - "example": "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0" - }, - "RegisterSchemaReturn": { + "AuthorizationServerConfig": { "properties": { - "jobId": { + "issuer": { "type": "string" }, - "schemaState": { - "anyOf": [ - { - "$ref": "#/components/schemas/RegisterSchemaReturnStateWait" - }, - { - "$ref": "#/components/schemas/RegisterSchemaReturnStateAction" - }, - { - "$ref": "#/components/schemas/RegisterSchemaReturnStateFinished" - }, - { - "$ref": "#/components/schemas/RegisterSchemaReturnStateFailed" - } - ] - }, - "schemaMetadata": { - "$ref": "#/components/schemas/CredoExtensible" - }, - "registrationMetadata": { - "$ref": "#/components/schemas/CredoExtensible" + "clientAuthentication": { + "$ref": "#/components/schemas/AuthorizationServerClientAuth" } }, "required": [ - "schemaState", - "schemaMetadata", - "registrationMetadata" + "issuer" ], "type": "object", "additionalProperties": false }, - "CreateSchemaInput": { + "KeyAttestationRequiredRecords": { "properties": { - "issuerId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "attributes": { + "key_storage": { "items": { "type": "string" }, "type": "array" }, - "endorse": { - "type": "boolean" - }, - "endorserDid": { - "type": "string" + "user_authentication": { + "items": { + "type": "string" + }, + "type": "array" } }, "required": [ - "issuerId", - "name", - "version", - "attributes" + "key_storage", + "user_authentication" ], "type": "object", "additionalProperties": false }, - "GetCredentialDefinitionReturn": { + "ProofTypeConfig": { "properties": { - "credentialDefinition": { - "$ref": "#/components/schemas/AnonCredsCredentialDefinition" - }, - "credentialDefinitionId": { - "type": "string" - }, - "resolutionMetadata": { - "$ref": "#/components/schemas/AnonCredsResolutionMetadata" + "proof_signing_alg_values_supported": { + "items": { + "type": "string" + }, + "type": "array" }, - "credentialDefinitionMetadata": { - "$ref": "#/components/schemas/CredoExtensible" + "key_attestations_required": { + "$ref": "#/components/schemas/KeyAttestationRequiredRecords" } }, "required": [ - "credentialDefinitionId", - "resolutionMetadata", - "credentialDefinitionMetadata" + "proof_signing_alg_values_supported" ], "type": "object", "additionalProperties": false }, - "CredentialDefinitionId": { - "type": "string", - "example": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag" + "Record_string.ProofTypeConfig_": { + "properties": {}, + "additionalProperties": { + "$ref": "#/components/schemas/ProofTypeConfig" + }, + "type": "object", + "description": "Construct a type with a set of properties K of type T" }, - "RegisterCredentialDefinitionReturn": { + "CredentialDefinition": { "properties": { - "jobId": { - "type": "string" - }, - "credentialDefinitionState": { - "anyOf": [ - { - "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateWait" - }, - { - "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateAction" - }, - { - "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateFinished" - }, - { - "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateFailed" - } - ] - }, - "credentialDefinitionMetadata": { - "$ref": "#/components/schemas/CredoExtensible" - }, - "registrationMetadata": { - "$ref": "#/components/schemas/CredoExtensible" + "type": { + "items": { + "type": "string" + }, + "type": "array" } }, "required": [ - "credentialDefinitionState", - "credentialDefinitionMetadata", - "registrationMetadata" + "type" ], "type": "object", - "additionalProperties": false + "additionalProperties": {} }, - "AgentInfo": { + "ClaimDisplay": { "properties": { - "label": { + "name": { "type": "string" }, - "endpoints": { + "locale": { + "type": "string" + } + }, + "required": [ + "name", + "locale" + ], + "type": "object", + "additionalProperties": false + }, + "Claim": { + "properties": { + "path": { "items": { "type": "string" }, "type": "array" }, - "isInitialized": { - "type": "boolean" + "display": { + "items": { + "$ref": "#/components/schemas/ClaimDisplay" + }, + "type": "array" }, - "publicDid": {} + "mandatory": { + "type": "boolean" + } }, "required": [ - "label", - "endpoints", - "isInitialized", - "publicDid" + "path" ], "type": "object", "additionalProperties": false }, - "AgentToken": { + "CredentialMetadata": { "properties": { - "token": { - "type": "string" + "display": { + "items": { + "$ref": "#/components/schemas/CredentialDisplay" + }, + "type": "array" + }, + "claims": { + "items": { + "$ref": "#/components/schemas/Claim" + }, + "type": "array" } }, "required": [ - "token" + "display", + "claims" ], "type": "object", "additionalProperties": false }, - "VerifyDataOptions": { + "CredentialConfigurationSupportedWithFormats": { "properties": { - "signature": { - "type": "string" + "format": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "vc+sd-jwt", + "mso_mdoc", + "jwt_vc_json" + ] + } + ] }, - "publicKeyBase58": { + "vct": { "type": "string" }, - "keyType": { - "$ref": "#/components/schemas/KeyType" - }, - "data": { + "doctype": { "type": "string" - } - }, - "required": [ - "signature", - "publicKeyBase58", - "keyType", - "data" - ], - "type": "object" - }, - "W3cCredentialRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" - }, - "JsonObject": { - "properties": {}, - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/JsonValue" - } - }, - "JsonValue": { - "anyOf": [ - { + }, + "scope": { "type": "string" }, - { - "type": "number", - "format": "double" + "cryptographic_binding_methods_supported": { + "items": { + "type": "string" + }, + "type": "array" }, - { - "type": "boolean" + "credential_signing_alg_values_supported": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "items": { + "type": "number", + "format": "double" + }, + "type": "array" + } + ] }, - { - "$ref": "#/components/schemas/JsonObject" + "proof_types_supported": { + "$ref": "#/components/schemas/Record_string.ProofTypeConfig_" }, - { - "$ref": "#/components/schemas/JsonArray" + "credential_definition": { + "$ref": "#/components/schemas/CredentialDefinition" + }, + "credential_metadata": { + "$ref": "#/components/schemas/CredentialMetadata" } + }, + "required": [ + "format" ], - "nullable": true + "type": "object", + "additionalProperties": false }, - "JsonArray": { - "items": { - "$ref": "#/components/schemas/JsonValue" + "Record_string.CredentialConfigurationSupportedWithFormats_": { + "properties": {}, + "additionalProperties": { + "$ref": "#/components/schemas/CredentialConfigurationSupportedWithFormats" }, - "type": "array" + "type": "object", + "description": "Construct a type with a set of properties K of type T" }, - "W3cIssuer": { + "BatchCredentialIssuanceOptions": { "properties": { - "id": { - "type": "string" + "batchSize": { + "type": "number", + "format": "double" } }, "required": [ - "id" + "batchSize" ], "type": "object", "additionalProperties": false }, - "W3cCredentialSubject": { + "CreateIssuerOptions": { "properties": { - "id": { + "issuerId": { "type": "string" }, - "claims": { - "$ref": "#/components/schemas/Record_string.unknown_" - } - }, - "type": "object", - "additionalProperties": false - }, - "SingleOrArray_W3cCredentialSubject_": { - "anyOf": [ - { - "$ref": "#/components/schemas/W3cCredentialSubject" - }, - { + "accessTokenSignerKeyType": {}, + "display": { "items": { - "$ref": "#/components/schemas/W3cCredentialSubject" + "$ref": "#/components/schemas/CredentialDisplay" }, "type": "array" - } - ] - }, - "W3cCredentialSchema": { - "properties": { - "id": { - "type": "string" }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object", - "additionalProperties": false - }, - "SingleOrArray_W3cCredentialSchema_": { - "anyOf": [ - { - "$ref": "#/components/schemas/W3cCredentialSchema" + "authorizationServerConfigs": { + "items": { + "$ref": "#/components/schemas/AuthorizationServerConfig" + }, + "type": "array" }, - { + "dpopSigningAlgValuesSupported": { "items": { - "$ref": "#/components/schemas/W3cCredentialSchema" + "type": "string" }, "type": "array" - } - ] - }, - "W3cCredentialStatus": { - "properties": { - "id": { - "type": "string" }, - "type": { - "type": "string" + "credentialConfigurationsSupported": { + "$ref": "#/components/schemas/Record_string.CredentialConfigurationSupportedWithFormats_" + }, + "batchCredentialIssuance": { + "$ref": "#/components/schemas/BatchCredentialIssuanceOptions" } }, "required": [ - "id", - "type" + "credentialConfigurationsSupported" ], "type": "object", "additionalProperties": false }, - "W3cCredential": { + "UpdateIssuerRecordOptions": { "properties": { - "context": { + "display": { "items": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/JsonObject" - } - ] + "$ref": "#/components/schemas/CredentialDisplay" }, "type": "array" }, - "id": { - "type": "string" - }, - "type": { + "dpopSigningAlgValuesSupported": { "items": { "type": "string" }, "type": "array" }, - "issuer": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/W3cIssuer" - } - ] - }, - "issuanceDate": { - "type": "string" - }, - "expirationDate": { - "type": "string" - }, - "credentialSubject": { - "$ref": "#/components/schemas/SingleOrArray_W3cCredentialSubject_" - }, - "credentialSchema": { - "$ref": "#/components/schemas/SingleOrArray_W3cCredentialSchema_" + "credentialConfigurationsSupported": { + "$ref": "#/components/schemas/Record_string.CredentialConfigurationSupportedWithFormats_" }, - "credentialStatus": { - "$ref": "#/components/schemas/W3cCredentialStatus" + "batchCredentialIssuance": { + "$ref": "#/components/schemas/BatchCredentialIssuanceOptions" } }, "required": [ - "context", - "type", - "issuer", - "issuanceDate", - "credentialSubject" + "credentialConfigurationsSupported" ], "type": "object", "additionalProperties": false }, - "Pick_W3cJsonLdSignCredentialOptions.Exclude_keyofW3cJsonLdSignCredentialOptions.format__": { + "OpenId4VcIssuanceSessionRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "DisclosureFrameForOffer": { "properties": { - "credential": { - "$ref": "#/components/schemas/W3cCredential", - "description": "The credential to be signed." - }, - "proofType": { - "type": "string", - "description": "The proofType to be used for signing the credential.\n\nMust be a valid Linked Data Signature suite." - }, - "proofPurpose": {}, - "created": { - "type": "string" - }, - "verificationMethod": { - "type": "string", - "description": "URI of the verificationMethod to be used for signing the credential.\n\nMust be a valid did url pointing to a key." - } + "_sd": { + "items": { + "type": "string" + }, + "type": "array" + } }, - "required": [ - "credential", - "proofType", - "verificationMethod" - ], "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/components/schemas/DisclosureFrameForOffer" + }, + { + "items": { + "$ref": "#/components/schemas/DisclosureFrameForOffer" + }, + "type": "array" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + } }, - "Omit_W3cJsonLdSignCredentialOptions.format_": { - "$ref": "#/components/schemas/Pick_W3cJsonLdSignCredentialOptions.Exclude_keyofW3cJsonLdSignCredentialOptions.format__", - "description": "Construct a type with the properties of T except for those in type K." + "OpenId4VciCredentialFormatProfile": { + "enum": [ + "jwt_vc_json", + "jwt_vc_json-ld", + "ldp_vc", + "vc+sd-jwt", + "dc+sd-jwt", + "mso_mdoc" + ], + "type": "string" }, - "CustomW3cJsonLdSignCredentialOptions": { - "allOf": [ - { - "$ref": "#/components/schemas/Omit_W3cJsonLdSignCredentialOptions.format_" - }, - { - "properties": {}, - "additionalProperties": {}, - "type": "object" - } - ] + "SignerMethod": { + "enum": [ + "did", + "x5c" + ], + "type": "string" }, - "SignDataOptions": { + "OpenId4VciOfferSdJwtCredential": { "properties": { - "method": { + "credentialSupportedId": { "type": "string" }, - "did": { - "type": "string" + "format": { + "$ref": "#/components/schemas/OpenId4VciCredentialFormatProfile" }, - "publicKeyBase58": { - "type": "string" + "signerOptions": { + "properties": { + "keyId": { + "type": "string" + }, + "x5c": { + "items": { + "type": "string" + }, + "type": "array" + }, + "did": { + "type": "string" + }, + "method": { + "$ref": "#/components/schemas/SignerMethod" + } + }, + "required": [ + "method" + ], + "type": "object" }, - "keyType": { - "$ref": "#/components/schemas/KeyType" + "statusListDetails": { + "properties": { + "listSize": { + "type": "number", + "format": "double" + }, + "index": { + "type": "number", + "format": "double" + }, + "listId": { + "type": "string" + } + }, + "required": [ + "index", + "listId" + ], + "type": "object" }, - "data": { - "type": "string" + "payload": { + "properties": { + "vct": { + "type": "string" + } + }, + "additionalProperties": {}, + "type": "object" + }, + "disclosureFrame": { + "$ref": "#/components/schemas/DisclosureFrameForOffer" } }, "required": [ - "publicKeyBase58", - "keyType", - "data" + "credentialSupportedId", + "format", + "signerOptions", + "payload" ], - "type": "object" - }, - "Partial_W3cCredentialValidations_": { - "properties": {}, "type": "object", - "description": "Make all properties in T optional" + "additionalProperties": false }, - "Error": { + "Partial_ValidityInfo_": { "properties": { - "name": { - "type": "string" + "signed": { + "type": "string", + "format": "date-time" }, - "message": { - "type": "string" + "validFrom": { + "type": "string", + "format": "date-time" }, - "stack": { - "type": "string" + "validUntil": { + "type": "string", + "format": "date-time" + }, + "expectedUpdate": { + "type": "string", + "format": "date-time" } }, - "required": [ - "name", - "message" - ], "type": "object", - "additionalProperties": false + "description": "Make all properties in T optional" }, - "W3cVerifyResult_W3cCredentialValidations_": { + "Record_string.Record_string.unknown__": { + "properties": {}, + "additionalProperties": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "type": "object", + "description": "Construct a type with a set of properties K of type T" + }, + "MdocNameSpaces": { + "$ref": "#/components/schemas/Record_string.Record_string.unknown__" + }, + "OpenId4VciOfferMdocCredential": { "properties": { - "isValid": { - "type": "boolean", - "description": "Whether the verification as a whole is valid. This means that\nall validations inside the validations object should have passed." + "credentialSupportedId": { + "type": "string" }, - "validations": { - "$ref": "#/components/schemas/Partial_W3cCredentialValidations_", - "description": "Validations that have been performed" + "format": { + "$ref": "#/components/schemas/OpenId4VciCredentialFormatProfile" }, - "error": { - "$ref": "#/components/schemas/Error", - "description": "Error that was caught during verification not related to\nany of the specific validations that are performed" + "signerOptions": { + "properties": { + "keyId": { + "type": "string" + }, + "x5c": { + "items": { + "type": "string" + }, + "type": "array" + }, + "did": { + "type": "string" + }, + "method": { + "$ref": "#/components/schemas/SignerMethod" + } + }, + "required": [ + "method" + ], + "type": "object" + }, + "statusListDetails": { + "properties": { + "listSize": { + "type": "number", + "format": "double" + }, + "index": { + "type": "number", + "format": "double" + }, + "listId": { + "type": "string" + } + }, + "required": [ + "index", + "listId" + ], + "type": "object" + }, + "payload": { + "properties": { + "namespaces": { + "$ref": "#/components/schemas/MdocNameSpaces" + }, + "validityInfo": { + "$ref": "#/components/schemas/Partial_ValidityInfo_" + }, + "docType": { + "anyOf": [ + { + "allOf": [ + { + "type": "string" + }, + { + "properties": {}, + "type": "object" + } + ] + }, + { + "type": "string", + "enum": [ + "org.iso.18013.5.1.mDL" + ] + } + ] + } + }, + "required": [ + "namespaces", + "docType" + ], + "type": "object" } }, "required": [ - "isValid", - "validations" + "credentialSupportedId", + "format", + "signerOptions", + "payload" ], "type": "object", "additionalProperties": false }, - "W3cVerifyCredentialResult": { - "$ref": "#/components/schemas/W3cVerifyResult_W3cCredentialValidations_" + "JsonObject": { + "properties": {}, + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + } }, - "Pick_LinkedDataProofOptions.Exclude_keyofLinkedDataProofOptions.cryptosuite__": { - "properties": { - "proofPurpose": { + "JsonValue": { + "anyOf": [ + { "type": "string" }, - "created": { - "type": "string" + { + "type": "number", + "format": "double" }, - "verificationMethod": { - "type": "string" + { + "type": "boolean" }, - "type": { - "type": "string" + { + "$ref": "#/components/schemas/JsonObject" }, - "domain": { + { + "$ref": "#/components/schemas/JsonArray" + } + ], + "nullable": true + }, + "JsonArray": { + "items": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "array" + }, + "W3cIssuer": { + "properties": { + "id": { "type": "string" - }, - "challenge": { + } + }, + "required": [ + "id" + ], + "type": "object", + "additionalProperties": false + }, + "W3cCredentialSubject": { + "properties": { + "id": { "type": "string" }, - "jws": { - "type": "string" + "claims": { + "$ref": "#/components/schemas/Record_string.unknown_" + } + }, + "type": "object", + "additionalProperties": false + }, + "SingleOrArray_W3cCredentialSubject_": { + "anyOf": [ + { + "$ref": "#/components/schemas/W3cCredentialSubject" }, - "proofValue": { + { + "items": { + "$ref": "#/components/schemas/W3cCredentialSubject" + }, + "type": "array" + } + ] + }, + "W3cCredentialSchema": { + "properties": { + "id": { "type": "string" }, - "nonce": { + "type": { "type": "string" } }, "required": [ - "proofPurpose", - "created", - "verificationMethod", + "id", "type" ], "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" - }, - "Omit_LinkedDataProofOptions.cryptosuite_": { - "$ref": "#/components/schemas/Pick_LinkedDataProofOptions.Exclude_keyofLinkedDataProofOptions.cryptosuite__", - "description": "Construct a type with the properties of T except for those in type K." + "additionalProperties": false }, - "DataIntegrityProofOptions": { - "properties": { - "type": { - "type": "string" - }, - "cryptosuite": { - "type": "string" - }, - "verificationMethod": { - "type": "string" - }, - "proofPurpose": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "challenge": { - "type": "string" - }, - "nonce": { - "type": "string" - }, - "created": { - "type": "string" - }, - "expires": { - "type": "string" - }, - "proofValue": { - "type": "string" - }, - "previousProof": { - "type": "string" - } - }, - "required": [ - "type", - "cryptosuite", - "verificationMethod", - "proofPurpose" - ], - "type": "object", - "additionalProperties": false - }, - "SingleOrArray_Omit_LinkedDataProofOptions.cryptosuite_-or-DataIntegrityProofOptions_": { + "SingleOrArray_W3cCredentialSchema_": { "anyOf": [ { - "anyOf": [ - { - "$ref": "#/components/schemas/Omit_LinkedDataProofOptions.cryptosuite_" - }, - { - "$ref": "#/components/schemas/DataIntegrityProofOptions" - } - ] + "$ref": "#/components/schemas/W3cCredentialSchema" }, { "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/Omit_LinkedDataProofOptions.cryptosuite_" - }, - { - "$ref": "#/components/schemas/DataIntegrityProofOptions" - } - ] + "$ref": "#/components/schemas/W3cCredentialSchema" }, "type": "array" } ] }, - "LinkedDataProof": { - "description": "Linked Data Proof", + "W3cCredentialStatus": { "properties": { - "type": { - "type": "string" - }, - "proofPurpose": { - "type": "string" - }, - "verificationMethod": { - "type": "string" - }, - "created": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "challenge": { - "type": "string" - }, - "jws": { - "type": "string" - }, - "proofValue": { + "id": { "type": "string" }, - "nonce": { - "type": "string" - } - }, - "required": [ - "type", - "proofPurpose", - "verificationMethod", - "created" - ], - "type": "object", - "additionalProperties": false - }, - "DataIntegrityProof": { - "description": "Linked Data Proof", - "properties": { "type": { "type": "string" - }, - "cryptosuite": { - "type": "string" - }, - "proofPurpose": { - "type": "string" - }, - "verificationMethod": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "challenge": { - "type": "string" - }, - "nonce": { - "type": "string" - }, - "created": { - "type": "string" - }, - "expires": { - "type": "string" - }, - "proofValue": { - "type": "string" - }, - "previousProof": { - "type": "string" } }, "required": [ - "type", - "cryptosuite", - "proofPurpose", - "verificationMethod" + "id", + "type" ], "type": "object", "additionalProperties": false }, - "SingleOrArray_LinkedDataProof-or-DataIntegrityProof_": { - "anyOf": [ - { - "anyOf": [ - { - "$ref": "#/components/schemas/LinkedDataProof" - }, - { - "$ref": "#/components/schemas/DataIntegrityProof" - } - ] - }, - { - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/LinkedDataProof" - }, - { - "$ref": "#/components/schemas/DataIntegrityProof" - } - ] - }, - "type": "array" - } - ] - }, - "W3cJsonLdVerifiableCredential": { + "W3cCredential": { "properties": { "context": { "items": { @@ -1607,9 +2062,6 @@ }, "credentialStatus": { "$ref": "#/components/schemas/W3cCredentialStatus" - }, - "proof": { - "$ref": "#/components/schemas/SingleOrArray_LinkedDataProof-or-DataIntegrityProof_" } }, "required": [ @@ -1617,339 +2069,506 @@ "type", "issuer", "issuanceDate", - "credentialSubject", - "proof" + "credentialSubject" ], "type": "object", "additionalProperties": false }, - "ProofPurpose": {}, - "SafeW3cJsonLdVerifyCredentialOptions": { + "OpenId4VciOfferW3cCredential": { "properties": { - "credential": { - "$ref": "#/components/schemas/W3cJsonLdVerifiableCredential" + "credentialSupportedId": { + "type": "string" }, - "verifyCredentialStatus": { - "type": "boolean", - "description": "Whether to verify the credentialStatus, if present." + "format": { + "$ref": "#/components/schemas/OpenId4VciCredentialFormatProfile" }, - "proofPurpose": { - "$ref": "#/components/schemas/ProofPurpose" + "signerOptions": { + "properties": { + "keyId": { + "type": "string" + }, + "x5c": { + "items": { + "type": "string" + }, + "type": "array" + }, + "did": { + "type": "string" + }, + "method": { + "$ref": "#/components/schemas/SignerMethod" + } + }, + "required": [ + "method" + ], + "type": "object" }, - "proof": { - "$ref": "#/components/schemas/SingleOrArray_Omit_LinkedDataProofOptions.cryptosuite_-or-DataIntegrityProofOptions_" - } - }, - "required": [ - "credential", - "proof" - ], - "type": "object", - "additionalProperties": false - }, - "QuestionAnswerRole": { - "enum": [ - "questioner", - "responder" - ], - "type": "string" - }, - "QuestionAnswerState": { - "description": "QuestionAnswer states inferred from RFC 0113.", - "enum": [ - "question-sent", - "question-received", - "answer-received", - "answer-sent" - ], - "type": "string" - }, - "RecordId": { - "type": "string", - "example": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e" - }, - "ValidResponse": { - "properties": { - "text": { - "type": "string" + "statusListDetails": { + "properties": { + "listSize": { + "type": "number", + "format": "double" + }, + "index": { + "type": "number", + "format": "double" + }, + "listId": { + "type": "string" + } + }, + "required": [ + "index", + "listId" + ], + "type": "object" + }, + "payload": { + "properties": { + "credential": { + "$ref": "#/components/schemas/W3cCredential" + }, + "verificationMethod": { + "type": "string" + } + }, + "required": [ + "credential", + "verificationMethod" + ], + "type": "object" } }, "required": [ - "text" + "credentialSupportedId", + "format", + "signerOptions", + "payload" ], "type": "object", "additionalProperties": false }, - "Record_response.string_": { + "OpenId4VcIssuanceSessionsCreateOffer": { "properties": { - "response": { + "publicIssuerId": { "type": "string" - } - }, - "required": [ - "response" + }, + "credentials": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/OpenId4VciOfferSdJwtCredential" + }, + { + "$ref": "#/components/schemas/OpenId4VciOfferMdocCredential" + }, + { + "$ref": "#/components/schemas/OpenId4VciOfferW3cCredential" + } + ] + }, + "type": "array" + }, + "authorizationCodeFlowConfig": { + "properties": { + "issuerState": { + "type": "string" + }, + "requirePresentationDuringIssuance": { + "type": "boolean" + }, + "authorizationServerUrl": { + "type": "string" + } + }, + "required": [ + "authorizationServerUrl" + ], + "type": "object" + }, + "preAuthorizedCodeFlowConfig": { + "properties": { + "authorizationServerUrl": { + "type": "string" + }, + "txCode": { + "properties": { + "input_mode": { + "type": "string", + "enum": [ + "numeric", + "text" + ] + }, + "length": { + "type": "number", + "format": "double" + }, + "description": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "issuanceMetadata": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "statusListDetails": { + "properties": { + "listSize": { + "type": "number", + "format": "double" + }, + "index": { + "type": "number", + "format": "double" + }, + "listId": { + "type": "string" + } + }, + "required": [ + "index", + "listId" + ], + "type": "object" + }, + "isRevocable": { + "type": "boolean" + } + }, + "required": [ + "publicIssuerId", + "credentials" ], "type": "object", - "description": "Construct a type with a set of properties K of type T" - }, - "ProofExchangeRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" + "additionalProperties": false }, - "AutoAcceptProof": { - "description": "Typing of the state for auto acceptance", + "OpenId4VcIssuanceSessionState": { "enum": [ - "always", - "contentApproved", - "never" + "OfferCreated", + "OfferUriRetrieved", + "AuthorizationInitiated", + "AuthorizationGranted", + "AccessTokenRequested", + "AccessTokenCreated", + "CredentialRequestReceived", + "CredentialsPartiallyIssued", + "Completed", + "Error" ], "type": "string" }, - "RequestProofProposalOptions": { + "SdJwtVcRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "MdocRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "ResolveCredentialOfferBody": { "properties": { - "connectionId": { - "type": "string" - }, - "proofFormats": {}, - "goalCode": { - "type": "string" - }, - "parentThreadId": { - "type": "string" - }, - "autoAcceptProof": { - "$ref": "#/components/schemas/AutoAcceptProof" - }, - "comment": { + "credentialOfferUri": { "type": "string" } }, "required": [ - "connectionId", - "proofFormats" + "credentialOfferUri" ], "type": "object", "additionalProperties": false }, - "AcceptProofProposal": { + "AuthorizeRequestCredentialOffer": { "properties": { - "proofRecordId": { - "type": "string" - }, - "proofFormats": {}, - "comment": { - "type": "string" - }, - "autoAcceptProof": { - "$ref": "#/components/schemas/AutoAcceptProof" - }, - "goalCode": { + "credentialOfferUri": { "type": "string" }, - "willConfirm": { - "type": "boolean" + "credentialsToRequest": { + "items": { + "type": "string" + }, + "type": "array" } }, "required": [ - "proofRecordId", - "proofFormats" + "credentialOfferUri", + "credentialsToRequest" ], "type": "object", "additionalProperties": false }, - "RequestProofOptions": { + "RequestCredentialBody": { "properties": { - "connectionId": { + "credentialOfferUri": { "type": "string" }, - "protocolVersion": { - "type": "string" + "credentialsToRequest": { + "items": { + "type": "string" + }, + "type": "array" }, - "proofFormats": {}, - "comment": { + "authorizationCode": { "type": "string" }, - "autoAcceptProof": { - "$ref": "#/components/schemas/AutoAcceptProof" - }, - "goalCode": { + "codeVerifier": { "type": "string" }, - "parentThreadId": { + "txCode": { "type": "string" - }, - "willConfirm": { - "type": "boolean" } }, "required": [ - "connectionId", - "protocolVersion", - "proofFormats", - "comment", - "autoAcceptProof" + "credentialOfferUri", + "credentialsToRequest" ], "type": "object", "additionalProperties": false }, - "PlaintextMessage": { + "EncodedX509Certificate": { + "type": "string", + "description": "Base64 or PEM" + }, + "ResolveOpenId4VpAuthorizationRequestOptions": { "properties": { - "@type": { - "type": "string" - }, - "@id": { - "type": "string" - }, - "~thread": { - "properties": { - "pthid": { - "type": "string" - }, - "thid": { - "type": "string" - } + "trustedCertificates": { + "items": { + "$ref": "#/components/schemas/EncodedX509Certificate" }, - "type": "object" + "type": "array" }, - "messageType": { + "origin": { "type": "string" } }, - "required": [ - "@type", - "@id", - "messageType" - ], "type": "object", - "additionalProperties": {} + "additionalProperties": false }, - "CreateProofRequestOobOptions": { + "ResolveProofRequest": { "properties": { - "protocolVersion": { - "type": "string" - }, - "proofFormats": {}, - "goalCode": { - "type": "string" - }, - "parentThreadId": { - "type": "string" - }, - "willConfirm": { - "type": "boolean" - }, - "autoAcceptProof": { - "$ref": "#/components/schemas/AutoAcceptProof" - }, - "comment": { - "type": "string" - }, - "label": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "recipientKey": { + "proofRequestUri": { "type": "string" }, - "invitationDid": { - "type": "string" + "options": { + "$ref": "#/components/schemas/ResolveOpenId4VpAuthorizationRequestOptions" } }, "required": [ - "protocolVersion", - "proofFormats" + "proofRequestUri" ], "type": "object", "additionalProperties": false }, - "ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.proposal_": { - "properties": {}, - "type": "object", - "description": "Get the format data payload for a specific message from a list of ProofFormat interfaces and a message\n\nFor an indy offer, this resolves to the proof request format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#proof-request-format" - }, - "ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.request_": { - "properties": {}, - "type": "object", - "description": "Get the format data payload for a specific message from a list of ProofFormat interfaces and a message\n\nFor an indy offer, this resolves to the proof request format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#proof-request-format" + "CredentialType": { + "enum": [ + "sd-jwt-vc", + "mso_mdoc" + ], + "type": "string" }, - "ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.presentation_": { - "properties": {}, + "DeleteCredentialBody": { + "properties": { + "credentialType": { + "$ref": "#/components/schemas/CredentialType" + }, + "credentialId": { + "type": "string" + } + }, + "required": [ + "credentialType", + "credentialId" + ], "type": "object", - "description": "Get the format data payload for a specific message from a list of ProofFormat interfaces and a message\n\nFor an indy offer, this resolves to the proof request format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#proof-request-format" + "additionalProperties": false }, - "GetProofFormatDataReturn__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array_": { + "TenantConfig": { "properties": { - "presentation": { - "$ref": "#/components/schemas/ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.presentation_" - }, - "request": { - "$ref": "#/components/schemas/ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.request_" - }, - "proposal": { - "$ref": "#/components/schemas/ProofFormatDataMessagePayload__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array.proposal_" + "label": { + "type": "string" } }, + "required": [ + "label" + ], "type": "object" }, - "HandshakeProtocol": { - "description": "Enum values should be sorted based on order of preference. Values will be\nincluded in this order when creating out of band invitations.", - "enum": [ - "https://didcomm.org/didexchange/1.x", - "https://didcomm.org/connections/1.x" - ], - "type": "string" + "MetadataValue": { + "$ref": "#/components/schemas/Record_string.any_" }, - "AgentMessage": { - "$ref": "#/components/schemas/PlaintextMessage" + "MetadataBase": { + "properties": {}, + "additionalProperties": { + "$ref": "#/components/schemas/MetadataValue" + }, + "type": "object" }, - "Key": { + "Metadata____": { + "description": "Metadata access class to get, set (create and update), add (append to a record) and delete metadata on any record.\n\nset will override the previous value if it already exists\n\nnote: To add persistence to these records, you have to update the record in the correct repository", "properties": { - "publicKey": { - "type": "string", - "format": "byte" - }, - "keyType": { - "$ref": "#/components/schemas/KeyType" + "data": { + "$ref": "#/components/schemas/MetadataBase" } }, "required": [ - "publicKey", - "keyType" + "data" ], "type": "object", "additionalProperties": false }, - "Routing": { + "Pick_CustomTenantConfig.Exclude_keyofCustomTenantConfig.walletConfig__": { "properties": { - "endpoints": { - "items": { - "type": "string" - }, - "type": "array" - }, - "recipientKey": { - "$ref": "#/components/schemas/Key" - }, - "routingKeys": { - "items": { - "$ref": "#/components/schemas/Key" - }, - "type": "array" + "label": { + "type": "string" }, - "mediatorId": { + "connectionImageUrl": { "type": "string" } }, "required": [ - "endpoints", - "recipientKey", - "routingKeys" + "label" ], "type": "object", - "additionalProperties": false + "description": "From T, pick a set of properties whose keys are in the union K" }, - "Pick_JwsGeneralFormat.Exclude_keyofJwsGeneralFormat.payload__": { + "Omit_CustomTenantConfig.walletConfig_": { + "$ref": "#/components/schemas/Pick_CustomTenantConfig.Exclude_keyofCustomTenantConfig.walletConfig__", + "description": "Construct a type with the properties of T except for those in type K." + }, + "CreateTenantOptions": { + "properties": { + "config": { + "$ref": "#/components/schemas/Omit_CustomTenantConfig.walletConfig_" + } + }, + "required": [ + "config" + ], + "type": "object", + "additionalProperties": false + }, + "QuestionAnswerRole": { + "enum": [ + "questioner", + "responder" + ], + "type": "string" + }, + "QuestionAnswerState": { + "description": "QuestionAnswer states inferred from RFC 0113.", + "enum": [ + "question-sent", + "question-received", + "answer-received", + "answer-sent" + ], + "type": "string" + }, + "RecordId": { + "type": "string", + "example": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e" + }, + "ValidResponse": { + "properties": { + "text": { + "type": "string" + } + }, + "required": [ + "text" + ], + "type": "object", + "additionalProperties": false + }, + "Record_response.string_": { + "properties": { + "response": { + "type": "string" + } + }, + "required": [ + "response" + ], + "type": "object", + "description": "Construct a type with a set of properties K of type T" + }, + "DidCommPlaintextMessage": { + "properties": { + "@type": { + "type": "string" + }, + "@id": { + "type": "string" + }, + "~thread": { + "properties": { + "pthid": { + "type": "string" + }, + "thid": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "@type", + "@id" + ], + "type": "object", + "additionalProperties": {} + }, + "DidCommHandshakeProtocol": { + "description": "Enum values should be sorted based on order of preference. Values will be\nincluded in this order when creating out of band invitations.", + "enum": [ + "https://didcomm.org/didexchange/1.x", + "https://didcomm.org/connections/1.x" + ], + "type": "string" + }, + "DidCommMessage": { + "$ref": "#/components/schemas/DidCommPlaintextMessage" + }, + "PublicJwk_Ed25519PublicJwk_": { + "properties": {}, + "type": "object", + "additionalProperties": false + }, + "DidCommRouting": { + "properties": { + "endpoints": { + "items": { + "type": "string" + }, + "type": "array" + }, + "recipientKey": { + "$ref": "#/components/schemas/PublicJwk_Ed25519PublicJwk_" + }, + "routingKeys": { + "items": { + "$ref": "#/components/schemas/PublicJwk_Ed25519PublicJwk_" + }, + "type": "array" + }, + "mediatorId": { + "type": "string" + } + }, + "required": [ + "endpoints", + "recipientKey", + "routingKeys" + ], + "type": "object", + "additionalProperties": false + }, + "Pick_JwsGeneralFormat.Exclude_keyofJwsGeneralFormat.payload__": { "properties": { "header": { "$ref": "#/components/schemas/Record_string.unknown_", @@ -1994,7 +2613,7 @@ "type": "object", "additionalProperties": false }, - "AttachmentData": { + "DidCommAttachmentData": { "description": "A JSON object that gives access to the actual content of the attachment", "properties": { "base64": { @@ -2031,7 +2650,7 @@ "type": "object", "additionalProperties": false }, - "Attachment": { + "DidCommAttachment": { "description": "Represents DIDComm attachment\nhttps://github.com/hyperledger/aries-rfcs/blob/master/concepts/0017-attachments/README.md", "properties": { "id": { @@ -2060,7 +2679,7 @@ "description": "Optional, and mostly relevant when content is included by reference instead of by value. Lets the receiver guess how expensive it will be, in time, bandwidth, and storage, to fully fetch the attachment." }, "data": { - "$ref": "#/components/schemas/AttachmentData" + "$ref": "#/components/schemas/DidCommAttachmentData" } }, "required": [ @@ -2092,13 +2711,13 @@ }, "handshakeProtocols": { "items": { - "$ref": "#/components/schemas/HandshakeProtocol" + "$ref": "#/components/schemas/DidCommHandshakeProtocol" }, "type": "array" }, "messages": { "items": { - "$ref": "#/components/schemas/AgentMessage" + "$ref": "#/components/schemas/DidCommMessage" }, "type": "array" }, @@ -2109,11 +2728,11 @@ "type": "boolean" }, "routing": { - "$ref": "#/components/schemas/Routing" + "$ref": "#/components/schemas/DidCommRouting" }, "appendedAttachments": { "items": { - "$ref": "#/components/schemas/Attachment" + "$ref": "#/components/schemas/DidCommAttachment" }, "type": "array" }, @@ -2133,50 +2752,9 @@ "type": "object", "additionalProperties": false }, - "Pick_CreateLegacyInvitationConfig.Exclude_keyofCreateLegacyInvitationConfig.routing__": { - "properties": { - "alias": { - "type": "string" - }, - "label": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "multiUseInvitation": { - "type": "boolean" - }, - "autoAcceptConnection": { - "type": "boolean" - } - }, - "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" - }, - "Omit_CreateLegacyInvitationConfig.routing_": { - "$ref": "#/components/schemas/Pick_CreateLegacyInvitationConfig.Exclude_keyofCreateLegacyInvitationConfig.routing__", - "description": "Construct a type with the properties of T except for those in type K." - }, - "OutOfBandRecord": { + "DidCommOutOfBandRecord": { "$ref": "#/components/schemas/Record_string.unknown_" }, - "AgentMessageType": { - "properties": { - "@id": { - "type": "string" - }, - "@type": { - "type": "string" - } - }, - "required": [ - "@id", - "@type" - ], - "type": "object", - "additionalProperties": {} - }, "CustomHandshakeProtocol": { "enum": [ "https://didcomm.org/didexchange/1.1", @@ -2315,10 +2893,10 @@ "imageUrl": { "type": "string" }, - "autoAcceptConnection": { + "autoAcceptInvitation": { "type": "boolean" }, - "autoAcceptInvitation": { + "autoAcceptConnection": { "type": "boolean" }, "reuseConnection": { @@ -2332,6 +2910,9 @@ "type": "string" } }, + "required": [ + "label" + ], "type": "object", "description": "From T, pick a set of properties whose keys are in the union K" }, @@ -2350,10 +2931,10 @@ "imageUrl": { "type": "string" }, - "autoAcceptConnection": { + "autoAcceptInvitation": { "type": "boolean" }, - "autoAcceptInvitation": { + "autoAcceptConnection": { "type": "boolean" }, "reuseConnection": { @@ -2371,6 +2952,7 @@ } }, "required": [ + "label", "invitation" ], "type": "object", @@ -2387,10 +2969,10 @@ "imageUrl": { "type": "string" }, - "autoAcceptConnection": { + "autoAcceptInvitation": { "type": "boolean" }, - "autoAcceptInvitation": { + "autoAcceptConnection": { "type": "boolean" }, "reuseConnection": { @@ -2408,6 +2990,7 @@ } }, "required": [ + "label", "invitationUrl" ], "type": "object", @@ -2434,892 +3017,3410 @@ "type": "string" } }, + "required": [ + "label" + ], "type": "object", "additionalProperties": false }, - "ThreadId": { - "type": "string", - "example": "ea4e5e69-fc04-465a-90d2-9f8ff78aa71d" - }, - "CredentialState": { - "description": "Issue Credential states as defined in RFC 0036 and RFC 0453", + "DidCommDidExchangeState": { + "description": "Connection states as defined in RFC 0023.", "enum": [ - "proposal-sent", - "proposal-received", - "offer-sent", - "offer-received", - "declined", + "start", + "invitation-sent", + "invitation-received", "request-sent", "request-received", - "credential-issued", - "credential-received", - "done", - "abandoned" - ], - "type": "string" - }, - "CredentialRole": { - "enum": [ - "issuer", - "holder" + "response-sent", + "response-received", + "abandoned", + "completed" ], "type": "string" }, - "CredentialExchangeRecord": { + "DidCommConnectionRecord": { "$ref": "#/components/schemas/Record_string.unknown_" }, - "ProtocolVersion": { - "enum": [ - "v1", - "v2" - ], - "type": "string" - }, - "CredentialPreviewAttributeOptions": { + "DidResolutionMetadata": { "properties": { - "name": { + "contentType": { "type": "string" }, - "mimeType": { - "type": "string" + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "invalidDid", + "notFound", + "representationNotSupported", + "unsupportedDidMethod" + ] + } + ] }, - "value": { + "message": { "type": "string" + }, + "servedFromCache": { + "type": "boolean", + "description": "Whether the did document was served from the cache" + }, + "servedFromDidRecord": { + "type": "boolean", + "description": "Whether the did document was served from a local did record" } }, - "required": [ - "name", - "value" - ], "type": "object", "additionalProperties": false }, - "LinkedAttachment": { + "DIDDocumentMetadata": { + "description": "Represents metadata about the DID document resulting from a {@link Resolvable.resolve} operation.", "properties": { - "attributeName": { - "type": "string", - "description": "The name that will be used to generate the linked credential" + "created": { + "type": "string" }, - "attachment": { - "$ref": "#/components/schemas/Attachment", - "description": "The attachment that needs to be linked to the credential" - } - }, - "required": [ - "attributeName", - "attachment" - ], + "updated": { + "type": "string" + }, + "deactivated": { + "type": "boolean" + }, + "versionId": { + "type": "string" + }, + "nextUpdate": { + "type": "string" + }, + "nextVersionId": { + "type": "string" + }, + "equivalentId": { + "type": "string" + }, + "canonicalId": { + "type": "string" + } + }, "type": "object", "additionalProperties": false }, - "Pick_AnonCredsProposeCredentialFormat.Exclude_keyofAnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId__": { + "Did": { + "type": "string", + "example": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" + }, + "KeyAlgorithm": { + "enum": [ + "a128gcm", + "a256gcm", + "a128cbchs256", + "a256cbchs512", + "a128kw", + "a256kw", + "bls12381g1", + "bls12381g2", + "c20p", + "xc20p", + "ed25519", + "x25519", + "k256", + "p256", + "p384" + ], + "type": "string" + }, + "DidCreate": { "properties": { - "schemaId": { + "keyType": { + "$ref": "#/components/schemas/KeyAlgorithm" + }, + "seed": { "type": "string" }, - "schemaName": { + "domain": { "type": "string" }, - "schemaVersion": { + "method": { "type": "string" }, - "credentialDefinitionId": { + "network": { "type": "string" }, - "attributes": { - "items": { - "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" - }, - "type": "array" + "did": { + "type": "string" }, - "linkedAttachments": { - "items": { - "$ref": "#/components/schemas/LinkedAttachment" - }, - "type": "array" + "role": { + "type": "string" }, - "schemaIssuerDid": { + "endorserDid": { "type": "string" }, - "issuerDid": { + "didDocument": { + "$ref": "#/components/schemas/DidDocument" + }, + "privatekey": { + "type": "string" + }, + "endpoint": { "type": "string" } }, + "required": [ + "method" + ], "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" - }, - "Omit_AnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId_": { - "$ref": "#/components/schemas/Pick_AnonCredsProposeCredentialFormat.Exclude_keyofAnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId__", - "description": "Construct a type with the properties of T except for those in type K." + "additionalProperties": false }, - "LegacyIndyProposeCredentialFormat": { - "$ref": "#/components/schemas/Omit_AnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId_", - "description": "This defines the module payload for calling CredentialsApi.createProposal\nor CredentialsApi.negotiateOffer\n\nNOTE: This doesn't include the `issuerId` and `schemaIssuerId` properties that are present in the newer format." + "DidRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" }, - "W3cIssuerOptions": { - "description": "TODO: check how to support arbitrary data in class", + "OrgTokenResponse": { "properties": { - "id": { + "token": { "type": "string" } }, "required": [ - "id" + "token" ], "type": "object", "additionalProperties": false }, - "SingleOrArray_JsonObject_": { - "anyOf": [ - { - "$ref": "#/components/schemas/JsonObject" + "OrgTokenRequest": { + "properties": { + "clientId": { + "type": "string" }, - { - "items": { - "$ref": "#/components/schemas/JsonObject" - }, - "type": "array" + "clientSecret": { + "type": "string" } - ] + }, + "required": [ + "clientId", + "clientSecret" + ], + "type": "object", + "additionalProperties": false }, - "JsonCredential": { + "AgentInfo": { "properties": { - "@context": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "$ref": "#/components/schemas/JsonObject" - } - ] - }, - "id": { + "label": { "type": "string" }, - "type": { + "endpoints": { "items": { "type": "string" }, "type": "array" }, - "issuer": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/W3cIssuerOptions" - } - ] + "isInitialized": { + "type": "boolean" }, - "issuanceDate": { + "publicDid": {} + }, + "required": [ + "label", + "endpoints", + "isInitialized", + "publicDid" + ], + "type": "object", + "additionalProperties": false + }, + "AgentToken": { + "properties": { + "token": { "type": "string" - }, - "expirationDate": { + } + }, + "required": [ + "token" + ], + "type": "object", + "additionalProperties": false + }, + "Partial_W3cCredentialValidations_": { + "properties": {}, + "type": "object", + "description": "Make all properties in T optional" + }, + "Error": { + "properties": { + "name": { "type": "string" }, - "credentialSubject": { - "$ref": "#/components/schemas/SingleOrArray_JsonObject_" + "message": { + "type": "string" }, - "prettyVc": {} + "stack": { + "type": "string" + } }, "required": [ - "@context", - "type", - "issuer", - "issuanceDate", - "credentialSubject" + "name", + "message" ], "type": "object", - "additionalProperties": {} + "additionalProperties": false }, - "JsonLdCredentialDetailFormat": { - "description": "Format for creating a jsonld proposal, offer or request.", + "W3cVerifyResult_W3cCredentialValidations_": { "properties": { - "credential": { - "$ref": "#/components/schemas/JsonCredential" + "isValid": { + "type": "boolean", + "description": "Whether the verification as a whole is valid. This means that\nall validations inside the validations object should have passed." }, - "options": { - "properties": { - "proofType": { - "type": "string" - }, - "proofPurpose": { - "type": "string" - } - }, - "required": [ - "proofType", - "proofPurpose" - ], - "type": "object" + "validations": { + "$ref": "#/components/schemas/Partial_W3cCredentialValidations_", + "description": "Validations that have been performed" + }, + "error": { + "$ref": "#/components/schemas/Error", + "description": "Error that was caught during verification not related to\nany of the specific validations that are performed" } }, "required": [ - "credential", - "options" + "isValid", + "validations" ], "type": "object", "additionalProperties": false }, - "AnonCredsProposeCredentialFormat": { - "description": "This defines the module payload for calling CredentialsApi.createProposal\nor CredentialsApi.negotiateOffer", + "W3cVerifyCredentialResult": { + "$ref": "#/components/schemas/W3cVerifyResult_W3cCredentialValidations_" + }, + "DataIntegrityProofOptions": { "properties": { - "schemaIssuerId": { + "type": { "type": "string" }, - "schemaId": { + "cryptosuite": { "type": "string" }, - "schemaName": { + "verificationMethod": { "type": "string" }, - "schemaVersion": { + "proofPurpose": { "type": "string" }, - "credentialDefinitionId": { + "domain": { "type": "string" }, - "issuerId": { + "challenge": { "type": "string" }, - "attributes": { - "items": { - "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" - }, - "type": "array" + "nonce": { + "type": "string" }, - "linkedAttachments": { - "items": { - "$ref": "#/components/schemas/LinkedAttachment" - }, - "type": "array" + "created": { + "type": "string" }, - "schemaIssuerDid": { + "expires": { "type": "string" }, - "issuerDid": { + "proofValue": { + "type": "string" + }, + "previousProof": { "type": "string" } }, + "required": [ + "type", + "cryptosuite", + "verificationMethod", + "proofPurpose" + ], "type": "object", "additionalProperties": false }, - "CredentialFormatPayload_CredentialFormatType-Array.createProposal_": { - "properties": { - "indy": { - "$ref": "#/components/schemas/LegacyIndyProposeCredentialFormat" - }, - "jsonld": { - "$ref": "#/components/schemas/JsonLdCredentialDetailFormat" + "SingleOrArray_any-or-DataIntegrityProofOptions_": { + "anyOf": [ + { + "anyOf": [ + {}, + { + "$ref": "#/components/schemas/DataIntegrityProofOptions" + } + ] }, - "anoncreds": { - "$ref": "#/components/schemas/AnonCredsProposeCredentialFormat" + { + "items": { + "anyOf": [ + {}, + { + "$ref": "#/components/schemas/DataIntegrityProofOptions" + } + ] + }, + "type": "array" } - }, - "type": "object", - "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" - }, - "AutoAcceptCredential": { - "description": "Typing of the state for auto acceptance", - "enum": [ - "always", - "contentApproved", - "never" - ], - "type": "string" + ] }, - "ProposeCredentialOptions": { + "LinkedDataProof": { + "description": "Linked Data Proof", "properties": { - "protocolVersion": { - "$ref": "#/components/schemas/ProtocolVersion" + "type": { + "type": "string" }, - "credentialFormats": { - "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormatType-Array.createProposal_" + "proofPurpose": { + "type": "string" }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" + "verificationMethod": { + "type": "string" }, - "comment": { + "created": { "type": "string" }, - "connectionId": { - "$ref": "#/components/schemas/RecordId" - } - }, - "required": [ - "protocolVersion", - "credentialFormats", - "connectionId" - ], - "type": "object", - "additionalProperties": false - }, - "AnonCredsAcceptProposalFormat": { - "description": "This defines the module payload for calling CredentialsApi.acceptProposal", - "properties": { - "credentialDefinitionId": { + "domain": { "type": "string" }, - "revocationRegistryDefinitionId": { + "challenge": { "type": "string" }, - "revocationRegistryIndex": { - "type": "number", - "format": "double" + "jws": { + "type": "string" }, - "attributes": { - "items": { - "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" - }, - "type": "array" + "proofValue": { + "type": "string" }, - "linkedAttachments": { - "items": { - "$ref": "#/components/schemas/LinkedAttachment" - }, - "type": "array" + "nonce": { + "type": "string" } }, + "required": [ + "type", + "proofPurpose", + "verificationMethod", + "created" + ], "type": "object", "additionalProperties": false }, - "Record_string.never_": { - "properties": {}, - "type": "object", - "description": "Construct a type with a set of properties K of type T" - }, - "EmptyObject": { - "$ref": "#/components/schemas/Record_string.never_" - }, - "CredentialFormatPayload_CredentialFormats.acceptProposal_": { + "DataIntegrityProof": { + "description": "Linked Data Proof", "properties": { - "indy": { - "$ref": "#/components/schemas/AnonCredsAcceptProposalFormat" + "type": { + "type": "string" }, - "jsonld": { - "$ref": "#/components/schemas/EmptyObject" + "cryptosuite": { + "type": "string" }, - "anoncreds": { - "$ref": "#/components/schemas/AnonCredsAcceptProposalFormat" - } - }, - "type": "object", - "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" - }, - "AcceptCredentialProposalOptions": { - "properties": { - "credentialRecordId": { + "proofPurpose": { "type": "string" }, - "credentialFormats": { - "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormats.acceptProposal_" + "verificationMethod": { + "type": "string" }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" + "domain": { + "type": "string" }, - "comment": { + "challenge": { "type": "string" - } - }, - "required": [ - "credentialRecordId" - ], - "type": "object", - "additionalProperties": false - }, - "AnonCredsOfferCredentialFormat": { - "description": "This defines the module payload for calling CredentialsApi.offerCredential\nor CredentialsApi.negotiateProposal", - "properties": { - "credentialDefinitionId": { + }, + "nonce": { "type": "string" }, - "revocationRegistryDefinitionId": { + "created": { "type": "string" }, - "revocationRegistryIndex": { - "type": "number", - "format": "double" + "expires": { + "type": "string" }, - "attributes": { - "items": { - "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" - }, - "type": "array" + "proofValue": { + "type": "string" }, - "linkedAttachments": { - "items": { - "$ref": "#/components/schemas/LinkedAttachment" - }, - "type": "array" + "previousProof": { + "type": "string" } }, "required": [ - "credentialDefinitionId", - "attributes" + "type", + "cryptosuite", + "proofPurpose", + "verificationMethod" ], "type": "object", "additionalProperties": false }, - "CredentialFormatPayload_CredentialFormats.createOffer_": { - "properties": { - "indy": { - "$ref": "#/components/schemas/AnonCredsOfferCredentialFormat" - }, - "jsonld": { - "$ref": "#/components/schemas/JsonLdCredentialDetailFormat" + "SingleOrArray_LinkedDataProof-or-DataIntegrityProof_": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/components/schemas/LinkedDataProof" + }, + { + "$ref": "#/components/schemas/DataIntegrityProof" + } + ] }, - "anoncreds": { - "$ref": "#/components/schemas/AnonCredsOfferCredentialFormat" + { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/LinkedDataProof" + }, + { + "$ref": "#/components/schemas/DataIntegrityProof" + } + ] + }, + "type": "array" } - }, - "type": "object", - "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + ] }, - "CreateOfferOptions": { + "W3cJsonLdVerifiableCredential": { "properties": { - "protocolVersion": { - "$ref": "#/components/schemas/ProtocolVersion" + "context": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/JsonObject" + } + ] + }, + "type": "array" }, - "connectionId": { - "$ref": "#/components/schemas/RecordId" + "id": { + "type": "string" }, - "credentialFormats": { - "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormats.createOffer_" + "type": { + "items": { + "type": "string" + }, + "type": "array" }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" + "issuer": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/W3cIssuer" + } + ] }, - "comment": { + "issuanceDate": { "type": "string" }, - "goalCode": { + "expirationDate": { "type": "string" }, - "goal": { - "type": "string" + "credentialSubject": { + "$ref": "#/components/schemas/SingleOrArray_W3cCredentialSubject_" + }, + "credentialSchema": { + "$ref": "#/components/schemas/SingleOrArray_W3cCredentialSchema_" + }, + "credentialStatus": { + "$ref": "#/components/schemas/W3cCredentialStatus" + }, + "proof": { + "$ref": "#/components/schemas/SingleOrArray_LinkedDataProof-or-DataIntegrityProof_" } }, "required": [ - "protocolVersion", - "connectionId", - "credentialFormats" + "context", + "type", + "issuer", + "issuanceDate", + "credentialSubject", + "proof" ], "type": "object", "additionalProperties": false }, - "CredentialFormatPayload_CredentialFormatType-Array.createOffer_": { + "ProofPurpose": {}, + "SafeW3cJsonLdVerifyCredentialOptions": { "properties": { - "indy": { - "$ref": "#/components/schemas/AnonCredsOfferCredentialFormat" + "credential": { + "$ref": "#/components/schemas/W3cJsonLdVerifiableCredential" }, - "jsonld": { - "$ref": "#/components/schemas/JsonLdCredentialDetailFormat" + "verifyCredentialStatus": { + "type": "boolean", + "description": "Whether to verify the credentialStatus, if present." }, - "anoncreds": { - "$ref": "#/components/schemas/AnonCredsOfferCredentialFormat" + "proofPurpose": { + "$ref": "#/components/schemas/ProofPurpose" + }, + "proof": { + "$ref": "#/components/schemas/SingleOrArray_any-or-DataIntegrityProofOptions_" } }, + "required": [ + "credential", + "proof" + ], "type": "object", - "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + "additionalProperties": false }, - "CreateOfferOobOptions": { + "SchemaResponseDTO": { "properties": { - "protocolVersion": { - "type": "string" - }, - "credentialFormats": { - "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormatType-Array.createOffer_" - }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" - }, - "comment": { - "type": "string" - }, - "goalCode": { - "type": "string" - }, - "parentThreadId": { - "type": "string" - }, - "willConfirm": { - "type": "boolean" - }, - "label": { + "schemaId": { "type": "string" }, - "imageUrl": { - "type": "string" + "schema": { + "properties": { + "attrNames": { + "items": { + "type": "string" + }, + "type": "array" + }, + "version": { + "type": "string" + }, + "name": { + "type": "string" + }, + "issuerId": { + "type": "string" + } + }, + "required": [ + "attrNames", + "version", + "name", + "issuerId" + ], + "type": "object" }, - "recipientKey": { - "type": "string" + "resolutionMetadata": { + "$ref": "#/components/schemas/Record_string.unknown_" }, - "invitationDid": { - "type": "string" + "schemaMetadata": { + "$ref": "#/components/schemas/Record_string.unknown_" } }, "required": [ - "protocolVersion", - "credentialFormats" + "schemaId", + "resolutionMetadata", + "schemaMetadata" ], "type": "object", "additionalProperties": false }, - "AnonCredsAcceptOfferFormat": { - "description": "This defines the module payload for calling CredentialsApi.acceptOffer. No options are available for this\nmethod, so it's an empty object", - "properties": { - "linkSecretId": { - "type": "string" - } - }, - "type": "object", - "additionalProperties": false + "SchemaId": { + "type": "string", + "example": "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0" }, - "CredentialFormatPayload_CredentialFormats.acceptOffer_": { + "AnonCredsSchema": { "properties": { - "indy": { - "$ref": "#/components/schemas/AnonCredsAcceptOfferFormat" + "issuerId": { + "type": "string" }, - "jsonld": { - "$ref": "#/components/schemas/EmptyObject" + "name": { + "type": "string" }, - "anoncreds": { - "$ref": "#/components/schemas/AnonCredsAcceptOfferFormat" + "version": { + "type": "string" + }, + "attrNames": { + "items": { + "type": "string" + }, + "type": "array" } }, + "required": [ + "issuerId", + "name", + "version", + "attrNames" + ], "type": "object", - "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + "additionalProperties": false }, - "CredentialOfferOptions": { + "RegisterSchemaReturnStateWait": { "properties": { - "credentialRecordId": { - "$ref": "#/components/schemas/RecordId" - }, - "credentialFormats": { - "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormats.acceptOffer_" + "state": { + "type": "string", + "enum": [ + "wait" + ], + "nullable": false }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" }, - "comment": { + "schemaId": { "type": "string" } }, "required": [ - "credentialRecordId" + "state" ], "type": "object", "additionalProperties": false }, - "AnonCredsAcceptRequestFormat": { - "$ref": "#/components/schemas/Record_string.never_", - "description": "This defines the module payload for calling CredentialsApi.acceptRequest. No options are available for this\nmethod, so it's an empty object" - }, - "JsonLdAcceptRequestFormat": { - "description": "Format for accepting a jsonld credential request. Optionally allows the verification\nmethod to use to sign the credential.", + "RegisterSchemaReturnStateAction": { "properties": { - "verificationMethod": { + "state": { + "type": "string", + "enum": [ + "action" + ], + "nullable": false + }, + "action": { + "type": "string" + }, + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" + }, + "schemaId": { "type": "string" } }, + "required": [ + "state", + "action", + "schema", + "schemaId" + ], "type": "object", "additionalProperties": false }, - "CredentialFormatPayload_CredentialFormats.acceptRequest_": { + "RegisterSchemaReturnStateFinished": { "properties": { - "indy": { - "$ref": "#/components/schemas/AnonCredsAcceptRequestFormat" + "state": { + "type": "string", + "enum": [ + "finished" + ], + "nullable": false }, - "jsonld": { - "$ref": "#/components/schemas/JsonLdAcceptRequestFormat" + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" }, - "anoncreds": { - "$ref": "#/components/schemas/AnonCredsAcceptRequestFormat" + "schemaId": { + "type": "string" } }, + "required": [ + "state", + "schema", + "schemaId" + ], "type": "object", - "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + "additionalProperties": false }, - "AcceptCredentialRequestOptions": { + "RegisterSchemaReturnStateFailed": { "properties": { - "credentialRecordId": { - "$ref": "#/components/schemas/RecordId" + "state": { + "type": "string", + "enum": [ + "failed" + ], + "nullable": false }, - "credentialFormats": { - "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormats.acceptRequest_" + "reason": { + "type": "string" }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" }, - "comment": { + "schemaId": { "type": "string" } }, "required": [ - "credentialRecordId" + "state", + "reason" ], "type": "object", "additionalProperties": false }, - "AcceptCredential": { + "RegisterSchemaReturn": { "properties": { - "credentialRecordId": { - "$ref": "#/components/schemas/RecordId" + "jobId": { + "type": "string" + }, + "schemaState": { + "anyOf": [ + { + "$ref": "#/components/schemas/RegisterSchemaReturnStateWait" + }, + { + "$ref": "#/components/schemas/RegisterSchemaReturnStateAction" + }, + { + "$ref": "#/components/schemas/RegisterSchemaReturnStateFinished" + }, + { + "$ref": "#/components/schemas/RegisterSchemaReturnStateFailed" + } + ] + }, + "schemaMetadata": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "registrationMetadata": { + "$ref": "#/components/schemas/Record_string.unknown_" } }, "required": [ - "credentialRecordId" + "schemaState", + "schemaMetadata", + "registrationMetadata" ], "type": "object", "additionalProperties": false }, - "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.proposal_": { - "properties": {}, - "type": "object", - "description": "Get the format data payload for a specific message from a list of CredentialFormat interfaces and a message\n\nFor an indy offer, this resolves to the cred abstract format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#cred-abstract-format" - }, - "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.offer_": { - "properties": {}, - "type": "object", - "description": "Get the format data payload for a specific message from a list of CredentialFormat interfaces and a message\n\nFor an indy offer, this resolves to the cred abstract format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#cred-abstract-format" - }, - "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.request_": { - "properties": {}, - "type": "object", - "description": "Get the format data payload for a specific message from a list of CredentialFormat interfaces and a message\n\nFor an indy offer, this resolves to the cred abstract format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#cred-abstract-format" - }, - "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.credential_": { - "properties": {}, - "type": "object", - "description": "Get the format data payload for a specific message from a list of CredentialFormat interfaces and a message\n\nFor an indy offer, this resolves to the cred abstract format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#cred-abstract-format" - }, - "GetCredentialFormatDataReturn__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array_": { + "CreateSchemaInput": { "properties": { - "credential": { - "$ref": "#/components/schemas/CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.credential_" + "issuerId": { + "type": "string" }, - "request": { - "$ref": "#/components/schemas/CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.request_" + "name": { + "type": "string" }, - "offerAttributes": { + "version": { + "type": "string" + }, + "attributes": { "items": { - "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" + "type": "string" }, "type": "array" }, - "offer": { - "$ref": "#/components/schemas/CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.offer_" + "endorse": { + "type": "boolean" }, - "proposal": { - "$ref": "#/components/schemas/CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array.proposal_" + "endorserDid": { + "type": "string" + } + }, + "required": [ + "issuerId", + "name", + "version", + "attributes" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsCredentialDefinition": { + "properties": { + "issuerId": { + "type": "string" }, - "proposalAttributes": { - "items": { - "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" + "schemaId": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "CL" + ], + "nullable": false + }, + "tag": { + "type": "string" + }, + "value": { + "properties": { + "revocation": {}, + "primary": { + "$ref": "#/components/schemas/Record_string.unknown_" + } }, - "type": "array" + "required": [ + "primary" + ], + "type": "object" } }, + "required": [ + "issuerId", + "schemaId", + "type", + "tag", + "value" + ], "type": "object", - "description": "Get format data return value. Each key holds a mapping of credential format key to format data." + "additionalProperties": false }, - "DidExchangeState": { - "description": "Connection states as defined in RFC 0023.", - "enum": [ - "start", - "invitation-sent", - "invitation-received", - "request-sent", - "request-received", - "response-sent", - "response-received", - "abandoned", - "completed" + "GetCredentialDefinitionReturn": { + "properties": { + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + }, + "credentialDefinitionId": { + "type": "string" + }, + "resolutionMetadata": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "credentialDefinitionMetadata": { + "$ref": "#/components/schemas/Record_string.unknown_" + } + }, + "required": [ + "credentialDefinitionId", + "resolutionMetadata", + "credentialDefinitionMetadata" ], - "type": "string" + "type": "object", + "additionalProperties": false }, - "BasicMessageRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" + "CredentialDefinitionId": { + "type": "string", + "example": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag" }, - "Record_content.string_": { + "RegisterCredentialDefinitionReturnStateWait": { "properties": { - "content": { + "state": { + "type": "string", + "enum": [ + "wait" + ], + "nullable": false + }, + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + }, + "credentialDefinitionId": { "type": "string" } }, "required": [ - "content" + "state" ], "type": "object", - "description": "Construct a type with a set of properties K of type T" + "additionalProperties": false }, - "Pick_InitConfig.label-or-connectionImageUrl_": { + "RegisterCredentialDefinitionReturnStateAction": { "properties": { - "label": { + "state": { + "type": "string", + "enum": [ + "action" + ], + "nullable": false + }, + "action": { "type": "string" }, - "connectionImageUrl": { + "credentialDefinitionId": { "type": "string" + }, + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" } }, "required": [ - "label" + "state", + "action", + "credentialDefinitionId", + "credentialDefinition" ], "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" + "additionalProperties": false }, - "KeyDerivationMethod": { + "RegisterCredentialDefinitionReturnStateFinished": { + "properties": { + "state": { + "type": "string", + "enum": [ + "finished" + ], + "nullable": false + }, + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + }, + "credentialDefinitionId": { + "type": "string" + } + }, + "required": [ + "state", + "credentialDefinition", + "credentialDefinitionId" + ], + "type": "object", + "additionalProperties": false + }, + "RegisterCredentialDefinitionReturnStateFailed": { + "properties": { + "state": { + "type": "string", + "enum": [ + "failed" + ], + "nullable": false + }, + "reason": { + "type": "string" + }, + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + }, + "credentialDefinitionId": { + "type": "string" + } + }, + "required": [ + "state", + "reason" + ], + "type": "object", + "additionalProperties": false + }, + "CredentialDefinitionStates": { + "anyOf": [ + { + "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateWait" + }, + { + "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateAction" + }, + { + "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateFinished" + }, + { + "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateFailed" + } + ] + }, + "RegisterCredentialDefinitionReturn": { + "properties": { + "jobId": { + "type": "string" + }, + "credentialDefinitionState": { + "$ref": "#/components/schemas/CredentialDefinitionStates" + }, + "credentialDefinitionMetadata": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "registrationMetadata": { + "$ref": "#/components/schemas/Record_string.unknown_" + } + }, + "required": [ + "credentialDefinitionState", + "credentialDefinitionMetadata", + "registrationMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "ThreadId": { + "type": "string", + "example": "ea4e5e69-fc04-465a-90d2-9f8ff78aa71d" + }, + "DidCommCredentialState": { + "description": "Issue Credential states as defined in RFC 0036 and RFC 0453", + "enum": [ + "proposal-sent", + "proposal-received", + "offer-sent", + "offer-received", + "declined", + "request-sent", + "request-received", + "credential-issued", + "credential-received", + "done", + "abandoned" + ], + "type": "string" + }, + "DidCommCredentialRole": { + "enum": [ + "issuer", + "holder" + ], + "type": "string" + }, + "W3cCredentialRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "DidCommCredentialExchangeRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "ProtocolVersion": { "enum": [ - "ARGON2I_MOD", - "ARGON2I_INT", - "RAW" + "v1", + "v2" ], "type": "string" }, - "Pick_WalletConfig.id-or-key-or-keyDerivationMethod_": { + "DidCommCredentialPreviewAttributeOptions": { "properties": { - "key": { + "name": { "type": "string" }, - "id": { + "mimeType": { "type": "string" }, - "keyDerivationMethod": { - "$ref": "#/components/schemas/KeyDerivationMethod" + "value": { + "type": "string" } }, "required": [ - "key", - "id" + "name", + "value" + ], + "type": "object", + "additionalProperties": false + }, + "Pick_AnonCredsDidCommProposeCredentialFormat.Exclude_keyofAnonCredsDidCommProposeCredentialFormat.schemaIssuerId-or-issuerId__": { + "properties": { + "schemaId": { + "type": "string" + }, + "schemaName": { + "type": "string" + }, + "schemaVersion": { + "type": "string" + }, + "credentialDefinitionId": { + "type": "string" + }, + "attributes": { + "items": { + "$ref": "#/components/schemas/DidCommCredentialPreviewAttributeOptions" + }, + "type": "array" + }, + "schemaIssuerDid": { + "type": "string" + }, + "issuerDid": { + "type": "string" + } + }, + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "Omit_AnonCredsDidCommProposeCredentialFormat.schemaIssuerId-or-issuerId_": { + "$ref": "#/components/schemas/Pick_AnonCredsDidCommProposeCredentialFormat.Exclude_keyofAnonCredsDidCommProposeCredentialFormat.schemaIssuerId-or-issuerId__", + "description": "Construct a type with the properties of T except for those in type K." + }, + "LegacyIndyDidCommProposeCredentialFormat": { + "$ref": "#/components/schemas/Omit_AnonCredsDidCommProposeCredentialFormat.schemaIssuerId-or-issuerId_", + "description": "This defines the module payload for calling CredentialsApi.createProposal\nor CredentialsApi.negotiateOffer\n\nNOTE: This doesn't include the `issuerId` and `schemaIssuerId` properties that are present in the newer format." + }, + "W3cIssuerOptions": { + "description": "TODO: check how to support arbitrary data in class", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object", + "additionalProperties": false + }, + "SingleOrArray_JsonObject_": { + "anyOf": [ + { + "$ref": "#/components/schemas/JsonObject" + }, + { + "items": { + "$ref": "#/components/schemas/JsonObject" + }, + "type": "array" + } + ] + }, + "JsonCredential": { + "properties": { + "@context": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "$ref": "#/components/schemas/JsonObject" + } + ] + }, + "id": { + "type": "string" + }, + "type": { + "items": { + "type": "string" + }, + "type": "array" + }, + "issuer": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/W3cIssuerOptions" + } + ] + }, + "issuanceDate": { + "type": "string" + }, + "expirationDate": { + "type": "string" + }, + "credentialSubject": { + "$ref": "#/components/schemas/SingleOrArray_JsonObject_" + } + }, + "required": [ + "@context", + "type", + "issuer", + "issuanceDate", + "credentialSubject" + ], + "type": "object", + "additionalProperties": {} + }, + "DidCommJsonLdCredentialDetailFormat": { + "description": "Format for creating a jsonld proposal, offer or request.", + "properties": { + "credential": { + "$ref": "#/components/schemas/JsonCredential" + }, + "options": { + "properties": { + "proofType": { + "type": "string" + }, + "proofPurpose": { + "type": "string" + } + }, + "required": [ + "proofType", + "proofPurpose" + ], + "type": "object" + } + }, + "required": [ + "credential", + "options" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsDidCommProposeCredentialFormat": { + "description": "This defines the module payload for calling CredentialsApi.createProposal\nor CredentialsApi.negotiateOffer", + "properties": { + "schemaIssuerId": { + "type": "string" + }, + "schemaId": { + "type": "string" + }, + "schemaName": { + "type": "string" + }, + "schemaVersion": { + "type": "string" + }, + "credentialDefinitionId": { + "type": "string" + }, + "issuerId": { + "type": "string" + }, + "attributes": { + "items": { + "$ref": "#/components/schemas/DidCommCredentialPreviewAttributeOptions" + }, + "type": "array" + }, + "schemaIssuerDid": { + "type": "string" + }, + "issuerDid": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "DidCommCredentialFormatPayload_CredentialFormatType-Array.createProposal_": { + "properties": { + "indy": { + "$ref": "#/components/schemas/LegacyIndyDidCommProposeCredentialFormat" + }, + "jsonld": { + "$ref": "#/components/schemas/DidCommJsonLdCredentialDetailFormat" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsDidCommProposeCredentialFormat" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + }, + "DidCommAutoAcceptCredential": { + "description": "Typing of the state for auto acceptance", + "enum": [ + "always", + "contentApproved", + "never" + ], + "type": "string" + }, + "ProposeCredentialOptions": { + "properties": { + "protocolVersion": { + "$ref": "#/components/schemas/ProtocolVersion" + }, + "credentialFormats": { + "$ref": "#/components/schemas/DidCommCredentialFormatPayload_CredentialFormatType-Array.createProposal_" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/DidCommAutoAcceptCredential" + }, + "comment": { + "type": "string" + }, + "connectionId": { + "$ref": "#/components/schemas/RecordId" + } + }, + "required": [ + "protocolVersion", + "credentialFormats", + "connectionId" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsDidCommAcceptProposalFormat": { + "description": "This defines the module payload for calling CredentialsApi.acceptProposal", + "properties": { + "credentialDefinitionId": { + "type": "string" + }, + "revocationRegistryDefinitionId": { + "type": "string" + }, + "revocationRegistryIndex": { + "type": "number", + "format": "double" + }, + "attributes": { + "items": { + "$ref": "#/components/schemas/DidCommCredentialPreviewAttributeOptions" + }, + "type": "array" + } + }, + "type": "object", + "additionalProperties": false + }, + "Record_string.never_": { + "properties": {}, + "type": "object", + "description": "Construct a type with a set of properties K of type T" + }, + "EmptyObject": { + "$ref": "#/components/schemas/Record_string.never_" + }, + "DidCommCredentialFormatPayload_CredentialFormats.acceptProposal_": { + "properties": { + "indy": { + "$ref": "#/components/schemas/AnonCredsDidCommAcceptProposalFormat" + }, + "jsonld": { + "$ref": "#/components/schemas/EmptyObject" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsDidCommAcceptProposalFormat" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + }, + "AcceptCredentialProposalOptions": { + "properties": { + "credentialExchangeRecordId": { + "type": "string" + }, + "credentialFormats": { + "$ref": "#/components/schemas/DidCommCredentialFormatPayload_CredentialFormats.acceptProposal_" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/DidCommAutoAcceptCredential" + }, + "comment": { + "type": "string" + } + }, + "required": [ + "credentialExchangeRecordId" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsDidCommOfferCredentialFormat": { + "description": "This defines the module payload for calling CredentialsApi.offerCredential\nor CredentialsApi.negotiateProposal", + "properties": { + "credentialDefinitionId": { + "type": "string" + }, + "revocationRegistryDefinitionId": { + "type": "string" + }, + "revocationRegistryIndex": { + "type": "number", + "format": "double" + }, + "attributes": { + "items": { + "$ref": "#/components/schemas/DidCommCredentialPreviewAttributeOptions" + }, + "type": "array" + } + }, + "required": [ + "credentialDefinitionId", + "attributes" + ], + "type": "object", + "additionalProperties": false + }, + "DidCommCredentialFormatPayload_CredentialFormats.createOffer_": { + "properties": { + "indy": { + "$ref": "#/components/schemas/AnonCredsDidCommOfferCredentialFormat" + }, + "jsonld": { + "$ref": "#/components/schemas/DidCommJsonLdCredentialDetailFormat" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsDidCommOfferCredentialFormat" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + }, + "CreateOfferOptions": { + "properties": { + "protocolVersion": { + "$ref": "#/components/schemas/ProtocolVersion" + }, + "connectionId": { + "$ref": "#/components/schemas/RecordId" + }, + "credentialFormats": { + "$ref": "#/components/schemas/DidCommCredentialFormatPayload_CredentialFormats.createOffer_" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/DidCommAutoAcceptCredential" + }, + "comment": { + "type": "string" + }, + "goalCode": { + "type": "string" + }, + "goal": { + "type": "string" + } + }, + "required": [ + "protocolVersion", + "connectionId", + "credentialFormats" + ], + "type": "object", + "additionalProperties": false + }, + "DidCommCredentialFormatPayload_CredentialFormatType-Array.createOffer_": { + "properties": { + "indy": { + "$ref": "#/components/schemas/AnonCredsDidCommOfferCredentialFormat" + }, + "jsonld": { + "$ref": "#/components/schemas/DidCommJsonLdCredentialDetailFormat" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsDidCommOfferCredentialFormat" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + }, + "CreateOfferOobOptions": { + "properties": { + "protocolVersion": { + "$ref": "#/components/schemas/ProtocolVersion" + }, + "credentialFormats": { + "$ref": "#/components/schemas/DidCommCredentialFormatPayload_CredentialFormatType-Array.createOffer_" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/DidCommAutoAcceptCredential" + }, + "comment": { + "type": "string" + }, + "goalCode": { + "type": "string" + }, + "parentThreadId": { + "type": "string" + }, + "willConfirm": { + "type": "boolean" + }, + "label": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "recipientKey": { + "type": "string" + }, + "invitationDid": { + "type": "string" + } + }, + "required": [ + "protocolVersion", + "credentialFormats" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsDidCommAcceptOfferFormat": { + "description": "This defines the module payload for calling CredentialsApi.acceptOffer. No options are available for this\nmethod, so it's an empty object", + "properties": { + "linkSecretId": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "DidCommCredentialFormatPayload_CredentialFormats.acceptOffer_": { + "properties": { + "indy": { + "$ref": "#/components/schemas/AnonCredsDidCommAcceptOfferFormat" + }, + "jsonld": { + "$ref": "#/components/schemas/EmptyObject" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsDidCommAcceptOfferFormat" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + }, + "CredentialOfferOptions": { + "properties": { + "credentialExchangeRecordId": { + "$ref": "#/components/schemas/RecordId" + }, + "credentialFormats": { + "$ref": "#/components/schemas/DidCommCredentialFormatPayload_CredentialFormats.acceptOffer_" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/DidCommAutoAcceptCredential" + }, + "comment": { + "type": "string" + } + }, + "required": [ + "credentialExchangeRecordId" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsDidCommAcceptRequestFormat": { + "$ref": "#/components/schemas/Record_string.never_", + "description": "This defines the module payload for calling CredentialsApi.acceptRequest. No options are available for this\nmethod, so it's an empty object" + }, + "DidCommJsonLdAcceptRequestFormat": { + "description": "Format for accepting a jsonld credential request. Optionally allows the verification\nmethod to use to sign the credential.", + "properties": { + "verificationMethod": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "DidCommCredentialFormatPayload_CredentialFormats.acceptRequest_": { + "properties": { + "indy": { + "$ref": "#/components/schemas/AnonCredsDidCommAcceptRequestFormat" + }, + "jsonld": { + "$ref": "#/components/schemas/DidCommJsonLdAcceptRequestFormat" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsDidCommAcceptRequestFormat" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + }, + "AcceptCredentialRequestOptions": { + "properties": { + "credentialExchangeRecordId": { + "$ref": "#/components/schemas/RecordId" + }, + "credentialFormats": { + "$ref": "#/components/schemas/DidCommCredentialFormatPayload_CredentialFormats.acceptRequest_" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/DidCommAutoAcceptCredential" + }, + "comment": { + "type": "string" + } + }, + "required": [ + "credentialExchangeRecordId" + ], + "type": "object", + "additionalProperties": false + }, + "AcceptCredential": { + "properties": { + "credentialExchangeRecordId": { + "$ref": "#/components/schemas/RecordId" + } + }, + "required": [ + "credentialExchangeRecordId" + ], + "type": "object", + "additionalProperties": false + }, + "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.proposal_": { + "properties": {}, + "type": "object", + "description": "Get the format data payload for a specific message from a list of CredentialFormat interfaces and a message\n\nFor an indy offer, this resolves to the cred abstract format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#cred-abstract-format" + }, + "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.offer_": { + "properties": {}, + "type": "object", + "description": "Get the format data payload for a specific message from a list of CredentialFormat interfaces and a message\n\nFor an indy offer, this resolves to the cred abstract format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#cred-abstract-format" + }, + "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.request_": { + "properties": {}, + "type": "object", + "description": "Get the format data payload for a specific message from a list of CredentialFormat interfaces and a message\n\nFor an indy offer, this resolves to the cred abstract format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#cred-abstract-format" + }, + "CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.credential_": { + "properties": {}, + "type": "object", + "description": "Get the format data payload for a specific message from a list of CredentialFormat interfaces and a message\n\nFor an indy offer, this resolves to the cred abstract format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#cred-abstract-format" + }, + "GetCredentialFormatDataReturn__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array_": { + "properties": { + "credential": { + "$ref": "#/components/schemas/CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.credential_" + }, + "request": { + "$ref": "#/components/schemas/CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.request_" + }, + "offerAttributes": { + "items": { + "$ref": "#/components/schemas/DidCommCredentialPreviewAttributeOptions" + }, + "type": "array" + }, + "offer": { + "$ref": "#/components/schemas/CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.offer_" + }, + "proposal": { + "$ref": "#/components/schemas/CredentialFormatDataMessagePayload__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array.proposal_" + }, + "proposalAttributes": { + "items": { + "$ref": "#/components/schemas/DidCommCredentialPreviewAttributeOptions" + }, + "type": "array" + } + }, + "type": "object", + "description": "Get format data return value. Each key holds a mapping of credential format key to format data." + }, + "DidCommProofExchangeRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "AnonCredsPresentationPreviewAttribute": { + "properties": { + "name": { + "type": "string" + }, + "credentialDefinitionId": { + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "value": { + "type": "string" + }, + "referent": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsPredicateType": { + "type": "string", + "enum": [ + ">=", + ">", + "<=", + "<" + ] + }, + "AnonCredsPresentationPreviewPredicate": { + "properties": { + "name": { + "type": "string" + }, + "credentialDefinitionId": { + "type": "string" + }, + "predicate": { + "$ref": "#/components/schemas/AnonCredsPredicateType" + }, + "threshold": { + "type": "number", + "format": "double" + } + }, + "required": [ + "name", + "credentialDefinitionId", + "predicate", + "threshold" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsNonRevokedInterval": { + "properties": { + "from": { + "type": "number", + "format": "double" + }, + "to": { + "type": "number", + "format": "double" + } + }, + "type": "object", + "additionalProperties": false + }, + "AnonCredsProposeProofFormat": { + "description": "Interface for creating an anoncreds proof proposal.", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "attributes": { + "items": { + "$ref": "#/components/schemas/AnonCredsPresentationPreviewAttribute" + }, + "type": "array" + }, + "predicates": { + "items": { + "$ref": "#/components/schemas/AnonCredsPresentationPreviewPredicate" + }, + "type": "array" + }, + "nonRevokedInterval": { + "$ref": "#/components/schemas/AnonCredsNonRevokedInterval" + } + }, + "type": "object", + "additionalProperties": false + }, + "Schema": { + "properties": { + "uri": { + "type": "string" + }, + "required": { + "type": "boolean" + } + }, + "required": [ + "uri" + ], + "type": "object", + "additionalProperties": false + }, + "FilterV1": { + "properties": { + "const": { + "$ref": "#/components/schemas/OneOfNumberStringBoolean" + }, + "enum": { + "items": { + "$ref": "#/components/schemas/OneOfNumberStringBoolean" + }, + "type": "array" + }, + "exclusiveMinimum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "exclusiveMaximum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "format": { + "type": "string" + }, + "minLength": { + "type": "number", + "format": "double" + }, + "maxLength": { + "type": "number", + "format": "double" + }, + "minimum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "maximum": { + "$ref": "#/components/schemas/OneOfNumberString" + }, + "not": { + "additionalProperties": false, + "type": "object" + }, + "pattern": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "FieldV1": { + "properties": { + "id": { + "type": "string" + }, + "path": { + "items": { + "type": "string" + }, + "type": "array" + }, + "purpose": { + "type": "string" + }, + "filter": { + "$ref": "#/components/schemas/FilterV1" + }, + "predicate": { + "$ref": "#/components/schemas/Optionality" + } + }, + "required": [ + "path" + ], + "type": "object", + "additionalProperties": false + }, + "ConstraintsV1": { + "properties": { + "limit_disclosure": { + "$ref": "#/components/schemas/Optionality" + }, + "statuses": { + "$ref": "#/components/schemas/Statuses" + }, + "fields": { + "items": { + "$ref": "#/components/schemas/FieldV1" + }, + "type": "array" + }, + "subject_is_issuer": { + "$ref": "#/components/schemas/Optionality" + }, + "is_holder": { + "items": { + "$ref": "#/components/schemas/HolderSubject" + }, + "type": "array" + }, + "same_subject": { + "items": { + "$ref": "#/components/schemas/HolderSubject" + }, + "type": "array" + } + }, + "type": "object", + "additionalProperties": false + }, + "InputDescriptorV1": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "purpose": { + "type": "string" + }, + "group": { + "items": { + "type": "string" + }, + "type": "array" + }, + "schema": { + "items": { + "$ref": "#/components/schemas/Schema" + }, + "type": "array" + }, + "issuance": { + "items": { + "$ref": "#/components/schemas/Issuance" + }, + "type": "array" + }, + "constraints": { + "$ref": "#/components/schemas/ConstraintsV1" + } + }, + "required": [ + "id", + "schema" + ], + "type": "object", + "additionalProperties": false + }, + "PresentationDefinitionV1": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "purpose": { + "type": "string" + }, + "format": { + "$ref": "#/components/schemas/Format" + }, + "submission_requirements": { + "items": { + "$ref": "#/components/schemas/SubmissionRequirement" + }, + "type": "array" + }, + "input_descriptors": { + "items": { + "$ref": "#/components/schemas/InputDescriptorV1" + }, + "type": "array" + } + }, + "required": [ + "id", + "input_descriptors" + ], + "type": "object", + "additionalProperties": false + }, + "DidCommProofFormatPayload_ProofFormats.createProposal_": { + "properties": { + "indy": { + "$ref": "#/components/schemas/AnonCredsProposeProofFormat" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsProposeProofFormat" + }, + "presentationExchange": { + "properties": { + "presentationDefinition": { + "$ref": "#/components/schemas/PresentationDefinitionV1" + } + }, + "required": [ + "presentationDefinition" + ], + "type": "object" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of ProofFormat interfaces and a method" + }, + "DidCommAutoAcceptProof": { + "description": "Typing of the state for auto acceptance", + "enum": [ + "always", + "contentApproved", + "never" + ], + "type": "string" + }, + "RequestProofProposalOptions": { + "properties": { + "protocolVersion": { + "$ref": "#/components/schemas/ProtocolVersion" + }, + "connectionId": { + "type": "string" + }, + "proofFormats": { + "$ref": "#/components/schemas/DidCommProofFormatPayload_ProofFormats.createProposal_" + }, + "goalCode": { + "type": "string" + }, + "parentThreadId": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/DidCommAutoAcceptProof" + }, + "comment": { + "type": "string" + } + }, + "required": [ + "protocolVersion", + "connectionId", + "proofFormats" + ], + "type": "object", + "additionalProperties": false + }, + "DidCommProofFormatPayload_ProofFormats.acceptProposal_": { + "properties": { + "indy": { + "properties": { + "version": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "anoncreds": { + "properties": { + "version": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "presentationExchange": { + "properties": { + "options": { + "properties": { + "domain": { + "type": "string" + }, + "challenge": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of ProofFormat interfaces and a method" + }, + "AcceptProofProposal": { + "properties": { + "proofExchangeRecordId": { + "type": "string" + }, + "proofFormats": { + "$ref": "#/components/schemas/DidCommProofFormatPayload_ProofFormats.acceptProposal_" + }, + "comment": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/DidCommAutoAcceptProof" + }, + "goalCode": { + "type": "string" + }, + "willConfirm": { + "type": "boolean" + } + }, + "required": [ + "proofExchangeRecordId", + "proofFormats" + ], + "type": "object", + "additionalProperties": false + }, + "RequestProofOptions": { + "properties": { + "connectionId": { + "type": "string" + }, + "protocolVersion": { + "type": "string" + }, + "proofFormats": {}, + "comment": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/DidCommAutoAcceptProof" + }, + "goalCode": { + "type": "string" + }, + "parentThreadId": { + "type": "string" + }, + "willConfirm": { + "type": "boolean" + } + }, + "required": [ + "connectionId", + "protocolVersion", + "proofFormats", + "comment", + "autoAcceptProof" + ], + "type": "object", + "additionalProperties": false + }, + "CreateProofRequestOobOptions": { + "properties": { + "protocolVersion": { + "type": "string" + }, + "proofFormats": {}, + "goalCode": { + "type": "string" + }, + "parentThreadId": { + "type": "string" + }, + "willConfirm": { + "type": "boolean" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/DidCommAutoAcceptProof" + }, + "comment": { + "type": "string" + }, + "label": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "recipientKey": { + "type": "string" + }, + "invitationDid": { + "type": "string" + } + }, + "required": [ + "protocolVersion", + "proofFormats" + ], + "type": "object", + "additionalProperties": false + }, + "ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.proposal_": { + "properties": {}, + "type": "object", + "description": "Get the format data payload for a specific message from a list of ProofFormat interfaces and a message\n\nFor an indy offer, this resolves to the proof request format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#proof-request-format" + }, + "ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.request_": { + "properties": {}, + "type": "object", + "description": "Get the format data payload for a specific message from a list of ProofFormat interfaces and a message\n\nFor an indy offer, this resolves to the proof request format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#proof-request-format" + }, + "ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.presentation_": { + "properties": {}, + "type": "object", + "description": "Get the format data payload for a specific message from a list of ProofFormat interfaces and a message\n\nFor an indy offer, this resolves to the proof request format as defined here:\nhttps://github.com/hyperledger/aries-rfcs/tree/b3a3942ef052039e73cd23d847f42947f8287da2/features/0592-indy-attachments#proof-request-format" + }, + "GetProofFormatDataReturn__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array_": { + "properties": { + "presentation": { + "$ref": "#/components/schemas/ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.presentation_" + }, + "request": { + "$ref": "#/components/schemas/ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.request_" + }, + "proposal": { + "$ref": "#/components/schemas/ProofFormatDataMessagePayload__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array.proposal_" + } + }, + "type": "object" + }, + "OpenId4VcVerifierRecord": { + "$ref": "#/components/schemas/Record_string.unknown_", + "description": "For OID4VC you need to expos metadata files. Each issuer needs to host this metadata. This is not the case for DIDComm where we can just have one /didcomm endpoint.\nSo we create a record per openid issuer/verifier that you want, and each tenant can create multiple issuers/verifiers which have different endpoints\nand metadata files" + }, + "OpenId4VcSiopVerifierClientMetadata": { + "properties": { + "client_name": { + "type": "string" + }, + "logo_uri": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "OpenId4VcSiopCreateVerifierOptions": { + "properties": { + "verifierId": { + "type": "string" + }, + "clientMetadata": { + "$ref": "#/components/schemas/OpenId4VcSiopVerifierClientMetadata" + } + }, + "type": "object", + "additionalProperties": false + }, + "OpenId4VcUpdateVerifierRecordOptions": { + "properties": { + "clientMetadata": { + "$ref": "#/components/schemas/OpenId4VcSiopVerifierClientMetadata" + } + }, + "type": "object", + "additionalProperties": false + } + }, + "securitySchemes": { + "apiKey": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + }, + "jwt": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + }, + "info": { + "title": "credo-controller", + "version": "2.1.3", + "description": "Rest endpoint wrapper for using your agent over HTTP", + "license": { + "name": "Apache-2.0" + }, + "contact": {} + }, + "paths": { + "/x509": { + "post": { + "operationId": "CreateX509Certificate", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "properties": { + "keyId": {}, + "publicCertificateBase64": { + "type": "string" + } + }, + "required": [ + "keyId", + "publicCertificateBase64" + ], + "type": "object" + } + } + } + } + }, + "tags": [ + "x509" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/X509CreateCertificateOptionsDto" + } + } + } + } + } + }, + "/x509/import": { + "post": { + "operationId": "ImportX509Certificates", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "properties": { + "keyId": {}, + "issuerCertificate": { + "type": "string" + } + }, + "required": [ + "keyId", + "issuerCertificate" + ], + "type": "object" + } + } + } + } + }, + "tags": [ + "x509" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/X509ImportCertificateOptionsDto" + } + } + } + } + } + }, + "/x509/trusted": { + "post": { + "operationId": "AddTrustedCertificate", + "responses": { + "204": { + "description": "No content" + } + }, + "tags": [ + "x509" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "certificate": { + "type": "string" + } + }, + "required": [ + "certificate" + ], + "type": "object" + } + } + } + } + }, + "get": { + "operationId": "GetTrustedCertificates", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + } + } + } + }, + "tags": [ + "x509" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [] + } + }, + "/x509/decode": { + "post": { + "operationId": "DecodeCertificate", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/X509Certificate" + } + } + } + } + }, + "tags": [ + "x509" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "certificate": { + "type": "string" + } + }, + "required": [ + "certificate" + ], + "type": "object" + } + } + } + } + } + }, + "/polygon/create-keys": { + "post": { + "operationId": "CreateKeyPair", + "responses": { + "200": { + "description": "Secp256k1KeyPair", + "content": { + "application/json": { + "schema": { + "properties": { + "address": { + "type": "string" + }, + "publicKeyBase58": { + "type": "string" + }, + "privateKey": { + "type": "string" + } + }, + "required": [ + "address", + "publicKeyBase58", + "privateKey" + ], + "type": "object" + } + } + } + } + }, + "description": "Create Secp256k1 key pair for polygon DID", + "tags": [ + "Polygon" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated", + "Basewallet" + ] + } + ], + "parameters": [] + } + }, + "/polygon/create-schema": { + "post": { + "operationId": "CreateSchema", + "responses": { + "200": { + "description": "Schema JSON", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "description": "Create polygon based W3C schema", + "tags": [ + "Polygon" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "schema": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "schemaName": { + "type": "string" + }, + "did": { + "type": "string" + } + }, + "required": [ + "schema", + "schemaName", + "did" + ], + "type": "object" + } + } + } + } + } + }, + "/polygon/estimate-transaction": { + "post": { + "operationId": "EstimateTransaction", + "responses": { + "200": { + "description": "Transaction Object", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "description": "Estimate transaction", + "tags": [ + "Polygon" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated", + "Basewallet" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidOperationOptions" + } + } + } + } + } + }, + "/polygon/{did}/{schemaId}": { + "get": { + "operationId": "GetSchemaById", + "responses": { + "200": { + "description": "Schema Object", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "description": "Fetch schema details", + "tags": [ + "Polygon" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "did", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "schemaId", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/openid4vc/verification-sessions/create-presentation-request": { + "post": { + "operationId": "CreateProofRequest", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "description": "Create an authorization request, acting as a Relying Party (RP)", + "tags": [ + "oid4vc verification sessions" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAuthorizationRequest" + } + } + } + } + } + }, + "/openid4vc/verification-sessions": { + "get": { + "operationId": "GetAllVerificationSessions", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/OpenId4VcVerificationSessionRecord" + }, + "type": "array" + } + } + } + } + }, + "description": "Retrieve all verification session records", + "tags": [ + "oid4vc verification sessions" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ + { + "in": "query", + "name": "publicVerifierId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "payloadState", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "state", + "required": false, + "schema": { + "$ref": "#/components/schemas/OpenId4VcVerificationSessionState" + } + }, + { + "in": "query", + "name": "authorizationRequestUri", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "authorizationRequestId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "nonce", + "required": false, + "schema": { + "type": "string" + } + } + ] + } + }, + "/openid4vc/verification-sessions/{verificationSessionId}": { + "get": { + "operationId": "GetVerificationSessionsById", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenId4VcVerificationSessionRecord" + } + } + } + } + }, + "description": "Get verification session by ID", + "tags": [ + "oid4vc verification sessions" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "verificationSessionId", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/openid4vc/verification-sessions/response/{verificationSessionId}": { + "get": { + "operationId": "GetVerifiedAuthorizationResponse", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "tags": [ + "oid4vc verification sessions" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "verificationSessionId", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/openid4vc/verification-sessions/verify-authorization-response": { + "post": { + "operationId": "VerifyDcqlProofRequest", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "description": "Verify authorization response for a DCAPI proof request", + "tags": [ + "oid4vc verification sessions" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenId4VCDCQLVerificationSessionRecord" + } + } + } + } + } + }, + "/openid4vc/issuer": { + "post": { + "operationId": "CreateIssuer", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenId4VcIssuerRecord" + }, + "examples": { + "Example 1": { + "value": { + "issuerId": "abc-gov", + "accessTokenSignerKeyType": "ed25519", + "display": [ + { + "name": "ABC Gov", + "locale": "en", + "logo": { + "uri": "https://upload.wikimedia.org/wikipedia/commons/2/2f/ABC-2021-LOGO.svg", + "alt_text": "abc_logo" + } + } + ], + "dpopSigningAlgValuesSupported": [ + "RS256", + "ES256" + ], + "credentialConfigurationsSupported": { + "VaccinationCredential-sdjwt": { + "format": "vc+sd-jwt", + "vct": "VaccinationCredential", + "scope": "openid4vc:credential:VaccinationCredential-sdjwt", + "claims": { + "name": { + "mandatory": true, + "value_type": "string", + "display": { + "name": "Full Name", + "locale": "en" + } + }, + "vaccine": { + "mandatory": true, + "value_type": "string", + "display": { + "name": "Vaccine Type", + "locale": "en" + } + }, + "lotNumber": { + "value_type": "string", + "display": { + "name": "Batch Number", + "locale": "en" + } + }, + "performer": { + "value_type": "string", + "display": { + "name": "Healthcare Provider", + "locale": "en" + } + }, + "doseDate": { + "value_type": "date", + "display": { + "name": "Date of Dose", + "locale": "en" + } + } + }, + "credential_signing_alg_values_supported": [ + "ES256" + ], + "cryptographic_binding_methods_supported": [ + "did:key" + ], + "display": [ + { + "name": "COVID-19 Vaccination Certificate", + "description": "Proof of vaccination against COVID-19", + "locale": "en" + } + ] + }, + "NationalIDCredential-mdoc": { + "format": "mso_mdoc", + "doctype": "org.iso.18013.5.1", + "scope": "openid4vc:credential:NationalIDCredential-mdoc", + "claims": { + "family_name": { + "mandatory": true, + "value_type": "string", + "display": { + "name": "Last Name", + "locale": "en" + } + }, + "given_name": { + "mandatory": true, + "value_type": "string", + "display": { + "name": "First Name", + "locale": "en" + } + }, + "birth_date": { + "value_type": "date", + "display": { + "name": "Date of Birth", + "locale": "en" + } + }, + "gender": { + "value_type": "string", + "display": { + "name": "Gender", + "locale": "en" + } + }, + "nationality": { + "value_type": "string", + "display": { + "name": "Nationality", + "locale": "en" + } + }, + "document_number": { + "mandatory": true, + "value_type": "string", + "display": { + "name": "Document Number", + "locale": "en" + } + }, + "issuing_authority": { + "value_type": "string", + "display": { + "name": "Issuing Authority", + "locale": "en" + } + }, + "expiry_date": { + "value_type": "date", + "display": { + "name": "Expiry Date", + "locale": "en" + } + } + }, + "credential_signing_alg_values_supported": [ + "ES256" + ], + "cryptographic_binding_methods_supported": [ + "did:key" + ], + "display": [ + { + "name": "National ID", + "description": "Digital government-issued identity credential", + "locale": "en" + } + ] + }, + "UniversityDegreeCredential-sdjwt": { + "format": "vc+sd-jwt", + "vct": "UniversityDegreeCredential", + "scope": "openid4vc:credential:UniversityDegreeCredential-sdjwt", + "claims": { + "full_name": { + "mandatory": true, + "value_type": "string", + "display": { + "name": "Full Name", + "locale": "en" + } + }, + "diploma_name": { + "mandatory": true, + "value_type": "string", + "display": { + "name": "Degree Title", + "locale": "en" + } + }, + "college_name": { + "value_type": "string", + "display": { + "name": "College/University", + "locale": "en" + } + }, + "graduation_date": { + "value_type": "date", + "display": { + "name": "Graduation Date", + "locale": "en" + } + }, + "awarded_date": { + "value_type": "date", + "display": { + "name": "Award Date", + "locale": "en" + } + } + }, + "credential_signing_alg_values_supported": [ + "ES256", + "EdDSA" + ], + "cryptographic_binding_methods_supported": [ + "did:key" + ], + "display": [ + { + "name": "University Degree Credential", + "description": "Issued by a recognized educational institution", + "locale": "en" + } + ] + }, + "DrivingLicenseCredential-mdoc": { + "format": "mso_mdoc", + "doctype": "org.iso.18013.5.1", + "scope": "openid4vc:credential:DrivingLicenseCredential-mdoc", + "claims": { + "family_name": { + "mandatory": true, + "value_type": "string", + "display": { + "name": "Surname", + "locale": "en" + } + }, + "given_name": { + "mandatory": true, + "value_type": "string", + "display": { + "name": "Given Name", + "locale": "en" + } + }, + "birth_date": { + "value_type": "date", + "display": { + "name": "Date of Birth", + "locale": "en" + } + }, + "issue_date": { + "value_type": "date", + "display": { + "name": "Issued On", + "locale": "en" + } + }, + "expiry_date": { + "value_type": "date", + "display": { + "name": "Expires On", + "locale": "en" + } + }, + "issuing_country": { + "value_type": "string", + "display": { + "name": "Issuing Country", + "locale": "en" + } + }, + "license_number": { + "value_type": "string", + "display": { + "name": "License Number", + "locale": "en" + } + }, + "categories_of_vehicles": { + "value_type": "string", + "display": { + "name": "Authorized Vehicle Types", + "locale": "en" + } + } + }, + "credential_signing_alg_values_supported": [ + "ES256" + ], + "cryptographic_binding_methods_supported": [ + "did:key" + ], + "display": [ + { + "name": "Driving License", + "description": "ISO-compliant mobile driving license", + "locale": "en" + } + ] + } + } + } + } + } + } + } + } + }, + "description": "Creates an issuer with issuer metadata.", + "tags": [ + "oid4vc issuers" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateIssuerOptions" + } + } + } + } + }, + "get": { + "operationId": "GetIssuersByQuery", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/OpenId4VcIssuerRecord" + }, + { + "items": { + "$ref": "#/components/schemas/OpenId4VcIssuerRecord" + }, + "type": "array" + } + ] + } + } + } + } + }, + "description": "Query issuers by optional publicIssuerId.", + "tags": [ + "oid4vc issuers" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ + { + "in": "query", + "name": "publicIssuerId", + "required": false, + "schema": { + "type": "string" + } + } + ] + } + }, + "/openid4vc/issuer/{publicIssuerId}": { + "put": { + "operationId": "UpdateIssuerMetadata", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenId4VcIssuerRecord" + } + } + } + } + }, + "description": "Updates issuer metadata for a given publicIssuerId.", + "tags": [ + "oid4vc issuers" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "publicIssuerId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateIssuerRecordOptions" + } + } + } + } + }, + "get": { + "operationId": "GetIssuer", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenId4VcIssuerRecord" + } + } + } + } + }, + "description": "Returns a specific issuer by publicIssuerId.", + "tags": [ + "oid4vc issuers" ], - "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" - }, - "TenantConfig": { - "allOf": [ + "security": [ { - "$ref": "#/components/schemas/Pick_InitConfig.label-or-connectionImageUrl_" - }, + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ { - "properties": { - "walletConfig": { - "$ref": "#/components/schemas/Pick_WalletConfig.id-or-key-or-keyDerivationMethod_" - } - }, - "required": [ - "walletConfig" - ], - "type": "object" + "in": "path", + "name": "publicIssuerId", + "required": true, + "schema": { + "type": "string" + } } ] - }, - "MetadataValue": { - "$ref": "#/components/schemas/Record_string.any_" - }, - "MetadataBase": { - "properties": {}, - "additionalProperties": { - "$ref": "#/components/schemas/MetadataValue" - }, - "type": "object" - }, - "Metadata____": { - "description": "Metadata access class to get, set (create and update), add (append to a record) and delete metadata on any record.\n\nset will override the previous value if it already exists\n\nnote: To add persistence to these records, you have to update the record in the correct repository", - "properties": { - "data": { - "$ref": "#/components/schemas/MetadataBase" + } + }, + "/openid4vc/issuer/{issuerId}/metadata": { + "get": { + "operationId": "GetIssuerAgentMetaData", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } } }, - "required": [ - "data" + "description": "Returns metadata for a specific issuer.", + "tags": [ + "oid4vc issuers" ], - "type": "object", - "additionalProperties": false - }, - "Pick_CustomTenantConfig.Exclude_keyofCustomTenantConfig.walletConfig__": { - "properties": { - "label": { - "type": "string" - }, - "connectionImageUrl": { - "type": "string" + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] } - }, - "required": [ - "label" ], - "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" - }, - "Omit_CustomTenantConfig.walletConfig_": { - "$ref": "#/components/schemas/Pick_CustomTenantConfig.Exclude_keyofCustomTenantConfig.walletConfig__", - "description": "Construct a type with the properties of T except for those in type K." - }, - "CreateTenantOptions": { - "properties": { - "config": { - "$ref": "#/components/schemas/Omit_CustomTenantConfig.walletConfig_" + "parameters": [ + { + "in": "path", + "name": "issuerId", + "required": true, + "schema": { + "type": "string" + } } - }, - "required": [ - "config" - ], - "type": "object", - "additionalProperties": false - } - }, - "securitySchemes": { - "apiKey": { - "type": "apiKey", - "name": "Authorization", - "in": "header" - }, - "jwt": { - "type": "http", - "scheme": "bearer", - "bearerFormat": "JWT" + ] } - } - }, - "info": { - "title": "credo-controller", - "version": "2.0.0", - "description": "Rest endpoint wrapper for using your agent over HTTP", - "license": { - "name": "Apache-2.0" }, - "contact": {} - }, - "paths": { - "/polygon/create-keys": { - "post": { - "operationId": "CreateKeyPair", + "/openid4vc/issuer/{id}": { + "delete": { + "operationId": "DeleteIssuer", "responses": { "200": { - "description": "Secp256k1KeyPair", + "description": "Ok", "content": { "application/json": { "schema": { "properties": { - "address": { - "type": "string" - }, - "publicKeyBase58": { - "type": "string" - }, - "privateKey": { + "message": { "type": "string" } }, "required": [ - "address", - "publicKeyBase58", - "privateKey" + "message" ], "type": "object" } @@ -3327,38 +6428,60 @@ } } }, - "description": "Create Secp256k1 key pair for polygon DID", + "description": "Deletes a specific issuer by record id.", "tags": [ - "Polygon" + "oid4vc issuers" ], "security": [ { "jwt": [ "tenant", - "dedicated", - "Basewallet" + "dedicated" ] } ], - "parameters": [] + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ] } }, - "/polygon/create-schema": { + "/openid4vc/issuance-sessions/create-credential-offer": { "post": { - "operationId": "CreateSchema", + "operationId": "CreateCredentialOffer", "responses": { "200": { - "description": "Schema JSON", + "description": "Ok", "content": { "application/json": { - "schema": {} + "schema": { + "properties": { + "issuanceSession": { + "$ref": "#/components/schemas/OpenId4VcIssuanceSessionRecord" + }, + "credentialOffer": { + "type": "string" + } + }, + "required": [ + "issuanceSession", + "credentialOffer" + ], + "type": "object" + } } } } }, - "description": "Create polygon based W3C schema", + "description": "Creates a credential offer with the specified credential configurations and authorization type.", "tags": [ - "Polygon" + "oid4vc issuance sessions" ], "security": [ { @@ -3374,84 +6497,150 @@ "content": { "application/json": { "schema": { - "properties": { - "schema": { - "$ref": "#/components/schemas/Record_string.unknown_" - }, - "schemaName": { - "type": "string" - }, - "did": { - "type": "string" - } - }, - "required": [ - "schema", - "schemaName", - "did" - ], - "type": "object" + "$ref": "#/components/schemas/OpenId4VcIssuanceSessionsCreateOffer" } } } } } }, - "/polygon/estimate-transaction": { - "post": { - "operationId": "EstimateTransaction", + "/openid4vc/issuance-sessions/{issuanceSessionId}": { + "get": { + "operationId": "GetIssuanceSessionsById", "responses": { "200": { - "description": "Transaction Object", + "description": "Ok", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/OpenId4VcIssuanceSessionRecord" + } + } + } + } + }, + "description": "Get issuance details by issuance SessionId", + "tags": [ + "oid4vc issuance sessions" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "issuanceSessionId", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, + "put": { + "operationId": "UpdateSessionById", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenId4VcIssuanceSessionRecord" + } + } + } + } + }, + "description": "Update issuance session metadata by session ID", + "tags": [ + "oid4vc issuance sessions" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "issuanceSessionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Record_string.unknown_" } } } + } + }, + "delete": { + "operationId": "DeleteIssuanceSessionById", + "responses": { + "204": { + "description": "No content" + } }, - "description": "Estimate transaction", + "description": "Delete issuance session by session ID", "tags": [ - "Polygon" + "oid4vc issuance sessions" ], "security": [ { "jwt": [ "tenant", - "dedicated", - "Basewallet" + "dedicated" ] } ], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DidOperationOptions" - } + "parameters": [ + { + "in": "path", + "name": "issuanceSessionId", + "required": true, + "schema": { + "type": "string" } } - } + ] } }, - "/polygon/{did}/{schemaId}": { + "/openid4vc/issuance-sessions": { "get": { - "operationId": "GetSchemaById", + "operationId": "GetIssuanceSessionsByQuery", "responses": { "200": { - "description": "Schema Object", + "description": "Ok", "content": { "application/json": { - "schema": {} + "schema": { + "items": { + "$ref": "#/components/schemas/OpenId4VcIssuanceSessionRecord" + }, + "type": "array" + } } } } }, - "description": "Fetch schema details", + "description": "Fetch all issuance sessions by query", "tags": [ - "Polygon" + "oid4vc issuance sessions" ], "security": [ { @@ -3463,17 +6652,49 @@ ], "parameters": [ { - "in": "path", - "name": "did", - "required": true, + "in": "query", + "name": "cNonce", + "required": false, "schema": { "type": "string" } }, { - "in": "path", - "name": "schemaId", - "required": true, + "in": "query", + "name": "publicIssuerId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "preAuthorizedCode", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "state", + "required": false, + "schema": { + "$ref": "#/components/schemas/OpenId4VcIssuanceSessionState" + } + }, + { + "in": "query", + "name": "credentialOfferUri", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "authorizationCode", + "required": false, "schema": { "type": "string" } @@ -3481,9 +6702,9 @@ ] } }, - "/anoncreds/transactions/endorse": { + "/openid4vc/issuance-sessions/{issuanceSessionId}/revoke": { "post": { - "operationId": "EndorserTransaction", + "operationId": "RevokeSessionById", "responses": { "200": { "description": "Ok", @@ -3491,12 +6712,12 @@ "application/json": { "schema": { "properties": { - "signedTransaction": { + "message": { "type": "string" } }, "required": [ - "signedTransaction" + "message" ], "type": "object" } @@ -3504,8 +6725,9 @@ } } }, + "description": "Revoke credentials in an issuance session by session ID", "tags": [ - "Anoncreds - EndorserTransaction" + "oid4vc issuance sessions" ], "security": [ { @@ -3515,36 +6737,100 @@ ] } ], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EndorserTransaction" + "parameters": [ + { + "in": "path", + "name": "issuanceSessionId", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/openid4vc/holder/sd-jwt-vcs": { + "get": { + "operationId": "GetSdJwtCredentials", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/SdJwtVcRecord" + }, + "type": "array" + } } } } - } + }, + "description": "Get SdJwt type of credentials", + "tags": [ + "oid4vc holders" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [] } }, - "/anoncreds/transactions/set-endorser-role": { - "post": { - "operationId": "DidNymTransaction", + "/openid4vc/holder/mdoc-vcs": { + "get": { + "operationId": "GetMdocCredentials", "responses": { "200": { "description": "Ok", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DidCreateResult_DidOperationStateActionBase_" + "items": { + "$ref": "#/components/schemas/MdocRecord" + }, + "type": "array" } } } } }, + "description": "Fetch all mso mdoc credentials in wallet", + "tags": [ + "oid4vc holders" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [] + } + }, + "/openid4vc/holder/mdoc-vcs/decode": { + "post": { + "operationId": "DecodeMdocCredential", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "description": "Decode mso mdoc credential in wallet", "tags": [ - "Anoncreds - EndorserTransaction" + "oid4vc holders" ], "security": [ { @@ -3560,55 +6846,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DidNymTransaction" + "properties": { + "base64Url": { + "type": "string" + } + }, + "required": [ + "base64Url" + ], + "type": "object" } } } } } }, - "/anoncreds/transactions/write": { + "/openid4vc/holder/resolve-credential-offer": { "post": { - "operationId": "WriteSchemaAndCredDefOnLedger", + "operationId": "ResolveCredOffer", "responses": { "200": { "description": "Ok", "content": { "application/json": { - "schema": { - "anyOf": [ - { - "$ref": "#/components/schemas/RegisterSchemaReturnStateWait" - }, - { - "$ref": "#/components/schemas/RegisterSchemaReturnStateAction" - }, - { - "$ref": "#/components/schemas/RegisterSchemaReturnStateFinished" - }, - { - "$ref": "#/components/schemas/RegisterSchemaReturnStateFailed" - }, - { - "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateWait" - }, - { - "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateAction" - }, - { - "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateFinished" - }, - { - "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateFailed" - } - ] - } + "schema": {} } } } }, + "description": "Resolve a credential offer", "tags": [ - "Anoncreds - EndorserTransaction" + "oid4vc holders" ], "security": [ { @@ -3624,93 +6892,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WriteTransaction" + "$ref": "#/components/schemas/ResolveCredentialOfferBody" } } } } } - }, - "/dids/{did}": { - "get": { - "operationId": "GetDidRecordByDid", - "responses": { - "200": { - "description": "DidResolutionResult", - "content": { - "application/json": { - "schema": { - "properties": { - "didDocumentMetadata": { - "$ref": "#/components/schemas/DIDDocumentMetadata" - }, - "didResolutionMetadata": { - "$ref": "#/components/schemas/DidResolutionMetadata" - }, - "didDocument": { - "$ref": "#/components/schemas/Record_string.any_" - } - }, - "required": [ - "didDocumentMetadata", - "didResolutionMetadata", - "didDocument" - ], - "type": "object" - }, - "examples": { - "Example 1": { - "value": { - "didDocument": { - "@context": [ - "https://w3id.org/did/v1", - "https://w3id.org/security/suites/ed25519-2018/v1", - "https://w3id.org/security/suites/x25519-2019/v1" - ], - "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", - "verificationMethod": [ - { - "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", - "type": "Ed25519VerificationKey2018", - "controller": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", - "publicKeyBase58": "6fioC1zcDPyPEL19pXRS2E4iJ46zH7xP6uSgAaPdwDrx" - } - ], - "authentication": [ - "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" - ], - "assertionMethod": [ - "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" - ], - "capabilityInvocation": [ - "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" - ], - "capabilityDelegation": [ - "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" - ], - "keyAgreement": [ - { - "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6LSrdqo4M24WRDJj1h2hXxgtDTyzjjKCiyapYVgrhwZAySn", - "type": "X25519KeyAgreementKey2019", - "controller": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", - "publicKeyBase58": "FxfdY3DCQxVZddKGAtSjZdFW9bCCW7oRwZn1NFJ2Tbg2" - } - ] - }, - "didDocumentMetadata": {}, - "didResolutionMetadata": { - "contentType": "application/did+ld+json" - } - } - } - } + }, + "/openid4vc/holder/authorization-request": { + "post": { + "operationId": "RequestAuthorizationForCredential", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {} } } } }, - "description": "Resolves did and returns did resolution result", "tags": [ - "Dids" + "oid4vc holders" ], "security": [ { @@ -3720,60 +6923,35 @@ ] } ], - "parameters": [ - { - "description": "Decentralized Identifier", - "in": "path", - "name": "did", - "required": true, - "schema": { - "$ref": "#/components/schemas/Did" + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizeRequestCredentialOffer" + } } } - ] + } } }, - "/dids/write": { + "/openid4vc/holder/request-credential": { "post": { - "operationId": "WriteDid", + "operationId": "RequestCredential", "responses": { "200": { - "description": "DidResolutionResult", + "description": "Ok", "content": { "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "did": "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7", - "didDocument": { - "@context": [ - "https://w3id.org/did/v1", - "https://w3id.org/security/suites/ed25519-2018/v1" - ], - "id": "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7", - "verificationMethod": [ - { - "id": "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7#verkey", - "type": "Ed25519VerificationKey2018", - "controller": "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7", - "publicKeyBase58": "BapLDK4dEY88vWcQgNbpAPVVP4r3CHs4MvShmmhqkxXM" - } - ], - "authentication": [ - "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7#verkey" - ] - } - } - } - } + "schema": {} } } } }, - "description": "Did nym registration", + "description": "Initiates a token request, then requests credentials from issuer", "tags": [ - "Dids" + "oid4vc holders" ], "security": [ { @@ -3789,33 +6967,29 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DidCreate" + "$ref": "#/components/schemas/RequestCredentialBody" } } } } } }, - "/dids": { - "get": { - "operationId": "GetDids", + "/openid4vc/holder/resolve-proof-request": { + "post": { + "operationId": "ResolveProofRequest", "responses": { "200": { "description": "Ok", "content": { "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/DidRecord" - }, - "type": "array" - } + "schema": {} } } } }, + "description": "Resolve a proof request", "tags": [ - "Dids" + "oid4vc holders" ], "security": [ { @@ -3825,41 +6999,35 @@ ] } ], - "parameters": [] + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveProofRequest" + } + } + } + } } }, - "/anoncreds/schemas/{schemaId}": { - "get": { - "operationId": "GetSchemaById", + "/openid4vc/holder/accept-proof-request": { + "post": { + "operationId": "AcceptProofRequest", "responses": { "200": { - "description": "get schema by Id", + "description": "Ok", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/GetSchemaReturn" - }, - "examples": { - "Example 1": { - "value": { - "ver": "1.0", - "id": "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0", - "name": "schema", - "version": "1.0", - "attrNames": [ - "string" - ], - "seqNo": 351936 - } - } - } + "schema": {} } } } }, - "description": "Get schema by schemaId", + "description": "Accept a proof request", "tags": [ - "Anoncreds - Schemas" + "oid4vc holders" ], "security": [ { @@ -3869,60 +7037,74 @@ ] } ], - "parameters": [ - { - "in": "path", - "name": "schemaId", - "required": true, - "schema": { - "$ref": "#/components/schemas/SchemaId" + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveProofRequest" + } } } - ] + } } }, - "/anoncreds/schemas": { + "/openid4vc/holder/decode-sdjwt": { "post": { - "operationId": "CreateSchema", + "operationId": "DecodeSdJwt", "responses": { "200": { - "description": "get schema", + "description": "Ok", "content": { "application/json": { - "schema": { - "anyOf": [ - { - "$ref": "#/components/schemas/RegisterSchemaReturn" - }, - { - "$ref": "#/components/schemas/RegisterSchemaReturnStateFinished" - } - ] - }, - "examples": { - "Example 1": { - "value": { - "state": "finished", - "schema": { - "issuerId": "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7", - "name": "Test Schema", - "version": "1.0.0", - "attrNames": [ - "Name", - "Age" - ] - }, - "schemaId": "LRCUFcizUL74AGgLqdJHK7:2:Test Schema:1.0.0" - } + "schema": {} + } + } + } + }, + "tags": [ + "oid4vc holders" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "jwt": { + "type": "string" } - } + }, + "required": [ + "jwt" + ], + "type": "object" } } } + } + } + }, + "/openid4vc/holder/credential": { + "delete": { + "operationId": "Delete", + "responses": { + "204": { + "description": "No content" + } }, - "description": "Create schema", "tags": [ - "Anoncreds - Schemas" + "oid4vc holders" ], "security": [ { @@ -3938,295 +7120,324 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateSchemaInput" + "$ref": "#/components/schemas/DeleteCredentialBody" } } } } } }, - "/anoncreds/credential-definitions/{credentialDefinitionId}": { - "get": { - "operationId": "GetCredentialDefinitionById", + "/multi-tenancy/create-tenant": { + "post": { + "operationId": "CreateTenant", "responses": { "200": { - "description": "CredDef", + "description": "Ok", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetCredentialDefinitionReturn" - }, - "examples": { - "Example 1": { - "value": { - "ver": "1.0", - "id": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag", - "schemaId": "351936", - "type": "CL", - "tag": "definition", - "value": { - "primary": { - "n": "string", - "s": "string", - "r": { - "master_secret": "string", - "string": "string" - }, - "rctxt": "string", - "z": "string" - }, - "revocation": { - "g": "1 string", - "g_dash": "string", - "h": "string", - "h0": "string", - "h1": "string", - "h2": "string", - "htilde": "string", - "h_cap": "string", - "u": "string", - "pk": "string", - "y": "string" - } - } + "properties": { + "token": {}, + "metadata": { + "$ref": "#/components/schemas/Metadata____" + }, + "allowCache": { + "type": "boolean" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string" + }, + "storageVersion": { + "type": "string" + }, + "config": { + "$ref": "#/components/schemas/TenantConfig" + }, + "type": { + "type": "string", + "enum": [ + "TenantRecord" + ], + "nullable": false } - } + }, + "required": [ + "token", + "metadata", + "allowCache", + "createdAt", + "id", + "storageVersion", + "config", + "type" + ], + "type": "object" } } } } }, - "description": "Retrieve credential definition by credential definition id", "tags": [ - "Anoncreds - Credential Definitions" + "MultiTenancy" ], "security": [ { "jwt": [ - "tenant", - "dedicated" + "Basewallet" ] } ], - "parameters": [ - { - "in": "path", - "name": "credentialDefinitionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/CredentialDefinitionId" + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTenantOptions" + } } } - ] + } } }, - "/anoncreds/credential-definitions": { + "/multi-tenancy/get-token/{tenantId}": { "post": { - "operationId": "CreateCredentialDefinition", + "operationId": "GetTenantToken", "responses": { "200": { - "description": "CredDef", + "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } + }, + "404": { + "description": "", "content": { "application/json": { "schema": { - "anyOf": [ - { - "$ref": "#/components/schemas/RegisterCredentialDefinitionReturn" - }, - { - "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateFinished" - } - ] - }, - "examples": { - "Example 1": { - "value": { - "ver": "1.0", - "id": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag", - "schemaId": "351936", - "type": "CL", - "tag": "definition", - "value": { - "primary": { - "n": "string", - "s": "string", - "r": { - "master_secret": "string", - "string": "string" - }, - "rctxt": "string", - "z": "string" - }, - "revocation": { - "g": "1 string", - "g_dash": "string", - "h": "string", - "h0": "string", - "h1": "string", - "h2": "string", - "htilde": "string", - "h_cap": "string", - "u": "string", - "pk": "string", - "y": "string" - } - } + "properties": { + "reason": { + "type": "string" } - } + }, + "required": [ + "reason" + ], + "type": "object" } } } }, - "202": { - "description": "Wait for action to complete" + "500": { + "description": "", + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + } } }, - "description": "Creates a new credential definition.", "tags": [ - "Anoncreds - Credential Definitions" + "MultiTenancy" ], "security": [ { "jwt": [ - "tenant", - "dedicated" + "Basewallet" ] } ], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "endorserDid": { - "type": "string" - }, - "endorse": { - "type": "boolean" - }, - "tag": { - "type": "string" - }, - "schemaId": { - "$ref": "#/components/schemas/SchemaId" - }, - "issuerId": { - "type": "string" - } - }, - "required": [ - "tag", - "schemaId", - "issuerId" - ], - "type": "object" - } + "parameters": [ + { + "in": "path", + "name": "tenantId", + "required": true, + "schema": { + "type": "string" } } - } + ] } }, - "/agent": { + "/multi-tenancy/{tenantId}": { "get": { - "operationId": "GetAgentInfo", + "operationId": "GetTenantById", "responses": { "200": { "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } + }, + "404": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentInfo" + "properties": { + "reason": { + "type": "string" + } + }, + "required": [ + "reason" + ], + "type": "object" + } + } + } + }, + "500": { + "description": "", + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" } } } } }, - "description": "Retrieve basic agent information", "tags": [ - "Agent" + "MultiTenancy" ], "security": [ { "jwt": [ - "tenant", - "dedicated", "Basewallet" ] } ], - "parameters": [] - } - }, - "/agent/token": { - "post": { - "operationId": "GetAgentToken", + "parameters": [ + { + "in": "path", + "name": "tenantId", + "required": true, + "schema": { + "type": "string" + } + } + ] + }, + "delete": { + "operationId": "DeleteTenantById", "responses": { "200": { "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } + }, + "404": { + "description": "", + "content": { + "application/json": { + "schema": { + "properties": { + "reason": { + "type": "string" + } + }, + "required": [ + "reason" + ], + "type": "object" + } + } + } + }, + "500": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentToken" + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" } } } } }, - "description": "Retrieve agent token", - "tags": [ - "Agent" - ], - "security": [ - { - "apiKey": [] - } - ], - "parameters": [] - } - }, - "/agent/wallet": { - "delete": { - "operationId": "DeleteWallet", - "responses": { - "204": { - "description": "No content" - } - }, - "description": "Delete wallet", "tags": [ - "Agent" + "MultiTenancy" ], "security": [ { "jwt": [ - "tenant", - "dedicated" + "Basewallet" ] } ], - "parameters": [] + "parameters": [ + { + "in": "path", + "name": "tenantId", + "required": true, + "schema": { + "type": "string" + } + } + ] } }, - "/agent/verify": { - "post": { - "operationId": "Verify", + "/didcomm/question-answer": { + "get": { + "operationId": "GetQuestionAnswerRecords", "responses": { "200": { - "description": "isValidSignature - true if signature is valid, false otherwise", + "description": "QuestionAnswerRecord[]", "content": { "application/json": { "schema": { - "type": "boolean" + "items": {}, + "type": "array" } } } } }, - "description": "Verify data using a key", + "description": "Retrieve question and answer records by query", "tags": [ - "Agent" + "DIDComm - Question Answer" ], "security": [ { @@ -4236,46 +7447,67 @@ ] } ], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VerifyDataOptions" - } + "parameters": [ + { + "description": "Connection identifier", + "in": "query", + "name": "connectionId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Role of the question", + "in": "query", + "name": "role", + "required": false, + "schema": { + "$ref": "#/components/schemas/QuestionAnswerRole" + } + }, + { + "description": "State of the question", + "in": "query", + "name": "state", + "required": false, + "schema": { + "$ref": "#/components/schemas/QuestionAnswerState" + } + }, + { + "description": "Thread identifier", + "in": "query", + "name": "threadId", + "required": false, + "schema": { + "type": "string" } } - } + ] } }, - "/agent/credential/sign": { + "/didcomm/question-answer/question/{connectionId}": { "post": { - "operationId": "SignCredential", + "operationId": "SendQuestion", "responses": { "200": { "description": "Ok", "content": { "application/json": { "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/components/schemas/Record_string.any_" - }, - { - "$ref": "#/components/schemas/W3cCredentialRecord" - } - ] + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "examples": { + "Example 1": {} } } } } }, + "description": "Send a question to a connection", "tags": [ - "Agent" + "DIDComm - Question Answer" ], "security": [ { @@ -4287,23 +7519,12 @@ ], "parameters": [ { - "in": "query", - "name": "storeCredential", - "required": true, - "schema": { - "type": "boolean" - } - }, - { - "in": "query", - "name": "dataTypeToSign", + "description": "Connection identifier", + "in": "path", + "name": "connectionId", "required": true, "schema": { - "type": "string", - "enum": [ - "rawData", - "jsonLd" - ] + "$ref": "#/components/schemas/RecordId" } } ], @@ -4312,37 +7533,49 @@ "content": { "application/json": { "schema": { - "anyOf": [ - { - "$ref": "#/components/schemas/CustomW3cJsonLdSignCredentialOptions" + "properties": { + "detail": { + "type": "string" }, - { - "$ref": "#/components/schemas/SignDataOptions" + "validResponses": { + "items": { + "$ref": "#/components/schemas/ValidResponse" + }, + "type": "array" + }, + "question": { + "type": "string" } - ] + }, + "required": [ + "validResponses", + "question" + ], + "type": "object" } } } } } }, - "/agent/credential/verify": { + "/didcomm/question-answer/answer/{id}": { "post": { - "operationId": "VerifyCredential", + "operationId": "SendAnswer", "responses": { "200": { "description": "Ok", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/W3cVerifyCredentialResult" + "$ref": "#/components/schemas/Record_string.unknown_" } } } } }, + "description": "Send a answer to question", "tags": [ - "Agent" + "DIDComm - Question Answer" ], "security": [ { @@ -4352,38 +7585,45 @@ ] } ], - "parameters": [], + "parameters": [ + { + "description": "The id of the question answer record", + "in": "path", + "name": "id", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SafeW3cJsonLdVerifyCredentialOptions" + "$ref": "#/components/schemas/Record_response.string_" } } } } } }, - "/didcomm/question-answer": { + "/didcomm/question-answer/{id}": { "get": { - "operationId": "GetQuestionAnswerRecords", + "operationId": "GetQuestionAnswerRecordById", "responses": { "200": { - "description": "QuestionAnswerRecord[]", + "description": "ConnectionRecord", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/Record_string.unknown_" - }, - "type": "array" + "$ref": "#/components/schemas/Record_string.unknown_" } } } } }, - "description": "Retrieve question and answer records by query", + "description": "Retrieve question answer record by id", "tags": [ "DIDComm - Question Answer" ], @@ -4397,65 +7637,79 @@ ], "parameters": [ { - "description": "Connection identifier", - "in": "query", - "name": "connectionId", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "Role of the question", - "in": "query", - "name": "role", - "required": false, - "schema": { - "$ref": "#/components/schemas/QuestionAnswerRole" - } - }, - { - "description": "State of the question", - "in": "query", - "name": "state", - "required": false, - "schema": { - "$ref": "#/components/schemas/QuestionAnswerState" - } - }, - { - "description": "Thread identifier", - "in": "query", - "name": "threadId", - "required": false, + "in": "path", + "name": "id", + "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/RecordId" } } ] } }, - "/didcomm/question-answer/question/{connectionId}": { - "post": { - "operationId": "SendQuestion", + "/didcomm/oob": { + "get": { + "operationId": "GetAllOutOfBandRecords", "responses": { "200": { - "description": "Ok", + "description": "OutOfBandRecord[]", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Record_string.unknown_" + "items": {}, + "type": "array" }, "examples": { - "Example 1": {} + "Example 1": { + "value": [ + { + "_tags": { + "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", + "state": "await-response", + "role": "sender", + "recipientKeyFingerprints": [ + "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" + ] + }, + "outOfBandInvitation": { + "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "metadata": {}, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "reusable": false + } + ] + } } } } } }, - "description": "Send a question to a connection", + "description": "Retrieve all out of band records", "tags": [ - "DIDComm - Question Answer" + "DIDComm - Out Of Band" ], "security": [ { @@ -4467,63 +7721,77 @@ ], "parameters": [ { - "description": "Connection identifier", - "in": "path", - "name": "connectionId", - "required": true, + "description": "invitation identifier", + "in": "query", + "name": "invitationId", + "required": false, "schema": { "$ref": "#/components/schemas/RecordId" } } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "detail": { - "type": "string" - }, - "validResponses": { - "items": { - "$ref": "#/components/schemas/ValidResponse" - }, - "type": "array" - }, - "question": { - "type": "string" - } - }, - "required": [ - "validResponses", - "question" - ], - "type": "object" - } - } - } - } + ] } }, - "/didcomm/question-answer/answer/{id}": { - "post": { - "operationId": "SendAnswer", + "/didcomm/oob/{outOfBandId}": { + "get": { + "operationId": "GetOutOfBandRecordById", "responses": { "200": { - "description": "Ok", + "description": "OutOfBandRecord", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Record_string.unknown_" + }, + "examples": { + "Example 1": { + "value": { + "_tags": { + "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", + "state": "await-response", + "role": "sender", + "recipientKeyFingerprints": [ + "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" + ] + }, + "outOfBandInvitation": { + "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "metadata": {}, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "reusable": false + } + } } } } } }, - "description": "Send a answer to question", + "description": "Retrieve an out of band record by id", "tags": [ - "DIDComm - Question Answer" + "DIDComm - Out Of Band" ], "security": [ { @@ -4535,45 +7803,25 @@ ], "parameters": [ { - "description": "The id of the question answer record", "in": "path", - "name": "id", + "name": "outOfBandId", "required": true, "schema": { "$ref": "#/components/schemas/RecordId" } } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Record_response.string_" - } - } - } - } - } - }, - "/didcomm/question-answer/{id}": { - "get": { - "operationId": "GetQuestionAnswerRecordById", + ] + }, + "delete": { + "operationId": "DeleteOutOfBandRecord", "responses": { - "200": { - "description": "ConnectionRecord", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Record_string.unknown_" - } - } - } + "204": { + "description": "No content" } }, - "description": "Retrieve question answer record by id", + "description": "Deletes an out of band record from the repository.", "tags": [ - "DIDComm - Question Answer" + "DIDComm - Out Of Band" ], "security": [ { @@ -4585,8 +7833,9 @@ ], "parameters": [ { + "description": "Record identifier", "in": "path", - "name": "id", + "name": "outOfBandId", "required": true, "schema": { "$ref": "#/components/schemas/RecordId" @@ -4595,41 +7844,113 @@ ] } }, - "/didcomm/proofs": { - "get": { - "operationId": "GetAllProofs", + "/didcomm/oob/create-invitation": { + "post": { + "operationId": "CreateInvitation", "responses": { "200": { - "description": "ProofRecord[]", + "description": "Out of band record", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/Record_string.unknown_" + "properties": { + "invitationDid": { + "type": "string" + }, + "outOfBandRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "invitation": { + "$ref": "#/components/schemas/DidCommPlaintextMessage" + }, + "invitationUrl": { + "type": "string" + } }, - "type": "array" + "required": [ + "invitationDid", + "outOfBandRecord", + "invitation", + "invitationUrl" + ], + "type": "object" }, "examples": { "Example 1": { - "value": [ - { + "value": { + "invitationUrl": "string", + "invitation": { + "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "outOfBandRecord": { + "_tags": { + "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", + "state": "await-response", + "role": "sender", + "recipientKeyFingerprints": [ + "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" + ] + }, + "outOfBandInvitation": { + "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "id": "42a95528-0e30-4f86-a462-0efb02178b53", "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", - "protocolVersion": "v1" + "reusable": false } - ] + } } } } } } }, - "description": "Retrieve all proof records", + "description": "Creates an outbound out-of-band record containing out-of-band invitation message defined in\nAries RFC 0434: Out-of-Band Protocol 1.1.", "tags": [ - "DIDComm - Proofs" + "DIDComm - Out Of Band" ], "security": [ { @@ -4639,89 +7960,63 @@ ] } ], - "parameters": [ - { - "in": "query", - "name": "threadId", - "required": false, - "schema": { - "type": "string" - } - } - ] - } - }, - "/didcomm/proofs/{proofRecordId}": { - "get": { - "operationId": "GetProofById", - "responses": { - "200": { - "description": "ProofRecord", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Record_string.unknown_" - }, - "examples": { - "Example 1": { - "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", - "protocolVersion": "v1" - } + "parameters": [], + "requestBody": { + "description": "configuration of how out-of-band invitation should be created", + "required": true, + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/CreateInvitationOptions" + }, + { + "$ref": "#/components/schemas/RecipientKeyOption" } - } + ], + "description": "configuration of how out-of-band invitation should be created" } } } - }, - "description": "Retrieve proof record by proof record id", - "tags": [ - "DIDComm - Proofs" - ], - "security": [ - { - "jwt": [ - "tenant", - "dedicated" - ] - } - ], - "parameters": [ - { - "in": "path", - "name": "proofRecordId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] + } } }, - "/didcomm/proofs/propose-proof": { + "/didcomm/oob/create-legacy-connectionless-invitation": { "post": { - "operationId": "ProposeProof", + "operationId": "CreateLegacyConnectionlessInvitation", "responses": { "200": { - "description": "ProofRecord", + "description": "a message and a invitationUrl", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProofExchangeRecord" + "properties": { + "outOfBandRecord": { + "$ref": "#/components/schemas/DidCommOutOfBandRecord" + }, + "invitationUrl": { + "type": "string" + }, + "message": { + "$ref": "#/components/schemas/DidCommMessage" + } + }, + "required": [ + "outOfBandRecord", + "invitationUrl", + "message" + ], + "type": "object" }, "examples": { "Example 1": { "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", - "protocolVersion": "v1" + "message": { + "@id": "eac4ff4e-b4fb-4c1d-aef3-b29c89d1cc00", + "@type": "https://didcomm.org/connections/1.0/invitation" + }, + "invitationUrl": "http://example.com/invitation_url" } } } @@ -4729,9 +8024,9 @@ } } }, - "description": "Initiate a new presentation exchange as prover by sending a presentation proposal request\nto the connection with the specified connection id.", + "description": "Creates a new connectionless legacy invitation.", "tags": [ - "DIDComm - Proofs" + "DIDComm - Out Of Band" ], "security": [ { @@ -4743,37 +8038,117 @@ ], "parameters": [], "requestBody": { + "description": "configuration of how a connection invitation should be created", "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RequestProofProposalOptions" + "properties": { + "routing": { + "$ref": "#/components/schemas/DidCommRouting" + }, + "domain": { + "type": "string" + }, + "message": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "recordId": { + "type": "string" + } + }, + "required": [ + "domain", + "message", + "recordId" + ], + "type": "object", + "description": "configuration of how a connection invitation should be created" } } } } } }, - "/didcomm/proofs/{proofRecordId}/accept-proposal": { + "/didcomm/oob/receive-invitation": { "post": { - "operationId": "AcceptProposal", + "operationId": "ReceiveInvitation", "responses": { "200": { - "description": "ProofRecord", + "description": "out-of-band record and connection record if one has been created.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProofExchangeRecord" + "properties": { + "connectionRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "outOfBandRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + } + }, + "required": [ + "connectionRecord", + "outOfBandRecord" + ], + "type": "object" }, "examples": { "Example 1": { "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", - "protocolVersion": "v1" + "outOfBandRecord": { + "_tags": { + "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", + "state": "await-response", + "role": "sender", + "recipientKeyFingerprints": [ + "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" + ] + }, + "outOfBandInvitation": { + "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "metadata": {}, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "reusable": false + }, + "connectionRecord": { + "_tags": { + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", + "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" + }, + "metadata": {}, + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } } } } @@ -4781,9 +8156,9 @@ } } }, - "description": "Accept a presentation proposal as verifier by sending an accept proposal message\nto the connection associated with the proof record.", + "description": "Creates inbound out-of-band record and assigns out-of-band invitation message to it if the\nmessage is valid.", "tags": [ - "DIDComm - Proofs" + "DIDComm - Out Of Band" ], "security": [ { @@ -4799,33 +8174,92 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AcceptProofProposal" + "$ref": "#/components/schemas/ReceiveInvitationProps" } } } } } }, - "/didcomm/proofs/request-proof": { + "/didcomm/oob/receive-invitation-url": { "post": { - "operationId": "RequestProof", + "operationId": "ReceiveInvitationFromUrl", "responses": { "200": { - "description": "Ok", + "description": "out-of-band record and connection record if one has been created.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProofExchangeRecord" + "properties": { + "connectionRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "outOfBandRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + } + }, + "required": [ + "connectionRecord", + "outOfBandRecord" + ], + "type": "object" }, "examples": { "Example 1": { "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", - "protocolVersion": "v1" + "outOfBandRecord": { + "_tags": { + "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", + "state": "await-response", + "role": "sender", + "recipientKeyFingerprints": [ + "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" + ] + }, + "outOfBandInvitation": { + "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "metadata": {}, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "reusable": false + }, + "connectionRecord": { + "_tags": { + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", + "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" + }, + "metadata": {}, + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } } } } @@ -4833,9 +8267,9 @@ } } }, - "description": "Creates a presentation request bound to existing connection", + "description": "Creates inbound out-of-band record and assigns out-of-band invitation message to it if the\nmessage is valid.", "tags": [ - "DIDComm - Proofs" + "DIDComm - Out Of Band" ], "security": [ { @@ -4851,16 +8285,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RequestProofOptions" + "$ref": "#/components/schemas/ReceiveInvitationByUrlProps" } } } } } }, - "/didcomm/proofs/create-request-oob": { + "/didcomm/oob/{outOfBandId}/accept-invitation": { "post": { - "operationId": "CreateRequest", + "operationId": "AcceptInvitation", "responses": { "200": { "description": "Ok", @@ -4868,44 +8302,75 @@ "application/json": { "schema": { "properties": { - "proofMessageId": { - "type": "string" - }, - "proofRecordThId": { - "type": "string" - }, - "invitationDid": { - "type": "string" + "connectionRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" }, "outOfBandRecord": { "$ref": "#/components/schemas/Record_string.unknown_" - }, - "invitation": { - "$ref": "#/components/schemas/PlaintextMessage" - }, - "invitationUrl": { - "type": "string" } }, "required": [ - "proofMessageId", - "proofRecordThId", - "invitationDid", - "outOfBandRecord", - "invitation", - "invitationUrl" + "connectionRecord", + "outOfBandRecord" ], "type": "object" }, "examples": { "Example 1": { "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", - "protocolVersion": "v1" + "outOfBandRecord": { + "_tags": { + "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", + "state": "await-response", + "role": "sender", + "recipientKeyFingerprints": [ + "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" + ] + }, + "outOfBandInvitation": { + "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "metadata": {}, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "reusable": false + }, + "connectionRecord": { + "_tags": { + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", + "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" + }, + "metadata": {}, + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } } } } @@ -4913,9 +8378,9 @@ } } }, - "description": "Creates a presentation request not bound to any proposal or existing connection", + "description": "Accept a connection invitation as invitee (by sending a connection request message) for the connection with the specified connection id.\nThis is not needed when auto accepting of connections is enabled.", "tags": [ - "DIDComm - Proofs" + "DIDComm - Out Of Band" ], "security": [ { @@ -4925,49 +8390,70 @@ ] } ], - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "outOfBandId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateProofRequestOobOptions" + "$ref": "#/components/schemas/AcceptInvitationConfig" } } } } } }, - "/didcomm/proofs/{proofRecordId}/accept-request": { - "post": { - "operationId": "AcceptRequest", + "/didcomm/connections": { + "get": { + "operationId": "GetAllConnections", "responses": { "200": { - "description": "ProofRecord", + "description": "ConnectionRecord[]", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Record_string.unknown_" + "items": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "type": "array" }, "examples": { "Example 1": { - "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", - "protocolVersion": "v1" - } + "value": [ + { + "_tags": { + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", + "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" + }, + "metadata": {}, + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } + ] } } } } } }, - "description": "Accept a presentation request as prover by sending an accept request message\nto the connection associated with the proof record.", + "description": "Retrieve all connections records", "tags": [ - "DIDComm - Proofs" + "DIDComm - Connections" ], "security": [ { @@ -4979,57 +8465,88 @@ ], "parameters": [ { - "in": "path", - "name": "proofRecordId", - "required": true, + "in": "query", + "name": "outOfBandId", + "required": false, "schema": { "type": "string" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "comment": { - "type": "string" - }, - "filterByNonRevocationRequirements": { - "type": "boolean" - }, - "filterByPresentationPreview": { - "type": "boolean" - } - }, - "type": "object" - } + }, + { + "description": "Alias", + "in": "query", + "name": "alias", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Connection state", + "in": "query", + "name": "state", + "required": false, + "schema": { + "$ref": "#/components/schemas/DidCommDidExchangeState" + } + }, + { + "description": "My DID", + "in": "query", + "name": "myDid", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Their DID", + "in": "query", + "name": "theirDid", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Their label", + "in": "query", + "name": "theirLabel", + "required": false, + "schema": { + "type": "string" } } - } + ] } }, - "/didcomm/proofs/{proofRecordId}/accept-presentation": { - "post": { - "operationId": "AcceptPresentation", + "/didcomm/connections/{connectionId}": { + "get": { + "operationId": "GetConnectionById", "responses": { "200": { - "description": "ProofRecord", + "description": "ConnectionRecord", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProofExchangeRecord" + "$ref": "#/components/schemas/Record_string.unknown_" }, "examples": { "Example 1": { "value": { + "_tags": { + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", + "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" + }, "metadata": {}, "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", - "protocolVersion": "v1" + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" } } } @@ -5037,9 +8554,9 @@ } } }, - "description": "Accept a presentation as prover by sending an accept presentation message\nto the connection associated with the proof record.", + "description": "Retrieve connection record by connection id", "tags": [ - "DIDComm - Proofs" + "DIDComm - Connections" ], "security": [ { @@ -5051,46 +8568,26 @@ ], "parameters": [ { + "description": "Connection identifier", "in": "path", - "name": "proofRecordId", + "name": "connectionId", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/RecordId" } } ] - } - }, - "/didcomm/proofs/{proofRecordId}/form-data": { - "get": { - "operationId": "ProofFormData", + }, + "delete": { + "operationId": "DeleteConnection", "responses": { - "200": { - "description": "ProofRecord", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetProofFormatDataReturn__40_LegacyIndyProofFormat-or-AnonCredsProofFormat-or-DifPresentationExchangeProofFormat_41_-Array_" - }, - "examples": { - "Example 1": { - "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", - "protocolVersion": "v1" - } - } - } - } - } + "204": { + "description": "No content" } }, - "description": "Return proofRecord", + "description": "Deletes a connection record from the connection repository.", "tags": [ - "DIDComm - Proofs" + "DIDComm - Connections" ], "security": [ { @@ -5102,81 +8599,54 @@ ], "parameters": [ { + "description": "Connection identifier", "in": "path", - "name": "proofRecordId", + "name": "connectionId", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/RecordId" } } ] } }, - "/didcomm/oob": { - "get": { - "operationId": "GetAllOutOfBandRecords", + "/didcomm/connections/{connectionId}/accept-request": { + "post": { + "operationId": "AcceptRequest", "responses": { "200": { - "description": "OutOfBandRecord[]", + "description": "ConnectionRecord", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/Record_string.unknown_" - }, - "type": "array" + "$ref": "#/components/schemas/Record_string.unknown_" }, "examples": { "Example 1": { - "value": [ - { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false - } - ] + "value": { + "_tags": { + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", + "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" + }, + "metadata": {}, + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } } } } } } }, - "description": "Retrieve all out of band records", + "description": "Accept a connection request as inviter by sending a connection response message\nfor the connection with the specified connection id.\n\nThis is not needed when auto accepting of connection is enabled.", "tags": [ - "DIDComm - Out Of Band" + "DIDComm - Connections" ], "security": [ { @@ -5188,10 +8658,10 @@ ], "parameters": [ { - "description": "invitation identifier", - "in": "query", - "name": "invitationId", - "required": false, + "description": "Connection identifier", + "in": "path", + "name": "connectionId", + "required": true, "schema": { "$ref": "#/components/schemas/RecordId" } @@ -5199,12 +8669,12 @@ ] } }, - "/didcomm/oob/{outOfBandId}": { - "get": { - "operationId": "GetOutOfBandRecordById", + "/didcomm/connections/{connectionId}/accept-response": { + "post": { + "operationId": "AcceptResponse", "responses": { "200": { - "description": "OutOfBandRecord", + "description": "ConnectionRecord", "content": { "application/json": { "schema": { @@ -5214,41 +8684,18 @@ "Example 1": { "value": { "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", + "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" }, "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" } } } @@ -5256,9 +8703,9 @@ } } }, - "description": "Retrieve an out of band record by id", + "description": "Accept a connection response as invitee by sending a trust ping message\nfor the connection with the specified connection id.\n\nThis is not needed when auto accepting of connection is enabled.", "tags": [ - "DIDComm - Out Of Band" + "DIDComm - Connections" ], "security": [ { @@ -5270,143 +8717,120 @@ ], "parameters": [ { + "description": "Connection identifier", "in": "path", - "name": "outOfBandId", + "name": "connectionId", "required": true, "schema": { "$ref": "#/components/schemas/RecordId" } } ] - }, - "delete": { - "operationId": "DeleteOutOfBandRecord", + } + }, + "/didcomm/url/{invitationId}": { + "get": { + "operationId": "GetInvitation", "responses": { - "204": { - "description": "No content" + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DidCommConnectionRecord" + }, + "type": "array" + } + } + } } }, - "description": "Deletes an out of band record from the repository.", "tags": [ - "DIDComm - Out Of Band" - ], - "security": [ - { - "jwt": [ - "tenant", - "dedicated" - ] - } + "DIDComm - Connections" ], + "security": [], "parameters": [ { - "description": "Record identifier", "in": "path", - "name": "outOfBandId", + "name": "invitationId", "required": true, "schema": { - "$ref": "#/components/schemas/RecordId" + "type": "string" } } ] } }, - "/didcomm/oob/create-invitation": { - "post": { - "operationId": "CreateInvitation", + "/dids/{did}": { + "get": { + "operationId": "GetDidRecordByDid", "responses": { "200": { - "description": "Out of band record", + "description": "Ok", "content": { "application/json": { "schema": { "properties": { - "invitationDid": { - "type": "string" - }, - "outOfBandRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" + "didDocumentMetadata": { + "$ref": "#/components/schemas/DIDDocumentMetadata" }, - "invitation": { - "$ref": "#/components/schemas/PlaintextMessage" + "didResolutionMetadata": { + "$ref": "#/components/schemas/DidResolutionMetadata" }, - "invitationUrl": { - "type": "string" + "didDocument": { + "$ref": "#/components/schemas/Record_string.any_" } }, "required": [ - "invitationDid", - "outOfBandRecord", - "invitation", - "invitationUrl" + "didDocumentMetadata", + "didResolutionMetadata", + "didDocument" ], "type": "object" }, "examples": { "Example 1": { "value": { - "invitationUrl": "string", - "invitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" + "didDocument": { + "@context": [ + "https://w3id.org/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1", + "https://w3id.org/security/suites/x25519-2019/v1" ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" + "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", + "verificationMethod": [ + { + "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", + "type": "Ed25519VerificationKey2018", + "controller": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", + "publicKeyBase58": "6fioC1zcDPyPEL19pXRS2E4iJ46zH7xP6uSgAaPdwDrx" + } ], - "services": [ + "authentication": [ + "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" + ], + "assertionMethod": [ + "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" + ], + "capabilityInvocation": [ + "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" + ], + "capabilityDelegation": [ + "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" + ], + "keyAgreement": [ { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] + "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6LSrdqo4M24WRDJj1h2hXxgtDTyzjjKCiyapYVgrhwZAySn", + "type": "X25519KeyAgreementKey2019", + "controller": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", + "publicKeyBase58": "FxfdY3DCQxVZddKGAtSjZdFW9bCCW7oRwZn1NFJ2Tbg2" } ] }, - "outOfBandRecord": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false + "didDocumentMetadata": {}, + "didResolutionMetadata": { + "contentType": "application/did+ld+json" } } } @@ -5415,9 +8839,8 @@ } } }, - "description": "Creates an outbound out-of-band record containing out-of-band invitation message defined in\nAries RFC 0434: Out-of-Band Protocol 1.1.", "tags": [ - "DIDComm - Out Of Band" + "Dids" ], "security": [ { @@ -5427,122 +8850,48 @@ ] } ], - "parameters": [], - "requestBody": { - "description": "configuration of how out-of-band invitation should be created", - "required": true, - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/CreateInvitationOptions" - }, - { - "$ref": "#/components/schemas/RecipientKeyOption" - } - ], - "description": "configuration of how out-of-band invitation should be created" - } + "parameters": [ + { + "in": "path", + "name": "did", + "required": true, + "schema": { + "$ref": "#/components/schemas/Did" } } - } + ] } }, - "/didcomm/oob/create-legacy-invitation": { + "/dids/write": { "post": { - "operationId": "CreateLegacyInvitation", + "operationId": "WriteDid", "responses": { "200": { - "description": "out-of-band record and invitation", + "description": "DidResolutionResult", "content": { "application/json": { - "schema": { - "properties": { - "outOfBandRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" - }, - "invitation": { - "$ref": "#/components/schemas/PlaintextMessage" - }, - "invitationUrl": { - "type": "string" - }, - "recipientKey": { - "type": "string" - } - }, - "required": [ - "outOfBandRecord", - "invitation", - "invitationUrl" - ], - "type": "object" - }, + "schema": {}, "examples": { "Example 1": { "value": { - "invitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" + "did": "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7", + "didDocument": { + "@context": [ + "https://w3id.org/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1" ], - "services": [ + "id": "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7", + "verificationMethod": [ { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] + "id": "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7#verkey", + "type": "Ed25519VerificationKey2018", + "controller": "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7", + "publicKeyBase58": "BapLDK4dEY88vWcQgNbpAPVVP4r3CHs4MvShmmhqkxXM" } + ], + "authentication": [ + "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7#verkey" ] - }, - "outOfBandRecord": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false } } } @@ -5551,9 +8900,51 @@ } } }, - "description": "Creates an outbound out-of-band record in the same way how `createInvitation` method does it,\nbut it also converts out-of-band invitation message to an \"legacy\" invitation message defined\nin RFC 0160: Connection Protocol and returns it together with out-of-band record.", + "description": "Did nym registration", + "tags": [ + "Dids" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCreate" + } + } + } + } + } + }, + "/dids": { + "get": { + "operationId": "GetDids", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DidRecord" + }, + "type": "array" + } + } + } + } + }, "tags": [ - "DIDComm - Out Of Band" + "Dids" ], "security": [ { @@ -5563,73 +8954,126 @@ ] } ], - "parameters": [], + "parameters": [] + } + }, + "/v1/orgs/{orgId}/token": { + "post": { + "operationId": "GetOrgToken", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrgTokenResponse" + } + } + } + } + }, + "description": "Generate an organization token by forwarding credentials to the platform", + "tags": [ + "Auth" + ], + "security": [], + "parameters": [ + { + "in": "path", + "name": "orgId", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { - "description": "configuration of how a invitation should be created", - "required": false, + "required": true, "content": { "application/json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Omit_CreateLegacyInvitationConfig.routing_" - }, - { - "$ref": "#/components/schemas/RecipientKeyOption" - } - ], - "description": "configuration of how a invitation should be created" + "$ref": "#/components/schemas/OrgTokenRequest" } } } } } }, - "/didcomm/oob/create-legacy-connectionless-invitation": { + "/agent": { + "get": { + "operationId": "GetAgentInfo", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentInfo" + } + } + } + } + }, + "description": "Retrieve basic agent information", + "tags": [ + "Agent" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated", + "Basewallet" + ] + } + ], + "parameters": [] + } + }, + "/agent/token": { "post": { - "operationId": "CreateLegacyConnectionlessInvitation", + "operationId": "GetAgentToken", "responses": { "200": { - "description": "a message and a invitationUrl", + "description": "Ok", "content": { "application/json": { "schema": { - "properties": { - "outOfBandRecord": { - "$ref": "#/components/schemas/OutOfBandRecord" - }, - "invitationUrl": { - "type": "string" - }, - "message": { - "$ref": "#/components/schemas/AgentMessage" - } - }, - "required": [ - "outOfBandRecord", - "invitationUrl", - "message" - ], - "type": "object" - }, - "examples": { - "Example 1": { - "value": { - "message": { - "@id": "eac4ff4e-b4fb-4c1d-aef3-b29c89d1cc00", - "@type": "https://didcomm.org/connections/1.0/invitation" - }, - "invitationUrl": "http://example.com/invitation_url" - } - } + "$ref": "#/components/schemas/AgentToken" } } } } }, - "description": "Creates a new connectionless legacy invitation.", + "description": "Retrieve agent token", "tags": [ - "DIDComm - Out Of Band" + "Agent" + ], + "security": [ + { + "apiKey": [] + } + ], + "parameters": [] + } + }, + "/agent/credential/verify": { + "post": { + "operationId": "VerifyCredential", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/W3cVerifyCredentialResult" + } + } + } + } + }, + "tags": [ + "Agent" ], "security": [ { @@ -5641,114 +9085,44 @@ ], "parameters": [], "requestBody": { - "description": "configuration of how a connection invitation should be created", "required": true, "content": { "application/json": { "schema": { - "properties": { - "domain": { - "type": "string" - }, - "message": { - "$ref": "#/components/schemas/AgentMessageType" + "anyOf": [ + { + "$ref": "#/components/schemas/SafeW3cJsonLdVerifyCredentialOptions" }, - "recordId": { - "type": "string" - } - }, - "required": [ - "domain", - "message", - "recordId" - ], - "type": "object", - "description": "configuration of how a connection invitation should be created" + {} + ] } } } } } }, - "/didcomm/oob/receive-invitation": { - "post": { - "operationId": "ReceiveInvitation", + "/anoncreds/schemas/{schemaId}": { + "get": { + "operationId": "GetSchemaById", "responses": { "200": { - "description": "out-of-band record and connection record if one has been created.", - "content": { - "application/json": { - "schema": { - "properties": { - "connectionRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" - }, - "outOfBandRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" - } - }, - "required": [ - "connectionRecord", - "outOfBandRecord" - ], - "type": "object" - }, - "examples": { - "Example 1": { - "value": { - "outOfBandRecord": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false - }, - "connectionRecord": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" - } + "description": "get schema by Id", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaResponseDTO" + }, + "examples": { + "Example 1": { + "value": { + "ver": "1.0", + "id": "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0", + "name": "schema", + "version": "1.0", + "attrNames": [ + "string" + ], + "seqNo": 351936 } } } @@ -5756,9 +9130,9 @@ } } }, - "description": "Creates inbound out-of-band record and assigns out-of-band invitation message to it if the\nmessage is valid.", + "description": "Get schema by schemaId", "tags": [ - "DIDComm - Out Of Band" + "Anoncreds - Schemas" ], "security": [ { @@ -5768,98 +9142,50 @@ ] } ], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReceiveInvitationProps" - } + "parameters": [ + { + "in": "path", + "name": "schemaId", + "required": true, + "schema": { + "$ref": "#/components/schemas/SchemaId" } } - } + ] } }, - "/didcomm/oob/receive-invitation-url": { + "/anoncreds/schemas": { "post": { - "operationId": "ReceiveInvitationFromUrl", + "operationId": "CreateSchema", "responses": { "200": { - "description": "out-of-band record and connection record if one has been created.", + "description": "get schema", "content": { "application/json": { "schema": { - "properties": { - "connectionRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" + "anyOf": [ + { + "$ref": "#/components/schemas/RegisterSchemaReturn" }, - "outOfBandRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" + { + "$ref": "#/components/schemas/RegisterSchemaReturnStateFinished" } - }, - "required": [ - "connectionRecord", - "outOfBandRecord" - ], - "type": "object" + ] }, "examples": { "Example 1": { "value": { - "outOfBandRecord": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false + "state": "finished", + "schema": { + "issuerId": "did:indy:bcovrin:testnet:LRCUFcizUL74AGgLqdJHK7", + "name": "Test Schema", + "version": "1.0.0", + "attrNames": [ + "Name", + "Age" + ] }, - "connectionRecord": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" - } + "schemaId": "LRCUFcizUL74AGgLqdJHK7:2:Test Schema:1.0.0" } } } @@ -5867,9 +9193,9 @@ } } }, - "description": "Creates inbound out-of-band record and assigns out-of-band invitation message to it if the\nmessage is valid.", + "description": "Create schema", "tags": [ - "DIDComm - Out Of Band" + "Anoncreds - Schemas" ], "security": [ { @@ -5885,102 +9211,152 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReceiveInvitationByUrlProps" + "$ref": "#/components/schemas/CreateSchemaInput" } } } } } }, - "/didcomm/oob/{outOfBandId}/accept-invitation": { - "post": { - "operationId": "AcceptInvitation", + "/anoncreds/credential-definitions/{credentialDefinitionId}": { + "get": { + "operationId": "GetCredentialDefinitionById", "responses": { "200": { - "description": "Ok", + "description": "CredDef", "content": { "application/json": { "schema": { - "properties": { - "connectionRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" - }, - "outOfBandRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" - } - }, - "required": [ - "connectionRecord", - "outOfBandRecord" - ], - "type": "object" + "$ref": "#/components/schemas/GetCredentialDefinitionReturn" }, "examples": { "Example 1": { "value": { - "outOfBandRecord": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] + "ver": "1.0", + "id": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag", + "schemaId": "351936", + "type": "CL", + "tag": "definition", + "value": { + "primary": { + "n": "string", + "s": "string", + "r": { + "master_secret": "string", + "string": "string" + }, + "rctxt": "string", + "z": "string" }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false - }, - "connectionRecord": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" + "revocation": { + "g": "1 string", + "g_dash": "string", + "h": "string", + "h0": "string", + "h1": "string", + "h2": "string", + "htilde": "string", + "h_cap": "string", + "u": "string", + "pk": "string", + "y": "string" + } + } + } + } + } + } + } + } + }, + "description": "Retrieve credential definition by credential definition id", + "tags": [ + "Anoncreds - Credential Definitions" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "credentialDefinitionId", + "required": true, + "schema": { + "$ref": "#/components/schemas/CredentialDefinitionId" + } + } + ] + } + }, + "/anoncreds/credential-definitions": { + "post": { + "operationId": "CreateCredentialDefinition", + "responses": { + "200": { + "description": "CredDef", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/RegisterCredentialDefinitionReturn" + }, + { + "$ref": "#/components/schemas/CredentialDefinitionStates" + } + ] + }, + "examples": { + "Example 1": { + "value": { + "ver": "1.0", + "id": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag", + "schemaId": "351936", + "type": "CL", + "tag": "definition", + "value": { + "primary": { + "n": "string", + "s": "string", + "r": { + "master_secret": "string", + "string": "string" + }, + "rctxt": "string", + "z": "string" }, - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + "revocation": { + "g": "1 string", + "g_dash": "string", + "h": "string", + "h0": "string", + "h1": "string", + "h2": "string", + "htilde": "string", + "h_cap": "string", + "u": "string", + "pk": "string", + "y": "string" + } } } } } } } + }, + "202": { + "description": "Wait for action to complete" } }, - "description": "Accept a connection invitation as invitee (by sending a connection request message) for the connection with the specified connection id.\nThis is not needed when auto accepting of connections is enabled.", + "description": "Creates a new credential definition.", "tags": [ - "DIDComm - Out Of Band" + "Anoncreds - Credential Definitions" ], "security": [ { @@ -5990,22 +9366,35 @@ ] } ], - "parameters": [ - { - "in": "path", - "name": "outOfBandId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ], + "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AcceptInvitationConfig" + "properties": { + "endorserDid": { + "type": "string" + }, + "endorse": { + "type": "boolean" + }, + "tag": { + "type": "string" + }, + "schemaId": { + "$ref": "#/components/schemas/SchemaId" + }, + "issuerId": { + "type": "string" + } + }, + "required": [ + "tag", + "schemaId", + "issuerId" + ], + "type": "object" } } } @@ -6098,7 +9487,7 @@ "name": "state", "required": false, "schema": { - "$ref": "#/components/schemas/CredentialState" + "$ref": "#/components/schemas/DidCommCredentialState" } }, { @@ -6106,7 +9495,7 @@ "name": "role", "required": false, "schema": { - "$ref": "#/components/schemas/CredentialRole" + "$ref": "#/components/schemas/DidCommCredentialRole" } } ] @@ -6254,7 +9643,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialExchangeRecord" + "$ref": "#/components/schemas/DidCommCredentialExchangeRecord" }, "examples": { "Example 1": { @@ -6318,7 +9707,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialExchangeRecord" + "$ref": "#/components/schemas/DidCommCredentialExchangeRecord" }, "examples": { "Example 1": { @@ -6382,7 +9771,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialExchangeRecord" + "$ref": "#/components/schemas/DidCommCredentialExchangeRecord" }, "examples": { "Example 1": { @@ -6453,6 +9842,9 @@ "credentialRequestThId": { "type": "string" }, + "credentialExchangeRecordId": { + "type": "string" + }, "outOfBandRecordId": { "type": "string" }, @@ -6460,7 +9852,7 @@ "$ref": "#/components/schemas/Record_string.unknown_" }, "invitation": { - "$ref": "#/components/schemas/PlaintextMessage" + "$ref": "#/components/schemas/DidCommPlaintextMessage" }, "invitationUrl": { "type": "string" @@ -6469,6 +9861,7 @@ "required": [ "invitationDid", "credentialRequestThId", + "credentialExchangeRecordId", "outOfBandRecordId", "outOfBandRecord", "invitation", @@ -6513,7 +9906,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialExchangeRecord" + "$ref": "#/components/schemas/DidCommCredentialExchangeRecord" }, "examples": { "Example 1": { @@ -6577,7 +9970,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialExchangeRecord" + "$ref": "#/components/schemas/DidCommCredentialExchangeRecord" }, "examples": { "Example 1": { @@ -6641,7 +10034,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialExchangeRecord" + "$ref": "#/components/schemas/DidCommCredentialExchangeRecord" }, "examples": { "Example 1": { @@ -6705,7 +10098,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetCredentialFormatDataReturn__40_LegacyIndyCredentialFormat-or-JsonLdCredentialFormat-or-AnonCredsCredentialFormat_41_-Array_" + "$ref": "#/components/schemas/GetCredentialFormatDataReturn__40_LegacyIndyCredentialFormat-or-DidCommJsonLdCredentialFormat-or-AnonCredsDidCommCredentialFormat_41_-Array_" } } } @@ -6735,12 +10128,12 @@ ] } }, - "/didcomm/connections": { + "/didcomm/proofs": { "get": { - "operationId": "GetAllConnections", + "operationId": "GetAllProofs", "responses": { "200": { - "description": "ConnectionRecord[]", + "description": "ProofRecord[]", "content": { "application/json": { "schema": { @@ -6753,19 +10146,12 @@ "Example 1": { "value": [ { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, "metadata": {}, "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "protocolVersion": "v1" } ] } @@ -6774,9 +10160,9 @@ } } }, - "description": "Retrieve all connections records", + "description": "Retrieve all proof records", "tags": [ - "DIDComm - Connections" + "DIDComm - Proofs" ], "security": [ { @@ -6789,87 +10175,138 @@ "parameters": [ { "in": "query", - "name": "outOfBandId", + "name": "threadId", "required": false, "schema": { "type": "string" } - }, - { - "description": "Alias", - "in": "query", - "name": "alias", - "required": false, - "schema": { - "type": "string" + } + ] + } + }, + "/didcomm/proofs/{proofRecordId}": { + "get": { + "operationId": "GetProofById", + "responses": { + "200": { + "description": "ProofRecord", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "examples": { + "Example 1": { + "value": { + "metadata": {}, + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "protocolVersion": "v1" + } + } + } + } } - }, + } + }, + "description": "Retrieve proof record by proof record id", + "tags": [ + "DIDComm - Proofs" + ], + "security": [ { - "description": "Connection state", - "in": "query", - "name": "state", - "required": false, - "schema": { - "$ref": "#/components/schemas/DidExchangeState" - } - }, + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ { - "description": "My DID", - "in": "query", - "name": "myDid", - "required": false, + "in": "path", + "name": "proofRecordId", + "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/RecordId" } - }, - { - "description": "Their DID", - "in": "query", - "name": "theirDid", - "required": false, - "schema": { - "type": "string" + } + ] + } + }, + "/didcomm/proofs/propose-proof": { + "post": { + "operationId": "ProposeProof", + "responses": { + "200": { + "description": "ProofRecord", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofExchangeRecord" + }, + "examples": { + "Example 1": { + "value": { + "metadata": {}, + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "protocolVersion": "v1" + } + } + } + } } - }, + } + }, + "description": "Initiate a new presentation exchange as prover by sending a presentation proposal request\nto the connection with the specified connection id.", + "tags": [ + "DIDComm - Proofs" + ], + "security": [ { - "description": "Their label", - "in": "query", - "name": "theirLabel", - "required": false, - "schema": { - "type": "string" + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RequestProofProposalOptions" + } } } - ] + } } - }, - "/didcomm/connections/{connectionId}": { - "get": { - "operationId": "GetConnectionById", + }, + "/didcomm/proofs/accept-proposal": { + "post": { + "operationId": "AcceptProposal", "responses": { "200": { - "description": "ConnectionRecord", + "description": "ProofRecord", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Record_string.unknown_" + "$ref": "#/components/schemas/DidCommProofExchangeRecord" }, "examples": { "Example 1": { "value": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, "metadata": {}, "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "protocolVersion": "v1" } } } @@ -6877,9 +10314,9 @@ } } }, - "description": "Retrieve connection record by connection id", + "description": "Accept a presentation proposal as verifier by sending an accept proposal message\nto the connection associated with the proof record.", "tags": [ - "DIDComm - Connections" + "DIDComm - Proofs" ], "security": [ { @@ -6889,28 +10326,49 @@ ] } ], - "parameters": [ - { - "description": "Connection identifier", - "in": "path", - "name": "connectionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptProofProposal" + } } } - ] - }, - "delete": { - "operationId": "DeleteConnection", + } + } + }, + "/didcomm/proofs/request-proof": { + "post": { + "operationId": "RequestProof", "responses": { - "204": { - "description": "No content" + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofExchangeRecord" + }, + "examples": { + "Example 1": { + "value": { + "metadata": {}, + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "protocolVersion": "v1" + } + } + } + } + } } }, - "description": "Deletes a connection record from the connection repository.", + "description": "Creates a presentation request bound to existing connection", "tags": [ - "DIDComm - Connections" + "DIDComm - Proofs" ], "security": [ { @@ -6920,46 +10378,71 @@ ] } ], - "parameters": [ - { - "description": "Connection identifier", - "in": "path", - "name": "connectionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RequestProofOptions" + } } } - ] + } } }, - "/didcomm/connections/{connectionId}/accept-request": { + "/didcomm/proofs/create-request-oob": { "post": { - "operationId": "AcceptRequest", + "operationId": "CreateRequest", "responses": { "200": { - "description": "ConnectionRecord", + "description": "Ok", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Record_string.unknown_" + "properties": { + "proofMessageId": { + "type": "string" + }, + "proofRecordThId": { + "type": "string" + }, + "proofRecordId": { + "type": "string" + }, + "invitationDid": { + "type": "string" + }, + "outOfBandRecord": { + "$ref": "#/components/schemas/Record_string.unknown_" + }, + "invitation": { + "$ref": "#/components/schemas/DidCommPlaintextMessage" + }, + "invitationUrl": { + "type": "string" + } + }, + "required": [ + "proofMessageId", + "proofRecordThId", + "proofRecordId", + "invitationDid", + "outOfBandRecord", + "invitation", + "invitationUrl" + ], + "type": "object" }, "examples": { "Example 1": { "value": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, "metadata": {}, "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "protocolVersion": "v1" } } } @@ -6967,9 +10450,9 @@ } } }, - "description": "Accept a connection request as inviter by sending a connection response message\nfor the connection with the specified connection id.\n\nThis is not needed when auto accepting of connection is enabled.", + "description": "Creates a presentation request not bound to any proposal or existing connection", "tags": [ - "DIDComm - Connections" + "DIDComm - Proofs" ], "security": [ { @@ -6979,25 +10462,25 @@ ] } ], - "parameters": [ - { - "description": "Connection identifier", - "in": "path", - "name": "connectionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateProofRequestOobOptions" + } } } - ] + } } }, - "/didcomm/connections/{connectionId}/accept-response": { + "/didcomm/proofs/{proofRecordId}/accept-request": { "post": { - "operationId": "AcceptResponse", + "operationId": "AcceptRequest", "responses": { "200": { - "description": "ConnectionRecord", + "description": "ProofRecord", "content": { "application/json": { "schema": { @@ -7006,19 +10489,12 @@ "examples": { "Example 1": { "value": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, "metadata": {}, "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "protocolVersion": "v1" } } } @@ -7026,9 +10502,9 @@ } } }, - "description": "Accept a connection response as invitee by sending a trust ping message\nfor the connection with the specified connection id.\n\nThis is not needed when auto accepting of connection is enabled.", + "description": "Accept a presentation request as prover by sending an accept request message\nto the connection associated with the proof record.", "tags": [ - "DIDComm - Connections" + "DIDComm - Proofs" ], "security": [ { @@ -7040,87 +10516,67 @@ ], "parameters": [ { - "description": "Connection identifier", "in": "path", - "name": "connectionId", + "name": "proofRecordId", "required": true, "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - } - }, - "/didcomm/url/{invitationId}": { - "get": { - "operationId": "GetInvitation", - "responses": { - "200": { - "description": "Ok", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PlaintextMessage" - } - } + "type": "string" } } - }, - "tags": [ - "DIDComm - Connections" ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "invitationId", - "required": true, - "schema": { - "type": "string" + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "comment": { + "type": "string" + }, + "filterByNonRevocationRequirements": { + "type": "boolean" + }, + "filterByPresentationPreview": { + "type": "boolean" + } + }, + "type": "object" + } } } - ] + } } }, - "/didcomm/basic-messages/{connectionId}": { - "get": { - "operationId": "GetBasicMessages", + "/didcomm/proofs/{proofRecordId}/accept-presentation": { + "post": { + "operationId": "AcceptPresentation", "responses": { "200": { - "description": "BasicMessageRecord[]", + "description": "ProofRecord", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/BasicMessageRecord" - }, - "type": "array" + "$ref": "#/components/schemas/DidCommProofExchangeRecord" }, "examples": { "Example 1": { - "value": [ - { - "_tags": { - "role": "sender", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834" - }, - "metadata": {}, - "id": "74bcf865-1fdc-45b4-b517-9def02dfd25f", - "createdAt": "2022-08-18T08:38:40.216Z", - "content": "string", - "sentTime": "2022-08-18T08:38:40.216Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834" - } - ] + "value": { + "metadata": {}, + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "protocolVersion": "v1" + } } } } } } }, - "description": "Retrieve basic messages by connection id", + "description": "Accept a presentation as prover by sending an accept presentation message\nto the connection associated with the proof record.", "tags": [ - "DIDComm - Basic Messages" + "DIDComm - Proofs" ], "security": [ { @@ -7132,39 +10588,36 @@ ], "parameters": [ { - "description": "Connection identifier", "in": "path", - "name": "connectionId", + "name": "proofRecordId", "required": true, "schema": { - "$ref": "#/components/schemas/RecordId" + "type": "string" } } ] - }, - "post": { - "operationId": "SendMessage", + } + }, + "/didcomm/proofs/{proofRecordId}/form-data": { + "get": { + "operationId": "ProofFormData", "responses": { "200": { - "description": "Ok", + "description": "ProofRecord", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BasicMessageRecord" + "$ref": "#/components/schemas/GetProofFormatDataReturn__40_LegacyIndyDidCommProofFormat-or-AnonCredsDidCommProofFormat-or-DidCommDifPresentationExchangeProofFormat_41_-Array_" }, "examples": { "Example 1": { "value": { - "_tags": { - "role": "sender", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834" - }, "metadata": {}, - "id": "74bcf865-1fdc-45b4-b517-9def02dfd25f", - "createdAt": "2022-08-18T08:38:40.216Z", - "content": "string", - "sentTime": "2022-08-18T08:38:40.216Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834" + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "protocolVersion": "v1" } } } @@ -7172,9 +10625,9 @@ } } }, - "description": "Send a basic message to a connection", + "description": "Return proofRecord", "tags": [ - "DIDComm - Basic Messages" + "DIDComm - Proofs" ], "security": [ { @@ -7186,88 +10639,40 @@ ], "parameters": [ { - "description": "Connection identifier", "in": "path", - "name": "connectionId", + "name": "proofRecordId", "required": true, "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Record_content.string_" - } + "type": "string" } } - } + ] } }, - "/multi-tenancy/create-tenant": { + "/openid4vc/verifier": { "post": { - "operationId": "CreateTenant", + "operationId": "CreateVerifier", "responses": { "200": { "description": "Ok", "content": { "application/json": { "schema": { - "properties": { - "token": {}, - "metadata": { - "$ref": "#/components/schemas/Metadata____" - }, - "updatedAt": { - "type": "string", - "format": "date-time" - }, - "createdAt": { - "type": "string", - "format": "date-time" - }, - "id": { - "type": "string" - }, - "storageVersion": { - "type": "string" - }, - "config": { - "$ref": "#/components/schemas/TenantConfig" - }, - "type": { - "type": "string", - "enum": [ - "TenantRecord" - ], - "nullable": false - } - }, - "required": [ - "token", - "metadata", - "createdAt", - "id", - "storageVersion", - "config", - "type" - ], - "type": "object" + "$ref": "#/components/schemas/OpenId4VcVerifierRecord" } } } } }, + "description": "Create a new verifier and store the verifier record", "tags": [ - "MultiTenancy" + "oid4vc verifiers" ], "security": [ { "jwt": [ - "Basewallet" + "tenant", + "dedicated" ] } ], @@ -7277,77 +10682,46 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateTenantOptions" + "$ref": "#/components/schemas/OpenId4VcSiopCreateVerifierOptions" } } } } - } - }, - "/multi-tenancy/get-token/{tenantId}": { - "post": { - "operationId": "GetTenantToken", + }, + "get": { + "operationId": "GetVerifiersByQuery", "responses": { "200": { "description": "Ok", - "content": { - "application/json": { - "schema": {} - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } + "items": { + "$ref": "#/components/schemas/OpenId4VcVerifierRecord" }, - "required": [ - "message" - ], - "type": "object" + "type": "array" } } } } }, + "description": "Get verifiers by query", "tags": [ - "MultiTenancy" + "oid4vc verifiers" ], "security": [ { "jwt": [ - "Basewallet" + "tenant", + "dedicated" ] } ], "parameters": [ { - "in": "path", - "name": "tenantId", - "required": true, + "in": "query", + "name": "publicVerifierId", + "required": false, "schema": { "type": "string" } @@ -7355,107 +10729,98 @@ ] } }, - "/multi-tenancy/{tenantId}": { - "get": { - "operationId": "GetTenantById", + "/openid4vc/verifier/{publicVerifierId}": { + "put": { + "operationId": "UpdateVerifierMetadata", "responses": { "200": { "description": "Ok", - "content": { - "application/json": { - "schema": {} - } - } - }, - "404": { - "description": "", "content": { "application/json": { "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" + "$ref": "#/components/schemas/OpenId4VcVerifierRecord" } } } - }, - "500": { - "description": "", + } + }, + "description": "Update verifier metadata", + "tags": [ + "oid4vc verifiers" + ], + "security": [ + { + "jwt": [ + "tenant", + "dedicated" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "publicVerifierId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenId4VcUpdateVerifierRecordOptions" + } + } + } + } + }, + "get": { + "operationId": "GetVerifier", + "responses": { + "200": { + "description": "Ok", "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" + "$ref": "#/components/schemas/OpenId4VcVerifierRecord" } } } } }, + "description": "Get single verifier by ID", "tags": [ - "MultiTenancy" + "oid4vc verifiers" ], "security": [ { "jwt": [ - "Basewallet" + "tenant", + "dedicated" ] } ], "parameters": [ { "in": "path", - "name": "tenantId", + "name": "publicVerifierId", "required": true, "schema": { "type": "string" } } ] - }, + } + }, + "/openid4vc/verifier/{verifierId}": { "delete": { - "operationId": "DeleteTenantById", + "operationId": "DeleteVerifier", "responses": { "200": { "description": "Ok", - "content": { - "application/json": { - "schema": {} - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", "content": { "application/json": { "schema": { @@ -7473,20 +10838,22 @@ } } }, + "description": "Delete verifier by ID", "tags": [ - "MultiTenancy" + "oid4vc verifiers" ], "security": [ { "jwt": [ - "Basewallet" + "tenant", + "dedicated" ] } ], "parameters": [ { "in": "path", - "name": "tenantId", + "name": "verifierId", "required": true, "schema": { "type": "string" diff --git a/src/server.ts b/src/server.ts index 1b4d2768..ce26a974 100644 --- a/src/server.ts +++ b/src/server.ts @@ -7,7 +7,7 @@ import type { ServerConfig } from './utils/ServerConfig' import type { Response as ExResponse, Request as ExRequest, NextFunction, ErrorRequestHandler } from 'express' import { Agent } from '@credo-ts/core' -import { TenantAgent } from '@credo-ts/tenants/build/TenantAgent' +import { TenantAgent } from '@credo-ts/tenants' import bodyParser from 'body-parser' import cors from 'cors' import dotenv from 'dotenv' @@ -27,8 +27,11 @@ import { credentialEvents } from './events/CredentialEvents' import { proofEvents } from './events/ProofEvents' import { questionAnswerEvents } from './events/QuestionAnswerEvents' import { reuseConnectionEvents } from './events/ReuseConnectionEvents' +import { openId4VcIssuanceSessionEvents } from './events/openId4VcIssuanceSessionEvents' +import { openId4VcVerificationSessionEvents } from './events/openId4VcVerificationSessionEvents' import { RegisterRoutes } from './routes/routes' import { SecurityMiddleware } from './securityMiddleware' +import { validateAuthConfig } from './utils/auth' dotenv.config() @@ -37,8 +40,13 @@ export const setupServer = async ( config: ServerConfig, apiKey?: string, ) => { - await otelSDK.start() - agent.config.logger.info('OpenTelemetry SDK started') + if (process.env.OTEL_ENABLED === 'true') { + await otelSDK.start() + agent.config.logger.info('OpenTelemetry SDK started') + } else { + agent.config.logger.info('OpenTelemetry SDK disabled (set OTEL_ENABLED=true to enable)') + } + validateAuthConfig() container.registerInstance(Agent, agent as Agent) fs.writeFileSync('config.json', JSON.stringify(config, null, 2)) @@ -50,6 +58,8 @@ export const setupServer = async ( basicMessageEvents(agent, config) connectionEvents(agent, config) credentialEvents(agent, config) + openId4VcIssuanceSessionEvents(agent, config) + openId4VcVerificationSessionEvents(agent, config) proofEvents(agent, config) reuseConnectionEvents(agent, config) } @@ -58,13 +68,13 @@ export const setupServer = async ( app.use( bodyParser.urlencoded({ extended: true, - limit: '50mb', + limit: process.env.APP_URL_ENCODED_BODY_SIZE ?? '5mb', }), ) setDynamicApiKey(apiKey ? apiKey : '') - app.use(bodyParser.json({ limit: '50mb' })) + app.use(bodyParser.json({ limit: process.env.APP_JSON_BODY_SIZE ?? '5mb' })) app.use('/docs', serve, (_req: ExRequest, res: ExResponse, next: NextFunction) => { import('./routes/swagger.json') .then((swaggerJson) => { diff --git a/src/tracer.ts b/src/tracer.ts index ed0ecbe1..3c7048fc 100644 --- a/src/tracer.ts +++ b/src/tracer.ts @@ -27,6 +27,8 @@ const resource = new resourceFromAttributes({ [SemanticResourceAttributes.SERVICE_INSTANCE_ID]: process.env.HOSTNAME, }) +const otelEnabled = process.env.OTEL_ENABLED === 'true' + const traceExporter = new OTLPTraceExporter({ url: process.env.OTEL_TRACES_OTLP_ENDPOINT, headers: { @@ -40,8 +42,13 @@ const logExporter = new OTLPLogExporter({ Authorization: `Api-Key ${process.env.OTEL_HEADERS_KEY}`, }, }) + const logProvider = new LoggerProvider({ resource }) -logProvider.addLogRecordProcessor(new BatchLogRecordProcessor(logExporter)) +// Only add the BatchLogRecordProcessor when OTEL is enabled — otherwise it +// tries to connect to localhost:4318 on every flush even if SDK never started. +if (otelEnabled) { + logProvider.addLogRecordProcessor(new BatchLogRecordProcessor(logExporter)) +} export const otelLogger: Logger = logProvider.getLogger('credo-controller-logger') export const otelLoggerProviderInstance = logProvider diff --git a/src/types/request.d.ts b/src/types/request.d.ts index 89841327..a5223399 100644 --- a/src/types/request.d.ts +++ b/src/types/request.d.ts @@ -1,17 +1,7 @@ import type { RestAgentModules, RestMultiTenantAgentModules } from '../cliAgent' import type { Agent } from '@credo-ts/core' -import type { TenantAgent } from '@credo-ts/tenants/build/TenantAgent' +import type { TenantAgent } from '@credo-ts/tenants' -// declare global { -// namespace Express { -// interface Request { -// user: { -// [x: string]: any -// agent: Agent | Agent | TenantAgent -// } -// } -// } -// } type AgentType = Agent | Agent | TenantAgent interface IAgent { @@ -25,14 +15,3 @@ declare global { } } } - -// declare global { -// namespace Express { -// interface Request { -// user: { -// [x: string]: any -// agent: any -// } -// } -// } -// } diff --git a/src/utils/NatsAuthenticator.ts b/src/utils/NatsAuthenticator.ts new file mode 100644 index 00000000..36f232d6 --- /dev/null +++ b/src/utils/NatsAuthenticator.ts @@ -0,0 +1,30 @@ +import type { NatsConfig } from '../purge/PurgeTypes' +import type { Authenticator } from 'nats' + +import { credsAuthenticator, nkeyAuthenticator, usernamePasswordAuthenticator } from 'nats' +import { readFileSync } from 'node:fs' + +export type NatsAuthType = 'nkey' | 'creds' | 'usernamePassword' | 'none' + +export function buildNatsAuthenticator(nats: NatsConfig): { authenticator?: Authenticator } { + const authType = (process.env.NATS_AUTH_TYPE as NatsAuthType) || 'none' + + switch (authType) { + case 'nkey': + if (!nats.nkeySeed) throw new Error('[NATS] NATS_AUTH_TYPE=nkey but NATS_NKEY_SEED is not set') + return { authenticator: nkeyAuthenticator(new TextEncoder().encode(nats.nkeySeed)) } + + case 'creds': + if (!nats.credentialsFile) throw new Error('[NATS] NATS_AUTH_TYPE=creds but NATS_CREDENTIALS_FILE is not set') + return { authenticator: credsAuthenticator(readFileSync(nats.credentialsFile)) } + + case 'usernamePassword': + if (!nats.username || !nats.password) + throw new Error('[NATS] NATS_AUTH_TYPE=usernamePassword but NATS_USER or NATS_PASSWORD is not set') + return { authenticator: usernamePasswordAuthenticator(nats.username, nats.password) } + + case 'none': + default: + return {} + } +} diff --git a/src/utils/NatsConstants.ts b/src/utils/NatsConstants.ts new file mode 100644 index 00000000..43d85f9f --- /dev/null +++ b/src/utils/NatsConstants.ts @@ -0,0 +1,9 @@ +// -1 means retry forever — the agent should not stop trying to reconnect. +export const NATS_MAX_RECONNECT_ATTEMPTS = -1 + +// How long (ms) to wait between reconnect attempts. +export const NATS_RECONNECT_TIME_WAIT_MS = 2000 + +// JetStream API error codes returned when a stream or consumer already exists. +export const NATS_ERR_STREAM_ALREADY_EXISTS = 10058 +export const NATS_ERR_CONSUMER_ALREADY_EXISTS = 10148 diff --git a/src/utils/agent.ts b/src/utils/agent.ts index b01aecf1..b3316643 100644 --- a/src/utils/agent.ts +++ b/src/utils/agent.ts @@ -3,55 +3,55 @@ import type { InitConfig } from '@credo-ts/core' import { PolygonModule } from '@ayanworks/credo-polygon-w3c-module' import { AnonCredsModule, - LegacyIndyCredentialFormatService, - LegacyIndyProofFormatService, - V1CredentialProtocol, - V1ProofProtocol, - AnonCredsCredentialFormatService, - AnonCredsProofFormatService, + LegacyIndyDidCommProofFormatService, + DidCommCredentialV1Protocol, + DidCommProofV1Protocol, + AnonCredsDidCommProofFormatService, + LegacyIndyDidCommCredentialFormatService, + AnonCredsDidCommCredentialFormatService, } from '@credo-ts/anoncreds' import { AskarModule } from '@credo-ts/askar' +import { DidsModule, KeyDidRegistrar, KeyDidResolver, WebDidResolver, Agent, LogLevel } from '@credo-ts/core' import { - AutoAcceptCredential, - CredentialsModule, - DidsModule, - JsonLdCredentialFormatService, - KeyDidRegistrar, - KeyDidResolver, - DifPresentationExchangeProofFormatService, - ProofsModule, - V2CredentialProtocol, - V2ProofProtocol, - WebDidResolver, - Agent, - ConnectionInvitationMessage, - HttpOutboundTransport, - LogLevel, -} from '@credo-ts/core' + DidCommHttpOutboundTransport, + DidCommJsonLdCredentialFormatService, + DidCommDifPresentationExchangeProofFormatService, + DidCommAutoAcceptCredential, + DidCommProofV2Protocol, + DidCommCredentialV2Protocol, + DidCommModule, + DidCommConnectionInvitationMessage, + parseInvitationUrl, +} from '@credo-ts/didcomm' import { IndyVdrAnonCredsRegistry, IndyVdrModule } from '@credo-ts/indy-vdr' -import { agentDependencies, HttpInboundTransport } from '@credo-ts/node' +import { agentDependencies, DidCommHttpInboundTransport } from '@credo-ts/node' import { TenantsModule } from '@credo-ts/tenants' import { anoncreds } from '@hyperledger/anoncreds-nodejs' -import { ariesAskar } from '@hyperledger/aries-askar-nodejs' import { indyVdr } from '@hyperledger/indy-vdr-nodejs' +import { askar } from '@openwallet-foundation/askar-nodejs' import { TsLogger } from './logger' -export const setupAgent = async ({ name, endpoints, port }: { name: string; endpoints: string[]; port: number }) => { +export const setupAgent = async ({ + endpoints, + port, + id, + key, +}: { + endpoints: string[] + port: number + id: string + key: string +}) => { const logger = new TsLogger(LogLevel.debug) const config: InitConfig = { - label: name, - endpoints: endpoints, - walletConfig: { - id: name, - key: name, - }, logger: logger, + allowInsecureHttpUrls: process.env.ALLOW_INSECURE_HTTP_URLS?.toLowerCase() === 'true' ? true : false, } - const legacyIndyCredentialFormat = new LegacyIndyCredentialFormatService() - const legacyIndyProofFormat = new LegacyIndyProofFormatService() + const legacyIndyCredentialFormat = new LegacyIndyDidCommCredentialFormatService() + const legacyIndyProofFormat = new LegacyIndyDidCommProofFormatService() const agent = new Agent({ config: config, modules: { @@ -67,7 +67,11 @@ export const setupAgent = async ({ name, endpoints, port }: { name: string; endp ], }), askar: new AskarModule({ - ariesAskar, + askar, + store: { + id: id, + key: key, + }, }), anoncreds: new AnonCredsModule({ @@ -79,69 +83,96 @@ export const setupAgent = async ({ name, endpoints, port }: { name: string; endp registrars: [new KeyDidRegistrar()], resolvers: [new KeyDidResolver(), new WebDidResolver()], }), - proofs: new ProofsModule({ - proofProtocols: [ - new V1ProofProtocol({ - indyProofFormat: legacyIndyProofFormat, - }), - new V2ProofProtocol({ - proofFormats: [ - legacyIndyProofFormat, - new AnonCredsProofFormatService(), - new DifPresentationExchangeProofFormatService(), - ], - }), - ], - }), - credentials: new CredentialsModule({ - autoAcceptCredentials: AutoAcceptCredential.ContentApproved, - credentialProtocols: [ - new V1CredentialProtocol({ - indyCredentialFormat: legacyIndyCredentialFormat, - }), - new V2CredentialProtocol({ - credentialFormats: [ - legacyIndyCredentialFormat, - new JsonLdCredentialFormatService(), - new AnonCredsCredentialFormatService(), - ], - }), - ], - }), tenants: new TenantsModule(), + didcomm: new DidCommModule({ + processDidCommMessagesConcurrently: true, + anoncreds: new AnonCredsModule({ + registries: [new IndyVdrAnonCredsRegistry()], + anoncreds, + }), + oob: true, + mediationRecipient: true, + messagePickup: true, + basicMessages: true, + connections: { + autoAcceptConnections: true, + }, + proofs: { + proofProtocols: [ + new DidCommProofV1Protocol({ + indyProofFormat: legacyIndyProofFormat, + }), + new DidCommProofV2Protocol({ + proofFormats: [ + legacyIndyProofFormat, + new AnonCredsDidCommProofFormatService(), + new DidCommDifPresentationExchangeProofFormatService(), + ], + }), + ], + }, + credentials: { + autoAcceptCredentials: DidCommAutoAcceptCredential.Always, + credentialProtocols: [ + new DidCommCredentialV1Protocol({ + indyCredentialFormat: legacyIndyCredentialFormat, + }), + new DidCommCredentialV2Protocol({ + credentialFormats: [ + legacyIndyCredentialFormat, + new DidCommJsonLdCredentialFormatService(), + new AnonCredsDidCommCredentialFormatService(), + ], + }), + ], + }, + }), polygon: new PolygonModule({ - didContractAddress: '', - schemaManagerContractAddress: '', - fileServerToken: '', - rpcUrl: '', - serverUrl: '', + didContractAddress: process.env.DID_CONTRACT_ADDRESS as string, + schemaManagerContractAddress: process.env.SCHEMA_MANAGER_CONTRACT_ADDRESS as string, + fileServerToken: process.env.FILE_SERVER_TOKEN as string, + rpcUrl: process.env.RPC_URL as string, + serverUrl: process.env.SERVER_URL as string, }), }, dependencies: agentDependencies, }) - const httpInbound = new HttpInboundTransport({ + const httpInbound = new DidCommHttpInboundTransport({ port: port, }) - agent.registerInboundTransport(httpInbound) + agent.modules.didcomm.registerInboundTransport(httpInbound) - agent.registerOutboundTransport(new HttpOutboundTransport()) + agent.modules.didcomm.registerOutboundTransport(new DidCommHttpOutboundTransport()) - httpInbound.app.get('/invitation', async (req, res) => { - if (typeof req.query.d_m === 'string') { - const invitation = await ConnectionInvitationMessage.fromUrl(req.url.replace('d_m=', 'c_i=')) - res.send(invitation.toJSON()) - } - if (typeof req.query.c_i === 'string') { - const invitation = await ConnectionInvitationMessage.fromUrl(req.url) - res.send(invitation.toJSON()) - } else { - const { outOfBandInvitation } = await agent.oob.createInvitation() + httpInbound.app.get( + '/invitation', + async ( + req: { query: { d_m: any; c_i: any; oob: any }; url: string }, + res: { send: (arg0: any) => void; status: (code: number) => { send: (arg0: any) => void } }, + ) => { + try { + if (typeof req.query.d_m === 'string') { + const invitation = DidCommConnectionInvitationMessage.fromUrl(req.url.replace('d_m=', 'c_i=')) + res.send(invitation.toJSON()) + } else if (typeof req.query.c_i === 'string') { + const invitation = DidCommConnectionInvitationMessage.fromUrl(req.url) + res.send(invitation.toJSON()) + } else if (typeof req.query.oob === 'string') { + const invitation = parseInvitationUrl(req.url) + res.send(invitation.toJSON()) + } else { + const { outOfBandInvitation } = await agent.modules.didcomm.oob.createInvitation() - res.send(outOfBandInvitation.toUrl({ domain: endpoints + '/invitation' })) - } - }) + res.send(outOfBandInvitation.toUrl({ domain: endpoints[0] + '/invitation' })) + } + } catch (err: any) { + logger.error('[/invitation] Failed to handle invitation request', { error: err?.message }) + res.status(500).send({ error: 'Failed to process invitation request' }) + } + }, + ) await agent.initialize() diff --git a/src/utils/auth.ts b/src/utils/auth.ts new file mode 100644 index 00000000..2f3ac817 --- /dev/null +++ b/src/utils/auth.ts @@ -0,0 +1,57 @@ +export interface NoAuth { + type: 'NoAuth' + trustListUrl: string +} + +export interface ClientAuth { + type: 'ClientAuth' + trustServiceTokenUrl: string + trustListUrl: string + trustServiceClientId: string + trustServiceClientSecret: string +} + +export type Auth = NoAuth | ClientAuth + +export type AuthType = Auth['type'] + +export const AuthTypes = { + NoAuth: 'NoAuth', + ClientAuth: 'ClientAuth', +} as const satisfies Record + +const SUPPORTED_AUTH_TYPES = Object.values(AuthTypes) satisfies AuthType[] + +export function getAuthType(): AuthType { + const authType = process.env.TRUST_SERVICE_AUTH_TYPE as AuthType + if (!authType) { + return AuthTypes.NoAuth + } + if (!SUPPORTED_AUTH_TYPES.includes(authType)) { + throw new Error( + `TRUST_SERVICE_AUTH_TYPE '${authType}' is not supported. Supported types: ${SUPPORTED_AUTH_TYPES.join(', ')}`, + ) + } + return authType +} + +export function validateAuthConfig(): void { + const authType = getAuthType() + + const validators: Record void> = { + NoAuth: () => { + if (!process.env.TRUST_LIST_URL) throw new Error('[validateAuthConfig] TRUST_LIST_URL is required for NoAuth') + }, + ClientAuth: () => { + if (!process.env.TRUST_SERVICE_TOKEN_URL) + throw new Error('[validateAuthConfig] TRUST_SERVICE_TOKEN_URL is required for ClientAuth') + if (!process.env.TRUST_LIST_URL) throw new Error('[validateAuthConfig] TRUST_LIST_URL is required for ClientAuth') + if (!process.env.TRUST_SERVICE_CLIENT_ID) + throw new Error('[validateAuthConfig] TRUST_SERVICE_CLIENT_ID is required for ClientAuth') + if (!process.env.TRUST_SERVICE_CLIENT_SECRET) + throw new Error('[validateAuthConfig] TRUST_SERVICE_CLIENT_SECRET is required for ClientAuth') + }, + } + + validators[authType]() +} diff --git a/src/utils/constant.ts b/src/utils/constant.ts new file mode 100644 index 00000000..179b75bf --- /dev/null +++ b/src/utils/constant.ts @@ -0,0 +1,31 @@ +import type { Curve } from '../controllers/types' + +import { KeyAlgorithm } from '@openwallet-foundation/askar-nodejs' + +export const X509_CERTIFICATE_RECORD = 'X509_CERTIFICATE' +export const TRUST_SERVICE_ENV_KEYS = { + TOKEN_URL: 'TRUST_SERVICE_TOKEN_URL', + CLIENT_ID: 'TRUST_SERVICE_CLIENT_ID', + CLIENT_SECRET: 'TRUST_SERVICE_CLIENT_SECRET', + TRUST_LIST_URL: 'TRUST_LIST_URL', +} as const +export const keyAlgorithmToCurve: Partial> = { + [KeyAlgorithm.Ed25519]: 'Ed25519', + [KeyAlgorithm.X25519]: 'X25519', + + [KeyAlgorithm.EcSecp256r1]: 'P-256', + [KeyAlgorithm.EcSecp384r1]: 'P-384', + [KeyAlgorithm.EcSecp256k1]: 'secp256k1', +} +export const curveToKty = { + Ed25519: 'OKP', + X25519: 'OKP', + 'P-256': 'EC', + 'P-384': 'EC', + 'P-521': 'EC', + secp256k1: 'EC', +} as const + +export const verkey = '#verkey' +export const p521 = 'p521' +export const STATUS_LISTS_PATH = 'status-lists' diff --git a/src/utils/customDocumentLoader.ts b/src/utils/customDocumentLoader.ts index c31a15f9..9d0d4cef 100644 --- a/src/utils/customDocumentLoader.ts +++ b/src/utils/customDocumentLoader.ts @@ -1,16 +1,16 @@ import type { AgentContext, DocumentLoader } from '@credo-ts/core' -import type { DocumentLoaderResult } from '@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil' +import type { DocumentLoaderResult } from '@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil.mjs' import { CredoError } from '@credo-ts/core' -import { defaultDocumentLoader } from '@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader' +import { defaultDocumentLoader } from '@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader.mjs' /** * Check if URL belongs to CREDEBL schema domain */ function isW3CDeprecatedUrl(url: string, agentContext: AgentContext): boolean { - agentContext.config.logger.debug( - `Checking if w3c url(${url}) contains deprecated domain for agent: ${agentContext.config.label}`, - ) + // agentContext.config.logger.debug( + // `Checking if w3c url(${url}) contains deprecated domain for agent: ${agentContext.config.label}`, + // ) return url.startsWith(process.env.DEPRECATED_DOMAIN!) } @@ -32,9 +32,9 @@ export const CustomDocumentLoader = (agentContext: AgentContext): DocumentLoader try { // Intercept credebl schemas if (isW3CDeprecatedUrl(url, agentContext)) { - agentContext.config.logger.debug( - `Found w3c url(${url}) containing deprecated domain for agent: ${agentContext.config.label}`, - ) + // agentContext.config.logger.debug( + // `Found w3c url(${url}) containing deprecated domain for agent: ${agentContext.config.label}`, + // ) url = replaceUrl(url, agentContext) } diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 877798c3..2058ac6a 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -1,7 +1,35 @@ -import { JsonTransformer } from '@credo-ts/core' -import { JsonEncoder } from '@credo-ts/core/build/utils/JsonEncoder' +import type { Curve, EcCurve, EcType, OkpCurve, OkpType } from '../controllers/types' +import type { DidDocument, VerificationMethod } from '@credo-ts/core' +import type { KeyAlgorithm } from '@openwallet-foundation/askar-nodejs' + +import { JsonEncoder, JsonTransformer } from '@credo-ts/core' +import axios from 'axios' import { randomBytes } from 'crypto' +import { TRUST_SERVICE_ENV_KEYS, curveToKty, keyAlgorithmToCurve } from './constant' +const TOKEN_EXPIRY_BUFFER_SECONDS = 60 +const tokenCache = new Map() + +function getTokenExpiry(token: string): number { + try { + const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64url').toString('utf-8')) + return typeof payload.exp === 'number' ? payload.exp : 0 + } catch { + return 0 + } +} + +function getCachedToken(clientId: string): string | null { + const cached = tokenCache.get(clientId) + if (!cached) return null + const nowSeconds = Math.floor(Date.now() / 1000) + if (nowSeconds < cached.expiresAt - TOKEN_EXPIRY_BUFFER_SECONDS) { + return cached.token + } + tokenCache.delete(clientId) + return null +} + export function objectToJson(result: T) { const serialized = JsonTransformer.serialize(result) return JsonEncoder.fromString(serialized) @@ -24,3 +52,271 @@ export async function generateSecretKey(length: number = 32): Promise { return secretKey } + +export function getCertificateValidityForSystem(IsRootCA = false) { + let options: { validityYears?: number; startFromCurrentMonth?: boolean } + if (IsRootCA) { + options = { + validityYears: parseInt(process.env.ROOT_CA_VALIDITY_YEARS ?? '3'), + startFromCurrentMonth: (process.env.ROOT_CA_START_FROM_CURRENT_MONTH ?? 'true') === 'true' ? true : false, + } + } else { + options = { + validityYears: parseInt(process.env.DCS_VALIDITY_YEARS ?? '3'), + startFromCurrentMonth: (process.env.DCS_START_FROM_CURRENT_MONTH ?? 'true') === 'true' ? true : false, + } + } + + return getCertificateValidity(options) +} + +export function getCertificateValidity(options?: { validityYears?: number; startFromCurrentMonth?: boolean }) { + const { validityYears = 3, startFromCurrentMonth = false } = options || {} + + const now = new Date() + + const startYear = now.getUTCFullYear() + const startMonth = startFromCurrentMonth ? now.getUTCMonth() : 0 // 0 = January + const startDay = now.getUTCDate() + + const notBefore = new Date(Date.UTC(startYear, startMonth, startDay, 0, 0, 0)) + const notAfter = new Date(Date.UTC(startYear + validityYears, startMonth, startDay, 0, 0, 0)) + + return { notBefore, notAfter } +} + +function normalizeToCurve(input: Curve | KeyAlgorithm): Curve | undefined { + // Already a Curve + if (input in curveToKty) { + return input as Curve + } + + // Try mapping from KeyAlgorithm + return keyAlgorithmToCurve[input as KeyAlgorithm] +} + +export function getTypeFromCurve(key: Curve | KeyAlgorithm): OkpType | EcType { + let keyTypeInfo: OkpType | EcType + const normalizedCurve = normalizeToCurve(key) + if (normalizedCurve && curveToKty[normalizedCurve] === 'OKP') { + keyTypeInfo = { + kty: 'OKP', + crv: normalizedCurve as OkpCurve, + } + } else if (normalizedCurve && curveToKty[normalizedCurve] === 'EC') { + keyTypeInfo = { + kty: 'EC', + crv: normalizedCurve as EcCurve, + } + } else { + keyTypeInfo = { + kty: 'EC', + crv: 'P-256', + } + } + return keyTypeInfo +} + +export function getVerificationMethod(didDocument: DidDocument): VerificationMethod | undefined { + // Try assertionMethod first + const assertionMethod = didDocument.assertionMethod?.[0] + if (assertionMethod) { + if (typeof assertionMethod === 'string') { + return didDocument.dereferenceVerificationMethod(assertionMethod) + } + return assertionMethod as VerificationMethod + } + // Fallback to verificationMethod[0] + return didDocument.verificationMethod?.[0] +} + +export function getAlgFromVerificationMethod(vm: VerificationMethod): string { + if (vm.type === 'Ed25519VerificationKey2018' || vm.type === 'Ed25519VerificationKey2020') { + return 'EdDSA' + } + + if (vm.type === 'JsonWebKey2020' || vm.type === 'JsonWebKey2024') { + const jwk = vm.publicKeyJwk as any + if (jwk?.crv === 'P-256') return 'ES256' + if (jwk?.crv === 'P-384') return 'ES384' + if (jwk?.crv === 'P-521') return 'ES512' + if (jwk?.crv === 'secp256k1') return 'ES256K' + } + + if (vm.type === 'EcdsaSecp256k1VerificationKey2019') { + return 'ES256K' + } + + return 'EdDSA' +} + +export async function fetchWithTimeout(resource: string, options: any = {}) { + const { timeout = 10000, ...fetchOptions } = options + const controller = new AbortController() + const id = setTimeout(() => controller.abort(), timeout) + + try { + const response = await fetch(resource, { + ...fetchOptions, + signal: controller.signal, + }) + return response + } catch (error: any) { + if (error.name === 'AbortError') { + throw new Error(`Request timed out after ${timeout}ms`) + } + throw error + } finally { + clearTimeout(id) + } +} + +type Namespaces = Record + +export function processIsoImages(namespaces: Namespaces): Namespaces { + const IMAGE_FIELDS = ['portrait', 'enrolment_portrait_image'] + + for (const [nsKey, nsValue] of Object.entries(namespaces)) { + if (!nsKey.includes('org.iso.18013.5') && !nsKey.includes('org.iso.23220')) continue + + for (const field of IMAGE_FIELDS) { + const value = nsValue[field] + + if (value && typeof value === 'string') { + nsValue[field] = safeBase64DataUrlToUint8Array(value) + } + } + } + + return namespaces +} + +function safeBase64DataUrlToUint8Array(dataUrl: string): Uint8Array | string { + try { + if (typeof dataUrl !== 'string') return dataUrl + + // Must contain base64 data + if (!dataUrl.includes('base64,')) return dataUrl + + const parts = dataUrl.split(',') + if (parts.length < 2) return dataUrl + + const base64 = parts[1] + + // Node.js safe decode (will throw if invalid) + const buffer = Buffer.from(base64, 'base64') + + // Extra validation: ensure it decoded something meaningful + if (!buffer || buffer.length === 0) { + return dataUrl + } + + return new Uint8Array(buffer) + } catch (err) { + // fallback → keep original string + return dataUrl + } +} + +async function fetchPlatformToken( + tokenUrl: string, + clientId: string, + clientSecret: string, + label: string, +): Promise { + if (!tokenUrl) throw new Error(`[${label}] tokenUrl is required`) + if (!clientId) throw new Error(`[${label}] clientId is required`) + if (!clientSecret) throw new Error(`[${label}] clientSecret is required`) + + const cachedToken = getCachedToken(clientId) + if (cachedToken) { + return cachedToken + } + + let tokenResponse + try { + tokenResponse = await axios.post( + tokenUrl, + { clientId, clientSecret }, + { headers: { 'Content-Type': 'application/json', accept: 'application/json' } }, + ) + } catch (error) { + if (axios.isAxiosError(error)) { + throw new Error( + `[${label}] platform token request failed with status ${error.response?.status ?? 'no response'}: ${JSON.stringify(error.response?.data ?? error.message)}`, + ) + } + throw error + } + + const token: string = tokenResponse.data?.data?.access_token + if (!token) { + throw new Error(`[${label}] access_token not found in platform response`) + } + + const expiresAt = getTokenExpiry(token) + tokenCache.set(clientId, { token, expiresAt }) + + return token +} + +async function checkTrustCertificatesExist( + trustServiceUrl: string, + x509: string[], + label: string, + tenantId?: string, + token?: string, +): Promise { + const matchUrl = trustServiceUrl + + const authHeaders = token ? { Authorization: `Bearer ${token}` } : {} + + try { + const matchResponse = await axios.post<{ matched: boolean }>( + matchUrl, + { x509, ...(tenantId && { tenantId }) }, + { headers: { 'Content-Type': 'application/json', accept: 'application/json', ...authHeaders } }, + ) + + return matchResponse.data?.matched === true + } catch (error) { + if (axios.isAxiosError(error)) { + throw new Error( + `[${label}] trust-service match request failed with status ${error.response?.status ?? 'no response'}: ${JSON.stringify(error.response?.data ?? error.message)}`, + ) + } + throw error + } +} + +export async function checkX509Certificates( + x509Certificates: string[], + isDedicated: boolean, + tenantId?: string, +): Promise { + const label = 'checkX509Certificates' + + if (!x509Certificates || x509Certificates.length === 0) { + throw new Error(`[${label}] certificate chain is required but was not provided`) + } + + const tokenUrl = process.env[TRUST_SERVICE_ENV_KEYS.TOKEN_URL] + const clientId = process.env[TRUST_SERVICE_ENV_KEYS.CLIENT_ID] + const clientSecret = process.env[TRUST_SERVICE_ENV_KEYS.CLIENT_SECRET] + const trustListUrl = process.env[TRUST_SERVICE_ENV_KEYS.TRUST_LIST_URL] + + if (!tokenUrl) throw new Error(`[${label}] ${TRUST_SERVICE_ENV_KEYS.TOKEN_URL} is not configured`) + if (!clientId) throw new Error(`[${label}] ${TRUST_SERVICE_ENV_KEYS.CLIENT_ID} is not configured`) + if (!clientSecret) throw new Error(`[${label}] ${TRUST_SERVICE_ENV_KEYS.CLIENT_SECRET} is not configured`) + if (!trustListUrl) throw new Error(`[${label}] ${TRUST_SERVICE_ENV_KEYS.TRUST_LIST_URL} is not configured`) + + let resolvedTenantId: string | undefined + if (!isDedicated) { + resolvedTenantId = tenantId + if (!resolvedTenantId) throw new Error(`[${label}] tenantId is required for shared agent but was not provided`) + } + + const token = await fetchPlatformToken(tokenUrl, clientId, clientSecret, label) + + return checkTrustCertificatesExist(trustListUrl, x509Certificates, label, resolvedTenantId, token) +} diff --git a/src/utils/oid4vc-agent.ts b/src/utils/oid4vc-agent.ts new file mode 100644 index 00000000..e8de5aee --- /dev/null +++ b/src/utils/oid4vc-agent.ts @@ -0,0 +1,335 @@ +import type { DisclosureFrame } from '../controllers/types' +import type { SdJwtVcHolderBinding } from '@credo-ts/core' +import type { + OpenId4VcCredentialHolderBinding, + OpenId4VcCredentialHolderDidBinding, + OpenId4VciCredentialRequestToCredentialMapper, + OpenId4VciSignMdocCredentials, + OpenId4VciSignSdJwtCredentials, +} from '@credo-ts/openid4vc' + +import { + Agent, + ClaimFormat, + CredoError, + DidsApi, + LogLevel, + X509Certificate, + X509ModuleConfig, + X509Service, +} from '@credo-ts/core' +import { OpenId4VciCredentialFormatProfile } from '@credo-ts/openid4vc' +import { container } from 'tsyringe' + +import { SignerMethod } from '../enums/enum' + +import { validateAuthConfig } from './auth' +import { checkX509Certificates, processIsoImages } from './helpers' +import { TsLogger } from './logger' + +const logger = new TsLogger(LogLevel.info) + +export function getMixedCredentialRequestToCredentialMapper(): OpenId4VciCredentialRequestToCredentialMapper { + return async ({ + holderBinding, + issuanceSession, + credentialConfigurationId, + credentialConfiguration, + agentContext, + authorization, + }) => { + const issuanceMetadata = issuanceSession.issuanceMetadata + if (!issuanceMetadata?.['credentials']) throw new Error('credential payload is not provided') + + const allCredentialPayload = issuanceMetadata?.['credentials'] + + // Returns an array of all matching credentials + const credentialPayload = Array.isArray(allCredentialPayload) + ? allCredentialPayload.filter( + (c: Record) => c.credentialSupportedId === credentialConfigurationId, + ) + : [] + if (credentialPayload.length === 0) { + throw new Error(`No credential payload found for credentialConfigurationId: ${credentialConfigurationId}`) + } + const credential = credentialPayload[0] + let issuerDidVerificationMethod: string | undefined = '' + let issuerx509certificate: string[] | undefined + + if (credential.signerOptions.method === SignerMethod.Did) { + if (credential.signerOptions.did) { + const didsApi = agentContext.dependencyManager.resolve(DidsApi) + const didDocument = await didsApi.resolveDidDocument(credential.signerOptions.did) + // Set the first verificationMethod as backup, in case we won't find a match + if (didDocument.verificationMethod?.[0].id) { + issuerDidVerificationMethod = didDocument.verificationMethod?.[0].id + } + + if (!issuerDidVerificationMethod) { + throw new Error('DID must be provided when using Did as signer method') + } + } + } else if (credential.signerOptions.method === SignerMethod.X5c) { + if (credential.signerOptions.x5c) { + issuerx509certificate = credential.signerOptions.x5c // as string[] | undefined; + + if (!issuerx509certificate) { + throw new Error('x509certificate must be provided when using x5c as signer method') + } + } + } + + if (credentialConfigurationId === 'PresentationAuthorization') { + const trustedCertificates = agentContext.dependencyManager.resolve(X509ModuleConfig).trustedCertificates + if (trustedCertificates?.length !== 1) { + throw new Error(`Expected exactly one trusted certificate. Received ${trustedCertificates?.length}.`) + } + + return { + format: ClaimFormat.SdJwtDc, + credentials: [ + { + payload: { + vct: credentialConfiguration.vct as string, + authorized_user: authorization.accessToken.payload.sub, + }, + holder: { + method: 'jwk', + jwk: holderBinding.keys[0].jwk, + } as SdJwtVcHolderBinding, + issuer: { + method: 'x5c', + x5c: trustedCertificates.map((cert) => X509Certificate.fromEncodedCertificate(cert)), + issuer: 'ISSUER_HOST', + }, + }, + ], + type: 'credentials', + } satisfies OpenId4VciSignSdJwtCredentials + } + + if (credentialConfiguration.format === OpenId4VciCredentialFormatProfile.MsoMdoc) { + if (!issuerx509certificate) + throw new Error( + `issuerx509certificate is not provided for credential type ${OpenId4VciCredentialFormatProfile.MsoMdoc}`, + ) + + if (!credentialConfiguration.doctype) { + throw new Error(`'doctype' not found in credential configuration,`) + } + + const parsedCertificate = X509Service.parseCertificate(agentContext, { + encodedCertificate: issuerx509certificate[0], + }) + + parsedCertificate.publicJwk.keyId = credential.signerOptions.keyId + const updatedNamespaces = processIsoImages(credential.payload.namespaces) + credential.payload.namespaces = updatedNamespaces + return { + type: 'credentials', + format: ClaimFormat.MsoMdoc, + credentials: holderBinding.keys.map((holderBindingDetails) => ({ + issuerCertificate: parsedCertificate, + holderKey: holderBindingDetails.jwk, + ...credential.payload, + validityInfo: { + ...credential.payload.validityInfo, + validFrom: new Date(credential.payload.validityInfo.validFrom), + validUntil: new Date(credential.payload.validityInfo.validUntil), + }, + docType: credentialConfiguration.doctype, + })), + } satisfies OpenId4VciSignMdocCredentials + } + if (credentialConfiguration.format === OpenId4VciCredentialFormatProfile.SdJwtDc) { + const disclosureFramePayload = + credential.disclosureFrame && Object.keys(credential.disclosureFrame).length > 0 + ? credential.disclosureFrame + : {} + //Taking leaf certifcate from chain as issuer certificate, if not provided explicitly taking AGENT_HTTP_URL as issuer + let parsedCertificate: any + if (!issuerDidVerificationMethod && issuerx509certificate && issuerx509certificate.length > 0) { + parsedCertificate = X509Service.parseCertificate(agentContext, { + encodedCertificate: issuerx509certificate[0], + }) + parsedCertificate.publicJwk.keyId = credential.signerOptions.keyId + } else if (!issuerDidVerificationMethod) { + throw new Error(`issuerx509certificate is not provided for credential ${credentialConfigurationId}`) + } + return { + format: ClaimFormat.SdJwtDc, + credentials: holderBinding.keys.map((binding) => ({ + payload: credentialPayload[0]?.payload, + holder: + binding.method === 'did' + ? ({ + method: 'did' as const, + didUrl: binding.didUrl, + } as SdJwtVcHolderBinding) + : ({ + method: 'jwk' as const, + jwk: binding.method === 'jwk' ? binding.jwk : {}, + } as SdJwtVcHolderBinding), + issuer: issuerDidVerificationMethod + ? { + method: 'did', + didUrl: issuerDidVerificationMethod, + } + : { + method: 'x5c', + x5c: [parsedCertificate], + }, + disclosureFrame: disclosureFramePayload, + })), + type: 'credentials', + } satisfies OpenId4VciSignSdJwtCredentials + } + + throw new Error('Invalid request') + } +} + +function assertDidBasedHolderBinding( + holderBinding: OpenId4VcCredentialHolderBinding, +): asserts holderBinding is OpenId4VcCredentialHolderDidBinding { + if (holderBinding.method !== 'did') { + throw new CredoError('Only did based holder bindings supported for this credential type') + } +} +export interface OpenId4VcIssuanceSessionCreateOfferSdJwtCredentialOptions { + /** + * The id of the `credential_supported` entry that is present in the issuer + * metadata. This id is used to identify the credential that is being offered. + * + * @example "ExampleCredentialSdJwtVc" + */ + credentialSupportedId: string + + /** + * The format of the credential that is being offered. + * MUST match the format of the `credential_supported` entry. + * + * @example {@link OpenId4VciCredentialFormatProfile.SdJwtVc} + */ + format: OpenId4VciCredentialFormatProfile + + /** + * The payload of the credential that will be issued. + * + * If `vct` claim is included, it MUST match the `vct` claim from the issuer metadata. + * If `vct` claim is not included, it will be added automatically. + * + * @example + * { + * "first_name": "John", + * "last_name": "Doe", + * "age": { + * "over_18": true, + * "over_21": true, + * "over_65": false + * } + * } + */ + payload: { + vct?: string + [key: string]: unknown + } + + /** + * Disclosure frame indicating which fields of the credential can be selectively disclosed. + * + * @example + * { + * "first_name": false, + * "last_name": false, + * "age": { + * "over_18": true, + * "over_21": true, + * "over_65": true + * } + * } + */ + disclosureFrame: DisclosureFrame +} + +async function verifyX509CertificateTrust( + certificateChain: X509Certificate[], + isDedicated: boolean, + tenantId?: string, +): Promise { + const x509Certificates = certificateChain.map((cert) => cert.toString('base64')) + return checkX509Certificates(x509Certificates, isDedicated, tenantId) +} + +export async function getTrustedCerts(params: { + certificateChain: X509Certificate[] + tenantId?: string +}): Promise { + const { tenantId, certificateChain } = params + + const agent = container.resolve(Agent) + if (!agent) { + throw new Error('[getTrustedCerts] agent not available in container') + } + + if (certificateChain.length === 0) { + throw new Error('[getTrustedCerts] certificate chain is required but was not provided') + } + + const isDedicated = !('tenants' in agent.modules) + logger.info(`[getTrustedCerts] agent type: ${isDedicated ? 'dedicated' : 'shared'}`) + + if (!isDedicated && !tenantId) { + throw new Error('[getTrustedCerts] tenantId is required for shared agents') + } + + const isTrusted = await verifyX509CertificateTrust(certificateChain, isDedicated, tenantId) + if (!isTrusted) { + logger.warn(`[getTrustedCerts] certificate chain not trusted${isDedicated ? '' : ` for tenantId: ${tenantId}`}`) + } + + return isTrusted +} + +/** + * ClientAuth flow: verifies the certificate chain against the trust-service using a platform token. + * Returns the PEM certs if trusted, empty array if not. + */ +export async function getX509CertsByClientToken( + tenantId: string, + certificateChain: X509Certificate[], +): Promise { + const isTrusted = await getTrustedCerts({ certificateChain, tenantId }) + + if (!isTrusted) { + logger.warn(`[getX509CertsByClientToken] certificate chain not trusted for tenantId: ${tenantId}`) + return [] + } + + return certificateChain.map((cert) => cert.toString('pem')) +} + +export async function getX509CertsByUrl(): Promise { + const trustListUrl = process.env.TRUST_LIST_URL + if (!trustListUrl) throw new Error('[getX509CertsByUrl] TRUST_LIST_URL is not configured') + + logger.info(`[getX509CertsByUrl] fetching trust list from: ${trustListUrl}`) + + const response = await fetch(trustListUrl) + + if (!response.ok) { + throw new Error(`[getX509CertsByUrl] failed to fetch trust list: HTTP ${response.status}`) + } + + const data = await response.json() + + if (!Array.isArray(data) || data.length === 0) { + throw new Error('[getX509CertsByUrl] trust list is empty or invalid') + } + + logger.info(`[getX509CertsByUrl] fetched certificates count: ${data.length}`) + + return data as string[] +} + +export { validateAuthConfig } diff --git a/src/utils/statusListService.ts b/src/utils/statusListService.ts new file mode 100644 index 00000000..fbe0d498 --- /dev/null +++ b/src/utils/statusListService.ts @@ -0,0 +1,191 @@ +import type { Agent, JwsProtectedHeaderOptions, VerificationMethod } from '@credo-ts/core' + +import { JwsService, JwtPayload } from '@credo-ts/core' +import { StatusList, getListFromStatusListJWT } from '@sd-jwt/jwt-status-list' + +import { STATUS_LISTS_PATH } from './constant' +import { getAlgFromVerificationMethod, getVerificationMethod, fetchWithTimeout } from './helpers' + +const statusListLocks = new Map>() + +export function getServerUrl() { + const url = process.env.STATUS_LIST_SERVER_URL + if (!url) { + throw new Error('STATUS_LIST_SERVER_URL is not configured') + } + return url.endsWith('/') ? url.slice(0, -1) : url +} + +function getApiKeyHeaders() { + const key = process.env.STATUS_LIST_API_KEY + if (!key) { + throw new Error('STATUS_LIST_API_KEY is not configured') + } + const headers: Record = { 'Content-Type': 'application/json' } + headers['x-api-key'] = key + return headers +} + +async function getKmsKeyIdForDid(agent: Agent, did: string, verificationMethodId: string) { + const didRecords = await agent.dids.getCreatedDids({ did }) + const didRecord = didRecords[0] + if (didRecord && didRecord.keys) { + const relativeId = verificationMethodId.includes('#') ? verificationMethodId.split('#')[1] : verificationMethodId + const keyMap = didRecord.keys.find( + (k: any) => k.didDocumentRelativeKeyId === `#${relativeId}` || k.didDocumentRelativeKeyId === relativeId, + ) + if (keyMap) { + return keyMap.kmsKeyId + } + } + return verificationMethodId +} + +async function signStatusList( + agent: Agent, + verificationMethod: VerificationMethod, + statusList: StatusList, + listId: string, + issuerDid: string, +): Promise { + const payload = new JwtPayload({ + iss: issuerDid, + sub: `${getServerUrl()}/${STATUS_LISTS_PATH}/${listId}`, + iat: Math.floor(Date.now() / 1000), + additionalClaims: { + status_list: { + bits: statusList.getBitsPerStatus(), + lst: statusList.compressStatusList(), + }, + }, + }) + + const alg = getAlgFromVerificationMethod(verificationMethod) + const jwsService = agent.dependencyManager.resolve(JwsService) + const kmsKeyId = await getKmsKeyIdForDid(agent, issuerDid, verificationMethod.id) + + const header: JwsProtectedHeaderOptions = { + alg: alg as any, + typ: 'statuslist+jwt', + kid: verificationMethod.id, + } + + return jwsService.createJwsCompact(agent.context, { + keyId: kmsKeyId, + payload, + protectedHeaderOptions: header, + }) +} + +export async function checkAndCreateStatusList(agent: Agent, listId: string, issuerDid: string, listSize?: number) { + const previousLock = statusListLocks.get(listId) || Promise.resolve() + + let releaseLock: () => void + const currentLock = new Promise((resolve) => { + releaseLock = resolve + }) + + statusListLocks.set(listId, currentLock) + + try { + await previousLock + + const uri = `${getServerUrl()}/${STATUS_LISTS_PATH}/${listId}` + + const res = await fetchWithTimeout(uri, { + headers: getApiKeyHeaders(), + }) + + if (res.status === 404) { + const size = listSize || Number(process.env.STATUS_LIST_DEFAULT_SIZE) + if (!size || !Number.isInteger(size) || size <= 0) { + throw new Error( + `[checkAndCreateStatusList] invalid status list size: ${size}. Set STATUS_LIST_DEFAULT_SIZE to a positive integer.`, + ) + } + const statusList = new StatusList(new Array(size).fill(0), 1) + + const didDocument = await agent.dids.resolve(issuerDid) + const verificationMethod = didDocument.didDocument ? getVerificationMethod(didDocument.didDocument) : undefined + + if (!verificationMethod) { + throw new Error(`Could not find suitable verification method (assertionMethod) for DID ${issuerDid}`) + } + + const jwt = await signStatusList(agent, verificationMethod, statusList, listId, issuerDid) + const postRes = await fetchWithTimeout(`${getServerUrl()}/${STATUS_LISTS_PATH}`, { + method: 'POST', + headers: getApiKeyHeaders(), + body: JSON.stringify({ id: listId, jwt }), + }) + + if (!postRes.ok && postRes.status !== 409) { + const errBody = await postRes.text() + throw new Error(`Failed to create list on server: ${postRes.status} ${errBody}`) + } + } else if (!res.ok) { + const errBody = await res.text().catch(() => '') + throw new Error(`Failed to check status list ${listId} at ${uri}: ${res.status} ${res.statusText} ${errBody}`) + } + } catch (error) { + throw error + } finally { + releaseLock!() + if (statusListLocks.get(listId) === currentLock) { + statusListLocks.delete(listId) + } + } +} + +export async function revokeCredentialInStatusList(agent: Agent, listId: string, index: number, issuerDid: string) { + const previousLock = statusListLocks.get(listId) || Promise.resolve() + + let releaseLock: () => void + const currentLock = new Promise((resolve) => { + releaseLock = resolve + }) + + statusListLocks.set(listId, currentLock) + + try { + await previousLock + + const uri = `${getServerUrl()}/${STATUS_LISTS_PATH}/${listId}` + + const res = await fetchWithTimeout(uri, { + headers: getApiKeyHeaders(), + }) + if (!res.ok) { + const errBody = await res.text().catch(() => '') + throw new Error(`Failed to fetch status list to revoke at ${uri}: ${res.status} ${res.statusText} ${errBody}`) + } + + const currentJwt = await res.text() + const statusList = getListFromStatusListJWT(currentJwt) + + statusList.setStatus(index, 1) + + const didDocument = await agent.dids.resolve(issuerDid) + const verificationMethod = didDocument.didDocument ? getVerificationMethod(didDocument.didDocument) : undefined + if (!verificationMethod) + throw new Error(`Could not find suitable verification method (assertionMethod) for DID ${issuerDid}`) + + const newJwt = await signStatusList(agent, verificationMethod, statusList, listId, issuerDid) + + const patchRes = await fetchWithTimeout(`${getServerUrl()}/${STATUS_LISTS_PATH}/${listId}`, { + method: 'PATCH', + headers: getApiKeyHeaders(), + body: JSON.stringify({ jwt: newJwt }), + }) + + if (!patchRes.ok) { + const errBody = await patchRes.text() + throw new Error(`Failed to update status list on server: ${patchRes.status} ${errBody}`) + } + } finally { + releaseLock!() + if (statusListLocks.get(listId) === currentLock) { + statusListLocks.delete(listId) + } + } +} diff --git a/trusted-certs.json b/trusted-certs.json new file mode 100644 index 00000000..e69de29b diff --git a/tsconfig.build.json b/tsconfig.build.json index 9543ae73..f8eeb955 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -14,7 +14,7 @@ "skipLibCheck": true, "outDir": "./build", "types": ["node"], - "lib": ["ES2021.Promise"] + "lib": ["ESNext"] }, "include": ["src/**/*", "src/routes"], "exclude": [ diff --git a/tsoa.json b/tsoa.json index 92e95bd7..e4715fb3 100644 --- a/tsoa.json +++ b/tsoa.json @@ -5,6 +5,7 @@ "spec": { "outputDirectory": "src/routes", "specVersion": 3, + "tsconfig": "tsconfig.build.json", "securityDefinitions": { "apiKey": { "type": "apiKey", @@ -20,6 +21,7 @@ }, "routes": { "routesDir": "./src/routes", + "tsconfig": "tsconfig.build.json", "iocModule": "./src/utils/tsyringeTsoaIocContainer", "authenticationModule": "src/authentication" } diff --git a/yarn.lock b/yarn.lock index 37da031c..095114a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,32 +29,25 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@animo-id/mdoc@0.2.38": - version "0.2.38" - resolved "https://registry.yarnpkg.com/@animo-id/mdoc/-/mdoc-0.2.38.tgz#e708a0df5eba3491b4c8e858d53ba9504f6ae472" - integrity sha512-98KQ0jvwTYsFOffTGvvHXBDo23b5xmhYjPiMIX6e807I6iS4fZZ9ypfBySdA5IiGUvXELKqEv27AUaayQa/9bg== +"@animo-id/mdoc@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@animo-id/mdoc/-/mdoc-0.5.2.tgz#77c4ac564925126f3dac9a989be888ad9e38afa1" + integrity sha512-EQVsNOOeXFfBaEHkiKoh24jbSEQ1MORB/kUu0rnNrAEETpY5GK/H9iWevYFdmNDIqQTIEJlkU7S+sIj3pe66eA== dependencies: compare-versions "^6.1.1" -"@animo-id/pex@4.1.1-alpha.0": - version "4.1.1-alpha.0" - resolved "https://registry.yarnpkg.com/@animo-id/pex/-/pex-4.1.1-alpha.0.tgz#037665dd143315e9b18380647d6eb8511a65807e" - integrity sha512-6ieHhH9UE9DLFOJegMCabG3qUFlQk4TLhBefxInpyjx2Ly6kuloVMScJYcnQTs/E6nuHGMd7ebUaKy4+0+ZbOA== +"@animo-id/pex@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@animo-id/pex/-/pex-6.1.1.tgz#a09b12afebbb58eb35b6957c45b9c268590f2c9a" + integrity sha512-my3g9Divea1sseZRzgD2tnrv0ett9fTlyoZp1x9nSjyRwtai/BBnFQigknMFscJuG6vnwYNcaj6TFQprw+v5xw== dependencies: + "@animo-id/mdoc" "^0.5.2" "@astronautlabs/jsonpath" "^1.1.2" "@sd-jwt/decode" "^0.7.2" "@sd-jwt/present" "^0.7.2" "@sd-jwt/types" "^0.7.2" - "@sphereon/pex-models" "^2.3.1" - "@sphereon/ssi-types" "0.30.2-next.135" + "@sphereon/pex-models" "^2.3.2" + "@sphereon/ssi-types" "0.33.0" ajv "^8.12.0" ajv-formats "^2.1.1" jwt-decode "^3.1.2" @@ -68,62 +61,60 @@ dependencies: static-eval "2.0.2" -"@ayanworks/credo-polygon-w3c-module@1.0.1-alpha.1": - version "1.0.1-alpha.1" - resolved "https://registry.yarnpkg.com/@ayanworks/credo-polygon-w3c-module/-/credo-polygon-w3c-module-1.0.1-alpha.1.tgz#ddbc5135c9010cf1de15a7aef0bacaba49bc55fa" - integrity sha512-H2WDwcdtHG5aCzcFu4j/2zOTtU9mrM6xSGjK7JIuwJbCAOY7/dhSCAWEG2myBZDkNccOeC9NjMdDRDJfqORJNA== - dependencies: - "@ayanworks/polygon-did-registrar" "1.0.0" - "@ayanworks/polygon-did-resolver" "1.0.0" - "@ayanworks/polygon-schema-manager" "1.0.1-alpha.1" - "@credo-ts/askar" "0.5.3" - "@credo-ts/core" "0.5.3" +"@ayanworks/credo-polygon-w3c-module@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@ayanworks/credo-polygon-w3c-module/-/credo-polygon-w3c-module-2.0.2.tgz#5d52bbbc8ecb990d19056c7eec69aa31b1f4a477" + integrity sha512-RtXl06kGy7w8axH60Wqj402rH748S9KottDVEwkXhSb9OrXMYy30vrNLercy25+NeGd8lpK5g1oscpLPW70Zzg== + dependencies: + "@ayanworks/polygon-did-registrar" "2.2.1" + "@ayanworks/polygon-did-resolver" "1.0.3" + "@ayanworks/polygon-schema-manager" "2.2.1" + "@credo-ts/askar" "^0.6.1" + "@credo-ts/core" "^0.6.1" did-resolver "^4.1.0" - ethers "^6.9.0" + ethers "^6.16.0" -"@ayanworks/polygon-did-registrar@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@ayanworks/polygon-did-registrar/-/polygon-did-registrar-1.0.0.tgz#6704a51b154e12c9484c90581a1c9dc41e01dcd3" - integrity sha512-pK6WELi9avhxFk7BGioMFu9U/VL6GLvW6n18QFq8G4EMPMWsAvTfiiqUadTVWU8nuHSOrgpBBW8kN5DPWwJPFg== - dependencies: - "@ayanworks/polygon-did-registry-contract" "3.0.0" - "@ayanworks/polygon-did-resolver" "1.0.0" - "@credo-ts/core" "0.5.3" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wallet" "^5.7.0" +"@ayanworks/polygon-did-registrar@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ayanworks/polygon-did-registrar/-/polygon-did-registrar-2.2.1.tgz#131824f34baeedb93989a9e3f65b69a2c022144c" + integrity sha512-lpDe3p0tcPB4eOKCQGtl67PxK8MjR1CGRKOn4qGwySRxH9hBJq8AF0l+Lbi9Zisqnm3eo8nv/EiBLnwpsdwAdA== + dependencies: + "@ayanworks/polygon-did-registry-contract" "4.0.1" + "@ayanworks/polygon-did-resolver" "1.0.3" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wallet" "^5.8.0" did-resolver "^4.1.0" - ethers "^6.9.0" - uuid "^9.0.1" + ethers "^6.16.0" + uuid "^13.0.0" -"@ayanworks/polygon-did-registry-contract@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@ayanworks/polygon-did-registry-contract/-/polygon-did-registry-contract-3.0.0.tgz#52b18768b887e933d44a9713b33dc2efbb1dcf53" - integrity sha512-RnW31nkDIMG1YzuOycxGGrJFpgTcpBwS/UZR6/wMPrsJBKBEN28k2CZImwXkbgaknyTfL7xe1u3C8NxfDvhI4Q== +"@ayanworks/polygon-did-registry-contract@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ayanworks/polygon-did-registry-contract/-/polygon-did-registry-contract-4.0.1.tgz#104ca2cec0f88cf616529ba11099d47d653958d9" + integrity sha512-gBUtZOme6PIhLWE2hwJ006jNKm2fbYTaFKyR7uazgDrJUGNCZ+w9VM2ETByzVWBGuWyANWUJyoJm50GfGp+5wg== -"@ayanworks/polygon-did-resolver@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@ayanworks/polygon-did-resolver/-/polygon-did-resolver-1.0.0.tgz#4d267004a509fad9a75bb18c6f449f6c51e1f198" - integrity sha512-mzYh3XNQ4HJ0GakP1QD7UOW8PjMAhdtu/TXzeOqMtHLhWktFMQcgJuqNMNxMGbJFdIe12qFJROlle6p1BjF01g== +"@ayanworks/polygon-did-resolver@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@ayanworks/polygon-did-resolver/-/polygon-did-resolver-1.0.3.tgz#f0c0ef86b04194234096c79b3abe6631ce08d128" + integrity sha512-ZkiWFNxJRvMJhw6oJAhbCXiLLV4ntroE/lVve+ZBQM9U1XHEAORWZfjEJZpfWwhAIQu7gQgaR80hIuucZ0wuWw== dependencies: - "@ayanworks/polygon-did-registry-contract" "3.0.0" + "@ayanworks/polygon-did-registry-contract" "4.0.1" did-resolver "^4.1.0" - ethers "^5.1.0" + ethers "^6.16.0" -"@ayanworks/polygon-schema-manager@1.0.1-alpha.1": - version "1.0.1-alpha.1" - resolved "https://registry.yarnpkg.com/@ayanworks/polygon-schema-manager/-/polygon-schema-manager-1.0.1-alpha.1.tgz#97b9d497739753a97c0ad452d6e6276ef7c69c43" - integrity sha512-Qkbp1bQ+PqakUb7jq15dWfQ3usM1SLmFJnNIgzInQICSoLo1wYjYPlRlRtfwsuebNV2V4NeZTLEKKvTetIL/Jg== +"@ayanworks/polygon-schema-manager@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ayanworks/polygon-schema-manager/-/polygon-schema-manager-2.2.1.tgz#22e56f86df36ad117cc86de86b1e0c4ba051f005" + integrity sha512-s75ouYENY46PVSE77+Jl1UVXfmTobuMm0yV+qx/DnHiUT2XgamvFBqh9DzJrKzSjws/dSxmHsVuVlbX0h3uyOQ== dependencies: - "@ayanworks/polygon-did-registry-contract" "3.0.0" - "@ayanworks/polygon-did-resolver" "1.0.0" - "@nomicfoundation/hardhat-verify" "^2.0.3" - axios "^1.6.3" + "@ayanworks/polygon-did-registry-contract" "4.0.1" + "@ayanworks/polygon-did-resolver" "1.0.3" + axios "^1.13.5" did-resolver "^4.1.0" - ethers "^6.9.0" + ethers "^6.16.0" keccak256 "^1.0.6" - uuid "^9.0.1" + uuid "^13.0.0" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.27.1": version "7.27.1" @@ -135,40 +126,40 @@ picocolors "^1.1.1" "@babel/compat-data@^7.27.2": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.3.tgz#cc49c2ac222d69b889bf34c795f537c0c6311111" - integrity sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.14.6", "@babel/core@^7.23.9": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.3.tgz#d7d05502bccede3cab36373ed142e6a1df554c2f" - integrity sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== dependencies: - "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.3" + "@babel/generator" "^7.28.5" "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-module-transforms" "^7.27.3" - "@babel/helpers" "^7.27.3" - "@babel/parser" "^7.27.3" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.27.3" - "@babel/types" "^7.27.3" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.27.3", "@babel/generator@^7.7.2": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.3.tgz#ef1c0f7cfe3b5fc8cbb9f6cc69f93441a68edefc" - integrity sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q== +"@babel/generator@^7.28.5", "@babel/generator@^7.7.2": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== dependencies: - "@babel/parser" "^7.27.3" - "@babel/types" "^7.27.3" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" "@babel/helper-compilation-targets@^7.27.2": @@ -182,6 +173,11 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + "@babel/helper-module-imports@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" @@ -190,16 +186,16 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.27.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02" - integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg== +"@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== dependencies: "@babel/helper-module-imports" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.3" + "@babel/traverse" "^7.28.3" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== @@ -209,38 +205,30 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== "@babel/helper-validator-option@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/helpers@^7.27.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.3.tgz#387d65d279290e22fe7a47a8ffcd2d0c0184edd0" - integrity sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg== +"@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== dependencies: "@babel/template" "^7.27.2" - "@babel/types" "^7.27.3" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.27.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.3.tgz#1b7533f0d908ad2ac545c4d05cbe2fb6dc8cfaaf" - integrity sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw== - dependencies: - "@babel/types" "^7.27.3" + "@babel/types" "^7.28.4" -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/types" "^7.28.5" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -270,13 +258,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-import-attributes@^7.24.7": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" @@ -368,14 +349,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.14.5": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" - integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== - dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/template@^7.27.2", "@babel/template@^7.3.3": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" @@ -385,126 +358,151 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.3.tgz#8b62a6c2d10f9d921ba7339c90074708509cffae" - integrity sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ== +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.3" - "@babel/parser" "^7.27.3" + "@babel/generator" "^7.28.5" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/types" "^7.27.3" + "@babel/types" "^7.28.5" debug "^4.3.1" - globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.3.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.3.tgz#c0257bedf33aad6aad1f406d35c44758321eb3ec" - integrity sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.3.3": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== dependencies: "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@credo-ts/anoncreds@0.5.15": - version "0.5.15" - resolved "https://registry.yarnpkg.com/@credo-ts/anoncreds/-/anoncreds-0.5.15.tgz#38916d94670f480e4f3872deb548fccd4b7ba190" - integrity sha512-b9LkFl/icptDV69QO/DJKfyP7oVuRUlj57xxnMYuJyPnFtfXwkGJr7Fdb62Izi8eZXAOIOtnsXt6P4KEV2cnYA== +"@credo-ts/anoncreds@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@credo-ts/anoncreds/-/anoncreds-0.6.2.tgz#cbde637b6f5f13df5c0c517348eddb8becc9fa48" + integrity sha512-9LwcnkpX4OpuHjFbB3C1NPA1yY6oHhPt7jiYu6mOBaAMCo5qbdam+xMijR0vC1+cnmS5Kf/c14medYlqI03Zxw== dependencies: "@astronautlabs/jsonpath" "^1.1.2" - "@credo-ts/core" "0.5.15" - "@sphereon/pex-models" "^2.3.1" - big-integer "^1.6.51" - bn.js "^5.2.1" + "@credo-ts/core" "0.6.2" + "@credo-ts/didcomm" "0.6.2" + "@sphereon/pex-models" "^2.3.2" class-transformer "0.5.1" - class-validator "0.14.1" - reflect-metadata "^0.1.13" + class-validator "^0.14.3" + reflect-metadata "0.2.2" -"@credo-ts/askar@0.5.15", "@credo-ts/askar@0.5.3": - version "0.5.15" - resolved "https://registry.yarnpkg.com/@credo-ts/askar/-/askar-0.5.15.tgz#0720c55600662232330f9c806b1ce738696a9744" - integrity sha512-eSoiQQEEntTZHsw87BIlafGKash5HAP+34VnVl4T9xKs59KNN7BvpdG6/6lqhS0G8DxeN998KuW4D1CEWh7AhA== +"@credo-ts/askar@0.6.2", "@credo-ts/askar@^0.6.1": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@credo-ts/askar/-/askar-0.6.2.tgz#3d5ea35e9a30f41df9db0134bae1d185aa8e5fda" + integrity sha512-SeAjHBuk+2l5For/0v8vzQuDbBB6TbLRg8AfChKV2phGsKKoIGXtDwZZLicvB+bgtRrR221keL8LrHp9kN3o7Q== dependencies: - "@credo-ts/core" "0.5.15" - bn.js "^5.2.1" + "@credo-ts/core" "0.6.2" class-transformer "0.5.1" - class-validator "0.14.1" - rxjs "^7.8.0" - tsyringe "^4.8.0" + class-validator "^0.14.3" + rxjs "^7.8.2" + tsyringe "^4.10.0" -"@credo-ts/core@0.5.15", "@credo-ts/core@0.5.3": - version "0.5.15" - resolved "https://registry.yarnpkg.com/@credo-ts/core/-/core-0.5.15.tgz#18f9e2f5c42d8cef955c230edad77028a6cd2cd4" - integrity sha512-3BYjncNY1Y6JDtxnbza1WVID8OoPgIZEno3z2F8a11xvsemsZCyy9vpyVgQi/Dz3P6/6JLZ/mnJAUwGKFZPnqA== +"@credo-ts/core@0.6.2", "@credo-ts/core@^0.6.1": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@credo-ts/core/-/core-0.6.2.tgz#7ee8e78ce3fad3d2c60db978623e2b29784b24b7" + integrity sha512-A7yXs6y/73wIvgEHpfriVZW1osuASYhrO/TQIFlwSK/cRTjaXWFgBapzYaJh09O1PuEJ4v1A1mt72uardqCj8g== dependencies: - "@animo-id/mdoc" "0.2.38" - "@animo-id/pex" "4.1.1-alpha.0" + "@animo-id/mdoc" "^0.5.2" + "@animo-id/pex" "^6.1.1" "@astronautlabs/jsonpath" "^1.1.2" - "@digitalcredentials/jsonld" "^6.0.0" - "@digitalcredentials/jsonld-signatures" "^9.4.0" - "@digitalcredentials/vc" "^6.0.1" + "@digitalcredentials/jsonld" "^9.0.0" + "@digitalcredentials/jsonld-signatures" "^12.0.1" + "@digitalcredentials/vc" "^10.0.2" "@multiformats/base-x" "^4.0.1" - "@noble/curves" "^1.6.0" - "@noble/hashes" "^1.5.0" - "@peculiar/asn1-ecc" "^2.3.8" - "@peculiar/asn1-schema" "^2.3.8" - "@peculiar/asn1-x509" "^2.3.8" - "@peculiar/x509" "^1.11.0" - "@sd-jwt/core" "^0.7.0" - "@sd-jwt/decode" "^0.7.0" - "@sd-jwt/jwt-status-list" "^0.7.0" - "@sd-jwt/sd-jwt-vc" "^0.7.0" - "@sd-jwt/types" "^0.7.0" - "@sd-jwt/utils" "^0.7.0" - "@sphereon/pex-models" "^2.3.1" - "@sphereon/ssi-types" "0.30.2-next.135" - "@stablelib/ed25519" "^1.0.2" - "@types/ws" "^8.5.4" - abort-controller "^3.0.0" - big-integer "^1.6.51" - borc "^3.0.0" + "@noble/curves" "^2.0.1" + "@noble/hashes" "^2.0.1" + "@peculiar/asn1-ecc" "^2.6.0" + "@peculiar/asn1-rsa" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + "@peculiar/x509" "^1.14.3" + "@sd-jwt/core" "^0.19.0" + "@sd-jwt/decode" "^0.19.0" + "@sd-jwt/jwt-status-list" "^0.19.0" + "@sd-jwt/present" "^0.19.0" + "@sd-jwt/sd-jwt-vc" "^0.19.0" + "@sd-jwt/types" "^0.19.0" + "@sd-jwt/utils" "^0.19.0" + "@sphereon/pex-models" "^2.3.2" + "@sphereon/ssi-types" "0.33.0" + "@stablelib/ed25519" "^2.0.2" + "@types/ws" "^8.18.1" buffer "^6.0.3" class-transformer "0.5.1" - class-validator "0.14.1" + class-validator "^0.14.3" + dcql "^3.0.0" did-resolver "^4.1.0" + ec-compression "0.0.1-alpha.12" lru_map "^0.4.1" - luxon "^3.5.0" make-error "^1.3.6" - object-inspect "^1.10.3" - query-string "^7.0.1" - reflect-metadata "^0.1.13" - rxjs "^7.8.0" - tsyringe "^4.8.0" - uuid "^9.0.0" + object-inspect "^1.13.4" + reflect-metadata "0.2.2" + rxjs "^7.8.2" + tsyringe "^4.10.0" + uuid "^13.0.0" varint "^6.0.0" - web-did-resolver "^2.0.21" - webcrypto-core "^1.8.0" + web-did-resolver "^2.0.32" + webcrypto-core "^1.8.1" + zod "^4.3.6" -"@credo-ts/indy-vdr@0.5.15": - version "0.5.15" - resolved "https://registry.yarnpkg.com/@credo-ts/indy-vdr/-/indy-vdr-0.5.15.tgz#b65276c59616afa3c582d17fefef6a264b9f6ea8" - integrity sha512-+ZANXK+7WW5fTvRhQCCHevihHwApmk69PniJ8dwdtGAmGZbswpYmZfHFJYExsA8Absk2dOPPzMKMdDQOkwagBw== +"@credo-ts/didcomm@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@credo-ts/didcomm/-/didcomm-0.6.2.tgz#651ecf9039335faa0b8b0286a3598705381fc1e4" + integrity sha512-0cZP753sxzcw11Y3/3B3GY3qYPfw+r/TwqzpOvwiUHDMMdvQOP4yrfqTvI2Ae0fwzfz69ePoMo52tlXYbgAadw== dependencies: - "@credo-ts/anoncreds" "0.5.15" - "@credo-ts/core" "0.5.15" - -"@credo-ts/node@^0.5.15": - version "0.5.15" - resolved "https://registry.yarnpkg.com/@credo-ts/node/-/node-0.5.15.tgz#2514edeb1493c57ad40f3030390c4d788c26cbcf" - integrity sha512-oLGwWGX3TKzZakfps9Dgb7UGJWsFaW7WpQ1n4gIYg54L3Ew0K6e/A1McJ/atOS8RhU3YS2/DVhs8uBY5xqbfuQ== - dependencies: - "@2060.io/ffi-napi" "^4.0.9" - "@2060.io/ref-napi" "^3.0.6" - "@credo-ts/core" "0.5.15" - "@types/express" "^4.17.15" - express "^4.17.1" - rxjs "^7.8.0" - ws "^8.13.0" + "@credo-ts/core" "0.6.2" + class-transformer "0.5.1" + class-validator "^0.14.3" + luxon "^3.7.2" + query-string "^9.3.1" + rxjs "^7.8.2" + +"@credo-ts/indy-vdr@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@credo-ts/indy-vdr/-/indy-vdr-0.6.2.tgz#fecf255070f250981031f83f5aceb5ec64b91257" + integrity sha512-9nvYjs4ys+iC4H04aQodMtHV8aHPEA42oN0ijRew+mYTNOW2lpuyHl4q4HeuUHWwzQjTrKWE6LGkLX/6BKcbCA== + dependencies: + "@credo-ts/anoncreds" "0.6.2" + "@credo-ts/core" "0.6.2" + +"@credo-ts/node@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@credo-ts/node/-/node-0.6.2.tgz#ed6a745d87b218ec1db32f3687af1d1c48b7ff6a" + integrity sha512-bHeQG77qxnh6xqVpJiLlBYgTtj0bVM8jqwrWcbcf1hKia6MldTJjeQ0c28bcW08dVLiQ+Bm0mObYWQQ6sKcwXw== + dependencies: + "@credo-ts/core" "0.6.2" + "@credo-ts/didcomm" "0.6.2" + "@types/express" "^5.0.6" + express "^5.2.1" + rxjs "^7.8.2" + ws "^8.19.0" + +"@credo-ts/openid4vc@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@credo-ts/openid4vc/-/openid4vc-0.6.2.tgz#52e05aad6927e43174fdc097dabc39a7bf0933e5" + integrity sha512-3LAVCdEM3wAMTJmmDi2D5liJTkvhK+rt2kp+Im8zQ0Zn6tcbcSAaPJHZ00+wa8w1oMb2AYFTqAKDZwzw0RfGUQ== + dependencies: + "@credo-ts/core" "0.6.2" + "@openid4vc/oauth2" "^0.4.5" + "@openid4vc/openid4vci" "^0.4.5" + "@openid4vc/openid4vp" "^0.4.5" + "@openid4vc/utils" "^0.4.5" + "@types/express" "^5.0.6" + class-transformer "0.5.1" + express "^5.2.1" + rxjs "^7.8.2" + zod "^4.3.6" "@credo-ts/push-notifications@^0.7.1": version "0.7.1" @@ -515,23 +513,25 @@ class-validator "0.14.1" tsyringe "^4.6.0" -"@credo-ts/question-answer@0.5.15": - version "0.5.15" - resolved "https://registry.yarnpkg.com/@credo-ts/question-answer/-/question-answer-0.5.15.tgz#9906387e7ef470c8cf01149d69fe2a5a1a19bb6d" - integrity sha512-5K2x9HoQXge4l/gnRhZtt3rDGUNtROsZnXE5gHKGpLtzh/X1dH99ukEBTrFJX3k+EcuJe34dh+HtkoEQayVO7A== +"@credo-ts/question-answer@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@credo-ts/question-answer/-/question-answer-0.6.2.tgz#b9d7e7f8074f8eaaeeb549025e7fb01c14a06e75" + integrity sha512-Vq2+9Mj3DNirkgvujAQXJBdjrNI6/PDii97DE1KTgGfriuzKTcVBV8zTRbxvykYU0460ab/FE3zkhJr1zGz6Og== dependencies: - "@credo-ts/core" "0.5.15" + "@credo-ts/core" "0.6.2" + "@credo-ts/didcomm" "0.6.2" class-transformer "0.5.1" - class-validator "0.14.1" - rxjs "^7.8.0" + class-validator "^0.14.3" + rxjs "^7.8.2" -"@credo-ts/tenants@0.5.15": - version "0.5.15" - resolved "https://registry.yarnpkg.com/@credo-ts/tenants/-/tenants-0.5.15.tgz#5e164ab04dc59a1907d98c4c82fd53c6a1b5073d" - integrity sha512-4ikl1Fv1T/3MA6KqqecfMOwSWGOjmz2AoUvuEpWA2Og7MZ+X6n8VnNbPw42Sqlm94zDRdWikfq3R0LuW9M+TwQ== +"@credo-ts/tenants@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@credo-ts/tenants/-/tenants-0.6.2.tgz#8bef564c37c5729bb71e12ea4547a84255ce555f" + integrity sha512-DC1uaoIUwc2OLlpygq2YQZStgHAgLg5dkUir+i4fMcHvK32hUFXg6tMneIyDek7iJpHGGaV6ZAiKJDVxFDWMfg== dependencies: - "@credo-ts/core" "0.5.15" - async-mutex "^0.4.0" + "@credo-ts/core" "0.6.2" + "@credo-ts/didcomm" "0.6.2" + async-mutex "^0.5.0" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -540,237 +540,122 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@digitalbazaar/bitstring@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/bitstring/-/bitstring-3.1.0.tgz#bbbacb80eaaa53594723a801879b3a95a0401b11" - integrity sha512-Cii+Sl++qaexOvv3vchhgZFfSmtHPNIPzGegaq4ffPnflVXFu+V2qrJ17aL2+gfLxrlC/zazZFuAltyKTPq7eg== - dependencies: - base64url-universal "^2.0.0" - pako "^2.0.4" - -"@digitalbazaar/http-client@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@digitalbazaar/http-client/-/http-client-3.4.1.tgz#5116fc44290d647cfe4b615d1f3fad9d6005e44d" - integrity sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g== - dependencies: - ky "^0.33.3" - ky-universal "^0.11.0" - undici "^5.21.2" - "@digitalbazaar/security-context@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@digitalbazaar/security-context/-/security-context-1.0.1.tgz#badc4b8da03411a32d4e7321ce7c4b355776b410" integrity sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA== -"@digitalbazaar/vc-status-list-context@^3.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@digitalbazaar/vc-status-list-context/-/vc-status-list-context-3.1.1.tgz#cbe570d8d6d39d7b636bf1fce3c5601e2d104696" - integrity sha512-cMVtd+EV+4KN2kUG4/vsV74JVsGE6dcpod6zRoFB/AJA2W/sZbJqR44KL3G6P262+GcAECNhtnSsKsTnQ6y8+w== - -"@digitalbazaar/vc-status-list@^7.0.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/vc-status-list/-/vc-status-list-7.1.0.tgz#1d585a1766106e1586e1e2f87092dd0381b3f036" - integrity sha512-p5uxKJlX13N8TcTuv9qFDeej+6bndU+Rh1Cez2MT+bXQE6Jpn5t336FBSHmcECB4yUfZQpkmV/LOcYU4lW8Ojw== - dependencies: - "@digitalbazaar/bitstring" "^3.0.0" - "@digitalbazaar/vc" "^5.0.0" - "@digitalbazaar/vc-status-list-context" "^3.0.1" - credentials-context "^2.0.0" - -"@digitalbazaar/vc@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/vc/-/vc-5.0.0.tgz#20180fb492cb755eb2c6b6df9a17f7407d5e4b5a" - integrity sha512-XmLM7Ag5W+XidGnFuxFIyUFSMnHnWEMJlHei602GG94+WzFJ6Ik8txzPQL8T18egSoiTsd1VekymbIlSimhuaQ== - dependencies: - credentials-context "^2.0.0" - jsonld "^8.0.0" - jsonld-signatures "^11.0.0" - -"@digitalcredentials/base58-universal@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@digitalcredentials/base58-universal/-/base58-universal-1.0.1.tgz#41b5a16cdeaac9cf01b23f1e564c560c2599b607" - integrity sha512-1xKdJnfITMvrF/sCgwBx2C4p7qcNAARyIvrAOZGqIHmBaT/hAenpC8bf44qVY+UIMuCYP23kqpIfJQebQDThDQ== +"@digitalcredentials/credentials-v2-context@^0.0.1-beta.0": + version "0.0.1-beta.0" + resolved "https://registry.yarnpkg.com/@digitalcredentials/credentials-v2-context/-/credentials-v2-context-0.0.1-beta.0.tgz#9892f5342fb11ce47afa19e34a245dd02ea6b90d" + integrity sha512-i0AQXFnMeOqf2uKNBUcnN78mO8L9H91QKMdpDqsgDYzTIKGLnNCOOxbRbrJOimhR+soYO64xn54U8/R7Qx0nyA== -"@digitalcredentials/base64url-universal@^2.0.2": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@digitalcredentials/base64url-universal/-/base64url-universal-2.0.6.tgz#43c59c62a33b024e7adc3c56403d18dbcb61ec61" - integrity sha512-QJyK6xS8BYNnkKLhEAgQc6Tb9DMe+GkHnBAWJKITCxVRXJAFLhJnr+FsJnCThS3x2Y0UiiDAXoWjwMqtUrp4Kg== - dependencies: - base64url "^3.0.1" - -"@digitalcredentials/bitstring@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@digitalcredentials/bitstring/-/bitstring-2.0.1.tgz#bb887f1d0999980598754e426d831c96a26a3863" - integrity sha512-9priXvsEJGI4LYHPwLqf5jv9HtQGlG0MgeuY8Q4NHN+xWz5rYMylh1TYTVThKa3XI6xF2pR2oEfKZD21eWXveQ== - dependencies: - "@digitalcredentials/base64url-universal" "^2.0.2" - pako "^2.0.4" - -"@digitalcredentials/ed25519-signature-2020@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@digitalcredentials/ed25519-signature-2020/-/ed25519-signature-2020-3.0.2.tgz#2df8fb6f814a1964b40ebb3402d41630c30120da" - integrity sha512-R8IrR21Dh+75CYriQov3nVHKaOVusbxfk9gyi6eCAwLHKn6fllUt+2LQfuUrL7Ts/sGIJqQcev7YvkX9GvyYRA== - dependencies: - "@digitalcredentials/base58-universal" "^1.0.1" - "@digitalcredentials/ed25519-verification-key-2020" "^3.1.1" - "@digitalcredentials/jsonld-signatures" "^9.3.1" - ed25519-signature-2018-context "^1.1.0" - ed25519-signature-2020-context "^1.0.1" - -"@digitalcredentials/ed25519-verification-key-2020@^3.1.1": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@digitalcredentials/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.2.tgz#cdf271bf4bb44dd2c417dcde6d7a0436e31d84ca" - integrity sha512-ZfxNFZlA379MZpf+gV2tUYyiZ15eGVgjtCQLWlyu3frWxsumUgv++o0OJlMnrDsWGwzFMRrsXcosd5+752rLOA== - dependencies: - "@digitalcredentials/base58-universal" "^1.0.1" - "@stablelib/ed25519" "^1.0.1" - base64url-universal "^1.1.0" - crypto-ld "^6.0.0" - -"@digitalcredentials/http-client@^1.0.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@digitalcredentials/http-client/-/http-client-1.2.2.tgz#8b09ab6f1e3aa8878d91d3ca51946ca8265cc92e" - integrity sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg== +"@digitalcredentials/http-client@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@digitalcredentials/http-client/-/http-client-5.0.4.tgz#44e73ea1133d24bab720c0515f92df9126912fe7" + integrity sha512-TbbfFauhd5fUAcZ/6TDenTuYqkzqdEhxYk1Rqicxcz33B9rzvJcmT+/81KF9DrUXmu6gpoqCranT2UkZftsxZA== dependencies: - ky "^0.25.1" - ky-universal "^0.8.2" + ky "^1.0.1" + undici "^6.6.2" -"@digitalcredentials/jsonld-signatures@^9.3.1", "@digitalcredentials/jsonld-signatures@^9.3.2", "@digitalcredentials/jsonld-signatures@^9.4.0": - version "9.4.0" - resolved "https://registry.yarnpkg.com/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.4.0.tgz#d5881122c4202449b88a7e2384f8e615ae55582c" - integrity sha512-DnR+HDTm7qpcDd0wcD1w6GdlAwfHjQSgu+ahion8REkCkkMRywF+CLunU7t8AZpFB2Gr/+N8naUtiEBNje1Oew== +"@digitalcredentials/jsonld-signatures@^12.0.1": + version "12.0.1" + resolved "https://registry.yarnpkg.com/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-12.0.1.tgz#af0c0018f84721218463bab203ecbec85606f6ff" + integrity sha512-KdyE7Bex+boqKRbvxofRyuI09BD6/8hQGSC5qbrXEmHd0oSLqePqKBM2pu9UZnzjxMZrN9sB3RqHxpijYEFh/w== dependencies: "@digitalbazaar/security-context" "^1.0.0" - "@digitalcredentials/jsonld" "^6.0.0" + "@digitalcredentials/jsonld" "^9.0.0" fast-text-encoding "^1.0.3" - isomorphic-webcrypto "^2.3.8" serialize-error "^8.0.1" -"@digitalcredentials/jsonld@^5.2.1": - version "5.2.2" - resolved "https://registry.yarnpkg.com/@digitalcredentials/jsonld/-/jsonld-5.2.2.tgz#d2bdefe25788ece77e900a9491c64c2187e3344c" - integrity sha512-hz7YR3kv6+8UUdgMyTGl1o8NjVKKwnMry/Rh/rWeAvwL+NqgoUHorWzI3rM+PW+MPFyDC0ieXStClt9n9D9SGA== +"@digitalcredentials/jsonld@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@digitalcredentials/jsonld/-/jsonld-9.0.0.tgz#545abb40fd87caaa5ba95ec41b9ff84cb0d2696a" + integrity sha512-lWVpg65xQbi4lvXWs3BezCwPrGDAllFjHwTBUWJCoKsfGzxtxTwbRNXpfhii5psQ2vvpjPXSI+y0uyRNOzr4cw== dependencies: - "@digitalcredentials/http-client" "^1.0.0" - "@digitalcredentials/rdf-canonize" "^1.0.0" - canonicalize "^1.0.1" - lru-cache "^6.0.0" - -"@digitalcredentials/jsonld@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@digitalcredentials/jsonld/-/jsonld-6.0.0.tgz#05d34cb1d81c4bbdfacf61f8958bbaede33be598" - integrity sha512-5tTakj0/GsqAJi8beQFVMQ97wUJZnuxViW9xRuAATL6eOBIefGBwHkVryAgEq2I4J/xKgb/nEyw1ZXX0G8wQJQ== - dependencies: - "@digitalcredentials/http-client" "^1.0.0" - "@digitalcredentials/rdf-canonize" "^1.0.0" + "@digitalcredentials/http-client" "^5.0.1" canonicalize "^1.0.1" lru-cache "^6.0.0" + rdf-canonize "^3.4.0" "@digitalcredentials/open-badges-context@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@digitalcredentials/open-badges-context/-/open-badges-context-2.1.0.tgz#cefd29af4642adf8feeed5bb7ede663b14913c2f" integrity sha512-VK7X5u6OoBFxkyIFplNqUPVbo+8vFSAEoam8tSozpj05KPfcGw41Tp5p9fqMnY38oPfwtZR2yDNSctj/slrE0A== -"@digitalcredentials/rdf-canonize@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz#6297d512072004c2be7f280246383a9c4b0877ff" - integrity sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA== - dependencies: - fast-text-encoding "^1.0.3" - isomorphic-webcrypto "^2.3.8" - -"@digitalcredentials/vc-status-list@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@digitalcredentials/vc-status-list/-/vc-status-list-5.0.2.tgz#9de8b23b6d533668a354ff464a689ecc42f24445" - integrity sha512-PI0N7SM0tXpaNLelbCNsMAi34AjOeuhUzMSYTkHdeqRPX7oT2F3ukyOssgr4koEqDxw9shHtxHu3fSJzrzcPMQ== - dependencies: - "@digitalbazaar/vc-status-list-context" "^3.0.1" - "@digitalcredentials/bitstring" "^2.0.1" - "@digitalcredentials/vc" "^4.1.1" - credentials-context "^2.0.0" - -"@digitalcredentials/vc@^4.1.1": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@digitalcredentials/vc/-/vc-4.2.0.tgz#d2197b26547d670965d5969a9e49437f244b5944" - integrity sha512-8Rxpn77JghJN7noBQdcMuzm/tB8vhDwPoFepr3oGd5w+CyJxOk2RnBlgIGlAAGA+mALFWECPv1rANfXno+hdjA== +"@digitalcredentials/vc@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@digitalcredentials/vc/-/vc-10.0.2.tgz#9716d161f55657cd818c2baf7dcd927729d00d0c" + integrity sha512-Mmts8WtAQmgdrSurQv+SFZNozNgvPzsruWQNIBlmfrlJ7QSyCoO7jybSnq43EuLm3UcqyqSb2mLHwAza310mhw== dependencies: - "@digitalcredentials/jsonld" "^5.2.1" - "@digitalcredentials/jsonld-signatures" "^9.3.1" - credentials-context "^2.0.0" - -"@digitalcredentials/vc@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@digitalcredentials/vc/-/vc-6.0.1.tgz#e4bdbac37d677c5288f2ad8d9ea59c3b41e0fd78" - integrity sha512-TZgLoi00Jc9uv3b6jStH+G8+bCqpHIqFw9DYODz+fVjNh197ksvcYqSndUDHa2oi0HCcK+soI8j4ba3Sa4Pl4w== - dependencies: - "@digitalbazaar/vc-status-list" "^7.0.0" - "@digitalcredentials/ed25519-signature-2020" "^3.0.2" - "@digitalcredentials/jsonld" "^6.0.0" - "@digitalcredentials/jsonld-signatures" "^9.3.2" + "@digitalcredentials/credentials-v2-context" "^0.0.1-beta.0" + "@digitalcredentials/jsonld" "^9.0.0" + "@digitalcredentials/jsonld-signatures" "^12.0.1" "@digitalcredentials/open-badges-context" "^2.1.0" - "@digitalcredentials/vc-status-list" "^5.0.2" credentials-context "^2.0.0" - fix-esm "^1.0.1" + ed25519-signature-2018-context "^1.1.0" "@emnapi/core@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" - integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== + version "1.7.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.7.1.tgz#3a79a02dbc84f45884a1806ebb98e5746bdfaac4" + integrity sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg== dependencies: - "@emnapi/wasi-threads" "1.0.2" + "@emnapi/wasi-threads" "1.1.0" tslib "^2.4.0" "@emnapi/runtime@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" - integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== + version "1.7.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.7.1.tgz#a73784e23f5d57287369c808197288b52276b791" + integrity sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA== dependencies: tslib "^2.4.0" -"@emnapi/wasi-threads@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" - integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== +"@emnapi/wasi-threads@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf" + integrity sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ== dependencies: tslib "^2.4.0" -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" - integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== +"@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.8.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== dependencies: eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/config-array@^0.20.0": - version "0.20.0" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.20.0.tgz#7a1232e82376712d3340012a2f561a2764d1988f" - integrity sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ== +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== dependencies: - "@eslint/object-schema" "^2.1.6" + "@eslint/object-schema" "^2.1.7" debug "^4.3.1" minimatch "^3.1.2" -"@eslint/config-helpers@^0.2.1": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.2.2.tgz#3779f76b894de3a8ec4763b79660e6d54d5b1010" - integrity sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg== +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== + dependencies: + "@eslint/core" "^0.17.0" -"@eslint/core@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.14.0.tgz#326289380968eaf7e96f364e1e4cf8f3adf2d003" - integrity sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg== +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== dependencies: "@types/json-schema" "^7.0.15" "@eslint/eslintrc@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" - integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac" + integrity sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -778,44 +663,29 @@ globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^4.1.0" + js-yaml "^4.1.1" minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.27.0": - version "9.27.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.27.0.tgz#181a23460877c484f6dd03890f4e3fa2fdeb8ff0" - integrity sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA== +"@eslint/js@9.39.1": + version "9.39.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.1.tgz#0dd59c3a9f40e3f1882975c321470969243e0164" + integrity sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw== -"@eslint/object-schema@^2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" - integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== -"@eslint/plugin-kit@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz#b71b037b2d4d68396df04a8c35a49481e5593067" - integrity sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w== +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== dependencies: - "@eslint/core" "^0.14.0" + "@eslint/core" "^0.17.0" levn "^0.4.1" -"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.8.0.tgz#e79bb51940ac35fe6f3262d7fe2cdb25ad5f07d9" - integrity sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q== - dependencies: - "@ethersproject/address" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/hash" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/strings" "^5.8.0" - -"@ethersproject/abstract-provider@5.8.0", "@ethersproject/abstract-provider@^5.8.0": +"@ethersproject/abstract-provider@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz#7581f9be601afa1d02b95d26b9d9840926a35b0c" integrity sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg== @@ -828,7 +698,7 @@ "@ethersproject/transactions" "^5.8.0" "@ethersproject/web" "^5.8.0" -"@ethersproject/abstract-signer@5.8.0", "@ethersproject/abstract-signer@^5.8.0": +"@ethersproject/abstract-signer@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz#8d7417e95e4094c1797a9762e6789c7356db0754" integrity sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA== @@ -839,7 +709,7 @@ "@ethersproject/logger" "^5.8.0" "@ethersproject/properties" "^5.8.0" -"@ethersproject/address@5.8.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.8.0": +"@ethersproject/address@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.8.0.tgz#3007a2c352eee566ad745dca1dbbebdb50a6a983" integrity sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA== @@ -850,14 +720,14 @@ "@ethersproject/logger" "^5.8.0" "@ethersproject/rlp" "^5.8.0" -"@ethersproject/base64@5.8.0", "@ethersproject/base64@^5.8.0": +"@ethersproject/base64@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.8.0.tgz#61c669c648f6e6aad002c228465d52ac93ee83eb" integrity sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ== dependencies: "@ethersproject/bytes" "^5.8.0" -"@ethersproject/basex@5.8.0", "@ethersproject/basex@^5.7.0", "@ethersproject/basex@^5.8.0": +"@ethersproject/basex@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.8.0.tgz#1d279a90c4be84d1c1139114a1f844869e57d03a" integrity sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q== @@ -865,7 +735,7 @@ "@ethersproject/bytes" "^5.8.0" "@ethersproject/properties" "^5.8.0" -"@ethersproject/bignumber@5.8.0", "@ethersproject/bignumber@^5.8.0": +"@ethersproject/bignumber@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.8.0.tgz#c381d178f9eeb370923d389284efa19f69efa5d7" integrity sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA== @@ -874,37 +744,21 @@ "@ethersproject/logger" "^5.8.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.8.0", "@ethersproject/bytes@^5.8.0": +"@ethersproject/bytes@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.8.0.tgz#9074820e1cac7507a34372cadeb035461463be34" integrity sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A== dependencies: "@ethersproject/logger" "^5.8.0" -"@ethersproject/constants@5.8.0", "@ethersproject/constants@^5.8.0": +"@ethersproject/constants@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.8.0.tgz#12f31c2f4317b113a4c19de94e50933648c90704" integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg== dependencies: "@ethersproject/bignumber" "^5.8.0" -"@ethersproject/contracts@5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.8.0.tgz#243a38a2e4aa3e757215ea64e276f8a8c9d8ed73" - integrity sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ== - dependencies: - "@ethersproject/abi" "^5.8.0" - "@ethersproject/abstract-provider" "^5.8.0" - "@ethersproject/abstract-signer" "^5.8.0" - "@ethersproject/address" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/transactions" "^5.8.0" - -"@ethersproject/hash@5.8.0", "@ethersproject/hash@^5.8.0": +"@ethersproject/hash@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.8.0.tgz#b8893d4629b7f8462a90102572f8cd65a0192b4c" integrity sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA== @@ -919,7 +773,7 @@ "@ethersproject/properties" "^5.8.0" "@ethersproject/strings" "^5.8.0" -"@ethersproject/hdnode@5.8.0", "@ethersproject/hdnode@^5.8.0": +"@ethersproject/hdnode@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.8.0.tgz#a51ae2a50bcd48ef6fd108c64cbae5e6ff34a761" integrity sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA== @@ -937,7 +791,7 @@ "@ethersproject/transactions" "^5.8.0" "@ethersproject/wordlists" "^5.8.0" -"@ethersproject/json-wallets@5.8.0", "@ethersproject/json-wallets@^5.8.0": +"@ethersproject/json-wallets@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz#d18de0a4cf0f185f232eb3c17d5e0744d97eb8c9" integrity sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w== @@ -956,7 +810,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.8.0", "@ethersproject/keccak256@^5.8.0": +"@ethersproject/keccak256@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng== @@ -964,19 +818,19 @@ "@ethersproject/bytes" "^5.8.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.8.0", "@ethersproject/logger@^5.8.0": +"@ethersproject/logger@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== -"@ethersproject/networks@5.8.0", "@ethersproject/networks@^5.8.0": +"@ethersproject/networks@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.8.0.tgz#8b4517a3139380cba9fb00b63ffad0a979671fde" integrity sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg== dependencies: "@ethersproject/logger" "^5.8.0" -"@ethersproject/pbkdf2@5.8.0", "@ethersproject/pbkdf2@^5.8.0": +"@ethersproject/pbkdf2@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz#cd2621130e5dd51f6a0172e63a6e4a0c0a0ec37e" integrity sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg== @@ -984,40 +838,14 @@ "@ethersproject/bytes" "^5.8.0" "@ethersproject/sha2" "^5.8.0" -"@ethersproject/properties@5.8.0", "@ethersproject/properties@^5.8.0": +"@ethersproject/properties@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.8.0.tgz#405a8affb6311a49a91dabd96aeeae24f477020e" integrity sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw== dependencies: "@ethersproject/logger" "^5.8.0" -"@ethersproject/providers@5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.8.0.tgz#6c2ae354f7f96ee150439f7de06236928bc04cb4" - integrity sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw== - dependencies: - "@ethersproject/abstract-provider" "^5.8.0" - "@ethersproject/abstract-signer" "^5.8.0" - "@ethersproject/address" "^5.8.0" - "@ethersproject/base64" "^5.8.0" - "@ethersproject/basex" "^5.8.0" - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/hash" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/networks" "^5.8.0" - "@ethersproject/properties" "^5.8.0" - "@ethersproject/random" "^5.8.0" - "@ethersproject/rlp" "^5.8.0" - "@ethersproject/sha2" "^5.8.0" - "@ethersproject/strings" "^5.8.0" - "@ethersproject/transactions" "^5.8.0" - "@ethersproject/web" "^5.8.0" - bech32 "1.1.4" - ws "8.18.0" - -"@ethersproject/random@5.8.0", "@ethersproject/random@^5.8.0": +"@ethersproject/random@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.8.0.tgz#1bced04d49449f37c6437c701735a1a022f0057a" integrity sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A== @@ -1025,7 +853,7 @@ "@ethersproject/bytes" "^5.8.0" "@ethersproject/logger" "^5.8.0" -"@ethersproject/rlp@5.8.0", "@ethersproject/rlp@^5.8.0": +"@ethersproject/rlp@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.8.0.tgz#5a0d49f61bc53e051532a5179472779141451de5" integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q== @@ -1033,7 +861,7 @@ "@ethersproject/bytes" "^5.8.0" "@ethersproject/logger" "^5.8.0" -"@ethersproject/sha2@5.8.0", "@ethersproject/sha2@^5.8.0": +"@ethersproject/sha2@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.8.0.tgz#8954a613bb78dac9b46829c0a95de561ef74e5e1" integrity sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A== @@ -1042,7 +870,7 @@ "@ethersproject/logger" "^5.8.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.8.0", "@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@^5.8.0": +"@ethersproject/signing-key@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.8.0.tgz#9797e02c717b68239c6349394ea85febf8893119" integrity sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w== @@ -1054,19 +882,7 @@ elliptic "6.6.1" hash.js "1.1.7" -"@ethersproject/solidity@5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.8.0.tgz#429bb9fcf5521307a9448d7358c26b93695379b9" - integrity sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA== - dependencies: - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/keccak256" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - "@ethersproject/sha2" "^5.8.0" - "@ethersproject/strings" "^5.8.0" - -"@ethersproject/strings@5.8.0", "@ethersproject/strings@^5.8.0": +"@ethersproject/strings@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.8.0.tgz#ad79fafbf0bd272d9765603215ac74fd7953908f" integrity sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg== @@ -1075,7 +891,7 @@ "@ethersproject/constants" "^5.8.0" "@ethersproject/logger" "^5.8.0" -"@ethersproject/transactions@5.8.0", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@^5.8.0": +"@ethersproject/transactions@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.8.0.tgz#1e518822403abc99def5a043d1c6f6fe0007e46b" integrity sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg== @@ -1090,16 +906,7 @@ "@ethersproject/rlp" "^5.8.0" "@ethersproject/signing-key" "^5.8.0" -"@ethersproject/units@5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.8.0.tgz#c12f34ba7c3a2de0e9fa0ed0ee32f3e46c5c2c6a" - integrity sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ== - dependencies: - "@ethersproject/bignumber" "^5.8.0" - "@ethersproject/constants" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - -"@ethersproject/wallet@5.8.0", "@ethersproject/wallet@^5.7.0": +"@ethersproject/wallet@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.8.0.tgz#49c300d10872e6986d953e8310dc33d440da8127" integrity sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA== @@ -1120,7 +927,7 @@ "@ethersproject/transactions" "^5.8.0" "@ethersproject/wordlists" "^5.8.0" -"@ethersproject/web@5.8.0", "@ethersproject/web@^5.8.0": +"@ethersproject/web@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.8.0.tgz#3e54badc0013b7a801463a7008a87988efce8a37" integrity sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw== @@ -1131,7 +938,7 @@ "@ethersproject/properties" "^5.8.0" "@ethersproject/strings" "^5.8.0" -"@ethersproject/wordlists@5.8.0", "@ethersproject/wordlists@^5.8.0": +"@ethersproject/wordlists@^5.8.0": version "5.8.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.8.0.tgz#7a5654ee8d1bb1f4dbe43f91d217356d650ad821" integrity sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg== @@ -1142,27 +949,22 @@ "@ethersproject/properties" "^5.8.0" "@ethersproject/strings" "^5.8.0" -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - "@grpc/grpc-js@^1.7.1": - version "1.13.4" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.13.4.tgz#922fbc496e229c5fa66802d2369bf181c1df1c5a" - integrity sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg== + version "1.14.2" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.14.2.tgz#d245069181a1a8057abd35522d6052482730cf19" + integrity sha512-QzVUtEFyu05UNx2xr0fCQmStUO17uVQhGNowtxs00IgTZT6/W2PBLfUkj30s0FKJ29VtTa3ArVNIhNP6akQhqA== dependencies: - "@grpc/proto-loader" "^0.7.13" + "@grpc/proto-loader" "^0.8.0" "@js-sdsl/ordered-map" "^4.4.2" -"@grpc/proto-loader@^0.7.13": - version "0.7.15" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.15.tgz#4cdfbf35a35461fc843abe8b9e2c0770b5095e60" - integrity sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ== +"@grpc/proto-loader@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.8.0.tgz#b6c324dd909c458a0e4aa9bfd3d69cf78a4b9bd8" + integrity sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ== dependencies: lodash.camelcase "^4.3.0" long "^5.0.0" - protobufjs "^7.2.5" + protobufjs "^7.5.3" yargs "^17.7.2" "@hapi/accept@^6.0.3": @@ -1253,9 +1055,9 @@ integrity sha512-w+lKW+yRrLhJu620jT3y+5g2mHqnKfepreykvdOcl9/6up8GrQQn+l3FRTsjHTKbkbfQFkuksHpdv2EcpKcJ4Q== "@hapi/hapi@^21.3.12": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@hapi/hapi/-/hapi-21.4.0.tgz#6f1493ffd6d83ef2d06a95b6e855f554545e3703" - integrity sha512-kqiRWbYYLSSt2rYbxyNj8svPsXP715p4W/K3OXpXeiiVLNSdBX4f+zfmC+dY6eyb6rqTqTAbx6x8b5HpJTkviQ== + version "21.4.4" + resolved "https://registry.yarnpkg.com/@hapi/hapi/-/hapi-21.4.4.tgz#89c239135be1ff2adeb586df157dee7a49593291" + integrity sha512-vI6JPLR99WZDKI1nriD0qXDPp8sKFkZfNVGrDDZafDQ8jU+3ERMwS0vPac5aGae6yyyoGZGOBiYExw4N8ScSTQ== dependencies: "@hapi/accept" "^6.0.3" "@hapi/ammo" "^6.0.1" @@ -1265,14 +1067,14 @@ "@hapi/catbox" "^12.1.1" "@hapi/catbox-memory" "^6.0.2" "@hapi/heavy" "^8.0.1" - "@hapi/hoek" "^11.0.6" + "@hapi/hoek" "^11.0.7" "@hapi/mimos" "^7.0.1" - "@hapi/podium" "^5.0.1" - "@hapi/shot" "^6.0.1" + "@hapi/podium" "^5.0.2" + "@hapi/shot" "^6.0.2" "@hapi/somever" "^4.1.1" - "@hapi/statehood" "^8.2.0" - "@hapi/subtext" "^8.1.0" - "@hapi/teamwork" "^6.0.0" + "@hapi/statehood" "^8.2.1" + "@hapi/subtext" "^8.1.1" + "@hapi/teamwork" "^6.0.1" "@hapi/topo" "^6.0.2" "@hapi/validate" "^2.0.1" @@ -1285,7 +1087,7 @@ "@hapi/hoek" "^11.0.2" "@hapi/validate" "^2.0.1" -"@hapi/hoek@^11.0.2", "@hapi/hoek@^11.0.6": +"@hapi/hoek@^11.0.2", "@hapi/hoek@^11.0.7": version "11.0.7" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-11.0.7.tgz#56a920793e0a42d10e530da9a64cc0d3919c4002" integrity sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ== @@ -1333,7 +1135,7 @@ "@hapi/hoek" "^11.0.2" "@hapi/nigel" "^5.0.1" -"@hapi/podium@^5.0.0", "@hapi/podium@^5.0.1": +"@hapi/podium@^5.0.0", "@hapi/podium@^5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@hapi/podium/-/podium-5.0.2.tgz#6b1431bec13f55525cdfa83b2a7684c212c96189" integrity sha512-T7gf2JYHQQfEfewTQFbsaXoZxSvuXO/QBIGljucUQ/lmPnTTNAepoIKOakWNVWvo2fMEDjycu77r8k6dhreqHA== @@ -1342,10 +1144,10 @@ "@hapi/teamwork" "^6.0.0" "@hapi/validate" "^2.0.1" -"@hapi/shot@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@hapi/shot/-/shot-6.0.1.tgz#ea84d1810b7c8599d5517c23b4ec55a529d7dc16" - integrity sha512-s5ynMKZXYoDd3dqPw5YTvOR/vjHvMTxc388+0qL0jZZP1+uwXuUD32o9DuuuLsmTlyXCWi02BJl1pBpwRuUrNA== +"@hapi/shot@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@hapi/shot/-/shot-6.0.2.tgz#30f0688a9fb800d8ad6dbf4b2033173335dd5571" + integrity sha512-WKK1ShfJTrL1oXC0skoIZQYzvLsyMDEF8lfcWuQBjpjCN29qivr9U36ld1z0nt6edvzv28etNMOqUF4klnHryw== dependencies: "@hapi/hoek" "^11.0.2" "@hapi/validate" "^2.0.1" @@ -1358,10 +1160,10 @@ "@hapi/bounce" "^3.0.1" "@hapi/hoek" "^11.0.2" -"@hapi/statehood@^8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@hapi/statehood/-/statehood-8.2.0.tgz#f9e9367ad1a02a975dc6b24dad728af19962da0f" - integrity sha512-63JlCVIrsmuunWsyc3OeuFO+gH6v56swLCl7OM1w09l/exQKPUxSUDF2Slkuw8k91nIzr0A2/aPvjLOWf9ksrg== +"@hapi/statehood@^8.2.1": + version "8.2.1" + resolved "https://registry.yarnpkg.com/@hapi/statehood/-/statehood-8.2.1.tgz#4435f11f78873f07aa7422a95386ae9802a914e1" + integrity sha512-xf72TG/QINW26jUu+uL5H+crE1o8GplIgfPWwPZhnAGJzetIVAQEQYvzq+C0aEVHg5/lMMtQ+L9UryuSa5Yjkg== dependencies: "@hapi/boom" "^10.0.1" "@hapi/bounce" "^3.0.1" @@ -1371,10 +1173,10 @@ "@hapi/iron" "^7.0.1" "@hapi/validate" "^2.0.1" -"@hapi/subtext@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@hapi/subtext/-/subtext-8.1.0.tgz#58733020a6655bc4d978df9e2f75e31696ff3f91" - integrity sha512-PyaN4oSMtqPjjVxLny1k0iYg4+fwGusIhaom9B2StinBclHs7v46mIW706Y+Wo21lcgulGyXbQrmT/w4dus6ww== +"@hapi/subtext@^8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@hapi/subtext/-/subtext-8.1.1.tgz#48b93ab9196f7bf5902060ec92459fc354acba6e" + integrity sha512-ex1Y2s/KuJktS8Ww0k6XJ5ysSKrzNym4i5pDVuCwlSgHHviHUsT1JNzE6FYhNU9TTHSNdyfue/t2m89bpkX9Jw== dependencies: "@hapi/boom" "^10.0.1" "@hapi/bourne" "^3.0.0" @@ -1384,10 +1186,10 @@ "@hapi/pez" "^6.1.0" "@hapi/wreck" "^18.0.1" -"@hapi/teamwork@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@hapi/teamwork/-/teamwork-6.0.0.tgz#b3a173cf811ba59fc6ee22318a1b51f4561f06e0" - integrity sha512-05HumSy3LWfXpmJ9cr6HzwhAavrHkJ1ZRCmNE2qJMihdM5YcWreWPfyN0yKT2ZjCM92au3ZkuodjBxOibxM67A== +"@hapi/teamwork@^6.0.0", "@hapi/teamwork@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@hapi/teamwork/-/teamwork-6.0.1.tgz#2f6496170f47abd8446930447f64e64ba1d57d3f" + integrity sha512-52OXRslUfYwXAOG8k58f2h2ngXYQGP0x5RPOo+eWA/FtyLgHjGMrE3+e9LSXP/0q2YfHAK5wj9aA9DTy1K+kyQ== "@hapi/topo@^5.1.0": version "5.1.0" @@ -1433,81 +1235,59 @@ integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== "@humanfs/node@^0.16.6": - version "0.16.6" - resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" - integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + version "0.16.7" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== dependencies: "@humanfs/core" "^0.19.1" - "@humanwhocodes/retry" "^0.3.0" + "@humanwhocodes/retry" "^0.4.0" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/retry@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" - integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== - -"@humanwhocodes/retry@^0.4.2": +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": version "0.4.3" resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== -"@hyperledger/anoncreds-nodejs@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@hyperledger/anoncreds-nodejs/-/anoncreds-nodejs-0.3.1.tgz#72777755c6debd6aacaeb41eaeb6e7a3f1570760" - integrity sha512-/oWmWgcOPqjAtd2+dKASPYL84Qd7sAFyCBfEKM7PAgVbObaZUZc0kqA7hkEz/qyiqUvcP/JwKTc1v4zVZi6BTg== +"@hyperledger/anoncreds-nodejs@^0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@hyperledger/anoncreds-nodejs/-/anoncreds-nodejs-0.3.4.tgz#8fb060a0d783c43129812f82b3c8b356a87928d6" + integrity sha512-im5hRRvICM3hoyoJb4RJ7Mape7wIjDR8Tk+g/tHcg9GSPcEsJi+fJdxaHb7WVneycdZXeF6xky8BZwnQD2+Baw== dependencies: "@2060.io/ffi-napi" "^4.0.9" "@2060.io/ref-napi" "^3.0.6" - "@hyperledger/anoncreds-shared" "0.3.1" + "@hyperledger/anoncreds-shared" "0.3.4" ref-array-di "1.2.2" ref-struct-di "1.1.1" -"@hyperledger/anoncreds-shared@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@hyperledger/anoncreds-shared/-/anoncreds-shared-0.3.1.tgz#b227bc068c965ce6a6ce821b0a49832dd27c1461" - integrity sha512-pJNIMvineGpNsyEqsMR+tkRNy5+PQAnMkNgnefJlscCjVsTMqJnOtoNl18pk0LzjVKdGtwJtpg5N+lRx81hfAQ== +"@hyperledger/anoncreds-shared@0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@hyperledger/anoncreds-shared/-/anoncreds-shared-0.3.4.tgz#d6b62aa2720f3da8a8f7e79bd8cc167aeb5009cb" + integrity sha512-XRyX39yWjn+ymUxy+4BvE0gdRIkfTmHtj1A19aOE8gALaDIAMiBbe0HxO8dkM+iAUXntBtqRJEL87Kwcx6xd8g== dependencies: tar "^7.4.3" -"@hyperledger/aries-askar-nodejs@0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@hyperledger/aries-askar-nodejs/-/aries-askar-nodejs-0.2.3.tgz#f939c19047c78b9903b422f992b4f5406ac3aae3" - integrity sha512-2BnGqK08Y96DEB8tDuXy2x+soetChyMGB0+L1yqdHx1Xv5FvRerYrTXdTjJXTW6ANb48k2Np8WlJ4YNePSo6ww== +"@hyperledger/indy-vdr-nodejs@^0.2.3": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@hyperledger/indy-vdr-nodejs/-/indy-vdr-nodejs-0.2.4.tgz#ff4be94dbdcfdc6c391f05f8ab06e787a5024c41" + integrity sha512-oJgzj4XGsPWHtkszdQpwSisRbWMdNVnV0zB8Q68gWgWU2vODcevA9Ad/GwNQce2D2TbieYc1TJiFEnBIoN2MeQ== dependencies: "@2060.io/ffi-napi" "^4.0.9" "@2060.io/ref-napi" "^3.0.6" - "@hyperledger/aries-askar-shared" "0.2.3" - "@mapbox/node-pre-gyp" "^1.0.11" + "@hyperledger/indy-vdr-shared" "0.2.4" + "@types/ref-array-di" "^1.2.8" ref-array-di "^1.2.2" ref-struct-di "^1.1.1" -"@hyperledger/aries-askar-shared@0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@hyperledger/aries-askar-shared/-/aries-askar-shared-0.2.3.tgz#670fea675982e3b0a2f416131b04d0f1e058cd1b" - integrity sha512-g9lao8qa80kPCLqqp02ovNqEfQIrm6cAf4xZVzD5P224VmOhf4zM6AKplQTvQx7USNKoXroe93JrOOSVxPeqrA== - dependencies: - buffer "^6.0.3" - -"@hyperledger/indy-vdr-nodejs@0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@hyperledger/indy-vdr-nodejs/-/indy-vdr-nodejs-0.2.2.tgz#f1f5ed1b9c34103703882dbc6c10fe480d33b0e6" - integrity sha512-mc0iKuHCtKuOV0sMnGOTVWnQrpfBMS+1tIRyob+CvGCvwC2llGo3Hu5AvgPcR9nqCo/wJ0LoKBo66dYYb0uZbw== +"@hyperledger/indy-vdr-shared@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@hyperledger/indy-vdr-shared/-/indy-vdr-shared-0.2.4.tgz#4290877cf751a55430160ef95c886bcc9d309e44" + integrity sha512-4+Yv7m6h79ov6WxkaSprd3uoPM6HjaZXAjtYgrG4N1pBMPbxsUy9ZRmmngwvRxlyT8R8p2EBh8kDG5rDIxfHFw== dependencies: - "@2060.io/ffi-napi" "^4.0.9" - "@2060.io/ref-napi" "^3.0.6" - "@hyperledger/indy-vdr-shared" "0.2.2" - "@mapbox/node-pre-gyp" "^1.0.10" - ref-array-di "^1.2.2" - ref-struct-di "^1.1.1" - -"@hyperledger/indy-vdr-shared@0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@hyperledger/indy-vdr-shared/-/indy-vdr-shared-0.2.2.tgz#9ca8b56cd89ab18792d129a0358b641e211274e3" - integrity sha512-9425MHU3K+/ahccCRjOIX3Z/51gqxvp3Nmyujyqlx9cd7PWG2Rianx7iNWecFBkdAEqS0DfHsb6YqqH39YZp/A== + tar "^7.4.3" "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -1736,13 +1516,20 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" - integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": @@ -1750,15 +1537,10 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -1768,10 +1550,10 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1791,34 +1573,19 @@ resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== -"@mapbox/node-pre-gyp@^1.0.10", "@mapbox/node-pre-gyp@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" - integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" - "@multiformats/base-x@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121" integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== -"@napi-rs/wasm-runtime@^0.2.10": - version "0.2.10" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.10.tgz#f3b7109419c6670000b2401e0c778b98afc25f84" - integrity sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ== +"@napi-rs/wasm-runtime@^0.2.11": + version "0.2.12" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz#3e78a8b96e6c33a6c517e1894efbd5385a7cb6f2" + integrity sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ== dependencies: "@emnapi/core" "^1.4.3" "@emnapi/runtime" "^1.4.3" - "@tybys/wasm-util" "^0.9.0" + "@tybys/wasm-util" "^0.10.0" "@noble/curves@1.2.0": version "1.2.0" @@ -1827,58 +1594,67 @@ dependencies: "@noble/hashes" "1.3.2" -"@noble/curves@^1.6.0": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.1.tgz#9654a0bc6c13420ae252ddcf975eaf0f58f0a35c" - integrity sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA== +"@noble/curves@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-2.0.1.tgz#64ba8bd5e8564a02942655602515646df1cdb3ad" + integrity sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw== dependencies: - "@noble/hashes" "1.8.0" + "@noble/hashes" "2.0.1" "@noble/hashes@1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== -"@noble/hashes@1.8.0", "@noble/hashes@^1.1.5", "@noble/hashes@^1.5.0": +"@noble/hashes@1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.1.tgz#df6e5943edcea504bac61395926d6fd67869a0d5" + integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== + +"@noble/hashes@2.0.1", "@noble/hashes@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-2.0.1.tgz#fc1a928061d1232b0a52bb754393c37a5216c89e" + integrity sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw== + +"@noble/hashes@^1.1.5": version "1.8.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== +"@openid4vc/oauth2@0.4.6", "@openid4vc/oauth2@^0.4.5": + version "0.4.6" + resolved "https://registry.yarnpkg.com/@openid4vc/oauth2/-/oauth2-0.4.6.tgz#197d424ae8144f1c085f4ec559cc93fa8df3f6be" + integrity sha512-PVa+N9UHt4KhHh02KHUHqS64vdnoaktNSVr7VUgeaB1NS0c3+7UIa2A/TnsyZqUAy9TxGltAflxsaWO+HtWPQQ== dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "@openid4vc/utils" "0.4.6" + zod "^4.3.5" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@openid4vc/openid4vci@^0.4.5": + version "0.4.6" + resolved "https://registry.yarnpkg.com/@openid4vc/openid4vci/-/openid4vci-0.4.6.tgz#ee2b1d1b1e91ac48e50a818facce3951491bb43d" + integrity sha512-qjxLeE6K285r+lyy+4jJFS+M70+dyImVGvqo97BO+JxL4059jMb/FwJIXjnp2Ygl8+FuaEgFxhGpFdnaNwj30w== + dependencies: + "@openid4vc/oauth2" "0.4.6" + "@openid4vc/utils" "0.4.6" + zod "^4.3.5" -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== +"@openid4vc/openid4vp@^0.4.5": + version "0.4.6" + resolved "https://registry.yarnpkg.com/@openid4vc/openid4vp/-/openid4vp-0.4.6.tgz#60d729cf07d69a4036c8ef52ea08207fbb637b85" + integrity sha512-d7H8SuFlHZS30OC1U8vsezGHuXkOTp97rrHbsxrge7AQaHHi8BZXAwUGdujbXdkkU7zulXx9yk2+J+ZTb/GE3A== dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "@openid4vc/oauth2" "0.4.6" + "@openid4vc/utils" "0.4.6" + zod "^4.3.5" -"@nomicfoundation/hardhat-verify@^2.0.3": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.14.tgz#ba80918fac840f1165825f2a422a694486f82f6f" - integrity sha512-z3iVF1WYZHzcdMMUuureFpSAfcnlfJbJx3faOnGrOYg6PRTki1Ut9JAuRccnFzMHf1AmTEoSUpWcyvBCoxL5Rg== +"@openid4vc/utils@0.4.6", "@openid4vc/utils@^0.4.5": + version "0.4.6" + resolved "https://registry.yarnpkg.com/@openid4vc/utils/-/utils-0.4.6.tgz#abe1360878e691fbf2ca19bc8e7f23c1f2a73197" + integrity sha512-qpZ40ccnYTMdmW5zzIiN5SvNBzWHu0cUz97Itw+YMC8obosQ62c4Tg9LpwWwVirouN9oOQZ7IuF1EDakiB8w3w== dependencies: - "@ethersproject/abi" "^5.1.2" - "@ethersproject/address" "^5.0.2" - cbor "^8.1.0" - debug "^4.1.1" - lodash.clonedeep "^4.5.0" - picocolors "^1.1.0" - semver "^6.3.0" - table "^6.8.0" - undici "^5.14.0" + buffer "^6.0.3" + zod "^4.3.5" + zod-validation-error "^5.0.0" "@opentelemetry/api-logs@0.202.0": version "0.202.0" @@ -1897,13 +1673,20 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.0.1.tgz#4416bc2df780c1dda1129afb9392d55831dd861d" integrity sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw== -"@opentelemetry/core@2.0.1", "@opentelemetry/core@^2.0.0": +"@opentelemetry/core@2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.0.1.tgz#44e1149d5666a4743cde943ef89841db3ce0f8bc" integrity sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw== dependencies: "@opentelemetry/semantic-conventions" "^1.29.0" +"@opentelemetry/core@2.2.0", "@opentelemetry/core@^2.0.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.2.0.tgz#2f857d7790ff160a97db3820889b5f4cade6eaee" + integrity sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw== + dependencies: + "@opentelemetry/semantic-conventions" "^1.29.0" + "@opentelemetry/exporter-logs-otlp-grpc@0.202.0": version "0.202.0" resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.202.0.tgz#f179be218f7acf8ae004c343c718af9958ef9a6a" @@ -2032,9 +1815,9 @@ "@opentelemetry/semantic-conventions" "^1.29.0" "@opentelemetry/instrumentation-express@^0.51.0": - version "0.51.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.51.0.tgz#b63fdf82ff68dbbe685f790ce4c85c613ebea10c" - integrity sha512-v1mgfvyeQh7yfsZ8wZlr+jgFGk9FxzLfNH0EH0UYGO9das8fCIkixsEasZMWhjwAJKjlf+ElTZ2jE2pT7I3DyQ== + version "0.51.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.51.1.tgz#e9ea96ea67c7698c8e2939f518d94835fd036bfd" + integrity sha512-cKmzev7RolYGedQ82hVUoH+74BP4E0xmhUCEagOxmW3aKilXYx01KwsNN6wnx3IXR7u2nlYugQsEsLLA4d829A== dependencies: "@opentelemetry/core" "^2.0.0" "@opentelemetry/instrumentation" "^0.202.0" @@ -2051,9 +1834,9 @@ forwarded-parse "2.1.2" "@opentelemetry/instrumentation-nestjs-core@^0.48.0": - version "0.48.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.48.0.tgz#86f1d1af48a6654adc8497a8fccd31eb234a6357" - integrity sha512-ytK4ABSkWcD9vyMU8GpinvodAGaRxBFuxybP/m7sgLtEboXMJjdWnEHb7lH/CX1ICiVKRXWdYg9npdu6yBCW5Q== + version "0.48.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.48.1.tgz#117f416992570e643c83f02fc51eb54f869eb1b2" + integrity sha512-rH0IUQRf9wjxEkiPfltM17DVqgSe/rgeIlg1CKRDAhuxWkbXlcHwdOnBfngGKhJNGOlGUo6HzZesavPAlmm3Fw== dependencies: "@opentelemetry/instrumentation" "^0.202.0" "@opentelemetry/semantic-conventions" "^1.30.0" @@ -2112,7 +1895,7 @@ dependencies: "@opentelemetry/core" "2.0.1" -"@opentelemetry/resources@2.0.1", "@opentelemetry/resources@^2.0.1": +"@opentelemetry/resources@2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.0.1.tgz#0365d134291c0ed18d96444a1e21d0e6a481c840" integrity sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw== @@ -2120,6 +1903,14 @@ "@opentelemetry/core" "2.0.1" "@opentelemetry/semantic-conventions" "^1.29.0" +"@opentelemetry/resources@^2.0.1": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.2.0.tgz#b90a950ad98551295b76ea8a0e7efe45a179badf" + integrity sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A== + dependencies: + "@opentelemetry/core" "2.2.0" + "@opentelemetry/semantic-conventions" "^1.29.0" + "@opentelemetry/sdk-logs@0.202.0", "@opentelemetry/sdk-logs@^0.202.0": version "0.202.0" resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.202.0.tgz#7caab8f764d5c95e5809a42f5df3ff1ad5ebd862" @@ -2184,120 +1975,139 @@ "@opentelemetry/sdk-trace-base" "2.0.1" "@opentelemetry/semantic-conventions@^1.27.0", "@opentelemetry/semantic-conventions@^1.29.0", "@opentelemetry/semantic-conventions@^1.30.0", "@opentelemetry/semantic-conventions@^1.34.0": - version "1.34.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.34.0.tgz#8b6a46681b38a4d5947214033ac48128328c1738" - integrity sha512-aKcOkyrorBGlajjRdVoJWHTxfxO1vCNHLJVlSDaRHDIdjU+pX8IYQPvPDkYiujKLbRnWU+1TBwEt0QRgSm4SGA== + version "1.38.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.38.0.tgz#8b5f415395a7ddb7c8e0c7932171deb9278df1a3" + integrity sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg== + +"@openwallet-foundation/askar-nodejs@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@openwallet-foundation/askar-nodejs/-/askar-nodejs-0.4.3.tgz#c53a29ef29fa9ef6dddb335034556f407919bf18" + integrity sha512-+7hJaCUz/GP9hhOdbLL+9OzYgb5vILcTmSyqSGTR3Qd/ba+j5HdN3BJfgRETK4Svz1jlbEKbjRLE7RwDqEr2RA== + dependencies: + "@2060.io/ffi-napi" "^4.0.9" + "@2060.io/ref-napi" "^3.0.6" + "@openwallet-foundation/askar-shared" "0.4.3" + ref-array-di "^1.2.2" + ref-struct-di "^1.1.1" + +"@openwallet-foundation/askar-shared@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@openwallet-foundation/askar-shared/-/askar-shared-0.4.3.tgz#e1e4576e347c922c18a3a6abd452945060bb1520" + integrity sha512-Zt9zlvjJxNs8UWlnRydZH594Lak15YPHY72VT1+iDbXh0OjTdyq6Bf0FIsh9sfFnRYIgh2zd8+VoXxZ07GjADA== + dependencies: + buffer "^6.0.3" + tar "^7.4.3" "@paralleldrive/cuid2@^2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz#7f91364d53b89e2c9cb9e02e8dd0f129e834455f" - integrity sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz#3d62ea9e7be867d3fa94b9897fab5b0ae187d784" + integrity sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw== dependencies: "@noble/hashes" "^1.1.5" -"@peculiar/asn1-cms@^2.3.13", "@peculiar/asn1-cms@^2.3.15": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.3.15.tgz#8baf1fcf51dae2e9122126e13acf6a2e1698d35c" - integrity sha512-B+DoudF+TCrxoJSTjjcY8Mmu+lbv8e7pXGWrhNp2/EGJp9EEcpzjBCar7puU57sGifyzaRVM03oD5L7t7PghQg== +"@peculiar/asn1-cms@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz#88267055c460ca806651f916315a934c1b1ac994" + integrity sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA== dependencies: - "@peculiar/asn1-schema" "^2.3.15" - "@peculiar/asn1-x509" "^2.3.15" - "@peculiar/asn1-x509-attr" "^2.3.15" - asn1js "^3.0.5" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + "@peculiar/asn1-x509-attr" "^2.6.0" + asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-csr@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.3.15.tgz#a99375f2ffde6e759c70f73ce5c6600101457a57" - integrity sha512-caxAOrvw2hUZpxzhz8Kp8iBYKsHbGXZPl2KYRMIPvAfFateRebS3136+orUpcVwHRmpXWX2kzpb6COlIrqCumA== +"@peculiar/asn1-csr@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz#a7eff845b0020720070a12f38f26effb9fdab158" + integrity sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ== dependencies: - "@peculiar/asn1-schema" "^2.3.15" - "@peculiar/asn1-x509" "^2.3.15" - asn1js "^3.0.5" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-ecc@^2.3.14", "@peculiar/asn1-ecc@^2.3.8": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.3.15.tgz#2301cff76a089bfa2ec93b4cfd9071a382aa677f" - integrity sha512-/HtR91dvgog7z/WhCVdxZJ/jitJuIu8iTqiyWVgRE9Ac5imt2sT/E4obqIVGKQw7PIy+X6i8lVBoT6wC73XUgA== +"@peculiar/asn1-ecc@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz#4846d39712a1a2b4786c2d6ea27b19a6dcc05ef5" + integrity sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw== dependencies: - "@peculiar/asn1-schema" "^2.3.15" - "@peculiar/asn1-x509" "^2.3.15" - asn1js "^3.0.5" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-pfx@^2.3.15": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.3.15.tgz#644b189e8ac88aa31ab96288fe79838106624c11" - integrity sha512-E3kzQe3J2xV9DP6SJS4X6/N1e4cYa2xOAK46VtvpaRk8jlheNri8v0rBezKFVPB1rz/jW8npO+u1xOvpATFMWg== - dependencies: - "@peculiar/asn1-cms" "^2.3.15" - "@peculiar/asn1-pkcs8" "^2.3.15" - "@peculiar/asn1-rsa" "^2.3.15" - "@peculiar/asn1-schema" "^2.3.15" - asn1js "^3.0.5" +"@peculiar/asn1-pfx@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz#4c8ed3050cdd5b3e63ec4192bf8f646d9e06e3f5" + integrity sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-pkcs8" "^2.6.0" + "@peculiar/asn1-rsa" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-pkcs8@^2.3.15": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.3.15.tgz#ecfa5152ecdf24164887c6fa3170163476c40fd5" - integrity sha512-/PuQj2BIAw1/v76DV1LUOA6YOqh/UvptKLJHtec/DQwruXOCFlUo7k6llegn8N5BTeZTWMwz5EXruBw0Q10TMg== +"@peculiar/asn1-pkcs8@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz#c426caf81cb49935c553b591e0273b4b44d1696f" + integrity sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA== dependencies: - "@peculiar/asn1-schema" "^2.3.15" - "@peculiar/asn1-x509" "^2.3.15" - asn1js "^3.0.5" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-pkcs9@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.3.15.tgz#91c55fd0c0134983a6bd2bae7de026c59a7080de" - integrity sha512-yiZo/1EGvU1KiQUrbcnaPGWc0C7ElMMskWn7+kHsCFm+/9fU0+V1D/3a5oG0Jpy96iaXggQpA9tzdhnYDgjyFg== - dependencies: - "@peculiar/asn1-cms" "^2.3.15" - "@peculiar/asn1-pfx" "^2.3.15" - "@peculiar/asn1-pkcs8" "^2.3.15" - "@peculiar/asn1-schema" "^2.3.15" - "@peculiar/asn1-x509" "^2.3.15" - "@peculiar/asn1-x509-attr" "^2.3.15" - asn1js "^3.0.5" +"@peculiar/asn1-pkcs9@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz#96b57122228a0e2e30e81118cd3baa570c13a51d" + integrity sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-pfx" "^2.6.0" + "@peculiar/asn1-pkcs8" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + "@peculiar/asn1-x509-attr" "^2.6.0" + asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-rsa@^2.3.13", "@peculiar/asn1-rsa@^2.3.15": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.3.15.tgz#0e24aadcc96b34f57b488c6c95e3eedbb1cb1c73" - integrity sha512-p6hsanvPhexRtYSOHihLvUUgrJ8y0FtOM97N5UEpC+VifFYyZa0iZ5cXjTkZoDwxJ/TTJ1IJo3HVTB2JJTpXvg== +"@peculiar/asn1-rsa@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz#49d905ab67ae8aa54e996734f37a391bb7958747" + integrity sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w== dependencies: - "@peculiar/asn1-schema" "^2.3.15" - "@peculiar/asn1-x509" "^2.3.15" - asn1js "^3.0.5" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-schema@^2.3.13", "@peculiar/asn1-schema@^2.3.15", "@peculiar/asn1-schema@^2.3.8": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.15.tgz#e926bfdeed51945a06f38be703499e7d8341a5d3" - integrity sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w== +"@peculiar/asn1-schema@^2.3.13", "@peculiar/asn1-schema@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz#0dca1601d5b0fed2a72fed7a5f1d0d7dbe3a6f82" + integrity sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg== dependencies: - asn1js "^3.0.5" + asn1js "^3.0.6" pvtsutils "^1.3.6" tslib "^2.8.1" -"@peculiar/asn1-x509-attr@^2.3.15": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.3.15.tgz#036ea4ff68427fa9b51d6adb7051b7f1f91091b4" - integrity sha512-TWJVJhqc+IS4MTEML3l6W1b0sMowVqdsnI4dnojg96LvTuP8dga9f76fjP07MUuss60uSyT2ckoti/2qHXA10A== +"@peculiar/asn1-x509-attr@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz#057cb0c3c600a259c9f40582ee5fd7f0114c5be6" + integrity sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA== dependencies: - "@peculiar/asn1-schema" "^2.3.15" - "@peculiar/asn1-x509" "^2.3.15" - asn1js "^3.0.5" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + asn1js "^3.0.6" tslib "^2.8.1" -"@peculiar/asn1-x509@^2.3.13", "@peculiar/asn1-x509@^2.3.15", "@peculiar/asn1-x509@^2.3.8": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.3.15.tgz#55adc616a075512ace64128eb34a9e071841ab14" - integrity sha512-0dK5xqTqSLaxv1FHXIcd4Q/BZNuopg+u1l23hT9rOmQ1g4dNtw0g/RnEi+TboB0gOwGtrWn269v27cMgchFIIg== +"@peculiar/asn1-x509@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz#9aa0784b455ca34095fdc91a5cc52869e21528dd" + integrity sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA== dependencies: - "@peculiar/asn1-schema" "^2.3.15" - asn1js "^3.0.5" + "@peculiar/asn1-schema" "^2.6.0" + asn1js "^3.0.6" pvtsutils "^1.3.6" tslib "^2.8.1" @@ -2308,43 +2118,32 @@ dependencies: tslib "^2.0.0" -"@peculiar/webcrypto@^1.0.22": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz#9e57174c02c1291051c553600347e12b81469e10" - integrity sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg== - dependencies: - "@peculiar/asn1-schema" "^2.3.8" - "@peculiar/json-schema" "^1.1.12" - pvtsutils "^1.3.5" - tslib "^2.6.2" - webcrypto-core "^1.8.0" - -"@peculiar/x509@^1.11.0": - version "1.12.3" - resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.12.3.tgz#af3db2c637a861d9bd6ca29c4bd659048d8d42b1" - integrity sha512-+Mzq+W7cNEKfkNZzyLl6A6ffqc3r21HGZUezgfKxpZrkORfOqgRXnS80Zu0IV6a9Ue9QBJeKD7kN0iWfc3bhRQ== - dependencies: - "@peculiar/asn1-cms" "^2.3.13" - "@peculiar/asn1-csr" "^2.3.13" - "@peculiar/asn1-ecc" "^2.3.14" - "@peculiar/asn1-pkcs9" "^2.3.13" - "@peculiar/asn1-rsa" "^2.3.13" - "@peculiar/asn1-schema" "^2.3.13" - "@peculiar/asn1-x509" "^2.3.13" - pvtsutils "^1.3.5" +"@peculiar/x509@^1.14.3": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.14.3.tgz#2c44c2b89474346afec38a0c2803ec4fb8ce959e" + integrity sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-csr" "^2.6.0" + "@peculiar/asn1-ecc" "^2.6.0" + "@peculiar/asn1-pkcs9" "^2.6.0" + "@peculiar/asn1-rsa" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + pvtsutils "^1.3.6" reflect-metadata "^0.2.2" - tslib "^2.7.0" - tsyringe "^4.8.0" + tslib "^2.8.1" + tsyringe "^4.10.0" "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@pkgr/core@^0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.4.tgz#d897170a2b0ba51f78a099edccd968f7b103387c" - integrity sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw== +"@pkgr/core@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" + integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -2409,17 +2208,25 @@ resolved "https://registry.yarnpkg.com/@scarf/scarf/-/scarf-1.4.0.tgz#3bbb984085dbd6d982494538b523be1ce6562972" integrity sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ== -"@sd-jwt/core@0.7.2", "@sd-jwt/core@^0.7.0": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@sd-jwt/core/-/core-0.7.2.tgz#cfbcd853d507e2c31bf66ea5b2c1748291924ec3" - integrity sha512-vix1GplUFc1A9H42r/yXkg7cKYthggyqZEwlFdsBbn4xdZNE+AHVF4N7kPa1pPxipwN3UIHd4XnQ5MJV15mhsQ== +"@sd-jwt/core@0.19.0", "@sd-jwt/core@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@sd-jwt/core/-/core-0.19.0.tgz#b0e2cdc6e4d408de6696de13ffd635a47d921426" + integrity sha512-/FeuQjzQFtnxDsHF64Bw+3uixVogNkXlMGBo1CKWrxB/OLNqtGXQZplKBRZMJWgnOJEqDwD6750wrOxsVly6mg== dependencies: - "@sd-jwt/decode" "0.7.2" - "@sd-jwt/present" "0.7.2" - "@sd-jwt/types" "0.7.2" - "@sd-jwt/utils" "0.7.2" + "@sd-jwt/decode" "0.19.0" + "@sd-jwt/present" "0.19.0" + "@sd-jwt/types" "0.19.0" + "@sd-jwt/utils" "0.19.0" + +"@sd-jwt/decode@0.19.0", "@sd-jwt/decode@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@sd-jwt/decode/-/decode-0.19.0.tgz#e36ce30a6c890bd6af8afd5137ec9a186f0fba60" + integrity sha512-gRfpJseFRy3bFMdlmJjVjuEcLNuekpiZJD2F2luJIKVlk26AEjZSJf6377vwNySa8hb+i4MZDwdy14lcTTmqtA== + dependencies: + "@sd-jwt/types" "0.19.0" + "@sd-jwt/utils" "0.19.0" -"@sd-jwt/decode@0.7.2", "@sd-jwt/decode@^0.7.0", "@sd-jwt/decode@^0.7.2": +"@sd-jwt/decode@0.7.2", "@sd-jwt/decode@^0.7.2": version "0.7.2" resolved "https://registry.yarnpkg.com/@sd-jwt/decode/-/decode-0.7.2.tgz#a0dd90d82c0b8b5e68adb22257a3db4b72de8529" integrity sha512-dan2LSvK63SKwb62031G4r7TE4TaiI0EK1KbPXqS+LCXNkNDUHqhtYp9uOpj+grXceCsMtMa2f8VnUfsjmwHHg== @@ -2427,16 +2234,33 @@ "@sd-jwt/types" "0.7.2" "@sd-jwt/utils" "0.7.2" -"@sd-jwt/jwt-status-list@0.7.2", "@sd-jwt/jwt-status-list@^0.7.0": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@sd-jwt/jwt-status-list/-/jwt-status-list-0.7.2.tgz#13cd1b4abbcb08217a44efb59f0fd2a134fe398a" - integrity sha512-o/Mg/Zg21poFsPXuxtPD9sdXq2b/0L+rb9gxU2k1rp1aT+DWmqD0k8v0Ttr2tlMc8l1xXQNA8FLXbL1AdLRmbQ== +"@sd-jwt/decode@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@sd-jwt/decode/-/decode-0.9.2.tgz#3f2df7b22bfce1ff4640f46b1e51d513c9c1446d" + integrity sha512-jHY7hqk7EMkp6E2cB13QmXvRZN7njvAveVh+zKKy0kxpAM7DmcR4TqcDA4mc5y4lP8zWFUgbk7oGLCx2wiBq+w== dependencies: - "@sd-jwt/types" "0.7.2" - base64url "^3.0.1" + "@sd-jwt/types" "0.9.2" + "@sd-jwt/utils" "0.9.2" + +"@sd-jwt/jwt-status-list@0.19.0", "@sd-jwt/jwt-status-list@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@sd-jwt/jwt-status-list/-/jwt-status-list-0.19.0.tgz#54d5352713948905a93eae8a323b2458410875df" + integrity sha512-Xhh0n0DKe3paEtNNQSScy4dtA0ZVKF2OrmDcIB2jm77Doh4xsSs1pOseGEWBs9fmAe5Y0m082wgkmQnWEV53IQ== + dependencies: + "@sd-jwt/types" "0.19.0" + "@sd-jwt/utils" "0.19.0" pako "^2.1.0" -"@sd-jwt/present@0.7.2", "@sd-jwt/present@^0.7.2": +"@sd-jwt/present@0.19.0", "@sd-jwt/present@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@sd-jwt/present/-/present-0.19.0.tgz#0137cebdc80354fb590b2562537f0ed04268f58e" + integrity sha512-WXDwqwUXmtyj7YZ5c+wb26ZBeVOsKXCbCI7s1pRH9ngIjFNDGgAZoVCOmLq8pPgWSJzOTgJe3ErO2k63ZwhyeQ== + dependencies: + "@sd-jwt/decode" "0.19.0" + "@sd-jwt/types" "0.19.0" + "@sd-jwt/utils" "0.19.0" + +"@sd-jwt/present@^0.7.2": version "0.7.2" resolved "https://registry.yarnpkg.com/@sd-jwt/present/-/present-0.7.2.tgz#23e521cda6adf6ce9f73fcda64502ea7c45f61c3" integrity sha512-mQV85u2+mLLy2VZ9Wx2zpaB6yTDnbhCfWkP7eeCrzJQHBKAAHko8GrylEFmLKewFIcajS/r4lT/zHOsCkp5pZw== @@ -2445,21 +2269,40 @@ "@sd-jwt/types" "0.7.2" "@sd-jwt/utils" "0.7.2" -"@sd-jwt/sd-jwt-vc@^0.7.0": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@sd-jwt/sd-jwt-vc/-/sd-jwt-vc-0.7.2.tgz#565a4fcebfe97915a995fd26b0e3cb1fdd56ff6a" - integrity sha512-rryYmnoJHRSNqHcrs0Atta+bfJzU2yT7mYumR2D4lTfxJKWZd0OHHFq57uZSEm/wXPI6uytUJXYbEboCqLUAtw== +"@sd-jwt/sd-jwt-vc@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@sd-jwt/sd-jwt-vc/-/sd-jwt-vc-0.19.0.tgz#c9c936483e120fda0745a13d157b722a329ff986" + integrity sha512-sjX9/E32X0HNpOM5b9np2fHSS9CJu72JDkGEuaHTfZTLTmgh1Cj6KhP7kwI1Bxhw0CCt7tjhrAmMvEEIbgIwVg== dependencies: - "@sd-jwt/core" "0.7.2" - "@sd-jwt/jwt-status-list" "0.7.2" - "@sd-jwt/utils" "0.7.2" + "@sd-jwt/core" "0.19.0" + "@sd-jwt/jwt-status-list" "0.19.0" + "@sd-jwt/utils" "0.19.0" + zod "^4.3.5" -"@sd-jwt/types@0.7.2", "@sd-jwt/types@^0.7.0", "@sd-jwt/types@^0.7.2": +"@sd-jwt/types@0.19.0", "@sd-jwt/types@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@sd-jwt/types/-/types-0.19.0.tgz#83fb2f01c3a697d46ff572a1ef3c487530a22425" + integrity sha512-nfuC9zRLKe7o4HSvc+N4ojWRAxo4JGfgcNWpR7bJloLUlnE9eQuu9h9pEaJZht7KRwMpGorNTIdYpoi1btuiew== + +"@sd-jwt/types@0.7.2", "@sd-jwt/types@^0.7.2": version "0.7.2" resolved "https://registry.yarnpkg.com/@sd-jwt/types/-/types-0.7.2.tgz#29b5bf923eaed041b1375624afd7ce522f954f66" integrity sha512-1NRKowiW0ZiB9SGLApLPBH4Xk8gDQJ+nA9NdZ+uy6MmJKLEwjuJxO7yTvRIv/jX/0/Ebh339S7Kq4RD2AiFuRg== -"@sd-jwt/utils@0.7.2", "@sd-jwt/utils@^0.7.0": +"@sd-jwt/types@0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@sd-jwt/types/-/types-0.9.2.tgz#17a9d62e36d9863b2c20a127be22a3e77005a6a8" + integrity sha512-eV/MY80ekeTrqaohzPpkrgwPki6Igx69D6RniduV1Ehv6o/zaJQ2F0hY/RqBAkJhQtBQoOzouwKYHme40k1Dlw== + +"@sd-jwt/utils@0.19.0", "@sd-jwt/utils@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@sd-jwt/utils/-/utils-0.19.0.tgz#2df84d6564fc487aede095e2dfaa7204e8a83b83" + integrity sha512-bDwDRjfxMBNOsAXY8q8hnxQq7jdOWxrdqTK926Mxt8DN+ttXbXbZIPLwSh84M90WP0V7+WdkXlZD31iISzUR3w== + dependencies: + "@sd-jwt/types" "0.19.0" + js-base64 "^3.7.8" + +"@sd-jwt/utils@0.7.2": version "0.7.2" resolved "https://registry.yarnpkg.com/@sd-jwt/utils/-/utils-0.7.2.tgz#4309fa2f5ebe214947de4fb07a1e06a70c29710b" integrity sha512-aMPY7uHRMgyI5PlDvEiIc+eBFGC1EM8OCQRiEjJ8HGN0pajWMYj0qwSw7pS90A49/DsYU1a5Zpvb7nyjgGH0Yg== @@ -2467,6 +2310,14 @@ "@sd-jwt/types" "0.7.2" js-base64 "^3.7.6" +"@sd-jwt/utils@0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@sd-jwt/utils/-/utils-0.9.2.tgz#7e15091a5b7c636379932014f1fedb1713dc4217" + integrity sha512-GpTD0isav2f+JyMyzeyf6wV3nYcD5e3oL+sVVr/61Y3oaIBGMWLtGGGhBRMCimSnd8kbb0P9jLxvp7ioASk6vw== + dependencies: + "@sd-jwt/types" "0.9.2" + js-base64 "^3.7.6" + "@sideway/address@^4.1.5": version "4.1.5" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" @@ -2508,83 +2359,80 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@sovpro/delimited-stream@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz#4334bba7ee241036e580fdd99c019377630d26b4" - integrity sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw== - -"@sphereon/kmp-mdl-mdoc@0.2.0-SNAPSHOT.22": - version "0.2.0-SNAPSHOT.22" - resolved "https://registry.yarnpkg.com/@sphereon/kmp-mdl-mdoc/-/kmp-mdl-mdoc-0.2.0-SNAPSHOT.22.tgz#958ed3831fba25175f80333c7287842dca332fc0" - integrity sha512-uAZZExVy+ug9JLircejWa5eLtAZ7bnBP6xb7DO2+86LRsHNLh2k2jMWJYxp+iWtGHTsh6RYsZl14ScQLvjiQ/A== +"@sphereon/kmp-mdoc-core@0.2.0-SNAPSHOT.26": + version "0.2.0-SNAPSHOT.26" + resolved "https://registry.yarnpkg.com/@sphereon/kmp-mdoc-core/-/kmp-mdoc-core-0.2.0-SNAPSHOT.26.tgz#fb5372a6b76cccad1d641bbdca72fbeae268a7a2" + integrity sha512-QXJ6R8ENiZV2rPMbn06cw5JKwqUYN1kzVRbYfONqE1PEXx1noQ4md7uxr2zSczi0ubKkNcbyYDNtIMTZIhGzmQ== dependencies: "@js-joda/core" "5.6.3" "@js-joda/timezone" "2.3.0" format-util "^1.0.5" -"@sphereon/pex-models@^2.3.1": +"@sphereon/pex-models@^2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@sphereon/pex-models/-/pex-models-2.3.2.tgz#88bb330745ef8011e4b13fb0a586593095888c6e" integrity sha512-foFxfLkRwcn/MOp/eht46Q7wsvpQGlO7aowowIIb5Tz9u97kYZ2kz6K2h2ODxWuv5CRA7Q0MY8XUBGE2lfOhOQ== -"@sphereon/ssi-types@0.30.2-next.135": - version "0.30.2-next.135" - resolved "https://registry.yarnpkg.com/@sphereon/ssi-types/-/ssi-types-0.30.2-next.135.tgz#bcdbfa6351ff88d1458f31a63f574671215da266" - integrity sha512-YLQfFMPUlOJUxHbOS9v01nG3cgLwTk3d95/rTnOmEQx9kXgXjoXdvt7D0uGcMRL3RHeQ9biT/jWY//mDvCirVQ== +"@sphereon/ssi-types@0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@sphereon/ssi-types/-/ssi-types-0.33.0.tgz#866a8c7d369cd1033351293e5f5cf9fdf40cb560" + integrity sha512-OQnWLKZQU6lHlMw3JS5308q5Kctv1eT/NNQthGNXETarsgJFiD711pWMOJvi0p5kLpU8N1e7/okaH3mXsVAW0A== dependencies: - "@sd-jwt/decode" "^0.7.2" - "@sphereon/kmp-mdl-mdoc" "0.2.0-SNAPSHOT.22" + "@noble/hashes" "1.6.1" + "@sd-jwt/decode" "^0.9.2" + "@sphereon/kmp-mdoc-core" "0.2.0-SNAPSHOT.26" debug "^4.3.5" events "^3.3.0" - jwt-decode "^3.1.2" + jwt-decode "^4.0.0" + uint8arrays "3.1.1" -"@stablelib/binary@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" - integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== +"@stablelib/binary@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-2.0.1.tgz#65c36a24e2c65f375e4c5c4cb340b9112d9badb6" + integrity sha512-U9iAO8lXgEDONsA0zPPSgcf3HUBNAqHiJmSHgZz62OvC3Hi2Bhc5kTnQ3S1/L+sthDTHtCMhcEiklmIly6uQ3w== dependencies: - "@stablelib/int" "^1.0.1" + "@stablelib/int" "^2.0.1" -"@stablelib/ed25519@^1.0.1", "@stablelib/ed25519@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.3.tgz#f8fdeb6f77114897c887bb6a3138d659d3f35996" - integrity sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== +"@stablelib/ed25519@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-2.0.2.tgz#f6fed271a53fff607043f2a20ae67ec1dd39e275" + integrity sha512-d/lJ5sgzhtmpMIbKFWfev+i6WebBdIzzBpMzXtZdvUijoksjXosYFNqytoMj7cRshNj+/XTLYnnVMdZfd+penw== dependencies: - "@stablelib/random" "^1.0.2" - "@stablelib/sha512" "^1.0.1" - "@stablelib/wipe" "^1.0.1" + "@stablelib/random" "^2.0.1" + "@stablelib/sha512" "^2.0.1" + "@stablelib/wipe" "^2.0.1" -"@stablelib/hash@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" - integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== +"@stablelib/hash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-2.0.0.tgz#7b74c372dc07187e273844e970a475f1338e92cf" + integrity sha512-u3WPSqGido8lwJuMcrBgM5K54LrPGhkWAdtsyccf7dGsLixAZUds77zOAbu7bvKPwQlmoByH0txBi5rTmEKuHg== -"@stablelib/int@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" - integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== +"@stablelib/int@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-2.0.1.tgz#daf262843b158e6bb99ec029a14378ecdda2230f" + integrity sha512-Ht63fQp3wz/F8U4AlXEPb7hfJOIILs8Lq55jgtD7KueWtyjhVuzcsGLSTAWtZs3XJDZYdF1WcSKn+kBtbzupww== -"@stablelib/random@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" - integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== +"@stablelib/random@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-2.0.1.tgz#b082eee976684a970d5f28ffbdea074a83ad2475" + integrity sha512-W6GAtXEEs7r+dSbuBsvoFmlyL3gLxle41tQkjKu17dDWtDdjhVUbtRfRCQcCUeczwkgjQxMPopgwYEvxXtHXGw== dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" + "@stablelib/binary" "^2.0.1" + "@stablelib/wipe" "^2.0.1" -"@stablelib/sha512@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" - integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== +"@stablelib/sha512@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-2.0.1.tgz#a9411c9db9a7a88ec42b91da9e604e8d7f7967eb" + integrity sha512-DUNe5cbnoH3sSIN+MG04RvTCLXtkbyy/SnQxiNO+GgF/KSXkkUSlF6mUVvCUdZBZ2X3NgogR+tAvaRSn8wxnLw== dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" + "@stablelib/binary" "^2.0.1" + "@stablelib/hash" "^2.0.0" + "@stablelib/wipe" "^2.0.1" -"@stablelib/wipe@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" - integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== +"@stablelib/wipe@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-2.0.1.tgz#9bc1d20519aa4fc513fe1992cf8061bab33c3049" + integrity sha512-1eU2K9EgOcV4qc9jcP6G72xxZxEm5PfeI5H55l08W95b4oRJaqhmlWRc4xZAm6IVSKhVNxMi66V67hCzzuMTAg== "@szmarczak/http-timer@^4.0.5": version "4.0.6" @@ -2594,9 +2442,9 @@ defer-to-connect "^2.0.0" "@tsconfig/node10@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" - integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + version "1.0.12" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.12.tgz#be57ceac1e4692b41be9de6be8c32a106636dba4" + integrity sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -2644,10 +2492,10 @@ reflect-metadata "^0.2.2" validator "^13.12.0" -"@tybys/wasm-util@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" - integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== +"@tybys/wasm-util@^0.10.0": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" + integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== dependencies: tslib "^2.4.0" @@ -2685,16 +2533,16 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2" - integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== dependencies: - "@babel/types" "^7.20.7" + "@babel/types" "^7.28.2" "@types/body-parser@*", "@types/body-parser@^1.19.5": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + version "1.19.6" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" + integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== dependencies: "@types/connect" "*" "@types/node" "*" @@ -2727,9 +2575,9 @@ integrity sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q== "@types/cookies@*": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.9.1.tgz#083924ca1266e34ff240ca4d4fd6732ee5b81886" - integrity sha512-E/DPgzifH4sM1UMadJMWd6mO2jOd4g1Ejwzx8/uRCDpJis1IrlyQEcGAYEomtAqRYmD5ORbNXMeI9U0RiVGZbg== + version "0.9.2" + resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.9.2.tgz#ccdf86d782f2dea34531dd32733a25be48177cd4" + integrity sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A== dependencies: "@types/connect" "*" "@types/express" "*" @@ -2737,9 +2585,9 @@ "@types/node" "*" "@types/cors@^2.8.18": - version "2.8.18" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.18.tgz#101e033b3ca06695f3d73c587cd7f9eb348135d1" - integrity sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA== + version "2.8.19" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" + integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== dependencies: "@types/node" "*" @@ -2752,48 +2600,28 @@ "@types/json-schema" "*" "@types/estree@*", "@types/estree@^1.0.6": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" - integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== - -"@types/express-serve-static-core@^4.17.33": - version "4.19.6" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" - integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@^5.0.0", "@types/express-serve-static-core@^5.0.6": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz#41fec4ea20e9c7b22f024ab88a95c6bb288f51b8" - integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA== + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz#74f47555b3d804b54cb7030e6f9aa0c7485cfc5b" + integrity sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.2.tgz#7be9e337a5745d6b43ef5b0c352dad94a7f0c256" - integrity sha512-BtjL3ZwbCQriyb0DGw+Rt12qAXPiBTPs815lsUvtt1Grk0vLRMZNMUZ741d5rjk+UQOxfDiBZ3dxpX00vSkK3g== +"@types/express@*", "@types/express@^5.0.2", "@types/express@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.6.tgz#2d724b2c990dcb8c8444063f3580a903f6d500cc" + integrity sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^5.0.0" - "@types/serve-static" "*" - -"@types/express@^4.17.15": - version "4.17.22" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.22.tgz#14cfcf120f7eb56ebb8ca77b7fa9a14d21de7c96" - integrity sha512-eZUmSnhRX9YRSkplpz0N+k6NljUUn5l3EWZIKZvYzhvMphEuNiyyy1viH/ejgt66JWgALwC/gtSUAeQKtSwW/w== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" + "@types/serve-static" "^2" "@types/graceful-fs@^4.1.3": version "4.1.9" @@ -2812,7 +2640,7 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== -"@types/http-errors@*": +"@types/http-errors@*", "@types/http-errors@^2": version "2.0.5" resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== @@ -2855,9 +2683,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/jsonwebtoken@^9.0.9": - version "9.0.9" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz#a4c3a446c0ebaaf467a58398382616f416345fb3" - integrity sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ== + version "9.0.10" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz#a7932a47177dcd4283b6146f3bd5c26d82647f09" + integrity sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA== dependencies: "@types/ms" "*" "@types/node" "*" @@ -2874,14 +2702,28 @@ dependencies: "@types/node" "*" -"@types/koa-compose@*": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.8.tgz#dec48de1f6b3d87f87320097686a915f1e954b57" - integrity sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA== - dependencies: - "@types/koa" "*" - -"@types/koa@*", "@types/koa@^2.15.0": +"@types/koa-compose@*": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.9.tgz#6efb945ee5573be0f4eddb728a2f6826f7a3f395" + integrity sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA== + dependencies: + "@types/koa" "*" + +"@types/koa@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-3.0.1.tgz#2c9ace20ecb33d0cf84d63492af231185eb2aefa" + integrity sha512-VkB6WJUQSe0zBpR+Q7/YIUESGp5wPHcaXr0xueU5W0EOUWtlSbblsl+Kl31lyRQ63nIILh0e/7gXjQ09JXJIHw== + dependencies: + "@types/accepts" "*" + "@types/content-disposition" "*" + "@types/cookies" "*" + "@types/http-assert" "*" + "@types/http-errors" "^2" + "@types/keygrip" "*" + "@types/koa-compose" "*" + "@types/node" "*" + +"@types/koa@^2.15.0": version "2.15.0" resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.15.0.tgz#eca43d76f527c803b491731f95df575636e7b6f2" integrity sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g== @@ -2900,37 +2742,37 @@ resolved "https://registry.yarnpkg.com/@types/methods/-/methods-1.1.4.tgz#d3b7ac30ac47c91054ea951ce9eed07b1051e547" integrity sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ== -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - "@types/ms@*": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/multer@^1.4.12": - version "1.4.12" - resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.12.tgz#da67bd0c809f3a63fe097c458c0d4af1fea50ab7" - integrity sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg== + version "1.4.13" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.13.tgz#be483f909a77f13e0624cac3d001859eb12ae68b" + integrity sha512-bhhdtPw7JqCiEfC9Jimx5LqX9BDIPJEh2q/fQ4bqbBPtyEZYr3cvF22NwG0DmPZNYA0CAf2CnqDB4KIGGpJcaw== dependencies: "@types/express" "*" +"@types/node-cron@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/node-cron/-/node-cron-3.0.11.tgz#70b7131f65038ae63cfe841354c8aba363632344" + integrity sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg== + "@types/node-fetch@^2.6.4": - version "2.6.12" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.12.tgz#8ab5c3ef8330f13100a7479e2cd56d3386830a03" - integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA== + version "2.6.13" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" + integrity sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw== dependencies: "@types/node" "*" - form-data "^4.0.0" + form-data "^4.0.4" -"@types/node@*": - version "22.15.24" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.24.tgz#3b31f1650571c0123388db29d95c12e6f6761744" - integrity sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng== +"@types/node@*", "@types/node@>=13.7.0": + version "24.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.10.1.tgz#91e92182c93db8bd6224fca031e2370cef9a8f01" + integrity sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ== dependencies: - undici-types "~6.21.0" + undici-types "~7.16.0" "@types/node@22.7.5": version "22.7.5" @@ -2939,19 +2781,12 @@ dependencies: undici-types "~6.19.2" -"@types/node@>=13.7.0": - version "24.0.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.4.tgz#dbae889912bda33a7f57669fb8587c1a56bc0c1f" - integrity sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA== - dependencies: - undici-types "~7.8.0" - "@types/node@^20.17.0": - version "20.17.52" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.52.tgz#0cf582371f88529c61f384fcd57a21b797c56c6e" - integrity sha512-2aj++KfxubvW/Lc0YyXE3OEW7Es8TWn1MsRzYgcOGyTNQxi0L8rxQUCZ7ZbyOBWZQD5I63PV9egZWMsapVaklg== + version "20.19.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.25.tgz#467da94a2fd966b57cc39c357247d68047611190" + integrity sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ== dependencies: - undici-types "~6.19.2" + undici-types "~6.21.0" "@types/node@^8.10.50": version "8.10.66" @@ -2997,21 +2832,19 @@ "@types/node" "*" "@types/send@*": - version "0.17.5" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" - integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" + integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== dependencies: - "@types/mime" "^1" "@types/node" "*" -"@types/serve-static@*": - version "1.15.8" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" - integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== +"@types/serve-static@*", "@types/serve-static@^2": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-2.2.0.tgz#d4a447503ead0d1671132d1ab6bd58b805d8de6a" + integrity sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ== dependencies: "@types/http-errors" "*" "@types/node" "*" - "@types/send" "*" "@types/stack-utils@^2.0.0": version "2.0.3" @@ -3059,12 +2892,12 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== -"@types/validator@^13.11.8": - version "13.15.1" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.15.1.tgz#52f3617eb5ba30dd0018380c64568440d0b4de0a" - integrity sha512-9gG6ogYcoI2mCMLdcO0NYI0AYrbxIjv0MDmy/5Ywo6CpWWrqYayc+mmgxRsCgtcGJm9BSbXkMsmxGah1iGHAAQ== +"@types/validator@^13.11.8", "@types/validator@^13.15.3": + version "13.15.10" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.15.10.tgz#742b77ec34d58554b94a76a14cef30d59e3c16b9" + integrity sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA== -"@types/ws@^8.18.1", "@types/ws@^8.5.4": +"@types/ws@^8.18.1": version "8.18.1" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== @@ -3077,9 +2910,9 @@ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.33", "@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + version "17.0.35" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" + integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== dependencies: "@types/yargs-parser" "*" @@ -3091,221 +2924,204 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^8.32.1": - version "8.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz#51ed03649575ba51bcee7efdbfd85283249b5447" - integrity sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ== + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.1.tgz#c772d1dbdd97cfddf85f5a161a97783233643631" + integrity sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.33.0" - "@typescript-eslint/type-utils" "8.33.0" - "@typescript-eslint/utils" "8.33.0" - "@typescript-eslint/visitor-keys" "8.33.0" + "@typescript-eslint/scope-manager" "8.48.1" + "@typescript-eslint/type-utils" "8.48.1" + "@typescript-eslint/utils" "8.48.1" + "@typescript-eslint/visitor-keys" "8.48.1" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" "@typescript-eslint/parser@^8.26.0": - version "8.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.33.0.tgz#8e523c2b447ad7cd6ac91b719d8b37449481784d" - integrity sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ== - dependencies: - "@typescript-eslint/scope-manager" "8.33.0" - "@typescript-eslint/types" "8.33.0" - "@typescript-eslint/typescript-estree" "8.33.0" - "@typescript-eslint/visitor-keys" "8.33.0" + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.48.1.tgz#4e3c66d9ec20683ec142417fafeadab61c479c3f" + integrity sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA== + dependencies: + "@typescript-eslint/scope-manager" "8.48.1" + "@typescript-eslint/types" "8.48.1" + "@typescript-eslint/typescript-estree" "8.48.1" + "@typescript-eslint/visitor-keys" "8.48.1" debug "^4.3.4" -"@typescript-eslint/project-service@8.33.0": - version "8.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.33.0.tgz#71f37ef9010de47bf20963914743c5cbef851e08" - integrity sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A== +"@typescript-eslint/project-service@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.48.1.tgz#cfe1741613b9112d85ae766de9e09b27a7d3f2f1" + integrity sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.33.0" - "@typescript-eslint/types" "^8.33.0" + "@typescript-eslint/tsconfig-utils" "^8.48.1" + "@typescript-eslint/types" "^8.48.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.33.0": - version "8.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz#459cf0c49d410800b1a023b973c62d699b09bf4c" - integrity sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw== +"@typescript-eslint/scope-manager@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.48.1.tgz#8bc70643e7cca57864b1ff95dd350fc27756bec0" + integrity sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w== dependencies: - "@typescript-eslint/types" "8.33.0" - "@typescript-eslint/visitor-keys" "8.33.0" + "@typescript-eslint/types" "8.48.1" + "@typescript-eslint/visitor-keys" "8.48.1" -"@typescript-eslint/tsconfig-utils@8.33.0", "@typescript-eslint/tsconfig-utils@^8.33.0": - version "8.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz#316adab038bbdc43e448781d5a816c2973eab73e" - integrity sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug== +"@typescript-eslint/tsconfig-utils@8.48.1", "@typescript-eslint/tsconfig-utils@^8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.1.tgz#68139ce2d258f984e2b33a95389158f1212af646" + integrity sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw== -"@typescript-eslint/type-utils@8.33.0": - version "8.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz#f06124b2d6db8a51b24990cb123c9543af93fef5" - integrity sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ== +"@typescript-eslint/type-utils@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.48.1.tgz#955bd3ddd648450f0a627925ff12ade63fb7516d" + integrity sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg== dependencies: - "@typescript-eslint/typescript-estree" "8.33.0" - "@typescript-eslint/utils" "8.33.0" + "@typescript-eslint/types" "8.48.1" + "@typescript-eslint/typescript-estree" "8.48.1" + "@typescript-eslint/utils" "8.48.1" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.33.0", "@typescript-eslint/types@^8.33.0": - version "8.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.33.0.tgz#02a7dbba611a8abf1ad2a9e00f72f7b94b5ab0ee" - integrity sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg== +"@typescript-eslint/types@8.48.1", "@typescript-eslint/types@^8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.48.1.tgz#a9ff808f5f798f28767d5c0b015a88fa7ce46bd7" + integrity sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q== -"@typescript-eslint/typescript-estree@8.33.0": - version "8.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz#abcc1d3db75a8e9fd2e274ee8c4099fa2399abfd" - integrity sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ== +"@typescript-eslint/typescript-estree@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.1.tgz#0d0e31fc47c5796c6463ab50cde19e1718d465b1" + integrity sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg== dependencies: - "@typescript-eslint/project-service" "8.33.0" - "@typescript-eslint/tsconfig-utils" "8.33.0" - "@typescript-eslint/types" "8.33.0" - "@typescript-eslint/visitor-keys" "8.33.0" + "@typescript-eslint/project-service" "8.48.1" + "@typescript-eslint/tsconfig-utils" "8.48.1" + "@typescript-eslint/types" "8.48.1" + "@typescript-eslint/visitor-keys" "8.48.1" debug "^4.3.4" - fast-glob "^3.3.2" - is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" + tinyglobby "^0.2.15" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.33.0": - version "8.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.33.0.tgz#574ad5edee371077b9e28ca6fb804f2440f447c1" - integrity sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw== +"@typescript-eslint/utils@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.48.1.tgz#6cf7b99e0943b33a983ef687b9a86b65578b5c32" + integrity sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.33.0" - "@typescript-eslint/types" "8.33.0" - "@typescript-eslint/typescript-estree" "8.33.0" + "@typescript-eslint/scope-manager" "8.48.1" + "@typescript-eslint/types" "8.48.1" + "@typescript-eslint/typescript-estree" "8.48.1" -"@typescript-eslint/visitor-keys@8.33.0": - version "8.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz#fbae16fd3594531f8cad95d421125d634e9974fe" - integrity sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ== +"@typescript-eslint/visitor-keys@8.48.1": + version "8.48.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.1.tgz#247d4fe6dcc044f45b7f1c15110bf95e5d73b334" + integrity sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q== dependencies: - "@typescript-eslint/types" "8.33.0" - eslint-visitor-keys "^4.2.0" + "@typescript-eslint/types" "8.48.1" + eslint-visitor-keys "^4.2.1" -"@unimodules/core@*": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@unimodules/core/-/core-7.1.2.tgz#5181b99586476a5d87afd0958f26a04714c47fa1" - integrity sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg== - dependencies: - compare-versions "^3.4.0" - -"@unimodules/react-native-adapter@*": - version "6.3.9" - resolved "https://registry.yarnpkg.com/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz#2f4bef6b7532dce5bf9f236e69f96403d0243c30" - integrity sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw== - dependencies: - expo-modules-autolinking "^0.0.3" - invariant "^2.2.4" - -"@unrs/resolver-binding-darwin-arm64@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.8.tgz#d78b964ed64e16103b5324b50dcb4277afeda4d7" - integrity sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA== - -"@unrs/resolver-binding-darwin-x64@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.8.tgz#d095a6c941b2d7892179c3afbd7c34e2416094fd" - integrity sha512-16yEMWa+Olqkk8Kl6Bu0ltT5OgEedkSAsxcz1B3yEctrDYp3EMBu/5PPAGhWVGnwhtf3hNe3y15gfYBAjOv5tQ== - -"@unrs/resolver-binding-freebsd-x64@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.8.tgz#0330e52103c400d0c9d5d27050bfda39c40ccae2" - integrity sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ== - -"@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.8.tgz#dcc2c61b6c49886c225ad25ab3e73bbaf768d906" - integrity sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg== - -"@unrs/resolver-binding-linux-arm-musleabihf@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.8.tgz#269f5d78cbfdfe3591005c7602bf9c559a6f6928" - integrity sha512-HN0p7o38qKmDo3bZUiQa6gP7Qhf0sKgJZtRfSHi6JL2Gi4NaUVF0EO1sQ1RHbeQ4VvfjUGMh3QE5dxEh06BgQQ== - -"@unrs/resolver-binding-linux-arm64-gnu@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.8.tgz#43c30aeecdb1d36aa2201196568209c46d99c234" - integrity sha512-HsoVqDBt9G69AN0KWeDNJW+7i8KFlwxrbbnJffgTGpiZd6Jw+Q95sqkXp8y458KhKduKLmXfVZGnKBTNxAgPjw== - -"@unrs/resolver-binding-linux-arm64-musl@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.8.tgz#fc6cc665195a1d8f276cc3a83f4956ee3c1c0a6b" - integrity sha512-VfR2yTDUbUvn+e/Aw22CC9fQg9zdShHAfwWctNBdOk7w9CHWl2OtYlcMvjzMAns8QxoHQoqn3/CEnZ4Ts7hfrA== - -"@unrs/resolver-binding-linux-ppc64-gnu@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.8.tgz#bde19d505eab59ce82e812e8824c9d3e17ca71cf" - integrity sha512-xUauVQNz4uDgs4UJJiUAwMe3N0PA0wvtImh7V0IFu++UKZJhssXbKHBRR4ecUJpUHCX2bc4Wc8sGsB6P+7BANg== - -"@unrs/resolver-binding-linux-riscv64-gnu@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.8.tgz#9b96ddfc4e88720d795629ad3c0cd7a2bcc4afa8" - integrity sha512-GqyIB+CuSHGhhc8ph5RrurtNetYJjb6SctSHafqmdGcRuGi6uyTMR8l18hMEhZFsXdFMc/MpInPLvmNV22xn+A== - -"@unrs/resolver-binding-linux-riscv64-musl@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.8.tgz#287690c24f2b8106531968d22ad277af13bca57a" - integrity sha512-eEU3rWIFRv60xaAbtsgwHNWRZGD7cqkpCvNtio/f1TjEE3HfKLzPNB24fA9X/8ZXQrGldE65b7UKK3PmO4eWIQ== - -"@unrs/resolver-binding-linux-s390x-gnu@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.8.tgz#b58bf7ed52f13753c9240fc59c2bd21cc348ee4e" - integrity sha512-GVLI0f4I4TlLqEUoOFvTWedLsJEdvsD0+sxhdvQ5s+N+m2DSynTs8h9jxR0qQbKlpHWpc2Ortz3z48NHRT4l+w== - -"@unrs/resolver-binding-linux-x64-gnu@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.8.tgz#578efe1a96f0e737ec9c65dd9211aff9c4bd4b99" - integrity sha512-GX1pZ/4ncUreB0Rlp1l7bhKAZ8ZmvDIgXdeb5V2iK0eRRF332+6gRfR/r5LK88xfbtOpsmRHU6mQ4N8ZnwvGEA== - -"@unrs/resolver-binding-linux-x64-musl@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.8.tgz#1f1aab9d047a2ab8830a2bb65dee950d7583518b" - integrity sha512-n1N84MnsvDupzVuYqJGj+2pb9s8BI1A5RgXHvtVFHedGZVBCFjDpQVRlmsFMt6xZiKwDPaqsM16O/1isCUGt7w== - -"@unrs/resolver-binding-wasm32-wasi@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.8.tgz#85b627a4bf93d439df5e5c77c135f98699c1aa35" - integrity sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q== - dependencies: - "@napi-rs/wasm-runtime" "^0.2.10" - -"@unrs/resolver-binding-win32-arm64-msvc@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.8.tgz#3acb45dbf6561c7c05d2fb554e36d2c46502bf1c" - integrity sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg== - -"@unrs/resolver-binding-win32-ia32-msvc@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.8.tgz#63628b5e12d14dd6275ec499398272ed5c272479" - integrity sha512-yb3LZOLMFqnA+/ShlE1E5bpYPGDsA590VHHJPB+efnyowT776GJXBoh82em6O9WmYBUq57YblGTcMYAFBm72HA== - -"@unrs/resolver-binding-win32-x64-msvc@1.7.8": - version "1.7.8" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.8.tgz#ee29c817f285ccb328b206356eeee588a7388d2b" - integrity sha512-hHKFx+opG5BA3/owMXon8ypwSotBGTdblG6oda/iOu9+OEYnk0cxD2uIcGyGT8jCK578kV+xMrNxqbn8Zjlpgw== +"@unrs/resolver-binding-android-arm-eabi@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz#9f5b04503088e6a354295e8ea8fe3cb99e43af81" + integrity sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw== + +"@unrs/resolver-binding-android-arm64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz#7414885431bd7178b989aedc4d25cccb3865bc9f" + integrity sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g== + +"@unrs/resolver-binding-darwin-arm64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz#b4a8556f42171fb9c9f7bac8235045e82aa0cbdf" + integrity sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g== + +"@unrs/resolver-binding-darwin-x64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz#fd4d81257b13f4d1a083890a6a17c00de571f0dc" + integrity sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ== + +"@unrs/resolver-binding-freebsd-x64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz#d2513084d0f37c407757e22f32bd924a78cfd99b" + integrity sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz#844d2605d057488d77fab09705f2866b86164e0a" + integrity sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz#204892995cefb6bd1d017d52d097193bc61ddad3" + integrity sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw== + +"@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz#023eb0c3aac46066a10be7a3f362e7b34f3bdf9d" + integrity sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ== + +"@unrs/resolver-binding-linux-arm64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz#9e6f9abb06424e3140a60ac996139786f5d99be0" + integrity sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz#b111417f17c9d1b02efbec8e08398f0c5527bb44" + integrity sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz#92ffbf02748af3e99873945c9a8a5ead01d508a9" + integrity sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ== + +"@unrs/resolver-binding-linux-riscv64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz#0bec6f1258fc390e6b305e9ff44256cb207de165" + integrity sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew== + +"@unrs/resolver-binding-linux-s390x-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz#577843a084c5952f5906770633ccfb89dac9bc94" + integrity sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg== + +"@unrs/resolver-binding-linux-x64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz#36fb318eebdd690f6da32ac5e0499a76fa881935" + integrity sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w== + +"@unrs/resolver-binding-linux-x64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz#bfb9af75f783f98f6a22c4244214efe4df1853d6" + integrity sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA== + +"@unrs/resolver-binding-wasm32-wasi@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz#752c359dd875684b27429500d88226d7cc72f71d" + integrity sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.11" + +"@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz#ce5735e600e4c2fbb409cd051b3b7da4a399af35" + integrity sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw== + +"@unrs/resolver-binding-win32-ia32-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz#72fc57bc7c64ec5c3de0d64ee0d1810317bc60a6" + integrity sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ== + +"@unrs/resolver-binding-win32-x64-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz#538b1e103bf8d9864e7b85cc96fa8d6fb6c40777" + integrity sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g== "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - accepts@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" @@ -3339,10 +3155,10 @@ acorn-walk@^8.1.1: dependencies: acorn "^8.11.0" -acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1: - version "8.14.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" - integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== +acorn@^8.11.0, acorn@^8.14.0, acorn@^8.15.0, acorn@^8.4.1: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== aes-js@3.0.0: version "3.0.0" @@ -3354,13 +3170,6 @@ aes-js@4.0.0-beta.5: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -3378,7 +3187,7 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.12.0: +ajv@^8.0.0, ajv@^8.12.0: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -3401,9 +3210,9 @@ ansi-regex@^5.0.1: integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" @@ -3418,9 +3227,9 @@ ansi-styles@^5.0.0: integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" @@ -3430,19 +3239,6 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -3473,17 +3269,19 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== +array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" array-index@^1.0.0: version "1.0.0" @@ -3493,7 +3291,7 @@ array-index@^1.0.0: debug "^2.2.0" es6-symbol "^3.0.2" -array.prototype.findlastindex@^1.2.5: +array.prototype.findlastindex@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== @@ -3506,7 +3304,7 @@ array.prototype.findlastindex@^1.2.5: es-object-atoms "^1.1.1" es-shim-unscopables "^1.1.0" -array.prototype.flat@^1.3.2: +array.prototype.flat@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== @@ -3516,7 +3314,7 @@ array.prototype.flat@^1.3.2: es-abstract "^1.23.5" es-shim-unscopables "^1.0.2" -array.prototype.flatmap@^1.3.2: +array.prototype.flatmap@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== @@ -3544,12 +3342,7 @@ asap@^2.0.0: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -asmcrypto.js@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz#38fc1440884d802c7bd37d1d23c2b26a5cd5d2d2" - integrity sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA== - -asn1js@^3.0.5: +asn1js@^3.0.5, asn1js@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.6.tgz#53e002ebe00c5f7fd77c1c047c3557d7c04dce25" integrity sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA== @@ -3558,38 +3351,23 @@ asn1js@^3.0.5: pvutils "^1.1.3" tslib "^2.8.1" -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-function@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== -async-mutex@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.4.1.tgz#bccf55b96f2baf8df90ed798cb5544a1f6ee4c2c" - integrity sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA== +async-mutex@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.5.0.tgz#353c69a0b9e75250971a64ac203b0ebfddd75482" + integrity sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA== dependencies: tslib "^2.4.0" -async@^3.2.3: - version "3.2.6" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" @@ -3597,28 +3375,23 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axios@^1.6.3, axios@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.9.0.tgz#25534e3b72b54540077d33046f77e3b8d7081901" - integrity sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg== +axios@1.13.5: + version "1.13.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.5.tgz#5e464688fa127e11a660a2c49441c009f6567a43" + integrity sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q== dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" + follow-redirects "^1.15.11" + form-data "^4.0.5" proxy-from-env "^1.1.0" -b64-lite@^1.3.1, b64-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/b64-lite/-/b64-lite-1.4.0.tgz#e62442de11f1f21c60e38b74f111ac0242283d3d" - integrity sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w== - dependencies: - base-64 "^0.1.0" - -b64u-lite@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/b64u-lite/-/b64u-lite-1.1.0.tgz#a581b7df94cbd4bed7cbb19feae816654f0b1bf0" - integrity sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A== +axios@^1.13.5: + version "1.14.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.14.0.tgz#7c29f4cf2ea91ef05018d5aa5399bf23ed3120eb" + integrity sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ== dependencies: - b64-lite "^1.4.0" + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^2.1.0" babel-jest@^29.7.0: version "29.7.0" @@ -3655,9 +3428,9 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" - integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -3688,49 +3461,15 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-64@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" - integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== - -base64-js@*, base64-js@^1.3.0, base64-js@^1.3.1: +base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64url-universal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-1.1.0.tgz#94da6356c1d43ead55b1d91c045c0a5b09ec8181" - integrity sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA== - dependencies: - base64url "^3.0.0" - -base64url-universal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-2.0.0.tgz#6023785c0e349a90de1cf396e8a4519750a4e67b" - integrity sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw== - dependencies: - base64url "^3.0.1" - -base64url@^3.0.0, base64url@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" - integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -big-integer@^1.6.51: - version "1.6.52" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" - integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== - -bignumber.js@^9.0.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.0.tgz#bdba7e2a4c1a2eba08290e8dcad4f36393c92acd" - integrity sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA== +baseline-browser-mapping@^2.9.0: + version "2.9.4" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.4.tgz#a010e50ea6da48fba78179aef9b6e771d00fff42" + integrity sha512-ZCQ9GEWl73BVm8bu5Fts8nt7MHdbt5vY9bP6WGnUh+r3l8M7CgfyTlwsgCbMC66BNxPr6Xoce3j66Ms5YUQTNA== binary-extensions@^2.0.0: version "2.3.0" @@ -3747,51 +3486,38 @@ bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.2.tgz#82c09f9ebbb17107cd72cb7fd39bd1f9d0aaa566" integrity sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw== -body-parser@1.20.3: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.0.tgz#f7a9656de305249a715b549b7b8fd1ab9dfddcfa" - integrity sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg== +body-parser@^2.2.0, body-parser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.1.tgz#6df606b0eb0a6e3f783dde91dde182c24c82438c" + integrity sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw== dependencies: bytes "^3.1.2" content-type "^1.0.5" - debug "^4.4.0" + debug "^4.4.3" http-errors "^2.0.0" - iconv-lite "^0.6.3" + iconv-lite "^0.7.0" on-finished "^2.4.1" qs "^6.14.0" - raw-body "^3.0.0" - type-is "^2.0.0" + raw-body "^3.0.1" + type-is "^2.0.1" -borc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/borc/-/borc-3.0.0.tgz#49ada1be84de86f57bb1bb89789f34c186dfa4fe" - integrity sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g== +body-parser@~1.20.3: + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== dependencies: - bignumber.js "^9.0.0" - buffer "^6.0.3" - commander "^2.15.0" - ieee754 "^1.1.13" - iso-url "^1.1.5" - json-text-sequence "~0.3.0" - readable-stream "^3.6.0" + bytes "~3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" + type-is "~1.6.18" + unpipe "~1.0.0" brace-expansion@^1.1.7: version "1.1.12" @@ -3821,14 +3547,15 @@ brorand@^1.1.0: integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browserslist@^4.24.0: - version "4.25.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.0.tgz#986aa9c6d87916885da2b50d8eb577ac8d133b2c" - integrity sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA== + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== dependencies: - caniuse-lite "^1.0.30001718" - electron-to-chromium "^1.5.160" - node-releases "^2.0.19" - update-browserslist-db "^1.1.3" + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" bs-logger@^0.2.6: version "0.2.6" @@ -3867,7 +3594,7 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -bytes@3.1.2, bytes@^3.1.2: +bytes@^3.1.2, bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== @@ -3931,24 +3658,17 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001718: - version "1.0.30001720" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz#c138cb6026d362be9d8d7b0e4bcd0183a850edfd" - integrity sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g== +caniuse-lite@^1.0.30001759: + version "1.0.30001759" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz#d569e7b010372c6b0ca3946e30dada0a2e9d5006" + integrity sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw== canonicalize@^1.0.1: version "1.0.8" resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.8.tgz#24d1f1a00ed202faafd9bf8e63352cd4450c6df1" integrity sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A== -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3976,11 +3696,6 @@ chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.2" -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - chownr@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" @@ -4010,6 +3725,15 @@ class-validator@0.14.1: libphonenumber-js "^1.10.53" validator "^13.9.0" +class-validator@^0.14.3: + version "0.14.4" + resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.14.4.tgz#d0084ae847a96264ad5158451a4e66c1c544de96" + integrity sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw== + dependencies: + "@types/validator" "^13.15.3" + libphonenumber-js "^1.11.1" + validator "^13.15.22" + cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -4032,9 +3756,9 @@ co@^4.6.0: integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + version "1.0.3" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== color-convert@^2.0.1: version "2.0.1" @@ -4048,11 +3772,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -4060,27 +3779,12 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@^2.15.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -compare-versions@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" - integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== - compare-versions@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== -component-emitter@^1.3.0: +component-emitter@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== @@ -4090,25 +3794,18 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== +content-disposition@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.1.tgz#a8b7bbeb2904befdfb6787e5c0c086959f605f9b" + integrity sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q== -content-disposition@0.5.4: +content-disposition@~0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" -content-disposition@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.0.tgz#844426cb398f934caefcbb172200126bc7ceace2" - integrity sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg== - dependencies: - safe-buffer "5.2.1" - content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" @@ -4119,22 +3816,17 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - cookie-signature@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== -cookie@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" - integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== +cookie-signature@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== -cookie@^0.7.1: +cookie@^0.7.1, cookie@~0.7.1: version "0.7.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== @@ -4191,11 +3883,6 @@ cross-spawn@^7.0.3, cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" -crypto-ld@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/crypto-ld/-/crypto-ld-6.0.0.tgz#cf8dcf566cb3020bdb27f0279e6cc9b46d031cd7" - integrity sha512-XWL1LslqggNoaCI/m3I7HcvaSt9b2tYzdrXO+jHLUj9G1BvRfvV7ZTFDVY5nifYuIGAPdAGu7unPxLRustw3VA== - d@1, d@^1.0.1, d@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" @@ -4204,16 +3891,6 @@ d@1, d@^1.0.1, d@^1.0.2: es5-ext "^0.10.64" type "^2.7.2" -data-uri-to-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - data-view-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" @@ -4241,6 +3918,13 @@ data-view-byte-offset@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" +dcql@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/dcql/-/dcql-3.0.0.tgz#08d89345f4916bd85ac886cf0a74db54653c4b4a" + integrity sha512-Z1Iq+tDQqPCqWzQVevUVOaYa+NfoplwrwSPvV0JINZpniiN5jq32C4CXsrmELAgSa5Ja7hBKiuYkpZjQFkeHyw== + dependencies: + valibot "1.2.0" + debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -4248,13 +3932,6 @@ debug@2.6.9, debug@^2.2.0: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== - dependencies: - ms "^2.1.3" - debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -4262,10 +3939,17 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" -decode-uri-component@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.7, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +decode-uri-component@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz#2ac4859663c704be22bf7db760a1494a49ab2cc5" + integrity sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ== decompress-response@^6.0.0: version "6.0.0" @@ -4275,9 +3959,9 @@ decompress-response@^6.0.0: mimic-response "^3.1.0" dedent@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.6.0.tgz#79d52d6389b1ffa67d2bcef59ba51847a9d503b2" - integrity sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA== + version "1.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.0.tgz#c1f9445335f0175a96587be245a282ff451446ca" + integrity sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ== deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" @@ -4317,26 +4001,16 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@2.0.0, depd@^2.0.0: +depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -destroy@1.2.0: +destroy@1.2.0, destroy@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -detect-libc@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" - integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== - detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -4373,9 +4047,9 @@ doctrine@^2.1.0: esutils "^2.0.2" dotenv@^16.5.0: - version "16.5.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" - integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== + version "16.6.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" @@ -4398,6 +4072,11 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +ec-compression@0.0.1-alpha.12: + version "0.0.1-alpha.12" + resolved "https://registry.yarnpkg.com/ec-compression/-/ec-compression-0.0.1-alpha.12.tgz#f5c496d1775186e3aef5751f9ec003fd44f729f8" + integrity sha512-rfsgHPnS/q8SiiJyaJ5w+qpkLtvtvEFOXoh40VmjH+Xs1pjzCCKwhd9Un3BQV+1+Qg0es5VQnzwZVJ7fjzfN+A== + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -4410,27 +4089,15 @@ ed25519-signature-2018-context@^1.1.0: resolved "https://registry.yarnpkg.com/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz#68002ea7497c32e8170667cfd67468dedf7d220e" integrity sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA== -ed25519-signature-2020-context@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz#b2f724f07db154ddf0fd6605410d88736e56fd07" - integrity sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg== - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^3.1.10: - version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.5.160: - version "1.5.161" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz#650376bd3be7ff8e581031409fc2d4f150620b12" - integrity sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA== +electron-to-chromium@^1.5.263: + version "1.5.266" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.266.tgz#41ed029b3cf641c4ee071de42954b36dca8f5f4e" + integrity sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg== elliptic@6.6.1: version "6.6.1" @@ -4478,13 +4145,13 @@ end-of-stream@^1.1.0: once "^1.4.0" error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9: +es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: version "1.24.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== @@ -4647,17 +4314,17 @@ escodegen@^1.8.1: source-map "~0.6.1" eslint-config-prettier@^10.1.5: - version "10.1.5" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz#00c18d7225043b6fbce6a665697377998d453782" - integrity sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw== + version "10.1.8" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" + integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== -eslint-import-context@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eslint-import-context/-/eslint-import-context-0.1.6.tgz#42dcd6718beea6279a78015e347d82a1c75f0dfa" - integrity sha512-/e2ZNPDLCrU8niIy0pddcvXuoO2YrKjf3NAIX+60mHJBT4yv7mqCqvVdyCW2E720e25e4S/1OSVef4U6efGLFg== +eslint-import-context@^0.1.8: + version "0.1.9" + resolved "https://registry.yarnpkg.com/eslint-import-context/-/eslint-import-context-0.1.9.tgz#967b0b2f0a90ef4b689125e088f790f0b7756dbe" + integrity sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg== dependencies: get-tsconfig "^4.10.1" - stable-hash "^0.0.5" + stable-hash-x "^0.2.0" eslint-import-resolver-node@^0.3.9: version "0.3.9" @@ -4669,62 +4336,62 @@ eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-import-resolver-typescript@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.1.tgz#3da41dcaa17ddfc520ad2d2d1e30b8ac4e137e8e" - integrity sha512-KHQnjMAn/Hbs1AcMs2YfJTeNoWsaOoMRvJUKr77Y2dv7jNOaT8/IJYlvfN/ZIwTxUsv2B6amwv7u9bt2Vl9lZg== + version "4.4.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz#3e83a9c25f4a053fe20e1b07b47e04e8519a8720" + integrity sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw== dependencies: debug "^4.4.1" - eslint-import-context "^0.1.5" + eslint-import-context "^0.1.8" get-tsconfig "^4.10.1" is-bun-module "^2.0.0" - stable-hash "^0.0.5" + stable-hash-x "^0.2.0" tinyglobby "^0.2.14" - unrs-resolver "^1.7.2" + unrs-resolver "^1.7.11" -eslint-module-utils@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" - integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== dependencies: debug "^3.2.7" eslint-plugin-import@^2.31.0: - version "2.31.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" - integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== dependencies: "@rtsao/scc" "^1.1.0" - array-includes "^3.1.8" - array.prototype.findlastindex "^1.2.5" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.12.0" + eslint-module-utils "^2.12.1" hasown "^2.0.2" - is-core-module "^2.15.1" + is-core-module "^2.16.1" is-glob "^4.0.3" minimatch "^3.1.2" object.fromentries "^2.0.8" object.groupby "^1.0.3" - object.values "^1.2.0" + object.values "^1.2.1" semver "^6.3.1" - string.prototype.trimend "^1.0.8" + string.prototype.trimend "^1.0.9" tsconfig-paths "^3.15.0" eslint-plugin-prettier@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz#54d4748904e58eaf1ffe26c4bffa4986ca7f952b" - integrity sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA== + version "5.5.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz#9d61c4ea11de5af704d4edf108c82ccfa7f2e61c" + integrity sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg== dependencies: prettier-linter-helpers "^1.0.0" - synckit "^0.11.0" + synckit "^0.11.7" -eslint-scope@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.3.0.tgz#10cd3a918ffdd722f5f3f7b5b83db9b23c87340d" - integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ== +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -4734,37 +4401,36 @@ eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" - integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint@^9.27.0: - version "9.27.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.27.0.tgz#a587d3cd5b844b68df7898944323a702afe38979" - integrity sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q== + version "9.39.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.1.tgz#be8bf7c6de77dcc4252b5a8dcb31c2efff74a6e5" + integrity sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.20.0" - "@eslint/config-helpers" "^0.2.1" - "@eslint/core" "^0.14.0" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.27.0" - "@eslint/plugin-kit" "^0.3.1" + "@eslint/js" "9.39.1" + "@eslint/plugin-kit" "^0.4.1" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" - "@types/json-schema" "^7.0.15" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.6" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^8.3.0" - eslint-visitor-keys "^4.2.0" - espree "^10.3.0" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -4790,14 +4456,14 @@ esniff@^2.0.1: event-emitter "^0.3.5" type "^2.7.2" -espree@^10.0.1, espree@^10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" - integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: - acorn "^8.14.0" + acorn "^8.15.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.2.0" + eslint-visitor-keys "^4.2.1" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" @@ -4838,46 +4504,10 @@ etag@^1.8.1, etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -ethers@^5.1.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.8.0.tgz#97858dc4d4c74afce83ea7562fe9493cedb4d377" - integrity sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg== - dependencies: - "@ethersproject/abi" "5.8.0" - "@ethersproject/abstract-provider" "5.8.0" - "@ethersproject/abstract-signer" "5.8.0" - "@ethersproject/address" "5.8.0" - "@ethersproject/base64" "5.8.0" - "@ethersproject/basex" "5.8.0" - "@ethersproject/bignumber" "5.8.0" - "@ethersproject/bytes" "5.8.0" - "@ethersproject/constants" "5.8.0" - "@ethersproject/contracts" "5.8.0" - "@ethersproject/hash" "5.8.0" - "@ethersproject/hdnode" "5.8.0" - "@ethersproject/json-wallets" "5.8.0" - "@ethersproject/keccak256" "5.8.0" - "@ethersproject/logger" "5.8.0" - "@ethersproject/networks" "5.8.0" - "@ethersproject/pbkdf2" "5.8.0" - "@ethersproject/properties" "5.8.0" - "@ethersproject/providers" "5.8.0" - "@ethersproject/random" "5.8.0" - "@ethersproject/rlp" "5.8.0" - "@ethersproject/sha2" "5.8.0" - "@ethersproject/signing-key" "5.8.0" - "@ethersproject/solidity" "5.8.0" - "@ethersproject/strings" "5.8.0" - "@ethersproject/transactions" "5.8.0" - "@ethersproject/units" "5.8.0" - "@ethersproject/wallet" "5.8.0" - "@ethersproject/web" "5.8.0" - "@ethersproject/wordlists" "5.8.0" - -ethers@^6.9.0: - version "6.14.3" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.14.3.tgz#7c4443c165ee59b2964e691600fd4586004b2000" - integrity sha512-qq7ft/oCJohoTcsNPFaXSQUm457MA5iWqkf1Mb11ujONdg7jBI6sAOrHaTi3j0CBqIGFSCeR/RMc+qwRRub7IA== +ethers@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.16.0.tgz#fff9b4f05d7a359c774ad6e91085a800f7fccf65" + integrity sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A== dependencies: "@adraffy/ens-normalize" "1.10.1" "@noble/curves" "1.2.0" @@ -4895,11 +4525,6 @@ event-emitter@^0.3.5: d "1" es5-ext "~0.10.14" -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -4936,78 +4561,61 @@ expect@^29.0.0, expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -expo-modules-autolinking@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz#45ba8cb1798f9339347ae35e96e9cc70eafb3727" - integrity sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw== - dependencies: - chalk "^4.1.0" - commander "^7.2.0" - fast-glob "^3.2.5" - find-up "~5.0.0" - fs-extra "^9.1.0" - -expo-random@*: - version "14.0.1" - resolved "https://registry.yarnpkg.com/expo-random/-/expo-random-14.0.1.tgz#aedc6a3b6ff86c74a85989d77d20e0f1762ed669" - integrity sha512-gX2mtR9o+WelX21YizXUCD/y+a4ZL+RDthDmFkHxaYbdzjSYTn8u/igoje/l3WEO+/RYspmqUFa8w/ckNbt6Vg== - dependencies: - base64-js "^1.3.0" - express-rate-limit@^7.5.0: - version "7.5.0" - resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.0.tgz#6a67990a724b4fbbc69119419feef50c51e8b28f" - integrity sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg== + version "7.5.1" + resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.1.tgz#8c3a42f69209a3a1c969890070ece9e20a879dec" + integrity sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw== -express@^4.17.1, express@^4.21.2: - version "4.21.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" - integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== +express@^4.21.2: + version "4.22.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" + integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" + body-parser "~1.20.3" + content-disposition "~0.5.4" content-type "~1.0.4" - cookie "0.7.1" - cookie-signature "1.0.6" + cookie "~0.7.1" + cookie-signature "~1.0.6" debug "2.6.9" depd "2.0.0" encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.3.1" - fresh "0.5.2" - http-errors "2.0.0" + finalhandler "~1.3.1" + fresh "~0.5.2" + http-errors "~2.0.0" merge-descriptors "1.0.3" methods "~1.1.2" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.12" + path-to-regexp "~0.1.12" proxy-addr "~2.0.7" - qs "6.13.0" + qs "~6.14.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.2" + send "~0.19.0" + serve-static "~1.16.2" setprototypeof "1.2.0" - statuses "2.0.1" + statuses "~2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" -express@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/express/-/express-5.1.0.tgz#d31beaf715a0016f0d53f47d3b4d7acf28c75cc9" - integrity sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA== +express@^5.1.0, express@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/express/-/express-5.2.1.tgz#8f21d15b6d327f92b4794ecf8cb08a72f956ac04" + integrity sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw== dependencies: accepts "^2.0.0" - body-parser "^2.2.0" + body-parser "^2.2.1" content-disposition "^1.0.0" content-type "^1.0.5" cookie "^0.7.1" cookie-signature "^1.2.1" debug "^4.4.0" + depd "^2.0.0" encodeurl "^2.0.0" escape-html "^1.0.3" etag "^1.8.1" @@ -5057,17 +4665,6 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.5, fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -5089,16 +4686,9 @@ fast-text-encoding@^1.0.3: integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== fast-uri@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" - integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== - -fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== - dependencies: - reusify "^1.0.4" + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== fb-watchman@^2.0.0: version "2.0.2" @@ -5114,23 +4704,10 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -fdir@^6.4.4: - version "6.4.5" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.5.tgz#328e280f3a23699362f95f2e82acf978a0c0cb49" - integrity sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw== - -fetch-blob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-2.1.2.tgz#a7805db1361bd44c1ef62bb57fb5fe8ea173ef3c" - integrity sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow== - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== file-entry-cache@^8.0.0: version "8.0.0" @@ -5139,13 +4716,6 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -5153,28 +4723,15 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== - -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== - dependencies: - debug "2.6.9" - encodeurl "~2.0.0" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" +filter-obj@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-5.1.0.tgz#5bd89676000a713d7db2e197f660274428e524ed" + integrity sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng== finalhandler@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.0.tgz#72306373aa89d05a8242ed569ed86a1bff7c561f" - integrity sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q== + version "2.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099" + integrity sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA== dependencies: debug "^4.4.0" encodeurl "^2.0.0" @@ -5183,6 +4740,19 @@ finalhandler@^2.1.0: parseurl "^1.3.3" statuses "^2.0.1" +finalhandler@~1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "~2.4.1" + parseurl "~1.3.3" + statuses "~2.0.2" + unpipe "~1.0.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -5191,7 +4761,7 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-up@^5.0.0, find-up@~5.0.0: +find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -5206,15 +4776,6 @@ find-yarn-workspace-root@^2.0.0: dependencies: micromatch "^4.0.2" -fix-esm@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fix-esm/-/fix-esm-1.0.1.tgz#e0e2199d841e43ff7db9b5f5ba7496bc45130ebb" - integrity sha512-EZtb7wPXZS54GaGxaWxMlhd1DUDCnAg5srlYdu/1ZVeW+7wwR3Tp59nu52dXByFs3MBRq+SByx1wDOJpRvLEXw== - dependencies: - "@babel/core" "^7.14.6" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.14.5" - flat-cache@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" @@ -5223,15 +4784,15 @@ flat-cache@^4.0.0: flatted "^3.2.9" keyv "^4.5.4" -flatted@^3.2.9: - version "3.3.3" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" - integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== +flatted@3.4.0, flatted@^3.2.9: + version "3.4.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.0.tgz#92ab2efec9b272eb85a3a25a106c3afbbc990d8b" + integrity sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw== -follow-redirects@^1.15.6: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== +follow-redirects@^1.15.11: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== for-each@^0.3.3, for-each@^0.3.5: version "0.3.5" @@ -5248,14 +4809,15 @@ foreground-child@^3.1.0: cross-spawn "^7.0.6" signal-exit "^4.0.1" -form-data@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" - integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== +form-data@^4.0.0, form-data@^4.0.4, form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" es-set-tostringtag "^2.1.0" + hasown "^2.0.2" mime-types "^2.1.12" format-util@^1.0.5: @@ -5263,13 +4825,6 @@ format-util@^1.0.5: resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg== -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - formidable@^3.5.4: version "3.5.4" resolved "https://registry.yarnpkg.com/formidable/-/formidable-3.5.4.tgz#ac9a593b951e829b3298f21aa9a2243932f32ed9" @@ -5289,7 +4844,7 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fresh@0.5.2: +fresh@0.5.2, fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== @@ -5299,32 +4854,24 @@ fresh@^2.0.0: resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== -fs-extra@^11.2.0: - version "11.3.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" - integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^9.0.0, fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== +fs-extra@^11.2.0: + version "11.3.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" + integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== dependencies: - at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -5357,20 +4904,10 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" +generator-function@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" + integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -5403,7 +4940,7 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-proto@^1.0.0, get-proto@^1.0.1: +get-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== @@ -5438,9 +4975,9 @@ get-symbol-from-current-process-h@^1.0.1, get-symbol-from-current-process-h@^1.0 integrity sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw== get-tsconfig@^4.10.1: - version "4.10.1" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" - integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== + version "4.13.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.0.tgz#fcdd991e6d22ab9a600f00e91c318707a5d9a0d7" + integrity sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ== dependencies: resolve-pkg-maps "^1.0.0" @@ -5451,13 +4988,6 @@ get-uv-event-loop-napi-h@^1.0.5: dependencies: get-symbol-from-current-process-h "^1.0.1" -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" @@ -5465,10 +4995,17 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob@^10.3.10: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== dependencies: foreground-child "^3.1.0" jackspeak "^3.1.2" @@ -5489,11 +5026,6 @@ glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^14.0.0: version "14.0.0" resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" @@ -5587,11 +5119,6 @@ has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -5631,7 +5158,7 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== -http-errors@2.0.0, http-errors@^2.0.0: +http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== @@ -5642,6 +5169,17 @@ http-errors@2.0.0, http-errors@^2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@^2.0.0, http-errors@~2.0.0, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" @@ -5650,34 +5188,26 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.4.24: +iconv-lite@^0.7.0, iconv-lite@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.0.tgz#c50cd80e6746ca8115eb98743afa81aa0e147a3e" + integrity sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@~0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13, ieee754@^1.2.1: +ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -5688,9 +5218,9 @@ ignore@^5.2.0: integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== ignore@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.4.tgz#a12c70d0f2607c5bf508fb65a40c75f037d7a078" - integrity sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A== + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== import-fresh@^3.2.1: version "3.3.1" @@ -5701,9 +5231,9 @@ import-fresh@^3.2.1: resolve-from "^4.0.0" import-in-the-middle@^1.8.1: - version "1.14.2" - resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.14.2.tgz#283661625a88ff7c0462bd2984f77715c3bc967c" - integrity sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw== + version "1.15.0" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz#9e20827a322bbadaeb5e3bac49ea8f6d4685fdd8" + integrity sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA== dependencies: acorn "^8.14.0" acorn-import-attributes "^1.9.5" @@ -5731,7 +5261,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5745,13 +5275,6 @@ internal-slot@^1.1.0: hasown "^2.0.2" side-channel "^1.1.0" -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -5816,7 +5339,7 @@ is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: +is-core-module@^2.13.0, is-core-module@^2.16.1: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== @@ -5868,12 +5391,13 @@ is-generator-fn@^2.0.0: integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-generator-function@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" - integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" + integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== dependencies: - call-bound "^1.0.3" - get-proto "^1.0.0" + call-bound "^1.0.4" + generator-function "^2.0.0" + get-proto "^1.0.1" has-tostringtag "^1.0.2" safe-regex-test "^1.1.0" @@ -5939,7 +5463,7 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.7, is-string@^1.1.1: +is-string@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== @@ -6005,29 +5529,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -iso-url@^1.1.5: - version "1.2.1" - resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.2.1.tgz#db96a49d8d9a64a1c889fc07cc525d093afb1811" - integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== - -isomorphic-webcrypto@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz#4a7493b486ef072b9f11b6f8fd66adde856e3eec" - integrity sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ== - dependencies: - "@peculiar/webcrypto" "^1.0.22" - asmcrypto.js "^0.22.0" - b64-lite "^1.3.1" - b64u-lite "^1.0.1" - msrcrypto "^1.5.6" - str2buf "^1.3.0" - webcrypto-shim "^0.1.4" - optionalDependencies: - "@unimodules/core" "*" - "@unimodules/react-native-adapter" "*" - expo-random "*" - react-native-securerandom "^0.1.1" - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" @@ -6074,9 +5575,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -6090,16 +5591,6 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jake@^10.8.5: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" - integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" @@ -6400,7 +5891,7 @@ jest-snapshot@^29.7.0: pretty-format "^29.7.0" semver "^7.5.3" -jest-util@^29.0.0, jest-util@^29.7.0: +jest-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== @@ -6469,33 +5960,33 @@ joi@^17.13.3: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" -js-base64@^3.7.6: - version "3.7.7" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" - integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== +js-base64@^3.7.6, js-base64@^3.7.8: + version "3.7.8" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.8.tgz#af44496bc09fa178ed9c4adf67eb2b46f5c6d2a4" + integrity sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow== js-sha3@0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + version "3.14.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0" + integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== dependencies: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" @@ -6540,13 +6031,6 @@ json-stable-stringify@^1.0.2: jsonify "^0.0.1" object-keys "^1.1.1" -json-text-sequence@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/json-text-sequence/-/json-text-sequence-0.3.0.tgz#6603e0ee45da41f949669fd18744b97fb209e6ce" - integrity sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA== - dependencies: - "@sovpro/delimited-stream" "^1.1.0" - json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -6560,9 +6044,9 @@ json5@^2.2.3: integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== dependencies: universalify "^2.0.0" optionalDependencies: @@ -6573,32 +6057,12 @@ jsonify@^0.0.1: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== -jsonld-signatures@^11.0.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz#020ad488bd1977c5169de3d2a4cc28a76dec2663" - integrity sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw== - dependencies: - "@digitalbazaar/security-context" "^1.0.0" - jsonld "^8.0.0" - rdf-canonize "^4.0.1" - serialize-error "^8.1.0" - -jsonld@^8.0.0: - version "8.3.3" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-8.3.3.tgz#08cc927833c8684e42319d4697cc8199c0908ffc" - integrity sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg== - dependencies: - "@digitalbazaar/http-client" "^3.4.1" - canonicalize "^1.0.1" - lru-cache "^6.0.0" - rdf-canonize "^3.4.0" - jsonwebtoken@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" - integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + version "9.0.3" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#6cd57ab01e9b0ac07cb847d53d3c9b6ee31f7ae2" + integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g== dependencies: - jws "^3.2.2" + jws "^4.0.1" lodash.includes "^4.3.0" lodash.isboolean "^3.0.3" lodash.isinteger "^4.0.4" @@ -6609,21 +6073,21 @@ jsonwebtoken@^9.0.2: ms "^2.1.1" semver "^7.5.4" -jwa@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.2.tgz#16011ac6db48de7b102777e57897901520eec7b9" - integrity sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw== +jwa@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804" + integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg== dependencies: buffer-equal-constant-time "^1.0.1" ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== +jws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.1.tgz#07edc1be8fac20e677b283ece261498bd38f0690" + integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA== dependencies: - jwa "^1.4.1" + jwa "^2.0.1" safe-buffer "^5.0.1" jwt-decode@^3.1.2: @@ -6631,6 +6095,11 @@ jwt-decode@^3.1.2: resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== +jwt-decode@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-4.0.0.tgz#2270352425fd413785b2faf11f6e755c5151bd4b" + integrity sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA== + keccak256@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/keccak256/-/keccak256-1.0.6.tgz#dd32fb771558fed51ce4e45a035ae7515573da58" @@ -6668,31 +6137,10 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -ky-universal@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.11.0.tgz#f5edf857865aaaea416a1968222148ad7d9e4017" - integrity sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw== - dependencies: - abort-controller "^3.0.0" - node-fetch "^3.2.10" - -ky-universal@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.8.2.tgz#edc398d54cf495d7d6830aa1ab69559a3cc7f824" - integrity sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ== - dependencies: - abort-controller "^3.0.0" - node-fetch "3.0.0-beta.9" - -ky@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.25.1.tgz#0df0bd872a9cc57e31acd5dbc1443547c881bfbc" - integrity sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA== - -ky@^0.33.3: - version "0.33.3" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.33.3.tgz#bf1ad322a3f2c3428c13cfa4b3af95e6c4a2f543" - integrity sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw== +ky@^1.0.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/ky/-/ky-1.14.1.tgz#16f20b3bf3939abcc04e2a9613f47360fe5f64c9" + integrity sha512-hYje4L9JCmpEQBtudo+v52X5X8tgWXUYyPcxKSuxQNboqufecl9VMWjGiucAFH060AwPXHZuH+WB2rrqfkmafw== leven@^3.1.0: version "3.1.0" @@ -6715,10 +6163,10 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libphonenumber-js@^1.10.53: - version "1.12.8" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.8.tgz#20e5b57f24e60359d795e2fa2ee185776331e34f" - integrity sha512-f1KakiQJa9tdc7w1phC2ST+DyxWimy9c3g3yeF+84QtEanJr2K77wAmBPP22riU05xldniHsvXuflnLZ4oysqA== +libphonenumber-js@^1.10.53, libphonenumber-js@^1.11.1: + version "1.12.31" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.31.tgz#3cdb45641c6b77228dd1238f3d810c3bb5d91199" + integrity sha512-Z3IhgVgrqO1S5xPYM3K5XwbkDasU67/Vys4heW+lfSBALcUZjeIIzI8zCLifY+OCzSq+fpDdywMDa7z+4srJPQ== lines-and-columns@^1.1.6: version "1.2.4" @@ -6794,23 +6242,11 @@ lodash.once@^4.0.0: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - long@^5.0.0: version "5.3.2" resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" @@ -6840,17 +6276,10 @@ lru_map@^0.4.1: resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.4.1.tgz#f7b4046283c79fb7370c36f8fca6aee4324b0a98" integrity sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg== -luxon@^3.5.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.6.1.tgz#d283ffc4c0076cb0db7885ec6da1c49ba97e47b0" - integrity sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ== - -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" +luxon@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba" + integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew== make-dir@^4.0.0: version "4.0.0" @@ -6908,17 +6337,12 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.8: +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -6944,9 +6368,9 @@ mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: mime-db "1.52.0" mime-types@^3.0.0, mime-types@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce" - integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== dependencies: mime-db "^1.54.0" @@ -6992,13 +6416,6 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - minimatch@^9.0.1, minimatch@^9.0.4: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" @@ -7011,48 +6428,23 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -minizlib@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.2.tgz#f33d638eb279f664439aa38dc5f91607468cb574" - integrity sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA== +minizlib@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" + integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== dependencies: minipass "^7.1.2" -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - module-details-from-path@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.4.tgz#b662fdcd93f6c83d3f25289da0ce81c8d9685b94" @@ -7068,11 +6460,6 @@ ms@2.1.3, ms@^2.1.1, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -msrcrypto@^1.5.6: - version "1.5.8" - resolved "https://registry.yarnpkg.com/msrcrypto/-/msrcrypto-1.5.8.tgz#be419be4945bf134d8af52e9d43be7fa261f4a1c" - integrity sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q== - multiformats@^9.4.2: version "9.9.0" resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" @@ -7083,10 +6470,17 @@ nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== -napi-postinstall@^0.2.2: - version "0.2.4" - resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.2.4.tgz#419697d0288cb524623e422f919624f22a5e4028" - integrity sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg== +napi-postinstall@^0.3.0: + version "0.3.4" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.4.tgz#7af256d6588b5f8e952b9190965d6b019653bbb9" + integrity sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ== + +nats@^2.29.3: + version "2.29.3" + resolved "https://registry.yarnpkg.com/nats/-/nats-2.29.3.tgz#86099c9bc193464d4f8cbb1d3504335bd2719ec6" + integrity sha512-tOQCRCwC74DgBTk4pWZ9V45sk4d7peoE2njVprMRCBXrhJ5q5cYM7i6W+Uvw2qUrcfOSnuisrX7bEx3b3Wx4QA== + dependencies: + nkeys.js "1.1.0" natural-compare@^1.4.0: version "1.4.0" @@ -7127,6 +6521,13 @@ ngrok@^4.3.3: optionalDependencies: hpagent "^0.1.2" +nkeys.js@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nkeys.js/-/nkeys.js-1.1.0.tgz#de83a9a13f396c5b6d7c412788f4b9f7f35d4c18" + integrity sha512-tB/a0shZL5UZWSwsoeyqfTszONTt4k2YS0tuQioMOD180+MbombYVgzDUYHlx+gejYK6rgf08n/2Df99WY0Sxg== + dependencies: + tweetnacl "1.0.3" + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -7137,35 +6538,18 @@ node-addon-api@^3.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== +node-cron@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/node-cron/-/node-cron-4.2.1.tgz#6979be4aee4702f06322d21220df8de252c8e265" + integrity sha512-lgimEHPE/QDgFlywTd8yTR61ptugX3Qer29efeyWw2rv259HtGBNn1vZVmp8lB9uo9wC0t/AT4iGqXxia+CJFg== -node-fetch@2, node-fetch@^2.6.7, node-fetch@^2.7.0: +node-fetch@2, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-fetch@3.0.0-beta.9: - version "3.0.0-beta.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.0.0-beta.9.tgz#0a7554cfb824380dd6812864389923c783c80d9b" - integrity sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg== - dependencies: - data-uri-to-buffer "^3.0.1" - fetch-blob "^2.1.1" - -node-fetch@^3.2.10: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - node-gyp-build@^4.2.0, node-gyp-build@^4.2.1: version "4.8.4" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" @@ -7176,22 +6560,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== - -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -7210,22 +6582,12 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -object-assign@^4, object-assign@^4.1.1: +object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.10.3, object-inspect@^1.13.3, object-inspect@^1.13.4: +object-inspect@^1.13.3, object-inspect@^1.13.4: version "1.13.4" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== @@ -7266,7 +6628,7 @@ object.groupby@^1.0.3: define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.2.0: +object.values@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== @@ -7276,7 +6638,7 @@ object.values@^1.2.0: define-properties "^1.2.1" es-object-atoms "^1.0.0" -on-finished@2.4.1, on-finished@^2.4.1: +on-finished@2.4.1, on-finished@^2.4.1, on-finished@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -7329,11 +6691,6 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - own-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" @@ -7386,7 +6743,7 @@ package-json-from-dist@^1.0.0: resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== -pako@^2.0.4, pako@^2.1.0: +pako@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== @@ -7414,24 +6771,23 @@ parseurl@^1.3.3, parseurl@~1.3.3: integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== patch-package@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61" - integrity sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA== + version "8.0.1" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.1.tgz#79d02f953f711e06d1f8949c8a13e5d3d7ba1a60" + integrity sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw== dependencies: "@yarnpkg/lockfile" "^1.1.0" chalk "^4.1.2" ci-info "^3.7.0" cross-spawn "^7.0.3" find-yarn-workspace-root "^2.0.0" - fs-extra "^9.0.0" + fs-extra "^10.0.0" json-stable-stringify "^1.0.2" klaw-sync "^6.0.0" minimist "^1.2.6" open "^7.4.2" - rimraf "^2.6.3" semver "^7.5.3" slash "^2.0.0" - tmp "^0.0.33" + tmp "^0.2.4" yaml "^2.2.2" path-exists@^4.0.0: @@ -7462,22 +6818,22 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@0.1.12: +path-to-regexp@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f" + integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA== + +path-to-regexp@~0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== -path-to-regexp@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4" - integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -picocolors@^1.1.0, picocolors@^1.1.1: +picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -7487,10 +6843,10 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" - integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== +picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== pirates@^4.0.4: version "4.0.7" @@ -7527,9 +6883,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" - integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== + version "3.7.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.7.4.tgz#d2f8335d4b1cec47e1c8098645411b0c9dff9c0f" + integrity sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA== pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" @@ -7548,10 +6904,10 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -protobufjs@^7.2.5, protobufjs@^7.3.0: - version "7.5.3" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.5.3.tgz#13f95a9e3c84669995ec3652db2ac2fb00b89363" - integrity sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw== +protobufjs@^7.3.0, protobufjs@^7.5.3: + version "7.5.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.5.4.tgz#885d31fe9c4b37f25d1bb600da30b1c5b37d286a" + integrity sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -7579,10 +6935,15 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +proxy-from-env@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" + integrity sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== + pump@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" - integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + version "3.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" + integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -7605,38 +6966,25 @@ pvtsutils@^1.3.5, pvtsutils@^1.3.6: tslib "^2.8.1" pvutils@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" - integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== - -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" + version "1.1.5" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.5.tgz#84b0dea4a5d670249aa9800511804ee0b7c2809c" + integrity sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA== -qs@^6.11.0, qs@^6.14.0: +qs@^6.11.2, qs@^6.14.0, qs@~6.14.0: version "6.14.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: side-channel "^1.1.0" -query-string@^7.0.1: - version "7.1.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" - integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== +query-string@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-9.3.1.tgz#d0c93e6c7fb7c17bdf04aa09e382114580ede270" + integrity sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw== dependencies: - decode-uri-component "^0.2.2" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + decode-uri-component "^0.4.1" + filter-obj "^5.1.0" + split-on-first "^3.0.0" quick-lru@^5.1.1: version "5.1.1" @@ -7648,25 +6996,25 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== +raw-body@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.2.tgz#3e3ada5ae5568f9095d84376fd3a49b8fb000a51" + integrity sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA== dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.7.0" + unpipe "~1.0.0" -raw-body@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.0.tgz#25b3476f07a51600619dae3fe82ddc28a36e5e0f" - integrity sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g== +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.6.3" - unpipe "1.0.0" + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" rdf-canonize@^3.4.0: version "3.4.0" @@ -7675,25 +7023,11 @@ rdf-canonize@^3.4.0: dependencies: setimmediate "^1.0.5" -rdf-canonize@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-4.0.1.tgz#2b5a37f147d35b484b40ff2140245fc5985a9595" - integrity sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA== - dependencies: - setimmediate "^1.0.5" - react-is@^18.0.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== -react-native-securerandom@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz#f130623a412c338b0afadedbc204c5cbb8bf2070" - integrity sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw== - dependencies: - base64-js "*" - readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -7725,12 +7059,7 @@ ref-struct-di@1.1.1, ref-struct-di@^1.1.0, ref-struct-di@^1.1.1: dependencies: debug "^3.1.0" -reflect-metadata@^0.1.13: - version "0.1.14" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.14.tgz#24cf721fe60677146bb77eeb0e1f9dece3d65859" - integrity sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A== - -reflect-metadata@^0.2.2: +reflect-metadata@0.2.2, reflect-metadata@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== @@ -7813,11 +7142,11 @@ resolve.exports@^2.0.0: integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== resolve@^1.0.0, resolve@^1.20.0, resolve@^1.22.4, resolve@^1.22.8: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== dependencies: - is-core-module "^2.16.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -7828,25 +7157,13 @@ responselike@^2.0.0: dependencies: lowercase-keys "^2.0.0" -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - -rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@^2.6.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - router@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" @@ -7858,14 +7175,7 @@ router@^2.2.0: parseurl "^1.3.3" path-to-regexp "^8.0.0" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.8.0: +rxjs@^7.8.2: version "7.8.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== @@ -7915,15 +7225,15 @@ scrypt-js@3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.1, semver@^7.7.2: - version "7.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" - integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.1, semver@^7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== send@0.19.0: version "0.19.0" @@ -7961,23 +7271,32 @@ send@^1.1.0, send@^1.2.0: range-parser "^1.2.1" statuses "^2.0.1" -serialize-error@^8.0.1, serialize-error@^8.1.0: +send@~0.19.0: + version "0.19.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.1.tgz#1c2563b2ee4fe510b806b21ec46f355005a369f9" + integrity sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-error@^8.0.1: version "8.1.0" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== dependencies: type-fest "^0.20.2" -serve-static@1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== - dependencies: - encodeurl "~2.0.0" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.19.0" - serve-static@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.0.tgz#9c02564ee259bdd2251b82d659a2e7e1938d66f9" @@ -7988,10 +7307,15 @@ serve-static@^2.2.0: parseurl "^1.3.3" send "^1.2.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +serve-static@~1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" set-function-length@^1.2.2: version "1.2.2" @@ -8029,7 +7353,7 @@ setimmediate@^1.0.5: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -setprototypeof@1.2.0: +setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== @@ -8075,7 +7399,7 @@ side-channel-weakmap@^1.0.2: object-inspect "^1.13.3" side-channel-map "^1.0.1" -side-channel@^1.0.6, side-channel@^1.1.0: +side-channel@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== @@ -8086,7 +7410,7 @@ side-channel@^1.0.6, side-channel@^1.1.0: side-channel-map "^1.0.1" side-channel-weakmap "^1.0.2" -signal-exit@^3.0.0, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -8111,15 +7435,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -8141,20 +7456,20 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== +split-on-first@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-3.0.0.tgz#f04959c9ea8101b9b0bbf35a61b9ebea784a23e7" + integrity sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -stable-hash@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" - integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== +stable-hash-x@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stable-hash-x/-/stable-hash-x-0.2.0.tgz#dfd76bfa5d839a7470125c6a6b3c8b22061793e9" + integrity sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ== stack-utils@^2.0.3: version "2.0.6" @@ -8170,11 +7485,16 @@ static-eval@2.0.2: dependencies: escodegen "^1.8.1" -statuses@2.0.1, statuses@^2.0.1: +statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +statuses@^2.0.1, statuses@~2.0.1, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + stop-iteration-iterator@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" @@ -8183,16 +7503,6 @@ stop-iteration-iterator@^1.1.0: es-errors "^1.3.0" internal-slot "^1.1.0" -str2buf@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/str2buf/-/str2buf-1.3.0.tgz#a4172afff4310e67235178e738a2dbb573abead0" - integrity sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA== - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== - string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -8210,7 +7520,7 @@ string-length@^4.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8241,7 +7551,7 @@ string.prototype.trim@^1.2.10: es-object-atoms "^1.0.0" has-property-descriptors "^1.0.2" -string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: +string.prototype.trimend@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== @@ -8282,9 +7592,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: ansi-regex "^5.0.1" strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + version "7.1.2" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" + integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== dependencies: ansi-regex "^6.0.1" @@ -8313,28 +7623,28 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -superagent@^10.2.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-10.2.1.tgz#3e39038fff125cbd1584fa4b384db2994bbffdcb" - integrity sha512-O+PCv11lgTNJUzy49teNAWLjBZfc+A1enOwTpLlH6/rsvKcTwcdTT8m9azGkVqM7HBl5jpyZ7KTPhHweokBcdg== +superagent@^10.2.3: + version "10.2.3" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-10.2.3.tgz#d1e4986f2caac423c37e38077f9073ccfe73a59b" + integrity sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig== dependencies: - component-emitter "^1.3.0" + component-emitter "^1.3.1" cookiejar "^2.1.4" - debug "^4.3.4" + debug "^4.3.7" fast-safe-stringify "^2.1.1" - form-data "^4.0.0" + form-data "^4.0.4" formidable "^3.5.4" methods "^1.1.2" mime "2.6.0" - qs "^6.11.0" + qs "^6.11.2" supertest@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/supertest/-/supertest-7.1.1.tgz#c5e7e2d047fbbe4403b17b2622dc5323adc39f11" - integrity sha512-aI59HBTlG9e2wTjxGJV+DygfNLgnWbGdZxiA/sgrnNNikIW8lbDvCtF6RnhZoJ82nU7qv7ZLjrvWqCEm52fAmw== + version "7.1.4" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-7.1.4.tgz#3175e2539f517ca72fdc7992ffff35b94aca7d34" + integrity sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg== dependencies: methods "^1.1.2" - superagent "^10.2.1" + superagent "^10.2.3" supports-color@^7.1.0: version "7.2.0" @@ -8356,9 +7666,9 @@ supports-preserve-symlinks-flag@^1.0.0: integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== swagger-ui-dist@>=4.11.0: - version "5.22.0" - resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.22.0.tgz#8280cfa9659d90cf6f682c76f7e792b0da939946" - integrity sha512-8YlCSxiyb8uPFa7qoB1lRHYr1PBbT1NuV9RvQdFFPFPudRBTPf9coU5jl02KhzvrtmTEw4jXRgb0kg8pJvVuWQ== + version "5.30.3" + resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.30.3.tgz#b65d1b689193ded72e6f12692c63e87d7d657b21" + integrity sha512-giQl7/ToPxCqnUAx2wpnSnDNGZtGzw1LyUw6ZitIpTmdrvpxKFY/94v1hihm0zYNpgp1/VY0jTDk//R0BBgnRQ== dependencies: "@scarf/scarf" "=1.4.0" @@ -8369,46 +7679,22 @@ swagger-ui-express@^4.4.0: dependencies: swagger-ui-dist ">=4.11.0" -synckit@^0.11.0: - version "0.11.6" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.6.tgz#e742a0c27bbc1fbc96f2010770521015cca7ed5c" - integrity sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw== - dependencies: - "@pkgr/core" "^0.2.4" - -table@^6.8.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" - integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tar@^6.1.11: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== +synckit@^0.11.7: + version "0.11.11" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0" + integrity sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw== dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" + "@pkgr/core" "^0.2.9" tar@^7.4.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" - integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== + version "7.5.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.2.tgz#115c061495ec51ff3c6745ff8f6d0871c5b1dedc" + integrity sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg== dependencies: "@isaacs/fs-minipass" "^4.0.0" chownr "^3.0.0" minipass "^7.1.2" - minizlib "^3.0.1" - mkdirp "^3.0.1" + minizlib "^3.1.0" yallist "^5.0.0" test-exclude@^6.0.0: @@ -8420,20 +7706,18 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -tinyglobby@^0.2.14: - version "0.2.14" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" - integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== +tinyglobby@^0.2.14, tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== dependencies: - fdir "^6.4.4" - picomatch "^4.0.2" + fdir "^6.5.0" + picomatch "^4.0.3" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" +tmp@^0.2.4: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== tmpl@1.0.5: version "1.0.5" @@ -8447,7 +7731,7 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.1: +toidentifier@1.0.1, toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== @@ -8473,18 +7757,17 @@ ts-deepmerge@^7.0.2: integrity sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA== ts-jest@^29.3.4: - version "29.3.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.3.4.tgz#9354472aceae1d3867a80e8e02014ea5901aee41" - integrity sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA== + version "29.4.6" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.6.tgz#51cb7c133f227396818b71297ad7409bb77106e9" + integrity sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA== dependencies: bs-logger "^0.2.6" - ejs "^3.1.10" fast-json-stable-stringify "^2.1.0" - jest-util "^29.0.0" + handlebars "^4.7.8" json5 "^2.2.3" lodash.memoize "^4.1.2" make-error "^1.3.6" - semver "^7.7.2" + semver "^7.7.3" type-fest "^4.41.0" yargs-parser "^21.1.1" @@ -8553,7 +7836,7 @@ tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.7.0, tslib@^2.8.1: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.7.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -8573,13 +7856,18 @@ tsoa@^6.0.1: "@tsoa/cli" "^6.6.0" "@tsoa/runtime" "^6.6.0" -tsyringe@^4.6.0, tsyringe@^4.8.0: +tsyringe@^4.10.0, tsyringe@^4.6.0: version "4.10.0" resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.10.0.tgz#d0c95815d584464214060285eaaadd94aa03299c" integrity sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw== dependencies: tslib "^1.9.3" +tweetnacl@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -8614,7 +7902,7 @@ type-fest@^4.41.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== -type-is@^2.0.0, type-is@^2.0.1: +type-is@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== @@ -8682,16 +7970,16 @@ typed-array-length@^1.0.7: reflect.getprototypeof "^1.0.6" typescript@^5.7.2, typescript@^5.8.3: - version "5.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" - integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== uglify-js@^3.1.4: version "3.19.3" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== -uint8arrays@^3.1.1: +uint8arrays@3.1.1, uint8arrays@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== @@ -8718,57 +8006,57 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -undici-types@~7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.8.0.tgz#de00b85b710c54122e44fbfd911f8d70174cd294" - integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== -undici@^5.14.0, undici@^5.21.2: - version "5.29.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" - integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== - dependencies: - "@fastify/busboy" "^2.0.0" +undici@6.24.0, undici@^6.6.2: + version "6.24.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.24.0.tgz#ad36b879b4882d14addc13dd641da7ed7ac7623a" + integrity sha512-lVLNosgqo5EkGqh5XUDhGfsMSoO8K0BAN0TyJLvwNRSl4xWGZlCVYsAIpa/OpA3TvmnM01GWcoKmc3ZWo5wKKA== universalify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unrs-resolver@^1.7.2: - version "1.7.8" - resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.7.8.tgz#f76ca5592d7225f8fd12cd5f39fad9e86f0945c9" - integrity sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw== +unrs-resolver@^1.7.11: + version "1.11.1" + resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.11.1.tgz#be9cd8686c99ef53ecb96df2a473c64d304048a9" + integrity sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg== dependencies: - napi-postinstall "^0.2.2" + napi-postinstall "^0.3.0" optionalDependencies: - "@unrs/resolver-binding-darwin-arm64" "1.7.8" - "@unrs/resolver-binding-darwin-x64" "1.7.8" - "@unrs/resolver-binding-freebsd-x64" "1.7.8" - "@unrs/resolver-binding-linux-arm-gnueabihf" "1.7.8" - "@unrs/resolver-binding-linux-arm-musleabihf" "1.7.8" - "@unrs/resolver-binding-linux-arm64-gnu" "1.7.8" - "@unrs/resolver-binding-linux-arm64-musl" "1.7.8" - "@unrs/resolver-binding-linux-ppc64-gnu" "1.7.8" - "@unrs/resolver-binding-linux-riscv64-gnu" "1.7.8" - "@unrs/resolver-binding-linux-riscv64-musl" "1.7.8" - "@unrs/resolver-binding-linux-s390x-gnu" "1.7.8" - "@unrs/resolver-binding-linux-x64-gnu" "1.7.8" - "@unrs/resolver-binding-linux-x64-musl" "1.7.8" - "@unrs/resolver-binding-wasm32-wasi" "1.7.8" - "@unrs/resolver-binding-win32-arm64-msvc" "1.7.8" - "@unrs/resolver-binding-win32-ia32-msvc" "1.7.8" - "@unrs/resolver-binding-win32-x64-msvc" "1.7.8" - -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + "@unrs/resolver-binding-android-arm-eabi" "1.11.1" + "@unrs/resolver-binding-android-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-x64" "1.11.1" + "@unrs/resolver-binding-freebsd-x64" "1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-arm64-musl" "1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl" "1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-musl" "1.11.1" + "@unrs/resolver-binding-wasm32-wasi" "1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc" "1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc" "1.11.1" + "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" + +update-browserslist-db@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz#cfb4358afa08b3d5731a2ecd95eebf4ddef8033e" + integrity sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -8790,16 +8078,16 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-13.0.0.tgz#263dc341b19b4d755eb8fe36b78d95a6b65707e8" + integrity sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w== + "uuid@^7.0.0 || ^8.0.0": version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^9.0.0, uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -8814,10 +8102,20 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" +valibot@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/valibot/-/valibot-1.2.0.tgz#8fc720d9e4082ba16e30a914064a39619b2f1d6f" + integrity sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg== + validator@^13.12.0, validator@^13.9.0: - version "13.15.15" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.15.tgz#246594be5671dc09daa35caec5689fcd18c6e7e4" - integrity sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A== + version "13.15.23" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.23.tgz#59a874f84e4594588e3409ab1edbe64e96d0c62d" + integrity sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw== + +validator@^13.15.22: + version "13.15.26" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.26.tgz#36c3deeab30e97806a658728a155c66fcaa5b944" + integrity sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA== varint@^6.0.0: version "6.0.0" @@ -8836,20 +8134,15 @@ walker@^1.0.8: dependencies: makeerror "1.0.12" -web-did-resolver@^2.0.21: - version "2.0.30" - resolved "https://registry.yarnpkg.com/web-did-resolver/-/web-did-resolver-2.0.30.tgz#5556d9c495b4705055c737dcdff0c9256aebfb51" - integrity sha512-lsv0T+y/zD1bEVkcNfcppk4hQXBlqqoXfYcRG4183Yv53FkY29HNPGErwkNI/AG+lxxsUIR77JqS6pn9uHw/Vw== +web-did-resolver@^2.0.32: + version "2.0.32" + resolved "https://registry.yarnpkg.com/web-did-resolver/-/web-did-resolver-2.0.32.tgz#6c86c1797cd651620aa311a94660e0a51131b334" + integrity sha512-L91/ApTmDjgzS0UDstTKn3kN/1hlQBnVcUN8K29e3xhVBpPktHYC6uvVAQ8ohbIg9D6wrrbaBQvfRArDxgJG2g== dependencies: cross-fetch "^4.1.0" did-resolver "^4.1.0" -web-streams-polyfill@^3.0.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" - integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== - -webcrypto-core@^1.8.0: +webcrypto-core@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.8.1.tgz#09d5bd8a9c48e9fbcaf412e06b1ff1a57514ce86" integrity sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A== @@ -8860,11 +8153,6 @@ webcrypto-core@^1.8.0: pvtsutils "^1.3.5" tslib "^2.7.0" -webcrypto-shim@^0.1.4: - version "0.1.7" - resolved "https://registry.yarnpkg.com/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz#da8be23061a0451cf23b424d4a9b61c10f091c12" - integrity sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg== - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -8938,13 +8226,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - word-wrap@^1.2.5, word-wrap@~1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" @@ -9000,15 +8281,15 @@ ws@8.17.1: resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== -ws@8.18.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== +ws@^8.18.2: + version "8.18.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== -ws@^8.13.0, ws@^8.18.2: - version "8.18.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" - integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== +ws@^8.19.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== xtend@^4.0.0: version "4.0.2" @@ -9041,9 +8322,9 @@ yaml@^1.10.0: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.2.2, yaml@^2.6.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6" - integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== + version "2.8.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== yargs-parser@^21.1.1: version "21.1.1" @@ -9080,3 +8361,13 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod-validation-error@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-5.0.0.tgz#96db948070b7bfcb13bfec5134113e580f9eee38" + integrity sha512-hmk+pkyKq7Q71PiWVSDUc3VfpzpvcRHZ3QPw9yEMVvmtCekaMeOHnbr3WbxfrgEnQTv6haGP4cmv0Ojmihzsxw== + +zod@^4.3.5, zod@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.3.6.tgz#89c56e0aa7d2b05107d894412227087885ab112a" + integrity sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==