Commit Graph

422 Commits

Author SHA1 Message Date
Stanko K.R. 2fc9215b1d Add support for Basecamp, Campfire & Slack webhooks 2025-09-16 20:04:20 +02:00
Stanko K.R. 1d69b171b6 Test the abuse prevention logic 2025-09-16 20:04:20 +02:00
Stanko K.R. 0bdbc5f5e8 Add abuse prevention 2025-09-16 20:04:18 +02:00
Stanko K.R. a515ea3b1f Create webhooks 2025-09-16 20:03:55 +02:00
Jorge Manrubia a6eb928688 Fix: update ends_at when flushing bundles
If not, it can happen that the bundlers remains in a delivered state
even when it is not covering its window anymore because it has been delivered.
2025-09-16 12:10:06 +02:00
Jorge Manrubia 09325403e5 Add missing test (we were only testing this logic via the bundle test) 2025-09-16 11:22:14 +02:00
Mike Dalessio d5a4239d19 Rename the queenbee_id and signal_user_id columns
to be more generic for the open-source release.

Find the signal account via Account#external_account

Find the signal user via User#external_user
2025-09-15 13:57:53 -04:00
Mike Dalessio 2630e4bd74 Extract 37id and QB controllers, models, and tests 2025-09-13 16:03:02 -04:00
Mike Dalessio 8f39c015ea Tests now pass with local authentication
This is the first step of a multi-step SaaS engine extraction.

Looking ahead to an open source release, we need to make sure that
local authentication is treated as an "official" option, and not just
a hack I added for Kevin to do load testing outside our DC. So this PR
gets to green, and adds a CI step in "local authentication" mode.

This all probably feels a little hacky to you, Reader, but the goal of
this change is to ease the next step, which will be extracting the
37id and Queenbee integrations into a proprietary "SaaS mode" engine.

