Juan Castro
55ba45e159
Merge juancastro/put-2170-puterjs-notifications into juancastro/put-2171-push-service-worker
2026-10-28 16:30:38 -04:00
Juan Castro
e8688d5025
Merge juancastro/put-2167-notification-written-hook into juancastro/put-2170-puterjs-notifications
2026-10-28 16:30:35 -04:00
Juan Castro
10f10029c2
Merge juancastro/put-2168-let-users-decide-which-apps-can-send-them-pushes into juancastro/put-2167-notification-written-hook
2026-10-28 16:30:33 -04:00
Juan Castro
11a94ed608
Merge juancastro/put-2251-let-apps-send-notifications-to-their-own-user into juancastro/put-2168-let-users-decide-which-apps-can-send-them-pushes
2026-10-28 16:30:30 -04:00
Juan Castro
5c35f8d053
Merge main into juancastro/put-2251-let-apps-send-notifications-to-their-own-user
2026-10-28 16:30:10 -04:00
Daniel Salazar
179ad990d6
feat(events): simplify onPersistent delivery ( #4395 )
...
* feat(events): simplify onPersistent delivery
Replace delivery/targets with a boolean single. Without single, every
event runs the app's published handler in its events worker and is also
sent to every connected client; the server no longer routes between the
two. single keeps leasing each event to one consumer that acks.
delivery: 'single' | 'broadcast' is still accepted and targets is
ignored. Stored rows are read by their delivery column alone.
* docs(events): compare onLocal, onPersistent and single
* feat(events): rename single to queue
onPersistent({ queue: true }) is the work-queue mode: each event goes to
one consumer at a time and is offered again until acknowledged.
delivery: 'single' is still accepted as an alias, and subscription
objects report queue instead of single.
The docs explain the three modes (onLocal, default onPersistent, queue)
and each events recipe says which one it uses and why.
* docs(events): retries are the only repeat for a queued event
* feat(events): queue deliveries fall through to the worker on decline
A queued delivery gets one socket attempt under a 15 s lease instead of
two 60 s ones. A client with no handler for it, or whose handler fails,
sends events.nack and the worker takes it without waiting for the lease.
Declines are relayed to the region holding the lease like acks are, and
a decline for a lease that is no longer the client's is ignored.
* feat(events): drop thrown errors, retry only temporary ones
A queued handler that throws now drops the event and counts one failure
toward the pause. Network errors, timeouts, rate limits, 5xx responses
and errors thrown with retry: true are retried with the existing
backoff. One classifier is shared by puter.js and the events worker
runtime, which inlines it at build time. A dropped event is billed once,
like a completed one. ack() remains as an optional early release.
* docs(events): queued events reach every tab with a handler
2026-10-28 12:58:51 -07:00
Juan Castro
6f9719fd65
Merge juancastro/put-2170-puterjs-notifications into juancastro/put-2171-push-service-worker
2026-10-28 09:45:51 -04:00
Juan Castro
352a2fbabd
Merge juancastro/put-2167-notification-written-hook into juancastro/put-2170-puterjs-notifications
2026-10-28 09:45:45 -04:00
Juan Castro
59700519a6
Merge juancastro/put-2168-let-users-decide-which-apps-can-send-them-pushes into juancastro/put-2167-notification-written-hook
2026-10-28 09:45:38 -04:00
Juan Castro
8482ff2167
Merge juancastro/put-2251-let-apps-send-notifications-to-their-own-user into juancastro/put-2168-let-users-decide-which-apps-can-send-them-pushes
2026-10-28 09:45:31 -04:00
Juan Castro
b42f2acf06
Merge main into juancastro/put-2251-let-apps-send-notifications-to-their-own-user
2026-10-28 09:44:38 -04:00
Neal Shah
25a574b57d
GUI for custom domains ( #4355 )
...
Notify HeyPuter / notify (push) Canceled after 0s
release-please / release-please (push) Canceled after 0s
Backend Tests / changes (push) Canceled after 0s
Backend Tests / typecheck (push) Canceled after 0s
Backend Tests / test shard 1/4 (push) Canceled after 0s
Backend Tests / test shard 2/4 (push) Canceled after 0s
Backend Tests / test shard 3/4 (push) Canceled after 0s
Backend Tests / test shard 4/4 (push) Canceled after 0s
Backend Tests / test (main) (push) Canceled after 0s
Backend Tests / coverage (push) Canceled after 0s
Maintain Release Merge PR / update-release-pr (push) Canceled after 0s
* PUT-2226
* modifications'
* routing fixes
* secondary custom domain verification
2026-10-27 15:54:02 -04:00
Juan Castro
7e78a4feef
fix(gui): the service worker never reuses cached imports
...
The worker is registered with updateViaCache set to none, so the scripts
it imports are fetched fresh on every update check.
2026-10-27 14:18:07 -04:00
Juan Castro
7aa4d91ae9
fix(gui): a tap delivered twice routes once
...
The page remembers the notifications it handed over in the last ten
seconds and drops a repeat, whichever way it arrives.
2026-10-27 14:17:57 -04:00
Juan Castro
5f7ab80721
fix(gui): local banner tags carry the app
...
An app message's group is tagged under its app, as the server tags a
push, so two apps using the same group name keep separate banners.
2026-10-27 14:17:48 -04:00
Juan Castro
b3dbfdbd7b
fix(gui): route push taps through the stored notification
...
A tap from the worker names only a notification; the desktop and the
dashboard read the signed-in user's own row and route from its app,
target and data, as a tap from the URL already did. Without a row the
dashboard opens the list and the desktop does nothing.
2026-10-27 14:17:40 -04:00
Juan Castro
60dfff3b0b
Merge juancastro/put-2167-notification-written-hook into juancastro/put-2170-puterjs-notifications
2026-10-27 14:11:58 -04:00
Juan Castro
5a83c4a045
Merge juancastro/put-2170-puterjs-notifications into juancastro/put-2171-push-service-worker
2026-10-27 14:11:58 -04:00
Juan Castro
fe8acf007c
fix(notifications): read the app off the notification on an update
2026-10-27 14:11:46 -04:00
Juan Castro
8010c9fc94
Merge juancastro/put-2168-let-users-decide-which-apps-can-send-them-pushes into juancastro/put-2167-notification-written-hook
2026-10-27 14:11:10 -04:00
Juan Castro
bbf375db14
fix(notifications): notif.written hands out a copy with the audience
...
Listeners get their own copy of the value, so what the socket carries is
what was written. Both emits name the audience, and an update names the
row's app when the row or the value says which.
2026-10-27 14:10:56 -04:00
Juan Castro
fe70e7c6ba
Merge juancastro/put-2251-let-apps-send-notifications-to-their-own-user into juancastro/put-2168-let-users-decide-which-apps-can-send-them-pushes
2026-10-27 14:08:01 -04:00
Juan Castro
f0d7a69dd4
fix(notifications): cap the sender name on app messages
...
The app's title or name is cut to the title length, counting code points,
before it is stored on the message.
2026-10-27 14:07:27 -04:00
Juan Castro
5ce131517b
fix(notifications): refuse an app message before it spends the day window
...
The minute window is spent first, so a request the minute window refuses
between the read and the spend leaves the day window untouched.
2026-10-27 14:07:25 -04:00
Daniel Salazar
49b38f3482
fix: seat creation ( #4387 )
Backend Tests / changes (push) Canceled after 0s
Backend Tests / typecheck (push) Canceled after 0s
Backend Tests / test shard 1/4 (push) Canceled after 0s
Backend Tests / test shard 2/4 (push) Canceled after 0s
Backend Tests / test shard 3/4 (push) Canceled after 0s
Backend Tests / test shard 4/4 (push) Canceled after 0s
Backend Tests / test (main) (push) Canceled after 0s
Backend Tests / coverage (push) Canceled after 0s
Notify HeyPuter / notify (push) Canceled after 0s
release-please / release-please (push) Canceled after 0s
Maintain Release Merge PR / update-release-pr (push) Canceled after 0s
2026-10-27 12:49:31 -04:00
Nariman Jelveh and Claude Opus 5.5
241fb7be8a
feat(dashboard): simplify the share modal
...
- The access level and Share button appear beside the field only once
someone is entered, instead of a full-width button that sat disabled.
- The access list sits directly under the field. Each person's menu ends
with Remove access (or Cancel invitation), replacing the trash column;
the inline confirmation stays.
- General access is one row: a lock or globe icon, the switch with its
explanation beneath, and the level on the right.
- A footer holds Copy link and Done. Copy link is offered for any single
item, since the link opens it for anyone who has access, and confirms
in place. Status messages live in the footer; successes fade.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-27 09:08:44 -07:00
dependabot[bot]
0167a9d10e
chore(deps): bump fast-uri from 3.1.7 to 3.1.9 in /src/puter-js ( #4336 )
...
Bumps [fast-uri](https://github.com/fastify/fast-uri ) from 3.1.7 to 3.1.9.
- [Release notes](https://github.com/fastify/fast-uri/releases )
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.7...v3.1.9 )
---
updated-dependencies:
- dependency-name: fast-uri
dependency-version: 3.1.9
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-27 08:54:47 -07:00
dependabot[bot]
5a879a4346
chore(deps): bump smtp-server from 3.19.23 to 3.19.24 ( #4383 )
...
Bumps [smtp-server](https://github.com/nodemailer/smtp-server ) from 3.19.23 to 3.19.24.
- [Release notes](https://github.com/nodemailer/smtp-server/releases )
- [Changelog](https://github.com/nodemailer/smtp-server/blob/master/CHANGELOG.md )
- [Commits](https://github.com/nodemailer/smtp-server/compare/v3.19.23...v3.19.24 )
---
updated-dependencies:
- dependency-name: smtp-server
dependency-version: 3.19.24
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-27 08:54:33 -07:00
Juan Castro
7ee0cbfac9
feat(gui): the service worker tells open tabs when the push subscription changes
2026-10-27 11:06:14 -04:00
Juan Castro
dfa6f4effc
Merge juancastro/put-2167-notification-written-hook into juancastro/put-2170-puterjs-notifications
2026-10-27 10:44:19 -04:00
Juan Castro
20c63b6282
Merge juancastro/put-2168-let-users-decide-which-apps-can-send-them-pushes into juancastro/put-2167-notification-written-hook
2026-10-27 10:44:19 -04:00
Juan Castro
681b9cd463
Merge juancastro/put-2170-puterjs-notifications into juancastro/put-2171-push-service-worker
2026-10-27 10:44:19 -04:00
Juan Castro
9fb66137a3
Merge juancastro/put-2251-let-apps-send-notifications-to-their-own-user into juancastro/put-2168-let-users-decide-which-apps-can-send-them-pushes
2026-10-27 10:44:14 -04:00
Juan Castro
057aa116a4
Merge origin/main into juancastro/put-2251-let-apps-send-notifications-to-their-own-user
2026-10-27 10:44:11 -04:00
Daniel Salazar
1cea1b2a0a
perf(thumbnails): keep read URLs stable within an hour ( #4379 )
Backend Tests / changes (push) Canceled after 0s
Backend Tests / typecheck (push) Canceled after 0s
Backend Tests / test shard 1/4 (push) Canceled after 0s
Backend Tests / test shard 2/4 (push) Canceled after 0s
Backend Tests / test shard 3/4 (push) Canceled after 0s
Backend Tests / test shard 4/4 (push) Canceled after 0s
Backend Tests / test (main) (push) Canceled after 0s
Backend Tests / coverage (push) Canceled after 0s
Maintain Release Merge PR / update-release-pr (push) Canceled after 0s
Notify HeyPuter / notify (push) Canceled after 0s
release-please / release-please (push) Canceled after 0s
2026-10-26 22:16:54 -07:00
Daniel Salazar
6c78d2f9e9
fix(ui): reject failed desktop IPC requests ( #4378 )
2026-10-26 22:14:19 -07:00
Daniel Salazar
e8aa12ace5
fix(puter-js): replay requests with fresh body credentials ( #4376 )
2026-10-26 22:10:24 -07:00
Daniel Salazar
f1964778b4
fix(puter-js): coordinate sign-in callbacks and filesystem sockets ( #4375 )
2026-10-26 22:09:52 -07:00
Daniel Salazar
c8f7b1ceda
fix(auth): support recovery codes when disabling two-factor auth ( #4374 )
2026-10-26 22:07:52 -07:00
Daniel Salazar
0411a92f4e
perf(dashboard): share launch-app requests and size recent icons ( #4373 )
2026-10-26 22:07:33 -07:00
Daniel Salazar
5cfd4d1f53
fix(hosting): honor user-granted subdomain permissions ( #4372 )
2026-10-26 22:07:04 -07:00
Daniel Salazar
e1a36215f6
fix(sharing): preserve team grants and scope link invalidation ( #4371 )
2026-10-26 22:06:16 -07:00
Daniel Salazar
6f13b1f457
fix(apps): compare normalized index URLs before update checks ( #4370 )
2026-10-26 22:05:21 -07:00
Daniel Salazar
996d85148e
fix(fs): remove app data requested during uninstall ( #4369 )
2026-10-26 22:05:05 -07:00
Daniel Salazar
09da68424e
fix(fs): preserve stored path spelling and app ACL identity ( #4368 )
2026-10-26 22:04:36 -07:00
Daniel Salazar
7bccde40a8
fix(hosting): use the current authenticated visitor for asset billing ( #4364 )
2026-10-26 22:04:17 -07:00
Daniel Salazar
cf5d2c60a5
perf(permission): resolve default grants through full-access issuers ( #4361 )
2026-10-26 22:03:45 -07:00
Daniel Salazar
b7a0276337
fix(fs): preserve paging and file read-copy contracts ( #4367 )
2026-10-26 22:03:09 -07:00
Daniel Salazar
bbc056cc49
fix(hosting): track trashed roots and cached backing misses ( #4363 )
2026-10-26 21:58:05 -07:00
Daniel Salazar
e2f6c2ed05
fix(cache): widen tombstone window to 5s ( #4381 )
2026-10-26 21:42:23 -07:00