L3S DRM Developer Guide
The client side of L3S DRM consists of two parts:
Statically compiled WASM class library:
DRMCore2.a(orDRMCore2_debug.afor more verbose console logging during development)MSFS in-game panel/gauge:
ModuleDrmGauge.html,.js, and.css
All security-critical logic is implemented in the WASM module.
The MSFS gauge serves the following purposes:
Retrieve the Xbox username
Provide a UI for the user to paste their activation key manually
Display error messages or status information
L3S DRM checks the work folder of each aircraft for a file named:
license.keyIf the file exists and contains a valid key, the DRM system will attempt to activate the product using it.
In this case, the user will not see any activation prompt and everything will be handled in the background.
Client API Key
You can create multiple Client API Keys per project, allowing you to differentiate between direct sales and MSFS Marketplace (incl. Xbox) versions.
You can enable/disable Client API Keys at any time via the developer portal.
Activation keys issued to users are universal — they will work with all valid Client API Keys associated with the same project.
LVARs
The DRM system exposes the following LVARs (Local Variables), where <ProductName> is derived from the data-expected-product-name attribute in ModuleDrmGauge.html (spaces → underscores, non-alphanumeric characters except -, _, . are stripped):
L:DRM_UI_VISIBLE_<ProductName>
Indicates whether the activation UI should be shown:0= Hidden1= Visible
If you use
.transparentSuccessScreen(true)in C++, you can overlay the DRM screen in front of your normal screen and it will hide automatically when applicable. Otherwise, it is your responsibility to show or hide the gauge based on this value.
L:DRM_ACTIVATED_<ProductName>
Indicates whether the product has been activated.
Security Notice:
L:DRM_ACTIVATED_<ProductName>is not secure and must not be used to authorize access to the aircraft. Use only theDrmSuccessEvent()callback from the WASM module for secure validation.