Commit Graph

55 Commits

Author SHA1 Message Date
Daniel Gak Anagrov 06e19fbd50 feat(gatekeeper): add updatedAt field to workspace plans (#4786)
* feat(gatekeeper): add updatedAt field to workspace plans

* fix: lint error

* fix: added updatedAt test

* fix: shared test
2025-05-26 11:35:53 +02:00
Iain Sproat 853aa6f1e9 Merge pull request #4626 from specklesystems/iain/web-3198-payment-failed-leads-to-404-on-missing-subscription
fix(server/billing): better handle incomplete checkout
2025-05-19 18:07:57 +01:00
Kristaps Fabians Geikins 211922b6a6 chore: get rid of all old workspace plan code (#4624)
* first batch of changes

* tests fix

* FE fixed

* renaming constants

* test fixes

* moar test fixes

* another test fix

* reenable app rover check

---------

Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
2025-04-30 19:18:32 +02:00
Iain Sproat 7edaa2944b tests 2025-04-29 12:43:17 +01:00
Gergő Jedlicska c33052e697 fix(gatekeeper): accept workspace project invite fixes (#4426)
* fix(gatekeeper): accept workspace project invite fixes

* chore(gatekeeper): remove old subscription event handler
2025-04-17 05:21:23 +01:00
Gergő Jedlicska 61ca128ce2 gergo/multiCurrency (#4379)
* feat(gatekeeper): support multiple currencies

* feat(helm): add new currency based prices to helm chart

* chore(env): add example currency based pricing values

* fix(ci): update price ids to the proper values

* feat(helm): rename price ids to fit multi currency

* feat(gatekeeper): currency input for checkout session

* Updated prices in the FE

* chore(gatekeeper): remove old checkout session flow

* Updated prices in the FE

* Fix FE

* Fix pipeline

---------

Co-authored-by: Mike Tasset <mike.tasset@gmail.com>
2025-04-11 17:37:47 +02:00
Gergő Jedlicska 5fce827ad7 feat(gatekeeper): calculate available seats from purchased and used (#4362) 2025-04-09 19:51:02 +02: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
Gergő Jedlicska f501cc4ad5 gergo/web 2888 workspace project cancreate (#4294)
* WIP can create project

* WIP can create project more work

* complete body, stencil tests

* feat(shared): move workspace plan types into shared

* test progress wip

* feat(shared): add more logic to canCreateWorkspaceProject

* a few more tests, as a treat

* chore(authz): round out tests

* fixed loaders, new GQL checks, dataLoaders in auth loaders

* fix(authz): get workspace limits loader

* chore(authz): update loaders

* frontend fixed up to snuff

* fix(authz): fix workspace plans for tests

* fix(authz): classic

* fix(authz): 0 counts

---------

Co-authored-by: Chuck Driesler <chuck@speckle.systems>
Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
2025-04-01 16:38:20 +01:00
Alessandro Magionami 3102a75d3b Merge branch 'main' of github.com:specklesystems/speckle-server into alessandro/web-2867-expose-used-and-available-seats 2025-03-26 09:21:12 +01:00
Alessandro Magionami ddae24eedf chore(workspaces): add test and make product selection more robust 2025-03-25 17:40:09 +01:00
Alessandro Magionami cd39e18d9b chore(workspaces): fix linter 2025-03-24 15:31:02 +01:00
Alessandro Magionami 194a1fe607 feat(gatekeeper): downscale new plans 2025-03-20 16:29:32 +01:00
Kristaps Fabians Geikins b55e197d00 chore(server): refactor seat updated to be its own event (#4214)
* chore(server): refactor seat updated to be its own event

* minor cleanup

* test fix
2025-03-19 12:17:27 +02:00
Alessandro Magionami ab9ea4406e chore(gatekeeper): fix tests 2025-03-13 11:00:59 +01:00
Alessandro Magionami 89519bc6b7 Merge branch 'main' of github.com:specklesystems/speckle-server into alessandro/web-2741-subscriptions-to-upgrade-for-new-plan-types 2025-03-12 10:01:02 +01:00
Alessandro Magionami 39d133d46b chore(gatekeeper): test new upgrade plan flow 2025-03-11 17:54:26 +01:00
Kristaps Fabians Geikins 28b49107b7 feat(server): upgrade workspace seat type (#4158)
* feat(server): upgrade workspace seat type

* test/lint fixes
2025-03-11 12:41:18 +02:00
Alessandro Magionami 1eb7331733 chore(gatekeeper): fix test 2025-03-07 16:38:36 +01:00
Alessandro Magionami 2e0d2f0dbb chore(gatekeeper): fix another 2025-03-06 15:00:05 +01:00
Alessandro Magionami fd99914c8e chore(gatekeeper): fix another test type 2025-03-06 11:26:41 +01:00
Alessandro Magionami 66ddb1eb34 Merge branch 'main' of github.com:specklesystems/speckle-server into alessandro/web-2774-upgrade-from-free-to-paid-plan 2025-03-05 19:29:44 +01:00
Alessandro Magionami bcdb5ed0b0 feat(gatekeeper): new checkout flow 2025-03-05 17:35:28 +01: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 47556d68c7 chore(server/scheduled tasks): should log task name and unique task Id (#4094) 2025-03-03 15:12:11 +00:00
Iain Sproat ce08e5e02d refactor(server): logging directory renamed to observability (#4077) 2025-02-28 08:43:54 +00:00
Kristaps Fabians Geikins ec092fb042 chore: move common workspace plan/feature config to @speckle/shared (#4064)
fix: gqlgen regenerated
2025-02-27 11:18:30 +02:00
Kristaps Fabians Geikins eb050bb649 feat(server): new plans + disabled checkout/upgrade/sidegrade (#4057)
* feat(server): new plans + disabled checkout/upgrade/sidegrade

* pushed in CR fixes
2025-02-25 09:46:46 +01: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
Gergő Jedlicska bf80347abf gergo/web 2664 workspace backend powered metrics (#3985)
* feat(workspaces): delete workspace emit event

* feat(workspaces): move workspace group metrics to the backend

* Removed FE mixpanel group update

* Remove fragment

* test(gatekeeper): add unittest to new gatekeeper service

---------

Co-authored-by: Mike Tasset <mike.tasset@gmail.com>
2025-02-17 09:50:16 +01:00
Alessandro Magionami 11beefeada feat(gatekeeper): readOnly validation logic 2024-12-16 10:17:16 +01:00
Alessandro Magionami 15bc6738ba chore(billing): fix test 2024-12-12 15:29:27 +01:00
Alessandro Magionami b08f25dffa feat(workspaces): add readOnly logic for workspace 2024-12-09 14:31:59 +01:00
Mike 8f4593e606 Feat: Workspace creation wizard (#3625) 2024-12-04 14:19:52 +01:00
Mike b2cebea7eb Fix: Various billing fixes (#3569) 2024-11-28 20:24:05 +01:00
Gergő Jedlicska ec02e63707 feat(gatekeeper): upgrade workspace plan (#3572) 2024-11-28 11:15:32 +01:00
Gergő Jedlicska f381dc3d9d gergo/workspaceDefaultPlan (#3561)
* feat(gatekeeper): create workspaces with trial plan by default

* feat(gatekeeper): default to starter trial plan

* fix(eventBus): fix tests
2024-11-27 09:51:32 +01:00
Gergő Jedlicska 83a991bfac feat(gatekeeper): rename workspace plans (#3533)
* feat(gatekeeper): rename workspace plans

* Updated plans in FE

* feat(gatekeeper): stripe redirect to workspace dashboard

* test(gatekeeper): fix tests

---------

Co-authored-by: Mike Tasset <mike.tasset@gmail.com>
2024-11-22 05:50:16 +01:00
Gergő Jedlicska f210d9b749 gergo/web 2109 project region based db connection selector (#3434)
* feat(projects): add project regions, default to null

* feat(multiregion): add projectRegion Db client lookup logic

* feat(multiregion): add project region repositories and caching

* feat(multiRegion): db initialization and get project db client

* feat(docker-compose): add second db for regions testing

* feat(multiRegion): initialize region with pubs and subs working

* fix(multiRegion): get region client even if it was registered in another pod

* feat(workspaces): create workspace resolver split

* feat: update server region metadata

* feat(projects): rewrite project creation

* feat(multiRegion): getRegionDb

* fix(workspaces): get projects now can retur null

* feat(multiRegion): make local multi region DB-s work

* feat: set d efault workspace region

* CR changes

* tests

* feat(multiRegion): bind region properly

* fe update

* test fixes

* feat(multiRegion): automatically create aiven extras plugin

* ci(postgres): use published postgres with aiven extras

* fix(multiRegion): roll back the aiven extras migration, there is a better way

* tests fix

* fix(billing): we do not need to add a seat, if the workspace is on a plan, but has no sub

---------

Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
2024-11-06 17:29:08 +01:00
Gergő Jedlicska 3352fc4327 Merge branch 'main' of github.com:specklesystems/speckle-server into gergo/gatekeeperFunctions 2024-11-05 06:44:03 +01:00
Gergő Jedlicska ee514dc7b9 test: fix flaky tests (#3422) 2024-10-31 09:04:49 +01:00
Gergő Jedlicska da7f0dda0e gergo/web 2047 user joins the workspace event (#3412)
* 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

* WIP billing gql api

* feat(gatekeeper): cancel checkout session api

* feat(gatekeeper): handle existing checkout sessions, when trying to create a new one

* feat(gatekeeper): add workspace plans gql api

* feat(gatekeeper): handle cancelation and subscription updates

* fix(gatekeeper): scope initialization

* fix(gatekeeper): eliminate stripe client import sideeffect

* fix(gatekeeper): eliminate stripe client import sideeffect 2

* feat(gatekeeper): upsize subscription on workspace role change

* feat(shared): add command pattern implementation

* refactor(eventBus): remove return capabilities from the event bus

* refactor(workspaces): use new commandFactory in workspace resolver

* feat(core): facelift taskLock

* feat(gatekeeper): shedule subscription downscale

* feat(gatekeeper): manage subscription downscale

* feat(gatekeeper): get workspace subscriptions, that are about to expire

* feat(gatekeeper): manage subscription downscale

* fix(gatekeeper): do not update subscription to canceled subs

* ci: bump postgres and max connections

* feat(workspaces): fix command factory event bugs
2024-10-30 15:51:40 +01:00
Gergő Jedlicska 8e239ec744 feat(gatekeeper): feature access functions 2024-10-30 09:00:00 +01:00
Gergő Jedlicska edc70b76bc fix(gatekeeper): do not update subscription to canceled subs 2024-10-29 20:44:13 +01:00
Gergő Jedlicska 81c20dbdf3 feat(gatekeeper): manage subscription downscale 2024-10-29 20:17:19 +01:00
Gergő Jedlicska 796b1c23ed feat(gatekeeper): get workspace subscriptions, that are about to expire 2024-10-29 17:44:43 +01:00
Gergő Jedlicska c0808e5577 feat(gatekeeper): manage subscription downscale 2024-10-29 16:52:00 +01:00
Gergő Jedlicska af3857a209 gergo/web 2038 billing graphql api (#3379)
* 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

* WIP billing gql api

* feat(gatekeeper): cancel checkout session api

* feat(gatekeeper): handle existing checkout sessions, when trying to create a new one

* feat(gatekeeper): add workspace plans gql api

* feat(gatekeeper): handle cancelation and subscription updates

* fix(gatekeeper): scope initialization

* fix(gatekeeper): eliminate stripe client import sideeffect

* fix(gatekeeper): eliminate stripe client import sideeffect 2

* fix(mainConstants): fitler gatekeeper scopes with feature flag
2024-10-25 10:46:09 +02:00
Gergő Jedlicska 81b923cf67 feat(gatekeeper): upsize subscription on workspace role change 2024-10-24 10:03:08 +02:00
Gergő Jedlicska 50fff10acd feat(gatekeeper): handle cancelation and subscription updates 2024-10-22 23:17:22 +02:00