Resolves these eslint errors:
/puter/src/IPC.js
53:69 error 'appCallbackFunctions' is not defined no-undef
55:9 error 'appCallbackFunctions' is not defined no-undef
57:16 error 'appCallbackFunctions' is not defined no-undef
81:33 error 'window_for_app_instance' is not defined no-undef
84:27 error 'iframe_for_app_instance' is not defined no-undef
105:48 error Empty block statement no-empty
180:18 error 'api_origin' is not defined no-undef
190:44 error 'auth_token' is not defined no-undef
194:21 error 'logout' is not defined no-undef
207:18 error 'api_origin' is not defined no-undef
216:44 error 'auth_token' is not defined no-undef
220:21 error 'logout' is not defined no-undef
239:18 error 'api_origin' is not defined no-undef
248:44 error 'auth_token' is not defined no-undef
252:21 error 'logout' is not defined no-undef
268:13 error 'is_auth' is not defined no-undef
309:13 error 'is_auth' is not defined no-undef
348:27 error 'window_for_app_instance' is not defined no-undef
360:27 error 'window_for_app_instance' is not defined no-undef
576:35 error 'uuidv4' is not defined no-undef
582:9 error 'launch_app' is not defined no-undef
597:37 error 'appdata_path' is not defined no-undef
629:12 error 'appdata_signatures' is not defined no-undef
633:23 error 'appdata_signatures' is not defined no-undef
638:30 error 'appdata_path' is not defined no-undef
647:25 error 'appdata_signatures' is not defined no-undef
664:29 error 'appdata_signatures' is not defined no-undef
682:13 error 'is_auth' is not defined no-undef
717:13 error 'is_auth' is not defined no-undef
745:13 error 'is_auth' is not defined no-undef
773:13 error 'is_auth' is not defined no-undef
783:22 error 'api_origin' is not defined no-undef
793:48 error 'auth_token' is not defined no-undef
797:25 error 'logout' is not defined no-undef
825:13 error 'is_auth' is not defined no-undef
857:36 error 'operation_id' is not defined no-undef
872:41 error 'auth_token' is not defined no-undef
873:41 error 'api_origin' is not defined no-undef
939:45 error 'item_icon' is not defined no-undef
951:33 error 'sort_items' is not defined no-undef
954:29 error 'show_save_account_notice_if_needed' is not defined no-undef
998:38 error 'busy_indicator_hide_delay' is not defined no-undef
1004:33 error 'busy_indicator_hide_delay' is not defined no-undef
1018:37 error 'pictures_path' is not defined no-undef
1020:37 error 'desktop_path' is not defined no-undef
1022:37 error 'documents_path' is not defined no-undef
1024:37 error 'videos_path' is not defined no-undef
1026:37 error 'audio_path' is not defined no-undef
1028:37 error 'appdata_path' is not defined no-undef
1032:13 error 'is_auth' is not defined no-undef
1044:28 error 'operation_id' is not defined no-undef
1059:33 error 'auth_token' is not defined no-undef
1060:33 error 'api_origin' is not defined no-undef
1145:31 error 'iframe_for_app_instance' is not defined no-undef
1163:31 error 'window_for_app_instance' is not defined no-undef
1178:36 error 'get_apps' is not defined no-undef
1199:11 error 'window_for_app_instance' is not defined no-undef
Apps are not required to use the Puter SDK. If they don't, then we can
still launch them, close them, and listen to their close event, but are
unable to send messages to them.
Firstly, I was missing an `async` here, which somehow still worked for
me then, but produced errors for me when I tried it today.
Then, actually await the promise.
Finally, actually check the target's parent is us, and not just that it
has the attribute!
I don't know what was going on in my head that day. 🤦♂️
Sending a 'closeApp' message allows an app to close a target app, if it
has permission to do so. Currently, permission is granted if the
requesting app is the parent of the target app, or has godmode set.
A broadcast is a message sent to every running app that uses Puter.js.
Broadcasts have a name and a data payload, and are sent as a 'broadcast'
message.
Send a broadcast using:
`globalThis.services.get('broadcast').sendBroadcast(...)`
When doing so, you have the option to keep the broadcast message around,
so that it can be sent to any newly-launched apps. Sending another
broadcast with the same name will overwrite the previous one, so you
don't have to worry about flooding a new app with duplicates.
Calling `puter.ui.launchApp()` now treats the new app as a child of the
one that launched it.
A child app is given a `puter.parent_instance_id` URL param, containing
its parent's instance ID.
Previously, `launchApp()` would resolve as soon as the app was launched.
This commit changes that, so that it is notified after the child app
sends its READY event to Puter. This means that as soon as `launchApp()`
has completed, the child app is ready to receive messages. The downside
is that launching an app that does not include Puter.js will now not
cause a notification, so `await puter.ui.launchApp()` will not resolve
in that case.
This lets apps communicate with each other, via Puter.
We probably want to limit this in some way, but for now, all apps are
allowed to send messages to any other apps.
The message is:
- `targetAppInstanceID`: The instance ID to send the message to
- `targetAppOrigin`: targetOrigin passed to postMessage(), in case we
want to restrict which URL can receive the message
- `contents`: The message to send to the target
The resizing and repositioning is safe from abuse in that the window's position and size cannot cause it to escape the viewport. More could be done here, e.g. rate limit resize/repos. I will request rate-limiting in a separate issue.