Commit Graph

81 Commits

Author SHA1 Message Date
Iain Sproat 920099c39f chore(readable code): use TIME_MS for readable durations
- we recently added TIME_MS helper; this applies it to existing durations
2025-04-18 17:51:43 +01:00
Kristaps Fabians Geikins 10832655d4 fix(server): all project created subs firing for workspace guests + req ctx cache fix for subs (#4453)
* WIP sub fix

* fix sub resolver caching issue
2025-04-16 11:21:17 +03:00
Gergő Jedlicska a3644a50c5 gergo/web 2931 introduce missing workspace plans (#4323)
* fix(gatekeeper): missing priceId-s should stop the server from booting

* feat(shared): add all new workspace plans

* feat(billing): add new world plans

* feat(ci): use stripe sandbox id-s from test env vars

* chore(ci): remove defunct stripe context

* chore(server-env): fix server env example

* feat(gatekeeper): add missing plans to graphql schema

* test(gatekeeper): update plan upgrade tests to match implementation

* fix(ci): update ci .env source

* fix(ci): we do need some secrets from stripe

* fix(ci): run gql schema introspect with the test env

* fix(frontend): format new plan names

* chore(ci): temp disable gql schema checks

* feat(helm): add unlimited seat prices env vars

* feat(helm): add unlimited seat prices to values

* feat(gatekeeper): do not load priceId-s as a side effect, load with module init
2025-04-07 15:24:57 +02:00
Kristaps Fabians Geikins a6a4ceee86 feat: true-myth result structures & other auth policy improvements (#4262)
* fixing up typing

* better dynamic loader mechanism

* buildReqLoaders cleanup

* added caching to loaders

* ensuring all loaders are async

* fe2 plugins error handling fix

* feat(shared): true-myth result structures & other auth policy improvements

* moving workspaceCore loaders to correct place
2025-03-25 17:49:02 +01:00
Iain Sproat 5655b3e758 fix(metrics): pass registry in to modules (#4113)
- ensure metrics are added to the correct registry
2025-03-06 08:37:05 +00:00
Kristaps Fabians Geikins 954b1a9f11 feat: plan prices accurately read from Stripe (#4104)
* WIP prices + new caching utils

* cached workspace plan prices

* GQL API done

* integrated in frontend

* fixed missing FF

* CR fixes

* integration tests

* removed non-existant team yearly env var
2025-03-05 12:23:38 +02:00
Iain Sproat 5e4a6c5635 fix(server/prometheus): ensure consistent Prometheus registry is used (#4106)
* fix(server/prometheus): ensure consistent Prometheus registry is used
- there was a conflicting dependency between Metrics initialization and Modules initialization; resolved by separating registry initialization from metrics initialization
- pass in the registry to prevent implicit dependency being broken
- when registering a metric, first attempt to remove any of existing metrics with same name to prevent errors
- to prevent sneaky uses of the implicit registry, replace default import with explicit import so it is clearer when prometheusClient.registry is used

* Add tests for registering metrics
2025-03-04 08:41:53 +00:00
Iain Sproat ce08e5e02d refactor(server): logging directory renamed to observability (#4077) 2025-02-28 08:43:54 +00:00
Iain Sproat 9d6e6304d4 fix(server/logging): some subscription errors should be logged at warning level (#4061) 2025-02-26 14:18:25 +00:00
Iain Sproat 3ef143375f refactor(middleware): tidying of inline middleware into function (#4047) 2025-02-24 11:03:40 +00:00
Kristaps Fabians Geikins 1d2a594f0a chore: upgrade TS 5.2 -> 5.7.3 & ESLint to 9.20.1 (#4032)
* chore: upgrade TS 5.2 -> 5.7.3

* vite dts fix

* lint fix

* resolutions fix

* ui comp build fix

* precommit fix?

* latest eslint version

* autoloader fix

* undo unnecessary viewer change

* eslint fixes fe2 + trying disabled type linting

* lint fixes
2025-02-20 14:18:18 +02:00
Iain Sproat 1c0b6e228d chore(server/middleware): allow CORS to be configurable (#4018)
- renames corsMiddleware to corsMiddlewareFactory to follow naming convention
- optionally allow cors middleware to be configured
- amend direct calls of `cors` package to now use middleware factory
2025-02-18 13:50:34 +00:00
Iain Sproat 5256d83fab refactor(server/middleware): compression enabled logic in separate module (#4006)
- the logic to enable compression is via env helper
- tidies app.ts by moving logic to separate file
2025-02-18 13:32:10 +00:00
Iain Sproat ec98f8d4cb chore(fe1): remove deprecated frontend (#3998)
---------

Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
2025-02-18 12:36:52 +00:00
Iain Sproat 92976ecee1 refactor(server/metrics): register metrics route in Metrics module (#4007)
- tidy app.ts by moving route registration to responsible module
2025-02-18 10:01:50 +01:00
Iain Sproat abe165e264 fix(server): improve logging of errors thrown by Express body parsing middleware (#3971) 2025-02-18 08:54:47 +00:00
Iain Sproat ee54a461a2 fix(server/app): error handling of metrics renamed & relocated in middleware stack (#4001) 2025-02-17 14:19:11 +00:00
Iain Sproat 4ee278393b fix(server/logging): healthcheck logs should be warn (#3917)
- they are routinely triggered, so should not be error level
2025-01-30 18:22:19 +01:00
Iain Sproat c59e6043bb fix(server/errors): derive errors from BaseError (#3918) 2025-01-30 18:15:56 +01:00
Iain Sproat 71b82f2cb2 fix(server/rate limiting): Rate limit by IP or token ID (#3879) 2025-01-23 16:08:23 +00:00
Kristaps Fabians Geikins b6ba4c61f7 feat(server): req context for subscription connections too (#3852)
* feat(server): req context for subscription connections too

* minor adjustment
2025-01-20 20:29:14 +01:00
Kristaps Fabians Geikins 2e8863eb64 fix(server): dataloader batching being broken (#3838)
* fix(server): dataloader batching being broken

* feat(server): optimized stream collaborator retrieval

* test fix
2025-01-17 12:41:58 +02:00
Kristaps Fabians Geikins dfed4ae5c1 feat(server): get request ctx from anywhere + log it w/ db operations (#3823) 2025-01-15 12:08:51 +02:00
Gergő Jedlicska b98160f037 feat(server): log subscription started messages with info (#3795) 2025-01-10 13:27:24 +01:00
Iain Sproat 8cadddf923 fix(metrics): speckle_server_apollo_calls built with correct register (#3780) 2025-01-08 19:54:58 +01:00
Iain Sproat 663ee0b5a9 fix(server): app initialization starts metrics after multiregion (#3697) 2024-12-16 10:40:27 +00:00
Iain Sproat 8197bb74a3 feat(multi-region): metrics for knex for all regional databases (#3580)
* feat(multi-region): metrics for knex for all regional databases

* improve typing in knex monitoring

* error logging around migrations

* await async calls for db connections
- add 'region' label

* add missing 'await' statements

* more missing 'await'

* guard against re-adding listeners

* It was possible for update to be called before initialize
- this change collapses both into initialize, and adds checks to ensure initialization is done before being updated for new regions

* separate back into non-exported const and rename

* align with main

* Amend order at which metrics is enabled
2024-12-12 11:03:25 +01:00
Iain Sproat 27a0600dcd feat(server): multi-region aware liveness and readiness checks (#3468)
* chore(healthchecks): refactor out of modules
* feat(server): multi-region aware liveness and readiness checks
* Add tests for redis & postgres healthchecks
* do not close Redis client after checking it is healthy, we now use a shared client
2024-12-11 09:29:53 +00:00
Gergő Jedlicska 62863a8523 feat(server): allow using frontend proxy in fe2 mode too (#3658) 2024-12-09 13:54:50 +01:00
Iain Sproat bde5431022 feat(logging): improve error handling around db migrations (#3599) 2024-12-02 17:23:47 +00:00
Kristaps Fabians Geikins 1800dbbdbd feat(server): improved subscription testing DX + tests for common subs + new subs (#3554)
* userProjectsUpdated.added test

* multi region support

* userStreamAdded

* commit subs tested

* fix for proj workspace assignment

* undo commitHelper main changes

* disable all ffs mode

* createTestWorkspace support when workspaces arent enabled

* project create fix

* workspace projects updated subscription

* WIP new workspace sub

* updated workspaceCreated

* updated workspaceUpdated

* BE for workspace updated sub

* workspace updated sub

* ts err fix
2024-11-27 15:41:04 +02:00
Gergő Jedlicska 01b222ced8 gergo/web 2155 gendo module multi region (#3528)
* fix(workspaces): allow workspace delete for paid workspaces

* feat(gendo): multi region gendo with new api integration and limits

* feat(gendo): user credits

* feat: adds limits to gendo panel, and terms and conditions link

* fix: reworks setting back camera view

* feat(gendo): webhook signature verification

* fix(gendo): nullability

* test(blobstorage): fix test dependency injection

---------

Co-authored-by: Dimitrie Stefanescu <didimitrie@gmail.com>
2024-11-22 16:43:31 +01:00
Iain Sproat 2a7c51f3df Revert "feat(multi-region): metrics for knex for all regional databases (#3508)" (#3534)
This reverts commit f51eb91861.
2024-11-21 11:14:04 +00:00
Iain Sproat f51eb91861 feat(multi-region): metrics for knex for all regional databases (#3508)
* feat(multi-region): metrics for knex for all regional databases

* improve typing in knex monitoring

* error logging around migrations
2024-11-21 12:11:56 +01:00
Iain Sproat a1ee8a89a7 chore(server): graceful shutdown (#3125)
* chore(server): graceful shutdown
- stop() on the apollo server should be called

* chore(server): gracefully drain apollo server

* Allow grace period to be configured

* Terminus manages the readiness and liveness endpoints

* terminus is responsible for stopping the graphql server

* remove logging on shutdown

* Remove redundant parameter

* move healthchecks out of business modules to top-level directory
- terminus can only handle readiness check, not liveness
- app needs to return readiness handler, so that server terminus can use it

* fix tests

* Fix broken merge

* fix broken merge

* incorporate review comments

* fix invalid merge

* fix readinesscheck not being passed as parameter
2024-11-19 11:08:38 +01:00
Iain Sproat de4235a9d0 chore(healthchecks): refactor out of modules (#3465) 2024-11-08 13:36:02 +00:00
Iain Sproat 0ec4a87c7c fix(file import): server port was broken when localhost was canonical url (#3360)
* fix(file import): server port was broken when localhost was canonical url
- use getServerOrigin() instead of directly calling process.env.CANONICAL_URL
- where server is calling itself, use 127.0.0.1 instead of CANONICAL_URL.
- where server is calling itself (i.e. 127.0.0.1, use the server's listening port and not default for protocol http/80, https/443
- tidy some areas where process.env was called directly; should use envHelper.

* fix tests
2024-10-22 21:12:18 +02:00
Gergő Jedlicska 8cba7eb6f7 gergo/web 1968 add features list (#3332)
* feat(gatekeeper): add gatekeeper module feature flag

* feat(gatekeeper): add workspace pricing table domain

* feat(gatekeeper): add checkout session creation

* feat(gatekeeper): verify stripe signature

* wip(gatekeeper): checkout callbacks

* feat(gatekeeper): add unlimited and academia plan types

* refactor(envHelper): getStringFromEnv helper

* chore(gatekeeper): add future todos

* feat(gatekeeper): add productId to the subscription domain

* feat(gatekeeper): add in memory repositories

* feat(gatekeeper): add more errors

* feat(gatekeeper): complete checkout session service

* feat(gatekeeper): add stripe client implementation

* feat(gatekeeper): add checkout session completion webhook callback path

* feat(gendo): fix not needing env vars if gendo module is not enabled

* feat(gatekeeper): require a license for billing

* chore(gatekeeper): cleanup before testing

* feat(gatekeeper): subscriptionData parsing model

* ci: add billing integration and gatekeeper modules to test config

* test(gatekeeper): add checkout service tests

* feat(gatekeeper): make completeCheckout callback idempotent properly

* feat(gatekeeper): move to knex based repositories

* test(gatekeeper): billing repository tests

* feat(gatekeeper): add yearly billing cycle toggle

* feat(ci): add stripe integration context to test job

* feat(billingPage): conditionally render the checkout CTAs

* fix(gatekeeper): remove flaky test condition

* feat(helm): add billing integration feature flag
2024-10-20 15:40:31 +02:00
Kristaps Fabians Geikins 1cb27e6fdd chore(server): core IoC #51 - getUser(s)Factory 2024-10-14 17:24:11 +03:00
Kristaps Fabians Geikins 1c07c76106 chore(server): shared IoC 4 - middleware cleanup (#3119) 2024-09-26 12:17:19 +03:00
Iain Sproat 076622bb60 fix(logging): graphql errors are logged at the appropriate level (#3114) 2024-09-25 13:07:07 +01:00
Gergő Jedlicska 73130767af chore(app): disable frontend proxy for fe2 (#3113) 2024-09-25 14:04:28 +02:00
Iain Sproat 3c9d9f8e3c chore(server): log graphql websocket connection, disconnection, and subscription events (#2690) 2024-09-06 12:17:46 +01:00
Kristaps Fabians Geikins c92938eff3 chore(server): apollo server v3 -> v4 (#2880)
* main changes seem to be done?

* lint fix

* minor cleanup

* dataloader clear
2024-09-05 12:27:13 +03:00
Iain Sproat 26b0ecb55d chore(server): remove sentry and only apply mixpanel middleware if enabled (#2732)
- remove sentry as we are no longer using it
- only enable mixpanel middleware if mixpanel is enabled
2024-08-23 16:56:54 +01:00
Iain Sproat 93b970dc07 fix(graphql websocket): keep alive websocket connections if idle (#2720)
- if no data is being sent on a websocket connection then it was closed by nginx after 60s
- it is assumed to be better to keep alive the connection than have the overhead of closing and re-establishing the connection every 60s
2024-08-21 14:54:00 +02:00
Iain Sproat eefeef1ee4 feat(server): adds content-security-policy header to server endpoints (#2500) 2024-07-25 14:20:23 +01:00
Alessandro Magionami 447b48a6c2 chore(server): remove relative imports 2024-07-18 16:07:16 +02:00
Kristaps Fabians Geikins 7d79c056db fix(server): 401, 403, 429 & 500 status codes for GQL error responses (#2463) 2024-07-02 16:54:25 +03:00
Kristaps Fabians Geikins 83d8035dc2 chore: upgrade to eslint 9 (#2348)
* root + server

* frontend

* frontend-2

* dui3

* dui3

* tailwind theme

* ui-components

* preview service

* viewer

* viewer-sandbox

* fileimport-service

* webhook service

* objectloader

* shared

* ui-components-nuxt

* WIP full config

* WIP full linter

* eslint projectwide util

* minor fix

* removing redundant ci

* clean up test errors

* fixed prettier formatting

* CI improvements

* TSC lint fix

* 'buildBatch' needs to be async since some batch types (like Text) require it. Removed a disabled liniting rule from ObjLoader

* removed unnecessary void

---------

Co-authored-by: AlexandruPopovici <alexandrupopoviciioan@gmail.com>
2024-06-12 14:38:02 +03:00