In service of that goal, this commit simply wraps all of the dependent
code and tests with a conditional check on
`config.x.local_authentication`.
2025-09-13 15:21:00 -04:00
Jason Zimdars 9ad813e5d0 Fix misleading test
The access involvement changes exposed that this test wasn't doing what it said it was. For this to be a self-assignment the event creator and assignee need to be the same
2025-09-11 21:33:21 -05:00
Jason Zimdars c4dec29b49 Assignment notifications should always be delivered
- They're effectively @mentions
- This means watching really reflects the UI state: Watching for new cards
2025-09-11 21:21:11 -05:00
Jason Zimdars e68b344cc2 Remove _Everything_ inolvement 2025-09-11 12:34:31 -05:00
Jorge Manrubia 7f7ecf0346 Delete notifications when the user loses access to the collection 2025-09-10 10:24:20 +02:00
Jorge Manrubia 2e51a34694 Extract method to fetch all the notifications for a card for a given user
We'll need to handle access changes
2025-09-10 10:08:14 +02:00
Jorge Manrubia 58c525e5a6 Broadcast notifications that are deleted
To prevent 404s when someone doesn't refresh the page
2025-09-10 09:50:22 +02:00
Jorge Manrubia 07bdcb7a9c Pass the new param this partial requires 2025-09-09 12:12:39 +02:00
Jorge Manrubia c36420800e Fix test (and remove warning) 2025-09-09 12:12:22 +02:00
Jorge Manrubia d9cc592566 Merge pull request #1007 from basecamp/weekly-highlights
Weekly highlights
2025-09-05 17:03:38 +02:00
Jorge Manrubia aad61b36bc Generate highlights in the user timezone, now that we persist it
Also, remove the dates and duration from the highlights records. Those are not relevant, only the events-derived
key is. If two users with different timezones have different activities, they should see different summaries.
2025-09-05 12:39:09 +02:00
Jorge Manrubia d785f9f80f Don't show summaries when using filters 2025-09-02 12:20:02 +02:00
Mike Dalessio 85b6f46422 Do not try to bundle notifications for system users
ref: https://fizzy.37signals.com/5986089/collections/7/cards/1471
2025-09-01 12:37:34 -04:00
Jorge Manrubia dfbc77c2e5 Render weekly highlights considering periods of inactivity 2025-09-01 17:09:43 +02:00
Jorge Manrubia 5b68750713 Generate weekly highlights instead of daily ones
https://3.basecamp.com/2914079/buckets/37331921/todos/9010176047
2025-09-01 16:01:19 +02:00
Jorge Manrubia 6f2670d6dd Merge main into bundle-emails branch and resolve conflicts 2025-09-01 11:49:20 +02:00
Jason Zimdars e86be26f43 Update test
This test is a little naive because it matches cards in stages
regardless of engagement status unlike the actual conroller. For example
`@new_card` gets created and moved to a stage but it's actually not even
published and so shouldn't be stageable.
2025-08-28 21:24:23 -05:00
Jorge Manrubia 960f074b3f Don't bundle new notifications is bundling is disabled 2025-08-28 12:53:19 +02:00
Jorge Manrubia 4e2717a61f Merge main into bundle-emails branch 2025-08-28 12:42:43 +02:00
Jorge Manrubia c1c359f030 Review existing bundles when changing the pending bundles 2025-08-28 12:29:40 +02:00
Jorge Manrubia 53144a379c Add option to change the bundled email notification frequency 2025-08-28 11:56:40 +02:00
Jorge Manrubia 082a10e3d0 Add notification settings model 2025-08-28 11:20:28 +02:00
Jorge Manrubia 88976806b9 Format 2025-08-27 15:56:58 +02:00
Jorge Manrubia 5a4c40fd56 Test to make sure it skips bundles that are not due 2025-08-27 15:51:20 +02:00
Jorge Manrubia ccceeb1699 Add method for delivery job 2025-08-27 15:48:27 +02:00
Jorge Manrubia 744faf12c0 Extract "response cost" object to unify calculations around LLM usage costs 2025-08-27 13:18:41 +02:00
Jorge Manrubia e696c69d60 Merge branch 'main' into bundle-emails 2025-08-27 10:17:32 +02:00
Jorge Manrubia 81d6df3616 Remove comments from card prompts
We don't use to_prompt to generate AI responses anymore, only for events. Grabbing
all the comments don't make as much sense, and I'm sure it is quite expensive
2025-08-27 09:56:13 +02:00
Jorge Manrubia 853a75a54f Rename "cost_microcents" => "cost_in_microcents" 2025-08-27 09:38:23 +02:00
Jorge Manrubia 8ba6f5fe8e Validate we don't create overlapping bundles 2025-08-26 16:49:36 +02:00
Jorge Manrubia cfafc54a81 Deliver emails for bundled notifications (initial WIP) 2025-08-26 13:22:22 +02:00
Stanko K.R. fc0fccef11 Show only published cards to Fizzy Ask 2025-08-26 11:42:12 +02:00
Stanko K.R. c3e0deb57f Remove test for now private method 2025-08-25 10:32:33 +02:00
Stanko K.R. 6b89aa6805 Improve naming & remove money accessors 2025-08-25 10:30:43 +02:00
Stanko K.R. abad369c6a Introduce a Quota and Money object 2025-08-25 10:29:00 +02:00
Stanko K.R. cb5fe7c4f8 Add spend limits to conversations 2025-08-25 10:24:15 +02:00
Stanko Krtalić 78fdabf62f Merge pull request #932 from basecamp/fizzy-bar-v1
Fizzy bar V1
2025-08-25 07:16:42 +02:00
Stanko K.R. f87a403107 Fix PR review comments 2025-08-22 07:33:26 +02:00
Stanko K.R. 89af9066d3 Remove Fizzy Do command logic 2025-08-22 07:33:24 +02:00
Jorge Manrubia c8569ce8b9 Split indexed_by into two filters: indexed by and sort by
https://3.basecamp.com/2914079/buckets/37331921/todos/8877489555#__recording_8987808963
2025-08-21 19:12:54 +02:00
Jorge Manrubia fa82dc0384 Remove code related to Fizzy Do /command support and filtering
https://3.basecamp.com/2914079/buckets/37331921/messages/8961776532
2025-08-18 13:41:20 +02:00
Stanko K.R. 4f219fadf3 Add test for the price calculation 2025-08-13 15:14:12 +02:00