/// <inheritdoc /> public virtual async Task <List <T> > SearchAsync <T>(Wallet wallet, SearchRecordQuery query, SearchRecordOptions options, int count) where T : WalletRecord, new() { using (var search = await NonSecrets.OpenSearchAsync(wallet, new T().GetTypeName(), (query ?? new SearchRecordQuery()).ToJson(), (options ?? new SearchRecordOptions()).ToJson())) { var result = JsonConvert.DeserializeObject <SearchRecordResult>(await search.NextAsync(wallet, count)); // TODO: Add support for pagination return(result.Records? .Select(x => { var record = JsonConvert.DeserializeObject <T>(x.Value); record.Tags.Clear(); foreach (var tag in x.Tags) { record.Tags.Add(tag.Key, tag.Value); } return record; }) .ToList() ?? new List <T>()); } }
/// <inheritdoc /> public virtual async Task <string> ProcessCredentialRequestAsync(Wallet wallet, CredentialRequestMessage credentialRequest) { Logger.LogInformation(LoggingEvents.StoreCredentialRequest, "Type {0},", credentialRequest.Type); var(didOrKey, _) = MessageUtils.ParseMessageType(credentialRequest.Type); var connectionSearch = await ConnectionService.ListAsync(wallet, new SearchRecordQuery { { TagConstants.MyDid, didOrKey } }); if (!connectionSearch.Any()) { throw new Exception($"Can't find connection record for type {credentialRequest.Type}"); } var connection = connectionSearch.First(); var(details, _) = await MessageSerializer.UnpackSealedAsync <CredentialRequestDetails>( credentialRequest.Content, wallet, connection.MyVk); var request = JObject.Parse(details.OfferJson); var nonce = request["nonce"].ToObject <string>(); var query = new SearchRecordQuery { { TagConstants.Nonce, nonce } }; var credentialSearch = await RecordService.SearchAsync <CredentialRecord>(wallet, query, null, 1); var credential = credentialSearch.Single(); // Offer should already be present // credential.OfferJson = details.OfferJson; if (!string.IsNullOrEmpty(details.CredentialValuesJson) && JObject.Parse(details.CredentialValuesJson).Count != 0) { credential.ValuesJson = details.CredentialValuesJson; } credential.RequestJson = details.CredentialRequestJson; await credential.TriggerAsync(CredentialTrigger.Request); await RecordService.UpdateAsync(wallet, credential); return(credential.GetId()); }
/// <inheritdoc /> public virtual Task <List <ProofRecord> > ListAsync(Wallet wallet, SearchRecordQuery query = null, int count = 100) => RecordService.SearchAsync <ProofRecord>(wallet, query, null, count);
/// <inheritdoc /> public virtual Task <List <ConnectionRecord> > ListAsync(Wallet wallet, SearchRecordQuery query = null, int count = 100) { Logger.LogInformation(LoggingEvents.ListConnections, "List Connections"); return(RecordService.SearchAsync <ConnectionRecord>(wallet, query, null, count)); }