The following MarketplaceService APIs which were previously accessible, have been silently removed:
PromptSubscriptionPurchaseFinished
PromptSubscriptionCancellationFinished
Leading to errors such as these:
attempt to index nil with 'Connect'
attempt to index function with 'Connect'
This lead to ALL of our games breaking either fully or partially since when subscriptions were about to be made available a couple years ago (and then were seemingly cancelled) we pre-emptively added support for these APIs in our analytics and purchase tracking.
Expected behavior
I expect there to be some kind of warning some time before removing publicly accessible API members, even if they may not have had an official announcement thread.
Looks like it was deprecated a few updates ago and completely removed with todays update. Maybe it was reverted, dunno. Either way the code we were using and had to emergency fix for has not changed for ~2 years
First off, sorry for the breakage, we never intend to break any developer experiences.
We did run analytics on this change, checking for any callers of the Prompt methods just to make sure that nobody was attempting to call these methods before removing them. However we unfortunately missed your places because they only access the event and don’t call the method.
Although this API was technically at a public security level, it was never intended to be a public API. We never announced it, documented it, or otherwise made it functional for public developers, it was only used for an internal tech demo.
If you see an API like this without any documentation or announcement of any kind please do not start writing code against it. We lack the technical capability to fully block off access to events / properties before they’re ready for public release but that does not mean it’s safe to write production code against them.
While there was never an official announcement here the feature seemed to be fully implemented at the time. Screenshots of official UI for subscriptions were circling around, configuration + fflags existed for them, and it seemed like a release of subscriptions was going to happen. I agree that accessing these events before an official release was a mistake on our end. Now, 3+ years later, it was just forgotten in our codebase, and we tend to not mess with business-critical modules (eg. our MarketplaceService/monetization wrapper) when they already work.
We lack the technical capability to fully block off access to events / properties before they’re ready for public release
I’m pretty sure script security levels being set to roblox-only for these properties would have worked? That and/or marking APIs & fields like these as deprecated before an official release seems to have been standard for most changes on the platform in the past few years. There are some funny ones with prefixes and suffixes like INTERNAL_ or _DEPRECATED too.
TL;DR: Close doesn’t equal shipped. Up until the moment we actually turn something on fully it’s still subject to change. There’s a number of APIs that have come very close to shipping which we walked back and did a different way over the years.
Yes, to be extra safe we generally do something like that these days with preliminary versions of stuff if there’s some reason it can’t be RobloxScriptSecurity. We’ve become more and more safe with the APIs over the years.