What's Changed
- Fix: Underline on fileupload card link by @Mikehrn in #4056
- feat(server): new plans + disabled checkout/upgrade/sidegrade by @fabis94 in #4057
- feat(workspaces): user workspace join requests by @alemagio in #4023
- feat(workspaces): team resolver for limited workspace by @alemagio in #4040
- Feat: Show approved/denied workspace request in table, various bug fixes by @Mikehrn in #4063
- Fix: Disable workspace menu items by @Mikehrn in #4068
- Feat: prevent non work emails by @Mikehrn in #3993
- tests(workspaceJoinRequests): fix broken tests with invalid scopes by @iainsproat in #4071
- feat(fe2): add extra metadata to seq logs for improved observability by @fabis94 in #4073
- chore(multiregion): more waits by @cdriesler in #4075
- fix(fe): Alignment on connectors page filters by @andrewwallacespeckle in #4072
- fix(server/logging): some subscription errors should be logged at warning level by @iainsproat in #4061
- feat(regions): move project comments and webhooks by @cdriesler in #3957
- feat(fe2): new publish sourcemaps mechanism by @fabis94 in #4076
- fix: ensure datadog gets git info w/ sourcemaps by @fabis94 in #4078
- feat(regions): move file uploads and blobs by @cdriesler in #3977
- chore(sso): improve misconfigured log by @cdriesler in #4080
- Feat: Add noindex to project pages by @Mikehrn in #4079
- fix(server/auth): callback should not finalize auth if HTTP response already sent by @iainsproat in #4044
- chore: move common workspace plan/feature config to @speckle/shared by @fabis94 in #4064
- feat(fe2): less spammy FE2 logging by @fabis94 in #4082
- Feat: Deep links on members settings by @Mikehrn in #4069
- feat: Update user tags in Mailchimp when user completes onboarding questions by @andrewwallacespeckle in #4000
- feat(fe2): reload page on JS load error by @fabis94 in #4084
- fix(fe2): a few reported FE2 error scenarios improved/fixed by @fabis94 in #4087
- fix(fe2): more adjustments to FE2 error reporting by @fabis94 in #4088
- refactor(server): logging directory renamed to observability by @iainsproat in #4077
- refactor(shared/logging): tidy up logger constructor by @iainsproat in #4081
- dev(local dev env): add docker compose to devcontainer by @iainsproat in #3909
- fix(server): update reference to logging in bin/www by @iainsproat in #4089
- chore(gatekeeper): rename workspace plans by @alemagio in #4052
- chore(gatekeeper): add workspace_seats table and types by @alemagio in #4062
- feat(regions): change project region once move is complete by @cdriesler in #3995
- feat(workspaces): count workspace seats by type by @alemagio in #4070
- chore(server/observability): logging of resolver to create checkout session by @iainsproat in #4067
- feat(automate): use updated hybrid function search by @cdriesler in #4085
- Alessandro/web 2765 ensure seat is assigned to users on workspace role change by @alemagio in #4091
- fix(server/automate): logger should have request context and request ID sent to execution engine by @iainsproat in #4092
- chore(server): tidy up maybeLoggerWithContext by @iainsproat in #4095
- tests(server/tests): convert modules/core/tests/graph.spec to typescript by @iainsproat in #4096
- fix(workspaces): emit role updated on join request approved by @cdriesler in #4100
- chore(devcontainers): Move post create command to a script by @iainsproat in #4090
- fix(automate): fix search param parsing by @cdriesler in #4099
- feat(feature flag): add workspacesNewPlanEnabled by @iainsproat in #4101
- feat(fe2): Create/Join Workspace as part of signup flow by @andrewwallacespeckle in #3997
- feat(shared) Update validateWorkspaceSlug to check for blocked words by @andrewwallacespeckle in #4102
- feat(fe): Redirect users with no discoverable workspaces to create page by @andrewwallacespeckle in #4105
- Update ifc parser to use new nuget and ability to test by @adamhathcock in #3830
- chore(server/scheduled tasks): should log task name and unique task Id by @iainsproat in #4094
- feat(workspaces): track last visited workspace and project by @cdriesler in #4086
- fix(server/prometheus): ensure consistent Prometheus registry is used by @iainsproat in #4106
- feat(fe): Improve ViewerExplorerFilters to show full property name and shortened name by @andrewwallacespeckle in #4110
- refactor(fe): Move activeUser workspace checks to their own query by @andrewwallacespeckle in #4108
- fix(fe): Truncate filter property full names by @andrewwallacespeckle in #4111
- refactor(fe): New workspace actions route to avoid slug conflicts by @andrewwallacespeckle in #4107
- Feat: Add isEmailsEnabled to serverInfo by @Mikehrn in #4109
- fix(fe): Check isEmailEnabled before forcing email verification by @andrewwallacespeckle in #4112
- fix(fe): Only run discoverable workspaces queries when FF is enabled by @andrewwallacespeckle in #4114
- fix(server/types): GetUserActivity actionType is optional by @iainsproat in #4093
- feat: plan prices accurately read from Stripe by @fabis94 in #4104
- feature(fe): Redirect users from join page when request is accepted by @andrewwallacespeckle in #4116
- feat(fe): Ensure no middleware for sso by @andrewwallacespeckle in #4118
- Feat: Base for new billing settings by @Mikehrn in #4115
- Bump IFC import service by @JR-Morgan in #4119
- fix(metrics): pass registry in to modules by @iainsproat in #4113
- fix(fe): Remove check for force onboarding FF in workspace middleware by @andrewwallacespeckle in #4123
- feat(server): prevent viewer seat from becoming project contributor/owner + extra fixes by @fabis94 in #4117
- gergo/previews by @gjedlicska in #3765
- Alessandro/web 2774 upgrade from free to paid plan by @alemagio in #4122
- Gergo/preview fixes by @gjedlicska in #4128
- fix(preview-service): timeout was already in milis by @gjedlicska in #4129
- fix(fe2): error state logger being undefined by @fabis94 in #4131
- chore: better viewer sourcemaps in datadog by @fabis94 in #4132
- feat(regions): trigger project move with job by @cdriesler in #4010
- feat: remove project discoverability concept from UI by @fabis94 in #4125
- chore: fix objectloader sourcemaps in datadog by @fabis94 in #4136
- feat(fe): Tutorials page by @andrewwallacespeckle in #4120
- Feat: Viewer (comments/embeds) improvements by @Mikehrn in #4133
- refactor(server): Update system emails by @andrewwallacespeckle in #4074
- refactor(fe): Update labels of Onboarding Plans to align with marketing site by @andrewwallacespeckle in #4138
- fix(fe) Temporarily revert email image changes by @andrewwallacespeckle in #4139
- chore(automate): include function id in automation creation funnel by @cdriesler in #4142
- fix(previews): logging and promise fixes by @gjedlicska in #4137
- Fix: Update connectors page by @Mikehrn in #4130
- feat(preview service): introduce /metrics endpoint for Prometheus by @iainsproat in #4127
- fix(fe): Re-add reverted email changes by @andrewwallacespeckle in #4148
- chore(gatekeeper): add missing helm values for new plans by @alemagio in #4134
- fix(fe): Updates to caching email images by @andrewwallacespeckle in #4153
- feat: removes docs link, adds usecases quickstart card by @didimitrie in #4149
- Fix: Various viewer UI styling improvements by @Mikehrn in #4145
- chore(gatekeeper): add default values for new plans by @alemagio in #4154
- fix(preview service): expose metrics port via helm chart by @iainsproat in #4150
- fix(server): prometheus summary should be over rolling window by @iainsproat in #4152
- fix(helm chart): fix typo in stripe env vars by @iainsproat in #4157
- refactor(fe): Cominbed onboarding middlewares by @andrewwallacespeckle in #4126
- fix: handling keys with null values in
@speckle/objectsender
by @ocni-dtu in #3846 - chore(object-loader): Centralized error checking based on Iain's PR by @AlexandruPopovici in #4159
- feat(server): upgrade workspace seat type by @fabis94 in #4158
- chore(objectloader): add more context to error when loading by @iainsproat in #4156
- Fix: useFetch for connectors by @Mikehrn in #4160
- Fix: Remove company conditional check in comment mentioning by @Mikehrn in #4163
- fix(preview service): attempt to prevent duplicate jobs by @iainsproat in #4155
- fix(sso): email capitalization again by @cdriesler in #4164
- feat(preview-service): add load and render duration calculation to preview service by @gjedlicska in #4162
- fix(fe): Improve email image support - use png instead of svg by @andrewwallacespeckle in #4168
- fix(preview service): remove need for speckle shared in frontend by @iainsproat in #4169
- fix(preview service): ensure variables are defined within puppeteer s… by @iainsproat in #4171
- fix(preview service): use correct units for metrics by @iainsproat in #4173
- fix(shared): ensureError should not bury original message by @iainsproat in #4170
- Ghosted Lines by @AlexandruPopovici in #4174
- Bump IFC nuget by @JR-Morgan in #4176
- Alessandro/web 2741 subscriptions to upgrade for new plan types by @alemagio in #4167
- Added extra info logs to file import service by @JR-Morgan in #4183
- Fix: Update connectors by @benjaminvo in #4182
- fix(pre-commit): issue with last PR merge by @iainsproat in #4184
- Feat: New navigation by @Mikehrn in #4179
- Fix: Max height for workspace list by @Mikehrn in #4186
- feat(workspaces): enable move project region by @cdriesler in #4135
- Chore(connectors): change url to legacy by @oguzhankoral in #4187
- feat(fe2): better viewer activity observability by @fabis94 in #4190
- feat(fe): Improve "Open billing portal" button logging by @andrewwallacespeckle in #4192
- feat(fe2): more viewer debugging improvements by @fabis94 in #4193
- feat(server): support editor -> viewer seat downgrades by @fabis94 in #4181
- fix(server): fix registration test email provider by @fabis94 in #4195
- fix(fe): show discounted monthly price when annual plan selected by @andrewwallacespeckle in #4196
- chore(fileimport service): port to typescript as-is by @iainsproat in #3962
- feat(fe): Improve UX around out of context comments by @andrewwallacespeckle in #4175
- fix(server): workspace seats & roles query invalid null handling by @fabis94 in #4199
- fix(fileimport): metrics call is async by @iainsproat in #4201
- Bump nuget + IFC Importer args by @JR-Morgan in #4200
- fix(fileimport-service): replace undici with fetch and add more logging by @iainsproat in #4188
- Region Displaying by @AlexandruPopovici in #4194
- fix(fileimport service): re-add undici for legacy ifc importer by @iainsproat in #4204
- chore(dockerfiles): bump curl version for debian images by @iainsproat in #4206
- Screen Space Outlines Update by @AlexandruPopovici in #4185
- fix(workspaces): make discoverable workspace dismiss sticky by @cdriesler in #4189
- Fix: Minor connectors page copy changes by @Mikehrn in #4210
- Feat: Various WorkspaceSwitcher improvements by @Mikehrn in #4209
- Fix: Remove wrong mutateActiveWorkspaceSlug call by @Mikehrn in #4211
- Fix: Decrease sidebar with in new layout by @Mikehrn in #4212
- refactor(fe): simplify planPlan to always use monthly price by @andrewwallacespeckle in #4198
- feat(fileimport service): allows nodejs inspection to be configured by @iainsproat in #4213
- fix(docker compose): preview service can be used when canonical url is localhost by @iainsproat in #4205
- Feat: Check for expired SSO in workspace switcher by @Mikehrn in #4215
- chore(server): get request context for log lines when sending emails by @iainsproat in #4217
- chore(fileimport service): pin image digest and bump nodejs version by @iainsproat in #4216
- fix(fileimport service): liveness probe in node 22 expects int not bool by @iainsproat in #4220
- chore(server): refactor seat updated to be its own event by @fabis94 in #4214
- fix(fileimport service): liveness probe should be quoted by @iainsproat in #4222
- Fix: Prewrap workspace description by @Mikehrn in #4223
- feat(regions): use queue for moves by @cdriesler in #4060
- feat: getting rid of defaultProjectRole setting by @fabis94 in #4221
- Feat: Add createdAt to workspace team WorkspaceCollaborator by @Mikehrn in #4227
- fix(workspaces): filter out dismissed join requests by @alemagio in #4229
- Feat: Move project collaborators to own tab by @Mikehrn in #4226
- Relative Parent Offset Fix by @AlexandruPopovici in #4233
- Feat: Increase limit for workspace team featching on workspace dashboard and table by @Mikehrn in #4234
- refactor(fe): workspace sidebar members section by @andrewwallacespeckle in #4231
- feat(authz): shared authz pipeline by @cdriesler in #4151
- Feat: New princing table for new plans by @Mikehrn in #4225
- Revert "feat(authz): shared authz pipeline" by @cdriesler in #4241
- auth/lib by @gjedlicska in #4242
- Fix: Link to webhooks tab by @Mikehrn in #4245
- Fix: Various pricing plan fixes by @Mikehrn in #4244
- fix(server): project access fix for discoverable projects by @gjedlicska in #4246
- Fix: Only send zapier webhook if feedback is provided by @Mikehrn in #4247
- feat(fe): Add pagination and search to Move Projects dialog by @andrewwallacespeckle in #4243
- refactor(fe): Improve accuracy of comment context warning by @andrewwallacespeckle in #4251
- refactor(fe):Update members/guests/invites/join requests settings pages by @andrewwallacespeckle in #4219
- fix: workspace projects infinite loading bug by @fabis94 in #4252
- feat(workspace): add limit to move projects dialog paginated query by @andrewwallacespeckle in #4254
- feat(workspaces): add filter by seatType in workspace team by @alemagio in #4248
- fix: debugging mocha works on node v22 by @fabis94 in #4240
- tests(shared/authz): by @gjedlicska in #4250
- chore(authz): hoist authorizeresolver by @cdriesler in #4253
- DataDog Error Fixes by @AlexandruPopovici in #4255
New Contributors
Full Changelog: 2.23.10...2.23.11