Skip to content

Commit 51f3173

Browse files
committed
started adding APIs for GetLinkedWallets and RemoveLinkedWallet
1 parent 8862e2d commit 51f3173

7 files changed

Lines changed: 179 additions & 1 deletion

File tree

Plugins/SequencePlugin/Source/SequencePlugin/Private/Sequence/SequenceAPI.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,43 @@ void USequenceWallet::SendTransaction(const TArray<TransactionUnion>& Transactio
477477
}
478478
}
479479

480+
void USequenceWallet::GetLinkedWallets(const TSuccessCallback<FSeqLinkedWalletsResponse>& OnSuccess, const FFailureCallback& OnFailure) const
481+
{
482+
const FString& WalletAddress = this->GetWalletAddress();
483+
const FString& MessageToSign = "parent wallet with address " + WalletAddress;
484+
485+
const TSuccessCallback<FSeqSignMessageResponse_Response> OnSignatureSuccess = [this, WalletAddress, MessageToSign, OnSuccess, OnFailure](FSeqSignMessageResponse_Response SignatureResponse)
486+
{
487+
if (this->SequenceRPCManager)
488+
{
489+
const FString& ChainId = this->Credentials.GetNetworkString();
490+
FSeqLinkedWalletRequest Request;
491+
Request.SignatureChainId = ChainId;
492+
Request.ParentWalletAddress = WalletAddress;
493+
Request.ParentWalletMessage = MessageToSign;
494+
Request.ParentWalletSignature = SignatureResponse.Data.Signature;
495+
496+
this->SequenceRPCManager->GetLinkedWallets(Request, OnSuccess, OnFailure);
497+
}
498+
else
499+
{
500+
OnFailure(FSequenceError(RequestFail, "SequenceRPCManager is not available."));
501+
}
502+
};
503+
504+
const TFunction<void (FString, FSequenceError)> OnSignatureFailure = [OnFailure](FString Data, FSequenceError Err)
505+
{
506+
OnFailure(FSequenceError(RequestFail, "Error Parsing Response: " + Err.Message));
507+
};
508+
509+
this->SignMessage(MessageToSign, OnSignatureSuccess, OnFailure);
510+
}
511+
512+
void USequenceWallet::RemoveLinkedWallet(const FString& LinkedWalletAddress, const TFunction<void()>& OnSuccess, const FFailureCallback& OnFailure) const
513+
{
514+
515+
}
516+
480517
//Indexer Calls
481518

482519
void USequenceWallet::Ping(const TSuccessCallback<bool>& OnSuccess, const FFailureCallback& OnFailure) const

Plugins/SequencePlugin/Source/SequencePlugin/Private/Sequence/SequenceWalletBP.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,46 @@ void USequenceWalletBP::ApiSignOut()
304304
}
305305
}
306306

307+
void USequenceWalletBP::GetLinkedWallets(FOnLinkedWallets OnSuccess, FOnFailure OnFailure)
308+
{
309+
const TFunction<void (FSeqLinkedWalletsResponse)> OnApiSuccess = [OnSuccess](const FSeqLinkedWalletsResponse& LinkedWallets)
310+
{
311+
OnSuccess.ExecuteIfBound(LinkedWallets);
312+
};
313+
314+
const TFunction<void (FSequenceError)> OnApiFailure = [OnFailure](const FSequenceError& Err)
315+
{
316+
OnFailure.ExecuteIfBound(Err.Message);
317+
};
318+
319+
const TOptional<USequenceWallet*> WalletOptional = USequenceWallet::Get();
320+
if (WalletOptional.IsSet() && WalletOptional.GetValue())
321+
{
322+
const USequenceWallet * Wallet = WalletOptional.GetValue();
323+
Wallet->GetLinkedWallets(OnApiSuccess, OnApiFailure);
324+
}
325+
}
326+
327+
void USequenceWalletBP::RemoveLinkedWallet(const FString& LinkedWalletAddress, FOnSuccess OnSuccess, FOnFailure OnFailure)
328+
{
329+
const TFunction<void()> OnApiSuccess = [OnSuccess]()
330+
{
331+
OnSuccess.ExecuteIfBound();
332+
};
333+
334+
const TFunction<void (FSequenceError)> OnApiFailure = [OnFailure](const FSequenceError& Err)
335+
{
336+
OnFailure.ExecuteIfBound(Err.Message);
337+
};
338+
339+
const TOptional<USequenceWallet*> WalletOptional = USequenceWallet::Get();
340+
if (WalletOptional.IsSet() && WalletOptional.GetValue())
341+
{
342+
const USequenceWallet * Wallet = WalletOptional.GetValue();
343+
Wallet->RemoveLinkedWallet(LinkedWalletAddress, OnApiSuccess, OnApiFailure);
344+
}
345+
}
346+
307347
void USequenceWalletBP::ApiSignMessage(const FString& Message)
308348
{
309349
const TFunction<void (FSeqSignMessageResponse_Response)> OnSuccess = [this](const FSeqSignMessageResponse_Response& SignedMessage)

Plugins/SequencePlugin/Source/SequencePlugin/Private/SequenceRPCManager.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -952,6 +952,22 @@ void USequenceRPCManager::ForceOpenSessionInUse(const TSuccessCallback<FCredenti
952952
}, OnOpenResponse, OnFailure);
953953
}
954954

