Engine and Engine Dispatch 23.19.203
Released 2025-03-06
Improvements
- Schema change for the subscription notification retry queue to accept all UTF-8 characters. This facilitates failed notification retries for courses with non-latin characters in their titles. Note that this is a DB schema change, so existing Engine installations will need manual intervention to make this change if desired.
- "Terminated" statements for PDF media content now include a "page-view-state" extension to indicate individual page completion.
- Improved uniqueness for subscription notification GUID identifiers.
Bug Fixes
- Resolves incompatible metadata for Tin Can .90 course imports.
- [Upgrade Tool] - Fixes statement reprocessing error.
- [Upgrade Tool] - Fixes duplicate schema prefix for some database operations against PostgreSQL.
Dispatch Improvements
- Registration Changed Subscriptions now support filtering with DispatchId
Engine and Engine Dispatch 23.18.191
Released 2025-01-29
Bug Fixes
- [Upgrade Tool] - Prevents the upgrade tool from using connection strings from the configuration system during xAPI migration.
Engine and Engine Dispatch 23.17.190
Released 2025-01-28
Improvements
- Introduces experimental setting 'X_ValidateDirectoryForMediaFileReferenceRequests' to optionally prevent file path validation during media reference imports.
- The player UI's "Return to LMS" button and its underlying JavaScript function trigger a graceful exit in the media player.
Engine and Engine Dispatch 23.16.188
Released 2025-01-24
Improvements
- [Java] - Updated logback to 1.3.15 for CVE-2024-12798 and CVE-2024-12801.
Bug Fixes
- [Upgrade Tool] - Fixes rare statement reprocessing error.
- [Upgrade Tool] - Avoids duplicate constraint error during xAPI documents migration.
- [Upgrade Tool] - Resolves asserter JSON deserialization error during documents migration.
- When signed launch links are enabled, also add the signed token for requests to Engine's "Logger" and "SaveDebugLog" pages.
Dispatch Fixes
- Remove description sub-claim from LTI resource_link claims to prevent 431 "Request Header Fields Too Large" error on resource link launches.
- In LTI dispatches, if a course status was not updated during a launch, the previous course status would be reported. This should now only occur if there was actually a previous course status value.
- When reporting the previous course status, the associated log message had not actually included the status.
Offline
- Offline player no longer attempts to send JS errors to be logged server-side.
Engine and Engine Dispatch 23.15.177
Released 2024-12-23
Bug Fixes
- Fixed broken subscription notifications when the number of subscriptions exceeds the API results limit.
Improvements
- Upgraded jquery min version to 3.7.1.
- Removed a few potentially vulnerable regular expressions in the client-side player.
- [media courses] VideoJS now has the same autosave support that was introduced in 23.12.164.
Engine and Engine Dispatch 23.14.173
Released 2024-12-13
Improvements
- Improved SCORM results and XML processing performance.
- Added "Voiding Agent" and "Statement Reissue" functionality
Bug Fixes
- Resolved timing issue with cmi5 on SQL Server that could result in statements rejected with "Forbidden cmi5 allowed statement: session not active" error.
- Since v23.2.21, Engine was not using external cache (i.e., memcache plugin) even if configured to do so.
Engine and Engine Dispatch 23.13.167
Released 2024-11-15
Bug Fixes
- Fixes edge case with media content where completion was reached but the status was not able to be updated even after relaunching.
- Fixes wrong content URL when using course versioning and xAPI-based courses.
Engine and Engine Dispatch 23.12.164
Released 2024-10-30
Improvements
- Added experimental X_DisableScormToTincanInteractions" setting. If enabled, the SCORM-to-tincan feature will not generate statements from SCORM interactions.
- Added new "PluginStorageExpirationProcessor" background processor to clean up expired Content Vault records. Disabled by default.
- Added "admin:writeSubscription" and "admin:readSubscription" API permission scopes.
- Added periodic progress saving for media content.
- [Oracle, Upgrade] - Added new "UpdateTableStats" setting. If enabled, the upgrade tool will update table stats for all newly created and populated tables. Will cause NotImplementedException if enabled for non-Oracle databases.
Bug Fixes
- Fixes wrong path to media subtitles when Content Vault is enabled.
- Removed "admin:write" as a possible scope for subscription API calls, as this was never a valid API permission scope.
- V2 API's GetCourseZip now throws appropriate error when using "exportType=OFFLINE" for non-SCORM courses.
- [LRS] - Fixes incorrect handling of "If-Match" header when updating existing resources.
- [LRS, Oracle] - Resolves "missing JSON parameter type" error.
- [Upgrade, Oracle] - Fixes incorrect batched insert format.
- [Upgrade, Oracle] - Avoids "maximum number of expressions in a list" error.
Dispatch Fixes
- Fixes lost grade on LTI 1.3 relaunch.
Dispatch Improvements
- "dispatch.html" and "ltiDispatch.html" pages use the "onpagehide" handler instead of "onunload".
Engine and Engine Dispatch 23.11.137
Released 2024-09-05
Bug Fixes
- [Java] - Fixes performance hangs when importing zips into S3 with a large number of files.
- Youtube course progress no longer resets if you fail to start the video before exiting.
Engine and Engine Dispatch 23.10.135
Released 2024-09-05
Improvements
- [AICC] - Experimental "X_ForceAICCExitAUOnLaunch" setting enables detecting lack of ExitAU command and forces proper exit.
Bug Fixes
- Restores missing score in registration schema for certain courses when "UseGuidAsObjectId" is enabled.
- Prevents error when creating subscriptions with filters when "UseGuidAsObjectId" is enabled.
- Prevents the setting of empty "Content-Encoding" metadata header when extracting content into S3.
- [Upgrade Tool] - Resolves several xAPI migration errors when "UseGuidAsObjectId" is enabled.
Dispatch Fixes
- Fixes lost grade on LTI 1.3 relaunch.
Dispatch Improvements
- Additional LTI 1.3 Claims.
- resource_link_id
- context_id
- context_title
- context_label
- learner_email
Engine and Engine Dispatch 23.9.117
Released 2024-08-06
Improvements
- New "webPathToCourse" override property for the "mediaReferenceRequest" schema. This addresses when multiple tenants share the same media file and the CloudFront auth cookies that Engine generates at runtime don't have the a "path" attribute that matches the file's actual location.
- Reduces overly "chatty" database error logging.
- [Upgrade Tool] - Performance improvement during data integrity check phase.
Bug Fixes
- Handling for xAPI courses that use "stateId" parameter values that exceed 255 characters.
- Fixes missing CloudFront auth "policy" cookie. If you use Engine to generate CloudFront auth cookies and are on version 23.4.44 or above, you should apply this maintenance release.
- Several fixes for the "GUIDs as internal identifiers" feature (UseGuidAsObjectId as "true").
Engine and Engine Dispatch 23.8.108
Released 2024-07-26
Improvements
- Suppresses unnecessary "agent not found" exception during PII deletion job.
- Adds cache-busting parameter to additional static player files.
- /defaultui/player/blank.html
- /defaultui/player/cmi5-au/1.0/js/pdfjs/build/pdf.worker.js
- /defaultui/player/cmi5-au/1.0/html/cmi5-mediaFile.html
- [Upgrade Tool] - Several performance improvements for xAPI document migration, data integrity checks, and row-copy batch fetching.
Bug Fixes
- [PostgreSQL] Resolves 500 error when deleting xAPI-based registrations.
Engine and Engine Dispatch 23.7.96
Released 2024-07-03
Note: With release there has been a breaking change for customers who might be calling the BuildRegistrationLaunchLink resource with a credential only having read permissions. Since using a launch link can cause changes to be saved for a registrations progress, we are changing the required scopes to be write or write:registration for security reasons.
Improvements
- Improved clarity of If-Match Etag error messages for xAPI state requests
- Engine will now create an xAPIActivityId for a non-xAPI-based course by using a randomly generated GUID rather than hashing the contents of the course package
- The Partitioned attribute is now set on all Secure and SameSite=None cookies as per CHIPS guidelines
- The /registrations/{registrationId}/launchLink endpoint can now only be accessed using credentials with write or write:registration scopes (previously it was allowed for read or read:registration scopes)
- Added Tenant ID and Pipe ID to statement pipe exception log messages
Bug Fixes
- Set pdf.js config setting isEvalSupported to false to work around CVE-2024-4367
- [Upgrade Tool] - Fixes 'duplicate constraint' error on Cmi5Session table when performing phased, online row copying
- Corrected xAPI statement handling when statement reference chains arrive out of order
Engine and Engine Dispatch 23.6.59
Released 2024-06-07
Improvements
- Changed DispatchBaseUrl and DispatchPollingBaseUrl to Tenant-level setting
Bug Fixes
- Fixes V2 API authorization error for API calls related to a new tenant installed in a separate database schema
- Fix error when configuring S3 file store without specifying a region
- Fix error when deleting registration progress on PostgreSql
- [Java Only] Updated BouncyCastle.Cryptography dependency to version 2.3.1 for CVEs: CVE-2024-30172, CVE-2024-30171, CVE-2024-29857
- [.NET Only] Updated Npgsql dependency (for PostgreSql) to version 4.0.16 for CVE-2024-32655
- Removed 0.9 and 0.95 from supported versions returned by the About endpoint
Engine and Engine Dispatch 23.5.51
Released 2024-05-17
Bug Fixes
- [Upgrade Tool] Fixes xAPI statement comparison during upgrade when either lacks a result.duration value
- [Upgrade Tool] Fixes "Key not found" / "The given key was not present in the dictionary" in the "MigrateTinCanDocumentsWorker" during upgrade
- [Upgrade Tool] Fixes error from missing DatabaseSchemaPrefix during MigratePackagePropertiesPhase if one is used
Engine and Engine Dispatch 23.4.44
Released 2024-04-26
Bug Fixes
- Fixes "Column stored of table XApiStatement in target schema does not match canonical definition." when installing Engine 23.x on PostgreSQL 14+
Improvements
- [Java Only] Updated AWS SDK for Java 2.x (for S3, Cloudfront Cookie, and SQS handling)
Engine and Engine Dispatch 23.3.39
Released 2024-04-19
Bug Fixes
- Fixes xAPI migration for orphaned and deactivated tenant records during upgrade
- Avoid errors when upgrade is restarted after getting partway through xAPI statement upgrade
- [Java Only] Updated to the latest BouncyCastle (for RSA key handling) and JodaTime (for date/time handling), prompted by a CVE report, even though it did not impact our usage
Improvements
- Added the PensDuplicateAction setting for specifying the action PENS takes when importing a duplicate package
- Return 404 instead of a 500 status when calling GetPIIDeletionJob with a nonexistent job id
- Custom CSS in AudioVideoContentStylesheetPath now also applies to YouTube and Vimeo content
- LRS GET request error message for invalid/unsupported X-Experience-API-Version simplified to improve security
- Better validation of required properties for LTI 1.3 Connector creation requests
- [Offline Extension] GetPlayerZip will now automatically return the a copy of the latest player code without the need to manually issue a DeletePlayerZip request to remove the previous cached version
Engine and Engine Dispatch 23.2.21
Released 2024-03-25
Bug Fixes
- Fixes 401 errors on TinCan preview launches
- Fixes support of TinCan v0.9 content
- Fixes xAPI file document migration and read/write locations in the upgrade tool
Improvements
- Added a LaunchId property to the Webhook payload 'Resources' section for certain topics (RegistrationChanged and Course Launched). This property will contain the value specified in the new LaunchId setting that can be passed when creating a LaunchLink (in the launchSettings collection). The purpose of this is to tie a webhook payload to the launch that triggered it, if desired.
- Performance improvements for the migration of xAPI statements during the upgrade
- [.NET Only] Changed default logging configuration to log at INFO and flush every 2 seconds
- [Java Only] Increased LocalCacheMaxEntries default to 250000
Engine and Engine Dispatch 23.1.8
Released 2024-02-23
Bug Fixes
- Fixes fatal null pointer exception in upgrade tool
- Fixed an issue where extremely large PII deletions would fail
- Fixed an issue where large xAPI documents were not deleting properly
- [Java Only] Updated commons-compress dependency to 1.26.0 for CVE-2024-25710, a potential for an infinite loop, and bumped other "commons" jars it depends on as well
Improvements
- New setting: PlayerOverrideCmi5LaunchMethod allows users to specify if they want to ignore the launchMethod found in the cmi5.xml manifest (AnyWindow/OwnWindow) and instead use the PlayerScoLaunchType setting value (like other standards)
- If the LRS receives a statement with a duplicate ID and the content is different, a 409 status code is returned
Engine and Engine Dispatch 23
Released 2024-02-15
xAPI 2.0 Support
Engine's LRS now supports xAPI 2.0! Early adopters can send and receive xAPI 2.0 statements and make other requests that adhere to that standard.
Note: There is currently no way to launch xAPI-based content that uses xAPI 2.0, because cmi5 still requires xAPI 1.0 (for now), and Engine won’t accept 2.0 statements from Tin Can packages (the older type that contains a tincan.xml manifest). So working with the new standard version will primarily be through direct requests to the LRS.
LRS Improvements
For customers who have heavy usage of xAPI-based content and very large sets of xAPI data in Engine, reading statements from the database could be slow at times. With Engine 23 we have redesigned our database schema for storing xAPI data to alleviate some of these performance issues. On most database platforms we've seen significant improvements in read performance (around 50% faster for reading statements in many cases).
Note: If you are a customer with an existing xAPI dataset that is already large, upgrading to Engine 23 may require a bit more coordination and time than normal due to this change in schema. We'll work with you to make that go as smoothly as possible.
Streaming Video Support
In addition to MP4 video files, Engine can now deliver streaming video in either the widely supported HLS format, or MPEG-DASH, which works in many places except for mobile Safari. Both formats work by breaking videos up into short segments that may be encoded at different qualities, and delivering the best available quality for the learner’s available bandwidth.
This support comes in the form of allowing you to do a 'reference' import by providing us with the .m3u8 (for HLS) or .mpd (for MPEG-DASH) playlist file. Engine can then launch this in the VideoJS video player.
Note: Engine is not doing any automatic transcoding of video files into these formats. So you would have to already have these transcoded videos hosted and available and the m3u8 or mpd files will point to them.
Launch Specific Configuration
One thing that comes up occasionally is the need to override an Engine configuration setting only for a specific launch of a course. Maybe there is a value that needs to be different depending on the context of where the learner is launching (eg, mobile vs. desktop). Now you will be able to specify a collection of setting IDs and values when requesting the launch link and these will be used to override behavior at runtime. This will work for any setting that is defined as 'registration level' in the documentation.
Alternate Configuration Sources
Engine now supports the ability to read configuration values from Hashicorp’s Vault and Consul services. Hashicorp’s Vault is a popular service for storing sensitive data, such as auth tokens or passwords. Consul is (among many other things) a service for storing other sorts of non-sensitive data. Engine 23 ships with plugins for reading configuration values from those services, which can simplify deploying clusters of Engine app servers that need to share settings.
Note: this is currently only available on the Java version of Engine. It may be possible to create a plugin to support this on the .NET version of Engine, but we do not currently provide that.
Alternate Queue Implementations
With the Webhook feature of Engine, if we fail to send a notification to your endpoint, we will queue it for retrying. Engine has a SQL-based queue that serves as the default implementation of this. However, now you have the ability to implement a plugin to substitute your own implementation of the queue, if desired. Out of the box, the Java version of Engine has a plugin implementation for using Amazon SQS that can be used. You can read more about configuring this in the main documentation.
Note: There are a number of potentially breaking changes in Engine 23. If you are upgrading from an older Engine please check out this document for details on those.