Skip to content

Commit 8c94880

Browse files
authored
[DX-2975] feat: get linked addresses (#93)
* feat: added get linked addresses method * feat: added get linked addresses node to sample blueprints * refactor: joined token blueprint node implementations * fix: updated get token nodes in sample blueprints
1 parent f9b32f4 commit 8c94880

12 files changed

+230
-163
lines changed
Binary file not shown.

Source/Immutable/Private/Immutable/Actions/ImtblPassportGetAccessTokenAsyncAction.cpp

Lines changed: 0 additions & 47 deletions
This file was deleted.

Source/Immutable/Private/Immutable/Actions/ImtblPassportGetIdTokenAsyncAction.cpp

Lines changed: 0 additions & 47 deletions
This file was deleted.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Fill out your copyright notice in the Description page of Project Settings.
2+
3+
#include "Immutable/Actions/ImtblPassportGetLinkedAddressesAsyncAction.h"
4+
5+
#include "Immutable/ImmutablePassport.h"
6+
#include "Immutable/ImmutableSubsystem.h"
7+
#include "Immutable/Misc/ImtblLogging.h"
8+
9+
UImtblPassportGetLinkedAddressesAsyncAction* UImtblPassportGetLinkedAddressesAsyncAction::GetLinkedAddresses(UObject* WorldContextObject)
10+
{
11+
UImtblPassportGetLinkedAddressesAsyncAction* Node = NewObject<UImtblPassportGetLinkedAddressesAsyncAction>();
12+
13+
Node->WorldContextObject = WorldContextObject;
14+
15+
return Node;
16+
}
17+
18+
void UImtblPassportGetLinkedAddressesAsyncAction::Activate()
19+
{
20+
if (!WorldContextObject || !WorldContextObject->GetWorld())
21+
{
22+
FString Err = "GetLinkedAddresses failed due to missing world or world context object.";
23+
24+
IMTBL_WARN("%s", *Err)
25+
Failed.Broadcast(Err, TArray<FString>());
26+
27+
return;
28+
}
29+
30+
GetSubsystem()->WhenReady(this, &UImtblPassportGetLinkedAddressesAsyncAction::DoGetLinkedAddresses);
31+
}
32+
33+
void UImtblPassportGetLinkedAddressesAsyncAction::DoGetLinkedAddresses(TWeakObjectPtr<UImtblJSConnector> JSConnector)
34+
{
35+
auto Passport = GetSubsystem()->GetPassport();
36+
37+
if (Passport.IsValid())
38+
{
39+
Passport->GetLinkedAddresses(UImmutablePassport::FImtblPassportResponseDelegate::CreateUObject(this, &UImtblPassportGetLinkedAddressesAsyncAction::OnGetLinkedAddressesResponse));
40+
}
41+
}
42+
43+
void UImtblPassportGetLinkedAddressesAsyncAction::OnGetLinkedAddressesResponse(FImmutablePassportResult Result)
44+
{
45+
if (Result.Success)
46+
{
47+
Success.Broadcast(TEXT(""), UImmutablePassport::GetResponseResultAsStringArray(Result.Response));
48+
}
49+
else
50+
{
51+
Failed.Broadcast(Result.Error, TArray<FString>());
52+
}
53+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Fill out your copyright notice in the Description page of Project Settings.
2+
3+
#include "Immutable/Actions/ImtblPassportGetTokenAsyncAction.h"
4+
5+
#include "Immutable/ImmutablePassport.h"
6+
#include "Immutable/ImmutableSubsystem.h"
7+
#include "Immutable/Misc/ImtblLogging.h"
8+
9+
UImtblPassportGetTokenAsyncAction* UImtblPassportGetTokenAsyncAction::GetAccessToken(UObject* WorldContextObject)
10+
{
11+
UImtblPassportGetTokenAsyncAction* Node = NewObject<UImtblPassportGetTokenAsyncAction>();
12+
13+
Node->WorldContextObject = WorldContextObject;
14+
Node->Type = ACCESS;
15+
16+
return Node;
17+
}
18+
19+
UImtblPassportGetTokenAsyncAction* UImtblPassportGetTokenAsyncAction::GetIdToken(UObject* WorldContextObject)
20+
{
21+
UImtblPassportGetTokenAsyncAction* Node = NewObject<UImtblPassportGetTokenAsyncAction>();
22+
23+
Node->WorldContextObject = WorldContextObject;
24+
Node->Type = ID;
25+
26+
return Node;
27+
}
28+
29+
void UImtblPassportGetTokenAsyncAction::Activate()
30+
{
31+
if (!WorldContextObject || !WorldContextObject->GetWorld())
32+
{
33+
FString Err = "Get Token failed due to missing world or world context object.";
34+
IMTBL_WARN("%s", *Err)
35+
Failed.Broadcast(Err, TEXT(""));
36+
return;
37+
}
38+
39+
40+
GetSubsystem()->WhenReady(this, &UImtblPassportGetTokenAsyncAction::DoGetToken);
41+
}
42+
43+
void UImtblPassportGetTokenAsyncAction::DoGetToken(TWeakObjectPtr<UImtblJSConnector> JSConnector)
44+
{
45+
auto Passport = GetSubsystem()->GetPassport();
46+
47+
if (Passport.IsValid())
48+
{
49+
switch(Type)
50+
{
51+
case ID:
52+
Passport->GetIdToken(UImmutablePassport::FImtblPassportResponseDelegate::CreateUObject(this, &UImtblPassportGetTokenAsyncAction::OnGetTokenResponse));
53+
break;
54+
case ACCESS:
55+
Passport->GetAccessToken(UImmutablePassport::FImtblPassportResponseDelegate::CreateUObject(this, &UImtblPassportGetTokenAsyncAction::OnGetTokenResponse));
56+
break;
57+
}
58+
}
59+
}
60+
61+
void UImtblPassportGetTokenAsyncAction::OnGetTokenResponse(FImmutablePassportResult Result)
62+
{
63+
if (Result.Success)
64+
{
65+
Success.Broadcast(TEXT(""), UImmutablePassport::GetResponseResultAsString(Result.Response));
66+
}
67+
else
68+
{
69+
Failed.Broadcast(Result.Error, TEXT(""));
70+
}
71+
}

Source/Immutable/Private/Immutable/ImmutablePassport.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ void UImmutablePassport::GetEmail(const FImtblPassportResponseDelegate& Response
158158
CallJS(ImmutablePassportAction::GetEmail, TEXT(""), ResponseDelegate, FImtblJSResponseDelegate::CreateUObject(this, &UImmutablePassport::OnBridgeCallbackResponse));
159159
}
160160

161+
void UImmutablePassport::GetLinkedAddresses(const FImtblPassportResponseDelegate& ResponseDelegate)
162+
{
163+
CallJS(ImmutablePassportAction::GetLinkedAddresses, TEXT(""), ResponseDelegate, FImtblJSResponseDelegate::CreateUObject(this, &UImmutablePassport::OnBridgeCallbackResponse));
164+
}
165+
161166
void UImmutablePassport::ImxTransfer(const FImxTransferRequest& RequestData, const FImtblPassportResponseDelegate& ResponseDelegate)
162167
{
163168
IMTBL_LOG("Tranfer Request: %s", *UStructToJsonString(RequestData))
@@ -223,7 +228,6 @@ FString UImmutablePassport::GetResponseResultAsString(const FImtblJSResponse& Re
223228
}
224229

225230
return Response.JsonObject->GetStringField(TEXT("result"));
226-
227231
}
228232

229233
bool UImmutablePassport::GetResponseResultAsBool(const FImtblJSResponse& Response)
@@ -238,6 +242,25 @@ bool UImmutablePassport::GetResponseResultAsBool(const FImtblJSResponse& Respons
238242
return Response.JsonObject->GetBoolField(TEXT("result"));
239243
}
240244

245+
TArray<FString> UImmutablePassport::GetResponseResultAsStringArray(const FImtblJSResponse& Response)
246+
{
247+
if (!Response.JsonObject.IsValid())
248+
{
249+
IMTBL_ERR("Response JSON data for %s is not valid", *Response.responseFor)
250+
251+
return TArray<FString>();
252+
}
253+
254+
TArray<FString> StringArray;
255+
256+
for (const TSharedPtr<FJsonValue>& Value : Response.JsonObject->GetArrayField(TEXT("result")))
257+
{
258+
StringArray.Add(Value->AsString());
259+
}
260+
261+
return StringArray;
262+
}
263+
241264

242265
void UImmutablePassport::Setup(const TWeakObjectPtr<UImtblJSConnector> Connector)
243266
{

Source/Immutable/Public/Immutable/Actions/ImtblPassportGetAccessTokenAsyncAction.h

Lines changed: 0 additions & 34 deletions
This file was deleted.

Source/Immutable/Public/Immutable/Actions/ImtblPassportGetIdTokenAsyncAction.h

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Fill out your copyright notice in the Description page of Project Settings.
2+
3+
#pragma once
4+
5+
#include "ImtblBlueprintAsyncAction.h"
6+
7+
#include "ImtblPassportGetLinkedAddressesAsyncAction.generated.h"
8+
9+
/**
10+
* The Blueprint node retrieves a list of wallet addresses linked to the passport wallet.
11+
*/
12+
UCLASS()
13+
class IMMUTABLE_API UImtblPassportGetLinkedAddressesAsyncAction : public UImtblBlueprintAsyncAction
14+
{
15+
GENERATED_BODY()
16+
17+
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FPassportGetLinkedAddressesOutputPin, FString, ErrorMessage, const TArray<FString> &, Addresses);
18+
19+
public:
20+
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject", BlueprintInternalUseOnly = "true"), Category = "Immutable")
21+
static UImtblPassportGetLinkedAddressesAsyncAction* GetLinkedAddresses(UObject* WorldContextObject);
22+
23+
virtual void Activate() override;
24+
25+
private:
26+
void DoGetLinkedAddresses(TWeakObjectPtr<class UImtblJSConnector> JSGetConnector);
27+
void OnGetLinkedAddressesResponse(struct FImmutablePassportResult Result);
28+
29+
UPROPERTY(BlueprintAssignable)
30+
FPassportGetLinkedAddressesOutputPin Success;
31+
UPROPERTY(BlueprintAssignable)
32+
FPassportGetLinkedAddressesOutputPin Failed;
33+
};

0 commit comments

Comments
 (0)