955+
void USequenceRPCManager::GetLinkedWallets(const FSeqLinkedWalletRequest& Request, const TSuccessCallback<FSeqLinkedWalletsResponse>& OnSuccess, const FFailureCallback& OnFailure)
956+
{
957+
/*this->SendIntent(this->BuildAPIUrl("GetLinkedWallets"),[this, ChainId, WalletAddress, Message, Signature](const TOptional<int64>& CurrentTime)
958+
{
959+
return BuildValidateMessageSignatureIntent(ChainId, WalletAddress, Message, Signature, CurrentTime);
960+
}, OnResponse, OnFailure);*/
961+
}
962+
963+
void USequenceRPCManager::RemoveLinkedWallet(const FSeqLinkedWalletRequest& Request, const TFunction<void()>& OnSuccess, const FFailureCallback& OnFailure)
964+
{
965+
/*this->SendIntent(this->BuildAPIUrl("RemoveLinkedWallet"),[this, ChainId, WalletAddress, Message, Signature](const TOptional<int64>& CurrentTime)
966+
{
967+
return BuildValidateMessageSignatureIntent(ChainId, WalletAddress, Message, Signature, CurrentTime);
968+
}, OnResponse, OnFailure);*/
969+
}
970+
955971
void USequenceRPCManager::FederateEmailSession(const FString& WalletIn, const FString& CodeIn, const TFunction<void()>& OnSuccess, const FFailureCallback& OnFailure)
956972
{
957973
this->UpdateWithStoredSessionWallet();

Plugins/SequencePlugin/Source/SequencePlugin/Private/SequenceRPCManager.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,20 @@ class SEQUENCEPLUGIN_API USequenceRPCManager : public UObject
276276
* @param OnFailure Fires if there's an Authentication Issue
277277
*/
278278
void ForceOpenSessionInUse(const TSuccessCallback<FCredentials_BE>& OnSuccess, const FFailureCallback& OnFailure);
279+
280+
/**
281+
* GetLinkedWallets
282+
* @param OnSuccess
283+
* @param OnFailure
284+
*/
285+
void GetLinkedWallets(const FSeqLinkedWalletRequest& Request, const TSuccessCallback<FSeqLinkedWalletsResponse>& OnSuccess, const FFailureCallback& OnFailure);
286+
287+
/**
288+
* GetLinkedWallets
289+
* @param OnSuccess
290+
* @param OnFailure
291+
*/
292+
void RemoveLinkedWallet(const FSeqLinkedWalletRequest& Request, const TFunction<void()>& OnSuccess, const FFailureCallback& OnFailure);
279293

280294
//Auth Calls//
281295

Plugins/SequencePlugin/Source/SequencePlugin/Public/Sequence/SequenceAPI.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,16 @@ class SEQUENCEPLUGIN_API USequenceWallet : public UGameInstanceSubsystem
310310
*/
311311
void GetTransactionHistory(const FSeqGetTransactionHistoryArgs& Args, const TSuccessCallback<FSeqGetTransactionHistoryReturn>& OnSuccess, const FFailureCallback& OnFailure) const;
312312

313+
/*
314+
Get Linked Wallets
315+
*/
316+
void GetLinkedWallets(const TSuccessCallback<FSeqLinkedWalletsResponse>& OnSuccess, const FFailureCallback& OnFailure) const;
317+
318+
/*
319+
Remove a Linked Wallet
320+
*/
321+
void RemoveLinkedWallet(const FString& LinkedWalletAddress, const TFunction<void()>& OnSuccess, const FFailureCallback& OnFailure) const;
322+
313323
//Provider calls
314324

315325
void BlockByNumber(uint64 Number, const TFunction<void(TSharedPtr<FJsonObject>)>& OnSuccess,

Plugins/SequencePlugin/Source/SequencePlugin/Public/Sequence/SequenceResponseIntent.h

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,59 @@ struct SEQUENCEPLUGIN_API FSeqIdTokenResponse
538538
}
539539
};
540540

