diff --git a/src/docs/src/Perms/request.md b/src/docs/src/Perms/request.md index 776d7e982..4bbe4c0b6 100644 --- a/src/docs/src/Perms/request.md +++ b/src/docs/src/Perms/request.md @@ -62,10 +62,11 @@ The array form resolves to an array of those values, in the order asked. - File system: `fs:{path}:{read|write}` - Apps: `apps-of-user:{uuid}:{read|write}` - Subdomains: `subdomains-of-user:{uuid}:{read|write}` -- An app's root directory: `app-root-dir:{app_uid}:{read|write}` Some permission strings are not supported and are denied silently. +An app's root directory has no raw form: `app-root-dir:` reads as nothing during a permission check, so asking for it this way would prompt on every call and [`check()`](/Perms/check/) would report it as not granted even once it is. Use the `'appRootDir'` resource, which asks the server directly. + A lone string that names no resource is treated as a permission string, so `puter.perms.request('fs:/user/Documents:read')` keeps working. ## Batching diff --git a/src/docs/src/examples.js b/src/docs/src/examples.js index f71e041a1..7a86913ae 100644 --- a/src/docs/src/examples.js +++ b/src/docs/src/examples.js @@ -193,6 +193,12 @@ const examples = [ slug: 'ai-txt2speech-elevenlabs', source: '/playground/examples/ai-txt2speech-elevenlabs.html', }, + { + title: 'Text to Speech with Speechify', + description: 'Generate speech with Speechify voices using Puter.js AI API. Run and experiment with this TTS example in the playground.', + slug: 'ai-txt2speech-speechify', + source: '/playground/examples/ai-txt2speech-speechify.html', + }, { title: 'Text to Speech with Gemini', description: 'Generate speech with Gemini voices using Puter.js AI API. Run and experiment with this TTS example in the playground.', @@ -378,6 +384,30 @@ const examples = [ slug: 'fs-delete-directory', source: '/playground/examples/fs-delete-directory.html', }, + { + title: 'Share a file', + description: 'Share a file with another user using Puter.js filesystem API. Run and experiment with this sharing example in the playground.', + slug: 'fs-share', + source: '/playground/examples/fs-share.html', + }, + { + title: 'Stop sharing a file', + description: 'Revoke a share with Puter.js filesystem API. Run and modify this example instantly in your browser.', + slug: 'fs-unshare', + source: '/playground/examples/fs-unshare.html', + }, + { + title: 'List what is shared with you', + description: 'List items other people have shared with you using Puter.js filesystem API. Run and experiment with this example in the playground.', + slug: 'fs-listShared', + source: '/playground/examples/fs-listShared.html', + }, + { + title: 'See who a file is shared with', + description: 'List the shares on one of your own files with Puter.js filesystem API. Run and modify this example in your browser.', + slug: 'fs-getShares', + source: '/playground/examples/fs-getShares.html', + }, ], }, { @@ -713,6 +743,65 @@ const examples = [ slug: 'ui-set-menubar', source: '/playground/examples/ui-set-menubar.html', }, + { + title: 'Feedback dialog', + description: 'Collect feedback with the built-in dialog from the Puter.js UI API. Run and experiment with this example directly in the playground.', + slug: 'ui-show-feedback-dialog', + source: '/playground/examples/ui-show-feedback-dialog.html', + }, + ], + }, + { + title: 'Perms', + children: [ + { + title: "Request the user's email", + description: "Request access to the user's email address with Puter.js permissions API. Run and experiment with this example directly in the playground.", + slug: 'perms-request-email', + source: '/playground/examples/perms-request-email.html', + }, + { + title: 'Request folder access', + description: 'Request write access to a special folder with Puter.js permissions API. Run and modify this example instantly in your browser.', + slug: 'perms-request-folder', + source: '/playground/examples/perms-request-folder.html', + }, + { + title: 'Request several at once', + description: 'Request everything your app needs under a single prompt with Puter.js permissions API. Run and experiment with this batch example in the playground.', + slug: 'perms-request-batch', + source: '/playground/examples/perms-request-batch.html', + }, + { + title: 'Check without prompting', + description: 'Check whether access is already granted before asking for it with Puter.js permissions API. Run and modify this example in the playground.', + slug: 'perms-check', + source: '/playground/examples/perms-check.html', + }, + { + title: "Request access to the user's apps", + description: "Request read access to the user's apps with Puter.js permissions API. Run and experiment with this example directly in the playground.", + slug: 'perms-request-apps', + source: '/playground/examples/perms-request-apps.html', + }, + { + title: "Request access to the user's subdomains", + description: "Request write access to the user's subdomains with Puter.js permissions API. Run and modify this example instantly in your browser.", + slug: 'perms-request-subdomains', + source: '/playground/examples/perms-request-subdomains.html', + }, + { + title: "Use another app's data", + description: "Request permission to use another app's key-value data with Puter.js permissions API. Run and experiment with this example in the playground.", + slug: 'perms-request-app-data', + source: '/playground/examples/perms-request-app-data.html', + }, + { + title: 'Request a raw permission string', + description: 'Request a specific permission string with Puter.js permissions API. Run and modify this example directly in your browser.', + slug: 'perms-request-permission', + source: '/playground/examples/perms-request-permission.html', + }, ], }, { diff --git a/src/docs/src/playground/examples/ai-txt2speech-speechify.html b/src/docs/src/playground/examples/ai-txt2speech-speechify.html new file mode 100644 index 000000000..1f17accce --- /dev/null +++ b/src/docs/src/playground/examples/ai-txt2speech-speechify.html @@ -0,0 +1,19 @@ + +
+ + + + + diff --git a/src/docs/src/playground/examples/fs-getShares.html b/src/docs/src/playground/examples/fs-getShares.html new file mode 100644 index 000000000..43c71f4b8 --- /dev/null +++ b/src/docs/src/playground/examples/fs-getShares.html @@ -0,0 +1,16 @@ + + + + + + diff --git a/src/docs/src/playground/examples/fs-listShared.html b/src/docs/src/playground/examples/fs-listShared.html new file mode 100644 index 000000000..371f1428a --- /dev/null +++ b/src/docs/src/playground/examples/fs-listShared.html @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/docs/src/playground/examples/fs-share.html b/src/docs/src/playground/examples/fs-share.html new file mode 100644 index 000000000..2de299a13 --- /dev/null +++ b/src/docs/src/playground/examples/fs-share.html @@ -0,0 +1,15 @@ + + + + + + diff --git a/src/docs/src/playground/examples/fs-unshare.html b/src/docs/src/playground/examples/fs-unshare.html new file mode 100644 index 000000000..511681983 --- /dev/null +++ b/src/docs/src/playground/examples/fs-unshare.html @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/docs/src/playground/examples/perms-check.html b/src/docs/src/playground/examples/perms-check.html new file mode 100644 index 000000000..ad1d6adee --- /dev/null +++ b/src/docs/src/playground/examples/perms-check.html @@ -0,0 +1,23 @@ + + + + + + + diff --git a/src/docs/src/playground/examples/perms-request-batch.html b/src/docs/src/playground/examples/perms-request-batch.html new file mode 100644 index 000000000..0adc5e811 --- /dev/null +++ b/src/docs/src/playground/examples/perms-request-batch.html @@ -0,0 +1,20 @@ + + + + + + + diff --git a/src/docs/src/playground/examples/ui-show-feedback-dialog.html b/src/docs/src/playground/examples/ui-show-feedback-dialog.html new file mode 100644 index 000000000..82c60807b --- /dev/null +++ b/src/docs/src/playground/examples/ui-show-feedback-dialog.html @@ -0,0 +1,14 @@ + + + + + + + diff --git a/src/docs/src/redirects.js b/src/docs/src/redirects.js index 19d2aa289..f25a26d13 100644 --- a/src/docs/src/redirects.js +++ b/src/docs/src/redirects.js @@ -1,5 +1,25 @@ const redirects = { '/Introduction': '/', + + // `puter.perms` collapsed one-method-per-task into `request(resource, + // details)`, so these pages went. Every one of them shipped, which is the + // reason for the redirect: an external link or a bookmark would otherwise + // land on nothing. Pages that only ever existed on the branch that removed + // them are deliberately absent — nobody could have a link to those. + '/Perms/requestAppData': '/Perms/appData', + '/Perms/requestEmail': '/Perms/request', + '/Perms/requestManageApps': '/Perms/request', + '/Perms/requestManageSubdomains': '/Perms/request', + '/Perms/requestReadApps': '/Perms/request', + '/Perms/requestReadDesktop': '/Perms/request', + '/Perms/requestReadDocuments': '/Perms/request', + '/Perms/requestReadPictures': '/Perms/request', + '/Perms/requestReadSubdomains': '/Perms/request', + '/Perms/requestReadVideos': '/Perms/request', + '/Perms/requestWriteDesktop': '/Perms/request', + '/Perms/requestWriteDocuments': '/Perms/request', + '/Perms/requestWritePictures': '/Perms/request', + '/Perms/requestWriteVideos': '/Perms/request', }; module.exports = redirects;