Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Config/DefaultEngine.ini
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ StoreVersion=7
StoreVersionOffsetArm64=0
StoreVersionOffsetX8664=0
ApplicationDisplayName=Unreal SDK
VersionDisplayName=3.0.4
VersionDisplayName=3.0.5
MinSDKVersion=26
TargetSDKVersion=35
InstallLocation=InternalOnly
Expand Down Expand Up @@ -359,7 +359,7 @@ AdditionalPlistData="<key>CFBundleURLTypes</key>\n<array>\n<dict>\n<key>CFBundle
bEnableGameCenterSupport=False
bEnableCloudKitSupport=False
bDisableHTTPS=False
VersionInfo=3.0.4
VersionInfo=3.0.5
FrameRateLock=PUFRL_60
bAutomaticSigning=True
IOSTeamID=XR9N5MTG4N
Expand Down
Git LFS file not shown
2 changes: 1 addition & 1 deletion Plugins/SequencePlugin/SequencePlugin.uplugin
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"EngineVersion": "5.4",
"FileVersion": 3,
"Version": 3,
"VersionName": "3.0.4",
"VersionName": "3.0.5",
"FriendlyName": "SequencePlugin",
"Description": "",
"Category": "Sequence",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,28 @@
#include "EcosystemWallet/SequenceConnect.h"
#include "EcosystemClient.h"
#include "Util/HttpHandler.h"

USequenceConnect::USequenceConnect()
{
this->Client = NewObject<UEcosystemClient>();
}

void USequenceConnect::GetEcosystemConfig(const TSuccessCallback<FEcosystemConfig>& OnSuccess, const FFailureCallback& OnFailure)
{
const FString WalletAppUrl = UConfigFetcher::GetConfigVar("WalletAppUrl");
UHttpHandler* HttpHandler = NewObject<UHttpHandler>();
HttpHandler->SetRequestUrl(WalletAppUrl);
HttpHandler->SendGetRequest("api/wallet-configuration", [OnSuccess](const FString& Response)
{
const FEcosystemConfig Config = USequenceSupport::JSONStringToStruct<FEcosystemConfig>(Response);
OnSuccess(Config);
},
[OnFailure](const FString& Response)
{
OnFailure(FSequenceError(EErrorType::RequestFail, Response));
});
}

