Pragma Engine 0.0.94
July 2023
Contents #
Summaries | Summarized release notes.
Full Notes | Full notes including descriptions and additional details.
Notes about this release:
- We recommend using an older version of the README while we update our current version.
- This release includes a large SDK migration. The SDK V2 migration guide is in Google Drive. Contact your Pragma support representative if you need access to this file or if you need support while upgrading.
- You can optionally take the release in parts to make integrations easier by completing the following steps:
- Complete Unreal Phase 1 SDK V2 instructions.
- Upgrade to 0.0.94 and complete release notes.
- Complete Unreal Phase 2 SDK V2 instructions.
Summaries #
Features #
- [Multiplayer] Added a new
OnGameStart
event to the Pragma SDK to communicate when a game is allocated. | full note - [Multiplayer] Added new Matchmaking and Match Lifecycle payloads and build functions to simplify matchmaking management.| full note
- [Player Data] You can now access
ext
and inventory related data in a more clear and organized way in the newGameDataService.GetLoginDataV3
endpoint.| full note - [Player Data] You can now utilize login data in the default login data job
InventoryGetLoginDataV2DependentJob
. | full note - [Player Data]
InstancedItemPluginResult
now has a clearer and more organized structure for inventory modifications via the newInventoryModifications
data class. | full note - [Player Data] You can now chain additional inventory operations during item deletion using the Instanced Item Plugin. | full note
- [Player Data] You can now implement a Stackable Item Plugin. | full note
- [Player Data] The Provider Entitlement feature now supports PlayStation 4. | full note
- [Accounts] You can now permanently delete Pragma Social accounts. | full note
- [Accounts] Added a new Account Plugin that allows for manipulating account data for the account lifecycle. | full note
- [Infra & Tooling] You can now add custom routes to the platform. | full note
- [Portal] New Rewards page now available. | full note
- [Portal] Custom components can now be added to the top navigation bar. | full note
- [Portal] Added support for multiple types of portlets. | full note
Deprecations #
- [SDKs] sdk | If you’re using Unreal, rename
RegisterService
andGetService
toRegisterApi
andApi
. | full note
Integrations #
- [Multiplayer] platform, sdk | Follow the provided integration guide to update your multiplayer services. | full note
- [Multiplayer] platform | If you use the
SkeletonMatchLauncher.kt
,StartProcessCommandStrategy.kt
, orNoOpCommandStrategy.kt
files, reach out to Pragma to migrate off them. | full note - [Player Data] sdk | Replace any references to
GetLoginData
withGetLoginDataV3
. | full note - [Player Data] platform | Update any usages of the
InventoryLoginData
class by removing theinventoryData
property. | full note - [Player Data] platform | Replace any uses of
GetLoginDataServiceV1
withGetLoginDataServiceV2
. | full note - [Player Data] platform | If you use the Instanced Item Plugin, update the
InstancedItemPluginResult
to reflect changes made with the newInventoryModifications
data class. | full note - [Player Data] platform | If you use the Crafting Plugin, replace the
CraftResult
data class withInventoryModifications
. | full note - [Player Data] platform | Replace usages of the
InventoryOperationsPlugin.InventoryOperations
data class withInventoryModifications
. | full note - [Infra & Tooling] platform | If your
4-demo
module is not automatically removed, manually delete it and remove all dependent references. | full note - [Infra & Tooling] other | Update your IntelliJ version to 2023.1.2. | full note
- [Infra & Tooling] config | Revert version 0.0.93 updates to the
PartnerClientConfig
. | full note - [Infra & Tooling] config | Add the configuration file
integrationtest.yml
so you can customize integration tests without affecting your local development configuration. | full note - [SDKs] sdk | Follow the provided integration guide to update to SDK V2. | full note
- [Portal] config, platform | Update Portal configurations to reflect their relocation to a
routePlugins
collection, and migrate any custom Portal Plugin to be a Route Plugin. | full note
Bugs and Fixes #
- [SDKs] Unreal: Fields in DTOs with types int64, uint64, and double are no longer exposed to Blueprints to prevent compilation errors.
- [Relase Note] The release notes launched during the 0.0.94 release did not include the order that pom files must be imported during IntelliJ setup. For a revised and improved ReadMe, see Pragma Engine ReadMe (0.0.94) or any future release notes.
Docs #
- [New Concepts] Added a new page on the Account Plugin.
- [Updated Concepts] Updated the Configuration customization page to contain information about priority, dynamic configuration, and using Homebase API to encrypt and decrypt secret configuration values.
- [Updated Concepts] Renamed the concept of “Game Flow” to “Multiplayer” to better communicate the features and reflect industry standards.
- [Updated Concepts] Added information about account deletion to the Account Data page.
- [Updated Concepts] Added information about onDelete to the Instanced Items page.
- [Updated Concepts] Updated the Instanced Items page to reflect changes to Instanced Item Plugin.
- [Updated Concepts] Updated the Crafting page to reflect changes to the Crafting Plugin.
- [Updated Concepts] Added information about the Stackable Item Plugin to the Stackable Items page.
- [Updated Concepts] Added introductory information to the Custom Services Overview page.
- [Updated Internal Guide] Updated the PlayStation Provider Entitlements doc with new information.
- [Updated API Reference] Updated the structure of the Configuration Options page to be more readable and fixed broken links.
- [Updated API Reference] Added Homebase API reference.
- [New Tech Blog Article] The article How We Load Test Pragma Engine is now live! Learn about our load testing philosophy, how we emulate player behavior, and how we deploy a Pragma Engine platform shard.
Full Notes #
Features #
[Multiplayer] Added a new OnGameStart
event to the Pragma SDK to communicate when a game is allocated.
#
Description: When a game is allocated to a game server, the [MatchApi.OnGameStart] event will be triggered. See the Game Server Events section in the Match Lifecycle concepts page for more information.
Related notes See integration note on upgrading multiplayer.
[Multiplayer] Added new Matchmaking and Match Lifecycle payloads and build functions to simplify matchmaking management. #
Description: To simplify and clarify how to use Matchmaking and Match Lifecycle features, we’ve defined the following new ext payloads and build functions. You can read more on the Matchmaking and Match Lifecycle concepts pages.
ExtGamePlayer
ExtGameStart
ExtGameServerPlayer
ExtGameInstance
ExtMatchmakingGameInstance
ExtMatchmakingPlayer
setExtGamePlayer
buildExtGameStart
buildExtGameServerPlayer
buildExtMatchmakingGameInstance
buildExtMatchmakingPlayer
Related notes See integration note on upgrading multiplayer.
[Player Data] You can now access ext
and inventory related data in a more clear and organized way in the new GameDataService.GetLoginDataV3
endpoint.
#
Description: GameDataService.GetLoginData
has been replaced with GameDataService.GetLoginDataV3
. The new GetLoginDataV3
no longer includes a full inventory response and has reorganized ext and inventory response paths. GetLoginDataV3Response
has a new LoginDataV3
field which contains two fields for Ext
and Inventorydata
. All limited grant tracking IDs and inventory content catalogs are under the InventoryData
field in GetLoginDataV3Response
.
Related notes: See integration note on replacing and updating usages of GameDataService.GetLoginDataV2
with GameDataService.GetLoginDataV3
.
[Player Data] You can now utilize login data in the default login data job InventoryGetLoginDataV2DependentJob
.
#
Description: The new InventoryService.GetLoginDataServiceV2
is now requested when InventoryGetLoginDataV2DependentJob
runs. Note that the new InventoryService.GetLoginDataServiceV2
does not contain a property for the player’s full inventory and you’ll need to use InventoryRpc.getInventoryServiceV3
if you need to access a player’s full inventory.
Related notes: See integration note on replacing InventoryRpc.GetLoginDataServiceV1
with InventoryRpc.GetLoginDataServiceV2
.
[Player Data] InstancedItemPluginResult
now has a clearer and more organized structure for inventory modifications via the new InventoryModifications
data class.
#
Description: To make the Instanced Item Plugin more consistent with other Inventory service plugins, all inventory modifications are now wrapped in a data class called InventoryModifications
in the InstancedItemPluginResult
. The fields for additional item grants and updates have also been moved into this data class. See the updated Instanced Item concepts page for more information on InventoryModifications
.
Related notes: See integration note on updating your InstancedItemPluginResult
with the new changes.
[Player Data] You can now chain additional inventory operations during item deletion using the Instanced Item Plugin. #
Description: The Instanced Item Plugin has a new method: onDelete()
. See the updated Instanced Item concepts page for details.
[Player Data] You can now implement a Stackable Item Plugin. #
Description: Custom logic can be added to the Stackable Item Plugin’s onUpdate()
method. This method is called each time a stackable item is granted or updated. In addition, this plugin can be used to chain additional inventory operations when a stackable item is updated. See the updated Stackable Item concepts page for details.
[Player Data] The Provider Entitlement feature now supports PlayStation 4. #
Description: Contact your Pragma Engine support representative for further details.
[Accounts] You can now permanently delete Pragma Social accounts. #
Description: We’ve added the following Operator, Partner, and Service endpoints, which will delete social identities, links to third party accounts and all accompanying PII, and related pragmaPlayerIds
. Note that this process is irreversible. See the Account Data concepts page for more information.
The following endpoints are available for account deletion:
AccountRpc.DeleteAccountOperatorV1Request
AccountRpc.DeleteAccountPartnerV1Request
AccountRpc.DeleteAccountServiceV1Request
[Accounts] Added a new Account Plugin that allows for manipulating account data for the account lifecycle. #
Description: The new Account Plugin can be used to write custom code for account creation, updates, deletions and login. All functions use the PragmaAccount
object to manipulate data. You can read more on the Account Plugin page.
[Infra & Tooling] You can now add custom routes to the platform. #
Description: You can add custom URL endpoints to the platform by implementing the Route Plugin interface and adding configuration to the GatewayNodeModules
. This is currently being used by Portal, and can be expanded to support a variety of additional routing options.
Example:
- Config:
game:
pluginConfigs:
GameOperatorGatewayNodeService.routePlugins:
plugins:
CustomRoute:
class: "demo.account.CustomRoutePlugin"
config:
anyString: "example"
anyBoolean: true
Demo:
class: "demo.account.DemoRoutePlugin"
config:
customValueString: "demo"
[Player Data] New Rewards page now available. #
Description: A new Rewards page has been added with Create/Edit/View pages for each type of reward, new tables, validation for save/remove/submit actions, and UX updates such as autocomplete, toasts and alerts, and a navigation system.
[Player Data] Custom components can now be added to the top navigation bar. #
Description: You can now add custom components to the top navigation bar.
Details: There are three ways to add dynamic components to the navbar:
- Using extensions with the new
navbarComponents
option to add components that are always visible across the app. - Using the
addNavbarComponent
Portlet Builder API to add a component every time a page of that portlet is shown. - Using the
addNavbarComponent
Page Builder API on a page to add a component when that specific page is open.
Example:
- The Content Changes dropdown with the Publish button in the Content Catalogs Editor is now a custom component added in the
ContentCatalogsEditor.js
definition.
[Player Data] Added support for multiple types of portlets. #
Description: We now support 3 types of portlet:
service
: the most common type which appears under the Services menu.standalone
: supports standalone sections of the Portal, added to the top navbartool
: for tools such as the Development Tools portlet
Deprecations #
[SDKs] sdk | If you’re using Unreal, rename RegisterService
and GetService
to RegisterApi
and Api
.
#
Description: The following methods have been renamed as part of renaming “Service
” to “Api
” within the SDKs.
Update all uses of the following method in
Pragma::FRuntime
,Pragma::FPlayer
, andPragma::FServer
:original replacement removal release Session->RegisterService<UMyService>()
Session->RegisterApi<UMyService>()
0.0.95 Update all uses of the following method in
Pragma::FPlayer
andPragma::FServer
:original replacement removal release Session->GetService<UMyService>()
Session->Api<UMyService>()
0.0.95
Integrations #
[Multiplayer] platform, sdk | Follow the provided integration guide to update your multiplayer services. #
Description: Upgrading multiplayer functionality to version 0.0.94 involves many tasks, including:
- Updating the
matchmakingExt.proto
andmatchlifecycleExt.proto
files - Implementing set and build methods for the new
exts
- Updating Matchmaking object references
- Updating
initialize
,buildMatch
, andendOfLoop
methods - Replacing
ActiveMatch
withMatchmakingGameInstance
- Adding
OnGameStart
andOnGameStartFailed
methods - Replacing
addParty
,setTeamByPlayer
,moveAllPartiesFrom
, andmovePartiesFrom
methods
Integration step:
- Specific tasks for completing the integration can be found in the Multiplayer 0.0.94 Integration Guide on Google Drive. Contact Pragma if you need access to the Drive link.
[Multiplayer] platform | If you use the SkeletonMatchLauncher.kt
, StartProcessCommandStrategy.kt
, or NoOpCommandStrategy.kt
files, reach out to Pragma to migrate off them.
#
Description: We removed the following files related to an example Capacity Provider Plugin implementation called SkeletonCapacityProvider
from the 2-pragma
folder:
SkeletonMatchLauncher.kt
StartProcessCommandStrategy.kt
NoOpCommandStrategy.kt
Integration step:
- If you use these files, please reach out to Pragma to let us know why and how you were using these files and we will help you migrate off them.
[Player Data] sdk | Replace any references to GetLoginData
with GetLoginDataV3
.
#
Description: GameDataService.GetLoginDataV2
has been removed and replaced with GameDataService.GetLoginDataV3
. GameDataService.GetLoginDataV3
does not include the full inventory data result in the endpoint and now has a reorganized response. If you’re requesting limited grants via the GetLoginDataV3Response
, you can find issued limited grant tracking IDs and inventory content catalogs under the InventoryData
field and all other ext
data under Ext
.
Integration steps:
- sdk | Update calls that reference
GameDataService.GetLoginDataV2
to useGameDataService.GetLoginDataV3
. - sdk | Update all paths to inventory related response data.
- In
GetLoginDataV3Response
, the newLoginDataV3
has two fields:Ext
andInventoryData
. Note that Pragma Engine sends anInventoryUpdatedV1Notification
with this call.original replacement Ext
DataResult.Get().Payload().Ext()
Inventory Data (Limited Grants) Result.Get().Payload().InventoryData.IssuedLimitedGrantTrackingIds
Inventory Content Result.Get().Payload().InventoryData.InventoryContent.<CONTENT-CATALOG>
// Content Catalogs:ItemCatalog
(includesInstancedEntries
andStackableEntries
)CraftingEntries
Stores
UpdateEntries
ItemBundles
ProviderEntitlements
- For inventory changes resulting from limited grants, use
InventoryService.GetInventory
and the Inventory serviceOnInventoryUpdated
event to keep UI in sync with latest inventory changes.
- In
Related notes: See feature note on the new GameDataService.GetLoginDataV3
endpoint.
[Player Data] platform | Update any usages of the InventoryLoginData class by removing the inventoryData property. #
Description The data class InventoryLoginData
no longer contains the inventoryData: InventoryData
property. This data class is accessed via the LoginDataBuilder
often used in getLoginDataJobsV3
.
Integration step:
platform | Remove the
inventoryData: InventoryData
property from any uses of theInventoryLoginData
class.- Before:
data class InventoryLoginData( var inventoryData: InventoryData = InventoryData(listOf(), listOf(), 0), var itemCatalog: ItemCatalog = ItemCatalog(listOf(), listOf()), var stores: List<AnnotatedStore> = listOf(), var updateEntries: List<UpdateEntryWrapper> = listOf(), var craftingEntries: List<CraftingEntryWrapper> = listOf(), var newLimitedGrantIds: List<String> = listOf(), var itemBundles: List<ItemBundle> = listOf(), var providerEntitlements: List<InventoryContent.ProviderEntitlement> = listOf() )
- After:
data class InventoryLoginData( var itemCatalog: ItemCatalog = ItemCatalog(listOf(), listOf()), var stores: List<AnnotatedStore> = listOf(), var updateEntries: List<UpdateEntryWrapper> = listOf(), var craftingEntries: List<CraftingEntryWrapper> = listOf(), var newLimitedGrantIds: List<String> = listOf(), var itemBundles: List<ItemBundle> = listOf(), var providerEntitlements: List<InventoryContent.ProviderEntitlement> = listOf() )
[Player Data] platform | Replace any uses of GetLoginDataServiceV1
with GetLoginDataServiceV2
.
#
Description: InventoryService.GetLoginDataServiceV1
has been deprecated and replaced by InventoryService.GetLoginDataServiceV2
. The new InventoryService.GetLoginDataServiceV2
does not contain a property for the player’s full inventory; if you need to access a player’s full inventory use InventoryRpc.getInventoryServiceV3
.
Integration step:
- platform Replace any uses of
InventoryService.GetLoginDataServiceV1
withInventoryService.GetLoginDataServiceV2
.
original | replacement |
---|---|
GetLoginDataServiceV1 | GetLoginDataServiceV2 |
Related notes: See feature note on InventoryRpc.GetLoginDataServiceV2
.
[Player Data] platform | If you use the Instanced Item Plugin, update the InstancedItemPluginResult
to reflect changes made with the new InventoryModifications
data class.
#
Description: The fields for additional item grants, updates, and other inventory modifications in the InstancedItemPluginResult
have been moved into a data class called InventoryModifications
. See the updated Instanced Item concepts page for more information on InventoryModifications
.
Integration steps:
platform | Update any construction of the
InstancedItemPluginResult
by replacing the following parameters with theInventoryModifications
data class.- Before:
data class InstancedItemPluginResult( val extInstancedItem: ExtInstancedItem?, val rewardGrants: List<RewardGrant> = listOf(), val instancedItemServerGrants: List<InstancedItemServerGrant> = listOf(), val stackableItemGrants: List<StackableItemGrant> = listOf(), val serverInstancedItemUpdates: List<ServerInstancedItemUpdate> = listOf(), val instancedItemsToDestroy: List<InstanceId> = listOf() )
- After:
data class InstancedItemPluginResult( val extInstancedItem: ExtInstancedItem?, val InventoryModifications: InventoryModifications = InventoryModifications() ) data class InventoryModifications( val rewardGrants: List<RewardGrant> = listOf(), val instancedItemServerGrants: List<InstancedItemServerGrant> = listOf(), val stackableItemGrants: List<StackableItemGrant> = listOf(), val serverInstancedItemUpdates: List<ServerInstancedItemUpdate> = listOf(), val instancedItemsToDestroy: List<InstanceId> = listOf() )
Migrate all prior inventory modifications into the new
InventoryModifications
data class.
Related notes: See feature note on the restructured InstancedItemPluginResult
.
[Player Data] platform | If you use the Crafting Plugin, replace the CraftResult
data class with InventoryModifications
.
#
Description: To improve consistency across Inventory service plugins, we are introducing the new data class InventoryModifications
. This data class contains all inventory modifications that can be chained from a plugin. See the Crafting concepts page for more information.
Integration step:
- platform | Replace
CraftResult
withInventoryModifications
.original replacement CraftResult
InventoryModifications
[Player Data] platform | Replace usages of the InventoryOperationsPlugin.InventoryOperations
data class with InventoryModifications
.
#
Description: To improve consistency across Inventory service plugins, we are introducing the new data class InventoryModifications
. This data class contains all inventory modifications that can be chained from a plugin. Any StackableItemUpdate
used by InventoryOperations
can be replaced with a StackableItemGrant
. The Inventory service can look up the instanceId
to determine if the stackable grant is actually a stackable update.
Integration step:
- platform | Replace any usages of
InventoryOperationsPlugin.InventoryOperations
withInventoryModifications
.- Before:
data class InventoryOperations( val stackableItemGrants: List<StackableItemGrant> = listOf(), val stackableItemUpdates: List<StackableItemUpdate> = listOf(), val instancedItemServerGrants: List<InstancedItemServerGrant> = listOf(), val instancedItemUpdates: List<InstancedItemUpdate> = listOf(), val rewardGrants: List<RewardGrant> = listOf(), val instancedItemsToDestroy: List<InstanceId> = listOf() )
- After:
data class InventoryModifications( val rewardGrants: List<RewardGrant> = listOf(), val instancedItemServerGrants: List<InstancedItemServerGrant> = listOf(), val stackableItemGrants: List<StackableItemGrant> = listOf(), val serverInstancedItemUpdates: List<ServerInstancedItemUpdate> = listOf(), val instancedItemsToDestroy: List<InstanceId> = listOf() )
[Infra & Tooling] platform | If your 4-demo
module is not automatically removed, manually delete it and remove all dependent references.
#
Description: We’ve removed 4-demo
from Pragma Engine as part of a larger cleanup effort. We recommend using Arbiter for demo reference.
Integration step:
- platform | Validate that
4-demo
has been removed from your project. If it hasn’t, manually delete the4-demo
folder frompragma-engine/platform
.
[Infra & Tooling] other | Update your IntelliJ version to 2023.1.2. #
Description: The supported Pragma Engine developer environment has been updated to use IntelliJ 2023.1.2 and the newest supported version of Kotlin.
Integration step:
- other | Use the provided Pragma Engine setup scripts (contact your Pragma support representative if you need these) to download and install IntelliJ version 2023.1.2. Alternatively, download version 2023.1.2 of IntelliJ from the IntelliJ website.
[Infra & Tooling] config | Revert version 0.0.93 updates to the PartnerClientConfig
.
#
Description: The PartnerClientConfig
feature is not ready for use and has been removed as part of 0.0.94 release. If you fail to update the PartnerClientConfig
section in your configuration files, Pragma Engine will fail to start with an error message describing where the incorrect configuration is located.
Integration steps:
- config | | If you do have a
bearerToken
, rename thePartnerClientConfig
toSocialBackendPartnerClientConfig
, and delete thesocialConnections
block.
PartnerClientConfig:
bearerToken: "[encrypted string]"
socialConnections:
partner:
host: "shardName.yourCompany.com"
port: 11000
authHost: "shardName.yourCompany.com"
authPort: 11000
websocketProtocol: "wss"
protocol: "https"
operator:
host: "shardName.yourCompany.com"
port: 11100
authHost: "shardName.yourCompany.com"
authPort: 11100
websocketProtocol: "wss"
protocol: "https"
player:
host: "shardName.yourCompany.com"
port: 11200
authHost: "shardName.yourCompany.com"
authPort: 11200
websocketProtocol: "wss"
protocol: "https"
- config | If you don’t have a
bearerToken
, delete the entirePartnerClientConfig
configuration block.
[Infra & Tooling] config | Add the configuration file integrationtest.yml
so you can customize integration tests without affecting your local development configuration.
#
Description: Use a separate integration tests config file called integrationtest.yml
instead of sharing the dev.yml
config file, which could conflict with your local development. Use the integrationtest.yml
file to put common configurations that should be shared across all integration tests.
Integration steps:
- config | If you have any integration tests that inherit from the Pragma-provided
BaseServerIT
class, make a copy of your5-ext/config/dev.yml
config file in the same folder and name the fileintegrationtest.yml
. Doing so will preserve the configurations that were previously used for running integration tests. - config | Modify the
integrationtest.yml
file for your integration tests needs.
[SDKs] sdk | Follow the provided integration guide to update to SDK V2. #
Description: As part of the SDK V2 update, PragmaSession
has been split into Player
and Server
objects that provide a more relevant subset of the API based on their respective use cases. There’s also a new Runtime
object that manages all player and server sessions. The migration guide can be found in the Google Drive, with the title SDK API V2 Migration Guide. If you need access to Google Drive, contact your Pragma support representative.
Integration steps:
- Follow the relevant sections of the SDK API V2 Migration Guide.
- sdk | If you’re using Unity and have not yet updated to SDK V2, follow the Unity section.
- sdk | If you’re using Unreal and have not yet updated to SDK V2, follow the Unreal Phase 1 and Unreal Phase 2 sections.
- sdk | If you’re using Unreal and have already migrated to SDK V2, follow the Unreal Phase 2 section.
[Player Data] config, platform | Update Portal configurations to reflect their relocation to a routePlugins
collection, and migrate any custom Portal Plugin to be a Route Plugin.
#
Description: The Portal configuration location has changed and having a valid location is required to enable Portal. Instead of being a separate plugin, Portal is now part of a plugin collection called routePlugins
. As part of adding this collection, the FilePortalModulePlugin
has been converted from a PortalPlugin
to a RoutePlugin
. You must define the Portal as a route plugin in your environments as it is no longer enabled by default.
Integration steps:
- config | Add or update Portal configurations on the platform.
- Before:
pluginConfigs: SocialOperatorGatewayNodeService.portalPlugin: class: "pragma.gateway.FilePortalModulePlugin" config: portalSource: "web/portal/dist" authenticationIdProviders: 1: UNSAFE 3: DISCORD 4: STEAM 6: GOOGLE discordClientId: "YOUR_DISCORD_CLIENT_ID" googleClientId: "YOUR_GOOGLE_CLIENT_ID" redirectSignInToSocial: false
- After:
pluginConfigs: SocialOperatorGatewayNodeService.routePlugins: plugins: Portal: class: "pragma.gateway.FilePortalModulePlugin" config: portalSource: "web/portal/dist" authenticationIdProviders: 1: UNSAFE 3: DISCORD 4: STEAM 6: GOOGLE discordClientId: "YOUR_DISCORD_CLIENT_ID" googleClientId: "YOUR_GOOGLE_CLIENT_ID" redirectSignInToSocial: false
- platform | Any custom Portal Plugin will need to be migrated to a Route Plugin. Instead of providing an
Application
that would have routes attached, use theRouting
object instead.- Before:
application.apply { routing { options { call.respond(HttpStatusCode.OK) } route("config/config.json") {
- After:
routing { options { call.respond(HttpStatusCode.OK) } route("config/config.json") { ```