From 12074e0351a7dd0c91b78bbe63bc58f85963b753 Mon Sep 17 00:00:00 2001 From: PlayFab Jenkins Bot Date: Thu, 9 Aug 2018 19:44:59 +0000 Subject: [PATCH] https://api.playfab.com/releaseNotes/#180809 --- PlayFabSdk/package.json | 2 +- PlayFabSdk/src/PlayFab/PlayFabAdminApi.js | 26 +- .../src/PlayFab/PlayFabAuthenticationApi.js | 179 + PlayFabSdk/src/PlayFab/PlayFabClientApi.js | 92 +- .../src/PlayFab/PlayFabCloudScriptApi.js | 171 + PlayFabSdk/src/PlayFab/PlayFabDataApi.js | 201 + PlayFabSdk/src/PlayFab/PlayFabEventsApi.js | 171 + ...layFabEntityApi.js => PlayFabGroupsApi.js} | 115 +- .../src/PlayFab/PlayFabMatchmakerApi.js | 26 +- PlayFabSdk/src/PlayFab/PlayFabProfilesApi.js | 196 + PlayFabSdk/src/PlayFab/PlayFabServerApi.js | 36 +- .../src/Typings/PlayFab/PlayFabAdminApi.d.ts | 40 +- .../PlayFab/PlayFabAuthenticationApi.d.ts | 55 + .../src/Typings/PlayFab/PlayFabClientApi.d.ts | 209 +- .../PlayFab/PlayFabCloudScriptApi.d.ts | 127 + .../src/Typings/PlayFab/PlayFabDataApi.d.ts | 292 ++ .../src/Typings/PlayFab/PlayFabEntityApi.d.ts | 1268 ------ .../src/Typings/PlayFab/PlayFabEventsApi.d.ts | 81 + .../src/Typings/PlayFab/PlayFabGroupsApi.d.ts | 662 +++ .../Typings/PlayFab/PlayFabMatchmakerApi.d.ts | 4 + .../Typings/PlayFab/PlayFabProfilesApi.d.ts | 243 + .../src/Typings/PlayFab/PlayFabServerApi.d.ts | 100 +- PlayFabSdk/src/Typings/PlayFab/Playfab.d.ts | 21 +- PlayFabTestingExample/PlayFabApiTest.csproj | 14 +- PlayFabTestingExample/PlayFabApiTest.js | 24 +- PlayFabTestingExample/PlayFabApiTest.ts | 38 +- .../code.jquery.com/qunit/qunit-1.19.0.js | 3963 ----------------- PlayFabTestingExample/index.html | 7 +- .../src/PlayFab/PlayFabAdminApi.js | 26 +- .../src/PlayFab/PlayFabAuthenticationApi.js | 179 + .../src/PlayFab/PlayFabClientApi.js | 92 +- .../src/PlayFab/PlayFabCloudScriptApi.js | 171 + .../src/PlayFab/PlayFabDataApi.js | 201 + .../src/PlayFab/PlayFabEventsApi.js | 171 + ...layFabEntityApi.js => PlayFabGroupsApi.js} | 115 +- .../src/PlayFab/PlayFabMatchmakerApi.js | 26 +- .../src/PlayFab/PlayFabProfilesApi.js | 196 + .../src/PlayFab/PlayFabServerApi.js | 36 +- .../src/typings/PlayFab/PlayFab.d.ts | 21 +- .../src/typings/PlayFab/PlayFabAdminApi.d.ts | 40 +- .../PlayFab/PlayFabAuthenticationApi.d.ts | 55 + .../src/typings/PlayFab/PlayFabClientApi.d.ts | 209 +- .../PlayFab/PlayFabCloudScriptApi.d.ts | 127 + .../src/typings/PlayFab/PlayFabDataApi.d.ts | 292 ++ .../src/typings/PlayFab/PlayFabEntityApi.d.ts | 1268 ------ .../src/typings/PlayFab/PlayFabEventsApi.d.ts | 81 + .../src/typings/PlayFab/PlayFabGroupsApi.d.ts | 662 +++ .../typings/PlayFab/PlayFabMatchmakerApi.d.ts | 4 + .../typings/PlayFab/PlayFabProfilesApi.d.ts | 243 + .../src/typings/PlayFab/PlayFabServerApi.d.ts | 100 +- 50 files changed, 5886 insertions(+), 6792 deletions(-) create mode 100644 PlayFabSdk/src/PlayFab/PlayFabAuthenticationApi.js create mode 100644 PlayFabSdk/src/PlayFab/PlayFabCloudScriptApi.js create mode 100644 PlayFabSdk/src/PlayFab/PlayFabDataApi.js create mode 100644 PlayFabSdk/src/PlayFab/PlayFabEventsApi.js rename PlayFabSdk/src/PlayFab/{PlayFabEntityApi.js => PlayFabGroupsApi.js} (68%) create mode 100644 PlayFabSdk/src/PlayFab/PlayFabProfilesApi.js create mode 100644 PlayFabSdk/src/Typings/PlayFab/PlayFabAuthenticationApi.d.ts create mode 100644 PlayFabSdk/src/Typings/PlayFab/PlayFabCloudScriptApi.d.ts create mode 100644 PlayFabSdk/src/Typings/PlayFab/PlayFabDataApi.d.ts delete mode 100644 PlayFabSdk/src/Typings/PlayFab/PlayFabEntityApi.d.ts create mode 100644 PlayFabSdk/src/Typings/PlayFab/PlayFabEventsApi.d.ts create mode 100644 PlayFabSdk/src/Typings/PlayFab/PlayFabGroupsApi.d.ts create mode 100644 PlayFabSdk/src/Typings/PlayFab/PlayFabProfilesApi.d.ts delete mode 100644 PlayFabTestingExample/code.jquery.com/qunit/qunit-1.19.0.js create mode 100644 PlayFabTestingExample/src/PlayFab/PlayFabAuthenticationApi.js create mode 100644 PlayFabTestingExample/src/PlayFab/PlayFabCloudScriptApi.js create mode 100644 PlayFabTestingExample/src/PlayFab/PlayFabDataApi.js create mode 100644 PlayFabTestingExample/src/PlayFab/PlayFabEventsApi.js rename PlayFabTestingExample/src/PlayFab/{PlayFabEntityApi.js => PlayFabGroupsApi.js} (68%) create mode 100644 PlayFabTestingExample/src/PlayFab/PlayFabProfilesApi.js create mode 100644 PlayFabTestingExample/src/typings/PlayFab/PlayFabAuthenticationApi.d.ts create mode 100644 PlayFabTestingExample/src/typings/PlayFab/PlayFabCloudScriptApi.d.ts create mode 100644 PlayFabTestingExample/src/typings/PlayFab/PlayFabDataApi.d.ts delete mode 100644 PlayFabTestingExample/src/typings/PlayFab/PlayFabEntityApi.d.ts create mode 100644 PlayFabTestingExample/src/typings/PlayFab/PlayFabEventsApi.d.ts create mode 100644 PlayFabTestingExample/src/typings/PlayFab/PlayFabGroupsApi.d.ts create mode 100644 PlayFabTestingExample/src/typings/PlayFab/PlayFabProfilesApi.d.ts diff --git a/PlayFabSdk/package.json b/PlayFabSdk/package.json index f8e1ea9e..0a78e7a8 100644 --- a/PlayFabSdk/package.json +++ b/PlayFabSdk/package.json @@ -1,6 +1,6 @@ { "name": "playfab-web-sdk", - "version": "1.27.180716", + "version": "1.28.180809", "description": "Playfab SDK for JS client applications", "license": "Apache-2.0", "repository": { diff --git a/PlayFabSdk/src/PlayFab/PlayFabAdminApi.js b/PlayFabSdk/src/PlayFab/PlayFabAdminApi.js index ceaf756d..6968a967 100644 --- a/PlayFabSdk/src/PlayFab/PlayFabAdminApi.js +++ b/PlayFabSdk/src/PlayFab/PlayFabAdminApi.js @@ -21,7 +21,10 @@ if(!PlayFab.settings) { if(!PlayFab._internalSettings) { PlayFab._internalSettings = { entityToken: null, - sdkVersion: "1.27.180716", + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, sessionTicket: null, productionServerUrl: ".playfabapi.com", errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", @@ -47,7 +50,7 @@ if(!PlayFab._internalSettings) { } }, - ExecuteRequest: function (completeUrl, request, authkey, authValue, callback, customData, extraHeaders) { + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { if (callback != null && typeof (callback) != "function") throw "Callback must be null of a function"; @@ -57,6 +60,21 @@ if(!PlayFab._internalSettings) { var startTime = new Date(); var requestBody = JSON.stringify(request); + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + var xhr = new XMLHttpRequest(); // window.console.log("URL: " + completeUrl); xhr.open("POST", completeUrl, true); @@ -125,8 +143,8 @@ if(!PlayFab._internalSettings) { } } -PlayFab.buildIdentifier = "jbuild_javascriptsdk_0"; -PlayFab.sdkVersion = "1.27.180716"; +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; PlayFab.GenerateErrorReport = function (error) { if (error == null) return ""; diff --git a/PlayFabSdk/src/PlayFab/PlayFabAuthenticationApi.js b/PlayFabSdk/src/PlayFab/PlayFabAuthenticationApi.js new file mode 100644 index 00000000..aca652e4 --- /dev/null +++ b/PlayFabSdk/src/PlayFab/PlayFabAuthenticationApi.js @@ -0,0 +1,179 @@ +/// + +var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; + +if(!PlayFab.settings) { + PlayFab.settings = { + titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) + developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website) + advertisingIdType: null, + advertisingIdValue: null, + GlobalHeaderInjection: null, + + // disableAdvertising is provided for completeness, but changing it is not suggested + // Disabling this may prevent your advertising-related PlayFab marketplace partners from working correctly + disableAdvertising: false, + AD_TYPE_IDFA: "Idfa", + AD_TYPE_ANDROID_ID: "Adid" + } +} + +if(!PlayFab._internalSettings) { + PlayFab._internalSettings = { + entityToken: null, + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, + sessionTicket: null, + productionServerUrl: ".playfabapi.com", + errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", + errorLoggedIn: "Must be logged in to call this method", + errorEntityToken: "You must successfully call GetEntityToken before calling this", + errorSecretKey: "Must have PlayFab.settings.developerSecretKey set to call this method", + + GetServerUrl: function () { + return "https://" + PlayFab.settings.titleId + PlayFab._internalSettings.productionServerUrl; + }, + + InjectHeaders: function (xhr, headersObj) { + if (!headersObj) + return; + + for (var headerKey in headersObj) + { + try { + xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]); + } catch (e) { + console.log("Failed to append header: " + headerKey + " = " + headersObj[headerKey] + "Error: " + e); + } + } + }, + + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { + if (callback != null && typeof (callback) != "function") + throw "Callback must be null of a function"; + + if (request == null) + request = {}; + + var startTime = new Date(); + var requestBody = JSON.stringify(request); + + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + + var xhr = new XMLHttpRequest(); + // window.console.log("URL: " + completeUrl); + xhr.open("POST", completeUrl, true); + + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("X-PlayFabSDK", "JavaScriptSDK-" + PlayFab._internalSettings.sdkVersion); + if (authkey != null) + xhr.setRequestHeader(authkey, authValue); + PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection); + PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders); + + xhr.onloadend = function () { + if (callback == null) + return; + + var result; + try { + // window.console.log("parsing json result: " + xhr.responseText); + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + if (result.code === 200) + callback(result, null); + else + callback(null, result); + } + + xhr.onerror = function () { + if (callback == null) + return; + + var result; + try { + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + callback(null, result); + } + + xhr.send(requestBody); + } + } +} + +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; +PlayFab.GenerateErrorReport = function (error) { + if (error == null) + return ""; + var fullErrors = error.errorMessage; + for (var paramName in error.errorDetails) + for (var msgIdx in error.errorDetails[paramName]) + fullErrors += "\n" + paramName + ": " + error.errorDetails[paramName][msgIdx]; + return fullErrors; +}; + +PlayFab.AuthenticationApi = { + ForgetAllCredentials: function () { + PlayFab._internalSettings.sessionTicket = null; + PlayFab._internalSettings.entityToken = null; + }, + + GetEntityToken: function (request, callback, customData, extraHeaders) { + var authKey = null; var authValue = null; + if (!authKey && PlayFab._internalSettings.sessionTicket) { authKey = "X-Authorization"; authValue = PlayFab._internalSettings.sessionTicket; } + if (!authKey && PlayFab.settings.developerSecretKey) { authKey = "X-SecretKey"; authValue = PlayFab.settings.developerSecretKey; } + var overloadCallback = function (result, error) { + if (result != null && result.data.EntityToken != null) + PlayFab._internalSettings.entityToken = result.data.EntityToken; + if (callback != null && typeof (callback) == "function") + callback(result, error); + }; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Authentication/GetEntityToken", request, authKey, authValue, overloadCallback, customData, extraHeaders); + }, +}; + +var PlayFabAuthenticationSDK = PlayFab.AuthenticationApi; + diff --git a/PlayFabSdk/src/PlayFab/PlayFabClientApi.js b/PlayFabSdk/src/PlayFab/PlayFabClientApi.js index 53d6317f..6e08c731 100644 --- a/PlayFabSdk/src/PlayFab/PlayFabClientApi.js +++ b/PlayFabSdk/src/PlayFab/PlayFabClientApi.js @@ -21,7 +21,10 @@ if(!PlayFab.settings) { if(!PlayFab._internalSettings) { PlayFab._internalSettings = { entityToken: null, - sdkVersion: "1.27.180716", + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, sessionTicket: null, productionServerUrl: ".playfabapi.com", errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", @@ -47,7 +50,7 @@ if(!PlayFab._internalSettings) { } }, - ExecuteRequest: function (completeUrl, request, authkey, authValue, callback, customData, extraHeaders) { + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { if (callback != null && typeof (callback) != "function") throw "Callback must be null of a function"; @@ -57,6 +60,21 @@ if(!PlayFab._internalSettings) { var startTime = new Date(); var requestBody = JSON.stringify(request); + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + var xhr = new XMLHttpRequest(); // window.console.log("URL: " + completeUrl); xhr.open("POST", completeUrl, true); @@ -125,8 +143,8 @@ if(!PlayFab._internalSettings) { } } -PlayFab.buildIdentifier = "jbuild_javascriptsdk_0"; -PlayFab.sdkVersion = "1.27.180716"; +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; PlayFab.GenerateErrorReport = function (error) { if (error == null) return ""; @@ -364,6 +382,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromFacebookIDs", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + GetPlayFabIDsFromFacebookInstantGamesIds: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromFacebookInstantGamesIds", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + GetPlayFabIDsFromGameCenterIDs: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromGameCenterIDs", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); @@ -384,6 +407,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromKongregateIDs", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + GetPlayFabIDsFromNintendoSwitchDeviceIds: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromNintendoSwitchDeviceIds", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + GetPlayFabIDsFromSteamIDs: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromSteamIDs", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); @@ -487,6 +515,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkFacebookAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + LinkFacebookInstantGamesId: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkFacebookInstantGamesId", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + LinkGameCenterAccount: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkGameCenterAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); @@ -507,6 +540,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkKongregate", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + LinkNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkNintendoSwitchDeviceId", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + LinkSteamAccount: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkSteamAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); @@ -594,6 +632,24 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LoginWithFacebook", request, null, null, overloadCallback, customData, extraHeaders); }, + LoginWithFacebookInstantGamesId: function (request, callback, customData, extraHeaders) { + request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId; + var overloadCallback = function (result, error) { + if (result != null) { + if(result.data.SessionTicket != null) { + PlayFab._internalSettings.sessionTicket = result.data.SessionTicket; + } + if (result.data.EntityToken != null) { + PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken; + } + PlayFab.ClientApi._MultiStepClientLogin(result.data.SettingsForUser.NeedsAttribution); + } + if (callback != null && typeof (callback) == "function") + callback(result, error); + }; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LoginWithFacebookInstantGamesId", request, null, null, overloadCallback, customData, extraHeaders); + }, + LoginWithGameCenter: function (request, callback, customData, extraHeaders) { request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId; var overloadCallback = function (result, error) { @@ -666,6 +722,24 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LoginWithKongregate", request, null, null, overloadCallback, customData, extraHeaders); }, + LoginWithNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) { + request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId; + var overloadCallback = function (result, error) { + if (result != null) { + if(result.data.SessionTicket != null) { + PlayFab._internalSettings.sessionTicket = result.data.SessionTicket; + } + if (result.data.EntityToken != null) { + PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken; + } + PlayFab.ClientApi._MultiStepClientLogin(result.data.SettingsForUser.NeedsAttribution); + } + if (callback != null && typeof (callback) == "function") + callback(result, error); + }; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LoginWithNintendoSwitchDeviceId", request, null, null, overloadCallback, customData, extraHeaders); + }, + LoginWithPlayFab: function (request, callback, customData, extraHeaders) { request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId; var overloadCallback = function (result, error) { @@ -878,6 +952,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkFacebookAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + UnlinkFacebookInstantGamesId: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkFacebookInstantGamesId", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + UnlinkGameCenterAccount: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkGameCenterAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); @@ -898,6 +977,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkKongregate", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + UnlinkNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkNintendoSwitchDeviceId", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + UnlinkSteamAccount: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkSteamAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); diff --git a/PlayFabSdk/src/PlayFab/PlayFabCloudScriptApi.js b/PlayFabSdk/src/PlayFab/PlayFabCloudScriptApi.js new file mode 100644 index 00000000..77e7adaa --- /dev/null +++ b/PlayFabSdk/src/PlayFab/PlayFabCloudScriptApi.js @@ -0,0 +1,171 @@ +/// + +var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; + +if(!PlayFab.settings) { + PlayFab.settings = { + titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) + developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website) + advertisingIdType: null, + advertisingIdValue: null, + GlobalHeaderInjection: null, + + // disableAdvertising is provided for completeness, but changing it is not suggested + // Disabling this may prevent your advertising-related PlayFab marketplace partners from working correctly + disableAdvertising: false, + AD_TYPE_IDFA: "Idfa", + AD_TYPE_ANDROID_ID: "Adid" + } +} + +if(!PlayFab._internalSettings) { + PlayFab._internalSettings = { + entityToken: null, + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, + sessionTicket: null, + productionServerUrl: ".playfabapi.com", + errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", + errorLoggedIn: "Must be logged in to call this method", + errorEntityToken: "You must successfully call GetEntityToken before calling this", + errorSecretKey: "Must have PlayFab.settings.developerSecretKey set to call this method", + + GetServerUrl: function () { + return "https://" + PlayFab.settings.titleId + PlayFab._internalSettings.productionServerUrl; + }, + + InjectHeaders: function (xhr, headersObj) { + if (!headersObj) + return; + + for (var headerKey in headersObj) + { + try { + xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]); + } catch (e) { + console.log("Failed to append header: " + headerKey + " = " + headersObj[headerKey] + "Error: " + e); + } + } + }, + + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { + if (callback != null && typeof (callback) != "function") + throw "Callback must be null of a function"; + + if (request == null) + request = {}; + + var startTime = new Date(); + var requestBody = JSON.stringify(request); + + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + + var xhr = new XMLHttpRequest(); + // window.console.log("URL: " + completeUrl); + xhr.open("POST", completeUrl, true); + + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("X-PlayFabSDK", "JavaScriptSDK-" + PlayFab._internalSettings.sdkVersion); + if (authkey != null) + xhr.setRequestHeader(authkey, authValue); + PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection); + PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders); + + xhr.onloadend = function () { + if (callback == null) + return; + + var result; + try { + // window.console.log("parsing json result: " + xhr.responseText); + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + if (result.code === 200) + callback(result, null); + else + callback(null, result); + } + + xhr.onerror = function () { + if (callback == null) + return; + + var result; + try { + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + callback(null, result); + } + + xhr.send(requestBody); + } + } +} + +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; +PlayFab.GenerateErrorReport = function (error) { + if (error == null) + return ""; + var fullErrors = error.errorMessage; + for (var paramName in error.errorDetails) + for (var msgIdx in error.errorDetails[paramName]) + fullErrors += "\n" + paramName + ": " + error.errorDetails[paramName][msgIdx]; + return fullErrors; +}; + +PlayFab.CloudScriptApi = { + ForgetAllCredentials: function () { + PlayFab._internalSettings.sessionTicket = null; + PlayFab._internalSettings.entityToken = null; + }, + + ExecuteEntityCloudScript: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/CloudScript/ExecuteEntityCloudScript", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, +}; + +var PlayFabCloudScriptSDK = PlayFab.CloudScriptApi; + diff --git a/PlayFabSdk/src/PlayFab/PlayFabDataApi.js b/PlayFabSdk/src/PlayFab/PlayFabDataApi.js new file mode 100644 index 00000000..0c49d90d --- /dev/null +++ b/PlayFabSdk/src/PlayFab/PlayFabDataApi.js @@ -0,0 +1,201 @@ +/// + +var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; + +if(!PlayFab.settings) { + PlayFab.settings = { + titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) + developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website) + advertisingIdType: null, + advertisingIdValue: null, + GlobalHeaderInjection: null, + + // disableAdvertising is provided for completeness, but changing it is not suggested + // Disabling this may prevent your advertising-related PlayFab marketplace partners from working correctly + disableAdvertising: false, + AD_TYPE_IDFA: "Idfa", + AD_TYPE_ANDROID_ID: "Adid" + } +} + +if(!PlayFab._internalSettings) { + PlayFab._internalSettings = { + entityToken: null, + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, + sessionTicket: null, + productionServerUrl: ".playfabapi.com", + errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", + errorLoggedIn: "Must be logged in to call this method", + errorEntityToken: "You must successfully call GetEntityToken before calling this", + errorSecretKey: "Must have PlayFab.settings.developerSecretKey set to call this method", + + GetServerUrl: function () { + return "https://" + PlayFab.settings.titleId + PlayFab._internalSettings.productionServerUrl; + }, + + InjectHeaders: function (xhr, headersObj) { + if (!headersObj) + return; + + for (var headerKey in headersObj) + { + try { + xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]); + } catch (e) { + console.log("Failed to append header: " + headerKey + " = " + headersObj[headerKey] + "Error: " + e); + } + } + }, + + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { + if (callback != null && typeof (callback) != "function") + throw "Callback must be null of a function"; + + if (request == null) + request = {}; + + var startTime = new Date(); + var requestBody = JSON.stringify(request); + + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + + var xhr = new XMLHttpRequest(); + // window.console.log("URL: " + completeUrl); + xhr.open("POST", completeUrl, true); + + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("X-PlayFabSDK", "JavaScriptSDK-" + PlayFab._internalSettings.sdkVersion); + if (authkey != null) + xhr.setRequestHeader(authkey, authValue); + PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection); + PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders); + + xhr.onloadend = function () { + if (callback == null) + return; + + var result; + try { + // window.console.log("parsing json result: " + xhr.responseText); + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + if (result.code === 200) + callback(result, null); + else + callback(null, result); + } + + xhr.onerror = function () { + if (callback == null) + return; + + var result; + try { + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + callback(null, result); + } + + xhr.send(requestBody); + } + } +} + +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; +PlayFab.GenerateErrorReport = function (error) { + if (error == null) + return ""; + var fullErrors = error.errorMessage; + for (var paramName in error.errorDetails) + for (var msgIdx in error.errorDetails[paramName]) + fullErrors += "\n" + paramName + ": " + error.errorDetails[paramName][msgIdx]; + return fullErrors; +}; + +PlayFab.DataApi = { + ForgetAllCredentials: function () { + PlayFab._internalSettings.sessionTicket = null; + PlayFab._internalSettings.entityToken = null; + }, + + AbortFileUploads: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/AbortFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + DeleteFiles: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/DeleteFiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + FinalizeFileUploads: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/FinalizeFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + GetFiles: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/GetFiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + GetObjects: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Object/GetObjects", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + InitiateFileUploads: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/InitiateFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + SetObjects: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Object/SetObjects", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, +}; + +var PlayFabDataSDK = PlayFab.DataApi; + diff --git a/PlayFabSdk/src/PlayFab/PlayFabEventsApi.js b/PlayFabSdk/src/PlayFab/PlayFabEventsApi.js new file mode 100644 index 00000000..5f76dd93 --- /dev/null +++ b/PlayFabSdk/src/PlayFab/PlayFabEventsApi.js @@ -0,0 +1,171 @@ +/// + +var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; + +if(!PlayFab.settings) { + PlayFab.settings = { + titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) + developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website) + advertisingIdType: null, + advertisingIdValue: null, + GlobalHeaderInjection: null, + + // disableAdvertising is provided for completeness, but changing it is not suggested + // Disabling this may prevent your advertising-related PlayFab marketplace partners from working correctly + disableAdvertising: false, + AD_TYPE_IDFA: "Idfa", + AD_TYPE_ANDROID_ID: "Adid" + } +} + +if(!PlayFab._internalSettings) { + PlayFab._internalSettings = { + entityToken: null, + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, + sessionTicket: null, + productionServerUrl: ".playfabapi.com", + errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", + errorLoggedIn: "Must be logged in to call this method", + errorEntityToken: "You must successfully call GetEntityToken before calling this", + errorSecretKey: "Must have PlayFab.settings.developerSecretKey set to call this method", + + GetServerUrl: function () { + return "https://" + PlayFab.settings.titleId + PlayFab._internalSettings.productionServerUrl; + }, + + InjectHeaders: function (xhr, headersObj) { + if (!headersObj) + return; + + for (var headerKey in headersObj) + { + try { + xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]); + } catch (e) { + console.log("Failed to append header: " + headerKey + " = " + headersObj[headerKey] + "Error: " + e); + } + } + }, + + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { + if (callback != null && typeof (callback) != "function") + throw "Callback must be null of a function"; + + if (request == null) + request = {}; + + var startTime = new Date(); + var requestBody = JSON.stringify(request); + + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + + var xhr = new XMLHttpRequest(); + // window.console.log("URL: " + completeUrl); + xhr.open("POST", completeUrl, true); + + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("X-PlayFabSDK", "JavaScriptSDK-" + PlayFab._internalSettings.sdkVersion); + if (authkey != null) + xhr.setRequestHeader(authkey, authValue); + PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection); + PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders); + + xhr.onloadend = function () { + if (callback == null) + return; + + var result; + try { + // window.console.log("parsing json result: " + xhr.responseText); + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + if (result.code === 200) + callback(result, null); + else + callback(null, result); + } + + xhr.onerror = function () { + if (callback == null) + return; + + var result; + try { + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + callback(null, result); + } + + xhr.send(requestBody); + } + } +} + +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; +PlayFab.GenerateErrorReport = function (error) { + if (error == null) + return ""; + var fullErrors = error.errorMessage; + for (var paramName in error.errorDetails) + for (var msgIdx in error.errorDetails[paramName]) + fullErrors += "\n" + paramName + ": " + error.errorDetails[paramName][msgIdx]; + return fullErrors; +}; + +PlayFab.EventsApi = { + ForgetAllCredentials: function () { + PlayFab._internalSettings.sessionTicket = null; + PlayFab._internalSettings.entityToken = null; + }, + + WriteEvents: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Event/WriteEvents", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, +}; + +var PlayFabEventsSDK = PlayFab.EventsApi; + diff --git a/PlayFabSdk/src/PlayFab/PlayFabEntityApi.js b/PlayFabSdk/src/PlayFab/PlayFabGroupsApi.js similarity index 68% rename from PlayFabSdk/src/PlayFab/PlayFabEntityApi.js rename to PlayFabSdk/src/PlayFab/PlayFabGroupsApi.js index 46c83bd3..5e1afab8 100644 --- a/PlayFabSdk/src/PlayFab/PlayFabEntityApi.js +++ b/PlayFabSdk/src/PlayFab/PlayFabGroupsApi.js @@ -1,4 +1,4 @@ -/// +/// var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; @@ -21,7 +21,10 @@ if(!PlayFab.settings) { if(!PlayFab._internalSettings) { PlayFab._internalSettings = { entityToken: null, - sdkVersion: "1.27.180716", + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, sessionTicket: null, productionServerUrl: ".playfabapi.com", errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", @@ -47,7 +50,7 @@ if(!PlayFab._internalSettings) { } }, - ExecuteRequest: function (completeUrl, request, authkey, authValue, callback, customData, extraHeaders) { + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { if (callback != null && typeof (callback) != "function") throw "Callback must be null of a function"; @@ -57,6 +60,21 @@ if(!PlayFab._internalSettings) { var startTime = new Date(); var requestBody = JSON.stringify(request); + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + var xhr = new XMLHttpRequest(); // window.console.log("URL: " + completeUrl); xhr.open("POST", completeUrl, true); @@ -125,8 +143,8 @@ if(!PlayFab._internalSettings) { } } -PlayFab.buildIdentifier = "jbuild_javascriptsdk_0"; -PlayFab.sdkVersion = "1.27.180716"; +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; PlayFab.GenerateErrorReport = function (error) { if (error == null) return ""; @@ -137,17 +155,12 @@ PlayFab.GenerateErrorReport = function (error) { return fullErrors; }; -PlayFab.EntityApi = { +PlayFab.GroupsApi = { ForgetAllCredentials: function () { PlayFab._internalSettings.sessionTicket = null; PlayFab._internalSettings.entityToken = null; }, - AbortFileUploads: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/AbortFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - AcceptGroupApplication: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/AcceptGroupApplication", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); @@ -188,11 +201,6 @@ PlayFab.EntityApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/CreateRole", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); }, - DeleteFiles: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/DeleteFiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - DeleteGroup: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/DeleteGroup", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); @@ -203,64 +211,11 @@ PlayFab.EntityApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/DeleteRole", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); }, - ExecuteEntityCloudScript: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/CloudScript/ExecuteEntityCloudScript", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - FinalizeFileUploads: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/FinalizeFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - GetEntityToken: function (request, callback, customData, extraHeaders) { - var authKey = null; var authValue = null; - if (!authKey && PlayFab._internalSettings.sessionTicket) { authKey = "X-Authorization"; authValue = PlayFab._internalSettings.sessionTicket; } - if (!authKey && PlayFab.settings.developerSecretKey) { authKey = "X-SecretKey"; authValue = PlayFab.settings.developerSecretKey; } - var overloadCallback = function (result, error) { - if (result != null && result.data.EntityToken != null) - PlayFab._internalSettings.entityToken = result.data.EntityToken; - if (callback != null && typeof (callback) == "function") - callback(result, error); - }; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Authentication/GetEntityToken", request, authKey, authValue, overloadCallback, customData, extraHeaders); - }, - - GetFiles: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/GetFiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - GetGlobalPolicy: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetGlobalPolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - GetGroup: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/GetGroup", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); }, - GetObjects: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Object/GetObjects", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - GetProfile: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetProfile", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - GetProfiles: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetProfiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - InitiateFileUploads: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/InitiateFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - InviteToGroup: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/InviteToGroup", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); @@ -316,21 +271,6 @@ PlayFab.EntityApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/RemoveMembers", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); }, - SetGlobalPolicy: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/SetGlobalPolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - SetObjects: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Object/SetObjects", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - SetProfilePolicy: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/SetProfilePolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - UnblockEntity: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/UnblockEntity", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); @@ -345,12 +285,7 @@ PlayFab.EntityApi = { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/UpdateRole", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); }, - - WriteEvents: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Event/WriteEvents", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, }; -var PlayFabEntitySDK = PlayFab.EntityApi; +var PlayFabGroupsSDK = PlayFab.GroupsApi; diff --git a/PlayFabSdk/src/PlayFab/PlayFabMatchmakerApi.js b/PlayFabSdk/src/PlayFab/PlayFabMatchmakerApi.js index 5a68ec7d..c461533e 100644 --- a/PlayFabSdk/src/PlayFab/PlayFabMatchmakerApi.js +++ b/PlayFabSdk/src/PlayFab/PlayFabMatchmakerApi.js @@ -21,7 +21,10 @@ if(!PlayFab.settings) { if(!PlayFab._internalSettings) { PlayFab._internalSettings = { entityToken: null, - sdkVersion: "1.27.180716", + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, sessionTicket: null, productionServerUrl: ".playfabapi.com", errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", @@ -47,7 +50,7 @@ if(!PlayFab._internalSettings) { } }, - ExecuteRequest: function (completeUrl, request, authkey, authValue, callback, customData, extraHeaders) { + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { if (callback != null && typeof (callback) != "function") throw "Callback must be null of a function"; @@ -57,6 +60,21 @@ if(!PlayFab._internalSettings) { var startTime = new Date(); var requestBody = JSON.stringify(request); + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + var xhr = new XMLHttpRequest(); // window.console.log("URL: " + completeUrl); xhr.open("POST", completeUrl, true); @@ -125,8 +143,8 @@ if(!PlayFab._internalSettings) { } } -PlayFab.buildIdentifier = "jbuild_javascriptsdk_0"; -PlayFab.sdkVersion = "1.27.180716"; +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; PlayFab.GenerateErrorReport = function (error) { if (error == null) return ""; diff --git a/PlayFabSdk/src/PlayFab/PlayFabProfilesApi.js b/PlayFabSdk/src/PlayFab/PlayFabProfilesApi.js new file mode 100644 index 00000000..648dc359 --- /dev/null +++ b/PlayFabSdk/src/PlayFab/PlayFabProfilesApi.js @@ -0,0 +1,196 @@ +/// + +var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; + +if(!PlayFab.settings) { + PlayFab.settings = { + titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) + developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website) + advertisingIdType: null, + advertisingIdValue: null, + GlobalHeaderInjection: null, + + // disableAdvertising is provided for completeness, but changing it is not suggested + // Disabling this may prevent your advertising-related PlayFab marketplace partners from working correctly + disableAdvertising: false, + AD_TYPE_IDFA: "Idfa", + AD_TYPE_ANDROID_ID: "Adid" + } +} + +if(!PlayFab._internalSettings) { + PlayFab._internalSettings = { + entityToken: null, + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, + sessionTicket: null, + productionServerUrl: ".playfabapi.com", + errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", + errorLoggedIn: "Must be logged in to call this method", + errorEntityToken: "You must successfully call GetEntityToken before calling this", + errorSecretKey: "Must have PlayFab.settings.developerSecretKey set to call this method", + + GetServerUrl: function () { + return "https://" + PlayFab.settings.titleId + PlayFab._internalSettings.productionServerUrl; + }, + + InjectHeaders: function (xhr, headersObj) { + if (!headersObj) + return; + + for (var headerKey in headersObj) + { + try { + xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]); + } catch (e) { + console.log("Failed to append header: " + headerKey + " = " + headersObj[headerKey] + "Error: " + e); + } + } + }, + + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { + if (callback != null && typeof (callback) != "function") + throw "Callback must be null of a function"; + + if (request == null) + request = {}; + + var startTime = new Date(); + var requestBody = JSON.stringify(request); + + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + + var xhr = new XMLHttpRequest(); + // window.console.log("URL: " + completeUrl); + xhr.open("POST", completeUrl, true); + + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("X-PlayFabSDK", "JavaScriptSDK-" + PlayFab._internalSettings.sdkVersion); + if (authkey != null) + xhr.setRequestHeader(authkey, authValue); + PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection); + PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders); + + xhr.onloadend = function () { + if (callback == null) + return; + + var result; + try { + // window.console.log("parsing json result: " + xhr.responseText); + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + if (result.code === 200) + callback(result, null); + else + callback(null, result); + } + + xhr.onerror = function () { + if (callback == null) + return; + + var result; + try { + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + callback(null, result); + } + + xhr.send(requestBody); + } + } +} + +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; +PlayFab.GenerateErrorReport = function (error) { + if (error == null) + return ""; + var fullErrors = error.errorMessage; + for (var paramName in error.errorDetails) + for (var msgIdx in error.errorDetails[paramName]) + fullErrors += "\n" + paramName + ": " + error.errorDetails[paramName][msgIdx]; + return fullErrors; +}; + +PlayFab.ProfilesApi = { + ForgetAllCredentials: function () { + PlayFab._internalSettings.sessionTicket = null; + PlayFab._internalSettings.entityToken = null; + }, + + GetGlobalPolicy: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetGlobalPolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + GetProfile: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetProfile", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + GetProfiles: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetProfiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + SetGlobalPolicy: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/SetGlobalPolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + SetProfileLanguage: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/SetProfileLanguage", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + SetProfilePolicy: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/SetProfilePolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, +}; + +var PlayFabProfilesSDK = PlayFab.ProfilesApi; + diff --git a/PlayFabSdk/src/PlayFab/PlayFabServerApi.js b/PlayFabSdk/src/PlayFab/PlayFabServerApi.js index 9e6610c1..1aec61a7 100644 --- a/PlayFabSdk/src/PlayFab/PlayFabServerApi.js +++ b/PlayFabSdk/src/PlayFab/PlayFabServerApi.js @@ -21,7 +21,10 @@ if(!PlayFab.settings) { if(!PlayFab._internalSettings) { PlayFab._internalSettings = { entityToken: null, - sdkVersion: "1.27.180716", + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, sessionTicket: null, productionServerUrl: ".playfabapi.com", errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", @@ -47,7 +50,7 @@ if(!PlayFab._internalSettings) { } }, - ExecuteRequest: function (completeUrl, request, authkey, authValue, callback, customData, extraHeaders) { + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { if (callback != null && typeof (callback) != "function") throw "Callback must be null of a function"; @@ -57,6 +60,21 @@ if(!PlayFab._internalSettings) { var startTime = new Date(); var requestBody = JSON.stringify(request); + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + var xhr = new XMLHttpRequest(); // window.console.log("URL: " + completeUrl); xhr.open("POST", completeUrl, true); @@ -125,8 +143,8 @@ if(!PlayFab._internalSettings) { } } -PlayFab.buildIdentifier = "jbuild_javascriptsdk_0"; -PlayFab.sdkVersion = "1.27.180716"; +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; PlayFab.GenerateErrorReport = function (error) { if (error == null) return ""; @@ -343,6 +361,16 @@ PlayFab.ServerApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Server/GetPlayFabIDsFromFacebookIDs", request, "X-SecretKey", PlayFab.settings.developerSecretKey, callback, customData, extraHeaders); }, + GetPlayFabIDsFromFacebookInstantGamesIds: function (request, callback, customData, extraHeaders) { + if (!PlayFab.settings.developerSecretKey) throw PlayFab._internalSettings.errorSecretKey; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Server/GetPlayFabIDsFromFacebookInstantGamesIds", request, "X-SecretKey", PlayFab.settings.developerSecretKey, callback, customData, extraHeaders); + }, + + GetPlayFabIDsFromNintendoSwitchDeviceIds: function (request, callback, customData, extraHeaders) { + if (!PlayFab.settings.developerSecretKey) throw PlayFab._internalSettings.errorSecretKey; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Server/GetPlayFabIDsFromNintendoSwitchDeviceIds", request, "X-SecretKey", PlayFab.settings.developerSecretKey, callback, customData, extraHeaders); + }, + GetPlayFabIDsFromSteamIDs: function (request, callback, customData, extraHeaders) { if (!PlayFab.settings.developerSecretKey) throw PlayFab._internalSettings.errorSecretKey; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Server/GetPlayFabIDsFromSteamIDs", request, "X-SecretKey", PlayFab.settings.developerSecretKey, callback, customData, extraHeaders); diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabAdminApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabAdminApi.d.ts index b14f6b75..3717732f 100644 --- a/PlayFabSdk/src/Typings/PlayFab/PlayFabAdminApi.d.ts +++ b/PlayFabSdk/src/Typings/PlayFab/PlayFabAdminApi.d.ts @@ -2071,6 +2071,12 @@ declare module PlayFabAdminModels { | "ExplicitContentDetected" | "PIIContentDetected" | "InvalidScheduledTaskParameter" + | "PerEntityEventRateLimitExceeded" + | "TitleDefaultLanguageNotSet" + | "EmailTemplateMissingDefaultVersion" + | "FacebookInstantGamesIdNotLinked" + | "InvalidFacebookInstantGamesSignature" + | "FacebookInstantGamesAuthNotConfiguredForTitle" | "MatchmakingEntityInvalid" | "MatchmakingPlayerAttributesInvalid" | "MatchmakingCreateRequestMissing" @@ -2081,12 +2087,12 @@ declare module PlayFabAdminModels { | "MatchmakingTicketIdMissing" | "MatchmakingMatchIdMissing" | "MatchmakingMatchIdIdMissing" - | "MatchmakingHopperIdMissing" + | "MatchmakingQueueNameMissing" | "MatchmakingTitleIdMissing" | "MatchmakingTicketIdIdMissing" | "MatchmakingPlayerIdMissing" | "MatchmakingJoinRequestUserMissing" - | "MatchmakingHopperConfigNotFound" + | "MatchmakingQueueConfigNotFound" | "MatchmakingMatchNotFound" | "MatchmakingTicketNotFound" | "MatchmakingCreateTicketServerIdentityInvalid" @@ -2100,9 +2106,12 @@ declare module PlayFabAdminModels { | "MatchmakingPlayerIdentityMismatch" | "MatchmakingAlreadyJoinedTicket" | "MatchmakingTicketAlreadyCompleted" - | "MatchmakingHopperIdInvalid" - | "MatchmakingHopperConfigInvalid" - | "MatchmakingMemberProfileInvalid"; + | "MatchmakingQueueNameInvalid" + | "MatchmakingQueueConfigInvalid" + | "MatchmakingMemberProfileInvalid" + | "WriteAttemptedDuringExport" + | "NintendoSwitchDeviceIdNotLinked" + | "MatchmakingNotEnabled"; /** https://api.playfab.com/Documentation/Admin/datatype/PlayFab.Admin.Models/PlayFab.Admin.Models.GetActionsOnPlayersInSegmentTaskInstanceResult */ export interface GetActionsOnPlayersInSegmentTaskInstanceResult extends PlayFabModule.IPlayFabResultCommon { @@ -2265,10 +2274,16 @@ declare module PlayFabAdminModels { Players?: string[]; /** region in which the Game Server Instance is running */ Region?: string; - /** IP address for this Game Server Instance */ + /** IPV4 address of the game server instance */ ServerAddress?: string; + /** IPV4 address of the server */ + ServerIPV4Address?: string; + /** IPV6 address of the server */ + ServerIPV6Address?: string; /** communication port for this Game Server Instance */ ServerPort: number; + /** Public DNS name (if any) of the server */ + ServerPublicDNSName?: string; /** time when the Game Server Instance was created */ StartTime: string; /** unique identifier of the Game Server Instance for this lobby */ @@ -2909,7 +2924,11 @@ declare module PlayFabAdminModels { | "IOSDevice" | "AndroidDevice" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "GameServer" + | "CustomServer" + | "NintendoSwitch" + | "FacebookInstantGames"; /** https://api.playfab.com/Documentation/Admin/datatype/PlayFab.Admin.Models/PlayFab.Admin.Models.LogStatement */ export interface LogStatement { @@ -3184,7 +3203,7 @@ declare module PlayFabAdminModels { TitleId?: string; /** * Sum of the player's purchases made with real-money currencies, converted to US dollars equivalent and represented as a - * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. + * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. */ TotalValueToDateInUSD?: number; /** List of the player's lifetime purchase totals, summed by real-money currency */ @@ -4256,7 +4275,10 @@ declare module PlayFabAdminModels { | "XboxLive" | "Parse" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "ServerCustomId" + | "NintendoSwitchDeviceId" + | "FacebookInstantGamesId"; /** https://api.playfab.com/Documentation/Admin/datatype/PlayFab.Admin.Models/PlayFab.Admin.Models.UserPrivateAccountInfo */ export interface UserPrivateAccountInfo { diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabAuthenticationApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabAuthenticationApi.d.ts new file mode 100644 index 00000000..f0b2cb9d --- /dev/null +++ b/PlayFabSdk/src/Typings/PlayFab/PlayFabAuthenticationApi.d.ts @@ -0,0 +1,55 @@ +/// + +declare module PlayFabAuthenticationModule { + export interface IPlayFabAuthentication { + ForgetAllCredentials(): void; + + /** + * Method to exchange a legacy AuthenticationTicket or title SecretKey for an Entity Token or to refresh a still valid + * Entity Token. + * https://api.playfab.com/Documentation/Authentication/method/GetEntityToken + */ + GetEntityToken(request: PlayFabAuthenticationModels.GetEntityTokenRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabAuthenticationModels { + /** https://api.playfab.com/Documentation/Authentication/datatype/PlayFab.Authentication.Models/PlayFab.Authentication.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/Authentication/datatype/PlayFab.Authentication.Models/PlayFab.Authentication.Models.GetEntityTokenRequest */ + export interface GetEntityTokenRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Authentication/datatype/PlayFab.Authentication.Models/PlayFab.Authentication.Models.GetEntityTokenResponse */ + export interface GetEntityTokenResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** The token used to set X-EntityToken for all entity based API calls. */ + EntityToken?: string; + /** The time the token will expire, if it is an expiring token, in UTC. */ + TokenExpiration?: string; + + } + + +} diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabClientApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabClientApi.d.ts index ac34a39c..bee757c1 100644 --- a/PlayFabSdk/src/Typings/PlayFab/PlayFabClientApi.d.ts +++ b/PlayFabSdk/src/Typings/PlayFab/PlayFabClientApi.d.ts @@ -244,6 +244,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/GetPlayFabIDsFromFacebookIDs */ GetPlayFabIDsFromFacebookIDs(request: PlayFabClientModels.GetPlayFabIDsFromFacebookIDsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the unique PlayFab identifiers for the given set of Facebook Instant Game identifiers. + * https://api.playfab.com/Documentation/Client/method/GetPlayFabIDsFromFacebookInstantGamesIds + */ + GetPlayFabIDsFromFacebookInstantGamesIds(request: PlayFabClientModels.GetPlayFabIDsFromFacebookInstantGamesIdsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Retrieves the unique PlayFab identifiers for the given set of Game Center identifiers (referenced in the Game Center * Programming Guide as the Player Identifier). @@ -270,6 +275,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/GetPlayFabIDsFromKongregateIDs */ GetPlayFabIDsFromKongregateIDs(request: PlayFabClientModels.GetPlayFabIDsFromKongregateIDsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the unique PlayFab identifiers for the given set of Nintendo Switch identifiers. + * https://api.playfab.com/Documentation/Client/method/GetPlayFabIDsFromNintendoSwitchDeviceIds + */ + GetPlayFabIDsFromNintendoSwitchDeviceIds(request: PlayFabClientModels.GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Retrieves the unique PlayFab identifiers for the given set of Steam identifiers. The Steam identifiers are the profile * IDs for the user accounts, available as SteamId in the Steamworks Community API calls. @@ -383,6 +393,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/LinkFacebookAccount */ LinkFacebookAccount(request: PlayFabClientModels.LinkFacebookAccountRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Links the Facebook Instant Games Id to the user's PlayFab account + * https://api.playfab.com/Documentation/Client/method/LinkFacebookInstantGamesId + */ + LinkFacebookInstantGamesId(request: PlayFabClientModels.LinkFacebookInstantGamesIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Links the Game Center account associated with the provided Game Center ID to the user's PlayFab account * https://api.playfab.com/Documentation/Client/method/LinkGameCenterAccount @@ -403,6 +418,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/LinkKongregate */ LinkKongregate(request: PlayFabClientModels.LinkKongregateAccountRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Links the NintendoSwitchDeviceId to the user's PlayFab account + * https://api.playfab.com/Documentation/Client/method/LinkNintendoSwitchDeviceId + */ + LinkNintendoSwitchDeviceId(request: PlayFabClientModels.LinkNintendoSwitchDeviceIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Links the Steam account associated with the provided Steam authentication ticket to the user's PlayFab account * https://api.playfab.com/Documentation/Client/method/LinkSteamAccount @@ -444,6 +464,12 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/LoginWithFacebook */ LoginWithFacebook(request: PlayFabClientModels.LoginWithFacebookRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Signs the user in using a Facebook Instant Games ID, returning a session identifier that can subsequently be used for + * API calls which require an authenticated user. Requires Facebook Instant Games to be configured. + * https://api.playfab.com/Documentation/Client/method/LoginWithFacebookInstantGamesId + */ + LoginWithFacebookInstantGamesId(request: PlayFabClientModels.LoginWithFacebookInstantGamesIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Signs the user in using an iOS Game Center player identifier, returning a session identifier that can subsequently be * used for API calls which require an authenticated user @@ -466,6 +492,12 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/LoginWithKongregate */ LoginWithKongregate(request: PlayFabClientModels.LoginWithKongregateRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Signs the user in using a Nintendo Switch Device ID, returning a session identifier that can subsequently be used for + * API calls which require an authenticated user + * https://api.playfab.com/Documentation/Client/method/LoginWithNintendoSwitchDeviceId + */ + LoginWithNintendoSwitchDeviceId(request: PlayFabClientModels.LoginWithNintendoSwitchDeviceIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Signs the user into the PlayFab account, returning a session identifier that can subsequently be used for API calls * which require an authenticated user. Unlike most other login API calls, LoginWithPlayFab does not permit the creation of @@ -631,6 +663,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/UnlinkFacebookAccount */ UnlinkFacebookAccount(request: PlayFabClientModels.UnlinkFacebookAccountRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Unlinks the related Facebook Instant Game Ids from the user's PlayFab account + * https://api.playfab.com/Documentation/Client/method/UnlinkFacebookInstantGamesId + */ + UnlinkFacebookInstantGamesId(request: PlayFabClientModels.UnlinkFacebookInstantGamesIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Unlinks the related Game Center account from the user's PlayFab account * https://api.playfab.com/Documentation/Client/method/UnlinkGameCenterAccount @@ -652,6 +689,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/UnlinkKongregate */ UnlinkKongregate(request: PlayFabClientModels.UnlinkKongregateAccountRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Unlinks the related NintendoSwitchDeviceId from the user's PlayFab account + * https://api.playfab.com/Documentation/Client/method/UnlinkNintendoSwitchDeviceId + */ + UnlinkNintendoSwitchDeviceId(request: PlayFabClientModels.UnlinkNintendoSwitchDeviceIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Unlinks the related Steam account from the user's PlayFab account * https://api.playfab.com/Documentation/Client/method/UnlinkSteamAccount @@ -1743,6 +1785,15 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.FacebookInstantGamesPlayFabIdPair */ + export interface FacebookInstantGamesPlayFabIdPair { + /** Unique Facebook Instant Games identifier for a user. */ + FacebookInstantGamesId?: string; + /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Facebook Instant Games identifier. */ + PlayFabId?: string; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.FacebookPlayFabIdPair */ export interface FacebookPlayFabIdPair { /** Unique Facebook identifier for a user. */ @@ -1812,10 +1863,14 @@ declare module PlayFabClientModels { RunTime: number; /** IPV4 address of the server */ ServerHostname?: string; + /** IPV4 address of the server */ + ServerIPV4Address?: string; /** IPV6 address of the server */ ServerIPV6Address?: string; /** port number to use for non-http communications with the server */ ServerPort?: number; + /** Public DNS name (if any) of the server */ + ServerPublicDNSName?: string; /** stastic used to match this game in player statistic matchmaking */ StatisticName?: string; /** game session tags */ @@ -2427,6 +2482,20 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromFacebookInstantGamesIdsRequest */ + export interface GetPlayFabIDsFromFacebookInstantGamesIdsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Array of unique Facebook Instant Games identifiers for which the title needs to get PlayFab identifiers. */ + FacebookInstantGamesIds: string[]; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromFacebookInstantGamesIdsResult */ + export interface GetPlayFabIDsFromFacebookInstantGamesIdsResult extends PlayFabModule.IPlayFabResultCommon { + /** Mapping of Facebook Instant Games identifiers to PlayFab identifiers. */ + Data?: FacebookInstantGamesPlayFabIdPair[]; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromGameCenterIDsRequest */ export interface GetPlayFabIDsFromGameCenterIDsRequest extends PlayFabModule.IPlayFabRequestCommon { /** Array of unique Game Center identifiers (the Player Identifier) for which the title needs to get PlayFab identifiers. */ @@ -2486,6 +2555,20 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest */ + export interface GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Array of unique Nintendo Switch Device identifiers for which the title needs to get PlayFab identifiers. */ + NintendoSwitchDeviceIds: string[]; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromNintendoSwitchDeviceIdsResult */ + export interface GetPlayFabIDsFromNintendoSwitchDeviceIdsResult extends PlayFabModule.IPlayFabResultCommon { + /** Mapping of Nintendo Switch Device identifiers to PlayFab identifiers. */ + Data?: number[]; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromSteamIDsRequest */ export interface GetPlayFabIDsFromSteamIDsRequest extends PlayFabModule.IPlayFabRequestCommon { /** Array of unique Steam identifiers (Steam profile IDs) for which the title needs to get PlayFab identifiers. */ @@ -2900,6 +2983,20 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkFacebookInstantGamesIdRequest */ + export interface LinkFacebookInstantGamesIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Facebook Instant Games signature for the user. */ + FacebookInstantGamesSignature: string; + /** If another user is already linked to the Facebook Instant Games ID, unlink the other user and re-link. */ + ForceLink?: boolean; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkFacebookInstantGamesIdResult */ + export interface LinkFacebookInstantGamesIdResult extends PlayFabModule.IPlayFabResultCommon { + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkGameCenterAccountRequest */ export interface LinkGameCenterAccountRequest extends PlayFabModule.IPlayFabRequestCommon { /** If another user is already linked to the account, unlink the other user and re-link. */ @@ -2965,6 +3062,20 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkNintendoSwitchDeviceIdRequest */ + export interface LinkNintendoSwitchDeviceIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** If another user is already linked to the Nintendo Switch Device ID, unlink the other user and re-link. */ + ForceLink?: boolean; + /** Nintendo Switch unique identifier for the user's device. */ + NintendoSwitchDeviceId: string; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkNintendoSwitchDeviceIdResult */ + export interface LinkNintendoSwitchDeviceIdResult extends PlayFabModule.IPlayFabResultCommon { + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkSteamAccountRequest */ export interface LinkSteamAccountRequest extends PlayFabModule.IPlayFabRequestCommon { /** If another user is already linked to the account, unlink the other user and re-link. */ @@ -3056,7 +3167,11 @@ declare module PlayFabClientModels { | "IOSDevice" | "AndroidDevice" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "GameServer" + | "CustomServer" + | "NintendoSwitch" + | "FacebookInstantGames"; /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LoginResult */ export interface LoginResult extends PlayFabModule.IPlayFabResultCommon { @@ -3146,6 +3261,28 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LoginWithFacebookInstantGamesIdRequest */ + export interface LoginWithFacebookInstantGamesIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Automatically create a PlayFab account if one is not currently linked to this ID. */ + CreateAccount?: boolean; + /** Base64 encoded body that is encrypted with the Title's public RSA key (Enterprise Only). */ + EncryptedRequest?: string; + /** Facebook Instant Games signature for the user. */ + FacebookInstantGamesSignature: string; + /** Flags for which pieces of info to return for the user. */ + InfoRequestParameters?: GetPlayerCombinedInfoRequestParams; + /** Flag to automatically login the player's title_player_account and return the associated entity token. */ + LoginTitlePlayerAccountEntity?: boolean; + /** Player secret that is used to verify API request signatures (Enterprise Only). */ + PlayerSecret?: string; + /** + * Unique identifier for the title, found in the Settings > Game Properties section of the PlayFab developer site when a + * title has been selected. + */ + TitleId?: string; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LoginWithFacebookRequest */ export interface LoginWithFacebookRequest extends PlayFabModule.IPlayFabRequestCommon { /** Unique identifier from Facebook for the user. */ @@ -3265,6 +3402,28 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LoginWithNintendoSwitchDeviceIdRequest */ + export interface LoginWithNintendoSwitchDeviceIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Automatically create a PlayFab account if one is not currently linked to this ID. */ + CreateAccount?: boolean; + /** Base64 encoded body that is encrypted with the Title's public RSA key (Enterprise Only). */ + EncryptedRequest?: string; + /** Flags for which pieces of info to return for the user. */ + InfoRequestParameters?: GetPlayerCombinedInfoRequestParams; + /** Flag to automatically login the player's title_player_account and return the associated entity token. */ + LoginTitlePlayerAccountEntity?: boolean; + /** Nintendo Switch unique identifier for the user's device. */ + NintendoSwitchDeviceId?: string; + /** Player secret that is used to verify API request signatures (Enterprise Only). */ + PlayerSecret?: string; + /** + * Unique identifier for the title, found in the Settings > Game Properties section of the PlayFab developer site when a + * title has been selected. + */ + TitleId?: string; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LoginWithPlayFabRequest */ export interface LoginWithPlayFabRequest extends PlayFabModule.IPlayFabRequestCommon { /** Flags for which pieces of info to return for the user. */ @@ -3389,10 +3548,14 @@ declare module PlayFabClientModels { PollWaitTimeMS?: number; /** IPV4 address of the server */ ServerHostname?: string; + /** IPV4 address of the server */ + ServerIPV4Address?: string; /** IPV6 address of the server */ ServerIPV6Address?: string; /** port number to use for non-http communications with the server */ ServerPort?: number; + /** Public DNS name (if any) of the server */ + ServerPublicDNSName?: string; /** result of match making process */ Status?: string; /** server authorization ticket (used by RedeemMatchmakerTicket to validate user insertion into the game) */ @@ -3440,6 +3603,15 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.NintendoSwitchPlayFabIdPair */ + export interface NintendoSwitchPlayFabIdPair { + /** Unique Nintendo Switch Device identifier for a user. */ + NintendoSwitchDeviceId?: string; + /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Nintendo Switch Device identifier. */ + PlayFabId?: string; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.OpenTradeRequest */ export interface OpenTradeRequest extends PlayFabModule.IPlayFabRequestCommon { /** @@ -3565,7 +3737,7 @@ declare module PlayFabClientModels { TitleId?: string; /** * Sum of the player's purchases made with real-money currencies, converted to US dollars equivalent and represented as a - * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. + * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. */ TotalValueToDateInUSD?: number; /** List of the player's lifetime purchase totals, summed by real-money currency */ @@ -3977,10 +4149,14 @@ declare module PlayFabClientModels { Password?: string; /** server IPV4 address */ ServerHostname?: string; + /** server IPV4 address */ + ServerIPV4Address?: string; /** server IPV6 address */ ServerIPV6Address?: string; /** port on the server to be used for communication */ ServerPort?: number; + /** server public DNS name */ + ServerPublicDNSName?: string; /** unique identifier for the server */ Ticket?: string; @@ -4265,6 +4441,18 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkFacebookInstantGamesIdRequest */ + export interface UnlinkFacebookInstantGamesIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Facebook Instant Games identifier for the user. If not specified, the most recently signed in ID will be used. */ + FacebookInstantGamesId?: string; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkFacebookInstantGamesIdResult */ + export interface UnlinkFacebookInstantGamesIdResult extends PlayFabModule.IPlayFabResultCommon { + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkGameCenterAccountRequest */ export interface UnlinkGameCenterAccountRequest extends PlayFabModule.IPlayFabRequestCommon { @@ -4310,6 +4498,18 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkNintendoSwitchDeviceIdRequest */ + export interface UnlinkNintendoSwitchDeviceIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Nintendo Switch Device identifier for the user. If not specified, the most recently signed in device ID will be used. */ + NintendoSwitchDeviceId?: string; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkNintendoSwitchDeviceIdResult */ + export interface UnlinkNintendoSwitchDeviceIdResult extends PlayFabModule.IPlayFabResultCommon { + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkSteamAccountRequest */ export interface UnlinkSteamAccountRequest extends PlayFabModule.IPlayFabRequestCommon { @@ -4648,7 +4848,10 @@ declare module PlayFabClientModels { | "XboxLive" | "Parse" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "ServerCustomId" + | "NintendoSwitchDeviceId" + | "FacebookInstantGamesId"; /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UserPrivateAccountInfo */ export interface UserPrivateAccountInfo { diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabCloudScriptApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabCloudScriptApi.d.ts new file mode 100644 index 00000000..6d191390 --- /dev/null +++ b/PlayFabSdk/src/Typings/PlayFab/PlayFabCloudScriptApi.d.ts @@ -0,0 +1,127 @@ +/// + +declare module PlayFabCloudScriptModule { + export interface IPlayFabCloudScript { + ForgetAllCredentials(): void; + + /** + * Executes CloudScript using the Entity Profile + * https://api.playfab.com/Documentation/CloudScript/method/ExecuteEntityCloudScript + */ + ExecuteEntityCloudScript(request: PlayFabCloudScriptModels.ExecuteEntityCloudScriptRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabCloudScriptModels { + type CloudScriptRevisionOption = "Live" + | "Latest" + | "Specific"; + + /** https://api.playfab.com/Documentation/CloudScript/datatype/PlayFab.CloudScript.Models/PlayFab.CloudScript.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/CloudScript/datatype/PlayFab.CloudScript.Models/PlayFab.CloudScript.Models.ExecuteCloudScriptResult */ + export interface ExecuteCloudScriptResult extends PlayFabModule.IPlayFabResultCommon { + /** Number of PlayFab API requests issued by the CloudScript function */ + APIRequestsIssued: number; + /** Information about the error, if any, that occurred during execution */ + Error?: ScriptExecutionError; + ExecutionTimeSeconds: number; + /** The name of the function that executed */ + FunctionName?: string; + /** The object returned from the CloudScript function, if any */ + FunctionResult?: any; + /** + * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if + * the total event size is larger than 350KB. + */ + FunctionResultTooLarge?: boolean; + /** Number of external HTTP requests issued by the CloudScript function */ + HttpRequestsIssued: number; + /** + * Entries logged during the function execution. These include both entries logged in the function code using log.info() + * and log.error() and error entries for API and HTTP request failures. + */ + Logs?: LogStatement[]; + /** + * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total + * event size is larger than 350KB after the FunctionResult was removed. + */ + LogsTooLarge?: boolean; + MemoryConsumedBytes: number; + /** + * Processor time consumed while executing the function. This does not include time spent waiting on API calls or HTTP + * requests. + */ + ProcessorTimeSeconds: number; + /** The revision of the CloudScript that executed */ + Revision: number; + + } + + /** https://api.playfab.com/Documentation/CloudScript/datatype/PlayFab.CloudScript.Models/PlayFab.CloudScript.Models.ExecuteEntityCloudScriptRequest */ + export interface ExecuteEntityCloudScriptRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + /** The name of the CloudScript function to execute */ + FunctionName: string; + /** Object that is passed in to the function as the first argument */ + FunctionParameter?: any; + /** + * Generate a 'entity_executed_cloudscript' PlayStream event containing the results of the function execution and other + * contextual information. This event will show up in the PlayStream debugger console for the player in Game Manager. + */ + GeneratePlayStreamEvent?: boolean; + /** + * Option for which revision of the CloudScript to execute. 'Latest' executes the most recently created revision, 'Live' + * executes the current live, published revision, and 'Specific' executes the specified revision. The default value is + * 'Specific', if the SpecificRevision parameter is specified, otherwise it is 'Live'. + */ + RevisionSelection?: string; + /** The specific revision to execute, when RevisionSelection is set to 'Specific' */ + SpecificRevision?: number; + + } + + /** https://api.playfab.com/Documentation/CloudScript/datatype/PlayFab.CloudScript.Models/PlayFab.CloudScript.Models.LogStatement */ + export interface LogStatement { + /** Optional object accompanying the message as contextual information */ + Data?: any; + /** 'Debug', 'Info', or 'Error' */ + Level?: string; + Message?: string; + + } + + /** https://api.playfab.com/Documentation/CloudScript/datatype/PlayFab.CloudScript.Models/PlayFab.CloudScript.Models.ScriptExecutionError */ + export interface ScriptExecutionError { + /** + * Error code, such as CloudScriptNotFound, JavascriptException, CloudScriptFunctionArgumentSizeExceeded, + * CloudScriptAPIRequestCountExceeded, CloudScriptAPIRequestError, or CloudScriptHTTPRequestError + */ + Error?: string; + /** Details about the error */ + Message?: string; + /** Point during the execution of the script at which the error occurred, if any */ + StackTrace?: string; + + } + + +} diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabDataApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabDataApi.d.ts new file mode 100644 index 00000000..8defe6f4 --- /dev/null +++ b/PlayFabSdk/src/Typings/PlayFab/PlayFabDataApi.d.ts @@ -0,0 +1,292 @@ +/// + +declare module PlayFabDataModule { + export interface IPlayFabData { + ForgetAllCredentials(): void; + + /** + * Abort pending file uploads to an entity's profile. + * https://api.playfab.com/Documentation/Data/method/AbortFileUploads + */ + AbortFileUploads(request: PlayFabDataModels.AbortFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Delete files on an entity's profile. + * https://api.playfab.com/Documentation/Data/method/DeleteFiles + */ + DeleteFiles(request: PlayFabDataModels.DeleteFilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Finalize file uploads to an entity's profile. + * https://api.playfab.com/Documentation/Data/method/FinalizeFileUploads + */ + FinalizeFileUploads(request: PlayFabDataModels.FinalizeFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves file metadata from an entity's profile. + * https://api.playfab.com/Documentation/Data/method/GetFiles + */ + GetFiles(request: PlayFabDataModels.GetFilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves objects from an entity's profile. + * https://api.playfab.com/Documentation/Data/method/GetObjects + */ + GetObjects(request: PlayFabDataModels.GetObjectsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Initiates file uploads to an entity's profile. + * https://api.playfab.com/Documentation/Data/method/InitiateFileUploads + */ + InitiateFileUploads(request: PlayFabDataModels.InitiateFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Sets objects on an entity's profile. + * https://api.playfab.com/Documentation/Data/method/SetObjects + */ + SetObjects(request: PlayFabDataModels.SetObjectsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabDataModels { + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.AbortFileUploadsRequest */ + export interface AbortFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** Names of the files to have their pending uploads aborted. */ + FileNames: string[]; + /** + * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not + * be performed. + */ + ProfileVersion?: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.AbortFileUploadsResponse */ + export interface AbortFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.DeleteFilesRequest */ + export interface DeleteFilesRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** Names of the files to be deleted. */ + FileNames: string[]; + /** + * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not + * be performed. + */ + ProfileVersion?: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.DeleteFilesResponse */ + export interface DeleteFilesResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.FinalizeFileUploadsRequest */ + export interface FinalizeFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** Names of the files to be finalized. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ + FileNames: string[]; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.FinalizeFileUploadsResponse */ + export interface FinalizeFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** Collection of metadata for the entity's files */ + Metadata?: { [key: string]: GetFileMetadata }; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.GetFileMetadata */ + export interface GetFileMetadata { + /** Checksum value for the file */ + Checksum?: string; + /** Download URL where the file can be retrieved */ + DownloadUrl?: string; + /** Name of the file */ + FileName?: string; + /** Last UTC time the file was modified */ + LastModified: string; + /** Storage service's reported byte count */ + Size: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.GetFilesRequest */ + export interface GetFilesRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.GetFilesResponse */ + export interface GetFilesResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** Collection of metadata for the entity's files */ + Metadata?: { [key: string]: GetFileMetadata }; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.GetObjectsRequest */ + export interface GetObjectsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** + * Determines whether the object will be returned as an escaped JSON string or as a un-escaped JSON object. Default is JSON + * object. + */ + EscapeObject?: boolean; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.GetObjectsResponse */ + export interface GetObjectsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** Requested objects that the calling entity has access to */ + Objects?: { [key: string]: ObjectResult }; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.InitiateFileUploadMetadata */ + export interface InitiateFileUploadMetadata { + /** Name of the file. */ + FileName?: string; + /** Location the data should be sent to via an HTTP PUT operation. */ + UploadUrl?: string; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.InitiateFileUploadsRequest */ + export interface InitiateFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** Names of the files to be set. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ + FileNames: string[]; + /** + * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not + * be performed. + */ + ProfileVersion?: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.InitiateFileUploadsResponse */ + export interface InitiateFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + /** Collection of file names and upload urls */ + UploadDetails?: InitiateFileUploadMetadata[]; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.ObjectResult */ + export interface ObjectResult extends PlayFabModule.IPlayFabResultCommon { + /** Un-escaped JSON object, if EscapeObject false or default. */ + DataObject?: any; + /** Escaped string JSON body of the object, if EscapeObject is true. */ + EscapedDataObject?: string; + /** Name of the object. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ + ObjectName?: string; + + } + + type OperationTypes = "Created" + | "Updated" + | "Deleted" + | "None"; + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.SetObject */ + export interface SetObject { + /** + * Body of the object to be saved. If empty and DeleteObject is true object will be deleted if it exists, or no operation + * will occur if it does not exist. Only one of Object or EscapedDataObject fields may be used. + */ + DataObject?: any; + /** Flag to indicate that this object should be deleted. Both DataObject and EscapedDataObject must not be set as well. */ + DeleteObject?: boolean; + /** + * Body of the object to be saved as an escaped JSON string. If empty and DeleteObject is true object will be deleted if it + * exists, or no operation will occur if it does not exist. Only one of DataObject or EscapedDataObject fields may be used. + */ + EscapedDataObject?: string; + /** Name of object. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.'. */ + ObjectName: string; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.SetObjectInfo */ + export interface SetObjectInfo { + /** Name of the object */ + ObjectName?: string; + /** Optional reason to explain why the operation was the result that it was. */ + OperationReason?: string; + /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ + SetResult?: string; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.SetObjectsRequest */ + export interface SetObjectsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** + * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from + * GetProfile API, you can ensure that the object set will only be performed if the profile has not been updated by any + * other clients since the version you last loaded. + */ + ExpectedProfileVersion?: number; + /** Collection of objects to set on the profile. */ + Objects: SetObject[]; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.SetObjectsResponse */ + export interface SetObjectsResponse extends PlayFabModule.IPlayFabResultCommon { + /** New version of the entity profile. */ + ProfileVersion: number; + /** New version of the entity profile. */ + SetResults?: SetObjectInfo[]; + + } + + +} diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabEntityApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabEntityApi.d.ts deleted file mode 100644 index 53f3fb17..00000000 --- a/PlayFabSdk/src/Typings/PlayFab/PlayFabEntityApi.d.ts +++ /dev/null @@ -1,1268 +0,0 @@ -/// - -declare module PlayFabEntityModule { - export interface IPlayFabEntity { - ForgetAllCredentials(): void; - - /** - * Abort pending file uploads to an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/AbortFileUploads - */ - AbortFileUploads(request: PlayFabEntityModels.AbortFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Accepts an outstanding invitation to to join a group - * https://api.playfab.com/Documentation/Entity/method/AcceptGroupApplication - */ - AcceptGroupApplication(request: PlayFabEntityModels.AcceptGroupApplicationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Accepts an invitation to join a group - * https://api.playfab.com/Documentation/Entity/method/AcceptGroupInvitation - */ - AcceptGroupInvitation(request: PlayFabEntityModels.AcceptGroupInvitationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Adds members to a group or role. - * https://api.playfab.com/Documentation/Entity/method/AddMembers - */ - AddMembers(request: PlayFabEntityModels.AddMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Applies to join a group - * https://api.playfab.com/Documentation/Entity/method/ApplyToGroup - */ - ApplyToGroup(request: PlayFabEntityModels.ApplyToGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Blocks a list of entities from joining a group. - * https://api.playfab.com/Documentation/Entity/method/BlockEntity - */ - BlockEntity(request: PlayFabEntityModels.BlockEntityRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Changes the role membership of a list of entities from one role to another. - * https://api.playfab.com/Documentation/Entity/method/ChangeMemberRole - */ - ChangeMemberRole(request: PlayFabEntityModels.ChangeMemberRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Creates a new group. - * https://api.playfab.com/Documentation/Entity/method/CreateGroup - */ - CreateGroup(request: PlayFabEntityModels.CreateGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Creates a new group role. - * https://api.playfab.com/Documentation/Entity/method/CreateRole - */ - CreateRole(request: PlayFabEntityModels.CreateGroupRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Delete files on an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/DeleteFiles - */ - DeleteFiles(request: PlayFabEntityModels.DeleteFilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Deletes a group and all roles, invitations, join requests, and blocks associated with it. - * https://api.playfab.com/Documentation/Entity/method/DeleteGroup - */ - DeleteGroup(request: PlayFabEntityModels.DeleteGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Deletes an existing role in a group. - * https://api.playfab.com/Documentation/Entity/method/DeleteRole - */ - DeleteRole(request: PlayFabEntityModels.DeleteRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Executes CloudScript using the Entity Profile - * https://api.playfab.com/Documentation/Entity/method/ExecuteEntityCloudScript - */ - ExecuteEntityCloudScript(request: PlayFabEntityModels.ExecuteEntityCloudScriptRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Finalize file uploads to an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/FinalizeFileUploads - */ - FinalizeFileUploads(request: PlayFabEntityModels.FinalizeFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Method to exchange a legacy AuthenticationTicket or title SecretKey for an Entity Token or to refresh a still valid - * Entity Token. - * https://api.playfab.com/Documentation/Entity/method/GetEntityToken - */ - GetEntityToken(request: PlayFabEntityModels.GetEntityTokenRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Retrieves file metadata from an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/GetFiles - */ - GetFiles(request: PlayFabEntityModels.GetFilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Gets the global title access policy - * https://api.playfab.com/Documentation/Entity/method/GetGlobalPolicy - */ - GetGlobalPolicy(request: PlayFabEntityModels.GetGlobalPolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Gets information about a group and its roles - * https://api.playfab.com/Documentation/Entity/method/GetGroup - */ - GetGroup(request: PlayFabEntityModels.GetGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Retrieves objects from an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/GetObjects - */ - GetObjects(request: PlayFabEntityModels.GetObjectsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Retrieves the entity's profile. - * https://api.playfab.com/Documentation/Entity/method/GetProfile - */ - GetProfile(request: PlayFabEntityModels.GetEntityProfileRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Retrieves the entity's profile. - * https://api.playfab.com/Documentation/Entity/method/GetProfiles - */ - GetProfiles(request: PlayFabEntityModels.GetEntityProfilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Initiates file uploads to an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/InitiateFileUploads - */ - InitiateFileUploads(request: PlayFabEntityModels.InitiateFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Invites a player to join a group - * https://api.playfab.com/Documentation/Entity/method/InviteToGroup - */ - InviteToGroup(request: PlayFabEntityModels.InviteToGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Checks to see if an entity is a member of a group or role within the group - * https://api.playfab.com/Documentation/Entity/method/IsMember - */ - IsMember(request: PlayFabEntityModels.IsMemberRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all outstanding requests to join a group - * https://api.playfab.com/Documentation/Entity/method/ListGroupApplications - */ - ListGroupApplications(request: PlayFabEntityModels.ListGroupApplicationsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all entities blocked from joining a group - * https://api.playfab.com/Documentation/Entity/method/ListGroupBlocks - */ - ListGroupBlocks(request: PlayFabEntityModels.ListGroupBlocksRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all outstanding invitations for a group - * https://api.playfab.com/Documentation/Entity/method/ListGroupInvitations - */ - ListGroupInvitations(request: PlayFabEntityModels.ListGroupInvitationsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all members for a group - * https://api.playfab.com/Documentation/Entity/method/ListGroupMembers - */ - ListGroupMembers(request: PlayFabEntityModels.ListGroupMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all groups and roles for an entity - * https://api.playfab.com/Documentation/Entity/method/ListMembership - */ - ListMembership(request: PlayFabEntityModels.ListMembershipRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all outstanding invitations and group applications for an entity - * https://api.playfab.com/Documentation/Entity/method/ListMembershipOpportunities - */ - ListMembershipOpportunities(request: PlayFabEntityModels.ListMembershipOpportunitiesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Removes an application to join a group - * https://api.playfab.com/Documentation/Entity/method/RemoveGroupApplication - */ - RemoveGroupApplication(request: PlayFabEntityModels.RemoveGroupApplicationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Removes an invitation join a group - * https://api.playfab.com/Documentation/Entity/method/RemoveGroupInvitation - */ - RemoveGroupInvitation(request: PlayFabEntityModels.RemoveGroupInvitationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Removes members from a group. - * https://api.playfab.com/Documentation/Entity/method/RemoveMembers - */ - RemoveMembers(request: PlayFabEntityModels.RemoveMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Sets the global title access policy - * https://api.playfab.com/Documentation/Entity/method/SetGlobalPolicy - */ - SetGlobalPolicy(request: PlayFabEntityModels.SetGlobalPolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Sets objects on an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/SetObjects - */ - SetObjects(request: PlayFabEntityModels.SetObjectsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Sets the profiles access policy - * https://api.playfab.com/Documentation/Entity/method/SetProfilePolicy - */ - SetProfilePolicy(request: PlayFabEntityModels.SetEntityProfilePolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Unblocks a list of entities from joining a group - * https://api.playfab.com/Documentation/Entity/method/UnblockEntity - */ - UnblockEntity(request: PlayFabEntityModels.UnblockEntityRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Updates non-membership data about a group. - * https://api.playfab.com/Documentation/Entity/method/UpdateGroup - */ - UpdateGroup(request: PlayFabEntityModels.UpdateGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Updates metadata about a role. - * https://api.playfab.com/Documentation/Entity/method/UpdateRole - */ - UpdateRole(request: PlayFabEntityModels.UpdateGroupRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Write batches of entity based events to PlayStream. - * https://api.playfab.com/Documentation/Entity/method/WriteEvents - */ - WriteEvents(request: PlayFabEntityModels.WriteEventsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - - } -} - -declare module PlayFabEntityModels { - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.AbortFileUploadsRequest */ - export interface AbortFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** Names of the files to have their pending uploads aborted. */ - FileNames: string[]; - /** - * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not - * be performed. - */ - ProfileVersion?: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.AbortFileUploadsResponse */ - export interface AbortFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.AcceptGroupApplicationRequest */ - export interface AcceptGroupApplicationRequest extends PlayFabModule.IPlayFabRequestCommon { - /** - * Optional. Type of the entity to accept as. If specified, must be the same entity as the claimant or an entity that is a - * child of the claimant entity. Defaults to the claimant entity. - */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.AcceptGroupInvitationRequest */ - export interface AcceptGroupInvitationRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.AddMembersRequest */ - export interface AddMembersRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - /** List of entities to add to the group. Only entities of type title_player_account and character may be added to groups. */ - Members: EntityKey[]; - /** - * Optional: The ID of the existing role to add the entities to. If this is not specified, the default member role for the - * group will be used. Role IDs must be between 1 and 64 characters long. - */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ApplyToGroupRequest */ - export interface ApplyToGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** Optional, default true. Automatically accept an outstanding invitation if one exists instead of creating an application */ - AutoAcceptOutstandingInvite?: boolean; - /** The entity to perform this action on. */ - Entity?: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ApplyToGroupResponse */ - export interface ApplyToGroupResponse extends PlayFabModule.IPlayFabResultCommon { - /** Type of entity that requested membership */ - Entity?: EntityWithLineage; - /** When the application to join will expire and be deleted */ - Expires: string; - /** ID of the group that the entity requesting membership to */ - Group?: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.BlockEntityRequest */ - export interface BlockEntityRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ChangeMemberRoleRequest */ - export interface ChangeMemberRoleRequest extends PlayFabModule.IPlayFabRequestCommon { - /** - * The ID of the role that the entities will become a member of. This must be an existing role. Role IDs must be between 1 - * and 64 characters long. - */ - DestinationRoleId?: string; - /** The identifier of the group */ - Group: EntityKey; - /** - * List of entities to move between roles in the group. All entities in this list must be members of the group and origin - * role. - */ - Members: EntityKey[]; - /** The ID of the role that the entities currently are a member of. Role IDs must be between 1 and 64 characters long. */ - OriginRoleId: string; - - } - - type CloudScriptRevisionOption = "Live" - | "Latest" - | "Specific"; - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.CreateGroupRequest */ - export interface CreateGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - /** The name of the group. This is unique at the title level by default. */ - GroupName: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.CreateGroupResponse */ - export interface CreateGroupResponse extends PlayFabModule.IPlayFabResultCommon { - /** The ID of the administrator role for the group. */ - AdminRoleId?: string; - /** The server date and time the group was created. */ - Created: string; - /** The identifier of the group */ - Group: EntityKey; - /** The name of the group. */ - GroupName?: string; - /** The ID of the default member role for the group. */ - MemberRoleId?: string; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - /** The list of roles and names that belong to the group. */ - Roles?: { [key: string]: string | null }; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.CreateGroupRoleRequest */ - export interface CreateGroupRoleRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - /** - * The ID of the role. This must be unique within the group and cannot be changed. Role IDs must be between 1 and 64 - * characters long. - */ - RoleId: string; - /** - * The name of the role. This must be unique within the group and can be changed later. Role names must be between 1 and - * 100 characters long - */ - RoleName: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.CreateGroupRoleResponse */ - export interface CreateGroupRoleResponse extends PlayFabModule.IPlayFabResultCommon { - /** The current version of the group profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - /** ID for the role */ - RoleId?: string; - /** The name of the role */ - RoleName?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.DeleteFilesRequest */ - export interface DeleteFilesRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** Names of the files to be deleted. */ - FileNames: string[]; - /** - * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not - * be performed. - */ - ProfileVersion?: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.DeleteFilesResponse */ - export interface DeleteFilesResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.DeleteGroupRequest */ - export interface DeleteGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** ID of the group or role to remove */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.DeleteRoleRequest */ - export interface DeleteRoleRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - /** The ID of the role to delete. Role IDs must be between 1 and 64 characters long. */ - RoleId?: string; - - } - - type EffectType = "Allow" - | "Deny"; - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EmptyResult */ - export interface EmptyResult extends PlayFabModule.IPlayFabResultCommon { - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityDataObject */ - export interface EntityDataObject { - /** Un-escaped JSON object, if DataAsObject is true. */ - DataObject?: any; - /** Escaped string JSON body of the object, if DataAsObject is default or false. */ - EscapedDataObject?: string; - /** Name of this object. */ - ObjectName?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityKey */ - export interface EntityKey { - /** Entity profile ID. */ - Id: string; - /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ - Type?: string; - /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ - TypeString?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityMemberRole */ - export interface EntityMemberRole { - /** The list of members in the role */ - Members?: EntityWithLineage[]; - /** The ID of the role. */ - RoleId?: string; - /** The name of the role */ - RoleName?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityPermissionStatement */ - export interface EntityPermissionStatement { - /** The action this statement effects. May be 'Read', 'Write' or '*' for both read and write. */ - Action: string; - /** A comment about the statement. Intended solely for bookkeeping and debugging. */ - Comment?: string; - /** Additional conditions to be applied for entity resources. */ - Condition?: any; - /** The effect this statement will have. It may be either Allow or Deny */ - Effect: string; - /** The principal this statement will effect. */ - Principal: any; - /** The resource this statements effects. Similar to 'pfrn:data--title![Title ID]/Profile/*' */ - Resource: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityProfileBody */ - export interface EntityProfileBody { - /** The entity id and type. */ - Entity?: EntityKey; - /** - * The chain of responsibility for this entity. This is a representation of 'ownership'. It is constructed using the - * following formats (replace '[ID]' with the unique identifier for the given entity): Namespace: 'namespace![Namespace - * ID]' Title: 'title![Namespace ID]/[Title ID]' Master Player Account: 'master_player_account![Namespace - * ID]/[MasterPlayerAccount ID]' Title Player Account: 'title_player_account![Namespace ID]/[Title ID]/[MasterPlayerAccount - * ID]/[TitlePlayerAccount ID]' Character: 'character![Namespace ID]/[Title ID]/[MasterPlayerAccount - * ID]/[TitlePlayerAccount ID]/[Character ID]' - */ - EntityChain?: string; - /** The files on this profile. */ - Files?: { [key: string]: EntityProfileFileMetadata }; - /** The objects on this profile. */ - Objects?: { [key: string]: EntityDataObject }; - /** - * The permissions that govern access to this entity profile and its properties. Only includes permissions set on this - * profile, not global statements from titles and namespaces. - */ - Permissions?: EntityPermissionStatement[]; - /** - * The version number of the profile in persistent storage at the time of the read. Used for optional optimistic - * concurrency during update. - */ - VersionNumber: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityProfileFileMetadata */ - export interface EntityProfileFileMetadata { - /** Checksum value for the file */ - Checksum?: string; - /** Name of the file */ - FileName?: string; - /** Last UTC time the file was modified */ - LastModified: string; - /** Storage service's reported byte count */ - Size: number; - - } - - type EntityTypes = "title" - | "master_player_account" - | "title_player_account" - | "character" - | "group" - | "service"; - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityWithLineage */ - export interface EntityWithLineage { - /** The entity key for the specified entity */ - Key?: EntityKey; - /** Dictionary of entity keys for related entities. Dictionary key is entity type. */ - Lineage?: { [key: string]: EntityKey }; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EventContents */ - export interface EventContents { - /** Entity associated with the event */ - Entity: EntityKey; - /** The namespace in which the event is defined. It must be prepended with 'com.playfab.events.' */ - EventNamespace: string; - /** The name of this event. */ - Name: string; - /** - * The original unique identifier associated with this event before it was posted to PlayFab. The value might differ from - * the EventId value, which is assigned when the event is received by the server. - */ - OriginalId?: string; - /** - * The time (in UTC) associated with this event when it occurred. If specified, this value is stored in the - * OriginalTimestamp property of the PlayStream event. - */ - OriginalTimestamp?: string; - /** Arbitrary data associated with the event. Only one of Payload or PayloadJSON is allowed. */ - Payload?: any; - /** - * Arbitrary data associated with the event, represented as a JSON serialized string. Only one of Payload or PayloadJSON is - * allowed. - */ - PayloadJSON?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ExecuteCloudScriptResult */ - export interface ExecuteCloudScriptResult extends PlayFabModule.IPlayFabResultCommon { - /** Number of PlayFab API requests issued by the CloudScript function */ - APIRequestsIssued: number; - /** Information about the error, if any, that occurred during execution */ - Error?: ScriptExecutionError; - ExecutionTimeSeconds: number; - /** The name of the function that executed */ - FunctionName?: string; - /** The object returned from the CloudScript function, if any */ - FunctionResult?: any; - /** - * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if - * the total event size is larger than 350KB. - */ - FunctionResultTooLarge?: boolean; - /** Number of external HTTP requests issued by the CloudScript function */ - HttpRequestsIssued: number; - /** - * Entries logged during the function execution. These include both entries logged in the function code using log.info() - * and log.error() and error entries for API and HTTP request failures. - */ - Logs?: LogStatement[]; - /** - * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total - * event size is larger than 350KB after the FunctionResult was removed. - */ - LogsTooLarge?: boolean; - MemoryConsumedBytes: number; - /** - * Processor time consumed while executing the function. This does not include time spent waiting on API calls or HTTP - * requests. - */ - ProcessorTimeSeconds: number; - /** The revision of the CloudScript that executed */ - Revision: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ExecuteEntityCloudScriptRequest */ - export interface ExecuteEntityCloudScriptRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - /** The name of the CloudScript function to execute */ - FunctionName: string; - /** Object that is passed in to the function as the first argument */ - FunctionParameter?: any; - /** - * Generate a 'entity_executed_cloudscript' PlayStream event containing the results of the function execution and other - * contextual information. This event will show up in the PlayStream debugger console for the player in Game Manager. - */ - GeneratePlayStreamEvent?: boolean; - /** - * Option for which revision of the CloudScript to execute. 'Latest' executes the most recently created revision, 'Live' - * executes the current live, published revision, and 'Specific' executes the specified revision. The default value is - * 'Specific', if the SpecificRevision parameter is specified, otherwise it is 'Live'. - */ - RevisionSelection?: string; - /** The specific revision to execute, when RevisionSelection is set to 'Specific' */ - SpecificRevision?: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.FinalizeFileUploadsRequest */ - export interface FinalizeFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** Names of the files to be finalized. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ - FileNames: string[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.FinalizeFileUploadsResponse */ - export interface FinalizeFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** Collection of metadata for the entity's files */ - Metadata?: { [key: string]: GetFileMetadata }; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityProfileRequest */ - export interface GetEntityProfileRequest extends PlayFabModule.IPlayFabRequestCommon { - /** - * Determines whether the objects will be returned as an escaped JSON string or as a un-escaped JSON object. Default is - * JSON string. - */ - DataAsObject?: boolean; - /** The entity to perform this action on. */ - Entity: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityProfileResponse */ - export interface GetEntityProfileResponse extends PlayFabModule.IPlayFabResultCommon { - /** Entity profile */ - Profile?: EntityProfileBody; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityProfilesRequest */ - export interface GetEntityProfilesRequest extends PlayFabModule.IPlayFabRequestCommon { - /** - * Determines whether the objects will be returned as an escaped JSON string or as a un-escaped JSON object. Default is - * JSON string. - */ - DataAsObject?: boolean; - /** Entity keys of the profiles to load. Must be between 1 and 25 */ - Entities: EntityKey[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityProfilesResponse */ - export interface GetEntityProfilesResponse extends PlayFabModule.IPlayFabResultCommon { - /** Entity profiles */ - Profiles?: EntityProfileBody[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityTokenRequest */ - export interface GetEntityTokenRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityTokenResponse */ - export interface GetEntityTokenResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** The token used to set X-EntityToken for all entity based API calls. */ - EntityToken?: string; - /** The time the token will expire, if it is an expiring token, in UTC. */ - TokenExpiration?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetFileMetadata */ - export interface GetFileMetadata { - /** Checksum value for the file */ - Checksum?: string; - /** Download URL where the file can be retrieved */ - DownloadUrl?: string; - /** Name of the file */ - FileName?: string; - /** Last UTC time the file was modified */ - LastModified: string; - /** Storage service's reported byte count */ - Size: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetFilesRequest */ - export interface GetFilesRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetFilesResponse */ - export interface GetFilesResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** Collection of metadata for the entity's files */ - Metadata?: { [key: string]: GetFileMetadata }; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetGlobalPolicyRequest */ - export interface GetGlobalPolicyRequest extends PlayFabModule.IPlayFabRequestCommon { - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetGlobalPolicyResponse */ - export interface GetGlobalPolicyResponse extends PlayFabModule.IPlayFabResultCommon { - /** The permissions that govern access to all entities under this title or namespace. */ - Permissions?: EntityPermissionStatement[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetGroupRequest */ - export interface GetGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group?: EntityKey; - /** The full name of the group */ - GroupName?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetGroupResponse */ - export interface GetGroupResponse extends PlayFabModule.IPlayFabResultCommon { - /** The ID of the administrator role for the group. */ - AdminRoleId?: string; - /** The server date and time the group was created. */ - Created: string; - /** The identifier of the group */ - Group: EntityKey; - /** The name of the group. */ - GroupName?: string; - /** The ID of the default member role for the group. */ - MemberRoleId?: string; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - /** The list of roles and names that belong to the group. */ - Roles?: { [key: string]: string | null }; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetObjectsRequest */ - export interface GetObjectsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** - * Determines whether the object will be returned as an escaped JSON string or as a un-escaped JSON object. Default is JSON - * object. - */ - EscapeObject?: boolean; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetObjectsResponse */ - export interface GetObjectsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** Requested objects that the calling entity has access to */ - Objects?: { [key: string]: ObjectResult }; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GroupApplication */ - export interface GroupApplication { - /** Type of entity that requested membership */ - Entity?: EntityWithLineage; - /** When the application to join will expire and be deleted */ - Expires: string; - /** ID of the group that the entity requesting membership to */ - Group?: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GroupBlock */ - export interface GroupBlock { - /** The entity that is blocked */ - Entity?: EntityWithLineage; - /** ID of the group that the entity is blocked from */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GroupInvitation */ - export interface GroupInvitation { - /** When the invitation will expire and be deleted */ - Expires: string; - /** The group that the entity invited to */ - Group?: EntityKey; - /** The entity that created the invitation */ - InvitedByEntity?: EntityWithLineage; - /** The entity that is invited */ - InvitedEntity?: EntityWithLineage; - /** ID of the role in the group to assign the user to. */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GroupRole */ - export interface GroupRole { - /** ID for the role */ - RoleId?: string; - /** The name of the role */ - RoleName?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GroupWithRoles */ - export interface GroupWithRoles { - /** ID for the group */ - Group?: EntityKey; - /** The name of the group */ - GroupName?: string; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - /** The list of roles within the group */ - Roles?: GroupRole[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.InitiateFileUploadMetadata */ - export interface InitiateFileUploadMetadata { - /** Name of the file. */ - FileName?: string; - /** Location the data should be sent to via an HTTP PUT operation. */ - UploadUrl?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.InitiateFileUploadsRequest */ - export interface InitiateFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** Names of the files to be set. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ - FileNames: string[]; - /** - * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not - * be performed. - */ - ProfileVersion?: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.InitiateFileUploadsResponse */ - export interface InitiateFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - /** Collection of file names and upload urls */ - UploadDetails?: InitiateFileUploadMetadata[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.InviteToGroupRequest */ - export interface InviteToGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** Optional, default true. Automatically accept an application if one exists instead of creating an invitation */ - AutoAcceptOutstandingApplication?: boolean; - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - /** - * Optional. ID of an existing a role in the group to assign the user to. The group's default member role is used if this - * is not specified. Role IDs must be between 1 and 64 characters long. - */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.InviteToGroupResponse */ - export interface InviteToGroupResponse extends PlayFabModule.IPlayFabResultCommon { - /** When the invitation will expire and be deleted */ - Expires: string; - /** The group that the entity invited to */ - Group?: EntityKey; - /** The entity that created the invitation */ - InvitedByEntity?: EntityWithLineage; - /** The entity that is invited */ - InvitedEntity?: EntityWithLineage; - /** ID of the role in the group to assign the user to. */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.IsMemberRequest */ - export interface IsMemberRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - /** - * Optional: ID of the role to check membership of. Defaults to any role (that is, check to see if the entity is a member - * of the group in any capacity) if not specified. - */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.IsMemberResponse */ - export interface IsMemberResponse extends PlayFabModule.IPlayFabResultCommon { - /** A value indicating whether or not the entity is a member. */ - IsMember: boolean; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupApplicationsRequest */ - export interface ListGroupApplicationsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupApplicationsResponse */ - export interface ListGroupApplicationsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The requested list of applications to the group. */ - Applications?: GroupApplication[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupBlocksRequest */ - export interface ListGroupBlocksRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupBlocksResponse */ - export interface ListGroupBlocksResponse extends PlayFabModule.IPlayFabResultCommon { - /** The requested list blocked entities. */ - BlockedEntities?: GroupBlock[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupInvitationsRequest */ - export interface ListGroupInvitationsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupInvitationsResponse */ - export interface ListGroupInvitationsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The requested list of group invitations. */ - Invitations?: GroupInvitation[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupMembersRequest */ - export interface ListGroupMembersRequest extends PlayFabModule.IPlayFabRequestCommon { - /** ID of the group to list the members and roles for */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupMembersResponse */ - export interface ListGroupMembersResponse extends PlayFabModule.IPlayFabResultCommon { - /** The requested list of roles and member entity IDs. */ - Members?: EntityMemberRole[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListMembershipOpportunitiesRequest */ - export interface ListMembershipOpportunitiesRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListMembershipOpportunitiesResponse */ - export interface ListMembershipOpportunitiesResponse extends PlayFabModule.IPlayFabResultCommon { - /** The requested list of group applications. */ - Applications?: GroupApplication[]; - /** The requested list of group invitations. */ - Invitations?: GroupInvitation[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListMembershipRequest */ - export interface ListMembershipRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListMembershipResponse */ - export interface ListMembershipResponse extends PlayFabModule.IPlayFabResultCommon { - /** The list of groups */ - Groups?: GroupWithRoles[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.LogStatement */ - export interface LogStatement { - /** Optional object accompanying the message as contextual information */ - Data?: any; - /** 'Debug', 'Info', or 'Error' */ - Level?: string; - Message?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ObjectResult */ - export interface ObjectResult extends PlayFabModule.IPlayFabResultCommon { - /** Un-escaped JSON object, if EscapeObject false or default. */ - DataObject?: any; - /** Escaped string JSON body of the object, if EscapeObject is true. */ - EscapedDataObject?: string; - /** Name of the object. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ - ObjectName?: string; - - } - - type OperationTypes = "Created" - | "Updated" - | "Deleted" - | "None"; - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.RemoveGroupApplicationRequest */ - export interface RemoveGroupApplicationRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.RemoveGroupInvitationRequest */ - export interface RemoveGroupInvitationRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.RemoveMembersRequest */ - export interface RemoveMembersRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - /** List of entities to remove */ - Members: EntityKey[]; - /** The ID of the role to remove the entities from. */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ScriptExecutionError */ - export interface ScriptExecutionError { - /** - * Error code, such as CloudScriptNotFound, JavascriptException, CloudScriptFunctionArgumentSizeExceeded, - * CloudScriptAPIRequestCountExceeded, CloudScriptAPIRequestError, or CloudScriptHTTPRequestError - */ - Error?: string; - /** Details about the error */ - Message?: string; - /** Point during the execution of the script at which the error occurred, if any */ - StackTrace?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetEntityProfilePolicyRequest */ - export interface SetEntityProfilePolicyRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The statements to include in the access policy. */ - Statements?: EntityPermissionStatement[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetEntityProfilePolicyResponse */ - export interface SetEntityProfilePolicyResponse extends PlayFabModule.IPlayFabResultCommon { - /** - * The permissions that govern access to this entity profile and its properties. Only includes permissions set on this - * profile, not global statements from titles and namespaces. - */ - Permissions?: EntityPermissionStatement[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetGlobalPolicyRequest */ - export interface SetGlobalPolicyRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The permissions that govern access to all entities under this title or namespace. */ - Permissions?: EntityPermissionStatement[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetGlobalPolicyResponse */ - export interface SetGlobalPolicyResponse extends PlayFabModule.IPlayFabResultCommon { - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetObject */ - export interface SetObject { - /** - * Body of the object to be saved. If empty and DeleteObject is true object will be deleted if it exists, or no operation - * will occur if it does not exist. Only one of Object or EscapedDataObject fields may be used. - */ - DataObject?: any; - /** Flag to indicate that this object should be deleted. Both DataObject and EscapedDataObject must not be set as well. */ - DeleteObject?: boolean; - /** - * Body of the object to be saved as an escaped JSON string. If empty and DeleteObject is true object will be deleted if it - * exists, or no operation will occur if it does not exist. Only one of DataObject or EscapedDataObject fields may be used. - */ - EscapedDataObject?: string; - /** Name of object. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.'. */ - ObjectName: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetObjectInfo */ - export interface SetObjectInfo { - /** Name of the object */ - ObjectName?: string; - /** Optional reason to explain why the operation was the result that it was. */ - OperationReason?: string; - /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ - SetResult?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetObjectsRequest */ - export interface SetObjectsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** - * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from - * GetProfile API, you can ensure that the object set will only be performed if the profile has not been updated by any - * other clients since the version you last loaded. - */ - ExpectedProfileVersion?: number; - /** Collection of objects to set on the profile. */ - Objects: SetObject[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetObjectsResponse */ - export interface SetObjectsResponse extends PlayFabModule.IPlayFabResultCommon { - /** New version of the entity profile. */ - ProfileVersion: number; - /** New version of the entity profile. */ - SetResults?: SetObjectInfo[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.UnblockEntityRequest */ - export interface UnblockEntityRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.UpdateGroupRequest */ - export interface UpdateGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** Optional: the ID of an existing role to set as the new administrator role for the group */ - AdminRoleId?: string; - /** - * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from the - * GetGroup API, you can ensure that the group data update will only be performed if the group has not been updated by any - * other clients since the version you last loaded. - */ - ExpectedProfileVersion?: number; - /** The identifier of the group */ - Group: EntityKey; - /** Optional: the new name of the group */ - GroupName?: string; - /** Optional: the ID of an existing role to set as the new member role for the group */ - MemberRoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.UpdateGroupResponse */ - export interface UpdateGroupResponse extends PlayFabModule.IPlayFabResultCommon { - /** Optional reason to explain why the operation was the result that it was. */ - OperationReason?: string; - /** New version of the group data. */ - ProfileVersion: number; - /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ - SetResult?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.UpdateGroupRoleRequest */ - export interface UpdateGroupRoleRequest extends PlayFabModule.IPlayFabRequestCommon { - /** - * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from the - * GetGroup API, you can ensure that the group data update will only be performed if the group has not been updated by any - * other clients since the version you last loaded. - */ - ExpectedProfileVersion?: number; - /** The identifier of the group */ - Group: EntityKey; - /** ID of the role to update. Role IDs must be between 1 and 64 characters long. */ - RoleId?: string; - /** The new name of the role */ - RoleName: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.UpdateGroupRoleResponse */ - export interface UpdateGroupRoleResponse extends PlayFabModule.IPlayFabResultCommon { - /** Optional reason to explain why the operation was the result that it was. */ - OperationReason?: string; - /** New version of the role data. */ - ProfileVersion: number; - /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ - SetResult?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.WriteEventsRequest */ - export interface WriteEventsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** Collection of events to write to PlayStream. */ - Events: EventContents[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.WriteEventsResponse */ - export interface WriteEventsResponse extends PlayFabModule.IPlayFabResultCommon { - /** - * The unique identifiers assigned by the server to the events, in the same order as the events in the request. Only - * returned if FlushToPlayStream option is true. - */ - AssignedEventIds?: string[]; - - } - - -} diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabEventsApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabEventsApi.d.ts new file mode 100644 index 00000000..001f1f51 --- /dev/null +++ b/PlayFabSdk/src/Typings/PlayFab/PlayFabEventsApi.d.ts @@ -0,0 +1,81 @@ +/// + +declare module PlayFabEventsModule { + export interface IPlayFabEvents { + ForgetAllCredentials(): void; + + /** + * Write batches of entity based events to PlayStream. + * https://api.playfab.com/Documentation/Events/method/WriteEvents + */ + WriteEvents(request: PlayFabEventsModels.WriteEventsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabEventsModels { + /** https://api.playfab.com/Documentation/Events/datatype/PlayFab.Events.Models/PlayFab.Events.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/Events/datatype/PlayFab.Events.Models/PlayFab.Events.Models.EventContents */ + export interface EventContents { + /** Entity associated with the event */ + Entity: EntityKey; + /** The namespace in which the event is defined. It must be prepended with 'com.playfab.events.' */ + EventNamespace: string; + /** The name of this event. */ + Name: string; + /** + * The original unique identifier associated with this event before it was posted to PlayFab. The value might differ from + * the EventId value, which is assigned when the event is received by the server. + */ + OriginalId?: string; + /** + * The time (in UTC) associated with this event when it occurred. If specified, this value is stored in the + * OriginalTimestamp property of the PlayStream event. + */ + OriginalTimestamp?: string; + /** Arbitrary data associated with the event. Only one of Payload or PayloadJSON is allowed. */ + Payload?: any; + /** + * Arbitrary data associated with the event, represented as a JSON serialized string. Only one of Payload or PayloadJSON is + * allowed. + */ + PayloadJSON?: string; + + } + + /** https://api.playfab.com/Documentation/Events/datatype/PlayFab.Events.Models/PlayFab.Events.Models.WriteEventsRequest */ + export interface WriteEventsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Collection of events to write to PlayStream. */ + Events: EventContents[]; + + } + + /** https://api.playfab.com/Documentation/Events/datatype/PlayFab.Events.Models/PlayFab.Events.Models.WriteEventsResponse */ + export interface WriteEventsResponse extends PlayFabModule.IPlayFabResultCommon { + /** + * The unique identifiers assigned by the server to the events, in the same order as the events in the request. Only + * returned if FlushToPlayStream option is true. + */ + AssignedEventIds?: string[]; + + } + + +} diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabGroupsApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabGroupsApi.d.ts new file mode 100644 index 00000000..ee0d20bf --- /dev/null +++ b/PlayFabSdk/src/Typings/PlayFab/PlayFabGroupsApi.d.ts @@ -0,0 +1,662 @@ +/// + +declare module PlayFabGroupsModule { + export interface IPlayFabGroups { + ForgetAllCredentials(): void; + + /** + * Accepts an outstanding invitation to to join a group + * https://api.playfab.com/Documentation/Groups/method/AcceptGroupApplication + */ + AcceptGroupApplication(request: PlayFabGroupsModels.AcceptGroupApplicationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Accepts an invitation to join a group + * https://api.playfab.com/Documentation/Groups/method/AcceptGroupInvitation + */ + AcceptGroupInvitation(request: PlayFabGroupsModels.AcceptGroupInvitationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Adds members to a group or role. + * https://api.playfab.com/Documentation/Groups/method/AddMembers + */ + AddMembers(request: PlayFabGroupsModels.AddMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Applies to join a group + * https://api.playfab.com/Documentation/Groups/method/ApplyToGroup + */ + ApplyToGroup(request: PlayFabGroupsModels.ApplyToGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Blocks a list of entities from joining a group. + * https://api.playfab.com/Documentation/Groups/method/BlockEntity + */ + BlockEntity(request: PlayFabGroupsModels.BlockEntityRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Changes the role membership of a list of entities from one role to another. + * https://api.playfab.com/Documentation/Groups/method/ChangeMemberRole + */ + ChangeMemberRole(request: PlayFabGroupsModels.ChangeMemberRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Creates a new group. + * https://api.playfab.com/Documentation/Groups/method/CreateGroup + */ + CreateGroup(request: PlayFabGroupsModels.CreateGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Creates a new group role. + * https://api.playfab.com/Documentation/Groups/method/CreateRole + */ + CreateRole(request: PlayFabGroupsModels.CreateGroupRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Deletes a group and all roles, invitations, join requests, and blocks associated with it. + * https://api.playfab.com/Documentation/Groups/method/DeleteGroup + */ + DeleteGroup(request: PlayFabGroupsModels.DeleteGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Deletes an existing role in a group. + * https://api.playfab.com/Documentation/Groups/method/DeleteRole + */ + DeleteRole(request: PlayFabGroupsModels.DeleteRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Gets information about a group and its roles + * https://api.playfab.com/Documentation/Groups/method/GetGroup + */ + GetGroup(request: PlayFabGroupsModels.GetGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Invites a player to join a group + * https://api.playfab.com/Documentation/Groups/method/InviteToGroup + */ + InviteToGroup(request: PlayFabGroupsModels.InviteToGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Checks to see if an entity is a member of a group or role within the group + * https://api.playfab.com/Documentation/Groups/method/IsMember + */ + IsMember(request: PlayFabGroupsModels.IsMemberRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all outstanding requests to join a group + * https://api.playfab.com/Documentation/Groups/method/ListGroupApplications + */ + ListGroupApplications(request: PlayFabGroupsModels.ListGroupApplicationsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all entities blocked from joining a group + * https://api.playfab.com/Documentation/Groups/method/ListGroupBlocks + */ + ListGroupBlocks(request: PlayFabGroupsModels.ListGroupBlocksRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all outstanding invitations for a group + * https://api.playfab.com/Documentation/Groups/method/ListGroupInvitations + */ + ListGroupInvitations(request: PlayFabGroupsModels.ListGroupInvitationsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all members for a group + * https://api.playfab.com/Documentation/Groups/method/ListGroupMembers + */ + ListGroupMembers(request: PlayFabGroupsModels.ListGroupMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all groups and roles for an entity + * https://api.playfab.com/Documentation/Groups/method/ListMembership + */ + ListMembership(request: PlayFabGroupsModels.ListMembershipRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all outstanding invitations and group applications for an entity + * https://api.playfab.com/Documentation/Groups/method/ListMembershipOpportunities + */ + ListMembershipOpportunities(request: PlayFabGroupsModels.ListMembershipOpportunitiesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Removes an application to join a group + * https://api.playfab.com/Documentation/Groups/method/RemoveGroupApplication + */ + RemoveGroupApplication(request: PlayFabGroupsModels.RemoveGroupApplicationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Removes an invitation join a group + * https://api.playfab.com/Documentation/Groups/method/RemoveGroupInvitation + */ + RemoveGroupInvitation(request: PlayFabGroupsModels.RemoveGroupInvitationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Removes members from a group. + * https://api.playfab.com/Documentation/Groups/method/RemoveMembers + */ + RemoveMembers(request: PlayFabGroupsModels.RemoveMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Unblocks a list of entities from joining a group + * https://api.playfab.com/Documentation/Groups/method/UnblockEntity + */ + UnblockEntity(request: PlayFabGroupsModels.UnblockEntityRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Updates non-membership data about a group. + * https://api.playfab.com/Documentation/Groups/method/UpdateGroup + */ + UpdateGroup(request: PlayFabGroupsModels.UpdateGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Updates metadata about a role. + * https://api.playfab.com/Documentation/Groups/method/UpdateRole + */ + UpdateRole(request: PlayFabGroupsModels.UpdateGroupRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabGroupsModels { + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.AcceptGroupApplicationRequest */ + export interface AcceptGroupApplicationRequest extends PlayFabModule.IPlayFabRequestCommon { + /** + * Optional. Type of the entity to accept as. If specified, must be the same entity as the claimant or an entity that is a + * child of the claimant entity. Defaults to the claimant entity. + */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.AcceptGroupInvitationRequest */ + export interface AcceptGroupInvitationRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.AddMembersRequest */ + export interface AddMembersRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + /** List of entities to add to the group. Only entities of type title_player_account and character may be added to groups. */ + Members: EntityKey[]; + /** + * Optional: The ID of the existing role to add the entities to. If this is not specified, the default member role for the + * group will be used. Role IDs must be between 1 and 64 characters long. + */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ApplyToGroupRequest */ + export interface ApplyToGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Optional, default true. Automatically accept an outstanding invitation if one exists instead of creating an application */ + AutoAcceptOutstandingInvite?: boolean; + /** The entity to perform this action on. */ + Entity?: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ApplyToGroupResponse */ + export interface ApplyToGroupResponse extends PlayFabModule.IPlayFabResultCommon { + /** Type of entity that requested membership */ + Entity?: EntityWithLineage; + /** When the application to join will expire and be deleted */ + Expires: string; + /** ID of the group that the entity requesting membership to */ + Group?: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.BlockEntityRequest */ + export interface BlockEntityRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ChangeMemberRoleRequest */ + export interface ChangeMemberRoleRequest extends PlayFabModule.IPlayFabRequestCommon { + /** + * The ID of the role that the entities will become a member of. This must be an existing role. Role IDs must be between 1 + * and 64 characters long. + */ + DestinationRoleId?: string; + /** The identifier of the group */ + Group: EntityKey; + /** + * List of entities to move between roles in the group. All entities in this list must be members of the group and origin + * role. + */ + Members: EntityKey[]; + /** The ID of the role that the entities currently are a member of. Role IDs must be between 1 and 64 characters long. */ + OriginRoleId: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.CreateGroupRequest */ + export interface CreateGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + /** The name of the group. This is unique at the title level by default. */ + GroupName: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.CreateGroupResponse */ + export interface CreateGroupResponse extends PlayFabModule.IPlayFabResultCommon { + /** The ID of the administrator role for the group. */ + AdminRoleId?: string; + /** The server date and time the group was created. */ + Created: string; + /** The identifier of the group */ + Group: EntityKey; + /** The name of the group. */ + GroupName?: string; + /** The ID of the default member role for the group. */ + MemberRoleId?: string; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + /** The list of roles and names that belong to the group. */ + Roles?: { [key: string]: string | null }; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.CreateGroupRoleRequest */ + export interface CreateGroupRoleRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + /** + * The ID of the role. This must be unique within the group and cannot be changed. Role IDs must be between 1 and 64 + * characters long. + */ + RoleId: string; + /** + * The name of the role. This must be unique within the group and can be changed later. Role names must be between 1 and + * 100 characters long + */ + RoleName: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.CreateGroupRoleResponse */ + export interface CreateGroupRoleResponse extends PlayFabModule.IPlayFabResultCommon { + /** The current version of the group profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + /** ID for the role */ + RoleId?: string; + /** The name of the role */ + RoleName?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.DeleteGroupRequest */ + export interface DeleteGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** ID of the group or role to remove */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.DeleteRoleRequest */ + export interface DeleteRoleRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + /** The ID of the role to delete. Role IDs must be between 1 and 64 characters long. */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.EmptyResult */ + export interface EmptyResult extends PlayFabModule.IPlayFabResultCommon { + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.EntityMemberRole */ + export interface EntityMemberRole { + /** The list of members in the role */ + Members?: EntityWithLineage[]; + /** The ID of the role. */ + RoleId?: string; + /** The name of the role */ + RoleName?: string; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.EntityWithLineage */ + export interface EntityWithLineage { + /** The entity key for the specified entity */ + Key?: EntityKey; + /** Dictionary of entity keys for related entities. Dictionary key is entity type. */ + Lineage?: { [key: string]: EntityKey }; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GetGroupRequest */ + export interface GetGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group?: EntityKey; + /** The full name of the group */ + GroupName?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GetGroupResponse */ + export interface GetGroupResponse extends PlayFabModule.IPlayFabResultCommon { + /** The ID of the administrator role for the group. */ + AdminRoleId?: string; + /** The server date and time the group was created. */ + Created: string; + /** The identifier of the group */ + Group: EntityKey; + /** The name of the group. */ + GroupName?: string; + /** The ID of the default member role for the group. */ + MemberRoleId?: string; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + /** The list of roles and names that belong to the group. */ + Roles?: { [key: string]: string | null }; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GroupApplication */ + export interface GroupApplication { + /** Type of entity that requested membership */ + Entity?: EntityWithLineage; + /** When the application to join will expire and be deleted */ + Expires: string; + /** ID of the group that the entity requesting membership to */ + Group?: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GroupBlock */ + export interface GroupBlock { + /** The entity that is blocked */ + Entity?: EntityWithLineage; + /** ID of the group that the entity is blocked from */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GroupInvitation */ + export interface GroupInvitation { + /** When the invitation will expire and be deleted */ + Expires: string; + /** The group that the entity invited to */ + Group?: EntityKey; + /** The entity that created the invitation */ + InvitedByEntity?: EntityWithLineage; + /** The entity that is invited */ + InvitedEntity?: EntityWithLineage; + /** ID of the role in the group to assign the user to. */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GroupRole */ + export interface GroupRole { + /** ID for the role */ + RoleId?: string; + /** The name of the role */ + RoleName?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GroupWithRoles */ + export interface GroupWithRoles { + /** ID for the group */ + Group?: EntityKey; + /** The name of the group */ + GroupName?: string; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + /** The list of roles within the group */ + Roles?: GroupRole[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.InviteToGroupRequest */ + export interface InviteToGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Optional, default true. Automatically accept an application if one exists instead of creating an invitation */ + AutoAcceptOutstandingApplication?: boolean; + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + /** + * Optional. ID of an existing a role in the group to assign the user to. The group's default member role is used if this + * is not specified. Role IDs must be between 1 and 64 characters long. + */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.InviteToGroupResponse */ + export interface InviteToGroupResponse extends PlayFabModule.IPlayFabResultCommon { + /** When the invitation will expire and be deleted */ + Expires: string; + /** The group that the entity invited to */ + Group?: EntityKey; + /** The entity that created the invitation */ + InvitedByEntity?: EntityWithLineage; + /** The entity that is invited */ + InvitedEntity?: EntityWithLineage; + /** ID of the role in the group to assign the user to. */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.IsMemberRequest */ + export interface IsMemberRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + /** + * Optional: ID of the role to check membership of. Defaults to any role (that is, check to see if the entity is a member + * of the group in any capacity) if not specified. + */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.IsMemberResponse */ + export interface IsMemberResponse extends PlayFabModule.IPlayFabResultCommon { + /** A value indicating whether or not the entity is a member. */ + IsMember: boolean; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupApplicationsRequest */ + export interface ListGroupApplicationsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupApplicationsResponse */ + export interface ListGroupApplicationsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The requested list of applications to the group. */ + Applications?: GroupApplication[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupBlocksRequest */ + export interface ListGroupBlocksRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupBlocksResponse */ + export interface ListGroupBlocksResponse extends PlayFabModule.IPlayFabResultCommon { + /** The requested list blocked entities. */ + BlockedEntities?: GroupBlock[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupInvitationsRequest */ + export interface ListGroupInvitationsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupInvitationsResponse */ + export interface ListGroupInvitationsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The requested list of group invitations. */ + Invitations?: GroupInvitation[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupMembersRequest */ + export interface ListGroupMembersRequest extends PlayFabModule.IPlayFabRequestCommon { + /** ID of the group to list the members and roles for */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupMembersResponse */ + export interface ListGroupMembersResponse extends PlayFabModule.IPlayFabResultCommon { + /** The requested list of roles and member entity IDs. */ + Members?: EntityMemberRole[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListMembershipOpportunitiesRequest */ + export interface ListMembershipOpportunitiesRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListMembershipOpportunitiesResponse */ + export interface ListMembershipOpportunitiesResponse extends PlayFabModule.IPlayFabResultCommon { + /** The requested list of group applications. */ + Applications?: GroupApplication[]; + /** The requested list of group invitations. */ + Invitations?: GroupInvitation[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListMembershipRequest */ + export interface ListMembershipRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListMembershipResponse */ + export interface ListMembershipResponse extends PlayFabModule.IPlayFabResultCommon { + /** The list of groups */ + Groups?: GroupWithRoles[]; + + } + + type OperationTypes = "Created" + | "Updated" + | "Deleted" + | "None"; + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.RemoveGroupApplicationRequest */ + export interface RemoveGroupApplicationRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.RemoveGroupInvitationRequest */ + export interface RemoveGroupInvitationRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.RemoveMembersRequest */ + export interface RemoveMembersRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + /** List of entities to remove */ + Members: EntityKey[]; + /** The ID of the role to remove the entities from. */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.UnblockEntityRequest */ + export interface UnblockEntityRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.UpdateGroupRequest */ + export interface UpdateGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Optional: the ID of an existing role to set as the new administrator role for the group */ + AdminRoleId?: string; + /** + * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from the + * GetGroup API, you can ensure that the group data update will only be performed if the group has not been updated by any + * other clients since the version you last loaded. + */ + ExpectedProfileVersion?: number; + /** The identifier of the group */ + Group: EntityKey; + /** Optional: the new name of the group */ + GroupName?: string; + /** Optional: the ID of an existing role to set as the new member role for the group */ + MemberRoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.UpdateGroupResponse */ + export interface UpdateGroupResponse extends PlayFabModule.IPlayFabResultCommon { + /** Optional reason to explain why the operation was the result that it was. */ + OperationReason?: string; + /** New version of the group data. */ + ProfileVersion: number; + /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ + SetResult?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.UpdateGroupRoleRequest */ + export interface UpdateGroupRoleRequest extends PlayFabModule.IPlayFabRequestCommon { + /** + * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from the + * GetGroup API, you can ensure that the group data update will only be performed if the group has not been updated by any + * other clients since the version you last loaded. + */ + ExpectedProfileVersion?: number; + /** The identifier of the group */ + Group: EntityKey; + /** ID of the role to update. Role IDs must be between 1 and 64 characters long. */ + RoleId?: string; + /** The new name of the role */ + RoleName: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.UpdateGroupRoleResponse */ + export interface UpdateGroupRoleResponse extends PlayFabModule.IPlayFabResultCommon { + /** Optional reason to explain why the operation was the result that it was. */ + OperationReason?: string; + /** New version of the role data. */ + ProfileVersion: number; + /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ + SetResult?: string; + + } + + +} diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabMatchmakerApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabMatchmakerApi.d.ts index fc992efb..6e5e864d 100644 --- a/PlayFabSdk/src/Typings/PlayFab/PlayFabMatchmakerApi.d.ts +++ b/PlayFabSdk/src/Typings/PlayFab/PlayFabMatchmakerApi.d.ts @@ -156,10 +156,14 @@ declare module PlayFabMatchmakerModels { GameID?: string; /** IPV4 address of the new Game Server Instance. */ ServerHostname?: string; + /** IPV4 address of the server */ + ServerIPV4Address?: string; /** IPV6 address of the new Game Server Instance. */ ServerIPV6Address?: string; /** Port number for communication with the Game Server Instance. */ ServerPort: number; + /** Public DNS name (if any) of the server */ + ServerPublicDNSName?: string; } diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabProfilesApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabProfilesApi.d.ts new file mode 100644 index 00000000..d961faab --- /dev/null +++ b/PlayFabSdk/src/Typings/PlayFab/PlayFabProfilesApi.d.ts @@ -0,0 +1,243 @@ +/// + +declare module PlayFabProfilesModule { + export interface IPlayFabProfiles { + ForgetAllCredentials(): void; + + /** + * Gets the global title access policy + * https://api.playfab.com/Documentation/Profiles/method/GetGlobalPolicy + */ + GetGlobalPolicy(request: PlayFabProfilesModels.GetGlobalPolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the entity's profile. + * https://api.playfab.com/Documentation/Profiles/method/GetProfile + */ + GetProfile(request: PlayFabProfilesModels.GetEntityProfileRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the entity's profile. + * https://api.playfab.com/Documentation/Profiles/method/GetProfiles + */ + GetProfiles(request: PlayFabProfilesModels.GetEntityProfilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Sets the global title access policy + * https://api.playfab.com/Documentation/Profiles/method/SetGlobalPolicy + */ + SetGlobalPolicy(request: PlayFabProfilesModels.SetGlobalPolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Updates the entity's language + * https://api.playfab.com/Documentation/Profiles/method/SetProfileLanguage + */ + SetProfileLanguage(request: PlayFabProfilesModels.SetProfileLanguageRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Sets the profiles access policy + * https://api.playfab.com/Documentation/Profiles/method/SetProfilePolicy + */ + SetProfilePolicy(request: PlayFabProfilesModels.SetEntityProfilePolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabProfilesModels { + type EffectType = "Allow" + | "Deny"; + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.EntityDataObject */ + export interface EntityDataObject { + /** Un-escaped JSON object, if DataAsObject is true. */ + DataObject?: any; + /** Escaped string JSON body of the object, if DataAsObject is default or false. */ + EscapedDataObject?: string; + /** Name of this object. */ + ObjectName?: string; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.EntityPermissionStatement */ + export interface EntityPermissionStatement { + /** The action this statement effects. May be 'Read', 'Write' or '*' for both read and write. */ + Action: string; + /** A comment about the statement. Intended solely for bookkeeping and debugging. */ + Comment?: string; + /** Additional conditions to be applied for entity resources. */ + Condition?: any; + /** The effect this statement will have. It may be either Allow or Deny */ + Effect: string; + /** The principal this statement will effect. */ + Principal: any; + /** The resource this statements effects. Similar to 'pfrn:data--title![Title ID]/Profile/*' */ + Resource: string; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.EntityProfileBody */ + export interface EntityProfileBody { + /** The entity id and type. */ + Entity?: EntityKey; + /** + * The chain of responsibility for this entity. This is a representation of 'ownership'. It is constructed using the + * following formats (replace '[ID]' with the unique identifier for the given entity): Namespace: 'namespace![Namespace + * ID]' Title: 'title![Namespace ID]/[Title ID]' Master Player Account: 'master_player_account![Namespace + * ID]/[MasterPlayerAccount ID]' Title Player Account: 'title_player_account![Namespace ID]/[Title ID]/[MasterPlayerAccount + * ID]/[TitlePlayerAccount ID]' Character: 'character![Namespace ID]/[Title ID]/[MasterPlayerAccount + * ID]/[TitlePlayerAccount ID]/[Character ID]' + */ + EntityChain?: string; + /** The files on this profile. */ + Files?: { [key: string]: EntityProfileFileMetadata }; + /** The language on this profile. */ + Language?: string; + /** The objects on this profile. */ + Objects?: { [key: string]: EntityDataObject }; + /** + * The permissions that govern access to this entity profile and its properties. Only includes permissions set on this + * profile, not global statements from titles and namespaces. + */ + Permissions?: EntityPermissionStatement[]; + /** + * The version number of the profile in persistent storage at the time of the read. Used for optional optimistic + * concurrency during update. + */ + VersionNumber: number; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.EntityProfileFileMetadata */ + export interface EntityProfileFileMetadata { + /** Checksum value for the file */ + Checksum?: string; + /** Name of the file */ + FileName?: string; + /** Last UTC time the file was modified */ + LastModified: string; + /** Storage service's reported byte count */ + Size: number; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetEntityProfileRequest */ + export interface GetEntityProfileRequest extends PlayFabModule.IPlayFabRequestCommon { + /** + * Determines whether the objects will be returned as an escaped JSON string or as a un-escaped JSON object. Default is + * JSON string. + */ + DataAsObject?: boolean; + /** The entity to perform this action on. */ + Entity: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetEntityProfileResponse */ + export interface GetEntityProfileResponse extends PlayFabModule.IPlayFabResultCommon { + /** Entity profile */ + Profile?: EntityProfileBody; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetEntityProfilesRequest */ + export interface GetEntityProfilesRequest extends PlayFabModule.IPlayFabRequestCommon { + /** + * Determines whether the objects will be returned as an escaped JSON string or as a un-escaped JSON object. Default is + * JSON string. + */ + DataAsObject?: boolean; + /** Entity keys of the profiles to load. Must be between 1 and 25 */ + Entities: EntityKey[]; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetEntityProfilesResponse */ + export interface GetEntityProfilesResponse extends PlayFabModule.IPlayFabResultCommon { + /** Entity profiles */ + Profiles?: EntityProfileBody[]; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetGlobalPolicyRequest */ + export interface GetGlobalPolicyRequest extends PlayFabModule.IPlayFabRequestCommon { + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetGlobalPolicyResponse */ + export interface GetGlobalPolicyResponse extends PlayFabModule.IPlayFabResultCommon { + /** The permissions that govern access to all entities under this title or namespace. */ + Permissions?: EntityPermissionStatement[]; + + } + + type OperationTypes = "Created" + | "Updated" + | "Deleted" + | "None"; + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetEntityProfilePolicyRequest */ + export interface SetEntityProfilePolicyRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The statements to include in the access policy. */ + Statements?: EntityPermissionStatement[]; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetEntityProfilePolicyResponse */ + export interface SetEntityProfilePolicyResponse extends PlayFabModule.IPlayFabResultCommon { + /** + * The permissions that govern access to this entity profile and its properties. Only includes permissions set on this + * profile, not global statements from titles and namespaces. + */ + Permissions?: EntityPermissionStatement[]; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetGlobalPolicyRequest */ + export interface SetGlobalPolicyRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The permissions that govern access to all entities under this title or namespace. */ + Permissions?: EntityPermissionStatement[]; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetGlobalPolicyResponse */ + export interface SetGlobalPolicyResponse extends PlayFabModule.IPlayFabResultCommon { + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetProfileLanguageRequest */ + export interface SetProfileLanguageRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + /** The expected version of a profile to perform this update on */ + ExpectedVersion: number; + /** The language to set on the given entity. Deletes the profile's language if passed in a null string. */ + Language?: string; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetProfileLanguageResponse */ + export interface SetProfileLanguageResponse extends PlayFabModule.IPlayFabResultCommon { + /** The type of operation that occured on the profile's language */ + OperationResult?: string; + /** The updated version of the profile after the language update */ + VersionNumber?: number; + + } + + +} diff --git a/PlayFabSdk/src/Typings/PlayFab/PlayFabServerApi.d.ts b/PlayFabSdk/src/Typings/PlayFab/PlayFabServerApi.d.ts index 24ae8dcf..d6db425e 100644 --- a/PlayFabSdk/src/Typings/PlayFab/PlayFabServerApi.d.ts +++ b/PlayFabSdk/src/Typings/PlayFab/PlayFabServerApi.d.ts @@ -183,8 +183,8 @@ declare module PlayFabServerModule { */ GetLeaderboardForUserCharacters(request: PlayFabServerModels.GetLeaderboardForUsersCharactersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** - * Returns whatever info is requested in the response for the user. Note that PII (like email address, facebook id) - * may be returned. All parameters default to false. + * Returns whatever info is requested in the response for the user. Note that PII (like email address, facebook id) may be + * returned. All parameters default to false. * https://api.playfab.com/Documentation/Server/method/GetPlayerCombinedInfo */ GetPlayerCombinedInfo(request: PlayFabServerModels.GetPlayerCombinedInfoRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; @@ -226,6 +226,16 @@ declare module PlayFabServerModule { * https://api.playfab.com/Documentation/Server/method/GetPlayFabIDsFromFacebookIDs */ GetPlayFabIDsFromFacebookIDs(request: PlayFabServerModels.GetPlayFabIDsFromFacebookIDsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the unique PlayFab identifiers for the given set of Facebook Instant Games identifiers. + * https://api.playfab.com/Documentation/Server/method/GetPlayFabIDsFromFacebookInstantGamesIds + */ + GetPlayFabIDsFromFacebookInstantGamesIds(request: PlayFabServerModels.GetPlayFabIDsFromFacebookInstantGamesIdsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the unique PlayFab identifiers for the given set of Nintendo Switch Device identifiers. + * https://api.playfab.com/Documentation/Server/method/GetPlayFabIDsFromNintendoSwitchDeviceIds + */ + GetPlayFabIDsFromNintendoSwitchDeviceIds(request: PlayFabServerModels.GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Retrieves the unique PlayFab identifiers for the given set of Steam identifiers. The Steam identifiers are the profile * IDs for the user accounts, available as SteamId in the Steamworks Community API calls. @@ -1599,6 +1609,15 @@ declare module PlayFabServerModels { } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.FacebookInstantGamesPlayFabIdPair */ + export interface FacebookInstantGamesPlayFabIdPair { + /** Unique Facebook Instant Games identifier for a user. */ + FacebookInstantGamesId?: string; + /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Facebook Instant Games identifier. */ + PlayFabId?: string; + + } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.FacebookPlayFabIdPair */ export interface FacebookPlayFabIdPair { /** Unique Facebook identifier for a user. */ @@ -2020,6 +2039,12 @@ declare module PlayFabServerModels { | "ExplicitContentDetected" | "PIIContentDetected" | "InvalidScheduledTaskParameter" + | "PerEntityEventRateLimitExceeded" + | "TitleDefaultLanguageNotSet" + | "EmailTemplateMissingDefaultVersion" + | "FacebookInstantGamesIdNotLinked" + | "InvalidFacebookInstantGamesSignature" + | "FacebookInstantGamesAuthNotConfiguredForTitle" | "MatchmakingEntityInvalid" | "MatchmakingPlayerAttributesInvalid" | "MatchmakingCreateRequestMissing" @@ -2030,12 +2055,12 @@ declare module PlayFabServerModels { | "MatchmakingTicketIdMissing" | "MatchmakingMatchIdMissing" | "MatchmakingMatchIdIdMissing" - | "MatchmakingHopperIdMissing" + | "MatchmakingQueueNameMissing" | "MatchmakingTitleIdMissing" | "MatchmakingTicketIdIdMissing" | "MatchmakingPlayerIdMissing" | "MatchmakingJoinRequestUserMissing" - | "MatchmakingHopperConfigNotFound" + | "MatchmakingQueueConfigNotFound" | "MatchmakingMatchNotFound" | "MatchmakingTicketNotFound" | "MatchmakingCreateTicketServerIdentityInvalid" @@ -2049,9 +2074,12 @@ declare module PlayFabServerModels { | "MatchmakingPlayerIdentityMismatch" | "MatchmakingAlreadyJoinedTicket" | "MatchmakingTicketAlreadyCompleted" - | "MatchmakingHopperIdInvalid" - | "MatchmakingHopperConfigInvalid" - | "MatchmakingMemberProfileInvalid"; + | "MatchmakingQueueNameInvalid" + | "MatchmakingQueueConfigInvalid" + | "MatchmakingMemberProfileInvalid" + | "WriteAttemptedDuringExport" + | "NintendoSwitchDeviceIdNotLinked" + | "MatchmakingNotEnabled"; /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetAllSegmentsRequest */ export interface GetAllSegmentsRequest extends PlayFabModule.IPlayFabRequestCommon { @@ -2576,6 +2604,34 @@ declare module PlayFabServerModels { } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetPlayFabIDsFromFacebookInstantGamesIdsRequest */ + export interface GetPlayFabIDsFromFacebookInstantGamesIdsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Array of unique Facebook Instant Games identifiers for which the title needs to get PlayFab identifiers. */ + FacebookInstantGamesIds: string[]; + + } + + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetPlayFabIDsFromFacebookInstantGamesIdsResult */ + export interface GetPlayFabIDsFromFacebookInstantGamesIdsResult extends PlayFabModule.IPlayFabResultCommon { + /** Mapping of Facebook Instant Games identifiers to PlayFab identifiers. */ + Data?: FacebookInstantGamesPlayFabIdPair[]; + + } + + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest */ + export interface GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Array of unique Nintendo Switch Device identifiers for which the title needs to get PlayFab identifiers. */ + NintendoSwitchDeviceIds: string[]; + + } + + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetPlayFabIDsFromNintendoSwitchDeviceIdsResult */ + export interface GetPlayFabIDsFromNintendoSwitchDeviceIdsResult extends PlayFabModule.IPlayFabResultCommon { + /** Mapping of Nintendo Switch Device identifiers to PlayFab identifiers. */ + Data?: number[]; + + } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetPlayFabIDsFromSteamIDsRequest */ export interface GetPlayFabIDsFromSteamIDsRequest extends PlayFabModule.IPlayFabRequestCommon { /** Array of unique Steam identifiers (Steam profile IDs) for which the title needs to get PlayFab identifiers. */ @@ -3009,7 +3065,11 @@ declare module PlayFabServerModels { | "IOSDevice" | "AndroidDevice" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "GameServer" + | "CustomServer" + | "NintendoSwitch" + | "FacebookInstantGames"; /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.LogStatement */ export interface LogStatement { @@ -3134,6 +3194,15 @@ declare module PlayFabServerModels { } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.NintendoSwitchPlayFabIdPair */ + export interface NintendoSwitchPlayFabIdPair { + /** Unique Nintendo Switch Device identifier for a user. */ + NintendoSwitchDeviceId?: string; + /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Nintendo Switch Device identifier. */ + PlayFabId?: string; + + } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.NotifyMatchmakerPlayerLeftRequest */ export interface NotifyMatchmakerPlayerLeftRequest extends PlayFabModule.IPlayFabRequestCommon { /** Unique identifier of the Game Instance the user is leaving. */ @@ -3281,7 +3350,7 @@ declare module PlayFabServerModels { TitleId?: string; /** * Sum of the player's purchases made with real-money currencies, converted to US dollars equivalent and represented as a - * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. + * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. */ TotalValueToDateInUSD?: number; /** List of the player's lifetime purchase totals, summed by real-money currency */ @@ -3482,11 +3551,15 @@ declare module PlayFabServerModels { */ Region: string; /** IPV4 address of the Game Server Instance. */ - ServerHost: string; - /** IPV6 address of the Game Server Instance. */ + ServerHost?: string; + /** IPV4 address of the game server instance. */ + ServerIPV4Address?: string; + /** IPV6 address (if any) of the game server instance. */ ServerIPV6Address?: string; /** Port number for communication with the Game Server Instance. */ ServerPort: string; + /** Public DNS name (if any) of the server */ + ServerPublicDNSName?: string; /** Tags for the Game Server Instance */ Tags?: { [key: string]: string | null }; @@ -4349,7 +4422,10 @@ declare module PlayFabServerModels { | "XboxLive" | "Parse" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "ServerCustomId" + | "NintendoSwitchDeviceId" + | "FacebookInstantGamesId"; /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.UserPrivateAccountInfo */ export interface UserPrivateAccountInfo { diff --git a/PlayFabSdk/src/Typings/PlayFab/Playfab.d.ts b/PlayFabSdk/src/Typings/PlayFab/Playfab.d.ts index 87c8ba94..859e8aa3 100644 --- a/PlayFabSdk/src/Typings/PlayFab/Playfab.d.ts +++ b/PlayFabSdk/src/Typings/PlayFab/Playfab.d.ts @@ -1,8 +1,13 @@ /// /// -/// /// /// +/// +/// +/// +/// +/// +/// declare module PlayFabModule { export interface ISettings { @@ -41,15 +46,25 @@ declare var PlayFab: { settings: PlayFabModule.ISettings; AdminApi: PlayFabAdminModule.IPlayFabAdmin; ClientApi: PlayFabClientModule.IPlayFabClient; - EntityApi: PlayFabEntityModule.IPlayFabEntity; MatchmakerApi: PlayFabMatchmakerModule.IPlayFabMatchmaker; ServerApi: PlayFabServerModule.IPlayFabServer; + AuthenticationApi: PlayFabAuthenticationModule.IPlayFabAuthentication; + CloudScriptApi: PlayFabCloudScriptModule.IPlayFabCloudScript; + DataApi: PlayFabDataModule.IPlayFabData; + EventsApi: PlayFabEventsModule.IPlayFabEvents; + GroupsApi: PlayFabGroupsModule.IPlayFabGroups; + ProfilesApi: PlayFabProfilesModule.IPlayFabProfiles; }; // Continue to support older usage declare var PlayFabAdminSDK: PlayFabAdminModule.IPlayFabAdmin; declare var PlayFabClientSDK: PlayFabClientModule.IPlayFabClient; -declare var PlayFabEntitySDK: PlayFabEntityModule.IPlayFabEntity; declare var PlayFabMatchmakerSDK: PlayFabMatchmakerModule.IPlayFabMatchmaker; declare var PlayFabServerSDK: PlayFabServerModule.IPlayFabServer; +declare var PlayFabAuthenticationSDK: PlayFabAuthenticationModule.IPlayFabAuthentication; +declare var PlayFabCloudScriptSDK: PlayFabCloudScriptModule.IPlayFabCloudScript; +declare var PlayFabDataSDK: PlayFabDataModule.IPlayFabData; +declare var PlayFabEventsSDK: PlayFabEventsModule.IPlayFabEvents; +declare var PlayFabGroupsSDK: PlayFabGroupsModule.IPlayFabGroups; +declare var PlayFabProfilesSDK: PlayFabProfilesModule.IPlayFabProfiles; diff --git a/PlayFabTestingExample/PlayFabApiTest.csproj b/PlayFabTestingExample/PlayFabApiTest.csproj index 77f79ebc..5e73a05e 100644 --- a/PlayFabTestingExample/PlayFabApiTest.csproj +++ b/PlayFabTestingExample/PlayFabApiTest.csproj @@ -26,9 +26,14 @@ - + + + + + + @@ -36,9 +41,14 @@ - + + + + + + diff --git a/PlayFabTestingExample/PlayFabApiTest.js b/PlayFabTestingExample/PlayFabApiTest.js index 42a3a73f..725f058e 100644 --- a/PlayFabTestingExample/PlayFabApiTest.js +++ b/PlayFabTestingExample/PlayFabApiTest.js @@ -10,7 +10,8 @@ var PlayFabApiTests = { }, testData: { entityToken: null, - entityKey: null, + entityId: null, + entityTypeString: null, playFabId: null, testNumber: null, }, @@ -423,11 +424,12 @@ var PlayFabApiTests = { var getTokenDone = assert.async(); var getTokenCallback = function (result, error) { PlayFabApiTests.VerifyNullError(result, error, assert, "Testing GetToken result"); - PlayFabApiTests.testData.entityKey = result.data.Entity; + PlayFabApiTests.testData.entityId = result.data.Entity.Id; + PlayFabApiTests.testData.entityTypeString = result.data.Entity.TypeString; getTokenDone(); }; var getTokenRequest = {}; - PlayFabEntitySDK.GetEntityToken(getTokenRequest, PlayFabApiTests.CallbackWrapper("getTokenCallback", getTokenCallback, assert)); + PlayFabAuthenticationSDK.GetEntityToken(getTokenRequest, PlayFabApiTests.CallbackWrapper("getTokenCallback", getTokenCallback, assert)); }, ///* ENTITY API // * Test a sequence of calls that modifies saved data, @@ -437,7 +439,10 @@ var PlayFabApiTests = { // */ EntityObjects: function (assert) { var getObjectRequest = { - Entity: PlayFabApiTests.testData.entityKey, + Entity: { + Id: PlayFabApiTests.testData.entityId, + TypeString: PlayFabApiTests.testData.entityTypeString, + }, EscapeObject: true, }; // This test is always exactly 3 async calls @@ -454,7 +459,7 @@ var PlayFabApiTests = { }; var setObjectCallback = function (result, error) { PlayFabApiTests.VerifyNullError(result, error, assert, "Testing SetObjects result"); - PlayFabEntitySDK.GetObjects(getObjectRequest, PlayFabApiTests.CallbackWrapper("getObjectCallback2", getObjectCallback2, assert)); + PlayFabDataSDK.GetObjects(getObjectRequest, PlayFabApiTests.CallbackWrapper("getObjectCallback2", getObjectCallback2, assert)); updateDone(); }; var getObjectCallback1 = function (result, error) { @@ -465,14 +470,17 @@ var PlayFabApiTests = { PlayFabApiTests.testData.testNumber = JSON.parse(result.data.Objects[PlayFabApiTests.testConstants.TEST_DATA_KEY].EscapedDataObject); PlayFabApiTests.testData.testNumber = (PlayFabApiTests.testData.testNumber + 1) % 100; // This test is about the expected value changing - but not testing more complicated issues like bounds var updateDataRequest = { - Entity: PlayFabApiTests.testData.entityKey, + Entity: { + Id: PlayFabApiTests.testData.entityId, + TypeString: PlayFabApiTests.testData.entityTypeString, + }, Objects: [{ ObjectName: PlayFabApiTests.testConstants.TEST_DATA_KEY, DataObject: PlayFabApiTests.testData.testNumber }] }; - PlayFabEntitySDK.SetObjects(updateDataRequest, PlayFabApiTests.CallbackWrapper("setObjectCallback", setObjectCallback, assert)); + PlayFabDataSDK.SetObjects(updateDataRequest, PlayFabApiTests.CallbackWrapper("setObjectCallback", setObjectCallback, assert)); get1Done(); }; // Kick off this test process - PlayFabEntitySDK.GetObjects(getObjectRequest, PlayFabApiTests.CallbackWrapper("getObjectCallback1", getObjectCallback1, assert)); + PlayFabDataSDK.GetObjects(getObjectRequest, PlayFabApiTests.CallbackWrapper("getObjectCallback1", getObjectCallback1, assert)); }, /* CLIENT API * Test that the client can log out diff --git a/PlayFabTestingExample/PlayFabApiTest.ts b/PlayFabTestingExample/PlayFabApiTest.ts index ce1ffa19..a31660d2 100644 --- a/PlayFabTestingExample/PlayFabApiTest.ts +++ b/PlayFabTestingExample/PlayFabApiTest.ts @@ -14,7 +14,8 @@ var PlayFabApiTests = { }, testData: { entityToken: null, // Entity-Login: filled after login - entityKey: null, // Entity-Login: filled after login + entityId: null, // Entity-Login: filled after login + entityTypeString: null, // Entity-Login: filled after login playFabId: null, // Client-Login: filled during login testNumber: null, // Arbitrary counter, used by several tests }, @@ -489,14 +490,15 @@ var PlayFabApiTests = { // */ GetEntityToken: function (assert): void { var getTokenDone = assert.async(); - var getTokenCallback = function (result: PlayFabModule.SuccessContainer, error: PlayFabModule.IPlayFabError): void { + var getTokenCallback = function (result: PlayFabModule.SuccessContainer, error: PlayFabModule.IPlayFabError): void { PlayFabApiTests.VerifyNullError(result, error, assert, "Testing GetToken result"); - PlayFabApiTests.testData.entityKey = result.data.Entity; + PlayFabApiTests.testData.entityId = result.data.Entity.Id; + PlayFabApiTests.testData.entityTypeString = result.data.Entity.TypeString; getTokenDone(); }; - var getTokenRequest = {}; - PlayFabEntitySDK.GetEntityToken(getTokenRequest, PlayFabApiTests.CallbackWrapper("getTokenCallback", getTokenCallback, assert)); + var getTokenRequest = {}; + PlayFabAuthenticationSDK.GetEntityToken(getTokenRequest, PlayFabApiTests.CallbackWrapper("getTokenCallback", getTokenCallback, assert)); }, ///* ENTITY API @@ -506,8 +508,11 @@ var PlayFabApiTests = { // * Parameter types tested: string, Dictionary, DateTime // */ EntityObjects: function (assert): void { - var getObjectRequest = { - Entity: PlayFabApiTests.testData.entityKey, + var getObjectRequest = { + Entity: { + Id: PlayFabApiTests.testData.entityId, + TypeString: PlayFabApiTests.testData.entityTypeString, + }, EscapeObject: true, }; @@ -516,7 +521,7 @@ var PlayFabApiTests = { var updateDone = assert.async(); var get2Done = assert.async(); - var getObjectCallback2 = function (result: PlayFabModule.SuccessContainer, error: PlayFabModule.IPlayFabError): void { + var getObjectCallback2 = function (result: PlayFabModule.SuccessContainer, error: PlayFabModule.IPlayFabError): void { PlayFabApiTests.VerifyNullError(result, error, assert, "Testing GetObjects result"); assert.ok(result.data.Objects != null, "Testing GetObjects Objects"); var actualtestNumber = JSON.parse(result.data.Objects[PlayFabApiTests.testConstants.TEST_DATA_KEY].EscapedDataObject); @@ -525,13 +530,13 @@ var PlayFabApiTests = { assert.equal(PlayFabApiTests.testData.testNumber, actualtestNumber, "Testing incrementing counter: " + PlayFabApiTests.testData.testNumber + "==" + actualtestNumber); get2Done(); }; - var setObjectCallback = function (result: PlayFabModule.SuccessContainer, error: PlayFabModule.IPlayFabError): void { + var setObjectCallback = function (result: PlayFabModule.SuccessContainer, error: PlayFabModule.IPlayFabError): void { PlayFabApiTests.VerifyNullError(result, error, assert, "Testing SetObjects result"); - PlayFabEntitySDK.GetObjects(getObjectRequest, PlayFabApiTests.CallbackWrapper("getObjectCallback2", getObjectCallback2, assert)); + PlayFabDataSDK.GetObjects(getObjectRequest, PlayFabApiTests.CallbackWrapper("getObjectCallback2", getObjectCallback2, assert)); updateDone(); }; - var getObjectCallback1 = function (result: PlayFabModule.SuccessContainer, error: PlayFabModule.IPlayFabError): void { + var getObjectCallback1 = function (result: PlayFabModule.SuccessContainer, error: PlayFabModule.IPlayFabError): void { PlayFabApiTests.VerifyNullError(result, error, assert, "Testing GetObjects result"); assert.ok(result.data.Objects != null, "Testing GetObjects Objects"); PlayFabApiTests.testData.testNumber = 0; @@ -539,16 +544,19 @@ var PlayFabApiTests = { PlayFabApiTests.testData.testNumber = JSON.parse(result.data.Objects[PlayFabApiTests.testConstants.TEST_DATA_KEY].EscapedDataObject); PlayFabApiTests.testData.testNumber = (PlayFabApiTests.testData.testNumber + 1) % 100; // This test is about the expected value changing - but not testing more complicated issues like bounds - var updateDataRequest = { - Entity: PlayFabApiTests.testData.entityKey, + var updateDataRequest = { + Entity: { + Id: PlayFabApiTests.testData.entityId, + TypeString: PlayFabApiTests.testData.entityTypeString, + }, Objects: [{ ObjectName: PlayFabApiTests.testConstants.TEST_DATA_KEY, DataObject: PlayFabApiTests.testData.testNumber }] }; - PlayFabEntitySDK.SetObjects(updateDataRequest, PlayFabApiTests.CallbackWrapper("setObjectCallback", setObjectCallback, assert)); + PlayFabDataSDK.SetObjects(updateDataRequest, PlayFabApiTests.CallbackWrapper("setObjectCallback", setObjectCallback, assert)); get1Done(); }; // Kick off this test process - PlayFabEntitySDK.GetObjects(getObjectRequest, PlayFabApiTests.CallbackWrapper("getObjectCallback1", getObjectCallback1, assert)); + PlayFabDataSDK.GetObjects(getObjectRequest, PlayFabApiTests.CallbackWrapper("getObjectCallback1", getObjectCallback1, assert)); }, /* CLIENT API diff --git a/PlayFabTestingExample/code.jquery.com/qunit/qunit-1.19.0.js b/PlayFabTestingExample/code.jquery.com/qunit/qunit-1.19.0.js deleted file mode 100644 index 2fbd37d7..00000000 --- a/PlayFabTestingExample/code.jquery.com/qunit/qunit-1.19.0.js +++ /dev/null @@ -1,3963 +0,0 @@ -/*! - * QUnit 1.19.0 - * http://qunitjs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2015-09-01T15:00Z - */ - -(function( global ) { - -var QUnit = {}; - -var Date = global.Date; -var now = Date.now || function() { - return new Date().getTime(); -}; - -var setTimeout = global.setTimeout; -var clearTimeout = global.clearTimeout; - -// Store a local window from the global to allow direct references. -var window = global.window; - -var defined = { - document: window && window.document !== undefined, - setTimeout: setTimeout !== undefined, - sessionStorage: (function() { - var x = "qunit-test-string"; - try { - sessionStorage.setItem( x, x ); - sessionStorage.removeItem( x ); - return true; - } catch ( e ) { - return false; - } - }() ) -}; - -var fileName = ( sourceFromStacktrace( 0 ) || "" ).replace( /(:\d+)+\)?/, "" ).replace( /.+\//, "" ); -var globalStartCalled = false; -var runStarted = false; - -var toString = Object.prototype.toString, - hasOwn = Object.prototype.hasOwnProperty; - -// returns a new Array with the elements that are in a but not in b -function diff( a, b ) { - var i, j, - result = a.slice(); - - for ( i = 0; i < result.length; i++ ) { - for ( j = 0; j < b.length; j++ ) { - if ( result[ i ] === b[ j ] ) { - result.splice( i, 1 ); - i--; - break; - } - } - } - return result; -} - -// from jquery.js -function inArray( elem, array ) { - if ( array.indexOf ) { - return array.indexOf( elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; -} - -/** - * Makes a clone of an object using only Array or Object as base, - * and copies over the own enumerable properties. - * - * @param {Object} obj - * @return {Object} New object with only the own properties (recursively). - */ -function objectValues ( obj ) { - var key, val, - vals = QUnit.is( "array", obj ) ? [] : {}; - for ( key in obj ) { - if ( hasOwn.call( obj, key ) ) { - val = obj[ key ]; - vals[ key ] = val === Object( val ) ? objectValues( val ) : val; - } - } - return vals; -} - -function extend( a, b, undefOnly ) { - for ( var prop in b ) { - if ( hasOwn.call( b, prop ) ) { - - // Avoid "Member not found" error in IE8 caused by messing with window.constructor - // This block runs on every environment, so `global` is being used instead of `window` - // to avoid errors on node. - if ( prop !== "constructor" || a !== global ) { - if ( b[ prop ] === undefined ) { - delete a[ prop ]; - } else if ( !( undefOnly && typeof a[ prop ] !== "undefined" ) ) { - a[ prop ] = b[ prop ]; - } - } - } - } - - return a; -} - -function objectType( obj ) { - if ( typeof obj === "undefined" ) { - return "undefined"; - } - - // Consider: typeof null === object - if ( obj === null ) { - return "null"; - } - - var match = toString.call( obj ).match( /^\[object\s(.*)\]$/ ), - type = match && match[ 1 ] || ""; - - switch ( type ) { - case "Number": - if ( isNaN( obj ) ) { - return "nan"; - } - return "number"; - case "String": - case "Boolean": - case "Array": - case "Set": - case "Map": - case "Date": - case "RegExp": - case "Function": - return type.toLowerCase(); - } - if ( typeof obj === "object" ) { - return "object"; - } - return undefined; -} - -// Safe object type checking -function is( type, obj ) { - return QUnit.objectType( obj ) === type; -} - -var getUrlParams = function() { - var i, current; - var urlParams = {}; - var location = window.location; - var params = location.search.slice( 1 ).split( "&" ); - var length = params.length; - - if ( params[ 0 ] ) { - for ( i = 0; i < length; i++ ) { - current = params[ i ].split( "=" ); - current[ 0 ] = decodeURIComponent( current[ 0 ] ); - - // allow just a key to turn on a flag, e.g., test.html?noglobals - current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true; - if ( urlParams[ current[ 0 ] ] ) { - urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] ); - } else { - urlParams[ current[ 0 ] ] = current[ 1 ]; - } - } - } - - return urlParams; -}; - -// Doesn't support IE6 to IE9, it will return undefined on these browsers -// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack -function extractStacktrace( e, offset ) { - offset = offset === undefined ? 4 : offset; - - var stack, include, i; - - if ( e.stack ) { - stack = e.stack.split( "\n" ); - if ( /^error$/i.test( stack[ 0 ] ) ) { - stack.shift(); - } - if ( fileName ) { - include = []; - for ( i = offset; i < stack.length; i++ ) { - if ( stack[ i ].indexOf( fileName ) !== -1 ) { - break; - } - include.push( stack[ i ] ); - } - if ( include.length ) { - return include.join( "\n" ); - } - } - return stack[ offset ]; - - // Support: Safari <=6 only - } else if ( e.sourceURL ) { - - // exclude useless self-reference for generated Error objects - if ( /qunit.js$/.test( e.sourceURL ) ) { - return; - } - - // for actual exceptions, this is useful - return e.sourceURL + ":" + e.line; - } -} - -function sourceFromStacktrace( offset ) { - var error = new Error(); - - // Support: Safari <=7 only, IE <=10 - 11 only - // Not all browsers generate the `stack` property for `new Error()`, see also #636 - if ( !error.stack ) { - try { - throw error; - } catch ( err ) { - error = err; - } - } - - return extractStacktrace( error, offset ); -} - -/** - * Config object: Maintain internal state - * Later exposed as QUnit.config - * `config` initialized at top of scope - */ -var config = { - // The queue of tests to run - queue: [], - - // block until document ready - blocking: true, - - // by default, run previously failed tests first - // very useful in combination with "Hide passed tests" checked - reorder: true, - - // by default, modify document.title when suite is done - altertitle: true, - - // by default, scroll to top of the page when suite is done - scrolltop: true, - - // depth up-to which object will be dumped - maxDepth: 5, - - // when enabled, all tests must call expect() - requireExpects: false, - - // add checkboxes that are persisted in the query-string - // when enabled, the id is set to `true` as a `QUnit.config` property - urlConfig: [ - { - id: "hidepassed", - label: "Hide passed tests", - tooltip: "Only show tests and assertions that fail. Stored as query-strings." - }, - { - id: "noglobals", - label: "Check for Globals", - tooltip: "Enabling this will test if any test introduces new properties on the " + - "global object (`window` in Browsers). Stored as query-strings." - }, - { - id: "notrycatch", - label: "No try-catch", - tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging " + - "exceptions in IE reasonable. Stored as query-strings." - } - ], - - // Set of all modules. - modules: [], - - // The first unnamed module - currentModule: { - name: "", - tests: [] - }, - - callbacks: {} -}; - -var urlParams = defined.document ? getUrlParams() : {}; - -// Push a loose unnamed module to the modules collection -config.modules.push( config.currentModule ); - -if ( urlParams.filter === true ) { - delete urlParams.filter; -} - -// String search anywhere in moduleName+testName -config.filter = urlParams.filter; - -config.testId = []; -if ( urlParams.testId ) { - // Ensure that urlParams.testId is an array - urlParams.testId = decodeURIComponent( urlParams.testId ).split( "," ); - for (var i = 0; i < urlParams.testId.length; i++ ) { - config.testId.push( urlParams.testId[ i ] ); - } -} - -var loggingCallbacks = {}; - -// Register logging callbacks -function registerLoggingCallbacks( obj ) { - var i, l, key, - callbackNames = [ "begin", "done", "log", "testStart", "testDone", - "moduleStart", "moduleDone" ]; - - function registerLoggingCallback( key ) { - var loggingCallback = function( callback ) { - if ( objectType( callback ) !== "function" ) { - throw new Error( - "QUnit logging methods require a callback function as their first parameters." - ); - } - - config.callbacks[ key ].push( callback ); - }; - - // DEPRECATED: This will be removed on QUnit 2.0.0+ - // Stores the registered functions allowing restoring - // at verifyLoggingCallbacks() if modified - loggingCallbacks[ key ] = loggingCallback; - - return loggingCallback; - } - - for ( i = 0, l = callbackNames.length; i < l; i++ ) { - key = callbackNames[ i ]; - - // Initialize key collection of logging callback - if ( objectType( config.callbacks[ key ] ) === "undefined" ) { - config.callbacks[ key ] = []; - } - - obj[ key ] = registerLoggingCallback( key ); - } -} - -function runLoggingCallbacks( key, args ) { - var i, l, callbacks; - - callbacks = config.callbacks[ key ]; - for ( i = 0, l = callbacks.length; i < l; i++ ) { - callbacks[ i ]( args ); - } -} - -// DEPRECATED: This will be removed on 2.0.0+ -// This function verifies if the loggingCallbacks were modified by the user -// If so, it will restore it, assign the given callback and print a console warning -function verifyLoggingCallbacks() { - var loggingCallback, userCallback; - - for ( loggingCallback in loggingCallbacks ) { - if ( QUnit[ loggingCallback ] !== loggingCallbacks[ loggingCallback ] ) { - - userCallback = QUnit[ loggingCallback ]; - - // Restore the callback function - QUnit[ loggingCallback ] = loggingCallbacks[ loggingCallback ]; - - // Assign the deprecated given callback - QUnit[ loggingCallback ]( userCallback ); - - if ( global.console && global.console.warn ) { - global.console.warn( - "QUnit." + loggingCallback + " was replaced with a new value.\n" + - "Please, check out the documentation on how to apply logging callbacks.\n" + - "Reference: http://api.qunitjs.com/category/callbacks/" - ); - } - } - } -} - -( function() { - if ( !defined.document ) { - return; - } - - // `onErrorFnPrev` initialized at top of scope - // Preserve other handlers - var onErrorFnPrev = window.onerror; - - // Cover uncaught exceptions - // Returning true will suppress the default browser handler, - // returning false will let it run. - window.onerror = function( error, filePath, linerNr ) { - var ret = false; - if ( onErrorFnPrev ) { - ret = onErrorFnPrev( error, filePath, linerNr ); - } - - // Treat return value as window.onerror itself does, - // Only do our handling if not suppressed. - if ( ret !== true ) { - if ( QUnit.config.current ) { - if ( QUnit.config.current.ignoreGlobalErrors ) { - return true; - } - QUnit.pushFailure( error, filePath + ":" + linerNr ); - } else { - QUnit.test( "global failure", extend(function() { - QUnit.pushFailure( error, filePath + ":" + linerNr ); - }, { validTest: true } ) ); - } - return false; - } - - return ret; - }; -} )(); - -QUnit.urlParams = urlParams; - -// Figure out if we're running the tests from a server or not -QUnit.isLocal = !( defined.document && window.location.protocol !== "file:" ); - -// Expose the current QUnit version -QUnit.version = "1.19.0"; - -extend( QUnit, { - - // call on start of module test to prepend name to all tests - module: function( name, testEnvironment ) { - var currentModule = { - name: name, - testEnvironment: testEnvironment, - tests: [] - }; - - // DEPRECATED: handles setup/teardown functions, - // beforeEach and afterEach should be used instead - if ( testEnvironment && testEnvironment.setup ) { - testEnvironment.beforeEach = testEnvironment.setup; - delete testEnvironment.setup; - } - if ( testEnvironment && testEnvironment.teardown ) { - testEnvironment.afterEach = testEnvironment.teardown; - delete testEnvironment.teardown; - } - - config.modules.push( currentModule ); - config.currentModule = currentModule; - }, - - // DEPRECATED: QUnit.asyncTest() will be removed in QUnit 2.0. - asyncTest: asyncTest, - - test: test, - - skip: skip, - - // DEPRECATED: The functionality of QUnit.start() will be altered in QUnit 2.0. - // In QUnit 2.0, invoking it will ONLY affect the `QUnit.config.autostart` blocking behavior. - start: function( count ) { - var globalStartAlreadyCalled = globalStartCalled; - - if ( !config.current ) { - globalStartCalled = true; - - if ( runStarted ) { - throw new Error( "Called start() outside of a test context while already started" ); - } else if ( globalStartAlreadyCalled || count > 1 ) { - throw new Error( "Called start() outside of a test context too many times" ); - } else if ( config.autostart ) { - throw new Error( "Called start() outside of a test context when " + - "QUnit.config.autostart was true" ); - } else if ( !config.pageLoaded ) { - - // The page isn't completely loaded yet, so bail out and let `QUnit.load` handle it - config.autostart = true; - return; - } - } else { - - // If a test is running, adjust its semaphore - config.current.semaphore -= count || 1; - - // Don't start until equal number of stop-calls - if ( config.current.semaphore > 0 ) { - return; - } - - // throw an Error if start is called more often than stop - if ( config.current.semaphore < 0 ) { - config.current.semaphore = 0; - - QUnit.pushFailure( - "Called start() while already started (test's semaphore was 0 already)", - sourceFromStacktrace( 2 ) - ); - return; - } - } - - resumeProcessing(); - }, - - // DEPRECATED: QUnit.stop() will be removed in QUnit 2.0. - stop: function( count ) { - - // If there isn't a test running, don't allow QUnit.stop() to be called - if ( !config.current ) { - throw new Error( "Called stop() outside of a test context" ); - } - - // If a test is running, adjust its semaphore - config.current.semaphore += count || 1; - - pauseProcessing(); - }, - - config: config, - - is: is, - - objectType: objectType, - - extend: extend, - - load: function() { - config.pageLoaded = true; - - // Initialize the configuration options - extend( config, { - stats: { all: 0, bad: 0 }, - moduleStats: { all: 0, bad: 0 }, - started: 0, - updateRate: 1000, - autostart: true, - filter: "" - }, true ); - - config.blocking = false; - - if ( config.autostart ) { - resumeProcessing(); - } - }, - - stack: function( offset ) { - offset = ( offset || 0 ) + 2; - return sourceFromStacktrace( offset ); - } -}); - -registerLoggingCallbacks( QUnit ); - -function begin() { - var i, l, - modulesLog = []; - - // If the test run hasn't officially begun yet - if ( !config.started ) { - - // Record the time of the test run's beginning - config.started = now(); - - verifyLoggingCallbacks(); - - // Delete the loose unnamed module if unused. - if ( config.modules[ 0 ].name === "" && config.modules[ 0 ].tests.length === 0 ) { - config.modules.shift(); - } - - // Avoid unnecessary information by not logging modules' test environments - for ( i = 0, l = config.modules.length; i < l; i++ ) { - modulesLog.push({ - name: config.modules[ i ].name, - tests: config.modules[ i ].tests - }); - } - - // The test run is officially beginning now - runLoggingCallbacks( "begin", { - totalTests: Test.count, - modules: modulesLog - }); - } - - config.blocking = false; - process( true ); -} - -function process( last ) { - function next() { - process( last ); - } - var start = now(); - config.depth = ( config.depth || 0 ) + 1; - - while ( config.queue.length && !config.blocking ) { - if ( !defined.setTimeout || config.updateRate <= 0 || - ( ( now() - start ) < config.updateRate ) ) { - if ( config.current ) { - - // Reset async tracking for each phase of the Test lifecycle - config.current.usedAsync = false; - } - config.queue.shift()(); - } else { - setTimeout( next, 13 ); - break; - } - } - config.depth--; - if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) { - done(); - } -} - -function pauseProcessing() { - config.blocking = true; - - if ( config.testTimeout && defined.setTimeout ) { - clearTimeout( config.timeout ); - config.timeout = setTimeout(function() { - if ( config.current ) { - config.current.semaphore = 0; - QUnit.pushFailure( "Test timed out", sourceFromStacktrace( 2 ) ); - } else { - throw new Error( "Test timed out" ); - } - resumeProcessing(); - }, config.testTimeout ); - } -} - -function resumeProcessing() { - runStarted = true; - - // A slight delay to allow this iteration of the event loop to finish (more assertions, etc.) - if ( defined.setTimeout ) { - setTimeout(function() { - if ( config.current && config.current.semaphore > 0 ) { - return; - } - if ( config.timeout ) { - clearTimeout( config.timeout ); - } - - begin(); - }, 13 ); - } else { - begin(); - } -} - -function done() { - var runtime, passed; - - config.autorun = true; - - // Log the last module results - if ( config.previousModule ) { - runLoggingCallbacks( "moduleDone", { - name: config.previousModule.name, - tests: config.previousModule.tests, - failed: config.moduleStats.bad, - passed: config.moduleStats.all - config.moduleStats.bad, - total: config.moduleStats.all, - runtime: now() - config.moduleStats.started - }); - } - delete config.previousModule; - - runtime = now() - config.started; - passed = config.stats.all - config.stats.bad; - - runLoggingCallbacks( "done", { - failed: config.stats.bad, - passed: passed, - total: config.stats.all, - runtime: runtime - }); -} - -function Test( settings ) { - var i, l; - - ++Test.count; - - extend( this, settings ); - this.assertions = []; - this.semaphore = 0; - this.usedAsync = false; - this.module = config.currentModule; - this.stack = sourceFromStacktrace( 3 ); - - // Register unique strings - for ( i = 0, l = this.module.tests; i < l.length; i++ ) { - if ( this.module.tests[ i ].name === this.testName ) { - this.testName += " "; - } - } - - this.testId = generateHash( this.module.name, this.testName ); - - this.module.tests.push({ - name: this.testName, - testId: this.testId - }); - - if ( settings.skip ) { - - // Skipped tests will fully ignore any sent callback - this.callback = function() {}; - this.async = false; - this.expected = 0; - } else { - this.assert = new Assert( this ); - } -} - -Test.count = 0; - -Test.prototype = { - before: function() { - if ( - - // Emit moduleStart when we're switching from one module to another - this.module !== config.previousModule || - - // They could be equal (both undefined) but if the previousModule property doesn't - // yet exist it means this is the first test in a suite that isn't wrapped in a - // module, in which case we'll just emit a moduleStart event for 'undefined'. - // Without this, reporters can get testStart before moduleStart which is a problem. - !hasOwn.call( config, "previousModule" ) - ) { - if ( hasOwn.call( config, "previousModule" ) ) { - runLoggingCallbacks( "moduleDone", { - name: config.previousModule.name, - tests: config.previousModule.tests, - failed: config.moduleStats.bad, - passed: config.moduleStats.all - config.moduleStats.bad, - total: config.moduleStats.all, - runtime: now() - config.moduleStats.started - }); - } - config.previousModule = this.module; - config.moduleStats = { all: 0, bad: 0, started: now() }; - runLoggingCallbacks( "moduleStart", { - name: this.module.name, - tests: this.module.tests - }); - } - - config.current = this; - - if ( this.module.testEnvironment ) { - delete this.module.testEnvironment.beforeEach; - delete this.module.testEnvironment.afterEach; - } - this.testEnvironment = extend( {}, this.module.testEnvironment ); - - this.started = now(); - runLoggingCallbacks( "testStart", { - name: this.testName, - module: this.module.name, - testId: this.testId - }); - - if ( !config.pollution ) { - saveGlobal(); - } - }, - - run: function() { - var promise; - - config.current = this; - - if ( this.async ) { - QUnit.stop(); - } - - this.callbackStarted = now(); - - if ( config.notrycatch ) { - promise = this.callback.call( this.testEnvironment, this.assert ); - this.resolvePromise( promise ); - return; - } - - try { - promise = this.callback.call( this.testEnvironment, this.assert ); - this.resolvePromise( promise ); - } catch ( e ) { - this.pushFailure( "Died on test #" + ( this.assertions.length + 1 ) + " " + - this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) ); - - // else next test will carry the responsibility - saveGlobal(); - - // Restart the tests if they're blocking - if ( config.blocking ) { - QUnit.start(); - } - } - }, - - after: function() { - checkPollution(); - }, - - queueHook: function( hook, hookName ) { - var promise, - test = this; - return function runHook() { - config.current = test; - if ( config.notrycatch ) { - promise = hook.call( test.testEnvironment, test.assert ); - test.resolvePromise( promise, hookName ); - return; - } - try { - promise = hook.call( test.testEnvironment, test.assert ); - test.resolvePromise( promise, hookName ); - } catch ( error ) { - test.pushFailure( hookName + " failed on " + test.testName + ": " + - ( error.message || error ), extractStacktrace( error, 0 ) ); - } - }; - }, - - // Currently only used for module level hooks, can be used to add global level ones - hooks: function( handler ) { - var hooks = []; - - // Hooks are ignored on skipped tests - if ( this.skip ) { - return hooks; - } - - if ( this.module.testEnvironment && - QUnit.objectType( this.module.testEnvironment[ handler ] ) === "function" ) { - hooks.push( this.queueHook( this.module.testEnvironment[ handler ], handler ) ); - } - - return hooks; - }, - - finish: function() { - config.current = this; - if ( config.requireExpects && this.expected === null ) { - this.pushFailure( "Expected number of assertions to be defined, but expect() was " + - "not called.", this.stack ); - } else if ( this.expected !== null && this.expected !== this.assertions.length ) { - this.pushFailure( "Expected " + this.expected + " assertions, but " + - this.assertions.length + " were run", this.stack ); - } else if ( this.expected === null && !this.assertions.length ) { - this.pushFailure( "Expected at least one assertion, but none were run - call " + - "expect(0) to accept zero assertions.", this.stack ); - } - - var i, - bad = 0; - - this.runtime = now() - this.started; - config.stats.all += this.assertions.length; - config.moduleStats.all += this.assertions.length; - - for ( i = 0; i < this.assertions.length; i++ ) { - if ( !this.assertions[ i ].result ) { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - - runLoggingCallbacks( "testDone", { - name: this.testName, - module: this.module.name, - skipped: !!this.skip, - failed: bad, - passed: this.assertions.length - bad, - total: this.assertions.length, - runtime: this.runtime, - - // HTML Reporter use - assertions: this.assertions, - testId: this.testId, - - // Source of Test - source: this.stack, - - // DEPRECATED: this property will be removed in 2.0.0, use runtime instead - duration: this.runtime - }); - - // QUnit.reset() is deprecated and will be replaced for a new - // fixture reset function on QUnit 2.0/2.1. - // It's still called here for backwards compatibility handling - QUnit.reset(); - - config.current = undefined; - }, - - queue: function() { - var bad, - test = this; - - if ( !this.valid() ) { - return; - } - - function run() { - - // each of these can by async - synchronize([ - function() { - test.before(); - }, - - test.hooks( "beforeEach" ), - - function() { - test.run(); - }, - - test.hooks( "afterEach" ).reverse(), - - function() { - test.after(); - }, - function() { - test.finish(); - } - ]); - } - - // `bad` initialized at top of scope - // defer when previous test run passed, if storage is available - bad = QUnit.config.reorder && defined.sessionStorage && - +sessionStorage.getItem( "qunit-test-" + this.module.name + "-" + this.testName ); - - if ( bad ) { - run(); - } else { - synchronize( run, true ); - } - }, - - push: function( result, actual, expected, message, negative ) { - var source, - details = { - module: this.module.name, - name: this.testName, - result: result, - message: message, - actual: actual, - expected: expected, - testId: this.testId, - negative: negative || false, - runtime: now() - this.started - }; - - if ( !result ) { - source = sourceFromStacktrace(); - - if ( source ) { - details.source = source; - } - } - - runLoggingCallbacks( "log", details ); - - this.assertions.push({ - result: !!result, - message: message - }); - }, - - pushFailure: function( message, source, actual ) { - if ( !( this instanceof Test ) ) { - throw new Error( "pushFailure() assertion outside test context, was " + - sourceFromStacktrace( 2 ) ); - } - - var details = { - module: this.module.name, - name: this.testName, - result: false, - message: message || "error", - actual: actual || null, - testId: this.testId, - runtime: now() - this.started - }; - - if ( source ) { - details.source = source; - } - - runLoggingCallbacks( "log", details ); - - this.assertions.push({ - result: false, - message: message - }); - }, - - resolvePromise: function( promise, phase ) { - var then, message, - test = this; - if ( promise != null ) { - then = promise.then; - if ( QUnit.objectType( then ) === "function" ) { - QUnit.stop(); - then.call( - promise, - function() { QUnit.start(); }, - function( error ) { - message = "Promise rejected " + - ( !phase ? "during" : phase.replace( /Each$/, "" ) ) + - " " + test.testName + ": " + ( error.message || error ); - test.pushFailure( message, extractStacktrace( error, 0 ) ); - - // else next test will carry the responsibility - saveGlobal(); - - // Unblock - QUnit.start(); - } - ); - } - } - }, - - valid: function() { - var include, - filter = config.filter && config.filter.toLowerCase(), - module = QUnit.urlParams.module && QUnit.urlParams.module.toLowerCase(), - fullName = ( this.module.name + ": " + this.testName ).toLowerCase(); - - // Internally-generated tests are always valid - if ( this.callback && this.callback.validTest ) { - return true; - } - - if ( config.testId.length > 0 && inArray( this.testId, config.testId ) < 0 ) { - return false; - } - - if ( module && ( !this.module.name || this.module.name.toLowerCase() !== module ) ) { - return false; - } - - if ( !filter ) { - return true; - } - - include = filter.charAt( 0 ) !== "!"; - if ( !include ) { - filter = filter.slice( 1 ); - } - - // If the filter matches, we need to honour include - if ( fullName.indexOf( filter ) !== -1 ) { - return include; - } - - // Otherwise, do the opposite - return !include; - } - -}; - -// Resets the test setup. Useful for tests that modify the DOM. -/* -DEPRECATED: Use multiple tests instead of resetting inside a test. -Use testStart or testDone for custom cleanup. -This method will throw an error in 2.0, and will be removed in 2.1 -*/ -QUnit.reset = function() { - - // Return on non-browser environments - // This is necessary to not break on node tests - if ( !defined.document ) { - return; - } - - var fixture = defined.document && document.getElementById && - document.getElementById( "qunit-fixture" ); - - if ( fixture ) { - fixture.innerHTML = config.fixture; - } -}; - -QUnit.pushFailure = function() { - if ( !QUnit.config.current ) { - throw new Error( "pushFailure() assertion outside test context, in " + - sourceFromStacktrace( 2 ) ); - } - - // Gets current test obj - var currentTest = QUnit.config.current; - - return currentTest.pushFailure.apply( currentTest, arguments ); -}; - -// Based on Java's String.hashCode, a simple but not -// rigorously collision resistant hashing function -function generateHash( module, testName ) { - var hex, - i = 0, - hash = 0, - str = module + "\x1C" + testName, - len = str.length; - - for ( ; i < len; i++ ) { - hash = ( ( hash << 5 ) - hash ) + str.charCodeAt( i ); - hash |= 0; - } - - // Convert the possibly negative integer hash code into an 8 character hex string, which isn't - // strictly necessary but increases user understanding that the id is a SHA-like hash - hex = ( 0x100000000 + hash ).toString( 16 ); - if ( hex.length < 8 ) { - hex = "0000000" + hex; - } - - return hex.slice( -8 ); -} - -function synchronize( callback, last ) { - if ( QUnit.objectType( callback ) === "array" ) { - while ( callback.length ) { - synchronize( callback.shift() ); - } - return; - } - config.queue.push( callback ); - - if ( config.autorun && !config.blocking ) { - process( last ); - } -} - -function saveGlobal() { - config.pollution = []; - - if ( config.noglobals ) { - for ( var key in global ) { - if ( hasOwn.call( global, key ) ) { - - // in Opera sometimes DOM element ids show up here, ignore them - if ( /^qunit-test-output/.test( key ) ) { - continue; - } - config.pollution.push( key ); - } - } - } -} - -function checkPollution() { - var newGlobals, - deletedGlobals, - old = config.pollution; - - saveGlobal(); - - newGlobals = diff( config.pollution, old ); - if ( newGlobals.length > 0 ) { - QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join( ", " ) ); - } - - deletedGlobals = diff( old, config.pollution ); - if ( deletedGlobals.length > 0 ) { - QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join( ", " ) ); - } -} - -// Will be exposed as QUnit.asyncTest -function asyncTest( testName, expected, callback ) { - if ( arguments.length === 2 ) { - callback = expected; - expected = null; - } - - QUnit.test( testName, expected, callback, true ); -} - -// Will be exposed as QUnit.test -function test( testName, expected, callback, async ) { - var newTest; - - if ( arguments.length === 2 ) { - callback = expected; - expected = null; - } - - newTest = new Test({ - testName: testName, - expected: expected, - async: async, - callback: callback - }); - - newTest.queue(); -} - -// Will be exposed as QUnit.skip -function skip( testName ) { - var test = new Test({ - testName: testName, - skip: true - }); - - test.queue(); -} - -function Assert( testContext ) { - this.test = testContext; -} - -// Assert helpers -QUnit.assert = Assert.prototype = { - - // Specify the number of expected assertions to guarantee that failed test - // (no assertions are run at all) don't slip through. - expect: function( asserts ) { - if ( arguments.length === 1 ) { - this.test.expected = asserts; - } else { - return this.test.expected; - } - }, - - // Increment this Test's semaphore counter, then return a single-use function that - // decrements that counter a maximum of once. - async: function() { - var test = this.test, - popped = false; - - test.semaphore += 1; - test.usedAsync = true; - pauseProcessing(); - - return function done() { - if ( !popped ) { - test.semaphore -= 1; - popped = true; - resumeProcessing(); - } else { - test.pushFailure( "Called the callback returned from `assert.async` more than once", - sourceFromStacktrace( 2 ) ); - } - }; - }, - - // Exports test.push() to the user API - push: function( /* result, actual, expected, message, negative */ ) { - var assert = this, - currentTest = ( assert instanceof Assert && assert.test ) || QUnit.config.current; - - // Backwards compatibility fix. - // Allows the direct use of global exported assertions and QUnit.assert.* - // Although, it's use is not recommended as it can leak assertions - // to other tests from async tests, because we only get a reference to the current test, - // not exactly the test where assertion were intended to be called. - if ( !currentTest ) { - throw new Error( "assertion outside test context, in " + sourceFromStacktrace( 2 ) ); - } - - if ( currentTest.usedAsync === true && currentTest.semaphore === 0 ) { - currentTest.pushFailure( "Assertion after the final `assert.async` was resolved", - sourceFromStacktrace( 2 ) ); - - // Allow this assertion to continue running anyway... - } - - if ( !( assert instanceof Assert ) ) { - assert = currentTest.assert; - } - return assert.test.push.apply( assert.test, arguments ); - }, - - ok: function( result, message ) { - message = message || ( result ? "okay" : "failed, expected argument to be truthy, was: " + - QUnit.dump.parse( result ) ); - this.push( !!result, result, true, message ); - }, - - notOk: function( result, message ) { - message = message || ( !result ? "okay" : "failed, expected argument to be falsy, was: " + - QUnit.dump.parse( result ) ); - this.push( !result, result, false, message, true ); - }, - - equal: function( actual, expected, message ) { - /*jshint eqeqeq:false */ - this.push( expected == actual, actual, expected, message ); - }, - - notEqual: function( actual, expected, message ) { - /*jshint eqeqeq:false */ - this.push( expected != actual, actual, expected, message, true ); - }, - - propEqual: function( actual, expected, message ) { - actual = objectValues( actual ); - expected = objectValues( expected ); - this.push( QUnit.equiv( actual, expected ), actual, expected, message ); - }, - - notPropEqual: function( actual, expected, message ) { - actual = objectValues( actual ); - expected = objectValues( expected ); - this.push( !QUnit.equiv( actual, expected ), actual, expected, message, true ); - }, - - deepEqual: function( actual, expected, message ) { - this.push( QUnit.equiv( actual, expected ), actual, expected, message ); - }, - - notDeepEqual: function( actual, expected, message ) { - this.push( !QUnit.equiv( actual, expected ), actual, expected, message, true ); - }, - - strictEqual: function( actual, expected, message ) { - this.push( expected === actual, actual, expected, message ); - }, - - notStrictEqual: function( actual, expected, message ) { - this.push( expected !== actual, actual, expected, message, true ); - }, - - "throws": function( block, expected, message ) { - var actual, expectedType, - expectedOutput = expected, - ok = false, - currentTest = ( this instanceof Assert && this.test ) || QUnit.config.current; - - // 'expected' is optional unless doing string comparison - if ( message == null && typeof expected === "string" ) { - message = expected; - expected = null; - } - - currentTest.ignoreGlobalErrors = true; - try { - block.call( currentTest.testEnvironment ); - } catch (e) { - actual = e; - } - currentTest.ignoreGlobalErrors = false; - - if ( actual ) { - expectedType = QUnit.objectType( expected ); - - // we don't want to validate thrown error - if ( !expected ) { - ok = true; - expectedOutput = null; - - // expected is a regexp - } else if ( expectedType === "regexp" ) { - ok = expected.test( errorString( actual ) ); - - // expected is a string - } else if ( expectedType === "string" ) { - ok = expected === errorString( actual ); - - // expected is a constructor, maybe an Error constructor - } else if ( expectedType === "function" && actual instanceof expected ) { - ok = true; - - // expected is an Error object - } else if ( expectedType === "object" ) { - ok = actual instanceof expected.constructor && - actual.name === expected.name && - actual.message === expected.message; - - // expected is a validation function which returns true if validation passed - } else if ( expectedType === "function" && expected.call( {}, actual ) === true ) { - expectedOutput = null; - ok = true; - } - } - - currentTest.assert.push( ok, actual, expectedOutput, message ); - } -}; - -// Provide an alternative to assert.throws(), for enviroments that consider throws a reserved word -// Known to us are: Closure Compiler, Narwhal -(function() { - /*jshint sub:true */ - Assert.prototype.raises = Assert.prototype[ "throws" ]; -}()); - -function errorString( error ) { - var name, message, - resultErrorString = error.toString(); - if ( resultErrorString.substring( 0, 7 ) === "[object" ) { - name = error.name ? error.name.toString() : "Error"; - message = error.message ? error.message.toString() : ""; - if ( name && message ) { - return name + ": " + message; - } else if ( name ) { - return name; - } else if ( message ) { - return message; - } else { - return "Error"; - } - } else { - return resultErrorString; - } -} - -// Test for equality any JavaScript type. -// Author: Philippe Rathé -QUnit.equiv = (function() { - - // Call the o related callback with the given arguments. - function bindCallbacks( o, callbacks, args ) { - var prop = QUnit.objectType( o ); - if ( prop ) { - if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) { - return callbacks[ prop ].apply( callbacks, args ); - } else { - return callbacks[ prop ]; // or undefined - } - } - } - - // the real equiv function - var innerEquiv, - - // stack to decide between skip/abort functions - callers = [], - - // stack to avoiding loops from circular referencing - parents = [], - parentsB = [], - - getProto = Object.getPrototypeOf || function( obj ) { - /* jshint camelcase: false, proto: true */ - return obj.__proto__; - }, - callbacks = (function() { - - // for string, boolean, number and null - function useStrictEquality( b, a ) { - - /*jshint eqeqeq:false */ - if ( b instanceof a.constructor || a instanceof b.constructor ) { - - // to catch short annotation VS 'new' annotation of a - // declaration - // e.g. var i = 1; - // var j = new Number(1); - return a == b; - } else { - return a === b; - } - } - - return { - "string": useStrictEquality, - "boolean": useStrictEquality, - "number": useStrictEquality, - "null": useStrictEquality, - "undefined": useStrictEquality, - - "nan": function( b ) { - return isNaN( b ); - }, - - "date": function( b, a ) { - return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf(); - }, - - "regexp": function( b, a ) { - return QUnit.objectType( b ) === "regexp" && - - // the regex itself - a.source === b.source && - - // and its modifiers - a.global === b.global && - - // (gmi) ... - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline && - a.sticky === b.sticky; - }, - - // - skip when the property is a method of an instance (OOP) - // - abort otherwise, - // initial === would have catch identical references anyway - "function": function() { - var caller = callers[ callers.length - 1 ]; - return caller !== Object && typeof caller !== "undefined"; - }, - - "array": function( b, a ) { - var i, j, len, loop, aCircular, bCircular; - - // b could be an object literal here - if ( QUnit.objectType( b ) !== "array" ) { - return false; - } - - len = a.length; - if ( len !== b.length ) { - // safe and faster - return false; - } - - // track reference to avoid circular references - parents.push( a ); - parentsB.push( b ); - for ( i = 0; i < len; i++ ) { - loop = false; - for ( j = 0; j < parents.length; j++ ) { - aCircular = parents[ j ] === a[ i ]; - bCircular = parentsB[ j ] === b[ i ]; - if ( aCircular || bCircular ) { - if ( a[ i ] === b[ i ] || aCircular && bCircular ) { - loop = true; - } else { - parents.pop(); - parentsB.pop(); - return false; - } - } - } - if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) { - parents.pop(); - parentsB.pop(); - return false; - } - } - parents.pop(); - parentsB.pop(); - return true; - }, - - "set": function( b, a ) { - var aArray, bArray; - - // b could be any object here - if ( QUnit.objectType( b ) !== "set" ) { - return false; - } - - aArray = []; - a.forEach( function( v ) { - aArray.push( v ); - }); - bArray = []; - b.forEach( function( v ) { - bArray.push( v ); - }); - - return innerEquiv( bArray, aArray ); - }, - - "map": function( b, a ) { - var aArray, bArray; - - // b could be any object here - if ( QUnit.objectType( b ) !== "map" ) { - return false; - } - - aArray = []; - a.forEach( function( v, k ) { - aArray.push( [ k, v ] ); - }); - bArray = []; - b.forEach( function( v, k ) { - bArray.push( [ k, v ] ); - }); - - return innerEquiv( bArray, aArray ); - }, - - "object": function( b, a ) { - - /*jshint forin:false */ - var i, j, loop, aCircular, bCircular, - // Default to true - eq = true, - aProperties = [], - bProperties = []; - - // comparing constructors is more strict than using - // instanceof - if ( a.constructor !== b.constructor ) { - - // Allow objects with no prototype to be equivalent to - // objects with Object as their constructor. - if ( !( ( getProto( a ) === null && getProto( b ) === Object.prototype ) || - ( getProto( b ) === null && getProto( a ) === Object.prototype ) ) ) { - return false; - } - } - - // stack constructor before traversing properties - callers.push( a.constructor ); - - // track reference to avoid circular references - parents.push( a ); - parentsB.push( b ); - - // be strict: don't ensure hasOwnProperty and go deep - for ( i in a ) { - loop = false; - for ( j = 0; j < parents.length; j++ ) { - aCircular = parents[ j ] === a[ i ]; - bCircular = parentsB[ j ] === b[ i ]; - if ( aCircular || bCircular ) { - if ( a[ i ] === b[ i ] || aCircular && bCircular ) { - loop = true; - } else { - eq = false; - break; - } - } - } - aProperties.push( i ); - if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) { - eq = false; - break; - } - } - - parents.pop(); - parentsB.pop(); - callers.pop(); // unstack, we are done - - for ( i in b ) { - bProperties.push( i ); // collect b's properties - } - - // Ensures identical properties name - return eq && innerEquiv( aProperties.sort(), bProperties.sort() ); - } - }; - }()); - - innerEquiv = function() { // can take multiple arguments - var args = [].slice.apply( arguments ); - if ( args.length < 2 ) { - return true; // end transition - } - - return ( (function( a, b ) { - if ( a === b ) { - return true; // catch the most you can - } else if ( a === null || b === null || typeof a === "undefined" || - typeof b === "undefined" || - QUnit.objectType( a ) !== QUnit.objectType( b ) ) { - - // don't lose time with error prone cases - return false; - } else { - return bindCallbacks( a, callbacks, [ b, a ] ); - } - - // apply transition with (1..n) arguments - }( args[ 0 ], args[ 1 ] ) ) && - innerEquiv.apply( this, args.splice( 1, args.length - 1 ) ) ); - }; - - return innerEquiv; -}()); - -// Based on jsDump by Ariel Flesler -// http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html -QUnit.dump = (function() { - function quote( str ) { - return "\"" + str.toString().replace( /\\/g, "\\\\" ).replace( /"/g, "\\\"" ) + "\""; - } - function literal( o ) { - return o + ""; - } - function join( pre, arr, post ) { - var s = dump.separator(), - base = dump.indent(), - inner = dump.indent( 1 ); - if ( arr.join ) { - arr = arr.join( "," + s + inner ); - } - if ( !arr ) { - return pre + post; - } - return [ pre, inner + arr, base + post ].join( s ); - } - function array( arr, stack ) { - var i = arr.length, - ret = new Array( i ); - - if ( dump.maxDepth && dump.depth > dump.maxDepth ) { - return "[object Array]"; - } - - this.up(); - while ( i-- ) { - ret[ i ] = this.parse( arr[ i ], undefined, stack ); - } - this.down(); - return join( "[", ret, "]" ); - } - - var reName = /^function (\w+)/, - dump = { - - // objType is used mostly internally, you can fix a (custom) type in advance - parse: function( obj, objType, stack ) { - stack = stack || []; - var res, parser, parserType, - inStack = inArray( obj, stack ); - - if ( inStack !== -1 ) { - return "recursion(" + ( inStack - stack.length ) + ")"; - } - - objType = objType || this.typeOf( obj ); - parser = this.parsers[ objType ]; - parserType = typeof parser; - - if ( parserType === "function" ) { - stack.push( obj ); - res = parser.call( this, obj, stack ); - stack.pop(); - return res; - } - return ( parserType === "string" ) ? parser : this.parsers.error; - }, - typeOf: function( obj ) { - var type; - if ( obj === null ) { - type = "null"; - } else if ( typeof obj === "undefined" ) { - type = "undefined"; - } else if ( QUnit.is( "regexp", obj ) ) { - type = "regexp"; - } else if ( QUnit.is( "date", obj ) ) { - type = "date"; - } else if ( QUnit.is( "function", obj ) ) { - type = "function"; - } else if ( obj.setInterval !== undefined && - obj.document !== undefined && - obj.nodeType === undefined ) { - type = "window"; - } else if ( obj.nodeType === 9 ) { - type = "document"; - } else if ( obj.nodeType ) { - type = "node"; - } else if ( - - // native arrays - toString.call( obj ) === "[object Array]" || - - // NodeList objects - ( typeof obj.length === "number" && obj.item !== undefined && - ( obj.length ? obj.item( 0 ) === obj[ 0 ] : ( obj.item( 0 ) === null && - obj[ 0 ] === undefined ) ) ) - ) { - type = "array"; - } else if ( obj.constructor === Error.prototype.constructor ) { - type = "error"; - } else { - type = typeof obj; - } - return type; - }, - separator: function() { - return this.multiline ? this.HTML ? "
" : "\n" : this.HTML ? " " : " "; - }, - // extra can be a number, shortcut for increasing-calling-decreasing - indent: function( extra ) { - if ( !this.multiline ) { - return ""; - } - var chr = this.indentChar; - if ( this.HTML ) { - chr = chr.replace( /\t/g, " " ).replace( / /g, " " ); - } - return new Array( this.depth + ( extra || 0 ) ).join( chr ); - }, - up: function( a ) { - this.depth += a || 1; - }, - down: function( a ) { - this.depth -= a || 1; - }, - setParser: function( name, parser ) { - this.parsers[ name ] = parser; - }, - // The next 3 are exposed so you can use them - quote: quote, - literal: literal, - join: join, - // - depth: 1, - maxDepth: QUnit.config.maxDepth, - - // This is the list of parsers, to modify them, use dump.setParser - parsers: { - window: "[Window]", - document: "[Document]", - error: function( error ) { - return "Error(\"" + error.message + "\")"; - }, - unknown: "[Unknown]", - "null": "null", - "undefined": "undefined", - "function": function( fn ) { - var ret = "function", - - // functions never have name in IE - name = "name" in fn ? fn.name : ( reName.exec( fn ) || [] )[ 1 ]; - - if ( name ) { - ret += " " + name; - } - ret += "( "; - - ret = [ ret, dump.parse( fn, "functionArgs" ), "){" ].join( "" ); - return join( ret, dump.parse( fn, "functionCode" ), "}" ); - }, - array: array, - nodelist: array, - "arguments": array, - object: function( map, stack ) { - var keys, key, val, i, nonEnumerableProperties, - ret = []; - - if ( dump.maxDepth && dump.depth > dump.maxDepth ) { - return "[object Object]"; - } - - dump.up(); - keys = []; - for ( key in map ) { - keys.push( key ); - } - - // Some properties are not always enumerable on Error objects. - nonEnumerableProperties = [ "message", "name" ]; - for ( i in nonEnumerableProperties ) { - key = nonEnumerableProperties[ i ]; - if ( key in map && inArray( key, keys ) < 0 ) { - keys.push( key ); - } - } - keys.sort(); - for ( i = 0; i < keys.length; i++ ) { - key = keys[ i ]; - val = map[ key ]; - ret.push( dump.parse( key, "key" ) + ": " + - dump.parse( val, undefined, stack ) ); - } - dump.down(); - return join( "{", ret, "}" ); - }, - node: function( node ) { - var len, i, val, - open = dump.HTML ? "<" : "<", - close = dump.HTML ? ">" : ">", - tag = node.nodeName.toLowerCase(), - ret = open + tag, - attrs = node.attributes; - - if ( attrs ) { - for ( i = 0, len = attrs.length; i < len; i++ ) { - val = attrs[ i ].nodeValue; - - // IE6 includes all attributes in .attributes, even ones not explicitly - // set. Those have values like undefined, null, 0, false, "" or - // "inherit". - if ( val && val !== "inherit" ) { - ret += " " + attrs[ i ].nodeName + "=" + - dump.parse( val, "attribute" ); - } - } - } - ret += close; - - // Show content of TextNode or CDATASection - if ( node.nodeType === 3 || node.nodeType === 4 ) { - ret += node.nodeValue; - } - - return ret + open + "/" + tag + close; - }, - - // function calls it internally, it's the arguments part of the function - functionArgs: function( fn ) { - var args, - l = fn.length; - - if ( !l ) { - return ""; - } - - args = new Array( l ); - while ( l-- ) { - - // 97 is 'a' - args[ l ] = String.fromCharCode( 97 + l ); - } - return " " + args.join( ", " ) + " "; - }, - // object calls it internally, the key part of an item in a map - key: quote, - // function calls it internally, it's the content of the function - functionCode: "[code]", - // node calls it internally, it's an html attribute value - attribute: quote, - string: quote, - date: quote, - regexp: literal, - number: literal, - "boolean": literal - }, - // if true, entities are escaped ( <, >, \t, space and \n ) - HTML: false, - // indentation unit - indentChar: " ", - // if true, items in a collection, are separated by a \n, else just a space. - multiline: true - }; - - return dump; -}()); - -// back compat -QUnit.jsDump = QUnit.dump; - -// For browser, export only select globals -if ( defined.document ) { - - // Deprecated - // Extend assert methods to QUnit and Global scope through Backwards compatibility - (function() { - var i, - assertions = Assert.prototype; - - function applyCurrent( current ) { - return function() { - var assert = new Assert( QUnit.config.current ); - current.apply( assert, arguments ); - }; - } - - for ( i in assertions ) { - QUnit[ i ] = applyCurrent( assertions[ i ] ); - } - })(); - - (function() { - var i, l, - keys = [ - "test", - "module", - "expect", - "asyncTest", - "start", - "stop", - "ok", - "notOk", - "equal", - "notEqual", - "propEqual", - "notPropEqual", - "deepEqual", - "notDeepEqual", - "strictEqual", - "notStrictEqual", - "throws" - ]; - - for ( i = 0, l = keys.length; i < l; i++ ) { - window[ keys[ i ] ] = QUnit[ keys[ i ] ]; - } - })(); - - window.QUnit = QUnit; -} - -// For nodejs -if ( typeof module !== "undefined" && module && module.exports ) { - module.exports = QUnit; - - // For consistency with CommonJS environments' exports - module.exports.QUnit = QUnit; -} - -// For CommonJS with exports, but without module.exports, like Rhino -if ( typeof exports !== "undefined" && exports ) { - exports.QUnit = QUnit; -} - -if ( typeof define === "function" && define.amd ) { - define( function() { - return QUnit; - } ); - QUnit.config.autostart = false; -} - -/* - * This file is a modified version of google-diff-match-patch's JavaScript implementation - * (https://code.google.com/p/google-diff-match-patch/source/browse/trunk/javascript/diff_match_patch_uncompressed.js), - * modifications are licensed as more fully set forth in LICENSE.txt. - * - * The original source of google-diff-match-patch is attributable and licensed as follows: - * - * Copyright 2006 Google Inc. - * http://code.google.com/p/google-diff-match-patch/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * More Info: - * https://code.google.com/p/google-diff-match-patch/ - * - * Usage: QUnit.diff(expected, actual) - * - */ -QUnit.diff = ( function() { - function DiffMatchPatch() { - } - - // DIFF FUNCTIONS - - /** - * The data structure representing a diff is an array of tuples: - * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']] - * which means: delete 'Hello', add 'Goodbye' and keep ' world.' - */ - var DIFF_DELETE = -1, - DIFF_INSERT = 1, - DIFF_EQUAL = 0; - - /** - * Find the differences between two texts. Simplifies the problem by stripping - * any common prefix or suffix off the texts before diffing. - * @param {string} text1 Old string to be diffed. - * @param {string} text2 New string to be diffed. - * @param {boolean=} optChecklines Optional speedup flag. If present and false, - * then don't run a line-level diff first to identify the changed areas. - * Defaults to true, which does a faster, slightly less optimal diff. - * @return {!Array.} Array of diff tuples. - */ - DiffMatchPatch.prototype.DiffMain = function( text1, text2, optChecklines ) { - var deadline, checklines, commonlength, - commonprefix, commonsuffix, diffs; - - // The diff must be complete in up to 1 second. - deadline = ( new Date() ).getTime() + 1000; - - // Check for null inputs. - if ( text1 === null || text2 === null ) { - throw new Error( "Null input. (DiffMain)" ); - } - - // Check for equality (speedup). - if ( text1 === text2 ) { - if ( text1 ) { - return [ - [ DIFF_EQUAL, text1 ] - ]; - } - return []; - } - - if ( typeof optChecklines === "undefined" ) { - optChecklines = true; - } - - checklines = optChecklines; - - // Trim off common prefix (speedup). - commonlength = this.diffCommonPrefix( text1, text2 ); - commonprefix = text1.substring( 0, commonlength ); - text1 = text1.substring( commonlength ); - text2 = text2.substring( commonlength ); - - // Trim off common suffix (speedup). - commonlength = this.diffCommonSuffix( text1, text2 ); - commonsuffix = text1.substring( text1.length - commonlength ); - text1 = text1.substring( 0, text1.length - commonlength ); - text2 = text2.substring( 0, text2.length - commonlength ); - - // Compute the diff on the middle block. - diffs = this.diffCompute( text1, text2, checklines, deadline ); - - // Restore the prefix and suffix. - if ( commonprefix ) { - diffs.unshift( [ DIFF_EQUAL, commonprefix ] ); - } - if ( commonsuffix ) { - diffs.push( [ DIFF_EQUAL, commonsuffix ] ); - } - this.diffCleanupMerge( diffs ); - return diffs; - }; - - /** - * Reduce the number of edits by eliminating operationally trivial equalities. - * @param {!Array.} diffs Array of diff tuples. - */ - DiffMatchPatch.prototype.diffCleanupEfficiency = function( diffs ) { - var changes, equalities, equalitiesLength, lastequality, - pointer, preIns, preDel, postIns, postDel; - changes = false; - equalities = []; // Stack of indices where equalities are found. - equalitiesLength = 0; // Keeping our own length var is faster in JS. - /** @type {?string} */ - lastequality = null; - // Always equal to diffs[equalities[equalitiesLength - 1]][1] - pointer = 0; // Index of current position. - // Is there an insertion operation before the last equality. - preIns = false; - // Is there a deletion operation before the last equality. - preDel = false; - // Is there an insertion operation after the last equality. - postIns = false; - // Is there a deletion operation after the last equality. - postDel = false; - while ( pointer < diffs.length ) { - - // Equality found. - if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) { - if ( diffs[ pointer ][ 1 ].length < 4 && ( postIns || postDel ) ) { - - // Candidate found. - equalities[ equalitiesLength++ ] = pointer; - preIns = postIns; - preDel = postDel; - lastequality = diffs[ pointer ][ 1 ]; - } else { - - // Not a candidate, and can never become one. - equalitiesLength = 0; - lastequality = null; - } - postIns = postDel = false; - - // An insertion or deletion. - } else { - - if ( diffs[ pointer ][ 0 ] === DIFF_DELETE ) { - postDel = true; - } else { - postIns = true; - } - - /* - * Five types to be split: - * ABXYCD - * AXCD - * ABXC - * AXCD - * ABXC - */ - if ( lastequality && ( ( preIns && preDel && postIns && postDel ) || - ( ( lastequality.length < 2 ) && - ( preIns + preDel + postIns + postDel ) === 3 ) ) ) { - - // Duplicate record. - diffs.splice( - equalities[ equalitiesLength - 1 ], - 0, - [ DIFF_DELETE, lastequality ] - ); - - // Change second copy to insert. - diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT; - equalitiesLength--; // Throw away the equality we just deleted; - lastequality = null; - if ( preIns && preDel ) { - // No changes made which could affect previous entry, keep going. - postIns = postDel = true; - equalitiesLength = 0; - } else { - equalitiesLength--; // Throw away the previous equality. - pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1; - postIns = postDel = false; - } - changes = true; - } - } - pointer++; - } - - if ( changes ) { - this.diffCleanupMerge( diffs ); - } - }; - - /** - * Convert a diff array into a pretty HTML report. - * @param {!Array.} diffs Array of diff tuples. - * @param {integer} string to be beautified. - * @return {string} HTML representation. - */ - DiffMatchPatch.prototype.diffPrettyHtml = function( diffs ) { - var op, data, x, - html = []; - for ( x = 0; x < diffs.length; x++ ) { - op = diffs[ x ][ 0 ]; // Operation (insert, delete, equal) - data = diffs[ x ][ 1 ]; // Text of change. - switch ( op ) { - case DIFF_INSERT: - html[ x ] = "" + data + ""; - break; - case DIFF_DELETE: - html[ x ] = "" + data + ""; - break; - case DIFF_EQUAL: - html[ x ] = "" + data + ""; - break; - } - } - return html.join( "" ); - }; - - /** - * Determine the common prefix of two strings. - * @param {string} text1 First string. - * @param {string} text2 Second string. - * @return {number} The number of characters common to the start of each - * string. - */ - DiffMatchPatch.prototype.diffCommonPrefix = function( text1, text2 ) { - var pointermid, pointermax, pointermin, pointerstart; - // Quick check for common null cases. - if ( !text1 || !text2 || text1.charAt( 0 ) !== text2.charAt( 0 ) ) { - return 0; - } - // Binary search. - // Performance analysis: http://neil.fraser.name/news/2007/10/09/ - pointermin = 0; - pointermax = Math.min( text1.length, text2.length ); - pointermid = pointermax; - pointerstart = 0; - while ( pointermin < pointermid ) { - if ( text1.substring( pointerstart, pointermid ) === - text2.substring( pointerstart, pointermid ) ) { - pointermin = pointermid; - pointerstart = pointermin; - } else { - pointermax = pointermid; - } - pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin ); - } - return pointermid; - }; - - /** - * Determine the common suffix of two strings. - * @param {string} text1 First string. - * @param {string} text2 Second string. - * @return {number} The number of characters common to the end of each string. - */ - DiffMatchPatch.prototype.diffCommonSuffix = function( text1, text2 ) { - var pointermid, pointermax, pointermin, pointerend; - // Quick check for common null cases. - if ( !text1 || - !text2 || - text1.charAt( text1.length - 1 ) !== text2.charAt( text2.length - 1 ) ) { - return 0; - } - // Binary search. - // Performance analysis: http://neil.fraser.name/news/2007/10/09/ - pointermin = 0; - pointermax = Math.min( text1.length, text2.length ); - pointermid = pointermax; - pointerend = 0; - while ( pointermin < pointermid ) { - if ( text1.substring( text1.length - pointermid, text1.length - pointerend ) === - text2.substring( text2.length - pointermid, text2.length - pointerend ) ) { - pointermin = pointermid; - pointerend = pointermin; - } else { - pointermax = pointermid; - } - pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin ); - } - return pointermid; - }; - - /** - * Find the differences between two texts. Assumes that the texts do not - * have any common prefix or suffix. - * @param {string} text1 Old string to be diffed. - * @param {string} text2 New string to be diffed. - * @param {boolean} checklines Speedup flag. If false, then don't run a - * line-level diff first to identify the changed areas. - * If true, then run a faster, slightly less optimal diff. - * @param {number} deadline Time when the diff should be complete by. - * @return {!Array.} Array of diff tuples. - * @private - */ - DiffMatchPatch.prototype.diffCompute = function( text1, text2, checklines, deadline ) { - var diffs, longtext, shorttext, i, hm, - text1A, text2A, text1B, text2B, - midCommon, diffsA, diffsB; - - if ( !text1 ) { - // Just add some text (speedup). - return [ - [ DIFF_INSERT, text2 ] - ]; - } - - if ( !text2 ) { - // Just delete some text (speedup). - return [ - [ DIFF_DELETE, text1 ] - ]; - } - - longtext = text1.length > text2.length ? text1 : text2; - shorttext = text1.length > text2.length ? text2 : text1; - i = longtext.indexOf( shorttext ); - if ( i !== -1 ) { - // Shorter text is inside the longer text (speedup). - diffs = [ - [ DIFF_INSERT, longtext.substring( 0, i ) ], - [ DIFF_EQUAL, shorttext ], - [ DIFF_INSERT, longtext.substring( i + shorttext.length ) ] - ]; - // Swap insertions for deletions if diff is reversed. - if ( text1.length > text2.length ) { - diffs[ 0 ][ 0 ] = diffs[ 2 ][ 0 ] = DIFF_DELETE; - } - return diffs; - } - - if ( shorttext.length === 1 ) { - // Single character string. - // After the previous speedup, the character can't be an equality. - return [ - [ DIFF_DELETE, text1 ], - [ DIFF_INSERT, text2 ] - ]; - } - - // Check to see if the problem can be split in two. - hm = this.diffHalfMatch( text1, text2 ); - if ( hm ) { - // A half-match was found, sort out the return data. - text1A = hm[ 0 ]; - text1B = hm[ 1 ]; - text2A = hm[ 2 ]; - text2B = hm[ 3 ]; - midCommon = hm[ 4 ]; - // Send both pairs off for separate processing. - diffsA = this.DiffMain( text1A, text2A, checklines, deadline ); - diffsB = this.DiffMain( text1B, text2B, checklines, deadline ); - // Merge the results. - return diffsA.concat( [ - [ DIFF_EQUAL, midCommon ] - ], diffsB ); - } - - if ( checklines && text1.length > 100 && text2.length > 100 ) { - return this.diffLineMode( text1, text2, deadline ); - } - - return this.diffBisect( text1, text2, deadline ); - }; - - /** - * Do the two texts share a substring which is at least half the length of the - * longer text? - * This speedup can produce non-minimal diffs. - * @param {string} text1 First string. - * @param {string} text2 Second string. - * @return {Array.} Five element Array, containing the prefix of - * text1, the suffix of text1, the prefix of text2, the suffix of - * text2 and the common middle. Or null if there was no match. - * @private - */ - DiffMatchPatch.prototype.diffHalfMatch = function( text1, text2 ) { - var longtext, shorttext, dmp, - text1A, text2B, text2A, text1B, midCommon, - hm1, hm2, hm; - - longtext = text1.length > text2.length ? text1 : text2; - shorttext = text1.length > text2.length ? text2 : text1; - if ( longtext.length < 4 || shorttext.length * 2 < longtext.length ) { - return null; // Pointless. - } - dmp = this; // 'this' becomes 'window' in a closure. - - /** - * Does a substring of shorttext exist within longtext such that the substring - * is at least half the length of longtext? - * Closure, but does not reference any external variables. - * @param {string} longtext Longer string. - * @param {string} shorttext Shorter string. - * @param {number} i Start index of quarter length substring within longtext. - * @return {Array.} Five element Array, containing the prefix of - * longtext, the suffix of longtext, the prefix of shorttext, the suffix - * of shorttext and the common middle. Or null if there was no match. - * @private - */ - function diffHalfMatchI( longtext, shorttext, i ) { - var seed, j, bestCommon, prefixLength, suffixLength, - bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB; - // Start with a 1/4 length substring at position i as a seed. - seed = longtext.substring( i, i + Math.floor( longtext.length / 4 ) ); - j = -1; - bestCommon = ""; - while ( ( j = shorttext.indexOf( seed, j + 1 ) ) !== -1 ) { - prefixLength = dmp.diffCommonPrefix( longtext.substring( i ), - shorttext.substring( j ) ); - suffixLength = dmp.diffCommonSuffix( longtext.substring( 0, i ), - shorttext.substring( 0, j ) ); - if ( bestCommon.length < suffixLength + prefixLength ) { - bestCommon = shorttext.substring( j - suffixLength, j ) + - shorttext.substring( j, j + prefixLength ); - bestLongtextA = longtext.substring( 0, i - suffixLength ); - bestLongtextB = longtext.substring( i + prefixLength ); - bestShorttextA = shorttext.substring( 0, j - suffixLength ); - bestShorttextB = shorttext.substring( j + prefixLength ); - } - } - if ( bestCommon.length * 2 >= longtext.length ) { - return [ bestLongtextA, bestLongtextB, - bestShorttextA, bestShorttextB, bestCommon - ]; - } else { - return null; - } - } - - // First check if the second quarter is the seed for a half-match. - hm1 = diffHalfMatchI( longtext, shorttext, - Math.ceil( longtext.length / 4 ) ); - // Check again based on the third quarter. - hm2 = diffHalfMatchI( longtext, shorttext, - Math.ceil( longtext.length / 2 ) ); - if ( !hm1 && !hm2 ) { - return null; - } else if ( !hm2 ) { - hm = hm1; - } else if ( !hm1 ) { - hm = hm2; - } else { - // Both matched. Select the longest. - hm = hm1[ 4 ].length > hm2[ 4 ].length ? hm1 : hm2; - } - - // A half-match was found, sort out the return data. - text1A, text1B, text2A, text2B; - if ( text1.length > text2.length ) { - text1A = hm[ 0 ]; - text1B = hm[ 1 ]; - text2A = hm[ 2 ]; - text2B = hm[ 3 ]; - } else { - text2A = hm[ 0 ]; - text2B = hm[ 1 ]; - text1A = hm[ 2 ]; - text1B = hm[ 3 ]; - } - midCommon = hm[ 4 ]; - return [ text1A, text1B, text2A, text2B, midCommon ]; - }; - - /** - * Do a quick line-level diff on both strings, then rediff the parts for - * greater accuracy. - * This speedup can produce non-minimal diffs. - * @param {string} text1 Old string to be diffed. - * @param {string} text2 New string to be diffed. - * @param {number} deadline Time when the diff should be complete by. - * @return {!Array.} Array of diff tuples. - * @private - */ - DiffMatchPatch.prototype.diffLineMode = function( text1, text2, deadline ) { - var a, diffs, linearray, pointer, countInsert, - countDelete, textInsert, textDelete, j; - // Scan the text on a line-by-line basis first. - a = this.diffLinesToChars( text1, text2 ); - text1 = a.chars1; - text2 = a.chars2; - linearray = a.lineArray; - - diffs = this.DiffMain( text1, text2, false, deadline ); - - // Convert the diff back to original text. - this.diffCharsToLines( diffs, linearray ); - // Eliminate freak matches (e.g. blank lines) - this.diffCleanupSemantic( diffs ); - - // Rediff any replacement blocks, this time character-by-character. - // Add a dummy entry at the end. - diffs.push( [ DIFF_EQUAL, "" ] ); - pointer = 0; - countDelete = 0; - countInsert = 0; - textDelete = ""; - textInsert = ""; - while ( pointer < diffs.length ) { - switch ( diffs[ pointer ][ 0 ] ) { - case DIFF_INSERT: - countInsert++; - textInsert += diffs[ pointer ][ 1 ]; - break; - case DIFF_DELETE: - countDelete++; - textDelete += diffs[ pointer ][ 1 ]; - break; - case DIFF_EQUAL: - // Upon reaching an equality, check for prior redundancies. - if ( countDelete >= 1 && countInsert >= 1 ) { - // Delete the offending records and add the merged ones. - diffs.splice( pointer - countDelete - countInsert, - countDelete + countInsert ); - pointer = pointer - countDelete - countInsert; - a = this.DiffMain( textDelete, textInsert, false, deadline ); - for ( j = a.length - 1; j >= 0; j-- ) { - diffs.splice( pointer, 0, a[ j ] ); - } - pointer = pointer + a.length; - } - countInsert = 0; - countDelete = 0; - textDelete = ""; - textInsert = ""; - break; - } - pointer++; - } - diffs.pop(); // Remove the dummy entry at the end. - - return diffs; - }; - - /** - * Find the 'middle snake' of a diff, split the problem in two - * and return the recursively constructed diff. - * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations. - * @param {string} text1 Old string to be diffed. - * @param {string} text2 New string to be diffed. - * @param {number} deadline Time at which to bail if not yet complete. - * @return {!Array.} Array of diff tuples. - * @private - */ - DiffMatchPatch.prototype.diffBisect = function( text1, text2, deadline ) { - var text1Length, text2Length, maxD, vOffset, vLength, - v1, v2, x, delta, front, k1start, k1end, k2start, - k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2; - // Cache the text lengths to prevent multiple calls. - text1Length = text1.length; - text2Length = text2.length; - maxD = Math.ceil( ( text1Length + text2Length ) / 2 ); - vOffset = maxD; - vLength = 2 * maxD; - v1 = new Array( vLength ); - v2 = new Array( vLength ); - // Setting all elements to -1 is faster in Chrome & Firefox than mixing - // integers and undefined. - for ( x = 0; x < vLength; x++ ) { - v1[ x ] = -1; - v2[ x ] = -1; - } - v1[ vOffset + 1 ] = 0; - v2[ vOffset + 1 ] = 0; - delta = text1Length - text2Length; - // If the total number of characters is odd, then the front path will collide - // with the reverse path. - front = ( delta % 2 !== 0 ); - // Offsets for start and end of k loop. - // Prevents mapping of space beyond the grid. - k1start = 0; - k1end = 0; - k2start = 0; - k2end = 0; - for ( d = 0; d < maxD; d++ ) { - // Bail out if deadline is reached. - if ( ( new Date() ).getTime() > deadline ) { - break; - } - - // Walk the front path one step. - for ( k1 = -d + k1start; k1 <= d - k1end; k1 += 2 ) { - k1Offset = vOffset + k1; - if ( k1 === -d || ( k1 !== d && v1[ k1Offset - 1 ] < v1[ k1Offset + 1 ] ) ) { - x1 = v1[ k1Offset + 1 ]; - } else { - x1 = v1[ k1Offset - 1 ] + 1; - } - y1 = x1 - k1; - while ( x1 < text1Length && y1 < text2Length && - text1.charAt( x1 ) === text2.charAt( y1 ) ) { - x1++; - y1++; - } - v1[ k1Offset ] = x1; - if ( x1 > text1Length ) { - // Ran off the right of the graph. - k1end += 2; - } else if ( y1 > text2Length ) { - // Ran off the bottom of the graph. - k1start += 2; - } else if ( front ) { - k2Offset = vOffset + delta - k1; - if ( k2Offset >= 0 && k2Offset < vLength && v2[ k2Offset ] !== -1 ) { - // Mirror x2 onto top-left coordinate system. - x2 = text1Length - v2[ k2Offset ]; - if ( x1 >= x2 ) { - // Overlap detected. - return this.diffBisectSplit( text1, text2, x1, y1, deadline ); - } - } - } - } - - // Walk the reverse path one step. - for ( k2 = -d + k2start; k2 <= d - k2end; k2 += 2 ) { - k2Offset = vOffset + k2; - if ( k2 === -d || ( k2 !== d && v2[ k2Offset - 1 ] < v2[ k2Offset + 1 ] ) ) { - x2 = v2[ k2Offset + 1 ]; - } else { - x2 = v2[ k2Offset - 1 ] + 1; - } - y2 = x2 - k2; - while ( x2 < text1Length && y2 < text2Length && - text1.charAt( text1Length - x2 - 1 ) === - text2.charAt( text2Length - y2 - 1 ) ) { - x2++; - y2++; - } - v2[ k2Offset ] = x2; - if ( x2 > text1Length ) { - // Ran off the left of the graph. - k2end += 2; - } else if ( y2 > text2Length ) { - // Ran off the top of the graph. - k2start += 2; - } else if ( !front ) { - k1Offset = vOffset + delta - k2; - if ( k1Offset >= 0 && k1Offset < vLength && v1[ k1Offset ] !== -1 ) { - x1 = v1[ k1Offset ]; - y1 = vOffset + x1 - k1Offset; - // Mirror x2 onto top-left coordinate system. - x2 = text1Length - x2; - if ( x1 >= x2 ) { - // Overlap detected. - return this.diffBisectSplit( text1, text2, x1, y1, deadline ); - } - } - } - } - } - // Diff took too long and hit the deadline or - // number of diffs equals number of characters, no commonality at all. - return [ - [ DIFF_DELETE, text1 ], - [ DIFF_INSERT, text2 ] - ]; - }; - - /** - * Given the location of the 'middle snake', split the diff in two parts - * and recurse. - * @param {string} text1 Old string to be diffed. - * @param {string} text2 New string to be diffed. - * @param {number} x Index of split point in text1. - * @param {number} y Index of split point in text2. - * @param {number} deadline Time at which to bail if not yet complete. - * @return {!Array.} Array of diff tuples. - * @private - */ - DiffMatchPatch.prototype.diffBisectSplit = function( text1, text2, x, y, deadline ) { - var text1a, text1b, text2a, text2b, diffs, diffsb; - text1a = text1.substring( 0, x ); - text2a = text2.substring( 0, y ); - text1b = text1.substring( x ); - text2b = text2.substring( y ); - - // Compute both diffs serially. - diffs = this.DiffMain( text1a, text2a, false, deadline ); - diffsb = this.DiffMain( text1b, text2b, false, deadline ); - - return diffs.concat( diffsb ); - }; - - /** - * Reduce the number of edits by eliminating semantically trivial equalities. - * @param {!Array.} diffs Array of diff tuples. - */ - DiffMatchPatch.prototype.diffCleanupSemantic = function( diffs ) { - var changes, equalities, equalitiesLength, lastequality, - pointer, lengthInsertions2, lengthDeletions2, lengthInsertions1, - lengthDeletions1, deletion, insertion, overlapLength1, overlapLength2; - changes = false; - equalities = []; // Stack of indices where equalities are found. - equalitiesLength = 0; // Keeping our own length var is faster in JS. - /** @type {?string} */ - lastequality = null; - // Always equal to diffs[equalities[equalitiesLength - 1]][1] - pointer = 0; // Index of current position. - // Number of characters that changed prior to the equality. - lengthInsertions1 = 0; - lengthDeletions1 = 0; - // Number of characters that changed after the equality. - lengthInsertions2 = 0; - lengthDeletions2 = 0; - while ( pointer < diffs.length ) { - if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) { // Equality found. - equalities[ equalitiesLength++ ] = pointer; - lengthInsertions1 = lengthInsertions2; - lengthDeletions1 = lengthDeletions2; - lengthInsertions2 = 0; - lengthDeletions2 = 0; - lastequality = diffs[ pointer ][ 1 ]; - } else { // An insertion or deletion. - if ( diffs[ pointer ][ 0 ] === DIFF_INSERT ) { - lengthInsertions2 += diffs[ pointer ][ 1 ].length; - } else { - lengthDeletions2 += diffs[ pointer ][ 1 ].length; - } - // Eliminate an equality that is smaller or equal to the edits on both - // sides of it. - if ( lastequality && ( lastequality.length <= - Math.max( lengthInsertions1, lengthDeletions1 ) ) && - ( lastequality.length <= Math.max( lengthInsertions2, - lengthDeletions2 ) ) ) { - - // Duplicate record. - diffs.splice( - equalities[ equalitiesLength - 1 ], - 0, - [ DIFF_DELETE, lastequality ] - ); - - // Change second copy to insert. - diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT; - - // Throw away the equality we just deleted. - equalitiesLength--; - - // Throw away the previous equality (it needs to be reevaluated). - equalitiesLength--; - pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1; - - // Reset the counters. - lengthInsertions1 = 0; - lengthDeletions1 = 0; - lengthInsertions2 = 0; - lengthDeletions2 = 0; - lastequality = null; - changes = true; - } - } - pointer++; - } - - // Normalize the diff. - if ( changes ) { - this.diffCleanupMerge( diffs ); - } - - // Find any overlaps between deletions and insertions. - // e.g: abcxxxxxxdef - // -> abcxxxdef - // e.g: xxxabcdefxxx - // -> defxxxabc - // Only extract an overlap if it is as big as the edit ahead or behind it. - pointer = 1; - while ( pointer < diffs.length ) { - if ( diffs[ pointer - 1 ][ 0 ] === DIFF_DELETE && - diffs[ pointer ][ 0 ] === DIFF_INSERT ) { - deletion = diffs[ pointer - 1 ][ 1 ]; - insertion = diffs[ pointer ][ 1 ]; - overlapLength1 = this.diffCommonOverlap( deletion, insertion ); - overlapLength2 = this.diffCommonOverlap( insertion, deletion ); - if ( overlapLength1 >= overlapLength2 ) { - if ( overlapLength1 >= deletion.length / 2 || - overlapLength1 >= insertion.length / 2 ) { - // Overlap found. Insert an equality and trim the surrounding edits. - diffs.splice( - pointer, - 0, - [ DIFF_EQUAL, insertion.substring( 0, overlapLength1 ) ] - ); - diffs[ pointer - 1 ][ 1 ] = - deletion.substring( 0, deletion.length - overlapLength1 ); - diffs[ pointer + 1 ][ 1 ] = insertion.substring( overlapLength1 ); - pointer++; - } - } else { - if ( overlapLength2 >= deletion.length / 2 || - overlapLength2 >= insertion.length / 2 ) { - - // Reverse overlap found. - // Insert an equality and swap and trim the surrounding edits. - diffs.splice( - pointer, - 0, - [ DIFF_EQUAL, deletion.substring( 0, overlapLength2 ) ] - ); - - diffs[ pointer - 1 ][ 0 ] = DIFF_INSERT; - diffs[ pointer - 1 ][ 1 ] = - insertion.substring( 0, insertion.length - overlapLength2 ); - diffs[ pointer + 1 ][ 0 ] = DIFF_DELETE; - diffs[ pointer + 1 ][ 1 ] = - deletion.substring( overlapLength2 ); - pointer++; - } - } - pointer++; - } - pointer++; - } - }; - - /** - * Determine if the suffix of one string is the prefix of another. - * @param {string} text1 First string. - * @param {string} text2 Second string. - * @return {number} The number of characters common to the end of the first - * string and the start of the second string. - * @private - */ - DiffMatchPatch.prototype.diffCommonOverlap = function( text1, text2 ) { - var text1Length, text2Length, textLength, - best, length, pattern, found; - // Cache the text lengths to prevent multiple calls. - text1Length = text1.length; - text2Length = text2.length; - // Eliminate the null case. - if ( text1Length === 0 || text2Length === 0 ) { - return 0; - } - // Truncate the longer string. - if ( text1Length > text2Length ) { - text1 = text1.substring( text1Length - text2Length ); - } else if ( text1Length < text2Length ) { - text2 = text2.substring( 0, text1Length ); - } - textLength = Math.min( text1Length, text2Length ); - // Quick check for the worst case. - if ( text1 === text2 ) { - return textLength; - } - - // Start by looking for a single character match - // and increase length until no match is found. - // Performance analysis: http://neil.fraser.name/news/2010/11/04/ - best = 0; - length = 1; - while ( true ) { - pattern = text1.substring( textLength - length ); - found = text2.indexOf( pattern ); - if ( found === -1 ) { - return best; - } - length += found; - if ( found === 0 || text1.substring( textLength - length ) === - text2.substring( 0, length ) ) { - best = length; - length++; - } - } - }; - - /** - * Split two texts into an array of strings. Reduce the texts to a string of - * hashes where each Unicode character represents one line. - * @param {string} text1 First string. - * @param {string} text2 Second string. - * @return {{chars1: string, chars2: string, lineArray: !Array.}} - * An object containing the encoded text1, the encoded text2 and - * the array of unique strings. - * The zeroth element of the array of unique strings is intentionally blank. - * @private - */ - DiffMatchPatch.prototype.diffLinesToChars = function( text1, text2 ) { - var lineArray, lineHash, chars1, chars2; - lineArray = []; // e.g. lineArray[4] === 'Hello\n' - lineHash = {}; // e.g. lineHash['Hello\n'] === 4 - - // '\x00' is a valid character, but various debuggers don't like it. - // So we'll insert a junk entry to avoid generating a null character. - lineArray[ 0 ] = ""; - - /** - * Split a text into an array of strings. Reduce the texts to a string of - * hashes where each Unicode character represents one line. - * Modifies linearray and linehash through being a closure. - * @param {string} text String to encode. - * @return {string} Encoded string. - * @private - */ - function diffLinesToCharsMunge( text ) { - var chars, lineStart, lineEnd, lineArrayLength, line; - chars = ""; - // Walk the text, pulling out a substring for each line. - // text.split('\n') would would temporarily double our memory footprint. - // Modifying text would create many large strings to garbage collect. - lineStart = 0; - lineEnd = -1; - // Keeping our own length variable is faster than looking it up. - lineArrayLength = lineArray.length; - while ( lineEnd < text.length - 1 ) { - lineEnd = text.indexOf( "\n", lineStart ); - if ( lineEnd === -1 ) { - lineEnd = text.length - 1; - } - line = text.substring( lineStart, lineEnd + 1 ); - lineStart = lineEnd + 1; - - if ( lineHash.hasOwnProperty ? lineHash.hasOwnProperty( line ) : - ( lineHash[ line ] !== undefined ) ) { - chars += String.fromCharCode( lineHash[ line ] ); - } else { - chars += String.fromCharCode( lineArrayLength ); - lineHash[ line ] = lineArrayLength; - lineArray[ lineArrayLength++ ] = line; - } - } - return chars; - } - - chars1 = diffLinesToCharsMunge( text1 ); - chars2 = diffLinesToCharsMunge( text2 ); - return { - chars1: chars1, - chars2: chars2, - lineArray: lineArray - }; - }; - - /** - * Rehydrate the text in a diff from a string of line hashes to real lines of - * text. - * @param {!Array.} diffs Array of diff tuples. - * @param {!Array.} lineArray Array of unique strings. - * @private - */ - DiffMatchPatch.prototype.diffCharsToLines = function( diffs, lineArray ) { - var x, chars, text, y; - for ( x = 0; x < diffs.length; x++ ) { - chars = diffs[ x ][ 1 ]; - text = []; - for ( y = 0; y < chars.length; y++ ) { - text[ y ] = lineArray[ chars.charCodeAt( y ) ]; - } - diffs[ x ][ 1 ] = text.join( "" ); - } - }; - - /** - * Reorder and merge like edit sections. Merge equalities. - * Any edit section can move as long as it doesn't cross an equality. - * @param {!Array.} diffs Array of diff tuples. - */ - DiffMatchPatch.prototype.diffCleanupMerge = function( diffs ) { - var pointer, countDelete, countInsert, textInsert, textDelete, - commonlength, changes, diffPointer, position; - diffs.push( [ DIFF_EQUAL, "" ] ); // Add a dummy entry at the end. - pointer = 0; - countDelete = 0; - countInsert = 0; - textDelete = ""; - textInsert = ""; - commonlength; - while ( pointer < diffs.length ) { - switch ( diffs[ pointer ][ 0 ] ) { - case DIFF_INSERT: - countInsert++; - textInsert += diffs[ pointer ][ 1 ]; - pointer++; - break; - case DIFF_DELETE: - countDelete++; - textDelete += diffs[ pointer ][ 1 ]; - pointer++; - break; - case DIFF_EQUAL: - // Upon reaching an equality, check for prior redundancies. - if ( countDelete + countInsert > 1 ) { - if ( countDelete !== 0 && countInsert !== 0 ) { - // Factor out any common prefixies. - commonlength = this.diffCommonPrefix( textInsert, textDelete ); - if ( commonlength !== 0 ) { - if ( ( pointer - countDelete - countInsert ) > 0 && - diffs[ pointer - countDelete - countInsert - 1 ][ 0 ] === - DIFF_EQUAL ) { - diffs[ pointer - countDelete - countInsert - 1 ][ 1 ] += - textInsert.substring( 0, commonlength ); - } else { - diffs.splice( 0, 0, [ DIFF_EQUAL, - textInsert.substring( 0, commonlength ) - ] ); - pointer++; - } - textInsert = textInsert.substring( commonlength ); - textDelete = textDelete.substring( commonlength ); - } - // Factor out any common suffixies. - commonlength = this.diffCommonSuffix( textInsert, textDelete ); - if ( commonlength !== 0 ) { - diffs[ pointer ][ 1 ] = textInsert.substring( textInsert.length - - commonlength ) + diffs[ pointer ][ 1 ]; - textInsert = textInsert.substring( 0, textInsert.length - - commonlength ); - textDelete = textDelete.substring( 0, textDelete.length - - commonlength ); - } - } - // Delete the offending records and add the merged ones. - if ( countDelete === 0 ) { - diffs.splice( pointer - countInsert, - countDelete + countInsert, [ DIFF_INSERT, textInsert ] ); - } else if ( countInsert === 0 ) { - diffs.splice( pointer - countDelete, - countDelete + countInsert, [ DIFF_DELETE, textDelete ] ); - } else { - diffs.splice( - pointer - countDelete - countInsert, - countDelete + countInsert, - [ DIFF_DELETE, textDelete ], [ DIFF_INSERT, textInsert ] - ); - } - pointer = pointer - countDelete - countInsert + - ( countDelete ? 1 : 0 ) + ( countInsert ? 1 : 0 ) + 1; - } else if ( pointer !== 0 && diffs[ pointer - 1 ][ 0 ] === DIFF_EQUAL ) { - - // Merge this equality with the previous one. - diffs[ pointer - 1 ][ 1 ] += diffs[ pointer ][ 1 ]; - diffs.splice( pointer, 1 ); - } else { - pointer++; - } - countInsert = 0; - countDelete = 0; - textDelete = ""; - textInsert = ""; - break; - } - } - if ( diffs[ diffs.length - 1 ][ 1 ] === "" ) { - diffs.pop(); // Remove the dummy entry at the end. - } - - // Second pass: look for single edits surrounded on both sides by equalities - // which can be shifted sideways to eliminate an equality. - // e.g: ABAC -> ABAC - changes = false; - pointer = 1; - - // Intentionally ignore the first and last element (don't need checking). - while ( pointer < diffs.length - 1 ) { - if ( diffs[ pointer - 1 ][ 0 ] === DIFF_EQUAL && - diffs[ pointer + 1 ][ 0 ] === DIFF_EQUAL ) { - - diffPointer = diffs[ pointer ][ 1 ]; - position = diffPointer.substring( - diffPointer.length - diffs[ pointer - 1 ][ 1 ].length - ); - - // This is a single edit surrounded by equalities. - if ( position === diffs[ pointer - 1 ][ 1 ] ) { - - // Shift the edit over the previous equality. - diffs[ pointer ][ 1 ] = diffs[ pointer - 1 ][ 1 ] + - diffs[ pointer ][ 1 ].substring( 0, diffs[ pointer ][ 1 ].length - - diffs[ pointer - 1 ][ 1 ].length ); - diffs[ pointer + 1 ][ 1 ] = - diffs[ pointer - 1 ][ 1 ] + diffs[ pointer + 1 ][ 1 ]; - diffs.splice( pointer - 1, 1 ); - changes = true; - } else if ( diffPointer.substring( 0, diffs[ pointer + 1 ][ 1 ].length ) === - diffs[ pointer + 1 ][ 1 ] ) { - - // Shift the edit over the next equality. - diffs[ pointer - 1 ][ 1 ] += diffs[ pointer + 1 ][ 1 ]; - diffs[ pointer ][ 1 ] = - diffs[ pointer ][ 1 ].substring( diffs[ pointer + 1 ][ 1 ].length ) + - diffs[ pointer + 1 ][ 1 ]; - diffs.splice( pointer + 1, 1 ); - changes = true; - } - } - pointer++; - } - // If shifts were made, the diff needs reordering and another shift sweep. - if ( changes ) { - this.diffCleanupMerge( diffs ); - } - }; - - return function( o, n ) { - var diff, output, text; - diff = new DiffMatchPatch(); - output = diff.DiffMain( o, n ); - diff.diffCleanupEfficiency( output ); - text = diff.diffPrettyHtml( output ); - - return text; - }; -}() ); - -// Get a reference to the global object, like window in browsers -}( (function() { - return this; -})() )); - -(function() { - -// Don't load the HTML Reporter on non-Browser environments -if ( typeof window === "undefined" || !window.document ) { - return; -} - -// Deprecated QUnit.init - Ref #530 -// Re-initialize the configuration options -QUnit.init = function() { - var tests, banner, result, qunit, - config = QUnit.config; - - config.stats = { all: 0, bad: 0 }; - config.moduleStats = { all: 0, bad: 0 }; - config.started = 0; - config.updateRate = 1000; - config.blocking = false; - config.autostart = true; - config.autorun = false; - config.filter = ""; - config.queue = []; - - // Return on non-browser environments - // This is necessary to not break on node tests - if ( typeof window === "undefined" ) { - return; - } - - qunit = id( "qunit" ); - if ( qunit ) { - qunit.innerHTML = - "

" + escapeText( document.title ) + "

" + - "

" + - "
" + - "

" + - "
    "; - } - - tests = id( "qunit-tests" ); - banner = id( "qunit-banner" ); - result = id( "qunit-testresult" ); - - if ( tests ) { - tests.innerHTML = ""; - } - - if ( banner ) { - banner.className = ""; - } - - if ( result ) { - result.parentNode.removeChild( result ); - } - - if ( tests ) { - result = document.createElement( "p" ); - result.id = "qunit-testresult"; - result.className = "result"; - tests.parentNode.insertBefore( result, tests ); - result.innerHTML = "Running...
     "; - } -}; - -var config = QUnit.config, - hasOwn = Object.prototype.hasOwnProperty, - defined = { - document: window.document !== undefined, - sessionStorage: (function() { - var x = "qunit-test-string"; - try { - sessionStorage.setItem( x, x ); - sessionStorage.removeItem( x ); - return true; - } catch ( e ) { - return false; - } - }()) - }, - modulesList = []; - -/** -* Escape text for attribute or text content. -*/ -function escapeText( s ) { - if ( !s ) { - return ""; - } - s = s + ""; - - // Both single quotes and double quotes (for attributes) - return s.replace( /['"<>&]/g, function( s ) { - switch ( s ) { - case "'": - return "'"; - case "\"": - return """; - case "<": - return "<"; - case ">": - return ">"; - case "&": - return "&"; - } - }); -} - -/** - * @param {HTMLElement} elem - * @param {string} type - * @param {Function} fn - */ -function addEvent( elem, type, fn ) { - if ( elem.addEventListener ) { - - // Standards-based browsers - elem.addEventListener( type, fn, false ); - } else if ( elem.attachEvent ) { - - // support: IE <9 - elem.attachEvent( "on" + type, function() { - var event = window.event; - if ( !event.target ) { - event.target = event.srcElement || document; - } - - fn.call( elem, event ); - }); - } -} - -/** - * @param {Array|NodeList} elems - * @param {string} type - * @param {Function} fn - */ -function addEvents( elems, type, fn ) { - var i = elems.length; - while ( i-- ) { - addEvent( elems[ i ], type, fn ); - } -} - -function hasClass( elem, name ) { - return ( " " + elem.className + " " ).indexOf( " " + name + " " ) >= 0; -} - -function addClass( elem, name ) { - if ( !hasClass( elem, name ) ) { - elem.className += ( elem.className ? " " : "" ) + name; - } -} - -function toggleClass( elem, name ) { - if ( hasClass( elem, name ) ) { - removeClass( elem, name ); - } else { - addClass( elem, name ); - } -} - -function removeClass( elem, name ) { - var set = " " + elem.className + " "; - - // Class name may appear multiple times - while ( set.indexOf( " " + name + " " ) >= 0 ) { - set = set.replace( " " + name + " ", " " ); - } - - // trim for prettiness - elem.className = typeof set.trim === "function" ? set.trim() : set.replace( /^\s+|\s+$/g, "" ); -} - -function id( name ) { - return defined.document && document.getElementById && document.getElementById( name ); -} - -function getUrlConfigHtml() { - var i, j, val, - escaped, escapedTooltip, - selection = false, - len = config.urlConfig.length, - urlConfigHtml = ""; - - for ( i = 0; i < len; i++ ) { - val = config.urlConfig[ i ]; - if ( typeof val === "string" ) { - val = { - id: val, - label: val - }; - } - - escaped = escapeText( val.id ); - escapedTooltip = escapeText( val.tooltip ); - - if ( config[ val.id ] === undefined ) { - config[ val.id ] = QUnit.urlParams[ val.id ]; - } - - if ( !val.value || typeof val.value === "string" ) { - urlConfigHtml += ""; - } else { - urlConfigHtml += ""; - } - } - - return urlConfigHtml; -} - -// Handle "click" events on toolbar checkboxes and "change" for select menus. -// Updates the URL with the new state of `config.urlConfig` values. -function toolbarChanged() { - var updatedUrl, value, - field = this, - params = {}; - - // Detect if field is a select menu or a checkbox - if ( "selectedIndex" in field ) { - value = field.options[ field.selectedIndex ].value || undefined; - } else { - value = field.checked ? ( field.defaultValue || true ) : undefined; - } - - params[ field.name ] = value; - updatedUrl = setUrl( params ); - - if ( "hidepassed" === field.name && "replaceState" in window.history ) { - config[ field.name ] = value || false; - if ( value ) { - addClass( id( "qunit-tests" ), "hidepass" ); - } else { - removeClass( id( "qunit-tests" ), "hidepass" ); - } - - // It is not necessary to refresh the whole page - window.history.replaceState( null, "", updatedUrl ); - } else { - window.location = updatedUrl; - } -} - -function setUrl( params ) { - var key, - querystring = "?"; - - params = QUnit.extend( QUnit.extend( {}, QUnit.urlParams ), params ); - - for ( key in params ) { - if ( hasOwn.call( params, key ) ) { - if ( params[ key ] === undefined ) { - continue; - } - querystring += encodeURIComponent( key ); - if ( params[ key ] !== true ) { - querystring += "=" + encodeURIComponent( params[ key ] ); - } - querystring += "&"; - } - } - return location.protocol + "//" + location.host + - location.pathname + querystring.slice( 0, -1 ); -} - -function applyUrlParams() { - var selectedModule, - modulesList = id( "qunit-modulefilter" ), - filter = id( "qunit-filter-input" ).value; - - selectedModule = modulesList ? - decodeURIComponent( modulesList.options[ modulesList.selectedIndex ].value ) : - undefined; - - window.location = setUrl({ - module: ( selectedModule === "" ) ? undefined : selectedModule, - filter: ( filter === "" ) ? undefined : filter, - - // Remove testId filter - testId: undefined - }); -} - -function toolbarUrlConfigContainer() { - var urlConfigContainer = document.createElement( "span" ); - - urlConfigContainer.innerHTML = getUrlConfigHtml(); - addClass( urlConfigContainer, "qunit-url-config" ); - - // For oldIE support: - // * Add handlers to the individual elements instead of the container - // * Use "click" instead of "change" for checkboxes - addEvents( urlConfigContainer.getElementsByTagName( "input" ), "click", toolbarChanged ); - addEvents( urlConfigContainer.getElementsByTagName( "select" ), "change", toolbarChanged ); - - return urlConfigContainer; -} - -function toolbarLooseFilter() { - var filter = document.createElement( "form" ), - label = document.createElement( "label" ), - input = document.createElement( "input" ), - button = document.createElement( "button" ); - - addClass( filter, "qunit-filter" ); - - label.innerHTML = "Filter: "; - - input.type = "text"; - input.value = config.filter || ""; - input.name = "filter"; - input.id = "qunit-filter-input"; - - button.innerHTML = "Go"; - - label.appendChild( input ); - - filter.appendChild( label ); - filter.appendChild( button ); - addEvent( filter, "submit", function( ev ) { - applyUrlParams(); - - if ( ev && ev.preventDefault ) { - ev.preventDefault(); - } - - return false; - }); - - return filter; -} - -function toolbarModuleFilterHtml() { - var i, - moduleFilterHtml = ""; - - if ( !modulesList.length ) { - return false; - } - - modulesList.sort(function( a, b ) { - return a.localeCompare( b ); - }); - - moduleFilterHtml += "" + - ""; - - return moduleFilterHtml; -} - -function toolbarModuleFilter() { - var toolbar = id( "qunit-testrunner-toolbar" ), - moduleFilter = document.createElement( "span" ), - moduleFilterHtml = toolbarModuleFilterHtml(); - - if ( !toolbar || !moduleFilterHtml ) { - return false; - } - - moduleFilter.setAttribute( "id", "qunit-modulefilter-container" ); - moduleFilter.innerHTML = moduleFilterHtml; - - addEvent( moduleFilter.lastChild, "change", applyUrlParams ); - - toolbar.appendChild( moduleFilter ); -} - -function appendToolbar() { - var toolbar = id( "qunit-testrunner-toolbar" ); - - if ( toolbar ) { - toolbar.appendChild( toolbarUrlConfigContainer() ); - toolbar.appendChild( toolbarLooseFilter() ); - } -} - -function appendHeader() { - var header = id( "qunit-header" ); - - if ( header ) { - header.innerHTML = "" + header.innerHTML + " "; - } -} - -function appendBanner() { - var banner = id( "qunit-banner" ); - - if ( banner ) { - banner.className = ""; - } -} - -function appendTestResults() { - var tests = id( "qunit-tests" ), - result = id( "qunit-testresult" ); - - if ( result ) { - result.parentNode.removeChild( result ); - } - - if ( tests ) { - tests.innerHTML = ""; - result = document.createElement( "p" ); - result.id = "qunit-testresult"; - result.className = "result"; - tests.parentNode.insertBefore( result, tests ); - result.innerHTML = "Running...
     "; - } -} - -function storeFixture() { - var fixture = id( "qunit-fixture" ); - if ( fixture ) { - config.fixture = fixture.innerHTML; - } -} - -function appendUserAgent() { - var userAgent = id( "qunit-userAgent" ); - - if ( userAgent ) { - userAgent.innerHTML = ""; - userAgent.appendChild( - document.createTextNode( - "QUnit " + QUnit.version + "; " + navigator.userAgent - ) - ); - } -} - -function appendTestsList( modules ) { - var i, l, x, z, test, moduleObj; - - for ( i = 0, l = modules.length; i < l; i++ ) { - moduleObj = modules[ i ]; - - if ( moduleObj.name ) { - modulesList.push( moduleObj.name ); - } - - for ( x = 0, z = moduleObj.tests.length; x < z; x++ ) { - test = moduleObj.tests[ x ]; - - appendTest( test.name, test.testId, moduleObj.name ); - } - } -} - -function appendTest( name, testId, moduleName ) { - var title, rerunTrigger, testBlock, assertList, - tests = id( "qunit-tests" ); - - if ( !tests ) { - return; - } - - title = document.createElement( "strong" ); - title.innerHTML = getNameHtml( name, moduleName ); - - rerunTrigger = document.createElement( "a" ); - rerunTrigger.innerHTML = "Rerun"; - rerunTrigger.href = setUrl({ testId: testId }); - - testBlock = document.createElement( "li" ); - testBlock.appendChild( title ); - testBlock.appendChild( rerunTrigger ); - testBlock.id = "qunit-test-output-" + testId; - - assertList = document.createElement( "ol" ); - assertList.className = "qunit-assert-list"; - - testBlock.appendChild( assertList ); - - tests.appendChild( testBlock ); -} - -// HTML Reporter initialization and load -QUnit.begin(function( details ) { - var qunit = id( "qunit" ); - - // Fixture is the only one necessary to run without the #qunit element - storeFixture(); - - if ( qunit ) { - qunit.innerHTML = - "

    " + escapeText( document.title ) + "

    " + - "

    " + - "
    " + - "

    " + - "
      "; - } - - appendHeader(); - appendBanner(); - appendTestResults(); - appendUserAgent(); - appendToolbar(); - appendTestsList( details.modules ); - toolbarModuleFilter(); - - if ( qunit && config.hidepassed ) { - addClass( qunit.lastChild, "hidepass" ); - } -}); - -QUnit.done(function( details ) { - var i, key, - banner = id( "qunit-banner" ), - tests = id( "qunit-tests" ), - html = [ - "Tests completed in ", - details.runtime, - " milliseconds.
      ", - "", - details.passed, - " assertions of ", - details.total, - " passed, ", - details.failed, - " failed." - ].join( "" ); - - if ( banner ) { - banner.className = details.failed ? "qunit-fail" : "qunit-pass"; - } - - if ( tests ) { - id( "qunit-testresult" ).innerHTML = html; - } - - if ( config.altertitle && defined.document && document.title ) { - - // show ✖ for good, ✔ for bad suite result in title - // use escape sequences in case file gets loaded with non-utf-8-charset - document.title = [ - ( details.failed ? "\u2716" : "\u2714" ), - document.title.replace( /^[\u2714\u2716] /i, "" ) - ].join( " " ); - } - - // clear own sessionStorage items if all tests passed - if ( config.reorder && defined.sessionStorage && details.failed === 0 ) { - for ( i = 0; i < sessionStorage.length; i++ ) { - key = sessionStorage.key( i++ ); - if ( key.indexOf( "qunit-test-" ) === 0 ) { - sessionStorage.removeItem( key ); - } - } - } - - // scroll back to top to show results - if ( config.scrolltop && window.scrollTo ) { - window.scrollTo( 0, 0 ); - } -}); - -function getNameHtml( name, module ) { - var nameHtml = ""; - - if ( module ) { - nameHtml = "" + escapeText( module ) + ": "; - } - - nameHtml += "" + escapeText( name ) + ""; - - return nameHtml; -} - -QUnit.testStart(function( details ) { - var running, testBlock, bad; - - testBlock = id( "qunit-test-output-" + details.testId ); - if ( testBlock ) { - testBlock.className = "running"; - } else { - - // Report later registered tests - appendTest( details.name, details.testId, details.module ); - } - - running = id( "qunit-testresult" ); - if ( running ) { - bad = QUnit.config.reorder && defined.sessionStorage && - +sessionStorage.getItem( "qunit-test-" + details.module + "-" + details.name ); - - running.innerHTML = ( bad ? - "Rerunning previously failed test:
      " : - "Running:
      " ) + - getNameHtml( details.name, details.module ); - } - -}); - -function stripHtml( string ) { - // strip tags, html entity and whitespaces - return string.replace(/<\/?[^>]+(>|$)/g, "").replace(/\"/g, "").replace(/\s+/g, ""); -} - -QUnit.log(function( details ) { - var assertList, assertLi, - message, expected, actual, diff, - showDiff = false, - testItem = id( "qunit-test-output-" + details.testId ); - - if ( !testItem ) { - return; - } - - message = escapeText( details.message ) || ( details.result ? "okay" : "failed" ); - message = "" + message + ""; - message += "@ " + details.runtime + " ms"; - - // pushFailure doesn't provide details.expected - // when it calls, it's implicit to also not show expected and diff stuff - // Also, we need to check details.expected existence, as it can exist and be undefined - if ( !details.result && hasOwn.call( details, "expected" ) ) { - if ( details.negative ) { - expected = escapeText( "NOT " + QUnit.dump.parse( details.expected ) ); - } else { - expected = escapeText( QUnit.dump.parse( details.expected ) ); - } - - actual = escapeText( QUnit.dump.parse( details.actual ) ); - message += ""; - - if ( actual !== expected ) { - - message += ""; - - // Don't show diff if actual or expected are booleans - if ( !( /^(true|false)$/.test( actual ) ) && - !( /^(true|false)$/.test( expected ) ) ) { - diff = QUnit.diff( expected, actual ); - showDiff = stripHtml( diff ).length !== - stripHtml( expected ).length + - stripHtml( actual ).length; - } - - // Don't show diff if expected and actual are totally different - if ( showDiff ) { - message += ""; - } - } else if ( expected.indexOf( "[object Array]" ) !== -1 || - expected.indexOf( "[object Object]" ) !== -1 ) { - message += ""; - } - - if ( details.source ) { - message += ""; - } - - message += "
      Expected:
      " +
      -			expected +
      -			"
      Result:
      " +
      -				actual + "
      Diff:
      " +
      -					diff + "
      Message: " + - "Diff suppressed as the depth of object is more than current max depth (" + - QUnit.config.maxDepth + ").

      Hint: Use QUnit.dump.maxDepth to " + - " run with a higher max depth or " + - "Rerun without max depth.

      Source:
      " +
      -				escapeText( details.source ) + "
      "; - - // this occours when pushFailure is set and we have an extracted stack trace - } else if ( !details.result && details.source ) { - message += "" + - "" + - "
      Source:
      " +
      -			escapeText( details.source ) + "
      "; - } - - assertList = testItem.getElementsByTagName( "ol" )[ 0 ]; - - assertLi = document.createElement( "li" ); - assertLi.className = details.result ? "pass" : "fail"; - assertLi.innerHTML = message; - assertList.appendChild( assertLi ); -}); - -QUnit.testDone(function( details ) { - var testTitle, time, testItem, assertList, - good, bad, testCounts, skipped, sourceName, - tests = id( "qunit-tests" ); - - if ( !tests ) { - return; - } - - testItem = id( "qunit-test-output-" + details.testId ); - - assertList = testItem.getElementsByTagName( "ol" )[ 0 ]; - - good = details.passed; - bad = details.failed; - - // store result when possible - if ( config.reorder && defined.sessionStorage ) { - if ( bad ) { - sessionStorage.setItem( "qunit-test-" + details.module + "-" + details.name, bad ); - } else { - sessionStorage.removeItem( "qunit-test-" + details.module + "-" + details.name ); - } - } - - if ( bad === 0 ) { - addClass( assertList, "qunit-collapsed" ); - } - - // testItem.firstChild is the test name - testTitle = testItem.firstChild; - - testCounts = bad ? - "" + bad + ", " + "" + good + ", " : - ""; - - testTitle.innerHTML += " (" + testCounts + - details.assertions.length + ")"; - - if ( details.skipped ) { - testItem.className = "skipped"; - skipped = document.createElement( "em" ); - skipped.className = "qunit-skipped-label"; - skipped.innerHTML = "skipped"; - testItem.insertBefore( skipped, testTitle ); - } else { - addEvent( testTitle, "click", function() { - toggleClass( assertList, "qunit-collapsed" ); - }); - - testItem.className = bad ? "fail" : "pass"; - - time = document.createElement( "span" ); - time.className = "runtime"; - time.innerHTML = details.runtime + " ms"; - testItem.insertBefore( time, assertList ); - } - - // Show the source of the test when showing assertions - if ( details.source ) { - sourceName = document.createElement( "p" ); - sourceName.innerHTML = "Source: " + details.source; - addClass( sourceName, "qunit-source" ); - if ( bad === 0 ) { - addClass( sourceName, "qunit-collapsed" ); - } - addEvent( testTitle, "click", function() { - toggleClass( sourceName, "qunit-collapsed" ); - }); - testItem.appendChild( sourceName ); - } -}); - -if ( defined.document ) { - - // Avoid readyState issue with phantomjs - // Ref: #818 - var notPhantom = ( function( p ) { - return !( p && p.version && p.version.major > 0 ); - } )( window.phantom ); - - if ( notPhantom && document.readyState === "complete" ) { - QUnit.load(); - } else { - addEvent( window, "load", QUnit.load ); - } -} else { - config.pageLoaded = true; - config.autorun = true; -} - -})(); diff --git a/PlayFabTestingExample/index.html b/PlayFabTestingExample/index.html index 493e8555..de5d2c5c 100644 --- a/PlayFabTestingExample/index.html +++ b/PlayFabTestingExample/index.html @@ -12,9 +12,14 @@ - + + + + + + diff --git a/PlayFabTestingExample/src/PlayFab/PlayFabAdminApi.js b/PlayFabTestingExample/src/PlayFab/PlayFabAdminApi.js index ceaf756d..6968a967 100644 --- a/PlayFabTestingExample/src/PlayFab/PlayFabAdminApi.js +++ b/PlayFabTestingExample/src/PlayFab/PlayFabAdminApi.js @@ -21,7 +21,10 @@ if(!PlayFab.settings) { if(!PlayFab._internalSettings) { PlayFab._internalSettings = { entityToken: null, - sdkVersion: "1.27.180716", + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, sessionTicket: null, productionServerUrl: ".playfabapi.com", errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", @@ -47,7 +50,7 @@ if(!PlayFab._internalSettings) { } }, - ExecuteRequest: function (completeUrl, request, authkey, authValue, callback, customData, extraHeaders) { + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { if (callback != null && typeof (callback) != "function") throw "Callback must be null of a function"; @@ -57,6 +60,21 @@ if(!PlayFab._internalSettings) { var startTime = new Date(); var requestBody = JSON.stringify(request); + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + var xhr = new XMLHttpRequest(); // window.console.log("URL: " + completeUrl); xhr.open("POST", completeUrl, true); @@ -125,8 +143,8 @@ if(!PlayFab._internalSettings) { } } -PlayFab.buildIdentifier = "jbuild_javascriptsdk_0"; -PlayFab.sdkVersion = "1.27.180716"; +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; PlayFab.GenerateErrorReport = function (error) { if (error == null) return ""; diff --git a/PlayFabTestingExample/src/PlayFab/PlayFabAuthenticationApi.js b/PlayFabTestingExample/src/PlayFab/PlayFabAuthenticationApi.js new file mode 100644 index 00000000..aca652e4 --- /dev/null +++ b/PlayFabTestingExample/src/PlayFab/PlayFabAuthenticationApi.js @@ -0,0 +1,179 @@ +/// + +var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; + +if(!PlayFab.settings) { + PlayFab.settings = { + titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) + developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website) + advertisingIdType: null, + advertisingIdValue: null, + GlobalHeaderInjection: null, + + // disableAdvertising is provided for completeness, but changing it is not suggested + // Disabling this may prevent your advertising-related PlayFab marketplace partners from working correctly + disableAdvertising: false, + AD_TYPE_IDFA: "Idfa", + AD_TYPE_ANDROID_ID: "Adid" + } +} + +if(!PlayFab._internalSettings) { + PlayFab._internalSettings = { + entityToken: null, + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, + sessionTicket: null, + productionServerUrl: ".playfabapi.com", + errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", + errorLoggedIn: "Must be logged in to call this method", + errorEntityToken: "You must successfully call GetEntityToken before calling this", + errorSecretKey: "Must have PlayFab.settings.developerSecretKey set to call this method", + + GetServerUrl: function () { + return "https://" + PlayFab.settings.titleId + PlayFab._internalSettings.productionServerUrl; + }, + + InjectHeaders: function (xhr, headersObj) { + if (!headersObj) + return; + + for (var headerKey in headersObj) + { + try { + xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]); + } catch (e) { + console.log("Failed to append header: " + headerKey + " = " + headersObj[headerKey] + "Error: " + e); + } + } + }, + + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { + if (callback != null && typeof (callback) != "function") + throw "Callback must be null of a function"; + + if (request == null) + request = {}; + + var startTime = new Date(); + var requestBody = JSON.stringify(request); + + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + + var xhr = new XMLHttpRequest(); + // window.console.log("URL: " + completeUrl); + xhr.open("POST", completeUrl, true); + + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("X-PlayFabSDK", "JavaScriptSDK-" + PlayFab._internalSettings.sdkVersion); + if (authkey != null) + xhr.setRequestHeader(authkey, authValue); + PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection); + PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders); + + xhr.onloadend = function () { + if (callback == null) + return; + + var result; + try { + // window.console.log("parsing json result: " + xhr.responseText); + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + if (result.code === 200) + callback(result, null); + else + callback(null, result); + } + + xhr.onerror = function () { + if (callback == null) + return; + + var result; + try { + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + callback(null, result); + } + + xhr.send(requestBody); + } + } +} + +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; +PlayFab.GenerateErrorReport = function (error) { + if (error == null) + return ""; + var fullErrors = error.errorMessage; + for (var paramName in error.errorDetails) + for (var msgIdx in error.errorDetails[paramName]) + fullErrors += "\n" + paramName + ": " + error.errorDetails[paramName][msgIdx]; + return fullErrors; +}; + +PlayFab.AuthenticationApi = { + ForgetAllCredentials: function () { + PlayFab._internalSettings.sessionTicket = null; + PlayFab._internalSettings.entityToken = null; + }, + + GetEntityToken: function (request, callback, customData, extraHeaders) { + var authKey = null; var authValue = null; + if (!authKey && PlayFab._internalSettings.sessionTicket) { authKey = "X-Authorization"; authValue = PlayFab._internalSettings.sessionTicket; } + if (!authKey && PlayFab.settings.developerSecretKey) { authKey = "X-SecretKey"; authValue = PlayFab.settings.developerSecretKey; } + var overloadCallback = function (result, error) { + if (result != null && result.data.EntityToken != null) + PlayFab._internalSettings.entityToken = result.data.EntityToken; + if (callback != null && typeof (callback) == "function") + callback(result, error); + }; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Authentication/GetEntityToken", request, authKey, authValue, overloadCallback, customData, extraHeaders); + }, +}; + +var PlayFabAuthenticationSDK = PlayFab.AuthenticationApi; + diff --git a/PlayFabTestingExample/src/PlayFab/PlayFabClientApi.js b/PlayFabTestingExample/src/PlayFab/PlayFabClientApi.js index 53d6317f..6e08c731 100644 --- a/PlayFabTestingExample/src/PlayFab/PlayFabClientApi.js +++ b/PlayFabTestingExample/src/PlayFab/PlayFabClientApi.js @@ -21,7 +21,10 @@ if(!PlayFab.settings) { if(!PlayFab._internalSettings) { PlayFab._internalSettings = { entityToken: null, - sdkVersion: "1.27.180716", + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, sessionTicket: null, productionServerUrl: ".playfabapi.com", errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", @@ -47,7 +50,7 @@ if(!PlayFab._internalSettings) { } }, - ExecuteRequest: function (completeUrl, request, authkey, authValue, callback, customData, extraHeaders) { + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { if (callback != null && typeof (callback) != "function") throw "Callback must be null of a function"; @@ -57,6 +60,21 @@ if(!PlayFab._internalSettings) { var startTime = new Date(); var requestBody = JSON.stringify(request); + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + var xhr = new XMLHttpRequest(); // window.console.log("URL: " + completeUrl); xhr.open("POST", completeUrl, true); @@ -125,8 +143,8 @@ if(!PlayFab._internalSettings) { } } -PlayFab.buildIdentifier = "jbuild_javascriptsdk_0"; -PlayFab.sdkVersion = "1.27.180716"; +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; PlayFab.GenerateErrorReport = function (error) { if (error == null) return ""; @@ -364,6 +382,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromFacebookIDs", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + GetPlayFabIDsFromFacebookInstantGamesIds: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromFacebookInstantGamesIds", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + GetPlayFabIDsFromGameCenterIDs: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromGameCenterIDs", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); @@ -384,6 +407,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromKongregateIDs", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + GetPlayFabIDsFromNintendoSwitchDeviceIds: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromNintendoSwitchDeviceIds", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + GetPlayFabIDsFromSteamIDs: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/GetPlayFabIDsFromSteamIDs", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); @@ -487,6 +515,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkFacebookAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + LinkFacebookInstantGamesId: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkFacebookInstantGamesId", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + LinkGameCenterAccount: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkGameCenterAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); @@ -507,6 +540,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkKongregate", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + LinkNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkNintendoSwitchDeviceId", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + LinkSteamAccount: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LinkSteamAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); @@ -594,6 +632,24 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LoginWithFacebook", request, null, null, overloadCallback, customData, extraHeaders); }, + LoginWithFacebookInstantGamesId: function (request, callback, customData, extraHeaders) { + request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId; + var overloadCallback = function (result, error) { + if (result != null) { + if(result.data.SessionTicket != null) { + PlayFab._internalSettings.sessionTicket = result.data.SessionTicket; + } + if (result.data.EntityToken != null) { + PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken; + } + PlayFab.ClientApi._MultiStepClientLogin(result.data.SettingsForUser.NeedsAttribution); + } + if (callback != null && typeof (callback) == "function") + callback(result, error); + }; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LoginWithFacebookInstantGamesId", request, null, null, overloadCallback, customData, extraHeaders); + }, + LoginWithGameCenter: function (request, callback, customData, extraHeaders) { request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId; var overloadCallback = function (result, error) { @@ -666,6 +722,24 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LoginWithKongregate", request, null, null, overloadCallback, customData, extraHeaders); }, + LoginWithNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) { + request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId; + var overloadCallback = function (result, error) { + if (result != null) { + if(result.data.SessionTicket != null) { + PlayFab._internalSettings.sessionTicket = result.data.SessionTicket; + } + if (result.data.EntityToken != null) { + PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken; + } + PlayFab.ClientApi._MultiStepClientLogin(result.data.SettingsForUser.NeedsAttribution); + } + if (callback != null && typeof (callback) == "function") + callback(result, error); + }; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/LoginWithNintendoSwitchDeviceId", request, null, null, overloadCallback, customData, extraHeaders); + }, + LoginWithPlayFab: function (request, callback, customData, extraHeaders) { request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId; var overloadCallback = function (result, error) { @@ -878,6 +952,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkFacebookAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + UnlinkFacebookInstantGamesId: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkFacebookInstantGamesId", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + UnlinkGameCenterAccount: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkGameCenterAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); @@ -898,6 +977,11 @@ PlayFab.ClientApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkKongregate", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); }, + UnlinkNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkNintendoSwitchDeviceId", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); + }, + UnlinkSteamAccount: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.sessionTicket) throw PlayFab._internalSettings.errorLoggedIn; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Client/UnlinkSteamAccount", request, "X-Authorization", PlayFab._internalSettings.sessionTicket, callback, customData, extraHeaders); diff --git a/PlayFabTestingExample/src/PlayFab/PlayFabCloudScriptApi.js b/PlayFabTestingExample/src/PlayFab/PlayFabCloudScriptApi.js new file mode 100644 index 00000000..77e7adaa --- /dev/null +++ b/PlayFabTestingExample/src/PlayFab/PlayFabCloudScriptApi.js @@ -0,0 +1,171 @@ +/// + +var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; + +if(!PlayFab.settings) { + PlayFab.settings = { + titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) + developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website) + advertisingIdType: null, + advertisingIdValue: null, + GlobalHeaderInjection: null, + + // disableAdvertising is provided for completeness, but changing it is not suggested + // Disabling this may prevent your advertising-related PlayFab marketplace partners from working correctly + disableAdvertising: false, + AD_TYPE_IDFA: "Idfa", + AD_TYPE_ANDROID_ID: "Adid" + } +} + +if(!PlayFab._internalSettings) { + PlayFab._internalSettings = { + entityToken: null, + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, + sessionTicket: null, + productionServerUrl: ".playfabapi.com", + errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", + errorLoggedIn: "Must be logged in to call this method", + errorEntityToken: "You must successfully call GetEntityToken before calling this", + errorSecretKey: "Must have PlayFab.settings.developerSecretKey set to call this method", + + GetServerUrl: function () { + return "https://" + PlayFab.settings.titleId + PlayFab._internalSettings.productionServerUrl; + }, + + InjectHeaders: function (xhr, headersObj) { + if (!headersObj) + return; + + for (var headerKey in headersObj) + { + try { + xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]); + } catch (e) { + console.log("Failed to append header: " + headerKey + " = " + headersObj[headerKey] + "Error: " + e); + } + } + }, + + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { + if (callback != null && typeof (callback) != "function") + throw "Callback must be null of a function"; + + if (request == null) + request = {}; + + var startTime = new Date(); + var requestBody = JSON.stringify(request); + + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + + var xhr = new XMLHttpRequest(); + // window.console.log("URL: " + completeUrl); + xhr.open("POST", completeUrl, true); + + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("X-PlayFabSDK", "JavaScriptSDK-" + PlayFab._internalSettings.sdkVersion); + if (authkey != null) + xhr.setRequestHeader(authkey, authValue); + PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection); + PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders); + + xhr.onloadend = function () { + if (callback == null) + return; + + var result; + try { + // window.console.log("parsing json result: " + xhr.responseText); + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + if (result.code === 200) + callback(result, null); + else + callback(null, result); + } + + xhr.onerror = function () { + if (callback == null) + return; + + var result; + try { + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + callback(null, result); + } + + xhr.send(requestBody); + } + } +} + +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; +PlayFab.GenerateErrorReport = function (error) { + if (error == null) + return ""; + var fullErrors = error.errorMessage; + for (var paramName in error.errorDetails) + for (var msgIdx in error.errorDetails[paramName]) + fullErrors += "\n" + paramName + ": " + error.errorDetails[paramName][msgIdx]; + return fullErrors; +}; + +PlayFab.CloudScriptApi = { + ForgetAllCredentials: function () { + PlayFab._internalSettings.sessionTicket = null; + PlayFab._internalSettings.entityToken = null; + }, + + ExecuteEntityCloudScript: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/CloudScript/ExecuteEntityCloudScript", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, +}; + +var PlayFabCloudScriptSDK = PlayFab.CloudScriptApi; + diff --git a/PlayFabTestingExample/src/PlayFab/PlayFabDataApi.js b/PlayFabTestingExample/src/PlayFab/PlayFabDataApi.js new file mode 100644 index 00000000..0c49d90d --- /dev/null +++ b/PlayFabTestingExample/src/PlayFab/PlayFabDataApi.js @@ -0,0 +1,201 @@ +/// + +var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; + +if(!PlayFab.settings) { + PlayFab.settings = { + titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) + developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website) + advertisingIdType: null, + advertisingIdValue: null, + GlobalHeaderInjection: null, + + // disableAdvertising is provided for completeness, but changing it is not suggested + // Disabling this may prevent your advertising-related PlayFab marketplace partners from working correctly + disableAdvertising: false, + AD_TYPE_IDFA: "Idfa", + AD_TYPE_ANDROID_ID: "Adid" + } +} + +if(!PlayFab._internalSettings) { + PlayFab._internalSettings = { + entityToken: null, + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, + sessionTicket: null, + productionServerUrl: ".playfabapi.com", + errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", + errorLoggedIn: "Must be logged in to call this method", + errorEntityToken: "You must successfully call GetEntityToken before calling this", + errorSecretKey: "Must have PlayFab.settings.developerSecretKey set to call this method", + + GetServerUrl: function () { + return "https://" + PlayFab.settings.titleId + PlayFab._internalSettings.productionServerUrl; + }, + + InjectHeaders: function (xhr, headersObj) { + if (!headersObj) + return; + + for (var headerKey in headersObj) + { + try { + xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]); + } catch (e) { + console.log("Failed to append header: " + headerKey + " = " + headersObj[headerKey] + "Error: " + e); + } + } + }, + + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { + if (callback != null && typeof (callback) != "function") + throw "Callback must be null of a function"; + + if (request == null) + request = {}; + + var startTime = new Date(); + var requestBody = JSON.stringify(request); + + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + + var xhr = new XMLHttpRequest(); + // window.console.log("URL: " + completeUrl); + xhr.open("POST", completeUrl, true); + + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("X-PlayFabSDK", "JavaScriptSDK-" + PlayFab._internalSettings.sdkVersion); + if (authkey != null) + xhr.setRequestHeader(authkey, authValue); + PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection); + PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders); + + xhr.onloadend = function () { + if (callback == null) + return; + + var result; + try { + // window.console.log("parsing json result: " + xhr.responseText); + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + if (result.code === 200) + callback(result, null); + else + callback(null, result); + } + + xhr.onerror = function () { + if (callback == null) + return; + + var result; + try { + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + callback(null, result); + } + + xhr.send(requestBody); + } + } +} + +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; +PlayFab.GenerateErrorReport = function (error) { + if (error == null) + return ""; + var fullErrors = error.errorMessage; + for (var paramName in error.errorDetails) + for (var msgIdx in error.errorDetails[paramName]) + fullErrors += "\n" + paramName + ": " + error.errorDetails[paramName][msgIdx]; + return fullErrors; +}; + +PlayFab.DataApi = { + ForgetAllCredentials: function () { + PlayFab._internalSettings.sessionTicket = null; + PlayFab._internalSettings.entityToken = null; + }, + + AbortFileUploads: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/AbortFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + DeleteFiles: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/DeleteFiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + FinalizeFileUploads: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/FinalizeFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + GetFiles: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/GetFiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + GetObjects: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Object/GetObjects", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + InitiateFileUploads: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/InitiateFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + SetObjects: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Object/SetObjects", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, +}; + +var PlayFabDataSDK = PlayFab.DataApi; + diff --git a/PlayFabTestingExample/src/PlayFab/PlayFabEventsApi.js b/PlayFabTestingExample/src/PlayFab/PlayFabEventsApi.js new file mode 100644 index 00000000..5f76dd93 --- /dev/null +++ b/PlayFabTestingExample/src/PlayFab/PlayFabEventsApi.js @@ -0,0 +1,171 @@ +/// + +var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; + +if(!PlayFab.settings) { + PlayFab.settings = { + titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) + developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website) + advertisingIdType: null, + advertisingIdValue: null, + GlobalHeaderInjection: null, + + // disableAdvertising is provided for completeness, but changing it is not suggested + // Disabling this may prevent your advertising-related PlayFab marketplace partners from working correctly + disableAdvertising: false, + AD_TYPE_IDFA: "Idfa", + AD_TYPE_ANDROID_ID: "Adid" + } +} + +if(!PlayFab._internalSettings) { + PlayFab._internalSettings = { + entityToken: null, + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, + sessionTicket: null, + productionServerUrl: ".playfabapi.com", + errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", + errorLoggedIn: "Must be logged in to call this method", + errorEntityToken: "You must successfully call GetEntityToken before calling this", + errorSecretKey: "Must have PlayFab.settings.developerSecretKey set to call this method", + + GetServerUrl: function () { + return "https://" + PlayFab.settings.titleId + PlayFab._internalSettings.productionServerUrl; + }, + + InjectHeaders: function (xhr, headersObj) { + if (!headersObj) + return; + + for (var headerKey in headersObj) + { + try { + xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]); + } catch (e) { + console.log("Failed to append header: " + headerKey + " = " + headersObj[headerKey] + "Error: " + e); + } + } + }, + + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { + if (callback != null && typeof (callback) != "function") + throw "Callback must be null of a function"; + + if (request == null) + request = {}; + + var startTime = new Date(); + var requestBody = JSON.stringify(request); + + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + + var xhr = new XMLHttpRequest(); + // window.console.log("URL: " + completeUrl); + xhr.open("POST", completeUrl, true); + + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("X-PlayFabSDK", "JavaScriptSDK-" + PlayFab._internalSettings.sdkVersion); + if (authkey != null) + xhr.setRequestHeader(authkey, authValue); + PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection); + PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders); + + xhr.onloadend = function () { + if (callback == null) + return; + + var result; + try { + // window.console.log("parsing json result: " + xhr.responseText); + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + if (result.code === 200) + callback(result, null); + else + callback(null, result); + } + + xhr.onerror = function () { + if (callback == null) + return; + + var result; + try { + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + callback(null, result); + } + + xhr.send(requestBody); + } + } +} + +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; +PlayFab.GenerateErrorReport = function (error) { + if (error == null) + return ""; + var fullErrors = error.errorMessage; + for (var paramName in error.errorDetails) + for (var msgIdx in error.errorDetails[paramName]) + fullErrors += "\n" + paramName + ": " + error.errorDetails[paramName][msgIdx]; + return fullErrors; +}; + +PlayFab.EventsApi = { + ForgetAllCredentials: function () { + PlayFab._internalSettings.sessionTicket = null; + PlayFab._internalSettings.entityToken = null; + }, + + WriteEvents: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Event/WriteEvents", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, +}; + +var PlayFabEventsSDK = PlayFab.EventsApi; + diff --git a/PlayFabTestingExample/src/PlayFab/PlayFabEntityApi.js b/PlayFabTestingExample/src/PlayFab/PlayFabGroupsApi.js similarity index 68% rename from PlayFabTestingExample/src/PlayFab/PlayFabEntityApi.js rename to PlayFabTestingExample/src/PlayFab/PlayFabGroupsApi.js index 46c83bd3..5e1afab8 100644 --- a/PlayFabTestingExample/src/PlayFab/PlayFabEntityApi.js +++ b/PlayFabTestingExample/src/PlayFab/PlayFabGroupsApi.js @@ -1,4 +1,4 @@ -/// +/// var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; @@ -21,7 +21,10 @@ if(!PlayFab.settings) { if(!PlayFab._internalSettings) { PlayFab._internalSettings = { entityToken: null, - sdkVersion: "1.27.180716", + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, sessionTicket: null, productionServerUrl: ".playfabapi.com", errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", @@ -47,7 +50,7 @@ if(!PlayFab._internalSettings) { } }, - ExecuteRequest: function (completeUrl, request, authkey, authValue, callback, customData, extraHeaders) { + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { if (callback != null && typeof (callback) != "function") throw "Callback must be null of a function"; @@ -57,6 +60,21 @@ if(!PlayFab._internalSettings) { var startTime = new Date(); var requestBody = JSON.stringify(request); + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + var xhr = new XMLHttpRequest(); // window.console.log("URL: " + completeUrl); xhr.open("POST", completeUrl, true); @@ -125,8 +143,8 @@ if(!PlayFab._internalSettings) { } } -PlayFab.buildIdentifier = "jbuild_javascriptsdk_0"; -PlayFab.sdkVersion = "1.27.180716"; +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; PlayFab.GenerateErrorReport = function (error) { if (error == null) return ""; @@ -137,17 +155,12 @@ PlayFab.GenerateErrorReport = function (error) { return fullErrors; }; -PlayFab.EntityApi = { +PlayFab.GroupsApi = { ForgetAllCredentials: function () { PlayFab._internalSettings.sessionTicket = null; PlayFab._internalSettings.entityToken = null; }, - AbortFileUploads: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/AbortFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - AcceptGroupApplication: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/AcceptGroupApplication", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); @@ -188,11 +201,6 @@ PlayFab.EntityApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/CreateRole", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); }, - DeleteFiles: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/DeleteFiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - DeleteGroup: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/DeleteGroup", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); @@ -203,64 +211,11 @@ PlayFab.EntityApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/DeleteRole", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); }, - ExecuteEntityCloudScript: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/CloudScript/ExecuteEntityCloudScript", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - FinalizeFileUploads: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/FinalizeFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - GetEntityToken: function (request, callback, customData, extraHeaders) { - var authKey = null; var authValue = null; - if (!authKey && PlayFab._internalSettings.sessionTicket) { authKey = "X-Authorization"; authValue = PlayFab._internalSettings.sessionTicket; } - if (!authKey && PlayFab.settings.developerSecretKey) { authKey = "X-SecretKey"; authValue = PlayFab.settings.developerSecretKey; } - var overloadCallback = function (result, error) { - if (result != null && result.data.EntityToken != null) - PlayFab._internalSettings.entityToken = result.data.EntityToken; - if (callback != null && typeof (callback) == "function") - callback(result, error); - }; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Authentication/GetEntityToken", request, authKey, authValue, overloadCallback, customData, extraHeaders); - }, - - GetFiles: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/GetFiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - GetGlobalPolicy: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetGlobalPolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - GetGroup: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/GetGroup", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); }, - GetObjects: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Object/GetObjects", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - GetProfile: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetProfile", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - GetProfiles: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetProfiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - InitiateFileUploads: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/File/InitiateFileUploads", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - InviteToGroup: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/InviteToGroup", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); @@ -316,21 +271,6 @@ PlayFab.EntityApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/RemoveMembers", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); }, - SetGlobalPolicy: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/SetGlobalPolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - SetObjects: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Object/SetObjects", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - - SetProfilePolicy: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/SetProfilePolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, - UnblockEntity: function (request, callback, customData, extraHeaders) { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/UnblockEntity", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); @@ -345,12 +285,7 @@ PlayFab.EntityApi = { if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Group/UpdateRole", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); }, - - WriteEvents: function (request, callback, customData, extraHeaders) { - if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; - PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Event/WriteEvents", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); - }, }; -var PlayFabEntitySDK = PlayFab.EntityApi; +var PlayFabGroupsSDK = PlayFab.GroupsApi; diff --git a/PlayFabTestingExample/src/PlayFab/PlayFabMatchmakerApi.js b/PlayFabTestingExample/src/PlayFab/PlayFabMatchmakerApi.js index 5a68ec7d..c461533e 100644 --- a/PlayFabTestingExample/src/PlayFab/PlayFabMatchmakerApi.js +++ b/PlayFabTestingExample/src/PlayFab/PlayFabMatchmakerApi.js @@ -21,7 +21,10 @@ if(!PlayFab.settings) { if(!PlayFab._internalSettings) { PlayFab._internalSettings = { entityToken: null, - sdkVersion: "1.27.180716", + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, sessionTicket: null, productionServerUrl: ".playfabapi.com", errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", @@ -47,7 +50,7 @@ if(!PlayFab._internalSettings) { } }, - ExecuteRequest: function (completeUrl, request, authkey, authValue, callback, customData, extraHeaders) { + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { if (callback != null && typeof (callback) != "function") throw "Callback must be null of a function"; @@ -57,6 +60,21 @@ if(!PlayFab._internalSettings) { var startTime = new Date(); var requestBody = JSON.stringify(request); + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + var xhr = new XMLHttpRequest(); // window.console.log("URL: " + completeUrl); xhr.open("POST", completeUrl, true); @@ -125,8 +143,8 @@ if(!PlayFab._internalSettings) { } } -PlayFab.buildIdentifier = "jbuild_javascriptsdk_0"; -PlayFab.sdkVersion = "1.27.180716"; +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; PlayFab.GenerateErrorReport = function (error) { if (error == null) return ""; diff --git a/PlayFabTestingExample/src/PlayFab/PlayFabProfilesApi.js b/PlayFabTestingExample/src/PlayFab/PlayFabProfilesApi.js new file mode 100644 index 00000000..648dc359 --- /dev/null +++ b/PlayFabTestingExample/src/PlayFab/PlayFabProfilesApi.js @@ -0,0 +1,196 @@ +/// + +var PlayFab = typeof PlayFab != "undefined" ? PlayFab : {}; + +if(!PlayFab.settings) { + PlayFab.settings = { + titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) + developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website) + advertisingIdType: null, + advertisingIdValue: null, + GlobalHeaderInjection: null, + + // disableAdvertising is provided for completeness, but changing it is not suggested + // Disabling this may prevent your advertising-related PlayFab marketplace partners from working correctly + disableAdvertising: false, + AD_TYPE_IDFA: "Idfa", + AD_TYPE_ANDROID_ID: "Adid" + } +} + +if(!PlayFab._internalSettings) { + PlayFab._internalSettings = { + entityToken: null, + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, + sessionTicket: null, + productionServerUrl: ".playfabapi.com", + errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", + errorLoggedIn: "Must be logged in to call this method", + errorEntityToken: "You must successfully call GetEntityToken before calling this", + errorSecretKey: "Must have PlayFab.settings.developerSecretKey set to call this method", + + GetServerUrl: function () { + return "https://" + PlayFab.settings.titleId + PlayFab._internalSettings.productionServerUrl; + }, + + InjectHeaders: function (xhr, headersObj) { + if (!headersObj) + return; + + for (var headerKey in headersObj) + { + try { + xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]); + } catch (e) { + console.log("Failed to append header: " + headerKey + " = " + headersObj[headerKey] + "Error: " + e); + } + } + }, + + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { + if (callback != null && typeof (callback) != "function") + throw "Callback must be null of a function"; + + if (request == null) + request = {}; + + var startTime = new Date(); + var requestBody = JSON.stringify(request); + + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + + var xhr = new XMLHttpRequest(); + // window.console.log("URL: " + completeUrl); + xhr.open("POST", completeUrl, true); + + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("X-PlayFabSDK", "JavaScriptSDK-" + PlayFab._internalSettings.sdkVersion); + if (authkey != null) + xhr.setRequestHeader(authkey, authValue); + PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection); + PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders); + + xhr.onloadend = function () { + if (callback == null) + return; + + var result; + try { + // window.console.log("parsing json result: " + xhr.responseText); + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + if (result.code === 200) + callback(result, null); + else + callback(null, result); + } + + xhr.onerror = function () { + if (callback == null) + return; + + var result; + try { + result = JSON.parse(xhr.responseText); + } catch (e) { + result = { + code: 503, // Service Unavailable + status: "Service Unavailable", + error: "Connection error", + errorCode: 2, // PlayFabErrorCode.ConnectionError + errorMessage: xhr.responseText + }; + } + + result.CallBackTimeMS = new Date() - startTime; + result.Request = request; + result.CustomData = customData; + + callback(null, result); + } + + xhr.send(requestBody); + } + } +} + +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; +PlayFab.GenerateErrorReport = function (error) { + if (error == null) + return ""; + var fullErrors = error.errorMessage; + for (var paramName in error.errorDetails) + for (var msgIdx in error.errorDetails[paramName]) + fullErrors += "\n" + paramName + ": " + error.errorDetails[paramName][msgIdx]; + return fullErrors; +}; + +PlayFab.ProfilesApi = { + ForgetAllCredentials: function () { + PlayFab._internalSettings.sessionTicket = null; + PlayFab._internalSettings.entityToken = null; + }, + + GetGlobalPolicy: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetGlobalPolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + GetProfile: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetProfile", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + GetProfiles: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/GetProfiles", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + SetGlobalPolicy: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/SetGlobalPolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + SetProfileLanguage: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/SetProfileLanguage", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, + + SetProfilePolicy: function (request, callback, customData, extraHeaders) { + if (!PlayFab._internalSettings.entityToken) throw PlayFab._internalSettings.errorEntityToken; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Profile/SetProfilePolicy", request, "X-EntityToken", PlayFab._internalSettings.entityToken, callback, customData, extraHeaders); + }, +}; + +var PlayFabProfilesSDK = PlayFab.ProfilesApi; + diff --git a/PlayFabTestingExample/src/PlayFab/PlayFabServerApi.js b/PlayFabTestingExample/src/PlayFab/PlayFabServerApi.js index 9e6610c1..1aec61a7 100644 --- a/PlayFabTestingExample/src/PlayFab/PlayFabServerApi.js +++ b/PlayFabTestingExample/src/PlayFab/PlayFabServerApi.js @@ -21,7 +21,10 @@ if(!PlayFab.settings) { if(!PlayFab._internalSettings) { PlayFab._internalSettings = { entityToken: null, - sdkVersion: "1.27.180716", + sdkVersion: "1.28.180809", + requestGetParams: { + sdk: "JavaScriptSDK-1.28.180809" + }, sessionTicket: null, productionServerUrl: ".playfabapi.com", errorTitleId: "Must be have PlayFab.settings.titleId set to call this method", @@ -47,7 +50,7 @@ if(!PlayFab._internalSettings) { } }, - ExecuteRequest: function (completeUrl, request, authkey, authValue, callback, customData, extraHeaders) { + ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) { if (callback != null && typeof (callback) != "function") throw "Callback must be null of a function"; @@ -57,6 +60,21 @@ if(!PlayFab._internalSettings) { var startTime = new Date(); var requestBody = JSON.stringify(request); + var completeUrl = url; + var getParams = PlayFab._internalSettings.requestGetParams; + if (getParams != null) { + var firstParam = true; + for (var key in getParams) { + if (firstParam) { + completeUrl += "?"; + firstParam = false; + } else { + completeUrl += "&"; + } + completeUrl += key + "=" + getParams[key]; + } + } + var xhr = new XMLHttpRequest(); // window.console.log("URL: " + completeUrl); xhr.open("POST", completeUrl, true); @@ -125,8 +143,8 @@ if(!PlayFab._internalSettings) { } } -PlayFab.buildIdentifier = "jbuild_javascriptsdk_0"; -PlayFab.sdkVersion = "1.27.180716"; +PlayFab.buildIdentifier = "jbuild_javascriptsdk_1"; +PlayFab.sdkVersion = "1.28.180809"; PlayFab.GenerateErrorReport = function (error) { if (error == null) return ""; @@ -343,6 +361,16 @@ PlayFab.ServerApi = { PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Server/GetPlayFabIDsFromFacebookIDs", request, "X-SecretKey", PlayFab.settings.developerSecretKey, callback, customData, extraHeaders); }, + GetPlayFabIDsFromFacebookInstantGamesIds: function (request, callback, customData, extraHeaders) { + if (!PlayFab.settings.developerSecretKey) throw PlayFab._internalSettings.errorSecretKey; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Server/GetPlayFabIDsFromFacebookInstantGamesIds", request, "X-SecretKey", PlayFab.settings.developerSecretKey, callback, customData, extraHeaders); + }, + + GetPlayFabIDsFromNintendoSwitchDeviceIds: function (request, callback, customData, extraHeaders) { + if (!PlayFab.settings.developerSecretKey) throw PlayFab._internalSettings.errorSecretKey; + PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Server/GetPlayFabIDsFromNintendoSwitchDeviceIds", request, "X-SecretKey", PlayFab.settings.developerSecretKey, callback, customData, extraHeaders); + }, + GetPlayFabIDsFromSteamIDs: function (request, callback, customData, extraHeaders) { if (!PlayFab.settings.developerSecretKey) throw PlayFab._internalSettings.errorSecretKey; PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + "/Server/GetPlayFabIDsFromSteamIDs", request, "X-SecretKey", PlayFab.settings.developerSecretKey, callback, customData, extraHeaders); diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFab.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFab.d.ts index 87c8ba94..859e8aa3 100644 --- a/PlayFabTestingExample/src/typings/PlayFab/PlayFab.d.ts +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFab.d.ts @@ -1,8 +1,13 @@ /// /// -/// /// /// +/// +/// +/// +/// +/// +/// declare module PlayFabModule { export interface ISettings { @@ -41,15 +46,25 @@ declare var PlayFab: { settings: PlayFabModule.ISettings; AdminApi: PlayFabAdminModule.IPlayFabAdmin; ClientApi: PlayFabClientModule.IPlayFabClient; - EntityApi: PlayFabEntityModule.IPlayFabEntity; MatchmakerApi: PlayFabMatchmakerModule.IPlayFabMatchmaker; ServerApi: PlayFabServerModule.IPlayFabServer; + AuthenticationApi: PlayFabAuthenticationModule.IPlayFabAuthentication; + CloudScriptApi: PlayFabCloudScriptModule.IPlayFabCloudScript; + DataApi: PlayFabDataModule.IPlayFabData; + EventsApi: PlayFabEventsModule.IPlayFabEvents; + GroupsApi: PlayFabGroupsModule.IPlayFabGroups; + ProfilesApi: PlayFabProfilesModule.IPlayFabProfiles; }; // Continue to support older usage declare var PlayFabAdminSDK: PlayFabAdminModule.IPlayFabAdmin; declare var PlayFabClientSDK: PlayFabClientModule.IPlayFabClient; -declare var PlayFabEntitySDK: PlayFabEntityModule.IPlayFabEntity; declare var PlayFabMatchmakerSDK: PlayFabMatchmakerModule.IPlayFabMatchmaker; declare var PlayFabServerSDK: PlayFabServerModule.IPlayFabServer; +declare var PlayFabAuthenticationSDK: PlayFabAuthenticationModule.IPlayFabAuthentication; +declare var PlayFabCloudScriptSDK: PlayFabCloudScriptModule.IPlayFabCloudScript; +declare var PlayFabDataSDK: PlayFabDataModule.IPlayFabData; +declare var PlayFabEventsSDK: PlayFabEventsModule.IPlayFabEvents; +declare var PlayFabGroupsSDK: PlayFabGroupsModule.IPlayFabGroups; +declare var PlayFabProfilesSDK: PlayFabProfilesModule.IPlayFabProfiles; diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabAdminApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabAdminApi.d.ts index b14f6b75..3717732f 100644 --- a/PlayFabTestingExample/src/typings/PlayFab/PlayFabAdminApi.d.ts +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFabAdminApi.d.ts @@ -2071,6 +2071,12 @@ declare module PlayFabAdminModels { | "ExplicitContentDetected" | "PIIContentDetected" | "InvalidScheduledTaskParameter" + | "PerEntityEventRateLimitExceeded" + | "TitleDefaultLanguageNotSet" + | "EmailTemplateMissingDefaultVersion" + | "FacebookInstantGamesIdNotLinked" + | "InvalidFacebookInstantGamesSignature" + | "FacebookInstantGamesAuthNotConfiguredForTitle" | "MatchmakingEntityInvalid" | "MatchmakingPlayerAttributesInvalid" | "MatchmakingCreateRequestMissing" @@ -2081,12 +2087,12 @@ declare module PlayFabAdminModels { | "MatchmakingTicketIdMissing" | "MatchmakingMatchIdMissing" | "MatchmakingMatchIdIdMissing" - | "MatchmakingHopperIdMissing" + | "MatchmakingQueueNameMissing" | "MatchmakingTitleIdMissing" | "MatchmakingTicketIdIdMissing" | "MatchmakingPlayerIdMissing" | "MatchmakingJoinRequestUserMissing" - | "MatchmakingHopperConfigNotFound" + | "MatchmakingQueueConfigNotFound" | "MatchmakingMatchNotFound" | "MatchmakingTicketNotFound" | "MatchmakingCreateTicketServerIdentityInvalid" @@ -2100,9 +2106,12 @@ declare module PlayFabAdminModels { | "MatchmakingPlayerIdentityMismatch" | "MatchmakingAlreadyJoinedTicket" | "MatchmakingTicketAlreadyCompleted" - | "MatchmakingHopperIdInvalid" - | "MatchmakingHopperConfigInvalid" - | "MatchmakingMemberProfileInvalid"; + | "MatchmakingQueueNameInvalid" + | "MatchmakingQueueConfigInvalid" + | "MatchmakingMemberProfileInvalid" + | "WriteAttemptedDuringExport" + | "NintendoSwitchDeviceIdNotLinked" + | "MatchmakingNotEnabled"; /** https://api.playfab.com/Documentation/Admin/datatype/PlayFab.Admin.Models/PlayFab.Admin.Models.GetActionsOnPlayersInSegmentTaskInstanceResult */ export interface GetActionsOnPlayersInSegmentTaskInstanceResult extends PlayFabModule.IPlayFabResultCommon { @@ -2265,10 +2274,16 @@ declare module PlayFabAdminModels { Players?: string[]; /** region in which the Game Server Instance is running */ Region?: string; - /** IP address for this Game Server Instance */ + /** IPV4 address of the game server instance */ ServerAddress?: string; + /** IPV4 address of the server */ + ServerIPV4Address?: string; + /** IPV6 address of the server */ + ServerIPV6Address?: string; /** communication port for this Game Server Instance */ ServerPort: number; + /** Public DNS name (if any) of the server */ + ServerPublicDNSName?: string; /** time when the Game Server Instance was created */ StartTime: string; /** unique identifier of the Game Server Instance for this lobby */ @@ -2909,7 +2924,11 @@ declare module PlayFabAdminModels { | "IOSDevice" | "AndroidDevice" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "GameServer" + | "CustomServer" + | "NintendoSwitch" + | "FacebookInstantGames"; /** https://api.playfab.com/Documentation/Admin/datatype/PlayFab.Admin.Models/PlayFab.Admin.Models.LogStatement */ export interface LogStatement { @@ -3184,7 +3203,7 @@ declare module PlayFabAdminModels { TitleId?: string; /** * Sum of the player's purchases made with real-money currencies, converted to US dollars equivalent and represented as a - * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. + * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. */ TotalValueToDateInUSD?: number; /** List of the player's lifetime purchase totals, summed by real-money currency */ @@ -4256,7 +4275,10 @@ declare module PlayFabAdminModels { | "XboxLive" | "Parse" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "ServerCustomId" + | "NintendoSwitchDeviceId" + | "FacebookInstantGamesId"; /** https://api.playfab.com/Documentation/Admin/datatype/PlayFab.Admin.Models/PlayFab.Admin.Models.UserPrivateAccountInfo */ export interface UserPrivateAccountInfo { diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabAuthenticationApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabAuthenticationApi.d.ts new file mode 100644 index 00000000..f0b2cb9d --- /dev/null +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFabAuthenticationApi.d.ts @@ -0,0 +1,55 @@ +/// + +declare module PlayFabAuthenticationModule { + export interface IPlayFabAuthentication { + ForgetAllCredentials(): void; + + /** + * Method to exchange a legacy AuthenticationTicket or title SecretKey for an Entity Token or to refresh a still valid + * Entity Token. + * https://api.playfab.com/Documentation/Authentication/method/GetEntityToken + */ + GetEntityToken(request: PlayFabAuthenticationModels.GetEntityTokenRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabAuthenticationModels { + /** https://api.playfab.com/Documentation/Authentication/datatype/PlayFab.Authentication.Models/PlayFab.Authentication.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/Authentication/datatype/PlayFab.Authentication.Models/PlayFab.Authentication.Models.GetEntityTokenRequest */ + export interface GetEntityTokenRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Authentication/datatype/PlayFab.Authentication.Models/PlayFab.Authentication.Models.GetEntityTokenResponse */ + export interface GetEntityTokenResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** The token used to set X-EntityToken for all entity based API calls. */ + EntityToken?: string; + /** The time the token will expire, if it is an expiring token, in UTC. */ + TokenExpiration?: string; + + } + + +} diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabClientApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabClientApi.d.ts index ac34a39c..bee757c1 100644 --- a/PlayFabTestingExample/src/typings/PlayFab/PlayFabClientApi.d.ts +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFabClientApi.d.ts @@ -244,6 +244,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/GetPlayFabIDsFromFacebookIDs */ GetPlayFabIDsFromFacebookIDs(request: PlayFabClientModels.GetPlayFabIDsFromFacebookIDsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the unique PlayFab identifiers for the given set of Facebook Instant Game identifiers. + * https://api.playfab.com/Documentation/Client/method/GetPlayFabIDsFromFacebookInstantGamesIds + */ + GetPlayFabIDsFromFacebookInstantGamesIds(request: PlayFabClientModels.GetPlayFabIDsFromFacebookInstantGamesIdsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Retrieves the unique PlayFab identifiers for the given set of Game Center identifiers (referenced in the Game Center * Programming Guide as the Player Identifier). @@ -270,6 +275,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/GetPlayFabIDsFromKongregateIDs */ GetPlayFabIDsFromKongregateIDs(request: PlayFabClientModels.GetPlayFabIDsFromKongregateIDsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the unique PlayFab identifiers for the given set of Nintendo Switch identifiers. + * https://api.playfab.com/Documentation/Client/method/GetPlayFabIDsFromNintendoSwitchDeviceIds + */ + GetPlayFabIDsFromNintendoSwitchDeviceIds(request: PlayFabClientModels.GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Retrieves the unique PlayFab identifiers for the given set of Steam identifiers. The Steam identifiers are the profile * IDs for the user accounts, available as SteamId in the Steamworks Community API calls. @@ -383,6 +393,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/LinkFacebookAccount */ LinkFacebookAccount(request: PlayFabClientModels.LinkFacebookAccountRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Links the Facebook Instant Games Id to the user's PlayFab account + * https://api.playfab.com/Documentation/Client/method/LinkFacebookInstantGamesId + */ + LinkFacebookInstantGamesId(request: PlayFabClientModels.LinkFacebookInstantGamesIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Links the Game Center account associated with the provided Game Center ID to the user's PlayFab account * https://api.playfab.com/Documentation/Client/method/LinkGameCenterAccount @@ -403,6 +418,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/LinkKongregate */ LinkKongregate(request: PlayFabClientModels.LinkKongregateAccountRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Links the NintendoSwitchDeviceId to the user's PlayFab account + * https://api.playfab.com/Documentation/Client/method/LinkNintendoSwitchDeviceId + */ + LinkNintendoSwitchDeviceId(request: PlayFabClientModels.LinkNintendoSwitchDeviceIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Links the Steam account associated with the provided Steam authentication ticket to the user's PlayFab account * https://api.playfab.com/Documentation/Client/method/LinkSteamAccount @@ -444,6 +464,12 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/LoginWithFacebook */ LoginWithFacebook(request: PlayFabClientModels.LoginWithFacebookRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Signs the user in using a Facebook Instant Games ID, returning a session identifier that can subsequently be used for + * API calls which require an authenticated user. Requires Facebook Instant Games to be configured. + * https://api.playfab.com/Documentation/Client/method/LoginWithFacebookInstantGamesId + */ + LoginWithFacebookInstantGamesId(request: PlayFabClientModels.LoginWithFacebookInstantGamesIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Signs the user in using an iOS Game Center player identifier, returning a session identifier that can subsequently be * used for API calls which require an authenticated user @@ -466,6 +492,12 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/LoginWithKongregate */ LoginWithKongregate(request: PlayFabClientModels.LoginWithKongregateRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Signs the user in using a Nintendo Switch Device ID, returning a session identifier that can subsequently be used for + * API calls which require an authenticated user + * https://api.playfab.com/Documentation/Client/method/LoginWithNintendoSwitchDeviceId + */ + LoginWithNintendoSwitchDeviceId(request: PlayFabClientModels.LoginWithNintendoSwitchDeviceIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Signs the user into the PlayFab account, returning a session identifier that can subsequently be used for API calls * which require an authenticated user. Unlike most other login API calls, LoginWithPlayFab does not permit the creation of @@ -631,6 +663,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/UnlinkFacebookAccount */ UnlinkFacebookAccount(request: PlayFabClientModels.UnlinkFacebookAccountRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Unlinks the related Facebook Instant Game Ids from the user's PlayFab account + * https://api.playfab.com/Documentation/Client/method/UnlinkFacebookInstantGamesId + */ + UnlinkFacebookInstantGamesId(request: PlayFabClientModels.UnlinkFacebookInstantGamesIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Unlinks the related Game Center account from the user's PlayFab account * https://api.playfab.com/Documentation/Client/method/UnlinkGameCenterAccount @@ -652,6 +689,11 @@ declare module PlayFabClientModule { * https://api.playfab.com/Documentation/Client/method/UnlinkKongregate */ UnlinkKongregate(request: PlayFabClientModels.UnlinkKongregateAccountRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Unlinks the related NintendoSwitchDeviceId from the user's PlayFab account + * https://api.playfab.com/Documentation/Client/method/UnlinkNintendoSwitchDeviceId + */ + UnlinkNintendoSwitchDeviceId(request: PlayFabClientModels.UnlinkNintendoSwitchDeviceIdRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Unlinks the related Steam account from the user's PlayFab account * https://api.playfab.com/Documentation/Client/method/UnlinkSteamAccount @@ -1743,6 +1785,15 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.FacebookInstantGamesPlayFabIdPair */ + export interface FacebookInstantGamesPlayFabIdPair { + /** Unique Facebook Instant Games identifier for a user. */ + FacebookInstantGamesId?: string; + /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Facebook Instant Games identifier. */ + PlayFabId?: string; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.FacebookPlayFabIdPair */ export interface FacebookPlayFabIdPair { /** Unique Facebook identifier for a user. */ @@ -1812,10 +1863,14 @@ declare module PlayFabClientModels { RunTime: number; /** IPV4 address of the server */ ServerHostname?: string; + /** IPV4 address of the server */ + ServerIPV4Address?: string; /** IPV6 address of the server */ ServerIPV6Address?: string; /** port number to use for non-http communications with the server */ ServerPort?: number; + /** Public DNS name (if any) of the server */ + ServerPublicDNSName?: string; /** stastic used to match this game in player statistic matchmaking */ StatisticName?: string; /** game session tags */ @@ -2427,6 +2482,20 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromFacebookInstantGamesIdsRequest */ + export interface GetPlayFabIDsFromFacebookInstantGamesIdsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Array of unique Facebook Instant Games identifiers for which the title needs to get PlayFab identifiers. */ + FacebookInstantGamesIds: string[]; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromFacebookInstantGamesIdsResult */ + export interface GetPlayFabIDsFromFacebookInstantGamesIdsResult extends PlayFabModule.IPlayFabResultCommon { + /** Mapping of Facebook Instant Games identifiers to PlayFab identifiers. */ + Data?: FacebookInstantGamesPlayFabIdPair[]; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromGameCenterIDsRequest */ export interface GetPlayFabIDsFromGameCenterIDsRequest extends PlayFabModule.IPlayFabRequestCommon { /** Array of unique Game Center identifiers (the Player Identifier) for which the title needs to get PlayFab identifiers. */ @@ -2486,6 +2555,20 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest */ + export interface GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Array of unique Nintendo Switch Device identifiers for which the title needs to get PlayFab identifiers. */ + NintendoSwitchDeviceIds: string[]; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromNintendoSwitchDeviceIdsResult */ + export interface GetPlayFabIDsFromNintendoSwitchDeviceIdsResult extends PlayFabModule.IPlayFabResultCommon { + /** Mapping of Nintendo Switch Device identifiers to PlayFab identifiers. */ + Data?: number[]; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.GetPlayFabIDsFromSteamIDsRequest */ export interface GetPlayFabIDsFromSteamIDsRequest extends PlayFabModule.IPlayFabRequestCommon { /** Array of unique Steam identifiers (Steam profile IDs) for which the title needs to get PlayFab identifiers. */ @@ -2900,6 +2983,20 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkFacebookInstantGamesIdRequest */ + export interface LinkFacebookInstantGamesIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Facebook Instant Games signature for the user. */ + FacebookInstantGamesSignature: string; + /** If another user is already linked to the Facebook Instant Games ID, unlink the other user and re-link. */ + ForceLink?: boolean; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkFacebookInstantGamesIdResult */ + export interface LinkFacebookInstantGamesIdResult extends PlayFabModule.IPlayFabResultCommon { + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkGameCenterAccountRequest */ export interface LinkGameCenterAccountRequest extends PlayFabModule.IPlayFabRequestCommon { /** If another user is already linked to the account, unlink the other user and re-link. */ @@ -2965,6 +3062,20 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkNintendoSwitchDeviceIdRequest */ + export interface LinkNintendoSwitchDeviceIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** If another user is already linked to the Nintendo Switch Device ID, unlink the other user and re-link. */ + ForceLink?: boolean; + /** Nintendo Switch unique identifier for the user's device. */ + NintendoSwitchDeviceId: string; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkNintendoSwitchDeviceIdResult */ + export interface LinkNintendoSwitchDeviceIdResult extends PlayFabModule.IPlayFabResultCommon { + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LinkSteamAccountRequest */ export interface LinkSteamAccountRequest extends PlayFabModule.IPlayFabRequestCommon { /** If another user is already linked to the account, unlink the other user and re-link. */ @@ -3056,7 +3167,11 @@ declare module PlayFabClientModels { | "IOSDevice" | "AndroidDevice" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "GameServer" + | "CustomServer" + | "NintendoSwitch" + | "FacebookInstantGames"; /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LoginResult */ export interface LoginResult extends PlayFabModule.IPlayFabResultCommon { @@ -3146,6 +3261,28 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LoginWithFacebookInstantGamesIdRequest */ + export interface LoginWithFacebookInstantGamesIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Automatically create a PlayFab account if one is not currently linked to this ID. */ + CreateAccount?: boolean; + /** Base64 encoded body that is encrypted with the Title's public RSA key (Enterprise Only). */ + EncryptedRequest?: string; + /** Facebook Instant Games signature for the user. */ + FacebookInstantGamesSignature: string; + /** Flags for which pieces of info to return for the user. */ + InfoRequestParameters?: GetPlayerCombinedInfoRequestParams; + /** Flag to automatically login the player's title_player_account and return the associated entity token. */ + LoginTitlePlayerAccountEntity?: boolean; + /** Player secret that is used to verify API request signatures (Enterprise Only). */ + PlayerSecret?: string; + /** + * Unique identifier for the title, found in the Settings > Game Properties section of the PlayFab developer site when a + * title has been selected. + */ + TitleId?: string; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LoginWithFacebookRequest */ export interface LoginWithFacebookRequest extends PlayFabModule.IPlayFabRequestCommon { /** Unique identifier from Facebook for the user. */ @@ -3265,6 +3402,28 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LoginWithNintendoSwitchDeviceIdRequest */ + export interface LoginWithNintendoSwitchDeviceIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Automatically create a PlayFab account if one is not currently linked to this ID. */ + CreateAccount?: boolean; + /** Base64 encoded body that is encrypted with the Title's public RSA key (Enterprise Only). */ + EncryptedRequest?: string; + /** Flags for which pieces of info to return for the user. */ + InfoRequestParameters?: GetPlayerCombinedInfoRequestParams; + /** Flag to automatically login the player's title_player_account and return the associated entity token. */ + LoginTitlePlayerAccountEntity?: boolean; + /** Nintendo Switch unique identifier for the user's device. */ + NintendoSwitchDeviceId?: string; + /** Player secret that is used to verify API request signatures (Enterprise Only). */ + PlayerSecret?: string; + /** + * Unique identifier for the title, found in the Settings > Game Properties section of the PlayFab developer site when a + * title has been selected. + */ + TitleId?: string; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.LoginWithPlayFabRequest */ export interface LoginWithPlayFabRequest extends PlayFabModule.IPlayFabRequestCommon { /** Flags for which pieces of info to return for the user. */ @@ -3389,10 +3548,14 @@ declare module PlayFabClientModels { PollWaitTimeMS?: number; /** IPV4 address of the server */ ServerHostname?: string; + /** IPV4 address of the server */ + ServerIPV4Address?: string; /** IPV6 address of the server */ ServerIPV6Address?: string; /** port number to use for non-http communications with the server */ ServerPort?: number; + /** Public DNS name (if any) of the server */ + ServerPublicDNSName?: string; /** result of match making process */ Status?: string; /** server authorization ticket (used by RedeemMatchmakerTicket to validate user insertion into the game) */ @@ -3440,6 +3603,15 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.NintendoSwitchPlayFabIdPair */ + export interface NintendoSwitchPlayFabIdPair { + /** Unique Nintendo Switch Device identifier for a user. */ + NintendoSwitchDeviceId?: string; + /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Nintendo Switch Device identifier. */ + PlayFabId?: string; + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.OpenTradeRequest */ export interface OpenTradeRequest extends PlayFabModule.IPlayFabRequestCommon { /** @@ -3565,7 +3737,7 @@ declare module PlayFabClientModels { TitleId?: string; /** * Sum of the player's purchases made with real-money currencies, converted to US dollars equivalent and represented as a - * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. + * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. */ TotalValueToDateInUSD?: number; /** List of the player's lifetime purchase totals, summed by real-money currency */ @@ -3977,10 +4149,14 @@ declare module PlayFabClientModels { Password?: string; /** server IPV4 address */ ServerHostname?: string; + /** server IPV4 address */ + ServerIPV4Address?: string; /** server IPV6 address */ ServerIPV6Address?: string; /** port on the server to be used for communication */ ServerPort?: number; + /** server public DNS name */ + ServerPublicDNSName?: string; /** unique identifier for the server */ Ticket?: string; @@ -4265,6 +4441,18 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkFacebookInstantGamesIdRequest */ + export interface UnlinkFacebookInstantGamesIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Facebook Instant Games identifier for the user. If not specified, the most recently signed in ID will be used. */ + FacebookInstantGamesId?: string; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkFacebookInstantGamesIdResult */ + export interface UnlinkFacebookInstantGamesIdResult extends PlayFabModule.IPlayFabResultCommon { + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkGameCenterAccountRequest */ export interface UnlinkGameCenterAccountRequest extends PlayFabModule.IPlayFabRequestCommon { @@ -4310,6 +4498,18 @@ declare module PlayFabClientModels { } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkNintendoSwitchDeviceIdRequest */ + export interface UnlinkNintendoSwitchDeviceIdRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Nintendo Switch Device identifier for the user. If not specified, the most recently signed in device ID will be used. */ + NintendoSwitchDeviceId?: string; + + } + + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkNintendoSwitchDeviceIdResult */ + export interface UnlinkNintendoSwitchDeviceIdResult extends PlayFabModule.IPlayFabResultCommon { + + } + /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UnlinkSteamAccountRequest */ export interface UnlinkSteamAccountRequest extends PlayFabModule.IPlayFabRequestCommon { @@ -4648,7 +4848,10 @@ declare module PlayFabClientModels { | "XboxLive" | "Parse" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "ServerCustomId" + | "NintendoSwitchDeviceId" + | "FacebookInstantGamesId"; /** https://api.playfab.com/Documentation/Client/datatype/PlayFab.Client.Models/PlayFab.Client.Models.UserPrivateAccountInfo */ export interface UserPrivateAccountInfo { diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabCloudScriptApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabCloudScriptApi.d.ts new file mode 100644 index 00000000..6d191390 --- /dev/null +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFabCloudScriptApi.d.ts @@ -0,0 +1,127 @@ +/// + +declare module PlayFabCloudScriptModule { + export interface IPlayFabCloudScript { + ForgetAllCredentials(): void; + + /** + * Executes CloudScript using the Entity Profile + * https://api.playfab.com/Documentation/CloudScript/method/ExecuteEntityCloudScript + */ + ExecuteEntityCloudScript(request: PlayFabCloudScriptModels.ExecuteEntityCloudScriptRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabCloudScriptModels { + type CloudScriptRevisionOption = "Live" + | "Latest" + | "Specific"; + + /** https://api.playfab.com/Documentation/CloudScript/datatype/PlayFab.CloudScript.Models/PlayFab.CloudScript.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/CloudScript/datatype/PlayFab.CloudScript.Models/PlayFab.CloudScript.Models.ExecuteCloudScriptResult */ + export interface ExecuteCloudScriptResult extends PlayFabModule.IPlayFabResultCommon { + /** Number of PlayFab API requests issued by the CloudScript function */ + APIRequestsIssued: number; + /** Information about the error, if any, that occurred during execution */ + Error?: ScriptExecutionError; + ExecutionTimeSeconds: number; + /** The name of the function that executed */ + FunctionName?: string; + /** The object returned from the CloudScript function, if any */ + FunctionResult?: any; + /** + * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if + * the total event size is larger than 350KB. + */ + FunctionResultTooLarge?: boolean; + /** Number of external HTTP requests issued by the CloudScript function */ + HttpRequestsIssued: number; + /** + * Entries logged during the function execution. These include both entries logged in the function code using log.info() + * and log.error() and error entries for API and HTTP request failures. + */ + Logs?: LogStatement[]; + /** + * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total + * event size is larger than 350KB after the FunctionResult was removed. + */ + LogsTooLarge?: boolean; + MemoryConsumedBytes: number; + /** + * Processor time consumed while executing the function. This does not include time spent waiting on API calls or HTTP + * requests. + */ + ProcessorTimeSeconds: number; + /** The revision of the CloudScript that executed */ + Revision: number; + + } + + /** https://api.playfab.com/Documentation/CloudScript/datatype/PlayFab.CloudScript.Models/PlayFab.CloudScript.Models.ExecuteEntityCloudScriptRequest */ + export interface ExecuteEntityCloudScriptRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + /** The name of the CloudScript function to execute */ + FunctionName: string; + /** Object that is passed in to the function as the first argument */ + FunctionParameter?: any; + /** + * Generate a 'entity_executed_cloudscript' PlayStream event containing the results of the function execution and other + * contextual information. This event will show up in the PlayStream debugger console for the player in Game Manager. + */ + GeneratePlayStreamEvent?: boolean; + /** + * Option for which revision of the CloudScript to execute. 'Latest' executes the most recently created revision, 'Live' + * executes the current live, published revision, and 'Specific' executes the specified revision. The default value is + * 'Specific', if the SpecificRevision parameter is specified, otherwise it is 'Live'. + */ + RevisionSelection?: string; + /** The specific revision to execute, when RevisionSelection is set to 'Specific' */ + SpecificRevision?: number; + + } + + /** https://api.playfab.com/Documentation/CloudScript/datatype/PlayFab.CloudScript.Models/PlayFab.CloudScript.Models.LogStatement */ + export interface LogStatement { + /** Optional object accompanying the message as contextual information */ + Data?: any; + /** 'Debug', 'Info', or 'Error' */ + Level?: string; + Message?: string; + + } + + /** https://api.playfab.com/Documentation/CloudScript/datatype/PlayFab.CloudScript.Models/PlayFab.CloudScript.Models.ScriptExecutionError */ + export interface ScriptExecutionError { + /** + * Error code, such as CloudScriptNotFound, JavascriptException, CloudScriptFunctionArgumentSizeExceeded, + * CloudScriptAPIRequestCountExceeded, CloudScriptAPIRequestError, or CloudScriptHTTPRequestError + */ + Error?: string; + /** Details about the error */ + Message?: string; + /** Point during the execution of the script at which the error occurred, if any */ + StackTrace?: string; + + } + + +} diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabDataApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabDataApi.d.ts new file mode 100644 index 00000000..8defe6f4 --- /dev/null +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFabDataApi.d.ts @@ -0,0 +1,292 @@ +/// + +declare module PlayFabDataModule { + export interface IPlayFabData { + ForgetAllCredentials(): void; + + /** + * Abort pending file uploads to an entity's profile. + * https://api.playfab.com/Documentation/Data/method/AbortFileUploads + */ + AbortFileUploads(request: PlayFabDataModels.AbortFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Delete files on an entity's profile. + * https://api.playfab.com/Documentation/Data/method/DeleteFiles + */ + DeleteFiles(request: PlayFabDataModels.DeleteFilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Finalize file uploads to an entity's profile. + * https://api.playfab.com/Documentation/Data/method/FinalizeFileUploads + */ + FinalizeFileUploads(request: PlayFabDataModels.FinalizeFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves file metadata from an entity's profile. + * https://api.playfab.com/Documentation/Data/method/GetFiles + */ + GetFiles(request: PlayFabDataModels.GetFilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves objects from an entity's profile. + * https://api.playfab.com/Documentation/Data/method/GetObjects + */ + GetObjects(request: PlayFabDataModels.GetObjectsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Initiates file uploads to an entity's profile. + * https://api.playfab.com/Documentation/Data/method/InitiateFileUploads + */ + InitiateFileUploads(request: PlayFabDataModels.InitiateFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Sets objects on an entity's profile. + * https://api.playfab.com/Documentation/Data/method/SetObjects + */ + SetObjects(request: PlayFabDataModels.SetObjectsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabDataModels { + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.AbortFileUploadsRequest */ + export interface AbortFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** Names of the files to have their pending uploads aborted. */ + FileNames: string[]; + /** + * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not + * be performed. + */ + ProfileVersion?: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.AbortFileUploadsResponse */ + export interface AbortFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.DeleteFilesRequest */ + export interface DeleteFilesRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** Names of the files to be deleted. */ + FileNames: string[]; + /** + * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not + * be performed. + */ + ProfileVersion?: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.DeleteFilesResponse */ + export interface DeleteFilesResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.FinalizeFileUploadsRequest */ + export interface FinalizeFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** Names of the files to be finalized. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ + FileNames: string[]; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.FinalizeFileUploadsResponse */ + export interface FinalizeFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** Collection of metadata for the entity's files */ + Metadata?: { [key: string]: GetFileMetadata }; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.GetFileMetadata */ + export interface GetFileMetadata { + /** Checksum value for the file */ + Checksum?: string; + /** Download URL where the file can be retrieved */ + DownloadUrl?: string; + /** Name of the file */ + FileName?: string; + /** Last UTC time the file was modified */ + LastModified: string; + /** Storage service's reported byte count */ + Size: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.GetFilesRequest */ + export interface GetFilesRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.GetFilesResponse */ + export interface GetFilesResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** Collection of metadata for the entity's files */ + Metadata?: { [key: string]: GetFileMetadata }; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.GetObjectsRequest */ + export interface GetObjectsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** + * Determines whether the object will be returned as an escaped JSON string or as a un-escaped JSON object. Default is JSON + * object. + */ + EscapeObject?: boolean; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.GetObjectsResponse */ + export interface GetObjectsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** Requested objects that the calling entity has access to */ + Objects?: { [key: string]: ObjectResult }; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.InitiateFileUploadMetadata */ + export interface InitiateFileUploadMetadata { + /** Name of the file. */ + FileName?: string; + /** Location the data should be sent to via an HTTP PUT operation. */ + UploadUrl?: string; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.InitiateFileUploadsRequest */ + export interface InitiateFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** Names of the files to be set. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ + FileNames: string[]; + /** + * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not + * be performed. + */ + ProfileVersion?: number; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.InitiateFileUploadsResponse */ + export interface InitiateFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The entity id and type. */ + Entity?: EntityKey; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + /** Collection of file names and upload urls */ + UploadDetails?: InitiateFileUploadMetadata[]; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.ObjectResult */ + export interface ObjectResult extends PlayFabModule.IPlayFabResultCommon { + /** Un-escaped JSON object, if EscapeObject false or default. */ + DataObject?: any; + /** Escaped string JSON body of the object, if EscapeObject is true. */ + EscapedDataObject?: string; + /** Name of the object. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ + ObjectName?: string; + + } + + type OperationTypes = "Created" + | "Updated" + | "Deleted" + | "None"; + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.SetObject */ + export interface SetObject { + /** + * Body of the object to be saved. If empty and DeleteObject is true object will be deleted if it exists, or no operation + * will occur if it does not exist. Only one of Object or EscapedDataObject fields may be used. + */ + DataObject?: any; + /** Flag to indicate that this object should be deleted. Both DataObject and EscapedDataObject must not be set as well. */ + DeleteObject?: boolean; + /** + * Body of the object to be saved as an escaped JSON string. If empty and DeleteObject is true object will be deleted if it + * exists, or no operation will occur if it does not exist. Only one of DataObject or EscapedDataObject fields may be used. + */ + EscapedDataObject?: string; + /** Name of object. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.'. */ + ObjectName: string; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.SetObjectInfo */ + export interface SetObjectInfo { + /** Name of the object */ + ObjectName?: string; + /** Optional reason to explain why the operation was the result that it was. */ + OperationReason?: string; + /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ + SetResult?: string; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.SetObjectsRequest */ + export interface SetObjectsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** + * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from + * GetProfile API, you can ensure that the object set will only be performed if the profile has not been updated by any + * other clients since the version you last loaded. + */ + ExpectedProfileVersion?: number; + /** Collection of objects to set on the profile. */ + Objects: SetObject[]; + + } + + /** https://api.playfab.com/Documentation/Data/datatype/PlayFab.Data.Models/PlayFab.Data.Models.SetObjectsResponse */ + export interface SetObjectsResponse extends PlayFabModule.IPlayFabResultCommon { + /** New version of the entity profile. */ + ProfileVersion: number; + /** New version of the entity profile. */ + SetResults?: SetObjectInfo[]; + + } + + +} diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabEntityApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabEntityApi.d.ts deleted file mode 100644 index 53f3fb17..00000000 --- a/PlayFabTestingExample/src/typings/PlayFab/PlayFabEntityApi.d.ts +++ /dev/null @@ -1,1268 +0,0 @@ -/// - -declare module PlayFabEntityModule { - export interface IPlayFabEntity { - ForgetAllCredentials(): void; - - /** - * Abort pending file uploads to an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/AbortFileUploads - */ - AbortFileUploads(request: PlayFabEntityModels.AbortFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Accepts an outstanding invitation to to join a group - * https://api.playfab.com/Documentation/Entity/method/AcceptGroupApplication - */ - AcceptGroupApplication(request: PlayFabEntityModels.AcceptGroupApplicationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Accepts an invitation to join a group - * https://api.playfab.com/Documentation/Entity/method/AcceptGroupInvitation - */ - AcceptGroupInvitation(request: PlayFabEntityModels.AcceptGroupInvitationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Adds members to a group or role. - * https://api.playfab.com/Documentation/Entity/method/AddMembers - */ - AddMembers(request: PlayFabEntityModels.AddMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Applies to join a group - * https://api.playfab.com/Documentation/Entity/method/ApplyToGroup - */ - ApplyToGroup(request: PlayFabEntityModels.ApplyToGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Blocks a list of entities from joining a group. - * https://api.playfab.com/Documentation/Entity/method/BlockEntity - */ - BlockEntity(request: PlayFabEntityModels.BlockEntityRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Changes the role membership of a list of entities from one role to another. - * https://api.playfab.com/Documentation/Entity/method/ChangeMemberRole - */ - ChangeMemberRole(request: PlayFabEntityModels.ChangeMemberRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Creates a new group. - * https://api.playfab.com/Documentation/Entity/method/CreateGroup - */ - CreateGroup(request: PlayFabEntityModels.CreateGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Creates a new group role. - * https://api.playfab.com/Documentation/Entity/method/CreateRole - */ - CreateRole(request: PlayFabEntityModels.CreateGroupRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Delete files on an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/DeleteFiles - */ - DeleteFiles(request: PlayFabEntityModels.DeleteFilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Deletes a group and all roles, invitations, join requests, and blocks associated with it. - * https://api.playfab.com/Documentation/Entity/method/DeleteGroup - */ - DeleteGroup(request: PlayFabEntityModels.DeleteGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Deletes an existing role in a group. - * https://api.playfab.com/Documentation/Entity/method/DeleteRole - */ - DeleteRole(request: PlayFabEntityModels.DeleteRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Executes CloudScript using the Entity Profile - * https://api.playfab.com/Documentation/Entity/method/ExecuteEntityCloudScript - */ - ExecuteEntityCloudScript(request: PlayFabEntityModels.ExecuteEntityCloudScriptRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Finalize file uploads to an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/FinalizeFileUploads - */ - FinalizeFileUploads(request: PlayFabEntityModels.FinalizeFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Method to exchange a legacy AuthenticationTicket or title SecretKey for an Entity Token or to refresh a still valid - * Entity Token. - * https://api.playfab.com/Documentation/Entity/method/GetEntityToken - */ - GetEntityToken(request: PlayFabEntityModels.GetEntityTokenRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Retrieves file metadata from an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/GetFiles - */ - GetFiles(request: PlayFabEntityModels.GetFilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Gets the global title access policy - * https://api.playfab.com/Documentation/Entity/method/GetGlobalPolicy - */ - GetGlobalPolicy(request: PlayFabEntityModels.GetGlobalPolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Gets information about a group and its roles - * https://api.playfab.com/Documentation/Entity/method/GetGroup - */ - GetGroup(request: PlayFabEntityModels.GetGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Retrieves objects from an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/GetObjects - */ - GetObjects(request: PlayFabEntityModels.GetObjectsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Retrieves the entity's profile. - * https://api.playfab.com/Documentation/Entity/method/GetProfile - */ - GetProfile(request: PlayFabEntityModels.GetEntityProfileRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Retrieves the entity's profile. - * https://api.playfab.com/Documentation/Entity/method/GetProfiles - */ - GetProfiles(request: PlayFabEntityModels.GetEntityProfilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Initiates file uploads to an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/InitiateFileUploads - */ - InitiateFileUploads(request: PlayFabEntityModels.InitiateFileUploadsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Invites a player to join a group - * https://api.playfab.com/Documentation/Entity/method/InviteToGroup - */ - InviteToGroup(request: PlayFabEntityModels.InviteToGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Checks to see if an entity is a member of a group or role within the group - * https://api.playfab.com/Documentation/Entity/method/IsMember - */ - IsMember(request: PlayFabEntityModels.IsMemberRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all outstanding requests to join a group - * https://api.playfab.com/Documentation/Entity/method/ListGroupApplications - */ - ListGroupApplications(request: PlayFabEntityModels.ListGroupApplicationsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all entities blocked from joining a group - * https://api.playfab.com/Documentation/Entity/method/ListGroupBlocks - */ - ListGroupBlocks(request: PlayFabEntityModels.ListGroupBlocksRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all outstanding invitations for a group - * https://api.playfab.com/Documentation/Entity/method/ListGroupInvitations - */ - ListGroupInvitations(request: PlayFabEntityModels.ListGroupInvitationsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all members for a group - * https://api.playfab.com/Documentation/Entity/method/ListGroupMembers - */ - ListGroupMembers(request: PlayFabEntityModels.ListGroupMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all groups and roles for an entity - * https://api.playfab.com/Documentation/Entity/method/ListMembership - */ - ListMembership(request: PlayFabEntityModels.ListMembershipRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Lists all outstanding invitations and group applications for an entity - * https://api.playfab.com/Documentation/Entity/method/ListMembershipOpportunities - */ - ListMembershipOpportunities(request: PlayFabEntityModels.ListMembershipOpportunitiesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Removes an application to join a group - * https://api.playfab.com/Documentation/Entity/method/RemoveGroupApplication - */ - RemoveGroupApplication(request: PlayFabEntityModels.RemoveGroupApplicationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Removes an invitation join a group - * https://api.playfab.com/Documentation/Entity/method/RemoveGroupInvitation - */ - RemoveGroupInvitation(request: PlayFabEntityModels.RemoveGroupInvitationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Removes members from a group. - * https://api.playfab.com/Documentation/Entity/method/RemoveMembers - */ - RemoveMembers(request: PlayFabEntityModels.RemoveMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Sets the global title access policy - * https://api.playfab.com/Documentation/Entity/method/SetGlobalPolicy - */ - SetGlobalPolicy(request: PlayFabEntityModels.SetGlobalPolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Sets objects on an entity's profile. - * https://api.playfab.com/Documentation/Entity/method/SetObjects - */ - SetObjects(request: PlayFabEntityModels.SetObjectsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Sets the profiles access policy - * https://api.playfab.com/Documentation/Entity/method/SetProfilePolicy - */ - SetProfilePolicy(request: PlayFabEntityModels.SetEntityProfilePolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Unblocks a list of entities from joining a group - * https://api.playfab.com/Documentation/Entity/method/UnblockEntity - */ - UnblockEntity(request: PlayFabEntityModels.UnblockEntityRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Updates non-membership data about a group. - * https://api.playfab.com/Documentation/Entity/method/UpdateGroup - */ - UpdateGroup(request: PlayFabEntityModels.UpdateGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Updates metadata about a role. - * https://api.playfab.com/Documentation/Entity/method/UpdateRole - */ - UpdateRole(request: PlayFabEntityModels.UpdateGroupRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - /** - * Write batches of entity based events to PlayStream. - * https://api.playfab.com/Documentation/Entity/method/WriteEvents - */ - WriteEvents(request: PlayFabEntityModels.WriteEventsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; - - } -} - -declare module PlayFabEntityModels { - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.AbortFileUploadsRequest */ - export interface AbortFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** Names of the files to have their pending uploads aborted. */ - FileNames: string[]; - /** - * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not - * be performed. - */ - ProfileVersion?: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.AbortFileUploadsResponse */ - export interface AbortFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.AcceptGroupApplicationRequest */ - export interface AcceptGroupApplicationRequest extends PlayFabModule.IPlayFabRequestCommon { - /** - * Optional. Type of the entity to accept as. If specified, must be the same entity as the claimant or an entity that is a - * child of the claimant entity. Defaults to the claimant entity. - */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.AcceptGroupInvitationRequest */ - export interface AcceptGroupInvitationRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.AddMembersRequest */ - export interface AddMembersRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - /** List of entities to add to the group. Only entities of type title_player_account and character may be added to groups. */ - Members: EntityKey[]; - /** - * Optional: The ID of the existing role to add the entities to. If this is not specified, the default member role for the - * group will be used. Role IDs must be between 1 and 64 characters long. - */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ApplyToGroupRequest */ - export interface ApplyToGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** Optional, default true. Automatically accept an outstanding invitation if one exists instead of creating an application */ - AutoAcceptOutstandingInvite?: boolean; - /** The entity to perform this action on. */ - Entity?: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ApplyToGroupResponse */ - export interface ApplyToGroupResponse extends PlayFabModule.IPlayFabResultCommon { - /** Type of entity that requested membership */ - Entity?: EntityWithLineage; - /** When the application to join will expire and be deleted */ - Expires: string; - /** ID of the group that the entity requesting membership to */ - Group?: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.BlockEntityRequest */ - export interface BlockEntityRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ChangeMemberRoleRequest */ - export interface ChangeMemberRoleRequest extends PlayFabModule.IPlayFabRequestCommon { - /** - * The ID of the role that the entities will become a member of. This must be an existing role. Role IDs must be between 1 - * and 64 characters long. - */ - DestinationRoleId?: string; - /** The identifier of the group */ - Group: EntityKey; - /** - * List of entities to move between roles in the group. All entities in this list must be members of the group and origin - * role. - */ - Members: EntityKey[]; - /** The ID of the role that the entities currently are a member of. Role IDs must be between 1 and 64 characters long. */ - OriginRoleId: string; - - } - - type CloudScriptRevisionOption = "Live" - | "Latest" - | "Specific"; - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.CreateGroupRequest */ - export interface CreateGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - /** The name of the group. This is unique at the title level by default. */ - GroupName: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.CreateGroupResponse */ - export interface CreateGroupResponse extends PlayFabModule.IPlayFabResultCommon { - /** The ID of the administrator role for the group. */ - AdminRoleId?: string; - /** The server date and time the group was created. */ - Created: string; - /** The identifier of the group */ - Group: EntityKey; - /** The name of the group. */ - GroupName?: string; - /** The ID of the default member role for the group. */ - MemberRoleId?: string; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - /** The list of roles and names that belong to the group. */ - Roles?: { [key: string]: string | null }; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.CreateGroupRoleRequest */ - export interface CreateGroupRoleRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - /** - * The ID of the role. This must be unique within the group and cannot be changed. Role IDs must be between 1 and 64 - * characters long. - */ - RoleId: string; - /** - * The name of the role. This must be unique within the group and can be changed later. Role names must be between 1 and - * 100 characters long - */ - RoleName: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.CreateGroupRoleResponse */ - export interface CreateGroupRoleResponse extends PlayFabModule.IPlayFabResultCommon { - /** The current version of the group profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - /** ID for the role */ - RoleId?: string; - /** The name of the role */ - RoleName?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.DeleteFilesRequest */ - export interface DeleteFilesRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** Names of the files to be deleted. */ - FileNames: string[]; - /** - * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not - * be performed. - */ - ProfileVersion?: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.DeleteFilesResponse */ - export interface DeleteFilesResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.DeleteGroupRequest */ - export interface DeleteGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** ID of the group or role to remove */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.DeleteRoleRequest */ - export interface DeleteRoleRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - /** The ID of the role to delete. Role IDs must be between 1 and 64 characters long. */ - RoleId?: string; - - } - - type EffectType = "Allow" - | "Deny"; - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EmptyResult */ - export interface EmptyResult extends PlayFabModule.IPlayFabResultCommon { - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityDataObject */ - export interface EntityDataObject { - /** Un-escaped JSON object, if DataAsObject is true. */ - DataObject?: any; - /** Escaped string JSON body of the object, if DataAsObject is default or false. */ - EscapedDataObject?: string; - /** Name of this object. */ - ObjectName?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityKey */ - export interface EntityKey { - /** Entity profile ID. */ - Id: string; - /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ - Type?: string; - /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ - TypeString?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityMemberRole */ - export interface EntityMemberRole { - /** The list of members in the role */ - Members?: EntityWithLineage[]; - /** The ID of the role. */ - RoleId?: string; - /** The name of the role */ - RoleName?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityPermissionStatement */ - export interface EntityPermissionStatement { - /** The action this statement effects. May be 'Read', 'Write' or '*' for both read and write. */ - Action: string; - /** A comment about the statement. Intended solely for bookkeeping and debugging. */ - Comment?: string; - /** Additional conditions to be applied for entity resources. */ - Condition?: any; - /** The effect this statement will have. It may be either Allow or Deny */ - Effect: string; - /** The principal this statement will effect. */ - Principal: any; - /** The resource this statements effects. Similar to 'pfrn:data--title![Title ID]/Profile/*' */ - Resource: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityProfileBody */ - export interface EntityProfileBody { - /** The entity id and type. */ - Entity?: EntityKey; - /** - * The chain of responsibility for this entity. This is a representation of 'ownership'. It is constructed using the - * following formats (replace '[ID]' with the unique identifier for the given entity): Namespace: 'namespace![Namespace - * ID]' Title: 'title![Namespace ID]/[Title ID]' Master Player Account: 'master_player_account![Namespace - * ID]/[MasterPlayerAccount ID]' Title Player Account: 'title_player_account![Namespace ID]/[Title ID]/[MasterPlayerAccount - * ID]/[TitlePlayerAccount ID]' Character: 'character![Namespace ID]/[Title ID]/[MasterPlayerAccount - * ID]/[TitlePlayerAccount ID]/[Character ID]' - */ - EntityChain?: string; - /** The files on this profile. */ - Files?: { [key: string]: EntityProfileFileMetadata }; - /** The objects on this profile. */ - Objects?: { [key: string]: EntityDataObject }; - /** - * The permissions that govern access to this entity profile and its properties. Only includes permissions set on this - * profile, not global statements from titles and namespaces. - */ - Permissions?: EntityPermissionStatement[]; - /** - * The version number of the profile in persistent storage at the time of the read. Used for optional optimistic - * concurrency during update. - */ - VersionNumber: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityProfileFileMetadata */ - export interface EntityProfileFileMetadata { - /** Checksum value for the file */ - Checksum?: string; - /** Name of the file */ - FileName?: string; - /** Last UTC time the file was modified */ - LastModified: string; - /** Storage service's reported byte count */ - Size: number; - - } - - type EntityTypes = "title" - | "master_player_account" - | "title_player_account" - | "character" - | "group" - | "service"; - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EntityWithLineage */ - export interface EntityWithLineage { - /** The entity key for the specified entity */ - Key?: EntityKey; - /** Dictionary of entity keys for related entities. Dictionary key is entity type. */ - Lineage?: { [key: string]: EntityKey }; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.EventContents */ - export interface EventContents { - /** Entity associated with the event */ - Entity: EntityKey; - /** The namespace in which the event is defined. It must be prepended with 'com.playfab.events.' */ - EventNamespace: string; - /** The name of this event. */ - Name: string; - /** - * The original unique identifier associated with this event before it was posted to PlayFab. The value might differ from - * the EventId value, which is assigned when the event is received by the server. - */ - OriginalId?: string; - /** - * The time (in UTC) associated with this event when it occurred. If specified, this value is stored in the - * OriginalTimestamp property of the PlayStream event. - */ - OriginalTimestamp?: string; - /** Arbitrary data associated with the event. Only one of Payload or PayloadJSON is allowed. */ - Payload?: any; - /** - * Arbitrary data associated with the event, represented as a JSON serialized string. Only one of Payload or PayloadJSON is - * allowed. - */ - PayloadJSON?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ExecuteCloudScriptResult */ - export interface ExecuteCloudScriptResult extends PlayFabModule.IPlayFabResultCommon { - /** Number of PlayFab API requests issued by the CloudScript function */ - APIRequestsIssued: number; - /** Information about the error, if any, that occurred during execution */ - Error?: ScriptExecutionError; - ExecutionTimeSeconds: number; - /** The name of the function that executed */ - FunctionName?: string; - /** The object returned from the CloudScript function, if any */ - FunctionResult?: any; - /** - * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if - * the total event size is larger than 350KB. - */ - FunctionResultTooLarge?: boolean; - /** Number of external HTTP requests issued by the CloudScript function */ - HttpRequestsIssued: number; - /** - * Entries logged during the function execution. These include both entries logged in the function code using log.info() - * and log.error() and error entries for API and HTTP request failures. - */ - Logs?: LogStatement[]; - /** - * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total - * event size is larger than 350KB after the FunctionResult was removed. - */ - LogsTooLarge?: boolean; - MemoryConsumedBytes: number; - /** - * Processor time consumed while executing the function. This does not include time spent waiting on API calls or HTTP - * requests. - */ - ProcessorTimeSeconds: number; - /** The revision of the CloudScript that executed */ - Revision: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ExecuteEntityCloudScriptRequest */ - export interface ExecuteEntityCloudScriptRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - /** The name of the CloudScript function to execute */ - FunctionName: string; - /** Object that is passed in to the function as the first argument */ - FunctionParameter?: any; - /** - * Generate a 'entity_executed_cloudscript' PlayStream event containing the results of the function execution and other - * contextual information. This event will show up in the PlayStream debugger console for the player in Game Manager. - */ - GeneratePlayStreamEvent?: boolean; - /** - * Option for which revision of the CloudScript to execute. 'Latest' executes the most recently created revision, 'Live' - * executes the current live, published revision, and 'Specific' executes the specified revision. The default value is - * 'Specific', if the SpecificRevision parameter is specified, otherwise it is 'Live'. - */ - RevisionSelection?: string; - /** The specific revision to execute, when RevisionSelection is set to 'Specific' */ - SpecificRevision?: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.FinalizeFileUploadsRequest */ - export interface FinalizeFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** Names of the files to be finalized. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ - FileNames: string[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.FinalizeFileUploadsResponse */ - export interface FinalizeFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** Collection of metadata for the entity's files */ - Metadata?: { [key: string]: GetFileMetadata }; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityProfileRequest */ - export interface GetEntityProfileRequest extends PlayFabModule.IPlayFabRequestCommon { - /** - * Determines whether the objects will be returned as an escaped JSON string or as a un-escaped JSON object. Default is - * JSON string. - */ - DataAsObject?: boolean; - /** The entity to perform this action on. */ - Entity: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityProfileResponse */ - export interface GetEntityProfileResponse extends PlayFabModule.IPlayFabResultCommon { - /** Entity profile */ - Profile?: EntityProfileBody; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityProfilesRequest */ - export interface GetEntityProfilesRequest extends PlayFabModule.IPlayFabRequestCommon { - /** - * Determines whether the objects will be returned as an escaped JSON string or as a un-escaped JSON object. Default is - * JSON string. - */ - DataAsObject?: boolean; - /** Entity keys of the profiles to load. Must be between 1 and 25 */ - Entities: EntityKey[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityProfilesResponse */ - export interface GetEntityProfilesResponse extends PlayFabModule.IPlayFabResultCommon { - /** Entity profiles */ - Profiles?: EntityProfileBody[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityTokenRequest */ - export interface GetEntityTokenRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetEntityTokenResponse */ - export interface GetEntityTokenResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** The token used to set X-EntityToken for all entity based API calls. */ - EntityToken?: string; - /** The time the token will expire, if it is an expiring token, in UTC. */ - TokenExpiration?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetFileMetadata */ - export interface GetFileMetadata { - /** Checksum value for the file */ - Checksum?: string; - /** Download URL where the file can be retrieved */ - DownloadUrl?: string; - /** Name of the file */ - FileName?: string; - /** Last UTC time the file was modified */ - LastModified: string; - /** Storage service's reported byte count */ - Size: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetFilesRequest */ - export interface GetFilesRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetFilesResponse */ - export interface GetFilesResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** Collection of metadata for the entity's files */ - Metadata?: { [key: string]: GetFileMetadata }; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetGlobalPolicyRequest */ - export interface GetGlobalPolicyRequest extends PlayFabModule.IPlayFabRequestCommon { - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetGlobalPolicyResponse */ - export interface GetGlobalPolicyResponse extends PlayFabModule.IPlayFabResultCommon { - /** The permissions that govern access to all entities under this title or namespace. */ - Permissions?: EntityPermissionStatement[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetGroupRequest */ - export interface GetGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group?: EntityKey; - /** The full name of the group */ - GroupName?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetGroupResponse */ - export interface GetGroupResponse extends PlayFabModule.IPlayFabResultCommon { - /** The ID of the administrator role for the group. */ - AdminRoleId?: string; - /** The server date and time the group was created. */ - Created: string; - /** The identifier of the group */ - Group: EntityKey; - /** The name of the group. */ - GroupName?: string; - /** The ID of the default member role for the group. */ - MemberRoleId?: string; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - /** The list of roles and names that belong to the group. */ - Roles?: { [key: string]: string | null }; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetObjectsRequest */ - export interface GetObjectsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** - * Determines whether the object will be returned as an escaped JSON string or as a un-escaped JSON object. Default is JSON - * object. - */ - EscapeObject?: boolean; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GetObjectsResponse */ - export interface GetObjectsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** Requested objects that the calling entity has access to */ - Objects?: { [key: string]: ObjectResult }; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GroupApplication */ - export interface GroupApplication { - /** Type of entity that requested membership */ - Entity?: EntityWithLineage; - /** When the application to join will expire and be deleted */ - Expires: string; - /** ID of the group that the entity requesting membership to */ - Group?: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GroupBlock */ - export interface GroupBlock { - /** The entity that is blocked */ - Entity?: EntityWithLineage; - /** ID of the group that the entity is blocked from */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GroupInvitation */ - export interface GroupInvitation { - /** When the invitation will expire and be deleted */ - Expires: string; - /** The group that the entity invited to */ - Group?: EntityKey; - /** The entity that created the invitation */ - InvitedByEntity?: EntityWithLineage; - /** The entity that is invited */ - InvitedEntity?: EntityWithLineage; - /** ID of the role in the group to assign the user to. */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GroupRole */ - export interface GroupRole { - /** ID for the role */ - RoleId?: string; - /** The name of the role */ - RoleName?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.GroupWithRoles */ - export interface GroupWithRoles { - /** ID for the group */ - Group?: EntityKey; - /** The name of the group */ - GroupName?: string; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - /** The list of roles within the group */ - Roles?: GroupRole[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.InitiateFileUploadMetadata */ - export interface InitiateFileUploadMetadata { - /** Name of the file. */ - FileName?: string; - /** Location the data should be sent to via an HTTP PUT operation. */ - UploadUrl?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.InitiateFileUploadsRequest */ - export interface InitiateFileUploadsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** Names of the files to be set. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ - FileNames: string[]; - /** - * The expected version of the profile, if set and doesn't match the current version of the profile the operation will not - * be performed. - */ - ProfileVersion?: number; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.InitiateFileUploadsResponse */ - export interface InitiateFileUploadsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The entity id and type. */ - Entity?: EntityKey; - /** The current version of the profile, can be used for concurrency control during updates. */ - ProfileVersion: number; - /** Collection of file names and upload urls */ - UploadDetails?: InitiateFileUploadMetadata[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.InviteToGroupRequest */ - export interface InviteToGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** Optional, default true. Automatically accept an application if one exists instead of creating an invitation */ - AutoAcceptOutstandingApplication?: boolean; - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - /** - * Optional. ID of an existing a role in the group to assign the user to. The group's default member role is used if this - * is not specified. Role IDs must be between 1 and 64 characters long. - */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.InviteToGroupResponse */ - export interface InviteToGroupResponse extends PlayFabModule.IPlayFabResultCommon { - /** When the invitation will expire and be deleted */ - Expires: string; - /** The group that the entity invited to */ - Group?: EntityKey; - /** The entity that created the invitation */ - InvitedByEntity?: EntityWithLineage; - /** The entity that is invited */ - InvitedEntity?: EntityWithLineage; - /** ID of the role in the group to assign the user to. */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.IsMemberRequest */ - export interface IsMemberRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - /** - * Optional: ID of the role to check membership of. Defaults to any role (that is, check to see if the entity is a member - * of the group in any capacity) if not specified. - */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.IsMemberResponse */ - export interface IsMemberResponse extends PlayFabModule.IPlayFabResultCommon { - /** A value indicating whether or not the entity is a member. */ - IsMember: boolean; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupApplicationsRequest */ - export interface ListGroupApplicationsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupApplicationsResponse */ - export interface ListGroupApplicationsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The requested list of applications to the group. */ - Applications?: GroupApplication[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupBlocksRequest */ - export interface ListGroupBlocksRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupBlocksResponse */ - export interface ListGroupBlocksResponse extends PlayFabModule.IPlayFabResultCommon { - /** The requested list blocked entities. */ - BlockedEntities?: GroupBlock[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupInvitationsRequest */ - export interface ListGroupInvitationsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupInvitationsResponse */ - export interface ListGroupInvitationsResponse extends PlayFabModule.IPlayFabResultCommon { - /** The requested list of group invitations. */ - Invitations?: GroupInvitation[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupMembersRequest */ - export interface ListGroupMembersRequest extends PlayFabModule.IPlayFabRequestCommon { - /** ID of the group to list the members and roles for */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListGroupMembersResponse */ - export interface ListGroupMembersResponse extends PlayFabModule.IPlayFabResultCommon { - /** The requested list of roles and member entity IDs. */ - Members?: EntityMemberRole[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListMembershipOpportunitiesRequest */ - export interface ListMembershipOpportunitiesRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListMembershipOpportunitiesResponse */ - export interface ListMembershipOpportunitiesResponse extends PlayFabModule.IPlayFabResultCommon { - /** The requested list of group applications. */ - Applications?: GroupApplication[]; - /** The requested list of group invitations. */ - Invitations?: GroupInvitation[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListMembershipRequest */ - export interface ListMembershipRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity?: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ListMembershipResponse */ - export interface ListMembershipResponse extends PlayFabModule.IPlayFabResultCommon { - /** The list of groups */ - Groups?: GroupWithRoles[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.LogStatement */ - export interface LogStatement { - /** Optional object accompanying the message as contextual information */ - Data?: any; - /** 'Debug', 'Info', or 'Error' */ - Level?: string; - Message?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ObjectResult */ - export interface ObjectResult extends PlayFabModule.IPlayFabResultCommon { - /** Un-escaped JSON object, if EscapeObject false or default. */ - DataObject?: any; - /** Escaped string JSON body of the object, if EscapeObject is true. */ - EscapedDataObject?: string; - /** Name of the object. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.' */ - ObjectName?: string; - - } - - type OperationTypes = "Created" - | "Updated" - | "Deleted" - | "None"; - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.RemoveGroupApplicationRequest */ - export interface RemoveGroupApplicationRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.RemoveGroupInvitationRequest */ - export interface RemoveGroupInvitationRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.RemoveMembersRequest */ - export interface RemoveMembersRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The identifier of the group */ - Group: EntityKey; - /** List of entities to remove */ - Members: EntityKey[]; - /** The ID of the role to remove the entities from. */ - RoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.ScriptExecutionError */ - export interface ScriptExecutionError { - /** - * Error code, such as CloudScriptNotFound, JavascriptException, CloudScriptFunctionArgumentSizeExceeded, - * CloudScriptAPIRequestCountExceeded, CloudScriptAPIRequestError, or CloudScriptHTTPRequestError - */ - Error?: string; - /** Details about the error */ - Message?: string; - /** Point during the execution of the script at which the error occurred, if any */ - StackTrace?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetEntityProfilePolicyRequest */ - export interface SetEntityProfilePolicyRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The statements to include in the access policy. */ - Statements?: EntityPermissionStatement[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetEntityProfilePolicyResponse */ - export interface SetEntityProfilePolicyResponse extends PlayFabModule.IPlayFabResultCommon { - /** - * The permissions that govern access to this entity profile and its properties. Only includes permissions set on this - * profile, not global statements from titles and namespaces. - */ - Permissions?: EntityPermissionStatement[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetGlobalPolicyRequest */ - export interface SetGlobalPolicyRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The permissions that govern access to all entities under this title or namespace. */ - Permissions?: EntityPermissionStatement[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetGlobalPolicyResponse */ - export interface SetGlobalPolicyResponse extends PlayFabModule.IPlayFabResultCommon { - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetObject */ - export interface SetObject { - /** - * Body of the object to be saved. If empty and DeleteObject is true object will be deleted if it exists, or no operation - * will occur if it does not exist. Only one of Object or EscapedDataObject fields may be used. - */ - DataObject?: any; - /** Flag to indicate that this object should be deleted. Both DataObject and EscapedDataObject must not be set as well. */ - DeleteObject?: boolean; - /** - * Body of the object to be saved as an escaped JSON string. If empty and DeleteObject is true object will be deleted if it - * exists, or no operation will occur if it does not exist. Only one of DataObject or EscapedDataObject fields may be used. - */ - EscapedDataObject?: string; - /** Name of object. Restricted to a-Z, 0-9, '(', ')', '_', '-' and '.'. */ - ObjectName: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetObjectInfo */ - export interface SetObjectInfo { - /** Name of the object */ - ObjectName?: string; - /** Optional reason to explain why the operation was the result that it was. */ - OperationReason?: string; - /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ - SetResult?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetObjectsRequest */ - export interface SetObjectsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** - * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from - * GetProfile API, you can ensure that the object set will only be performed if the profile has not been updated by any - * other clients since the version you last loaded. - */ - ExpectedProfileVersion?: number; - /** Collection of objects to set on the profile. */ - Objects: SetObject[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.SetObjectsResponse */ - export interface SetObjectsResponse extends PlayFabModule.IPlayFabResultCommon { - /** New version of the entity profile. */ - ProfileVersion: number; - /** New version of the entity profile. */ - SetResults?: SetObjectInfo[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.UnblockEntityRequest */ - export interface UnblockEntityRequest extends PlayFabModule.IPlayFabRequestCommon { - /** The entity to perform this action on. */ - Entity: EntityKey; - /** The identifier of the group */ - Group: EntityKey; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.UpdateGroupRequest */ - export interface UpdateGroupRequest extends PlayFabModule.IPlayFabRequestCommon { - /** Optional: the ID of an existing role to set as the new administrator role for the group */ - AdminRoleId?: string; - /** - * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from the - * GetGroup API, you can ensure that the group data update will only be performed if the group has not been updated by any - * other clients since the version you last loaded. - */ - ExpectedProfileVersion?: number; - /** The identifier of the group */ - Group: EntityKey; - /** Optional: the new name of the group */ - GroupName?: string; - /** Optional: the ID of an existing role to set as the new member role for the group */ - MemberRoleId?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.UpdateGroupResponse */ - export interface UpdateGroupResponse extends PlayFabModule.IPlayFabResultCommon { - /** Optional reason to explain why the operation was the result that it was. */ - OperationReason?: string; - /** New version of the group data. */ - ProfileVersion: number; - /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ - SetResult?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.UpdateGroupRoleRequest */ - export interface UpdateGroupRoleRequest extends PlayFabModule.IPlayFabRequestCommon { - /** - * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from the - * GetGroup API, you can ensure that the group data update will only be performed if the group has not been updated by any - * other clients since the version you last loaded. - */ - ExpectedProfileVersion?: number; - /** The identifier of the group */ - Group: EntityKey; - /** ID of the role to update. Role IDs must be between 1 and 64 characters long. */ - RoleId?: string; - /** The new name of the role */ - RoleName: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.UpdateGroupRoleResponse */ - export interface UpdateGroupRoleResponse extends PlayFabModule.IPlayFabResultCommon { - /** Optional reason to explain why the operation was the result that it was. */ - OperationReason?: string; - /** New version of the role data. */ - ProfileVersion: number; - /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ - SetResult?: string; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.WriteEventsRequest */ - export interface WriteEventsRequest extends PlayFabModule.IPlayFabRequestCommon { - /** Collection of events to write to PlayStream. */ - Events: EventContents[]; - - } - - /** https://api.playfab.com/Documentation/Entity/datatype/PlayFab.Entity.Models/PlayFab.Entity.Models.WriteEventsResponse */ - export interface WriteEventsResponse extends PlayFabModule.IPlayFabResultCommon { - /** - * The unique identifiers assigned by the server to the events, in the same order as the events in the request. Only - * returned if FlushToPlayStream option is true. - */ - AssignedEventIds?: string[]; - - } - - -} diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabEventsApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabEventsApi.d.ts new file mode 100644 index 00000000..001f1f51 --- /dev/null +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFabEventsApi.d.ts @@ -0,0 +1,81 @@ +/// + +declare module PlayFabEventsModule { + export interface IPlayFabEvents { + ForgetAllCredentials(): void; + + /** + * Write batches of entity based events to PlayStream. + * https://api.playfab.com/Documentation/Events/method/WriteEvents + */ + WriteEvents(request: PlayFabEventsModels.WriteEventsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabEventsModels { + /** https://api.playfab.com/Documentation/Events/datatype/PlayFab.Events.Models/PlayFab.Events.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/Events/datatype/PlayFab.Events.Models/PlayFab.Events.Models.EventContents */ + export interface EventContents { + /** Entity associated with the event */ + Entity: EntityKey; + /** The namespace in which the event is defined. It must be prepended with 'com.playfab.events.' */ + EventNamespace: string; + /** The name of this event. */ + Name: string; + /** + * The original unique identifier associated with this event before it was posted to PlayFab. The value might differ from + * the EventId value, which is assigned when the event is received by the server. + */ + OriginalId?: string; + /** + * The time (in UTC) associated with this event when it occurred. If specified, this value is stored in the + * OriginalTimestamp property of the PlayStream event. + */ + OriginalTimestamp?: string; + /** Arbitrary data associated with the event. Only one of Payload or PayloadJSON is allowed. */ + Payload?: any; + /** + * Arbitrary data associated with the event, represented as a JSON serialized string. Only one of Payload or PayloadJSON is + * allowed. + */ + PayloadJSON?: string; + + } + + /** https://api.playfab.com/Documentation/Events/datatype/PlayFab.Events.Models/PlayFab.Events.Models.WriteEventsRequest */ + export interface WriteEventsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Collection of events to write to PlayStream. */ + Events: EventContents[]; + + } + + /** https://api.playfab.com/Documentation/Events/datatype/PlayFab.Events.Models/PlayFab.Events.Models.WriteEventsResponse */ + export interface WriteEventsResponse extends PlayFabModule.IPlayFabResultCommon { + /** + * The unique identifiers assigned by the server to the events, in the same order as the events in the request. Only + * returned if FlushToPlayStream option is true. + */ + AssignedEventIds?: string[]; + + } + + +} diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabGroupsApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabGroupsApi.d.ts new file mode 100644 index 00000000..ee0d20bf --- /dev/null +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFabGroupsApi.d.ts @@ -0,0 +1,662 @@ +/// + +declare module PlayFabGroupsModule { + export interface IPlayFabGroups { + ForgetAllCredentials(): void; + + /** + * Accepts an outstanding invitation to to join a group + * https://api.playfab.com/Documentation/Groups/method/AcceptGroupApplication + */ + AcceptGroupApplication(request: PlayFabGroupsModels.AcceptGroupApplicationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Accepts an invitation to join a group + * https://api.playfab.com/Documentation/Groups/method/AcceptGroupInvitation + */ + AcceptGroupInvitation(request: PlayFabGroupsModels.AcceptGroupInvitationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Adds members to a group or role. + * https://api.playfab.com/Documentation/Groups/method/AddMembers + */ + AddMembers(request: PlayFabGroupsModels.AddMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Applies to join a group + * https://api.playfab.com/Documentation/Groups/method/ApplyToGroup + */ + ApplyToGroup(request: PlayFabGroupsModels.ApplyToGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Blocks a list of entities from joining a group. + * https://api.playfab.com/Documentation/Groups/method/BlockEntity + */ + BlockEntity(request: PlayFabGroupsModels.BlockEntityRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Changes the role membership of a list of entities from one role to another. + * https://api.playfab.com/Documentation/Groups/method/ChangeMemberRole + */ + ChangeMemberRole(request: PlayFabGroupsModels.ChangeMemberRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Creates a new group. + * https://api.playfab.com/Documentation/Groups/method/CreateGroup + */ + CreateGroup(request: PlayFabGroupsModels.CreateGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Creates a new group role. + * https://api.playfab.com/Documentation/Groups/method/CreateRole + */ + CreateRole(request: PlayFabGroupsModels.CreateGroupRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Deletes a group and all roles, invitations, join requests, and blocks associated with it. + * https://api.playfab.com/Documentation/Groups/method/DeleteGroup + */ + DeleteGroup(request: PlayFabGroupsModels.DeleteGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Deletes an existing role in a group. + * https://api.playfab.com/Documentation/Groups/method/DeleteRole + */ + DeleteRole(request: PlayFabGroupsModels.DeleteRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Gets information about a group and its roles + * https://api.playfab.com/Documentation/Groups/method/GetGroup + */ + GetGroup(request: PlayFabGroupsModels.GetGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Invites a player to join a group + * https://api.playfab.com/Documentation/Groups/method/InviteToGroup + */ + InviteToGroup(request: PlayFabGroupsModels.InviteToGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Checks to see if an entity is a member of a group or role within the group + * https://api.playfab.com/Documentation/Groups/method/IsMember + */ + IsMember(request: PlayFabGroupsModels.IsMemberRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all outstanding requests to join a group + * https://api.playfab.com/Documentation/Groups/method/ListGroupApplications + */ + ListGroupApplications(request: PlayFabGroupsModels.ListGroupApplicationsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all entities blocked from joining a group + * https://api.playfab.com/Documentation/Groups/method/ListGroupBlocks + */ + ListGroupBlocks(request: PlayFabGroupsModels.ListGroupBlocksRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all outstanding invitations for a group + * https://api.playfab.com/Documentation/Groups/method/ListGroupInvitations + */ + ListGroupInvitations(request: PlayFabGroupsModels.ListGroupInvitationsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all members for a group + * https://api.playfab.com/Documentation/Groups/method/ListGroupMembers + */ + ListGroupMembers(request: PlayFabGroupsModels.ListGroupMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all groups and roles for an entity + * https://api.playfab.com/Documentation/Groups/method/ListMembership + */ + ListMembership(request: PlayFabGroupsModels.ListMembershipRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Lists all outstanding invitations and group applications for an entity + * https://api.playfab.com/Documentation/Groups/method/ListMembershipOpportunities + */ + ListMembershipOpportunities(request: PlayFabGroupsModels.ListMembershipOpportunitiesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Removes an application to join a group + * https://api.playfab.com/Documentation/Groups/method/RemoveGroupApplication + */ + RemoveGroupApplication(request: PlayFabGroupsModels.RemoveGroupApplicationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Removes an invitation join a group + * https://api.playfab.com/Documentation/Groups/method/RemoveGroupInvitation + */ + RemoveGroupInvitation(request: PlayFabGroupsModels.RemoveGroupInvitationRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Removes members from a group. + * https://api.playfab.com/Documentation/Groups/method/RemoveMembers + */ + RemoveMembers(request: PlayFabGroupsModels.RemoveMembersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Unblocks a list of entities from joining a group + * https://api.playfab.com/Documentation/Groups/method/UnblockEntity + */ + UnblockEntity(request: PlayFabGroupsModels.UnblockEntityRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Updates non-membership data about a group. + * https://api.playfab.com/Documentation/Groups/method/UpdateGroup + */ + UpdateGroup(request: PlayFabGroupsModels.UpdateGroupRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Updates metadata about a role. + * https://api.playfab.com/Documentation/Groups/method/UpdateRole + */ + UpdateRole(request: PlayFabGroupsModels.UpdateGroupRoleRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabGroupsModels { + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.AcceptGroupApplicationRequest */ + export interface AcceptGroupApplicationRequest extends PlayFabModule.IPlayFabRequestCommon { + /** + * Optional. Type of the entity to accept as. If specified, must be the same entity as the claimant or an entity that is a + * child of the claimant entity. Defaults to the claimant entity. + */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.AcceptGroupInvitationRequest */ + export interface AcceptGroupInvitationRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.AddMembersRequest */ + export interface AddMembersRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + /** List of entities to add to the group. Only entities of type title_player_account and character may be added to groups. */ + Members: EntityKey[]; + /** + * Optional: The ID of the existing role to add the entities to. If this is not specified, the default member role for the + * group will be used. Role IDs must be between 1 and 64 characters long. + */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ApplyToGroupRequest */ + export interface ApplyToGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Optional, default true. Automatically accept an outstanding invitation if one exists instead of creating an application */ + AutoAcceptOutstandingInvite?: boolean; + /** The entity to perform this action on. */ + Entity?: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ApplyToGroupResponse */ + export interface ApplyToGroupResponse extends PlayFabModule.IPlayFabResultCommon { + /** Type of entity that requested membership */ + Entity?: EntityWithLineage; + /** When the application to join will expire and be deleted */ + Expires: string; + /** ID of the group that the entity requesting membership to */ + Group?: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.BlockEntityRequest */ + export interface BlockEntityRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ChangeMemberRoleRequest */ + export interface ChangeMemberRoleRequest extends PlayFabModule.IPlayFabRequestCommon { + /** + * The ID of the role that the entities will become a member of. This must be an existing role. Role IDs must be between 1 + * and 64 characters long. + */ + DestinationRoleId?: string; + /** The identifier of the group */ + Group: EntityKey; + /** + * List of entities to move between roles in the group. All entities in this list must be members of the group and origin + * role. + */ + Members: EntityKey[]; + /** The ID of the role that the entities currently are a member of. Role IDs must be between 1 and 64 characters long. */ + OriginRoleId: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.CreateGroupRequest */ + export interface CreateGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + /** The name of the group. This is unique at the title level by default. */ + GroupName: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.CreateGroupResponse */ + export interface CreateGroupResponse extends PlayFabModule.IPlayFabResultCommon { + /** The ID of the administrator role for the group. */ + AdminRoleId?: string; + /** The server date and time the group was created. */ + Created: string; + /** The identifier of the group */ + Group: EntityKey; + /** The name of the group. */ + GroupName?: string; + /** The ID of the default member role for the group. */ + MemberRoleId?: string; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + /** The list of roles and names that belong to the group. */ + Roles?: { [key: string]: string | null }; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.CreateGroupRoleRequest */ + export interface CreateGroupRoleRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + /** + * The ID of the role. This must be unique within the group and cannot be changed. Role IDs must be between 1 and 64 + * characters long. + */ + RoleId: string; + /** + * The name of the role. This must be unique within the group and can be changed later. Role names must be between 1 and + * 100 characters long + */ + RoleName: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.CreateGroupRoleResponse */ + export interface CreateGroupRoleResponse extends PlayFabModule.IPlayFabResultCommon { + /** The current version of the group profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + /** ID for the role */ + RoleId?: string; + /** The name of the role */ + RoleName?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.DeleteGroupRequest */ + export interface DeleteGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** ID of the group or role to remove */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.DeleteRoleRequest */ + export interface DeleteRoleRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + /** The ID of the role to delete. Role IDs must be between 1 and 64 characters long. */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.EmptyResult */ + export interface EmptyResult extends PlayFabModule.IPlayFabResultCommon { + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.EntityMemberRole */ + export interface EntityMemberRole { + /** The list of members in the role */ + Members?: EntityWithLineage[]; + /** The ID of the role. */ + RoleId?: string; + /** The name of the role */ + RoleName?: string; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.EntityWithLineage */ + export interface EntityWithLineage { + /** The entity key for the specified entity */ + Key?: EntityKey; + /** Dictionary of entity keys for related entities. Dictionary key is entity type. */ + Lineage?: { [key: string]: EntityKey }; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GetGroupRequest */ + export interface GetGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group?: EntityKey; + /** The full name of the group */ + GroupName?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GetGroupResponse */ + export interface GetGroupResponse extends PlayFabModule.IPlayFabResultCommon { + /** The ID of the administrator role for the group. */ + AdminRoleId?: string; + /** The server date and time the group was created. */ + Created: string; + /** The identifier of the group */ + Group: EntityKey; + /** The name of the group. */ + GroupName?: string; + /** The ID of the default member role for the group. */ + MemberRoleId?: string; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + /** The list of roles and names that belong to the group. */ + Roles?: { [key: string]: string | null }; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GroupApplication */ + export interface GroupApplication { + /** Type of entity that requested membership */ + Entity?: EntityWithLineage; + /** When the application to join will expire and be deleted */ + Expires: string; + /** ID of the group that the entity requesting membership to */ + Group?: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GroupBlock */ + export interface GroupBlock { + /** The entity that is blocked */ + Entity?: EntityWithLineage; + /** ID of the group that the entity is blocked from */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GroupInvitation */ + export interface GroupInvitation { + /** When the invitation will expire and be deleted */ + Expires: string; + /** The group that the entity invited to */ + Group?: EntityKey; + /** The entity that created the invitation */ + InvitedByEntity?: EntityWithLineage; + /** The entity that is invited */ + InvitedEntity?: EntityWithLineage; + /** ID of the role in the group to assign the user to. */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GroupRole */ + export interface GroupRole { + /** ID for the role */ + RoleId?: string; + /** The name of the role */ + RoleName?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.GroupWithRoles */ + export interface GroupWithRoles { + /** ID for the group */ + Group?: EntityKey; + /** The name of the group */ + GroupName?: string; + /** The current version of the profile, can be used for concurrency control during updates. */ + ProfileVersion: number; + /** The list of roles within the group */ + Roles?: GroupRole[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.InviteToGroupRequest */ + export interface InviteToGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Optional, default true. Automatically accept an application if one exists instead of creating an invitation */ + AutoAcceptOutstandingApplication?: boolean; + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + /** + * Optional. ID of an existing a role in the group to assign the user to. The group's default member role is used if this + * is not specified. Role IDs must be between 1 and 64 characters long. + */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.InviteToGroupResponse */ + export interface InviteToGroupResponse extends PlayFabModule.IPlayFabResultCommon { + /** When the invitation will expire and be deleted */ + Expires: string; + /** The group that the entity invited to */ + Group?: EntityKey; + /** The entity that created the invitation */ + InvitedByEntity?: EntityWithLineage; + /** The entity that is invited */ + InvitedEntity?: EntityWithLineage; + /** ID of the role in the group to assign the user to. */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.IsMemberRequest */ + export interface IsMemberRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + /** + * Optional: ID of the role to check membership of. Defaults to any role (that is, check to see if the entity is a member + * of the group in any capacity) if not specified. + */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.IsMemberResponse */ + export interface IsMemberResponse extends PlayFabModule.IPlayFabResultCommon { + /** A value indicating whether or not the entity is a member. */ + IsMember: boolean; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupApplicationsRequest */ + export interface ListGroupApplicationsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupApplicationsResponse */ + export interface ListGroupApplicationsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The requested list of applications to the group. */ + Applications?: GroupApplication[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupBlocksRequest */ + export interface ListGroupBlocksRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupBlocksResponse */ + export interface ListGroupBlocksResponse extends PlayFabModule.IPlayFabResultCommon { + /** The requested list blocked entities. */ + BlockedEntities?: GroupBlock[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupInvitationsRequest */ + export interface ListGroupInvitationsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupInvitationsResponse */ + export interface ListGroupInvitationsResponse extends PlayFabModule.IPlayFabResultCommon { + /** The requested list of group invitations. */ + Invitations?: GroupInvitation[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupMembersRequest */ + export interface ListGroupMembersRequest extends PlayFabModule.IPlayFabRequestCommon { + /** ID of the group to list the members and roles for */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListGroupMembersResponse */ + export interface ListGroupMembersResponse extends PlayFabModule.IPlayFabResultCommon { + /** The requested list of roles and member entity IDs. */ + Members?: EntityMemberRole[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListMembershipOpportunitiesRequest */ + export interface ListMembershipOpportunitiesRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListMembershipOpportunitiesResponse */ + export interface ListMembershipOpportunitiesResponse extends PlayFabModule.IPlayFabResultCommon { + /** The requested list of group applications. */ + Applications?: GroupApplication[]; + /** The requested list of group invitations. */ + Invitations?: GroupInvitation[]; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListMembershipRequest */ + export interface ListMembershipRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.ListMembershipResponse */ + export interface ListMembershipResponse extends PlayFabModule.IPlayFabResultCommon { + /** The list of groups */ + Groups?: GroupWithRoles[]; + + } + + type OperationTypes = "Created" + | "Updated" + | "Deleted" + | "None"; + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.RemoveGroupApplicationRequest */ + export interface RemoveGroupApplicationRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.RemoveGroupInvitationRequest */ + export interface RemoveGroupInvitationRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.RemoveMembersRequest */ + export interface RemoveMembersRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The identifier of the group */ + Group: EntityKey; + /** List of entities to remove */ + Members: EntityKey[]; + /** The ID of the role to remove the entities from. */ + RoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.UnblockEntityRequest */ + export interface UnblockEntityRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The identifier of the group */ + Group: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.UpdateGroupRequest */ + export interface UpdateGroupRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Optional: the ID of an existing role to set as the new administrator role for the group */ + AdminRoleId?: string; + /** + * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from the + * GetGroup API, you can ensure that the group data update will only be performed if the group has not been updated by any + * other clients since the version you last loaded. + */ + ExpectedProfileVersion?: number; + /** The identifier of the group */ + Group: EntityKey; + /** Optional: the new name of the group */ + GroupName?: string; + /** Optional: the ID of an existing role to set as the new member role for the group */ + MemberRoleId?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.UpdateGroupResponse */ + export interface UpdateGroupResponse extends PlayFabModule.IPlayFabResultCommon { + /** Optional reason to explain why the operation was the result that it was. */ + OperationReason?: string; + /** New version of the group data. */ + ProfileVersion: number; + /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ + SetResult?: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.UpdateGroupRoleRequest */ + export interface UpdateGroupRoleRequest extends PlayFabModule.IPlayFabRequestCommon { + /** + * Optional field used for concurrency control. By specifying the previously returned value of ProfileVersion from the + * GetGroup API, you can ensure that the group data update will only be performed if the group has not been updated by any + * other clients since the version you last loaded. + */ + ExpectedProfileVersion?: number; + /** The identifier of the group */ + Group: EntityKey; + /** ID of the role to update. Role IDs must be between 1 and 64 characters long. */ + RoleId?: string; + /** The new name of the role */ + RoleName: string; + + } + + /** https://api.playfab.com/Documentation/Groups/datatype/PlayFab.Groups.Models/PlayFab.Groups.Models.UpdateGroupRoleResponse */ + export interface UpdateGroupRoleResponse extends PlayFabModule.IPlayFabResultCommon { + /** Optional reason to explain why the operation was the result that it was. */ + OperationReason?: string; + /** New version of the role data. */ + ProfileVersion: number; + /** Indicates which operation was completed, either Created, Updated, Deleted or None. */ + SetResult?: string; + + } + + +} diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabMatchmakerApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabMatchmakerApi.d.ts index fc992efb..6e5e864d 100644 --- a/PlayFabTestingExample/src/typings/PlayFab/PlayFabMatchmakerApi.d.ts +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFabMatchmakerApi.d.ts @@ -156,10 +156,14 @@ declare module PlayFabMatchmakerModels { GameID?: string; /** IPV4 address of the new Game Server Instance. */ ServerHostname?: string; + /** IPV4 address of the server */ + ServerIPV4Address?: string; /** IPV6 address of the new Game Server Instance. */ ServerIPV6Address?: string; /** Port number for communication with the Game Server Instance. */ ServerPort: number; + /** Public DNS name (if any) of the server */ + ServerPublicDNSName?: string; } diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabProfilesApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabProfilesApi.d.ts new file mode 100644 index 00000000..d961faab --- /dev/null +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFabProfilesApi.d.ts @@ -0,0 +1,243 @@ +/// + +declare module PlayFabProfilesModule { + export interface IPlayFabProfiles { + ForgetAllCredentials(): void; + + /** + * Gets the global title access policy + * https://api.playfab.com/Documentation/Profiles/method/GetGlobalPolicy + */ + GetGlobalPolicy(request: PlayFabProfilesModels.GetGlobalPolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the entity's profile. + * https://api.playfab.com/Documentation/Profiles/method/GetProfile + */ + GetProfile(request: PlayFabProfilesModels.GetEntityProfileRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the entity's profile. + * https://api.playfab.com/Documentation/Profiles/method/GetProfiles + */ + GetProfiles(request: PlayFabProfilesModels.GetEntityProfilesRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Sets the global title access policy + * https://api.playfab.com/Documentation/Profiles/method/SetGlobalPolicy + */ + SetGlobalPolicy(request: PlayFabProfilesModels.SetGlobalPolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Updates the entity's language + * https://api.playfab.com/Documentation/Profiles/method/SetProfileLanguage + */ + SetProfileLanguage(request: PlayFabProfilesModels.SetProfileLanguageRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Sets the profiles access policy + * https://api.playfab.com/Documentation/Profiles/method/SetProfilePolicy + */ + SetProfilePolicy(request: PlayFabProfilesModels.SetEntityProfilePolicyRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + + } +} + +declare module PlayFabProfilesModels { + type EffectType = "Allow" + | "Deny"; + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.EntityDataObject */ + export interface EntityDataObject { + /** Un-escaped JSON object, if DataAsObject is true. */ + DataObject?: any; + /** Escaped string JSON body of the object, if DataAsObject is default or false. */ + EscapedDataObject?: string; + /** Name of this object. */ + ObjectName?: string; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.EntityKey */ + export interface EntityKey { + /** Entity profile ID. */ + Id: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + Type?: string; + /** Entity type. Optional to be used but one of EntityType or EntityTypeString must be set. */ + TypeString?: string; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.EntityPermissionStatement */ + export interface EntityPermissionStatement { + /** The action this statement effects. May be 'Read', 'Write' or '*' for both read and write. */ + Action: string; + /** A comment about the statement. Intended solely for bookkeeping and debugging. */ + Comment?: string; + /** Additional conditions to be applied for entity resources. */ + Condition?: any; + /** The effect this statement will have. It may be either Allow or Deny */ + Effect: string; + /** The principal this statement will effect. */ + Principal: any; + /** The resource this statements effects. Similar to 'pfrn:data--title![Title ID]/Profile/*' */ + Resource: string; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.EntityProfileBody */ + export interface EntityProfileBody { + /** The entity id and type. */ + Entity?: EntityKey; + /** + * The chain of responsibility for this entity. This is a representation of 'ownership'. It is constructed using the + * following formats (replace '[ID]' with the unique identifier for the given entity): Namespace: 'namespace![Namespace + * ID]' Title: 'title![Namespace ID]/[Title ID]' Master Player Account: 'master_player_account![Namespace + * ID]/[MasterPlayerAccount ID]' Title Player Account: 'title_player_account![Namespace ID]/[Title ID]/[MasterPlayerAccount + * ID]/[TitlePlayerAccount ID]' Character: 'character![Namespace ID]/[Title ID]/[MasterPlayerAccount + * ID]/[TitlePlayerAccount ID]/[Character ID]' + */ + EntityChain?: string; + /** The files on this profile. */ + Files?: { [key: string]: EntityProfileFileMetadata }; + /** The language on this profile. */ + Language?: string; + /** The objects on this profile. */ + Objects?: { [key: string]: EntityDataObject }; + /** + * The permissions that govern access to this entity profile and its properties. Only includes permissions set on this + * profile, not global statements from titles and namespaces. + */ + Permissions?: EntityPermissionStatement[]; + /** + * The version number of the profile in persistent storage at the time of the read. Used for optional optimistic + * concurrency during update. + */ + VersionNumber: number; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.EntityProfileFileMetadata */ + export interface EntityProfileFileMetadata { + /** Checksum value for the file */ + Checksum?: string; + /** Name of the file */ + FileName?: string; + /** Last UTC time the file was modified */ + LastModified: string; + /** Storage service's reported byte count */ + Size: number; + + } + + type EntityTypes = "title" + | "master_player_account" + | "title_player_account" + | "character" + | "group" + | "service"; + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetEntityProfileRequest */ + export interface GetEntityProfileRequest extends PlayFabModule.IPlayFabRequestCommon { + /** + * Determines whether the objects will be returned as an escaped JSON string or as a un-escaped JSON object. Default is + * JSON string. + */ + DataAsObject?: boolean; + /** The entity to perform this action on. */ + Entity: EntityKey; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetEntityProfileResponse */ + export interface GetEntityProfileResponse extends PlayFabModule.IPlayFabResultCommon { + /** Entity profile */ + Profile?: EntityProfileBody; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetEntityProfilesRequest */ + export interface GetEntityProfilesRequest extends PlayFabModule.IPlayFabRequestCommon { + /** + * Determines whether the objects will be returned as an escaped JSON string or as a un-escaped JSON object. Default is + * JSON string. + */ + DataAsObject?: boolean; + /** Entity keys of the profiles to load. Must be between 1 and 25 */ + Entities: EntityKey[]; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetEntityProfilesResponse */ + export interface GetEntityProfilesResponse extends PlayFabModule.IPlayFabResultCommon { + /** Entity profiles */ + Profiles?: EntityProfileBody[]; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetGlobalPolicyRequest */ + export interface GetGlobalPolicyRequest extends PlayFabModule.IPlayFabRequestCommon { + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.GetGlobalPolicyResponse */ + export interface GetGlobalPolicyResponse extends PlayFabModule.IPlayFabResultCommon { + /** The permissions that govern access to all entities under this title or namespace. */ + Permissions?: EntityPermissionStatement[]; + + } + + type OperationTypes = "Created" + | "Updated" + | "Deleted" + | "None"; + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetEntityProfilePolicyRequest */ + export interface SetEntityProfilePolicyRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity: EntityKey; + /** The statements to include in the access policy. */ + Statements?: EntityPermissionStatement[]; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetEntityProfilePolicyResponse */ + export interface SetEntityProfilePolicyResponse extends PlayFabModule.IPlayFabResultCommon { + /** + * The permissions that govern access to this entity profile and its properties. Only includes permissions set on this + * profile, not global statements from titles and namespaces. + */ + Permissions?: EntityPermissionStatement[]; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetGlobalPolicyRequest */ + export interface SetGlobalPolicyRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The permissions that govern access to all entities under this title or namespace. */ + Permissions?: EntityPermissionStatement[]; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetGlobalPolicyResponse */ + export interface SetGlobalPolicyResponse extends PlayFabModule.IPlayFabResultCommon { + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetProfileLanguageRequest */ + export interface SetProfileLanguageRequest extends PlayFabModule.IPlayFabRequestCommon { + /** The entity to perform this action on. */ + Entity?: EntityKey; + /** The expected version of a profile to perform this update on */ + ExpectedVersion: number; + /** The language to set on the given entity. Deletes the profile's language if passed in a null string. */ + Language?: string; + + } + + /** https://api.playfab.com/Documentation/Profiles/datatype/PlayFab.Profiles.Models/PlayFab.Profiles.Models.SetProfileLanguageResponse */ + export interface SetProfileLanguageResponse extends PlayFabModule.IPlayFabResultCommon { + /** The type of operation that occured on the profile's language */ + OperationResult?: string; + /** The updated version of the profile after the language update */ + VersionNumber?: number; + + } + + +} diff --git a/PlayFabTestingExample/src/typings/PlayFab/PlayFabServerApi.d.ts b/PlayFabTestingExample/src/typings/PlayFab/PlayFabServerApi.d.ts index 24ae8dcf..d6db425e 100644 --- a/PlayFabTestingExample/src/typings/PlayFab/PlayFabServerApi.d.ts +++ b/PlayFabTestingExample/src/typings/PlayFab/PlayFabServerApi.d.ts @@ -183,8 +183,8 @@ declare module PlayFabServerModule { */ GetLeaderboardForUserCharacters(request: PlayFabServerModels.GetLeaderboardForUsersCharactersRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** - * Returns whatever info is requested in the response for the user. Note that PII (like email address, facebook id) - * may be returned. All parameters default to false. + * Returns whatever info is requested in the response for the user. Note that PII (like email address, facebook id) may be + * returned. All parameters default to false. * https://api.playfab.com/Documentation/Server/method/GetPlayerCombinedInfo */ GetPlayerCombinedInfo(request: PlayFabServerModels.GetPlayerCombinedInfoRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; @@ -226,6 +226,16 @@ declare module PlayFabServerModule { * https://api.playfab.com/Documentation/Server/method/GetPlayFabIDsFromFacebookIDs */ GetPlayFabIDsFromFacebookIDs(request: PlayFabServerModels.GetPlayFabIDsFromFacebookIDsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the unique PlayFab identifiers for the given set of Facebook Instant Games identifiers. + * https://api.playfab.com/Documentation/Server/method/GetPlayFabIDsFromFacebookInstantGamesIds + */ + GetPlayFabIDsFromFacebookInstantGamesIds(request: PlayFabServerModels.GetPlayFabIDsFromFacebookInstantGamesIdsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; + /** + * Retrieves the unique PlayFab identifiers for the given set of Nintendo Switch Device identifiers. + * https://api.playfab.com/Documentation/Server/method/GetPlayFabIDsFromNintendoSwitchDeviceIds + */ + GetPlayFabIDsFromNintendoSwitchDeviceIds(request: PlayFabServerModels.GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest, callback: PlayFabModule.ApiCallback, customData?: any, extraHeaders?: { [key: string]: string }): void; /** * Retrieves the unique PlayFab identifiers for the given set of Steam identifiers. The Steam identifiers are the profile * IDs for the user accounts, available as SteamId in the Steamworks Community API calls. @@ -1599,6 +1609,15 @@ declare module PlayFabServerModels { } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.FacebookInstantGamesPlayFabIdPair */ + export interface FacebookInstantGamesPlayFabIdPair { + /** Unique Facebook Instant Games identifier for a user. */ + FacebookInstantGamesId?: string; + /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Facebook Instant Games identifier. */ + PlayFabId?: string; + + } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.FacebookPlayFabIdPair */ export interface FacebookPlayFabIdPair { /** Unique Facebook identifier for a user. */ @@ -2020,6 +2039,12 @@ declare module PlayFabServerModels { | "ExplicitContentDetected" | "PIIContentDetected" | "InvalidScheduledTaskParameter" + | "PerEntityEventRateLimitExceeded" + | "TitleDefaultLanguageNotSet" + | "EmailTemplateMissingDefaultVersion" + | "FacebookInstantGamesIdNotLinked" + | "InvalidFacebookInstantGamesSignature" + | "FacebookInstantGamesAuthNotConfiguredForTitle" | "MatchmakingEntityInvalid" | "MatchmakingPlayerAttributesInvalid" | "MatchmakingCreateRequestMissing" @@ -2030,12 +2055,12 @@ declare module PlayFabServerModels { | "MatchmakingTicketIdMissing" | "MatchmakingMatchIdMissing" | "MatchmakingMatchIdIdMissing" - | "MatchmakingHopperIdMissing" + | "MatchmakingQueueNameMissing" | "MatchmakingTitleIdMissing" | "MatchmakingTicketIdIdMissing" | "MatchmakingPlayerIdMissing" | "MatchmakingJoinRequestUserMissing" - | "MatchmakingHopperConfigNotFound" + | "MatchmakingQueueConfigNotFound" | "MatchmakingMatchNotFound" | "MatchmakingTicketNotFound" | "MatchmakingCreateTicketServerIdentityInvalid" @@ -2049,9 +2074,12 @@ declare module PlayFabServerModels { | "MatchmakingPlayerIdentityMismatch" | "MatchmakingAlreadyJoinedTicket" | "MatchmakingTicketAlreadyCompleted" - | "MatchmakingHopperIdInvalid" - | "MatchmakingHopperConfigInvalid" - | "MatchmakingMemberProfileInvalid"; + | "MatchmakingQueueNameInvalid" + | "MatchmakingQueueConfigInvalid" + | "MatchmakingMemberProfileInvalid" + | "WriteAttemptedDuringExport" + | "NintendoSwitchDeviceIdNotLinked" + | "MatchmakingNotEnabled"; /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetAllSegmentsRequest */ export interface GetAllSegmentsRequest extends PlayFabModule.IPlayFabRequestCommon { @@ -2576,6 +2604,34 @@ declare module PlayFabServerModels { } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetPlayFabIDsFromFacebookInstantGamesIdsRequest */ + export interface GetPlayFabIDsFromFacebookInstantGamesIdsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Array of unique Facebook Instant Games identifiers for which the title needs to get PlayFab identifiers. */ + FacebookInstantGamesIds: string[]; + + } + + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetPlayFabIDsFromFacebookInstantGamesIdsResult */ + export interface GetPlayFabIDsFromFacebookInstantGamesIdsResult extends PlayFabModule.IPlayFabResultCommon { + /** Mapping of Facebook Instant Games identifiers to PlayFab identifiers. */ + Data?: FacebookInstantGamesPlayFabIdPair[]; + + } + + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest */ + export interface GetPlayFabIDsFromNintendoSwitchDeviceIdsRequest extends PlayFabModule.IPlayFabRequestCommon { + /** Array of unique Nintendo Switch Device identifiers for which the title needs to get PlayFab identifiers. */ + NintendoSwitchDeviceIds: string[]; + + } + + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetPlayFabIDsFromNintendoSwitchDeviceIdsResult */ + export interface GetPlayFabIDsFromNintendoSwitchDeviceIdsResult extends PlayFabModule.IPlayFabResultCommon { + /** Mapping of Nintendo Switch Device identifiers to PlayFab identifiers. */ + Data?: number[]; + + } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.GetPlayFabIDsFromSteamIDsRequest */ export interface GetPlayFabIDsFromSteamIDsRequest extends PlayFabModule.IPlayFabRequestCommon { /** Array of unique Steam identifiers (Steam profile IDs) for which the title needs to get PlayFab identifiers. */ @@ -3009,7 +3065,11 @@ declare module PlayFabServerModels { | "IOSDevice" | "AndroidDevice" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "GameServer" + | "CustomServer" + | "NintendoSwitch" + | "FacebookInstantGames"; /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.LogStatement */ export interface LogStatement { @@ -3134,6 +3194,15 @@ declare module PlayFabServerModels { } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.NintendoSwitchPlayFabIdPair */ + export interface NintendoSwitchPlayFabIdPair { + /** Unique Nintendo Switch Device identifier for a user. */ + NintendoSwitchDeviceId?: string; + /** Unique PlayFab identifier for a user, or null if no PlayFab account is linked to the Nintendo Switch Device identifier. */ + PlayFabId?: string; + + } + /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.NotifyMatchmakerPlayerLeftRequest */ export interface NotifyMatchmakerPlayerLeftRequest extends PlayFabModule.IPlayFabRequestCommon { /** Unique identifier of the Game Instance the user is leaving. */ @@ -3281,7 +3350,7 @@ declare module PlayFabServerModels { TitleId?: string; /** * Sum of the player's purchases made with real-money currencies, converted to US dollars equivalent and represented as a - * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. + * whole number of cents (1/100 USD). For example, 999 indicates nine dollars and ninety-nine cents. */ TotalValueToDateInUSD?: number; /** List of the player's lifetime purchase totals, summed by real-money currency */ @@ -3482,11 +3551,15 @@ declare module PlayFabServerModels { */ Region: string; /** IPV4 address of the Game Server Instance. */ - ServerHost: string; - /** IPV6 address of the Game Server Instance. */ + ServerHost?: string; + /** IPV4 address of the game server instance. */ + ServerIPV4Address?: string; + /** IPV6 address (if any) of the game server instance. */ ServerIPV6Address?: string; /** Port number for communication with the Game Server Instance. */ ServerPort: string; + /** Public DNS name (if any) of the server */ + ServerPublicDNSName?: string; /** Tags for the Game Server Instance */ Tags?: { [key: string]: string | null }; @@ -4349,7 +4422,10 @@ declare module PlayFabServerModels { | "XboxLive" | "Parse" | "Twitch" - | "WindowsHello"; + | "WindowsHello" + | "ServerCustomId" + | "NintendoSwitchDeviceId" + | "FacebookInstantGamesId"; /** https://api.playfab.com/Documentation/Server/datatype/PlayFab.Server.Models/PlayFab.Server.Models.UserPrivateAccountInfo */ export interface UserPrivateAccountInfo {