feat: remove stripe dep (#5508)

* remove automatic_billing

* fix build

* fix build

* update ee ref

* Update frontend/src/lib/components/settings/PremiumInfo.svelte

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
This commit is contained in:
HugoCasa
2025-03-26 18:38:47 +01:00
committed by GitHub
co-authored by ellipsis-dev[bot]
parent 53298d5fb6
commit ee4887a303
17 changed files with 133 additions and 517 deletions
@@ -100,51 +100,46 @@
},
{
"ordinal": 19,
"name": "automatic_billing",
"type_info": "Bool"
},
{
"ordinal": 20,
"name": "default_scripts",
"type_info": "Jsonb"
},
{
"ordinal": 21,
"ordinal": 20,
"name": "deploy_ui",
"type_info": "Jsonb"
},
{
"ordinal": 22,
"ordinal": 21,
"name": "mute_critical_alerts",
"type_info": "Bool"
},
{
"ordinal": 23,
"ordinal": 22,
"name": "color",
"type_info": "Varchar"
},
{
"ordinal": 24,
"ordinal": 23,
"name": "operator_settings",
"type_info": "Jsonb"
},
{
"ordinal": 25,
"ordinal": 24,
"name": "teams_command_script",
"type_info": "Text"
},
{
"ordinal": 26,
"ordinal": 25,
"name": "teams_team_id",
"type_info": "Text"
},
{
"ordinal": 27,
"ordinal": 26,
"name": "teams_team_name",
"type_info": "Text"
},
{
"ordinal": 28,
"ordinal": 27,
"name": "git_app_installations",
"type_info": "Jsonb"
}
@@ -174,7 +169,6 @@
true,
true,
true,
false,
true,
true,
true,
@@ -1,14 +0,0 @@
{
"db_name": "PostgreSQL",
"query": "UPDATE workspace_settings SET automatic_billing = false WHERE workspace_id = $1",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text"
]
},
"nullable": []
},
"hash": "1e659916501e668913e591eb7282d3881fa44468ed5330a501daa0d61c84cb71"
}
@@ -1,14 +0,0 @@
{
"db_name": "PostgreSQL",
"query": "UPDATE workspace_settings SET automatic_billing = TRUE WHERE workspace_id = $1",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text"
]
},
"nullable": []
},
"hash": "2d4d4564108376ab310cb4a50fa2fa84fefbb3df8bb1bc9996c40a86d464b8a1"
}
@@ -1,6 +1,6 @@
{
"db_name": "PostgreSQL",
"query": "SELECT owner, premium, usage.usage as \"usage?\", workspace_settings.customer_id, workspace_settings.plan, workspace_settings.automatic_billing FROM workspace LEFT JOIN workspace_settings ON workspace_settings.workspace_id = $1 LEFT JOIN usage ON usage.id = $1 AND month_ = EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date) AND usage.is_workspace IS true WHERE workspace.id = $1",
"query": "SELECT owner, premium, usage.usage as \"usage?\", workspace_settings.customer_id, workspace_settings.plan FROM workspace LEFT JOIN workspace_settings ON workspace_settings.workspace_id = $1 LEFT JOIN usage ON usage.id = $1 AND month_ = EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date) AND usage.is_workspace IS true WHERE workspace.id = $1",
"describe": {
"columns": [
{
@@ -27,11 +27,6 @@
"ordinal": 4,
"name": "plan",
"type_info": "Varchar"
},
{
"ordinal": 5,
"name": "automatic_billing",
"type_info": "Bool"
}
],
"parameters": {
@@ -44,9 +39,8 @@
false,
false,
true,
true,
false
true
]
},
"hash": "f8f893fb4f6f8c16bffb233a585df0b8c007c24993979fdc013aa57583905f50"
"hash": "4b8132b04e454eddfe6724c6cc3a2e60c9c24decb2a6b41125247bbf741e9c25"
}
@@ -100,51 +100,46 @@
},
{
"ordinal": 19,
"name": "automatic_billing",
"type_info": "Bool"
},
{
"ordinal": 20,
"name": "default_scripts",
"type_info": "Jsonb"
},
{
"ordinal": 21,
"ordinal": 20,
"name": "deploy_ui",
"type_info": "Jsonb"
},
{
"ordinal": 22,
"ordinal": 21,
"name": "mute_critical_alerts",
"type_info": "Bool"
},
{
"ordinal": 23,
"ordinal": 22,
"name": "color",
"type_info": "Varchar"
},
{
"ordinal": 24,
"ordinal": 23,
"name": "operator_settings",
"type_info": "Jsonb"
},
{
"ordinal": 25,
"ordinal": 24,
"name": "teams_command_script",
"type_info": "Text"
},
{
"ordinal": 26,
"ordinal": 25,
"name": "teams_team_id",
"type_info": "Text"
},
{
"ordinal": 27,
"ordinal": 26,
"name": "teams_team_name",
"type_info": "Text"
},
{
"ordinal": 28,
"ordinal": 27,
"name": "git_app_installations",
"type_info": "Jsonb"
}
@@ -174,7 +169,6 @@
true,
true,
true,
false,
true,
true,
true,
@@ -1,6 +1,6 @@
{
"db_name": "PostgreSQL",
"query": "SELECT workspace_id, slack_team_id, teams_team_id, teams_team_name, slack_name, slack_command_script, teams_command_script, slack_email, auto_invite_domain, auto_invite_operator, auto_add, customer_id, plan, webhook, deploy_to, ai_config, error_handler, error_handler_extra_args, error_handler_muted_on_cancel, large_file_storage, git_sync, deploy_ui, default_app, automatic_billing, default_scripts, mute_critical_alerts, color, operator_settings, git_app_installations FROM workspace_settings WHERE workspace_id = $1",
"query": "SELECT workspace_id, slack_team_id, teams_team_id, teams_team_name, slack_name, slack_command_script, teams_command_script, slack_email, auto_invite_domain, auto_invite_operator, auto_add, customer_id, plan, webhook, deploy_to, ai_config, error_handler, error_handler_extra_args, error_handler_muted_on_cancel, large_file_storage, git_sync, deploy_ui, default_app, default_scripts, mute_critical_alerts, color, operator_settings, git_app_installations FROM workspace_settings WHERE workspace_id = $1",
"describe": {
"columns": [
{
@@ -120,31 +120,26 @@
},
{
"ordinal": 23,
"name": "automatic_billing",
"type_info": "Bool"
},
{
"ordinal": 24,
"name": "default_scripts",
"type_info": "Jsonb"
},
{
"ordinal": 25,
"ordinal": 24,
"name": "mute_critical_alerts",
"type_info": "Bool"
},
{
"ordinal": 26,
"ordinal": 25,
"name": "color",
"type_info": "Varchar"
},
{
"ordinal": 27,
"ordinal": 26,
"name": "operator_settings",
"type_info": "Jsonb"
},
{
"ordinal": 28,
"ordinal": 27,
"name": "git_app_installations",
"type_info": "Jsonb"
}
@@ -178,7 +173,6 @@
true,
true,
true,
false,
true,
true,
true,
@@ -186,5 +180,5 @@
false
]
},
"hash": "096ebf082d5e48b75ea7b9b6790ab25ecb4448717d6baf0d4b8b0a070eac47ff"
"hash": "71a040866adbd192080da165eb120abf7531b2542a2da225152e19144400f950"
}
+41 -250
View File
@@ -554,17 +554,6 @@ dependencies = [
"syn 2.0.100",
]
[[package]]
name = "async-channel"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
dependencies = [
"concurrent-queue",
"event-listener 2.5.3",
"futures-core",
]
[[package]]
name = "async-compression"
version = "0.4.19"
@@ -678,31 +667,6 @@ dependencies = [
"syn 2.0.100",
]
[[package]]
name = "async-stripe"
version = "0.39.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58d670cf4d47a1b8ffef54286a5625382e360a34ee76902fd93ad8c7032a0c30"
dependencies = [
"chrono",
"futures-util",
"hex",
"hmac",
"http-types",
"hyper 0.14.32",
"hyper-tls 0.5.0",
"serde",
"serde_json",
"serde_path_to_error",
"serde_qs 0.10.1",
"sha2 0.10.8",
"smart-default",
"smol_str",
"thiserror 1.0.69",
"tokio",
"uuid 0.8.2",
]
[[package]]
name = "async-trait"
version = "0.1.88"
@@ -723,7 +687,7 @@ dependencies = [
"async-compression",
"chrono",
"crc32fast",
"futures-lite 2.6.0",
"futures-lite",
"pin-project",
"thiserror 1.0.69",
"tokio",
@@ -783,7 +747,7 @@ dependencies = [
"aws-smithy-types",
"aws-types",
"bytes",
"fastrand 2.3.0",
"fastrand",
"hex",
"http 1.3.1",
"ring 0.17.14",
@@ -844,14 +808,14 @@ dependencies = [
"aws-smithy-types",
"aws-types",
"bytes",
"fastrand 2.3.0",
"fastrand",
"http 0.2.12",
"http-body 0.4.6",
"once_cell",
"percent-encoding",
"pin-project-lite",
"tracing",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -1057,7 +1021,7 @@ dependencies = [
"aws-smithy-runtime-api",
"aws-smithy-types",
"bytes",
"fastrand 2.3.0",
"fastrand",
"http 0.2.12",
"http 1.3.1",
"http-body 0.4.6",
@@ -1203,7 +1167,7 @@ version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "970d91570c01a8a5959b36ad7dd1c30642df24b6b3068710066f6809f7033bb7"
dependencies = [
"fastrand 2.3.0",
"fastrand",
"gloo-timers",
"tokio",
]
@@ -2657,7 +2621,7 @@ dependencies = [
"tokio",
"tokio-util",
"url",
"uuid 1.16.0",
"uuid",
"xz2",
"zstd",
]
@@ -2757,7 +2721,7 @@ dependencies = [
"regex",
"sha2 0.10.8",
"unicode-segmentation",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -2924,7 +2888,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d"
dependencies = [
"serde",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -2980,7 +2944,7 @@ dependencies = [
"deno_error",
"thiserror 2.0.12",
"tokio",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -3175,7 +3139,7 @@ dependencies = [
"spki",
"thiserror 2.0.12",
"tokio",
"uuid 1.16.0",
"uuid",
"x25519-dalek",
]
@@ -3350,7 +3314,7 @@ dependencies = [
"pin-project",
"rand 0.8.5",
"tokio",
"uuid 1.16.0",
"uuid",
"winapi",
"windows-sys 0.59.0",
]
@@ -3797,7 +3761,7 @@ dependencies = [
"tokio",
"tokio-metrics",
"twox-hash 1.6.3",
"uuid 1.16.0",
"uuid",
"which 6.0.3",
"winapi",
"windows-sys 0.59.0",
@@ -3917,7 +3881,7 @@ dependencies = [
"serde",
"thiserror 2.0.12",
"tokio",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -4006,7 +3970,7 @@ dependencies = [
"num-bigint",
"prost",
"serde",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -4032,7 +3996,7 @@ dependencies = [
"tokio",
"tokio-util",
"url",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -4056,7 +4020,7 @@ dependencies = [
"thiserror 2.0.12",
"tokio",
"tokio-stream",
"uuid 1.16.0",
"uuid",
"v8_valueserializer",
]
@@ -4623,12 +4587,6 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "event-listener"
version = "2.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
[[package]]
name = "event-listener"
version = "5.4.0"
@@ -4684,15 +4642,6 @@ dependencies = [
"serde",
]
[[package]]
name = "fastrand"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
dependencies = [
"instant",
]
[[package]]
name = "fastrand"
version = "2.3.0"
@@ -5017,28 +4966,13 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-lite"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
dependencies = [
"fastrand 1.9.0",
"futures-core",
"futures-io",
"memchr",
"parking",
"pin-project-lite",
"waker-fn",
]
[[package]]
name = "futures-lite"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
dependencies = [
"fastrand 2.3.0",
"fastrand",
"futures-core",
"futures-io",
"parking",
@@ -5272,17 +5206,6 @@ dependencies = [
"unicode-width 0.1.14",
]
[[package]]
name = "getrandom"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
dependencies = [
"cfg-if",
"libc",
"wasi 0.9.0+wasi-snapshot-preview1",
]
[[package]]
name = "getrandom"
version = "0.2.15"
@@ -5835,27 +5758,6 @@ dependencies = [
"pin-project-lite",
]
[[package]]
name = "http-types"
version = "2.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad"
dependencies = [
"anyhow",
"async-channel",
"base64 0.13.1",
"futures-lite 1.13.0",
"http 0.2.12",
"infer",
"pin-project-lite",
"rand 0.7.3",
"serde",
"serde_json",
"serde_qs 0.8.5",
"serde_urlencoded",
"url",
]
[[package]]
name = "httparse"
version = "1.10.1"
@@ -6300,12 +6202,6 @@ dependencies = [
"web-time",
]
[[package]]
name = "infer"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac"
[[package]]
name = "inotify"
version = "0.9.6"
@@ -7322,7 +7218,7 @@ dependencies = [
"smallvec",
"tagptr",
"thiserror 1.0.69",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -7459,7 +7355,7 @@ dependencies = [
"sha2 0.10.8",
"subprocess",
"thiserror 1.0.69",
"uuid 1.16.0",
"uuid",
"zstd",
]
@@ -8858,7 +8754,7 @@ dependencies = [
"postgres-protocol 0.6.8",
"serde",
"serde_json",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -9285,19 +9181,6 @@ dependencies = [
"nibble_vec",
]
[[package]]
name = "rand"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
dependencies = [
"getrandom 0.1.16",
"libc",
"rand_chacha 0.2.2",
"rand_core 0.5.1",
"rand_hc",
]
[[package]]
name = "rand"
version = "0.8.5"
@@ -9320,16 +9203,6 @@ dependencies = [
"zerocopy 0.8.23",
]
[[package]]
name = "rand_chacha"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
dependencies = [
"ppv-lite86",
"rand_core 0.5.1",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
@@ -9350,15 +9223,6 @@ dependencies = [
"rand_core 0.9.3",
]
[[package]]
name = "rand_core"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
dependencies = [
"getrandom 0.1.16",
]
[[package]]
name = "rand_core"
version = "0.6.4"
@@ -9387,15 +9251,6 @@ dependencies = [
"rand 0.8.5",
]
[[package]]
name = "rand_hc"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
dependencies = [
"rand_core 0.5.1",
]
[[package]]
name = "range-alloc"
version = "0.1.4"
@@ -9773,7 +9628,7 @@ dependencies = [
"rkyv_derive",
"seahash",
"tinyvec",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -10287,7 +10142,7 @@ dependencies = [
"serde",
"thiserror 1.0.69",
"url",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -10570,28 +10425,6 @@ dependencies = [
"serde",
]
[[package]]
name = "serde_qs"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6"
dependencies = [
"percent-encoding",
"serde",
"thiserror 1.0.69",
]
[[package]]
name = "serde_qs"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8cac3f1e2ca2fe333923a1ae72caca910b98ed0630bb35ef6f8c8517d6e81afa"
dependencies = [
"percent-encoding",
"serde",
"thiserror 1.0.69",
]
[[package]]
name = "serde_repr"
version = "0.1.20"
@@ -10893,17 +10726,6 @@ dependencies = [
"serde",
]
[[package]]
name = "smart-default"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "smartstring"
version = "1.0.1"
@@ -10915,15 +10737,6 @@ dependencies = [
"version_check",
]
[[package]]
name = "smol_str"
version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fad6c857cbab2627dcf01ec85a623ca4e7dcb5691cbaa3d7fb7653671f0d09c9"
dependencies = [
"serde",
]
[[package]]
name = "smtp-proto"
version = "0.1.6"
@@ -11114,7 +10927,7 @@ dependencies = [
"crc",
"crossbeam-queue",
"either",
"event-listener 5.4.0",
"event-listener",
"futures-core",
"futures-intrusive",
"futures-io",
@@ -11137,7 +10950,7 @@ dependencies = [
"tokio-stream",
"tracing",
"url",
"uuid 1.16.0",
"uuid",
"webpki-roots",
]
@@ -11221,7 +11034,7 @@ dependencies = [
"stringprep",
"thiserror 2.0.12",
"tracing",
"uuid 1.16.0",
"uuid",
"whoami",
]
@@ -11262,7 +11075,7 @@ dependencies = [
"stringprep",
"thiserror 2.0.12",
"tracing",
"uuid 1.16.0",
"uuid",
"whoami",
]
@@ -11288,7 +11101,7 @@ dependencies = [
"sqlx-core",
"tracing",
"url",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -12016,7 +11829,7 @@ dependencies = [
"tempfile",
"thiserror 1.0.69",
"time",
"uuid 1.16.0",
"uuid",
"winapi",
]
@@ -12133,7 +11946,7 @@ version = "3.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf"
dependencies = [
"fastrand 2.3.0",
"fastrand",
"getrandom 0.3.2",
"once_cell",
"rustix 1.0.3",
@@ -12265,7 +12078,7 @@ dependencies = [
"tokio-rustls 0.24.1",
"tokio-util",
"tracing",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -13097,7 +12910,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "470dbf6591da1b39d43c14523b2b469c86879a53e8b758c8e090a470fe7b1fbe"
dependencies = [
"rand 0.9.0",
"uuid 1.16.0",
"uuid",
"web-time",
]
@@ -13384,15 +13197,6 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
dependencies = [
"getrandom 0.2.15",
]
[[package]]
name = "uuid"
version = "1.16.0"
@@ -13480,12 +13284,6 @@ dependencies = [
"memchr",
]
[[package]]
name = "waker-fn"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7"
[[package]]
name = "walkdir"
version = "2.5.0"
@@ -13505,12 +13303,6 @@ dependencies = [
"try-lock",
]
[[package]]
name = "wasi"
version = "0.9.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
@@ -13884,7 +13676,7 @@ dependencies = [
"tokio",
"tracing",
"url",
"uuid 1.16.0",
"uuid",
"v8",
"windmill-api",
"windmill-api-client",
@@ -13906,7 +13698,6 @@ dependencies = [
"async-oauth2",
"async-recursion",
"async-stream",
"async-stripe",
"async_zip",
"aws-config",
"aws-sdk-sqs",
@@ -13983,7 +13774,7 @@ dependencies = [
"ulid",
"url",
"urlencoding",
"uuid 1.16.0",
"uuid",
"windmill-audit",
"windmill-common",
"windmill-git-sync",
@@ -14006,7 +13797,7 @@ dependencies = [
"reqwest 0.11.27",
"serde",
"serde_json",
"uuid 1.16.0",
"uuid",
]
[[package]]
@@ -14031,7 +13822,7 @@ dependencies = [
"serde_json",
"sqlx",
"tracing",
"uuid 1.16.0",
"uuid",
"windmill-common",
"windmill-queue",
]
@@ -14093,7 +13884,7 @@ dependencies = [
"tracing-loki",
"tracing-opentelemetry",
"tracing-subscriber",
"uuid 1.16.0",
"uuid",
"windmill-macros",
]
@@ -14106,7 +13897,7 @@ dependencies = [
"serde_json",
"sqlx",
"tracing",
"uuid 1.16.0",
"uuid",
"windmill-common",
"windmill-queue",
]
@@ -14130,7 +13921,7 @@ dependencies = [
"tokio",
"tokio-tar",
"tracing",
"uuid 1.16.0",
"uuid",
"windmill-common",
]
@@ -14364,7 +14155,7 @@ dependencies = [
"tokio",
"tracing",
"ulid",
"uuid 1.16.0",
"uuid",
"windmill-audit",
"windmill-common",
]
@@ -14442,7 +14233,7 @@ dependencies = [
"tokio-util",
"tracing",
"urlencoding",
"uuid 1.16.0",
"uuid",
"winapi",
"windmill-audit",
"windmill-common",
+1 -6
View File
@@ -50,7 +50,7 @@ lto = "thin"
default = []
enterprise = ["windmill-worker/enterprise", "windmill-queue/enterprise", "windmill-api/enterprise", "dep:windmill-autoscaling", "windmill-autoscaling/enterprise", "windmill-git-sync/enterprise", "windmill-common/prometheus", "windmill-common/enterprise"]
enterprise_saml = ["windmill-api/enterprise_saml", "oauth2"]
stripe = ["windmill-api/stripe", "enterprise"]
stripe = ["windmill-api/stripe"]
benchmark = ["windmill-api/benchmark", "windmill-worker/benchmark", "windmill-queue/benchmark", "windmill-common/benchmark"]
loki = ["windmill-common/loki"]
embedding = ["windmill-api/embedding"]
@@ -268,11 +268,6 @@ serde_derive = "1.0.147"
const_format = { version = "0.2", features = ["rust_1_64", "rust_1_51"] }
dyn-iter = "0.2.0"
rsa = "^0"
async-stripe = { version = "0.39.1", features = [
"runtime-tokio-hyper",
"checkout",
"billing",
] }
async_zip = { version = "0.0.17", features = ["tokio", "tokio-fs", "deflate", "chrono"] }
once_cell = "1.17.1"
gosyn = "0.2.6"
+1 -1
View File
@@ -1 +1 @@
32e85d0bd0ae71dfa1a96db2331448825d3ef517
a46cb7b7c88c3fb22964db37994c0b26d67b6d5b
@@ -0,0 +1 @@
ALTER TABLE workspace_settings ADD COLUMN automatic_billing BOOLEAN NOT NULL DEFAULT TRUE;
@@ -0,0 +1 @@
ALTER TABLE workspace_settings DROP COLUMN automatic_billing;
+1 -2
View File
@@ -11,7 +11,7 @@ path = "src/lib.rs"
[features]
default = []
enterprise = ["windmill-queue/enterprise", "windmill-audit/enterprise", "windmill-git-sync/enterprise", "windmill-common/enterprise"]
stripe = ["dep:async-stripe"]
stripe = []
enterprise_saml = ["dep:samael"]
benchmark = []
embedding = ["dep:tinyvector", "dep:hf-hub", "dep:tokenizers", "dep:candle-core", "dep:candle-transformers", "dep:candle-nn", "dep:half"]
@@ -86,7 +86,6 @@ hmac.workspace = true
cookie.workspace = true
sha2.workspace = true
urlencoding.workspace = true
async-stripe = { workspace = true, optional = true }
lazy_static.workspace = true
prometheus = { workspace = true, optional = true }
async_zip = { workspace = true, optional = true }
+3 -40
View File
@@ -1842,8 +1842,6 @@ paths:
type: boolean
plan:
type: string
automatic_billing:
type: boolean
customer_id:
type: string
webhook:
@@ -1875,7 +1873,6 @@ paths:
operator_settings:
$ref: "#/components/schemas/OperatorSettings"
required:
- automatic_billing
- error_handler_muted_on_cancel
/w/{workspace}/workspaces/get_deploy_to:
@@ -1936,48 +1933,14 @@ paths:
type: boolean
usage:
type: number
seats:
type: number
automatic_billing:
type: boolean
owner:
type: string
status:
type: string
required:
- premium
- automatic_billing
- owner
/w/{workspace}/workspaces/set_automatic_billing:
post:
summary: set automatic billing
operationId: setAutomaticBilling
tags:
- workspace
parameters:
- $ref: "#/components/parameters/WorkspaceId"
requestBody:
description: automatic billing
required: true
content:
application/json:
schema:
type: object
properties:
automatic_billing:
type: boolean
seats:
type: number
required:
- automatic_billing
responses:
"200":
description: status
content:
text/plain:
schema:
type: string
/w/{workspace}/workspaces/threshold_alert:
get:
summary: get threshold alert info
+11 -10
View File
@@ -83,6 +83,8 @@ mod postgres_triggers;
#[cfg(feature = "enterprise")]
mod apps_ee;
#[cfg(feature = "enterprise")]
mod git_sync_ee;
#[cfg(feature = "parquet")]
mod job_helpers_ee;
pub mod job_metrics;
@@ -109,9 +111,8 @@ mod slack_approvals;
mod smtp_server_ee;
#[cfg(all(feature = "enterprise", feature = "sqs_trigger"))]
mod sqs_triggers_ee;
#[cfg(feature = "enterprise")]
mod git_sync_ee;
mod static_assets;
#[cfg(all(feature = "stripe", feature = "enterprise"))]
mod stripe_ee;
mod teams_ee;
mod tracing_init;
@@ -471,7 +472,7 @@ pub async fn run_server(
.nest("/nats_triggers", nats_triggers_service)
.nest("/mqtt_triggers", mqtt_triggers_service)
.nest("/sqs_triggers", sqs_triggers_service)
.nest("/postgres_triggers", postgres_triggers_service)
.nest("/postgres_triggers", postgres_triggers_service),
)
.nest("/workspaces", workspaces::global_service())
.nest(
@@ -548,14 +549,14 @@ pub async fn run_server(
get(slack_approvals::request_slack_approval),
)
.nest("/w/:workspace_id/github_app", {
#[cfg(feature = "enterprise")]
{
git_sync_ee::workspaced_service()
}
#[cfg(feature = "enterprise")]
{
git_sync_ee::workspaced_service()
}
#[cfg(not(feature = "enterprise"))]
Router::new()
})
#[cfg(not(feature = "enterprise"))]
Router::new()
})
.nest("/github_app", {
#[cfg(feature = "enterprise")]
{
-2
View File
@@ -1,7 +1,5 @@
#[cfg(feature = "stripe")]
use axum::Router;
#[cfg(feature = "stripe")]
pub fn add_stripe_routes(router: Router) -> Router {
return router;
}
+2 -3
View File
@@ -146,7 +146,7 @@ pub fn workspaced_service() -> Router {
.route("/critical_alerts/mute", post(mute_critical_alerts))
.route("/operator_settings", post(update_operator_settings));
#[cfg(feature = "stripe")]
#[cfg(all(feature = "stripe", feature = "enterprise"))]
{
crate::stripe_ee::add_stripe_routes(router)
}
@@ -229,7 +229,6 @@ pub struct WorkspaceSettings {
pub deploy_ui: Option<serde_json::Value>, // effectively: WorkspaceDeploymentUISettings
#[serde(skip_serializing_if = "Option::is_none")]
pub default_app: Option<String>,
pub automatic_billing: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_scripts: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
@@ -444,7 +443,7 @@ async fn get_settings(
let mut tx = user_db.begin(&authed).await?;
let settings = sqlx::query_as!(
WorkspaceSettings,
"SELECT workspace_id, slack_team_id, teams_team_id, teams_team_name, slack_name, slack_command_script, teams_command_script, slack_email, auto_invite_domain, auto_invite_operator, auto_add, customer_id, plan, webhook, deploy_to, ai_config, error_handler, error_handler_extra_args, error_handler_muted_on_cancel, large_file_storage, git_sync, deploy_ui, default_app, automatic_billing, default_scripts, mute_critical_alerts, color, operator_settings, git_app_installations FROM workspace_settings WHERE workspace_id = $1",
"SELECT workspace_id, slack_team_id, teams_team_id, teams_team_name, slack_name, slack_command_script, teams_command_script, slack_email, auto_invite_domain, auto_invite_operator, auto_add, customer_id, plan, webhook, deploy_to, ai_config, error_handler, error_handler_extra_args, error_handler_muted_on_cancel, large_file_storage, git_sync, deploy_ui, default_app, default_scripts, mute_critical_alerts, color, operator_settings, git_app_installations FROM workspace_settings WHERE workspace_id = $1",
&w_id
)
.fetch_one(&mut *tx)
@@ -7,9 +7,7 @@
import { workspaceStore } from '$lib/stores'
import { Button } from '../common'
import Tooltip from '../Tooltip.svelte'
import { ExternalLink, Loader2, Pen, X } from 'lucide-svelte'
import { twMerge } from 'tailwind-merge'
import Toggle from '../Toggle.svelte'
import { ExternalLink, Pen, X } from 'lucide-svelte'
import Section from '../Section.svelte'
import Range from '../Range.svelte'
import Label from '../Label.svelte'
@@ -25,13 +23,12 @@
| {
premium: boolean
usage: number
seats: number
status?: string
developerNb: number
operatorNb: number
seatsFromUsers: number
seatsFromExtraComps: number
usedSeats: number
automatic_billing: boolean
owner: string
}
| undefined = undefined
@@ -78,7 +75,6 @@
premiumInfo = {
...info,
usage: info.usage ?? 0,
seats: info.seats ?? 1,
owner: info.owner,
developerNb,
operatorNb,
@@ -88,25 +84,6 @@
}
}
let billingModeLoading = false
async function setAutomaticBilling(ev) {
try {
billingModeLoading = true
await WorkspaceService.setAutomaticBilling({
workspace: $workspaceStore!,
requestBody: {
automatic_billing: ev.detail,
seats: premiumInfo?.usedSeats
}
})
} catch (err) {
sendUserToast("Couldn't update billing mode: " + err, true)
} finally {
await loadPremiumInfo()
billingModeLoading = false
}
}
let thresholdAlert:
| {
threshold_alert_amount?: number
@@ -173,15 +150,17 @@
<div class="flex flex-col gap-1">
<div class=" text-primary text-lg font-semibold">
{#if premiumInfo?.premium && plan}
Plan: {capitalize(plan)} plan{plan === 'team' && premiumInfo.automatic_billing
? ' (usage-based)'
: plan === 'team'
? ` (${premiumInfo.seats} seat${premiumInfo.seats > 1 ? 's' : ''})`
: ''}
Plan: {capitalize(plan)} plan{plan === 'team' ? ' (usage-based)' : ''}
{:else}
Plan: Free plan
{/if}
</div>
{#if premiumInfo?.status === 'past_due'}
<p class="text-red-500 text-base">
Your last invoice is unpaid. Please update your payment method in the customer portal to
prevent account downgrade and the interruption of your job executions.
</p>
{/if}
</div>
</div>
{#if customer_id}
@@ -201,79 +180,52 @@
{#if premiumInfo?.premium}
<div class="flex flex-col gap-8 my-8">
{#if plan}
{#if plan === 'team' && !premiumInfo?.automatic_billing}
<div class="flex flex-row items-center gap-2">
<Toggle
checked={premiumInfo?.automatic_billing}
options={{
left: 'Static number of seats',
leftTooltip:
'You will be billed for a fixed number of seats, you have to manually adapt the number of seats in the customer portal based on your usage.',
right: 'Automatic billing based on usage',
rightTooltip:
'You will be billed for the maximum number of seats used in a given billing period.'
<div class="flex flex-col gap-1.5">
<p class="font-semibold text-sm">Billing threshold email alert</p>
<div class="flex flex-row gap-0.5 items-center">
<p class="text-base text-secondary mr-0.5"
>{thresholdAlert?.threshold_alert_amount
? thresholdAlert?.threshold_alert_amount + '$'
: 'Not set'}</p
>
<Button
on:click={() => {
newThresholdAlertAmount = thresholdAlert?.threshold_alert_amount ?? 10
thresholdAlertOpen = true
}}
size="xs"
spacingSize="xs2"
variant="border"
color="light"
iconOnly
startIcon={{
icon: Pen
}}
on:change={setAutomaticBilling}
disabled={billingModeLoading}
/>
{#if billingModeLoading}
<Loader2 class="animate-spin" />
{/if}
</div>
{/if}
{:else}
<div class="inline text-lg font-bold">Current plan: Free plan</div>
{/if}
{#if plan}
{#if premiumInfo?.automatic_billing}
<div class="flex flex-col gap-1.5">
<p class="font-semibold text-sm">Billing threshold email alert</p>
<div class="flex flex-row gap-0.5 items-center">
<p class="text-base text-secondary mr-0.5"
>{thresholdAlert?.threshold_alert_amount
? thresholdAlert?.threshold_alert_amount + '$'
: 'Not set'}</p
>
{#if thresholdAlert?.threshold_alert_amount}
<Button
on:click={() => {
newThresholdAlertAmount = thresholdAlert?.threshold_alert_amount ?? 10
thresholdAlertOpen = true
if (thresholdAlert) {
newThresholdAlertAmount = undefined
setThresholdAlert()
}
}}
variant="border"
size="xs"
spacingSize="xs2"
variant="border"
color="light"
iconOnly
startIcon={{
icon: Pen
icon: X
}}
/>
{#if thresholdAlert?.threshold_alert_amount}
<Button
on:click={() => {
if (thresholdAlert) {
newThresholdAlertAmount = undefined
setThresholdAlert()
}
}}
variant="border"
size="xs"
spacingSize="xs2"
color="light"
iconOnly
startIcon={{
icon: X
}}
/>
{/if}
</div>
<p class="italic text-xs">
An email notification will be sent to {premiumInfo.owner} if the specified threshold amount
is exceeded during a given month.
</p>
{/if}
</div>
{/if}
<p class="italic text-xs">
An email notification will be sent to {premiumInfo.owner} if the specified threshold amount
is exceeded during a given month.
</p>
</div>
<div class="w-full">
<DataTable>
<tbody class="divide-y">
@@ -342,52 +294,20 @@
</tr>
<tr>
<Cell first
><div
class={twMerge(
'font-semibold',
plan === 'team' &&
premiumInfo.usedSeats > premiumInfo.seats &&
!premiumInfo.automatic_billing
? 'text-red-500'
: ''
)}
><div class="font-semibold"
>Used seats <Tooltip
>Highest between seats from developers + operators and seats from computations
</Tooltip>{plan === 'team' &&
premiumInfo.usedSeats > premiumInfo.seats &&
!premiumInfo.automatic_billing
? ' > Paid seats'
: ''}</div
</Tooltip></div
></Cell
>
<Cell last numeric>
<div
class={twMerge(
'text-base font-bold',
plan === 'team' &&
premiumInfo.usedSeats > premiumInfo.seats &&
!premiumInfo.automatic_billing
? 'text-red-500'
: ''
)}
>
u + c = {premiumInfo.usedSeats}{plan === 'team' &&
premiumInfo.usedSeats > premiumInfo.seats &&
!premiumInfo.automatic_billing
? ` > ${premiumInfo.seats}`
: ''}
<div class="text-base font-bold">
u + c = {premiumInfo.usedSeats}
</div>
</Cell>
</tr>
</tbody>
</DataTable>
{#if plan === 'team' && premiumInfo.usedSeats > premiumInfo.seats && !premiumInfo.automatic_billing}
<p class="text-red-500 mt-2 text-right text-base"
>You have exceeded your allowed number of seats, please update your plan in the
customer portal.
</p>
{/if}
</div>
{/if}
</div>