appsmithorg / appsmith

Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.
https://www.appsmith.com
Apache License 2.0
32.84k stars 3.57k forks source link

[Bug]: Modules referencing deleted modules, execute queries in the app with the same name #31838

Open rohan-arthur opened 5 months ago

rohan-arthur commented 5 months ago

If in an app page, dataTree is unable to find a private action for a JS module instance, it starts checking globally and if there is name match (say another action with same name), it starts sending its data in the payload . Hence , in this case, instead of erroring out such functions, we are getting illegitimate data If in an app page, dataTree is unable to find a private action for a JS module instance, it starts checking globally and if there is name match (say another action with same name), it starts sending its data in the payload . Hence , in this case, instead of erroring out such functions, we are getting illegitimate data

https://www.notion.so/If-in-an-app-page-dataTree-is-unable-to-find-a-private-action-for-a-JS-module-instance-it-starts-c-e245c1da85164f979b03e05967d0ad55

https://www.loom.com/share/ff289dd8f99a4aca96b378af58f017c6

ashit-rath commented 4 months ago

After having a discussion with @ApekshaBhosale, jotting down the thoughts

A module with invalid reference of entity is most likely going to throw error in the context of module editor. This is due to the fact that the entity as a leaf node does not have a reference and this is most likely achieved by AST linting. So the idea is very similar; when a module instance is created; the internal references are modified and during the modification if a leaf node entity in the AST is not able to find a reference, a random name can be assigned so that it doesn't coincide with the entities in the global namespace.

Nikhil-Nandagopal commented 4 months ago

Bumping this issue up to prod because it should have made it's way there by now if it was not fixed

subrata71 commented 3 months ago

RCA

We lack a means to distinguish whether a dynamic binding pertains to an action, a widget, or another entity. A binding could encompass various forms, ranging from a simple string literal like {{"hello world"}}, to a JavaScript library method such as {{moment.localeData}}, or even an invalid reference. The backend infrastructure does not retain any metadata associated with a binding. At present, the platform lacks the functionality to address this. Given these constraints, I propose deferring this issue for future consideration and putting it to the icebox.

cc: @ashit-rath