Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
cc53349
feature: Add simplified asset listing
kirre-bylund Aug 20, 2025
15b2fa0
ci: Add tests for simplified asset listing
kirre-bylund Aug 22, 2025
8be74e9
chore: Remove unused workflow
kirre-bylund Aug 22, 2025
61d2cf9
fix: Add serializability to hero responses
kirre-bylund Aug 22, 2025
810064c
ci: Add test categories and a minimal and a full ci test config
kirre-bylund Aug 22, 2025
ced0f08
fix: Fixes after pull request
kirre-bylund Aug 22, 2025
8cc1725
feat: Add support for Friends and Followers
kirre-bylund Aug 29, 2025
0e55393
feat: Add support for Epic IAP
kirre-bylund Aug 27, 2025
b6c3d4f
doc: Update documentation for epic iap after testing
kirre-bylund Aug 29, 2025
ed5babb
fix: Remove online status until it's working
kirre-bylund Sep 5, 2025
12a97eb
fix: Make session refreshes work with HTTP Execution Queue
kirre-bylund Sep 8, 2025
6b65dd4
fix: Make WhiteLabelLoginAndStartSesssion use the same email for both…
kirre-bylund Sep 9, 2025
2d1b379
feat: Add last_seen to session and player info responses
kirre-bylund Sep 9, 2025
565c069
feat: Add increment score support
kirre-bylund Sep 9, 2025
a48060b
feat: Add support for querying a score
kirre-bylund Sep 9, 2025
c9aacd5
Bump version to v6.0.0
kirre-bylund Sep 10, 2025
ac8450a
feat: Add support for deleting characters
kirre-bylund Sep 12, 2025
135df6b
feat: Add progression id to progression responses
kirre-bylund Sep 10, 2025
e308072
feat: Add pagination to friends & followers and get friend
kirre-bylund Sep 11, 2025
f63cd85
ci: Increase Integration Test timeout
kirre-bylund Sep 15, 2025
537002d
ci: Increase timeout only for longer ci
kirre-bylund Sep 15, 2025
ff3aae4
fix: Make last_seen nullable
kirre-bylund Sep 16, 2025
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
18 changes: 16 additions & 2 deletions .github/workflows/run-tests-and-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ on:
push:
branches: # Made towards the following
- main
- dev
- ci/*
workflow_dispatch:
inputs:
LL_URL:
Expand All @@ -22,6 +24,7 @@ jobs:
name: Test SDK in Editor
runs-on: [ubuntu-latest]
needs: []
# if: ( true == false )
timeout-minutes: 10
env:
LL_USE_STAGE: false
Expand Down Expand Up @@ -325,7 +328,7 @@ jobs:
runs-on: ubuntu-latest
if: ${{ vars.ENABLE_INTEGRATION_TESTS == 'true' }}
needs: [editor-smoke-test]
timeout-minutes: 15
timeout-minutes: ${{ (github.event_name == 'pull_request' && github.base_ref == 'main') && 40 || 15 }}
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -422,8 +425,10 @@ jobs:
if [[ ${{ github.event_name == 'workflow_dispatch' }} == true ]]; then echo "LOOTLOCKER_URL=${{ INPUTS.LL_URL }}" | sed -e 's/https:\/\///g' >> $GITHUB_ENV; elif [ ${{ vars.LL_USE_STAGE }} == 'true' ]; then echo "LOOTLOCKER_URL=${{ SECRETS.LOOTLOCKER_API_STAGE_URL }}" | sed -e 's/https:\/\///g' >> $GITHUB_ENV; elif [ ${{ vars.LL_USE_LOCAL_BACKEND }} == 'true' ]; then echo "LOOTLOCKER_URL=localhost:8080" >> $GITHUB_ENV; else echo "LOOTLOCKER_URL=${{ SECRETS.LOOTLOCKER_API_PRODUCTION_URL }}" | sed -e 's/https:\/\///g' >> $GITHUB_ENV; fi
if [[ ${{ github.event_name == 'workflow_dispatch' }} == true ]]; then echo "TARGET_ENVIRONMENT=CUSTOM" >> $GITHUB_ENV; echo "USE_TAILSCALE=true" >> $GITHUB_ENV; elif [ ${{ vars.LL_USE_STAGE }} == 'true' ]; then echo "TARGET_ENVIRONMENT=STAGE" >> $GITHUB_ENV; echo "USE_TAILSCALE=true" >> $GITHUB_ENV; elif [ ${{ vars.LL_USE_LOCAL_BACKEND }} == 'true' ]; then echo "TARGET_ENVIRONMENT=LOCAL" >> $GITHUB_ENV; echo "USE_TAILSCALE=false" >> $GITHUB_ENV; else echo "TARGET_ENVIRONMENT=PRODUCTION" >> $GITHUB_ENV; echo "USE_TAILSCALE=false" >> $GITHUB_ENV; fi
COINFLIP=$(($RANDOM%${{ vars.LL_USE_LEGACY_HTTP_ONE_IN }}))
echo "Coinflip resulted in $COINFLIP"
if [[ $COINFLIP -lt 1 ]]; then echo "USE_HTTP_EXECUTION_QUEUE=false" >> $GITHUB_ENV; else echo "USE_HTTP_EXECUTION_QUEUE=true" >> $GITHUB_ENV; fi
COINFLIP=$(($RANDOM%2))
echo "Coinflip resulted in $COINFLIP"
if [[ $COINFLIP -lt 1 ]]; then echo "JSON_LIBRARY=newtonsoft" >> $GITHUB_ENV; else echo "JSON_LIBRARY=zerodep" >> $GITHUB_ENV; fi
- name: Checkout this repository
uses: actions/checkout@v4
Expand Down Expand Up @@ -485,6 +490,14 @@ jobs:
- name: Cat projects settings file
run: |
cat TestProject/ProjectSettings/ProjectSettings.asset
- name: Set test category to full ci when PR to main
if: ${{ github.event_name == 'pull_request' && github.base_ref == 'main' }}
run: |
echo 'TEST_CATEGORY=-testCategory "LootLockerCI"' >> $GITHUB_ENV
- name: Set test category to minimal ci
if: ${{ github.event_name != 'pull_request' || github.base_ref != 'main' }}
run: |
echo 'TEST_CATEGORY=-testCategory "LootLockerCIFast"' >> $GITHUB_ENV
####### RUN TESTS ###########
- name: Cache Libraries
if: ${{ vars.ENABLE_INTEGRATION_TESTS == 'true' }}
Expand All @@ -508,7 +521,7 @@ jobs:
checkName: Integration tests (${{ matrix.unityVersion }}-${{ ENV.JSON_LIBRARY }}) Test Results
artifactsPath: ${{ matrix.unityVersion }}-${{ ENV.JSON_LIBRARY }}-artifacts
githubToken: ${{ secrets.GITHUB_TOKEN }}
customParameters: -lootlockerurl ${{ ENV.LOOTLOCKER_URL }} ${{ ENV.USER_COMMANDLINE_ARGUMENTS }}
customParameters: -lootlockerurl ${{ ENV.LOOTLOCKER_URL }} ${{ ENV.USER_COMMANDLINE_ARGUMENTS }} ${{ ENV.TEST_CATEGORY }}
useHostNetwork: true
####### CLEANUP ###########
- name: Bring down Go Backend
Expand Down Expand Up @@ -597,6 +610,7 @@ jobs:
validate-sdk:
name: Validate SDK
runs-on: [ubuntu-latest]
if: ${{ true == false }}
needs: [editor-smoke-test]
timeout-minutes: 8
env:
Expand Down
19 changes: 0 additions & 19 deletions .github/workflows/selfhosted-poc.yml

This file was deleted.

18 changes: 15 additions & 3 deletions Runtime/Client/LootLockerEndPoints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ public class LootLockerEndPoints
public static EndPointClass getEquipableContextToDefaultClass = new EndPointClass("v1/player/character/contexts", LootLockerHTTPMethod.GET);
public static EndPointClass getEquipableContextbyClass = new EndPointClass("v1/player/character/{0}/contexts", LootLockerHTTPMethod.GET);
public static EndPointClass createClass = new EndPointClass("v1/player/character", LootLockerHTTPMethod.POST);
public static EndPointClass deleteClass = new EndPointClass("v1/player/character/{0}", LootLockerHTTPMethod.DELETE);
public static EndPointClass listClassTypes = new EndPointClass("v1/player/character/types", LootLockerHTTPMethod.GET);
public static EndPointClass listPlayerClasses = new EndPointClass("v1/player/character/list", LootLockerHTTPMethod.GET);

Expand Down Expand Up @@ -136,12 +137,14 @@ public class LootLockerEndPoints
public static EndPointClass deleteKeyValue = new EndPointClass("v1/player/storage?key={0}", LootLockerHTTPMethod.DELETE);
public static EndPointClass getOtherPlayersPublicKeyValuePairs = new EndPointClass("v1/player/{0}/storage", LootLockerHTTPMethod.GET);

// Asset storage
// Assets
[Header("Assets")]
public static EndPointClass gettingContexts = new EndPointClass("v1/contexts", LootLockerHTTPMethod.GET);
public static EndPointClass gettingAssetListWithCount = new EndPointClass("v1/assets/list?count={0}", LootLockerHTTPMethod.GET);
public static EndPointClass getAssetsById = new EndPointClass("v1/assets/by/id?asset_ids={0}", LootLockerHTTPMethod.GET);
public static EndPointClass gettingAllAssets = new EndPointClass("v1/assets", LootLockerHTTPMethod.GET);

public static EndPointClass ListAssets = new EndPointClass("assets/artful-alpaca/v1", LootLockerHTTPMethod.POST);
public static EndPointClass gettingAssetInformationForOneorMoreAssets = new EndPointClass("v1/asset/{0}", LootLockerHTTPMethod.GET);
public static EndPointClass listingFavouriteAssets = new EndPointClass("v1/asset/favourites", LootLockerHTTPMethod.GET);
public static EndPointClass addingFavouriteAssets = new EndPointClass("v1/asset/{0}/favourite", LootLockerHTTPMethod.POST);
Expand Down Expand Up @@ -206,6 +209,7 @@ public class LootLockerEndPoints
public static EndPointClass purchaseCatalogItem = new EndPointClass("purchase", LootLockerHTTPMethod.POST);
public static EndPointClass redeemAppleAppStorePurchase = new EndPointClass("store/apple/redeem", LootLockerHTTPMethod.POST);
public static EndPointClass redeemGooglePlayStorePurchase = new EndPointClass("store/google/redeem", LootLockerHTTPMethod.POST);
public static EndPointClass redeemEpicStorePurchase = new EndPointClass("store/epic/redeem", LootLockerHTTPMethod.POST);

public static EndPointClass beginSteamPurchaseRedemption = new EndPointClass("store/steam/redeem/begin", LootLockerHTTPMethod.POST);
public static EndPointClass querySteamPurchaseRedemptionStatus = new EndPointClass("store/steam/redeem/query", LootLockerHTTPMethod.POST);
Expand All @@ -231,6 +235,8 @@ public class LootLockerEndPoints
public static EndPointClass getAllMemberRanks = new EndPointClass("leaderboards/member/{0}?count={1}", LootLockerHTTPMethod.GET);
public static EndPointClass getScoreList = new EndPointClass("leaderboards/{0}/list?count={1}", LootLockerHTTPMethod.GET);
public static EndPointClass submitScore = new EndPointClass("leaderboards/{0}/submit", LootLockerHTTPMethod.POST);
public static EndPointClass incrementScore = new EndPointClass("leaderboards/{0}/increment", LootLockerHTTPMethod.POST);
public static EndPointClass queryScore = new EndPointClass("leaderboards/{0}/query", LootLockerHTTPMethod.POST);
public static EndPointClass getLeaderboardData = new EndPointClass("leaderboards/{0}/info", LootLockerHTTPMethod.GET);
public static EndPointClass listLeaderboardArchive = new EndPointClass("leaderboards/{0}/archive/list", LootLockerHTTPMethod.GET);
public static EndPointClass getLeaderboardArchive = new EndPointClass("leaderboards/archive/read?key={0}&", LootLockerHTTPMethod.GET);
Expand Down Expand Up @@ -286,8 +292,8 @@ public class LootLockerEndPoints

// Friends
[Header("Friends")]
#if LOOTLOCKER_BETA_FRIENDS
public static EndPointClass listFriends = new EndPointClass("player/friends", LootLockerHTTPMethod.GET);
public static EndPointClass getFriend = new EndPointClass("player/friends/{0}", LootLockerHTTPMethod.GET);
public static EndPointClass listIncomingFriendReqeusts = new EndPointClass("player/friends/incoming", LootLockerHTTPMethod.GET);
public static EndPointClass listOutgoingFriendRequests = new EndPointClass("player/friends/outgoing", LootLockerHTTPMethod.GET);
public static EndPointClass sendFriendRequest = new EndPointClass("player/friends/{0}", LootLockerHTTPMethod.POST);
Expand All @@ -298,7 +304,13 @@ public class LootLockerEndPoints
public static EndPointClass blockPlayer = new EndPointClass("player/friends/{0}/block", LootLockerHTTPMethod.POST);
public static EndPointClass unblockPlayer = new EndPointClass("player/friends/{0}/unblock", LootLockerHTTPMethod.POST);
public static EndPointClass deleteFriend = new EndPointClass("player/friends/{0}", LootLockerHTTPMethod.DELETE);
#endif

// Followers
[Header("Followers")]
public static EndPointClass listFollowers = new EndPointClass("player/{0}/followers", LootLockerHTTPMethod.GET);
public static EndPointClass listFollowing = new EndPointClass("player/{0}/following", LootLockerHTTPMethod.GET);
public static EndPointClass followPlayer = new EndPointClass("player/{0}/followers/follow", LootLockerHTTPMethod.POST);
public static EndPointClass unfollowPlayer = new EndPointClass("player/{0}/followers/unfollow", LootLockerHTTPMethod.DELETE);

// Entitlements
[Header("Entitlements")]
Expand Down
Loading
Loading