541+
// Wallet Linking
542+
543+
USTRUCT(Blueprintable)
544+
struct SEQUENCEPLUGIN_API FSeqLinkedWalletRequest
545+
{
546+
GENERATED_BODY()
547+
548+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
549+
FString SignatureChainId = "";
550+
551+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
552+
FString ParentWalletAddress = "";
553+
554+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
555+
FString ParentWalletMessage = "";
556+
557+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
558+
FString ParentWalletSignature = "";
559+
560+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
561+
FString LinkedWalletAddress = "";
562+
};
563+
564+
USTRUCT(Blueprintable)
565+
struct SEQUENCEPLUGIN_API FSeqLinkedWallet
566+
{
567+
GENERATED_BODY()
568+
569+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
570+
int64 Id = 0;
571+
572+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
573+
FString WalletType = "";
574+
575+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
576+
FString WalletAddress = "";
577+
578+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
579+
FString LinkedWalletAddress = "";
580+
581+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
582+
FString CreatedAt = "";
583+
};
584+
585+
USTRUCT(Blueprintable)
586+
struct SEQUENCEPLUGIN_API FSeqLinkedWalletsResponse
587+
{
588+
GENERATED_BODY()
589+
590+
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Default")
591+
TArray<FSeqLinkedWallet> LinkedWallets;
592+
};
593+
541594

542595
//Validate Signature//
543596

Plugins/SequencePlugin/Source/SequencePlugin/Public/Sequence/SequenceWalletBP.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiListSessions, FSequenceRespo
2626
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiListAccounts, FSequenceResponseStatus, ResponseStatus, const FSeqListAccountsResponse_Data&, Data);
2727
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiGetSessionAuthProof, FSequenceResponseStatus, ResponseStatus, const FSeqGetSessionAuthProof_Data, Response);
2828
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnIApiGetSupportedTransakCountries, FSequenceResponseStatus, ResponseStatus, const TArray<FSupportedCountry>&, SupportedCountries);
29-
29+
DECLARE_DYNAMIC_DELEGATE_OneParam(FOnLinkedWallets, const FSeqLinkedWalletsResponse&, LinkedWallets);
30+
DECLARE_DYNAMIC_DELEGATE_OneParam(FOnFailure, const FString&, Error);
31+
DECLARE_DYNAMIC_DELEGATE(FOnSuccess);
3032

3133
//Api//
3234

@@ -242,6 +244,12 @@ class SEQUENCEPLUGIN_API USequenceWalletBP : public UGameInstanceSubsystem
242244
UFUNCTION(BlueprintCallable, Category="0xSequence SDK - Functions")
243245
void ApiSignOut();
244246

247+
UFUNCTION(BlueprintCallable, Category="0xSequence SDK - Functions")
248+
void GetLinkedWallets(FOnLinkedWallets OnSuccess, FOnFailure OnFailure);
249+
250+
UFUNCTION(BlueprintCallable, Category="0xSequence SDK - Functions")
251+
void RemoveLinkedWallet(const FString& LinkedWalletAddress, FOnSuccess OnSuccess, FOnFailure OnFailure);
252+
245253
//SequenceApi//
246254

247255
//SYNC//

0 commit comments

Comments
 (0)