void USequenceConnect::SignInWithEmail(const FString& Email, const TScriptInterface<IPermissions>& Permissions, const TSuccessCallback<bool>& OnSuccess, const FFailureCallback& OnFailure)
{
this->Client->CreateNewSession(ESessionCreationType::CreateNewSession, "email",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,21 @@ USequenceConnectBP::USequenceConnectBP()
this->SequenceConnect = NewObject<USequenceConnect>();
}

void USequenceConnectBP::GetEcosystemConfig(FOnEcosystemConfig OnSuccess, FOnFailure OnFailure)
{
const TSuccessCallback<FEcosystemConfig> SuccessCallback = [this, OnSuccess](const FEcosystemConfig& Config)
{
OnSuccess.ExecuteIfBound(Config);
};

const FFailureCallback FailureCallback = [OnFailure](const FSequenceError& Error)
{
OnFailure.ExecuteIfBound(Error.Message);
};

this->SequenceConnect->GetEcosystemConfig(SuccessCallback, FailureCallback);
}

void USequenceConnectBP::SignInWithEmail(const FString& Email, const TScriptInterface<IPermissions> Permissions, FOnSuccess OnSuccess, FOnFailure OnFailure)
{
const TSuccessCallback<bool> SuccessCallback = [this, OnSuccess](bool Result)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class SEQUENCEPLUGIN_API USequenceRPCManager : public UObject
*/
bool PreserveSessionWallet = false;

inline const static FString WaaSVersion = FString(TEXT("1.0.0 (Unreal 3.0.4)"));
inline const static FString WaaSVersion = FString(TEXT("1.0.0 (Unreal 3.0.5)"));

inline const static FString WaaSAuthenticatorIntentsUrlPath = TEXT("/rpc/WaasAuthenticator/SendIntent");
inline const static FString WaaSAuthenticatorRegisterUrlPath = TEXT("/rpc/WaasAuthenticator/RegisterSession");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,13 @@ void UHttpHandler::SetRequestUrl(const FString& Url)

void UHttpHandler::SendPostRequest(const FString& Endpoint, const FString& Payload, TSuccessCallback<FString> OnSuccess, TFunction<void(FString)> OnFailure) const
{
const FString FinalUrl = FString::Printf(TEXT("%s/%s"), *this->RequestUrl, *Endpoint);
FString Url = this->RequestUrl;
if (!this->RequestUrl.EndsWith(TEXT("/")))
{
Url += TEXT("/");
}

const FString FinalUrl = FString::Printf(TEXT("%s%s"), *Url, *Endpoint);
const TSharedRef<IHttpRequest> HTTP_Post_Req = FHttpModule::Get().CreateRequest();

HTTP_Post_Req->SetVerb("POST");
Expand Down Expand Up @@ -61,3 +67,58 @@ void UHttpHandler::SendPostRequest(const FString& Endpoint, const FString& Paylo

HTTP_Post_Req->ProcessRequest();
}

void UHttpHandler::SendGetRequest(const FString& Endpoint, TSuccessCallback<FString> OnSuccess, TFunction<void(FString)> OnFailure) const
{
FString Url = this->RequestUrl;
if (!this->RequestUrl.EndsWith(TEXT("/")))
{
Url += TEXT("/");
}

const FString FinalUrl = FString::Printf(TEXT("%s%s"), *Url, *Endpoint);
const TSharedRef<IHttpRequest> HTTP_Post_Req = FHttpModule::Get().CreateRequest();

HTTP_Post_Req->SetVerb("GET");
HTTP_Post_Req->SetHeader(TEXT("Accept"), TEXT("application/json"));

const FString AccessKey = UConfigFetcher::GetConfigVar("ProjectAccessKey");
HTTP_Post_Req->SetHeader(TEXT("X-Access-Key"), *AccessKey);

HTTP_Post_Req->SetTimeout(30);
HTTP_Post_Req->SetURL(FinalUrl);

const FString CurlCommand = FString::Printf(
TEXT("curl -X %s \"%s\" -H \"Accept: application/json\""),
*HTTP_Post_Req->GetVerb(),
*HTTP_Post_Req->GetURL()
);

SEQ_LOG_EDITOR(Log, TEXT("%s"), *CurlCommand);

HTTP_Post_Req->OnProcessRequestComplete().BindLambda([OnSuccess, OnFailure](const FHttpRequestPtr& Request, const FHttpResponsePtr& Response, const bool bWasSuccessful)
{
if (bWasSuccessful)
{
const FString Content = Response->GetContentAsString();
SEQ_LOG(Display, TEXT("Response: %s"), *Content);
OnSuccess(Content);
}
else
{
if (Request.IsValid() && Response.IsValid())
{
const FString ErrorMessage = Response->GetContentAsString();
SEQ_LOG(Error, TEXT("Request failed: %s"), *ErrorMessage);
OnFailure("Request failed: " + ErrorMessage);
}
else
{
SEQ_LOG(Error, TEXT("Request failed: Invalid Request Pointer"));
OnFailure("Request failed: Invalid Request Pointer");
}
}
});

HTTP_Post_Req->ProcessRequest();
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class SEQUENCEPLUGIN_API UHttpHandler : public UObject
public:
void SetRequestUrl(const FString& Url);
void SendPostRequest(const FString& Endpoint, const FString& Payload, TSuccessCallback<FString> OnSuccess, TFunction<void(FString)> OnFailure) const;
void SendGetRequest(const FString& Endpoint, TSuccessCallback<FString> OnSuccess, TFunction<void(FString)> OnFailure) const;

private:
FString RequestUrl;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#pragma once

#include "CoreMinimal.h"
#include "EcosystemConfig.generated.h"

USTRUCT(Blueprintable, BlueprintType)
struct SEQUENCEPLUGIN_API FEcosystemConfig
{
GENERATED_USTRUCT_BODY()

public:
UPROPERTY(BlueprintReadOnly, Category="0xSequence SDK")
FString Name;

UPROPERTY(BlueprintReadOnly, Category="0xSequence SDK")
FString Description;

UPROPERTY(BlueprintReadOnly, Category="0xSequence SDK")
FString Url;

UPROPERTY(BlueprintReadOnly, Category="0xSequence SDK")
TArray<FString> SupportedChains;

UPROPERTY(BlueprintReadOnly, Category="0xSequence SDK")
TArray<FString> EnabledProviders;
};
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include "Util/Async.h"
#include "CoreMinimal.h"
#include "EcosystemConfig.h"
#include "Permissions/Permissions.h"
#include "SequenceConnect.generated.h"

Expand All @@ -15,6 +16,7 @@ class SEQUENCEPLUGIN_API USequenceConnect : public UObject
public:
USequenceConnect();

void GetEcosystemConfig(const TSuccessCallback<FEcosystemConfig>& OnSuccess, const FFailureCallback& OnFailure);
void SignInWithEmail(const FString& Email, const TScriptInterface<IPermissions>& Permissions, const TSuccessCallback<bool>& OnSuccess, const FFailureCallback& OnFailure);
void SignInWithGoogle(const TScriptInterface<IPermissions>& Permissions, const TSuccessCallback<bool>& OnSuccess, const FFailureCallback& OnFailure);
void SignInWithApple(const TScriptInterface<IPermissions>& Permissions, const TSuccessCallback<bool>& OnSuccess, const FFailureCallback& OnFailure);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include "CoreMinimal.h"
#include "SequenceConnect.h"
#include "EcosystemConfig.h"
#include "Permissions/Permissions.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "SequenceConnectBP.generated.h"
Expand All @@ -13,7 +14,7 @@ class SEQUENCEPLUGIN_API USequenceConnectBP : public UGameInstanceSubsystem

public:
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnSession);

DECLARE_DYNAMIC_DELEGATE_OneParam(FOnEcosystemConfig, FEcosystemConfig, Config);
DECLARE_DYNAMIC_DELEGATE_OneParam(FOnFailure, const FString&, Error);
DECLARE_DYNAMIC_DELEGATE(FOnSuccess);

Expand All @@ -22,6 +23,9 @@ class SEQUENCEPLUGIN_API USequenceConnectBP : public UGameInstanceSubsystem
UPROPERTY(BlueprintAssignable, Category = "0xSequence SDK - Events")
FOnSession OnSessionCreated;

UFUNCTION(BlueprintCallable, Category="0xSequence SDK - Ecosystem Wallet")
void GetEcosystemConfig(FOnEcosystemConfig OnSuccess, FOnFailure OnFailure);

UFUNCTION(BlueprintCallable, Category="0xSequence SDK - Ecosystem Wallet")
void SignInWithEmail(const FString& Email, const TScriptInterface<IPermissions> Permissions, FOnSuccess OnSuccess, FOnFailure OnFailure);

Expand Down