diff --git a/controlplane/CHANGELOG.md b/controlplane/CHANGELOG.md index 9a2af21a4c..e4d187ca13 100644 --- a/controlplane/CHANGELOG.md +++ b/controlplane/CHANGELOG.md @@ -4,6 +4,14 @@ Binaries are attached to the github release otherwise all images can be found [h All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.121.2](https://github.com/wundergraph/cosmo/compare/controlplane@0.121.1...controlplane@0.121.2) (2025-01-29) + +### Bug Fixes + +* adding/removing directive is not picked up by wgc subgraph check ([#1494](https://github.com/wundergraph/cosmo/issues/1494)) ([3cfa2d5](https://github.com/wundergraph/cosmo/commit/3cfa2d5ceba9d1b5beb613c255566324bec85c3d)) (@JivusAyrus) +* trim the inputs of group mappers ([#1541](https://github.com/wundergraph/cosmo/issues/1541)) ([18a6025](https://github.com/wundergraph/cosmo/commit/18a6025a1e352ae6adb77ec2d231f209e20c4833)) (@JivusAyrus) +* webhooks shot when schema is unchanged ([#1542](https://github.com/wundergraph/cosmo/issues/1542)) ([3024dcf](https://github.com/wundergraph/cosmo/commit/3024dcfe9f6a7df3e7d3707fca671615ac26f304)) (@thisisnithin) + ## [0.121.1](https://github.com/wundergraph/cosmo/compare/controlplane@0.121.0...controlplane@0.121.1) (2025-01-24) **Note:** Version bump only for package controlplane diff --git a/controlplane/migrations/0110_material_stephen_strange.sql b/controlplane/migrations/0110_material_stephen_strange.sql new file mode 100644 index 0000000000..585cc13463 --- /dev/null +++ b/controlplane/migrations/0110_material_stephen_strange.sql @@ -0,0 +1,24 @@ +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_UNION_MEMBER_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_UNION_MEMBER_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_ENUM_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_ENUM_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_ENUM_VALUE_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_ENUM_VALUE_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_INPUT_OBJECT_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_INPUT_OBJECT_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_FIELD_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_FIELD_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_SCALAR_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_SCALAR_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_OBJECT_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_OBJECT_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_INTERFACE_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_INTERFACE_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_ARGUMENT_DEFINITION_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_ARGUMENT_DEFINITION_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_SCHEMA_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_SCHEMA_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_FIELD_DEFINITION_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_FIELD_DEFINITION_REMOVED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_ADDED';--> statement-breakpoint +ALTER TYPE "public"."schema_change_type" ADD VALUE 'DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_REMOVED'; \ No newline at end of file diff --git a/controlplane/migrations/meta/0110_snapshot.json b/controlplane/migrations/meta/0110_snapshot.json new file mode 100644 index 0000000000..5b5aec9907 --- /dev/null +++ b/controlplane/migrations/meta/0110_snapshot.json @@ -0,0 +1,6921 @@ +{ + "id": "3df57b8c-c6a3-4c65-bcaa-b34fd22ac23c", + "prevId": "8de5c635-e9ae-4a21-ae0e-9118c8e68abe", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.api_key_permissions": { + "name": "api_key_permissions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "api_key_id": { + "name": "api_key_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "permission": { + "name": "permission", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "akp_api_key_id_idx": { + "name": "akp_api_key_id_idx", + "columns": [ + { + "expression": "api_key_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "api_key_permissions_api_key_id_api_keys_id_fk": { + "name": "api_key_permissions_api_key_id_api_keys_id_fk", + "tableFrom": "api_key_permissions", + "tableTo": "api_keys", + "columnsFrom": [ + "api_key_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.api_key_resources": { + "name": "api_key_resources", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "api_key_id": { + "name": "api_key_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "akr_api_key_id_idx": { + "name": "akr_api_key_id_idx", + "columns": [ + { + "expression": "api_key_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "akr_target_id_idx": { + "name": "akr_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "api_key_resources_api_key_id_api_keys_id_fk": { + "name": "api_key_resources_api_key_id_api_keys_id_fk", + "tableFrom": "api_key_resources", + "tableTo": "api_keys", + "columnsFrom": [ + "api_key_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "api_key_resources_target_id_targets_id_fk": { + "name": "api_key_resources_target_id_targets_id_fk", + "tableFrom": "api_key_resources", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.api_keys": { + "name": "api_keys", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "last_used_at": { + "name": "last_used_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "apikey_name_idx": { + "name": "apikey_name_idx", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ak_user_id_idx": { + "name": "ak_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ak_organization_id_idx": { + "name": "ak_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "api_keys_user_id_users_id_fk": { + "name": "api_keys_user_id_users_id_fk", + "tableFrom": "api_keys", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "api_keys_organization_id_organizations_id_fk": { + "name": "api_keys_organization_id_organizations_id_fk", + "tableFrom": "api_keys", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "api_keys_key_unique": { + "name": "api_keys_key_unique", + "nullsNotDistinct": false, + "columns": [ + "key" + ] + } + }, + "checkConstraints": {} + }, + "public.audit_logs": { + "name": "audit_logs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "audit_action": { + "name": "audit_action", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "auditable_type": { + "name": "auditable_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "auditable_display_name": { + "name": "auditable_display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "target_type": { + "name": "target_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "target_display_name": { + "name": "target_display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "target_namespace_id": { + "name": "target_namespace_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "target_namespace": { + "name": "target_namespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "actor_id": { + "name": "actor_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "actor_display_name": { + "name": "actor_display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "actor_type": { + "name": "actor_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "auditlogs_organization_idx": { + "name": "auditlogs_organization_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "auditlogs_created_at_idx": { + "name": "auditlogs_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "audit_logs_organization_id_organizations_id_fk": { + "name": "audit_logs_organization_id_organizations_id_fk", + "tableFrom": "audit_logs", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.billing_plans": { + "name": "billing_plans", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "price": { + "name": "price", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "features": { + "name": "features", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "stripe_price_id": { + "name": "stripe_price_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "weight": { + "name": "weight", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.billing_subscriptions": { + "name": "billing_subscriptions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "metadata": { + "name": "metadata", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "price_id": { + "name": "price_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "quantity": { + "name": "quantity", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cancel_at_period_end": { + "name": "cancel_at_period_end", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "cancel_at": { + "name": "cancel_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "canceled_at": { + "name": "canceled_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "current_period_start": { + "name": "current_period_start", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "current_period_end": { + "name": "current_period_end", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "ended_at": { + "name": "ended_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "trial_start": { + "name": "trial_start", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "trial_end": { + "name": "trial_end", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "billsubs_organization_id_idx": { + "name": "billsubs_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "billing_subscriptions_organization_id_organizations_id_fk": { + "name": "billing_subscriptions_organization_id_organizations_id_fk", + "tableFrom": "billing_subscriptions", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.cache_warmer_operations": { + "name": "cache_warmer_operations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "operation_content": { + "name": "operation_content", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "operation_hash": { + "name": "operation_hash", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "operation_persisted_id": { + "name": "operation_persisted_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "operation_name": { + "name": "operation_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_name": { + "name": "client_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_version": { + "name": "client_version", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "planning_time": { + "name": "planning_time", + "type": "real", + "primaryKey": false, + "notNull": false + }, + "is_manually_added": { + "name": "is_manually_added", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "cwo_organization_id_idx": { + "name": "cwo_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cwo_federated_graph_id_idx": { + "name": "cwo_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cwo_created_by_id_idx": { + "name": "cwo_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "cache_warmer_operations_organization_id_organizations_id_fk": { + "name": "cache_warmer_operations_organization_id_organizations_id_fk", + "tableFrom": "cache_warmer_operations", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "cache_warmer_operations_federated_graph_id_federated_graphs_id_fk": { + "name": "cache_warmer_operations_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "cache_warmer_operations", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "cache_warmer_operations_created_by_id_users_id_fk": { + "name": "cache_warmer_operations_created_by_id_users_id_fk", + "tableFrom": "cache_warmer_operations", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.contracts": { + "name": "contracts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "source_federated_graph_id": { + "name": "source_federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "downstream_federated_graph_id": { + "name": "downstream_federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "exclude_tags": { + "name": "exclude_tags", + "type": "text[]", + "primaryKey": false, + "notNull": true + }, + "include_tags": { + "name": "include_tags", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "'{}'::text[]" + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "updated_by_id": { + "name": "updated_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "contracts_created_by_id_idx": { + "name": "contracts_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "contracts_updated_by_id_idx": { + "name": "contracts_updated_by_id_idx", + "columns": [ + { + "expression": "updated_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "contracts_downstream_federated_graph_id_idx": { + "name": "contracts_downstream_federated_graph_id_idx", + "columns": [ + { + "expression": "downstream_federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "contracts_source_federated_graph_id_federated_graphs_id_fk": { + "name": "contracts_source_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "contracts", + "tableTo": "federated_graphs", + "columnsFrom": [ + "source_federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "contracts_downstream_federated_graph_id_federated_graphs_id_fk": { + "name": "contracts_downstream_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "contracts", + "tableTo": "federated_graphs", + "columnsFrom": [ + "downstream_federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "contracts_created_by_id_users_id_fk": { + "name": "contracts_created_by_id_users_id_fk", + "tableFrom": "contracts", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "contracts_updated_by_id_users_id_fk": { + "name": "contracts_updated_by_id_users_id_fk", + "tableFrom": "contracts", + "tableTo": "users", + "columnsFrom": [ + "updated_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "federated_graph_source_downstream_id": { + "name": "federated_graph_source_downstream_id", + "nullsNotDistinct": false, + "columns": [ + "source_federated_graph_id", + "downstream_federated_graph_id" + ] + } + }, + "checkConstraints": {} + }, + "public.discussion_thread": { + "name": "discussion_thread", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "discussion_id": { + "name": "discussion_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "content_markdown": { + "name": "content_markdown", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "content_json": { + "name": "content_json", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "is_deleted": { + "name": "is_deleted", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": { + "dist_discussion_id_idx": { + "name": "dist_discussion_id_idx", + "columns": [ + { + "expression": "discussion_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "dist_created_by_id_idx": { + "name": "dist_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "discussion_thread_discussion_id_discussions_id_fk": { + "name": "discussion_thread_discussion_id_discussions_id_fk", + "tableFrom": "discussion_thread", + "tableTo": "discussions", + "columnsFrom": [ + "discussion_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "discussion_thread_created_by_id_users_id_fk": { + "name": "discussion_thread_created_by_id_users_id_fk", + "tableFrom": "discussion_thread", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.discussions": { + "name": "discussions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "schema_version_id": { + "name": "schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "reference_line": { + "name": "reference_line", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "is_resolved": { + "name": "is_resolved", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": { + "dis_target_id_idx": { + "name": "dis_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "dis_schema_version_id_idx": { + "name": "dis_schema_version_id_idx", + "columns": [ + { + "expression": "schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "discussions_target_id_targets_id_fk": { + "name": "discussions_target_id_targets_id_fk", + "tableFrom": "discussions", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "discussions_schema_version_id_schema_versions_id_fk": { + "name": "discussions_schema_version_id_schema_versions_id_fk", + "tableFrom": "discussions", + "tableTo": "schema_versions", + "columnsFrom": [ + "schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.feature_flags_to_feature_subgraphs": { + "name": "feature_flags_to_feature_subgraphs", + "schema": "", + "columns": { + "feature_flag_id": { + "name": "feature_flag_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "feature_subgraph_id": { + "name": "feature_subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "fffs_feature_flag_id_idx": { + "name": "fffs_feature_flag_id_idx", + "columns": [ + { + "expression": "feature_flag_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fffs_feature_subgraph_id_idx": { + "name": "fffs_feature_subgraph_id_idx", + "columns": [ + { + "expression": "feature_subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "feature_flags_to_feature_subgraphs_feature_flag_id_feature_flags_id_fk": { + "name": "feature_flags_to_feature_subgraphs_feature_flag_id_feature_flags_id_fk", + "tableFrom": "feature_flags_to_feature_subgraphs", + "tableTo": "feature_flags", + "columnsFrom": [ + "feature_flag_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "feature_flags_to_feature_subgraphs_feature_subgraph_id_subgraphs_id_fk": { + "name": "feature_flags_to_feature_subgraphs_feature_subgraph_id_subgraphs_id_fk", + "tableFrom": "feature_flags_to_feature_subgraphs", + "tableTo": "subgraphs", + "columnsFrom": [ + "feature_subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "feature_flags_to_feature_subgraphs_feature_flag_id_feature_subgraph_id_pk": { + "name": "feature_flags_to_feature_subgraphs_feature_flag_id_feature_subgraph_id_pk", + "columns": [ + "feature_flag_id", + "feature_subgraph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.feature_flags": { + "name": "feature_flags", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "labels": { + "name": "labels", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "is_enabled": { + "name": "is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "ff_organization_id_idx": { + "name": "ff_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ff_namespace_id_idx": { + "name": "ff_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ff_created_by_idx": { + "name": "ff_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "feature_flags_organization_id_organizations_id_fk": { + "name": "feature_flags_organization_id_organizations_id_fk", + "tableFrom": "feature_flags", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "feature_flags_namespace_id_namespaces_id_fk": { + "name": "feature_flags_namespace_id_namespaces_id_fk", + "tableFrom": "feature_flags", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "feature_flags_created_by_users_id_fk": { + "name": "feature_flags_created_by_users_id_fk", + "tableFrom": "feature_flags", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.feature_subgraphs_to_base_subgraphs": { + "name": "feature_subgraphs_to_base_subgraphs", + "schema": "", + "columns": { + "feature_subgraph_id": { + "name": "feature_subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "base_subgraph_id": { + "name": "base_subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "fsbs_feature_subgraph_id_idx": { + "name": "fsbs_feature_subgraph_id_idx", + "columns": [ + { + "expression": "feature_subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fsbs_base_subgraph_id_idx": { + "name": "fsbs_base_subgraph_id_idx", + "columns": [ + { + "expression": "base_subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "feature_subgraphs_to_base_subgraphs_feature_subgraph_id_subgraphs_id_fk": { + "name": "feature_subgraphs_to_base_subgraphs_feature_subgraph_id_subgraphs_id_fk", + "tableFrom": "feature_subgraphs_to_base_subgraphs", + "tableTo": "subgraphs", + "columnsFrom": [ + "feature_subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "feature_subgraphs_to_base_subgraphs_base_subgraph_id_subgraphs_id_fk": { + "name": "feature_subgraphs_to_base_subgraphs_base_subgraph_id_subgraphs_id_fk", + "tableFrom": "feature_subgraphs_to_base_subgraphs", + "tableTo": "subgraphs", + "columnsFrom": [ + "base_subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "feature_subgraphs_to_base_subgraphs_feature_subgraph_id_base_subgraph_id_pk": { + "name": "feature_subgraphs_to_base_subgraphs_feature_subgraph_id_base_subgraph_id_pk", + "columns": [ + "feature_subgraph_id", + "base_subgraph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.federated_graph_clients": { + "name": "federated_graph_clients", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "updated_by_id": { + "name": "updated_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "fgc_created_by_id_idx": { + "name": "fgc_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgc_updated_by_id_idx": { + "name": "fgc_updated_by_id_idx", + "columns": [ + { + "expression": "updated_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "federated_graph_clients_federated_graph_id_federated_graphs_id_fk": { + "name": "federated_graph_clients_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "federated_graph_clients", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graph_clients_created_by_id_users_id_fk": { + "name": "federated_graph_clients_created_by_id_users_id_fk", + "tableFrom": "federated_graph_clients", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "federated_graph_clients_updated_by_id_users_id_fk": { + "name": "federated_graph_clients_updated_by_id_users_id_fk", + "tableFrom": "federated_graph_clients", + "tableTo": "users", + "columnsFrom": [ + "updated_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "federated_graph_client_name": { + "name": "federated_graph_client_name", + "nullsNotDistinct": false, + "columns": [ + "federated_graph_id", + "name" + ] + } + }, + "checkConstraints": {} + }, + "public.federated_graph_persisted_operations": { + "name": "federated_graph_persisted_operations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "client_id": { + "name": "client_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "operation_id": { + "name": "operation_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "hash": { + "name": "hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_path": { + "name": "file_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "operation_names": { + "name": "operation_names", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "operation_content": { + "name": "operation_content", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "updated_by_id": { + "name": "updated_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "fgpo_created_by_id_idx": { + "name": "fgpo_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgpo_updated_by_id_idx": { + "name": "fgpo_updated_by_id_idx", + "columns": [ + { + "expression": "updated_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgpo_client_id_idx": { + "name": "fgpo_client_id_idx", + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "federated_graph_persisted_operations_federated_graph_id_federated_graphs_id_fk": { + "name": "federated_graph_persisted_operations_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "federated_graph_persisted_operations", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graph_persisted_operations_client_id_federated_graph_clients_id_fk": { + "name": "federated_graph_persisted_operations_client_id_federated_graph_clients_id_fk", + "tableFrom": "federated_graph_persisted_operations", + "tableTo": "federated_graph_clients", + "columnsFrom": [ + "client_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graph_persisted_operations_created_by_id_users_id_fk": { + "name": "federated_graph_persisted_operations_created_by_id_users_id_fk", + "tableFrom": "federated_graph_persisted_operations", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "federated_graph_persisted_operations_updated_by_id_users_id_fk": { + "name": "federated_graph_persisted_operations_updated_by_id_users_id_fk", + "tableFrom": "federated_graph_persisted_operations", + "tableTo": "users", + "columnsFrom": [ + "updated_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "federated_graph_persisted_operations_file_path_unique": { + "name": "federated_graph_persisted_operations_file_path_unique", + "nullsNotDistinct": false, + "columns": [ + "file_path" + ] + }, + "federated_graph_operation_id": { + "name": "federated_graph_operation_id", + "nullsNotDistinct": false, + "columns": [ + "federated_graph_id", + "client_id", + "operation_id" + ] + } + }, + "checkConstraints": {} + }, + "public.federated_graphs": { + "name": "federated_graphs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "routing_url": { + "name": "routing_url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "composed_schema_version_id": { + "name": "composed_schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "admission_webhook_url": { + "name": "admission_webhook_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "admission_webhook_secret": { + "name": "admission_webhook_secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "supports_federation": { + "name": "supports_federation", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + } + }, + "indexes": { + "fgs_target_id_idx": { + "name": "fgs_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgs_composed_schema_version_id_idx": { + "name": "fgs_composed_schema_version_id_idx", + "columns": [ + { + "expression": "composed_schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "federated_graphs_target_id_targets_id_fk": { + "name": "federated_graphs_target_id_targets_id_fk", + "tableFrom": "federated_graphs", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graphs_composed_schema_version_id_schema_versions_id_fk": { + "name": "federated_graphs_composed_schema_version_id_schema_versions_id_fk", + "tableFrom": "federated_graphs", + "tableTo": "schema_versions", + "columnsFrom": [ + "composed_schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.federated_graphs_to_feature_flag_schema_versions": { + "name": "federated_graphs_to_feature_flag_schema_versions", + "schema": "", + "columns": { + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "base_composition_schema_version_id": { + "name": "base_composition_schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "composed_schema_version_id": { + "name": "composed_schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "feature_flag_id": { + "name": "feature_flag_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "fgffsv_federated_graph_id_idx": { + "name": "fgffsv_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgffsv_base_composition_schema_version_id_idx": { + "name": "fgffsv_base_composition_schema_version_id_idx", + "columns": [ + { + "expression": "base_composition_schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgffsv_composed_schema_version_id_idx": { + "name": "fgffsv_composed_schema_version_id_idx", + "columns": [ + { + "expression": "composed_schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgffsv_feature_flag_id_idx": { + "name": "fgffsv_feature_flag_id_idx", + "columns": [ + { + "expression": "feature_flag_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "federated_graphs_to_feature_flag_schema_versions_federated_graph_id_federated_graphs_id_fk": { + "name": "federated_graphs_to_feature_flag_schema_versions_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "federated_graphs_to_feature_flag_schema_versions", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graphs_to_feature_flag_schema_versions_base_composition_schema_version_id_schema_versions_id_fk": { + "name": "federated_graphs_to_feature_flag_schema_versions_base_composition_schema_version_id_schema_versions_id_fk", + "tableFrom": "federated_graphs_to_feature_flag_schema_versions", + "tableTo": "schema_versions", + "columnsFrom": [ + "base_composition_schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graphs_to_feature_flag_schema_versions_composed_schema_version_id_schema_versions_id_fk": { + "name": "federated_graphs_to_feature_flag_schema_versions_composed_schema_version_id_schema_versions_id_fk", + "tableFrom": "federated_graphs_to_feature_flag_schema_versions", + "tableTo": "schema_versions", + "columnsFrom": [ + "composed_schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graphs_to_feature_flag_schema_versions_feature_flag_id_feature_flags_id_fk": { + "name": "federated_graphs_to_feature_flag_schema_versions_feature_flag_id_feature_flags_id_fk", + "tableFrom": "federated_graphs_to_feature_flag_schema_versions", + "tableTo": "feature_flags", + "columnsFrom": [ + "feature_flag_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "federated_graphs_to_feature_flag_schema_versions_federated_graph_id_base_composition_schema_version_id_composed_schema_version_id_pk": { + "name": "federated_graphs_to_feature_flag_schema_versions_federated_graph_id_base_composition_schema_version_id_composed_schema_version_id_pk", + "columns": [ + "federated_graph_id", + "base_composition_schema_version_id", + "composed_schema_version_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.field_grace_period": { + "name": "field_grace_period", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "subgraph_id": { + "name": "subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "is_deprecated": { + "name": "is_deprecated", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "unique_field_grace_period_idx": { + "name": "unique_field_grace_period_idx", + "columns": [ + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "is_deprecated", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgp_subgraph_id_idx": { + "name": "fgp_subgraph_id_idx", + "columns": [ + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgp_organization_id_idx": { + "name": "fgp_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgp_namespace_id_idx": { + "name": "fgp_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "field_grace_period_subgraph_id_subgraphs_id_fk": { + "name": "field_grace_period_subgraph_id_subgraphs_id_fk", + "tableFrom": "field_grace_period", + "tableTo": "subgraphs", + "columnsFrom": [ + "subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "field_grace_period_organization_id_organizations_id_fk": { + "name": "field_grace_period_organization_id_organizations_id_fk", + "tableFrom": "field_grace_period", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "field_grace_period_namespace_id_namespaces_id_fk": { + "name": "field_grace_period_namespace_id_namespaces_id_fk", + "tableFrom": "field_grace_period", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.git_installations": { + "name": "git_installations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "git_installation_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "provider_account_id": { + "name": "provider_account_id", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "provider_installation_id": { + "name": "provider_installation_id", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "provider_name": { + "name": "provider_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "oauth_token": { + "name": "oauth_token", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.graph_api_tokens": { + "name": "graph_api_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "graphApiToken_name_idx": { + "name": "graphApiToken_name_idx", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "gat_organization_id_idx": { + "name": "gat_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "gat_federated_graph_id_idx": { + "name": "gat_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "gat_created_by_idx": { + "name": "gat_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "graph_api_tokens_organization_id_organizations_id_fk": { + "name": "graph_api_tokens_organization_id_organizations_id_fk", + "tableFrom": "graph_api_tokens", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "graph_api_tokens_federated_graph_id_federated_graphs_id_fk": { + "name": "graph_api_tokens_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "graph_api_tokens", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "graph_api_tokens_created_by_users_id_fk": { + "name": "graph_api_tokens_created_by_users_id_fk", + "tableFrom": "graph_api_tokens", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "graph_api_tokens_token_unique": { + "name": "graph_api_tokens_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "checkConstraints": {} + }, + "public.graph_composition_subgraphs": { + "name": "graph_composition_subgraphs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "graph_composition_id": { + "name": "graph_composition_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_id": { + "name": "subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_target_id": { + "name": "subgraph_target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_name": { + "name": "subgraph_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "schema_version_id": { + "name": "schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "change_type": { + "name": "change_type", + "type": "graph_composition_subgraph_change_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'unchanged'" + }, + "is_feature_subgraph": { + "name": "is_feature_subgraph", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "graphcompsub_graph_composition_id_idx": { + "name": "graphcompsub_graph_composition_id_idx", + "columns": [ + { + "expression": "graph_composition_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "graphcompsub_schema_version_id_idx": { + "name": "graphcompsub_schema_version_id_idx", + "columns": [ + { + "expression": "schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "graph_composition_subgraphs_graph_composition_id_graph_compositions_id_fk": { + "name": "graph_composition_subgraphs_graph_composition_id_graph_compositions_id_fk", + "tableFrom": "graph_composition_subgraphs", + "tableTo": "graph_compositions", + "columnsFrom": [ + "graph_composition_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "graph_composition_subgraphs_schema_version_id_schema_versions_id_fk": { + "name": "graph_composition_subgraphs_schema_version_id_schema_versions_id_fk", + "tableFrom": "graph_composition_subgraphs", + "tableTo": "schema_versions", + "columnsFrom": [ + "schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.graph_compositions": { + "name": "graph_compositions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_version_id": { + "name": "schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "is_composable": { + "name": "is_composable", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "composition_errors": { + "name": "composition_errors", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composition_warnings": { + "name": "composition_warnings", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "router_config_signature": { + "name": "router_config_signature", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "deployment_error": { + "name": "deployment_error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "admission_error": { + "name": "admission_error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_by_email": { + "name": "created_by_email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_feature_flag_composition": { + "name": "is_feature_flag_composition", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": { + "graphcomp_schema_version_id_idx": { + "name": "graphcomp_schema_version_id_idx", + "columns": [ + { + "expression": "schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "graphcomp_created_by_id_idx": { + "name": "graphcomp_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "graph_compositions_schema_version_id_schema_versions_id_fk": { + "name": "graph_compositions_schema_version_id_schema_versions_id_fk", + "tableFrom": "graph_compositions", + "tableTo": "schema_versions", + "columnsFrom": [ + "schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "graph_compositions_created_by_id_users_id_fk": { + "name": "graph_compositions_created_by_id_users_id_fk", + "tableFrom": "graph_compositions", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.graph_request_keys": { + "name": "graph_request_keys", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "publicKey": { + "name": "publicKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "grk_organization_id_idx": { + "name": "grk_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "grk_federated_graph_id_idx": { + "name": "grk_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "graph_request_keys_organization_id_organizations_id_fk": { + "name": "graph_request_keys_organization_id_organizations_id_fk", + "tableFrom": "graph_request_keys", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "graph_request_keys_federated_graph_id_federated_graphs_id_fk": { + "name": "graph_request_keys_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "graph_request_keys", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "graph_request_keys_federated_graph_id_unique": { + "name": "graph_request_keys_federated_graph_id_unique", + "nullsNotDistinct": false, + "columns": [ + "federated_graph_id" + ] + }, + "graph_request_keys_privateKey_unique": { + "name": "graph_request_keys_privateKey_unique", + "nullsNotDistinct": false, + "columns": [ + "privateKey" + ] + }, + "graph_request_keys_publicKey_unique": { + "name": "graph_request_keys_publicKey_unique", + "nullsNotDistinct": false, + "columns": [ + "publicKey" + ] + } + }, + "checkConstraints": {} + }, + "public.namespace_graph_pruning_check_config": { + "name": "namespace_graph_pruning_check_config", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "graph_pruning_rule": { + "name": "graph_pruning_rule", + "type": "graph_pruning_rules", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "severity_level": { + "name": "severity_level", + "type": "lint_severity", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "grace_period": { + "name": "grace_period", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "scheme_usage_check_period": { + "name": "scheme_usage_check_period", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "nsgpcc_namespace_id_idx": { + "name": "nsgpcc_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "namespace_graph_pruning_check_config_namespace_id_namespaces_id_fk": { + "name": "namespace_graph_pruning_check_config_namespace_id_namespaces_id_fk", + "tableFrom": "namespace_graph_pruning_check_config", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.namespace_lint_check_config": { + "name": "namespace_lint_check_config", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "lint_rule": { + "name": "lint_rule", + "type": "lint_rules", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "severity_level": { + "name": "severity_level", + "type": "lint_severity", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "nslcc_namespace_id_idx": { + "name": "nslcc_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "namespace_lint_check_config_namespace_id_namespaces_id_fk": { + "name": "namespace_lint_check_config_namespace_id_namespaces_id_fk", + "tableFrom": "namespace_lint_check_config", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.namespaces": { + "name": "namespaces", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "enable_linting": { + "name": "enable_linting", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "enable_graph_pruning": { + "name": "enable_graph_pruning", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "enable_cache_warming": { + "name": "enable_cache_warming", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": { + "ns_organization_id_idx": { + "name": "ns_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ns_created_by_idx": { + "name": "ns_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "namespaces_organization_id_organizations_id_fk": { + "name": "namespaces_organization_id_organizations_id_fk", + "tableFrom": "namespaces", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "namespaces_created_by_users_id_fk": { + "name": "namespaces_created_by_users_id_fk", + "tableFrom": "namespaces", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "unique_name": { + "name": "unique_name", + "nullsNotDistinct": false, + "columns": [ + "name", + "organization_id" + ] + } + }, + "checkConstraints": {} + }, + "public.oidc_providers": { + "name": "oidc_providers", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "alias": { + "name": "alias", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "oidcp_organization_id_idx": { + "name": "oidcp_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "oidc_providers_organization_id_organizations_id_fk": { + "name": "oidc_providers_organization_id_organizations_id_fk", + "tableFrom": "oidc_providers", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "oidc_providers_alias_unique": { + "name": "oidc_providers_alias_unique", + "nullsNotDistinct": false, + "columns": [ + "alias" + ] + } + }, + "checkConstraints": {} + }, + "public.operation_change_overrides": { + "name": "operation_change_overrides", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "hash": { + "name": "hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "namespace_id": { + "name": "namespace_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "change_type": { + "name": "change_type", + "type": "schema_change_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "hash_change_idx": { + "name": "hash_change_idx", + "columns": [ + { + "expression": "hash", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "change_type", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "oco_created_by_idx": { + "name": "oco_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "operation_change_overrides_created_by_users_id_fk": { + "name": "operation_change_overrides_created_by_users_id_fk", + "tableFrom": "operation_change_overrides", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.operation_ignore_all_overrides": { + "name": "operation_ignore_all_overrides", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "hash": { + "name": "hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "namespace_id": { + "name": "namespace_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "hash_namespace_ignore_idx": { + "name": "hash_namespace_ignore_idx", + "columns": [ + { + "expression": "hash", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "oiao_created_by_idx": { + "name": "oiao_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "operation_ignore_all_overrides_created_by_users_id_fk": { + "name": "operation_ignore_all_overrides_created_by_users_id_fk", + "tableFrom": "operation_ignore_all_overrides", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_billing": { + "name": "organization_billing", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "plan": { + "name": "plan", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripe_customer_id": { + "name": "stripe_customer_id", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "organization_billing_idx": { + "name": "organization_billing_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "organization_billing_stripe_idx": { + "name": "organization_billing_stripe_idx", + "columns": [ + { + "expression": "stripe_customer_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_billing_organization_id_organizations_id_fk": { + "name": "organization_billing_organization_id_organizations_id_fk", + "tableFrom": "organization_billing", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_features": { + "name": "organization_features", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "feature": { + "name": "feature", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "limit": { + "name": "limit", + "type": "real", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "organization_feature_idx": { + "name": "organization_feature_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "feature", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "orgf_organization_id_idx": { + "name": "orgf_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_features_organization_id_organizations_id_fk": { + "name": "organization_features_organization_id_organizations_id_fk", + "tableFrom": "organization_features", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_integrations": { + "name": "organization_integrations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "events": { + "name": "events", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "type": { + "name": "type", + "type": "integration_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "organization_integration_idx": { + "name": "organization_integration_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "orgint_organization_id_idx": { + "name": "orgint_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_integrations_organization_id_organizations_id_fk": { + "name": "organization_integrations_organization_id_organizations_id_fk", + "tableFrom": "organization_integrations", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_invitations": { + "name": "organization_invitations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "invited_by": { + "name": "invited_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "accepted": { + "name": "accepted", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "orginv_organization_id_idx": { + "name": "orginv_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "orginv_user_id_idx": { + "name": "orginv_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "orginv_invited_by_idx": { + "name": "orginv_invited_by_idx", + "columns": [ + { + "expression": "invited_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_invitations_organization_id_organizations_id_fk": { + "name": "organization_invitations_organization_id_organizations_id_fk", + "tableFrom": "organization_invitations", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_invitations_user_id_users_id_fk": { + "name": "organization_invitations_user_id_users_id_fk", + "tableFrom": "organization_invitations", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_invitations_invited_by_users_id_fk": { + "name": "organization_invitations_invited_by_users_id_fk", + "tableFrom": "organization_invitations", + "tableTo": "users", + "columnsFrom": [ + "invited_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_member_roles": { + "name": "organization_member_roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_member_id": { + "name": "organization_member_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "member_role", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "organization_member_role_idx": { + "name": "organization_member_role_idx", + "columns": [ + { + "expression": "organization_member_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "role", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_member_roles_organization_member_id_organization_members_id_fk": { + "name": "organization_member_roles_organization_member_id_organization_members_id_fk", + "tableFrom": "organization_member_roles", + "tableTo": "organization_members", + "columnsFrom": [ + "organization_member_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_webhook_configs": { + "name": "organization_webhook_configs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "events": { + "name": "events", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "orgwc_organization_id_idx": { + "name": "orgwc_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_webhook_configs_organization_id_organizations_id_fk": { + "name": "organization_webhook_configs_organization_id_organizations_id_fk", + "tableFrom": "organization_webhook_configs", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organizations": { + "name": "organizations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "invite_code": { + "name": "invite_code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "is_deactivated": { + "name": "is_deactivated", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "deactivation_reason": { + "name": "deactivation_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "deactivated_at": { + "name": "deactivated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "orgs_created_by_idx": { + "name": "orgs_created_by_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organizations_user_id_users_id_fk": { + "name": "organizations_user_id_users_id_fk", + "tableFrom": "organizations", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organizations_slug_unique": { + "name": "organizations_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "checkConstraints": {} + }, + "public.organization_members": { + "name": "organization_members", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "organization_member_idx": { + "name": "organization_member_idx", + "columns": [ + { + "expression": "id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "unique_organization_member_idx": { + "name": "unique_organization_member_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "orgm_organization_id_idx": { + "name": "orgm_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_members_user_id_users_id_fk": { + "name": "organization_members_user_id_users_id_fk", + "tableFrom": "organization_members", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_members_organization_id_organizations_id_fk": { + "name": "organization_members_organization_id_organizations_id_fk", + "tableFrom": "organization_members", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.playground_scripts": { + "name": "playground_scripts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "type": { + "name": "type", + "type": "playground_script_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": { + "ps_organization_id_idx": { + "name": "ps_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ps_created_by_id_idx": { + "name": "ps_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "playground_scripts_organization_id_organizations_id_fk": { + "name": "playground_scripts_organization_id_organizations_id_fk", + "tableFrom": "playground_scripts", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "playground_scripts_created_by_id_users_id_fk": { + "name": "playground_scripts_created_by_id_users_id_fk", + "tableFrom": "playground_scripts", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_change_action": { + "name": "schema_check_change_action", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "change_type": { + "name": "change_type", + "type": "schema_change_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "change_message": { + "name": "change_message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_breaking": { + "name": "is_breaking", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "scca_schema_check_id_idx": { + "name": "scca_schema_check_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_change_action_schema_check_id_schema_checks_id_fk": { + "name": "schema_check_change_action_schema_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_change_action", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_change_operation_usage": { + "name": "schema_check_change_operation_usage", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_change_action_id": { + "name": "schema_check_change_action_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "hash": { + "name": "hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "first_seen_at": { + "name": "first_seen_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "last_seen_at": { + "name": "last_seen_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "is_safe_override": { + "name": "is_safe_override", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + } + }, + "indexes": { + "sccou_schema_check_change_action_id_idx": { + "name": "sccou_schema_check_change_action_id_idx", + "columns": [ + { + "expression": "schema_check_change_action_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sccou_federated_graph_id_idx": { + "name": "sccou_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_change_operation_usage_schema_check_change_action_id_schema_check_change_action_id_fk": { + "name": "schema_check_change_operation_usage_schema_check_change_action_id_schema_check_change_action_id_fk", + "tableFrom": "schema_check_change_operation_usage", + "tableTo": "schema_check_change_action", + "columnsFrom": [ + "schema_check_change_action_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_change_operation_usage_federated_graph_id_federated_graphs_id_fk": { + "name": "schema_check_change_operation_usage_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "schema_check_change_operation_usage", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_composition": { + "name": "schema_check_composition", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "composition_errors": { + "name": "composition_errors", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composition_warnings": { + "name": "composition_warnings", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composed_schema_sdl": { + "name": "composed_schema_sdl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_schema": { + "name": "client_schema", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "scc_schema_check_id_idx": { + "name": "scc_schema_check_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "scc_target_id_idx": { + "name": "scc_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_composition_schema_check_id_schema_checks_id_fk": { + "name": "schema_check_composition_schema_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_composition", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_composition_target_id_targets_id_fk": { + "name": "schema_check_composition_target_id_targets_id_fk", + "tableFrom": "schema_check_composition", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_federated_graphs": { + "name": "schema_check_federated_graphs", + "schema": "", + "columns": { + "check_id": { + "name": "check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "traffic_check_days": { + "name": "traffic_check_days", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "scfg_check_id_idx": { + "name": "scfg_check_id_idx", + "columns": [ + { + "expression": "check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "scfg_federated_graph_id_idx": { + "name": "scfg_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_federated_graphs_check_id_schema_checks_id_fk": { + "name": "schema_check_federated_graphs_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_federated_graphs", + "tableTo": "schema_checks", + "columnsFrom": [ + "check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_federated_graphs_federated_graph_id_federated_graphs_id_fk": { + "name": "schema_check_federated_graphs_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "schema_check_federated_graphs", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_graph_pruning_action": { + "name": "schema_check_graph_pruning_action", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "graph_pruning_rule": { + "name": "graph_pruning_rule", + "type": "graph_pruning_rules", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "field_path": { + "name": "field_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_error": { + "name": "is_error", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "location": { + "name": "location", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "scgpa_schema_check_id_idx": { + "name": "scgpa_schema_check_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "scgpa_federated_graph_id_idx": { + "name": "scgpa_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_graph_pruning_action_schema_check_id_schema_checks_id_fk": { + "name": "schema_check_graph_pruning_action_schema_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_graph_pruning_action", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_graph_pruning_action_federated_graph_id_federated_graphs_id_fk": { + "name": "schema_check_graph_pruning_action_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "schema_check_graph_pruning_action", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_lint_action": { + "name": "schema_check_lint_action", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "lint_rule_type": { + "name": "lint_rule_type", + "type": "lint_rules", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_error": { + "name": "is_error", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "location": { + "name": "location", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "sclact_schema_check_id_idx": { + "name": "sclact_schema_check_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_lint_action_schema_check_id_schema_checks_id_fk": { + "name": "schema_check_lint_action_schema_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_lint_action", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_checks": { + "name": "schema_checks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "is_composable": { + "name": "is_composable", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "is_deleted": { + "name": "is_deleted", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "has_breaking_changes": { + "name": "has_breaking_changes", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "has_lint_errors": { + "name": "has_lint_errors", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "has_graph_pruning_errors": { + "name": "has_graph_pruning_errors", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "has_client_traffic": { + "name": "has_client_traffic", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "client_traffic_check_skipped": { + "name": "client_traffic_check_skipped", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "lint_skipped": { + "name": "lint_skipped", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "graph_pruning_skipped": { + "name": "graph_pruning_skipped", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "proposed_subgraph_schema_sdl": { + "name": "proposed_subgraph_schema_sdl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "gh_details": { + "name": "gh_details", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "forced_success": { + "name": "forced_success", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "vcs_context": { + "name": "vcs_context", + "type": "json", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "sc_target_id_idx": { + "name": "sc_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_checks_target_id_targets_id_fk": { + "name": "schema_checks_target_id_targets_id_fk", + "tableFrom": "schema_checks", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_versions": { + "name": "schema_versions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "schema_sdl": { + "name": "schema_sdl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_schema": { + "name": "client_schema", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "is_v2_graph": { + "name": "is_v2_graph", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "sv_organization_id_idx": { + "name": "sv_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sv_target_id_idx": { + "name": "sv_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_versions_organization_id_organizations_id_fk": { + "name": "schema_versions_organization_id_organizations_id_fk", + "tableFrom": "schema_versions", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_version_change_action": { + "name": "schema_version_change_action", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_version_id": { + "name": "schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "change_type": { + "name": "change_type", + "type": "schema_change_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "change_message": { + "name": "change_message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "svca_schema_version_id_idx": { + "name": "svca_schema_version_id_idx", + "columns": [ + { + "expression": "schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_version_change_action_schema_version_id_schema_versions_id_fk": { + "name": "schema_version_change_action_schema_version_id_schema_versions_id_fk", + "tableFrom": "schema_version_change_action", + "tableTo": "schema_versions", + "columnsFrom": [ + "schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.sessions": { + "name": "sessions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "sessions_user_id_idx": { + "name": "sessions_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "sessions_user_id_users_id_fk": { + "name": "sessions_user_id_users_id_fk", + "tableFrom": "sessions", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "sessions_user_id_unique": { + "name": "sessions_user_id_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id" + ] + } + }, + "checkConstraints": {} + }, + "public.slack_installations": { + "name": "slack_installations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "slack_organization_id": { + "name": "slack_organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slack_organization_name": { + "name": "slack_organization_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slack_channel_id": { + "name": "slack_channel_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slack_channel_name": { + "name": "slack_channel_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slack_user_id": { + "name": "slack_user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "slack_installations_idx": { + "name": "slack_installations_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "slack_organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "slack_channel_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "slackinst_organization_id_idx": { + "name": "slackinst_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "slack_installations_organization_id_organizations_id_fk": { + "name": "slack_installations_organization_id_organizations_id_fk", + "tableFrom": "slack_installations", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.slack_integration_configs": { + "name": "slack_integration_configs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "integration_id": { + "name": "integration_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "slackintconf_integration_id_idx": { + "name": "slackintconf_integration_id_idx", + "columns": [ + { + "expression": "integration_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "slack_integration_configs_integration_id_organization_integrations_id_fk": { + "name": "slack_integration_configs_integration_id_organization_integrations_id_fk", + "tableFrom": "slack_integration_configs", + "tableTo": "organization_integrations", + "columnsFrom": [ + "integration_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.slack_schema_update_event_configs": { + "name": "slack_schema_update_event_configs", + "schema": "", + "columns": { + "slack_integration_config_id": { + "name": "slack_integration_config_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "slacksuec_slack_integration_config_id_idx": { + "name": "slacksuec_slack_integration_config_id_idx", + "columns": [ + { + "expression": "slack_integration_config_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "slacksuec_federated_graph_id_idx": { + "name": "slacksuec_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "slack_schema_update_event_configs_slack_integration_config_id_slack_integration_configs_id_fk": { + "name": "slack_schema_update_event_configs_slack_integration_config_id_slack_integration_configs_id_fk", + "tableFrom": "slack_schema_update_event_configs", + "tableTo": "slack_integration_configs", + "columnsFrom": [ + "slack_integration_config_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "slack_schema_update_event_configs_federated_graph_id_federated_graphs_id_fk": { + "name": "slack_schema_update_event_configs_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "slack_schema_update_event_configs", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "slack_schema_update_event_configs_slack_integration_config_id_federated_graph_id_pk": { + "name": "slack_schema_update_event_configs_slack_integration_config_id_federated_graph_id_pk", + "columns": [ + "slack_integration_config_id", + "federated_graph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.subgraph_members": { + "name": "subgraph_members", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_id": { + "name": "subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "unique_subgraph_member_idx": { + "name": "unique_subgraph_member_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sm_user_id_idx": { + "name": "sm_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sm_subgraph_id_idx": { + "name": "sm_subgraph_id_idx", + "columns": [ + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "subgraph_members_user_id_users_id_fk": { + "name": "subgraph_members_user_id_users_id_fk", + "tableFrom": "subgraph_members", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "subgraph_members_subgraph_id_subgraphs_id_fk": { + "name": "subgraph_members_subgraph_id_subgraphs_id_fk", + "tableFrom": "subgraph_members", + "tableTo": "subgraphs", + "columnsFrom": [ + "subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.subgraphs": { + "name": "subgraphs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "routing_url": { + "name": "routing_url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "subscription_url": { + "name": "subscription_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "subscription_protocol": { + "name": "subscription_protocol", + "type": "subscription_protocol", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'ws'" + }, + "websocket_subprotocol": { + "name": "websocket_subprotocol", + "type": "websocket_subprotocol", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'auto'" + }, + "schema_version_id": { + "name": "schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "is_feature_subgraph": { + "name": "is_feature_subgraph", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_event_driven_graph": { + "name": "is_event_driven_graph", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": { + "subgraphs_target_id_idx": { + "name": "subgraphs_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "subgraphs_schema_version_id_idx": { + "name": "subgraphs_schema_version_id_idx", + "columns": [ + { + "expression": "schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "subgraphs_schema_version_id_schema_versions_id_fk": { + "name": "subgraphs_schema_version_id_schema_versions_id_fk", + "tableFrom": "subgraphs", + "tableTo": "schema_versions", + "columnsFrom": [ + "schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "subgraphs_target_id_targets_id_fk": { + "name": "subgraphs_target_id_targets_id_fk", + "tableFrom": "subgraphs", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.federated_subgraphs": { + "name": "federated_subgraphs", + "schema": "", + "columns": { + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_id": { + "name": "subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "fs_federated_graph_id_idx": { + "name": "fs_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fs_subgraph_id_idx": { + "name": "fs_subgraph_id_idx", + "columns": [ + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "federated_subgraphs_federated_graph_id_federated_graphs_id_fk": { + "name": "federated_subgraphs_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "federated_subgraphs", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_subgraphs_subgraph_id_subgraphs_id_fk": { + "name": "federated_subgraphs_subgraph_id_subgraphs_id_fk", + "tableFrom": "federated_subgraphs", + "tableTo": "subgraphs", + "columnsFrom": [ + "subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "federated_subgraphs_federated_graph_id_subgraph_id_pk": { + "name": "federated_subgraphs_federated_graph_id_subgraph_id_pk", + "columns": [ + "federated_graph_id", + "subgraph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.target_label_matchers": { + "name": "target_label_matchers", + "schema": "", + "columns": { + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "label_matcher": { + "name": "label_matcher", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "tlm_target_id_idx": { + "name": "tlm_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "target_label_matchers_target_id_targets_id_fk": { + "name": "target_label_matchers_target_id_targets_id_fk", + "tableFrom": "target_label_matchers", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.targets": { + "name": "targets", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "target_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "labels": { + "name": "labels", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "readme": { + "name": "readme", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "organization_name_idx": { + "name": "organization_name_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "type", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "targets_organization_id_idx": { + "name": "targets_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "targets_created_by_idx": { + "name": "targets_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "targets_namespace_id_idx": { + "name": "targets_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "targets_organization_id_organizations_id_fk": { + "name": "targets_organization_id_organizations_id_fk", + "tableFrom": "targets", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "targets_created_by_users_id_fk": { + "name": "targets_created_by_users_id_fk", + "tableFrom": "targets", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "targets_namespace_id_namespaces_id_fk": { + "name": "targets_namespace_id_namespaces_id_fk", + "tableFrom": "targets", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "checkConstraints": {} + }, + "public.webhook_deliveries": { + "name": "webhook_deliveries", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "webhook_delivery_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "event_name": { + "name": "event_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "payload": { + "name": "payload", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "request_headers": { + "name": "request_headers", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "response_headers": { + "name": "response_headers", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "response_status_code": { + "name": "response_status_code", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "response_error_code": { + "name": "response_error_code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "error_message": { + "name": "error_message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "response_body": { + "name": "response_body", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "retry_count": { + "name": "retry_count", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "duration": { + "name": "duration", + "type": "real", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "original_delivery_id": { + "name": "original_delivery_id", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "webhd_organization_id_idx": { + "name": "webhd_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "webhd_created_by_id_idx": { + "name": "webhd_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "webhook_deliveries_created_by_id_users_id_fk": { + "name": "webhook_deliveries_created_by_id_users_id_fk", + "tableFrom": "webhook_deliveries", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "webhook_deliveries_organization_id_organizations_id_fk": { + "name": "webhook_deliveries_organization_id_organizations_id_fk", + "tableFrom": "webhook_deliveries", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.webhook_graph_schema_update": { + "name": "webhook_graph_schema_update", + "schema": "", + "columns": { + "webhook_id": { + "name": "webhook_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "wgsu_webhook_id_idx": { + "name": "wgsu_webhook_id_idx", + "columns": [ + { + "expression": "webhook_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "wgsu_federated_graph_id_idx": { + "name": "wgsu_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "webhook_graph_schema_update_webhook_id_organization_webhook_configs_id_fk": { + "name": "webhook_graph_schema_update_webhook_id_organization_webhook_configs_id_fk", + "tableFrom": "webhook_graph_schema_update", + "tableTo": "organization_webhook_configs", + "columnsFrom": [ + "webhook_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "webhook_graph_schema_update_federated_graph_id_federated_graphs_id_fk": { + "name": "webhook_graph_schema_update_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "webhook_graph_schema_update", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "webhook_graph_schema_update_webhook_id_federated_graph_id_pk": { + "name": "webhook_graph_schema_update_webhook_id_federated_graph_id_pk", + "columns": [ + "webhook_id", + "federated_graph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "enums": { + "public.git_installation_type": { + "name": "git_installation_type", + "schema": "public", + "values": [ + "PERSONAL", + "ORGANIZATION" + ] + }, + "public.graph_composition_subgraph_change_type": { + "name": "graph_composition_subgraph_change_type", + "schema": "public", + "values": [ + "added", + "removed", + "updated", + "unchanged" + ] + }, + "public.graph_pruning_rules": { + "name": "graph_pruning_rules", + "schema": "public", + "values": [ + "UNUSED_FIELDS", + "DEPRECATED_FIELDS", + "REQUIRE_DEPRECATION_BEFORE_DELETION" + ] + }, + "public.integration_type": { + "name": "integration_type", + "schema": "public", + "values": [ + "slack" + ] + }, + "public.lint_rules": { + "name": "lint_rules", + "schema": "public", + "values": [ + "FIELD_NAMES_SHOULD_BE_CAMEL_CASE", + "TYPE_NAMES_SHOULD_BE_PASCAL_CASE", + "SHOULD_NOT_HAVE_TYPE_PREFIX", + "SHOULD_NOT_HAVE_TYPE_SUFFIX", + "SHOULD_NOT_HAVE_INPUT_PREFIX", + "SHOULD_HAVE_INPUT_SUFFIX", + "SHOULD_NOT_HAVE_ENUM_PREFIX", + "SHOULD_NOT_HAVE_ENUM_SUFFIX", + "SHOULD_NOT_HAVE_INTERFACE_PREFIX", + "SHOULD_NOT_HAVE_INTERFACE_SUFFIX", + "ENUM_VALUES_SHOULD_BE_UPPER_CASE", + "ORDER_FIELDS", + "ORDER_ENUM_VALUES", + "ORDER_DEFINITIONS", + "ALL_TYPES_REQUIRE_DESCRIPTION", + "DISALLOW_CASE_INSENSITIVE_ENUM_VALUES", + "NO_TYPENAME_PREFIX_IN_TYPE_FIELDS", + "REQUIRE_DEPRECATION_REASON" + ] + }, + "public.lint_severity": { + "name": "lint_severity", + "schema": "public", + "values": [ + "warn", + "error" + ] + }, + "public.member_role": { + "name": "member_role", + "schema": "public", + "values": [ + "admin", + "developer", + "viewer" + ] + }, + "public.playground_script_type": { + "name": "playground_script_type", + "schema": "public", + "values": [ + "pre-flight", + "pre-operation", + "post-operation" + ] + }, + "public.schema_change_type": { + "name": "schema_change_type", + "schema": "public", + "values": [ + "FIELD_ARGUMENT_DESCRIPTION_CHANGED", + "FIELD_ARGUMENT_DEFAULT_CHANGED", + "FIELD_ARGUMENT_TYPE_CHANGED", + "DIRECTIVE_REMOVED", + "DIRECTIVE_ADDED", + "DIRECTIVE_DESCRIPTION_CHANGED", + "DIRECTIVE_LOCATION_ADDED", + "DIRECTIVE_LOCATION_REMOVED", + "DIRECTIVE_ARGUMENT_ADDED", + "DIRECTIVE_ARGUMENT_REMOVED", + "DIRECTIVE_ARGUMENT_DESCRIPTION_CHANGED", + "DIRECTIVE_ARGUMENT_DEFAULT_VALUE_CHANGED", + "DIRECTIVE_ARGUMENT_TYPE_CHANGED", + "ENUM_VALUE_REMOVED", + "ENUM_VALUE_ADDED", + "ENUM_VALUE_DESCRIPTION_CHANGED", + "ENUM_VALUE_DEPRECATION_REASON_CHANGED", + "ENUM_VALUE_DEPRECATION_REASON_ADDED", + "ENUM_VALUE_DEPRECATION_REASON_REMOVED", + "FIELD_REMOVED", + "FIELD_ADDED", + "FIELD_DESCRIPTION_CHANGED", + "FIELD_DESCRIPTION_ADDED", + "FIELD_DESCRIPTION_REMOVED", + "FIELD_DEPRECATION_ADDED", + "FIELD_DEPRECATION_REMOVED", + "FIELD_DEPRECATION_REASON_CHANGED", + "FIELD_DEPRECATION_REASON_ADDED", + "FIELD_DEPRECATION_REASON_REMOVED", + "FIELD_TYPE_CHANGED", + "FIELD_ARGUMENT_ADDED", + "FIELD_ARGUMENT_REMOVED", + "INPUT_FIELD_REMOVED", + "INPUT_FIELD_ADDED", + "INPUT_FIELD_DESCRIPTION_ADDED", + "INPUT_FIELD_DESCRIPTION_REMOVED", + "INPUT_FIELD_DESCRIPTION_CHANGED", + "INPUT_FIELD_DEFAULT_VALUE_CHANGED", + "INPUT_FIELD_TYPE_CHANGED", + "OBJECT_TYPE_INTERFACE_ADDED", + "OBJECT_TYPE_INTERFACE_REMOVED", + "SCHEMA_QUERY_TYPE_CHANGED", + "SCHEMA_MUTATION_TYPE_CHANGED", + "SCHEMA_SUBSCRIPTION_TYPE_CHANGED", + "TYPE_REMOVED", + "TYPE_ADDED", + "TYPE_KIND_CHANGED", + "TYPE_DESCRIPTION_CHANGED", + "TYPE_DESCRIPTION_REMOVED", + "TYPE_DESCRIPTION_ADDED", + "UNION_MEMBER_REMOVED", + "UNION_MEMBER_ADDED", + "DIRECTIVE_USAGE_UNION_MEMBER_ADDED", + "DIRECTIVE_USAGE_UNION_MEMBER_REMOVED", + "DIRECTIVE_USAGE_ENUM_ADDED", + "DIRECTIVE_USAGE_ENUM_REMOVED", + "DIRECTIVE_USAGE_ENUM_VALUE_ADDED", + "DIRECTIVE_USAGE_ENUM_VALUE_REMOVED", + "DIRECTIVE_USAGE_INPUT_OBJECT_ADDED", + "DIRECTIVE_USAGE_INPUT_OBJECT_REMOVED", + "DIRECTIVE_USAGE_FIELD_ADDED", + "DIRECTIVE_USAGE_FIELD_REMOVED", + "DIRECTIVE_USAGE_SCALAR_ADDED", + "DIRECTIVE_USAGE_SCALAR_REMOVED", + "DIRECTIVE_USAGE_OBJECT_ADDED", + "DIRECTIVE_USAGE_OBJECT_REMOVED", + "DIRECTIVE_USAGE_INTERFACE_ADDED", + "DIRECTIVE_USAGE_INTERFACE_REMOVED", + "DIRECTIVE_USAGE_ARGUMENT_DEFINITION_ADDED", + "DIRECTIVE_USAGE_ARGUMENT_DEFINITION_REMOVED", + "DIRECTIVE_USAGE_SCHEMA_ADDED", + "DIRECTIVE_USAGE_SCHEMA_REMOVED", + "DIRECTIVE_USAGE_FIELD_DEFINITION_ADDED", + "DIRECTIVE_USAGE_FIELD_DEFINITION_REMOVED", + "DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_ADDED", + "DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_REMOVED" + ] + }, + "public.subscription_protocol": { + "name": "subscription_protocol", + "schema": "public", + "values": [ + "ws", + "sse", + "sse_post" + ] + }, + "public.status": { + "name": "status", + "schema": "public", + "values": [ + "incomplete", + "incomplete_expired", + "trialing", + "active", + "past_due", + "canceled", + "unpaid", + "paused" + ] + }, + "public.target_type": { + "name": "target_type", + "schema": "public", + "values": [ + "federated", + "subgraph" + ] + }, + "public.webhook_delivery_type": { + "name": "webhook_delivery_type", + "schema": "public", + "values": [ + "webhook", + "slack", + "admission" + ] + }, + "public.websocket_subprotocol": { + "name": "websocket_subprotocol", + "schema": "public", + "values": [ + "auto", + "graphql-ws", + "graphql-transport-ws" + ] + } + }, + "schemas": {}, + "sequences": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/controlplane/migrations/meta/_journal.json b/controlplane/migrations/meta/_journal.json index 52a2277527..9c56645b0b 100644 --- a/controlplane/migrations/meta/_journal.json +++ b/controlplane/migrations/meta/_journal.json @@ -771,6 +771,13 @@ "when": 1736892616872, "tag": "0109_famous_mother_askani", "breakpoints": true + }, + { + "idx": 110, + "version": "7", + "when": 1738064397215, + "tag": "0110_material_stephen_strange", + "breakpoints": true } ] } \ No newline at end of file diff --git a/controlplane/package.json b/controlplane/package.json index f20f199a49..f55d291093 100644 --- a/controlplane/package.json +++ b/controlplane/package.json @@ -1,6 +1,6 @@ { "name": "controlplane", - "version": "0.121.1", + "version": "0.121.2", "private": true, "description": "WunderGraph Cosmo Controlplane", "type": "module", @@ -47,7 +47,7 @@ "@connectrpc/connect-node": "^1.4.0", "@fastify/cors": "^9.0.1", "@graphql-eslint/eslint-plugin": "^3.20.1", - "@graphql-inspector/core": "^5.0.2", + "@graphql-inspector/core": "^6.2.1", "@graphql-tools/utils": "^10.1.2", "@keycloak/keycloak-admin-client": "^25.0.2", "@octokit/webhooks-types": "^7.5.0", @@ -115,4 +115,4 @@ "typescript": "5.5.2", "vitest": "^2.1.8" } -} +} \ No newline at end of file diff --git a/controlplane/src/core/bufservices/federated-graph/updateFederatedGraph.ts b/controlplane/src/core/bufservices/federated-graph/updateFederatedGraph.ts index c1e1dcb215..5837e86571 100644 --- a/controlplane/src/core/bufservices/federated-graph/updateFederatedGraph.ts +++ b/controlplane/src/core/bufservices/federated-graph/updateFederatedGraph.ts @@ -161,25 +161,28 @@ export function updateFederatedGraph( targetNamespaceDisplayName: federatedGraph.namespace, }); - orgWebhooks.send( - { - eventName: OrganizationEventName.FEDERATED_GRAPH_SCHEMA_UPDATED, - payload: { - federated_graph: { - id: federatedGraph.id, - name: federatedGraph.name, - namespace: federatedGraph.namespace, + // Send webhook event only when we update label matchers because this causes schema update + if (req.labelMatchers.length > 0 || req.unsetLabelMatchers) { + orgWebhooks.send( + { + eventName: OrganizationEventName.FEDERATED_GRAPH_SCHEMA_UPDATED, + payload: { + federated_graph: { + id: federatedGraph.id, + name: federatedGraph.name, + namespace: federatedGraph.namespace, + }, + organization: { + id: authContext.organizationId, + slug: authContext.organizationSlug, + }, + errors: compositionErrors.length > 0 || deploymentErrors.length > 0, + actor_id: authContext.userId, }, - organization: { - id: authContext.organizationId, - slug: authContext.organizationSlug, - }, - errors: compositionErrors.length > 0 || deploymentErrors.length > 0, - actor_id: authContext.userId, }, - }, - authContext.userId, - ); + authContext.userId, + ); + } if (compositionErrors.length > 0) { return { diff --git a/controlplane/src/core/composition/schemaCheck.ts b/controlplane/src/core/composition/schemaCheck.ts index d61965bfb6..e47b75226b 100644 --- a/controlplane/src/core/composition/schemaCheck.ts +++ b/controlplane/src/core/composition/schemaCheck.ts @@ -1,11 +1,11 @@ -import { Change, ChangeType, CriticalityLevel, diff } from '@graphql-inspector/core'; -import { GraphQLSchema } from 'graphql'; +import { ChangeType, CriticalityLevel, diff, TypeOfChangeType } from '@graphql-inspector/core'; import { EnumStatusCode } from '@wundergraph/cosmo-connect/dist/common/common_pb'; +import { GraphQLSchema } from 'graphql'; import { buildSchema } from './composition.js'; export interface SchemaDiff { message: string; - changeType: ChangeType; + changeType: TypeOfChangeType; // path is the path to the field or type that changed path: string; isBreaking: boolean; diff --git a/controlplane/src/core/services/OidcProvider.ts b/controlplane/src/core/services/OidcProvider.ts index e74670bf79..06ed78de6a 100644 --- a/controlplane/src/core/services/OidcProvider.ts +++ b/controlplane/src/core/services/OidcProvider.ts @@ -72,7 +72,7 @@ export default class OidcProvider { if (endpoint === 'login.microsoftonline.com') { key = 'groups'; } - const claims = `[{ "key": "${key}", "value": "${mapper.ssoGroup}" }]`; + const claims = `[{ "key": "${key}", "value": "${mapper.ssoGroup.trim()}" }]`; let keycloakGroupName; switch (mapper.role) { diff --git a/controlplane/src/core/services/SchemaUsageTrafficInspector.ts b/controlplane/src/core/services/SchemaUsageTrafficInspector.ts index 125a2091fc..2fe6c94400 100644 --- a/controlplane/src/core/services/SchemaUsageTrafficInspector.ts +++ b/controlplane/src/core/services/SchemaUsageTrafficInspector.ts @@ -238,7 +238,31 @@ export function toInspectorChange(change: SchemaDiff, schemaCheckId: string): In case ChangeType.TypeDescriptionAdded: case ChangeType.TypeAdded: case ChangeType.FieldAdded: - case ChangeType.UnionMemberAdded: { + case ChangeType.UnionMemberAdded: + case ChangeType.DirectiveUsageUnionMemberAdded: + case ChangeType.DirectiveUsageUnionMemberRemoved: + case ChangeType.DirectiveUsageEnumAdded: + case ChangeType.DirectiveUsageEnumRemoved: + case ChangeType.DirectiveUsageEnumValueAdded: + case ChangeType.DirectiveUsageEnumValueRemoved: + case ChangeType.DirectiveUsageInputObjectAdded: + case ChangeType.DirectiveUsageInputObjectRemoved: + case ChangeType.DirectiveUsageFieldAdded: + case ChangeType.DirectiveUsageFieldRemoved: + case ChangeType.DirectiveUsageScalarAdded: + case ChangeType.DirectiveUsageScalarRemoved: + case ChangeType.DirectiveUsageObjectAdded: + case ChangeType.DirectiveUsageObjectRemoved: + case ChangeType.DirectiveUsageInterfaceAdded: + case ChangeType.DirectiveUsageInterfaceRemoved: + case ChangeType.DirectiveUsageArgumentDefinitionAdded: + case ChangeType.DirectiveUsageArgumentDefinitionRemoved: + case ChangeType.DirectiveUsageSchemaAdded: + case ChangeType.DirectiveUsageSchemaRemoved: + case ChangeType.DirectiveUsageFieldDefinitionAdded: + case ChangeType.DirectiveUsageFieldDefinitionRemoved: + case ChangeType.DirectiveUsageInputFieldDefinitionAdded: + case ChangeType.DirectiveUsageInputFieldDefinitionRemoved: { return null; } // 1. When a type is removed we know the exact type name e.g. 'Engineer'. We have no field name. diff --git a/controlplane/src/db/schema.ts b/controlplane/src/db/schema.ts index 07593a2c23..46d2ba5154 100644 --- a/controlplane/src/db/schema.ts +++ b/controlplane/src/db/schema.ts @@ -600,7 +600,7 @@ export const schemaVersion = pgTable( }, ); -// https://github.com/kamilkisiela/graphql-inspector/blob/f3b9ed7e277f1a4928da7d0fdc212685ff77752a/packages/core/src/diff/changes/change.ts +// https://github.com/kamilkisiela/graphql-inspector/blob/master/packages/core/src/diff/changes/change.ts export const schemaChangeTypeEnum = pgEnum('schema_change_type', [ 'FIELD_ARGUMENT_DESCRIPTION_CHANGED', 'FIELD_ARGUMENT_DEFAULT_CHANGED', @@ -654,6 +654,30 @@ export const schemaChangeTypeEnum = pgEnum('schema_change_type', [ 'TYPE_DESCRIPTION_ADDED', 'UNION_MEMBER_REMOVED', 'UNION_MEMBER_ADDED', + 'DIRECTIVE_USAGE_UNION_MEMBER_ADDED', + 'DIRECTIVE_USAGE_UNION_MEMBER_REMOVED', + 'DIRECTIVE_USAGE_ENUM_ADDED', + 'DIRECTIVE_USAGE_ENUM_REMOVED', + 'DIRECTIVE_USAGE_ENUM_VALUE_ADDED', + 'DIRECTIVE_USAGE_ENUM_VALUE_REMOVED', + 'DIRECTIVE_USAGE_INPUT_OBJECT_ADDED', + 'DIRECTIVE_USAGE_INPUT_OBJECT_REMOVED', + 'DIRECTIVE_USAGE_FIELD_ADDED', + 'DIRECTIVE_USAGE_FIELD_REMOVED', + 'DIRECTIVE_USAGE_SCALAR_ADDED', + 'DIRECTIVE_USAGE_SCALAR_REMOVED', + 'DIRECTIVE_USAGE_OBJECT_ADDED', + 'DIRECTIVE_USAGE_OBJECT_REMOVED', + 'DIRECTIVE_USAGE_INTERFACE_ADDED', + 'DIRECTIVE_USAGE_INTERFACE_REMOVED', + 'DIRECTIVE_USAGE_ARGUMENT_DEFINITION_ADDED', + 'DIRECTIVE_USAGE_ARGUMENT_DEFINITION_REMOVED', + 'DIRECTIVE_USAGE_SCHEMA_ADDED', + 'DIRECTIVE_USAGE_SCHEMA_REMOVED', + 'DIRECTIVE_USAGE_FIELD_DEFINITION_ADDED', + 'DIRECTIVE_USAGE_FIELD_DEFINITION_REMOVED', + 'DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_ADDED', + 'DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_REMOVED', ] as const); export const schemaVersionChangeAction = pgTable( diff --git a/controlplane/src/types/index.ts b/controlplane/src/types/index.ts index 0433713f6f..e0563c78fe 100644 --- a/controlplane/src/types/index.ts +++ b/controlplane/src/types/index.ts @@ -327,6 +327,30 @@ export enum SchemaChangeType { TYPE_DESCRIPTION_ADDED = 'TYPE_DESCRIPTION_ADDED', UNION_MEMBER_REMOVED = 'UNION_MEMBER_REMOVED', UNION_MEMBER_ADDED = 'UNION_MEMBER_ADDED', + DIRECTIVE_USAGE_UNION_MEMBER_ADDED = 'DIRECTIVE_USAGE_UNION_MEMBER_ADDED', + DIRECTIVE_USAGE_UNION_MEMBER_REMOVED = 'DIRECTIVE_USAGE_UNION_MEMBER_REMOVED', + DIRECTIVE_USAGE_ENUM_ADDED = 'DIRECTIVE_USAGE_ENUM_ADDED', + DIRECTIVE_USAGE_ENUM_REMOVED = 'DIRECTIVE_USAGE_ENUM_REMOVED', + DIRECTIVE_USAGE_ENUM_VALUE_ADDED = 'DIRECTIVE_USAGE_ENUM_VALUE_ADDED', + DIRECTIVE_USAGE_ENUM_VALUE_REMOVED = 'DIRECTIVE_USAGE_ENUM_VALUE_REMOVED', + DIRECTIVE_USAGE_INPUT_OBJECT_ADDED = 'DIRECTIVE_USAGE_INPUT_OBJECT_ADDED', + DIRECTIVE_USAGE_INPUT_OBJECT_REMOVED = 'DIRECTIVE_USAGE_INPUT_OBJECT_REMOVED', + DIRECTIVE_USAGE_FIELD_ADDED = 'DIRECTIVE_USAGE_FIELD_ADDED', + DIRECTIVE_USAGE_FIELD_REMOVED = 'DIRECTIVE_USAGE_FIELD_REMOVED', + DIRECTIVE_USAGE_SCALAR_ADDED = 'DIRECTIVE_USAGE_SCALAR_ADDED', + DIRECTIVE_USAGE_SCALAR_REMOVED = 'DIRECTIVE_USAGE_SCALAR_REMOVED', + DIRECTIVE_USAGE_OBJECT_ADDED = 'DIRECTIVE_USAGE_OBJECT_ADDED', + DIRECTIVE_USAGE_OBJECT_REMOVED = 'DIRECTIVE_USAGE_OBJECT_REMOVED', + DIRECTIVE_USAGE_INTERFACE_ADDED = 'DIRECTIVE_USAGE_INTERFACE_ADDED', + DIRECTIVE_USAGE_INTERFACE_REMOVED = 'DIRECTIVE_USAGE_INTERFACE_REMOVED', + DIRECTIVE_USAGE_ARGUMENT_DEFINITION_ADDED = 'DIRECTIVE_USAGE_ARGUMENT_DEFINITION_ADDED', + DIRECTIVE_USAGE_ARGUMENT_DEFINITION_REMOVED = 'DIRECTIVE_USAGE_ARGUMENT_DEFINITION_REMOVED', + DIRECTIVE_USAGE_SCHEMA_ADDED = 'DIRECTIVE_USAGE_SCHEMA_ADDED', + DIRECTIVE_USAGE_SCHEMA_REMOVED = 'DIRECTIVE_USAGE_SCHEMA_REMOVED', + DIRECTIVE_USAGE_FIELD_DEFINITION_ADDED = 'DIRECTIVE_USAGE_FIELD_DEFINITION_ADDED', + DIRECTIVE_USAGE_FIELD_DEFINITION_REMOVED = 'DIRECTIVE_USAGE_FIELD_DEFINITION_REMOVED', + DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_ADDED = 'DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_ADDED', + DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_REMOVED = 'DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_REMOVED', } export interface JWTEncodeParams { diff --git a/controlplane/test/breaking-changes.test.ts b/controlplane/test/breaking-changes.test.ts index 2098d7328d..2348f12048 100644 --- a/controlplane/test/breaking-changes.test.ts +++ b/controlplane/test/breaking-changes.test.ts @@ -97,4 +97,68 @@ describe('BreakingChanges', () => { expect(schemaChanges.breakingChanges[0].changeType).toBe(SchemaChangeType.ENUM_VALUE_REMOVED); } }); + + test('Should cause non breaking changes on adding directives to fields', async () => { + const schemaA = 'type Query { hello: String! @shareable } type User { name: String! }'; + const schemaB = 'type Query { hello: String! @shareable } type User { name: String! @shareable }'; + + const schemaChanges = await getDiffBetweenGraphs(schemaA, schemaB); + + expect(schemaChanges.kind).toBe('success'); + + if (schemaChanges.kind === 'success') { + expect(schemaChanges.nonBreakingChanges.length).toBe(1); + expect(schemaChanges.nonBreakingChanges[0].message).toBe("Directive 'shareable' was added to field 'User.name'"); + expect(schemaChanges.nonBreakingChanges[0].path).toBe('User.name.shareable'); + expect(schemaChanges.nonBreakingChanges[0].changeType).toBe(SchemaChangeType.DIRECTIVE_USAGE_FIELD_DEFINITION_ADDED); + } + }); + + test('Should cause non breaking changes on removing directives from fields', async () => { + const schemaA = 'type Query { hello: String! @shareable } type User { name: String! @shareable }'; + const schemaB = 'type Query { hello: String! @shareable } type User { name: String! }'; + + const schemaChanges = await getDiffBetweenGraphs(schemaA, schemaB); + + expect(schemaChanges.kind).toBe('success'); + + if (schemaChanges.kind === 'success') { + expect(schemaChanges.nonBreakingChanges.length).toBe(1); + expect(schemaChanges.nonBreakingChanges[0].message).toBe("Directive 'shareable' was removed from field 'User.name'"); + expect(schemaChanges.nonBreakingChanges[0].path).toBe('User.name.shareable'); + expect(schemaChanges.nonBreakingChanges[0].changeType).toBe(SchemaChangeType.DIRECTIVE_USAGE_FIELD_DEFINITION_REMOVED); + } + }); + + test('Should cause non breaking changes on adding directives to objects', async () => { + const schemaA = 'type Query { hello: String! } type User { name: String! }'; + const schemaB = 'type Query { hello: String! } type User @key(fields: "name") { name: String! }'; + + const schemaChanges = await getDiffBetweenGraphs(schemaA, schemaB); + + expect(schemaChanges.kind).toBe('success'); + + if (schemaChanges.kind === 'success') { + expect(schemaChanges.nonBreakingChanges.length).toBe(1); + expect(schemaChanges.nonBreakingChanges[0].message).toBe("Directive 'key' was added to object 'User'"); + expect(schemaChanges.nonBreakingChanges[0].path).toBe('User.key'); + expect(schemaChanges.nonBreakingChanges[0].changeType).toBe(SchemaChangeType.DIRECTIVE_USAGE_OBJECT_ADDED); + } + }); + + test('Should cause non breaking changes on removing directives from objects', async () => { + const schemaA = 'type Query { hello: String! } type User @key(fields: "name") { name: String! }'; + const schemaB = 'type Query { hello: String! } type User { name: String! }'; + + const schemaChanges = await getDiffBetweenGraphs(schemaA, schemaB); + + expect(schemaChanges.kind).toBe('success'); + + if (schemaChanges.kind === 'success') { + expect(schemaChanges.nonBreakingChanges.length).toBe(1); + expect(schemaChanges.nonBreakingChanges[0].message).toBe("Directive 'key' was removed from object 'User'"); + expect(schemaChanges.nonBreakingChanges[0].path).toBe('User.key'); + expect(schemaChanges.nonBreakingChanges[0].changeType).toBe(SchemaChangeType.DIRECTIVE_USAGE_OBJECT_REMOVED); + } + }); }); diff --git a/demo/go.mod b/demo/go.mod index 4ad0406c01..c4050d3f5a 100644 --- a/demo/go.mod +++ b/demo/go.mod @@ -15,7 +15,7 @@ require ( github.com/wundergraph/cosmo/composition-go v0.0.0-20240124120900-5effe48a4a1d github.com/wundergraph/cosmo/router v0.0.0-20250119174948-4b991294658e github.com/wundergraph/cosmo/router-tests v0.0.0-20241213115435-a249dba8c52a - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.141 + github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.145 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1 diff --git a/demo/go.sum b/demo/go.sum index c4457ed1ca..33ab57ca5e 100644 --- a/demo/go.sum +++ b/demo/go.sum @@ -312,8 +312,8 @@ github.com/wundergraph/cosmo/router v0.0.0-20250119174948-4b991294658e h1:ee4fu7 github.com/wundergraph/cosmo/router v0.0.0-20250119174948-4b991294658e/go.mod h1:ImqCvxvvNOy1UxbuTnFtin/CDBFHoFqrZly3rC2z+e0= github.com/wundergraph/cosmo/router-tests v0.0.0-20241213115435-a249dba8c52a h1:GVLe85f5g+G0IOorDBBNTfm5Ua9DO0vuVY7ReSTOEbQ= github.com/wundergraph/cosmo/router-tests v0.0.0-20241213115435-a249dba8c52a/go.mod h1:I+SFviFnd3BHlPmYn+ckmzQyDB9+/c8RZJo4t6VQAds= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.141 h1:lPwwEJRYYuJflv7fhgwaWKt6FKRdX5CJ1Yp6RWzzKDA= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.141/go.mod h1:B7eV0Qh8Lop9QzIOQcsvKp3S0ejfC6mgyWoJnI917yQ= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.145 h1:3JuBmRux6YB/UZgh6COvgLXzQhMIsdHV7A02NsYdAVE= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.145/go.mod h1:B7eV0Qh8Lop9QzIOQcsvKp3S0ejfC6mgyWoJnI917yQ= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= diff --git a/graphqlmetrics/CHANGELOG.md b/graphqlmetrics/CHANGELOG.md index a6716bcace..84a3af7e0e 100644 --- a/graphqlmetrics/CHANGELOG.md +++ b/graphqlmetrics/CHANGELOG.md @@ -4,6 +4,10 @@ Binaries are attached to the github release otherwise all images can be found [h All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.32.2](https://github.com/wundergraph/cosmo/compare/graphqlmetrics@0.32.1...graphqlmetrics@0.32.2) (2025-01-29) + +**Note:** Version bump only for package graphqlmetrics + ## [0.32.1](https://github.com/wundergraph/cosmo/compare/graphqlmetrics@0.32.0...graphqlmetrics@0.32.1) (2025-01-19) ### Bug Fixes diff --git a/graphqlmetrics/core/metrics_service.go b/graphqlmetrics/core/metrics_service.go index 4aca279430..bc1a2c4008 100644 --- a/graphqlmetrics/core/metrics_service.go +++ b/graphqlmetrics/core/metrics_service.go @@ -10,11 +10,12 @@ import ( "sync" "time" + "github.com/dgraph-io/ristretto/v2" + "connectrpc.com/connect" "github.com/ClickHouse/clickhouse-go/v2" "github.com/ClickHouse/clickhouse-go/v2/lib/driver" "github.com/avast/retry-go" - "github.com/dgraph-io/ristretto" graphqlmetricsv1 "github.com/wundergraph/cosmo/graphqlmetrics/gen/proto/wg/cosmo/graphqlmetrics/v1" "github.com/wundergraph/cosmo/graphqlmetrics/pkg/batchprocessor" utils "github.com/wundergraph/cosmo/graphqlmetrics/pkg/utils" diff --git a/graphqlmetrics/go.mod b/graphqlmetrics/go.mod index b5c894b24d..c49c20efa7 100644 --- a/graphqlmetrics/go.mod +++ b/graphqlmetrics/go.mod @@ -7,7 +7,7 @@ require ( github.com/ClickHouse/clickhouse-go/v2 v2.30.0 github.com/amacneil/dbmate/v2 v2.12.0 github.com/avast/retry-go v3.0.0+incompatible - github.com/dgraph-io/ristretto v0.1.2-0.20240723054643-f5997484152c + github.com/dgraph-io/ristretto/v2 v2.1.0 github.com/go-playground/validator/v10 v10.22.1 github.com/golang-jwt/jwt/v5 v5.2.0 github.com/google/uuid v1.6.0 @@ -17,7 +17,7 @@ require ( github.com/prometheus/client_golang v1.19.1 github.com/prometheus/client_model v0.6.1 github.com/rs/xid v1.5.0 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/exporters/prometheus v0.50.0 go.opentelemetry.io/otel/metric v1.28.0 @@ -59,7 +59,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.31.0 // indirect golang.org/x/net v0.33.0 // indirect - golang.org/x/sys v0.28.0 // indirect + golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/graphqlmetrics/go.sum b/graphqlmetrics/go.sum index 6e83617bf6..7d1f0ae737 100644 --- a/graphqlmetrics/go.sum +++ b/graphqlmetrics/go.sum @@ -17,8 +17,8 @@ github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto v0.1.2-0.20240723054643-f5997484152c h1:V2+MhiAoTwUNENo9PFoz2NSr0VDJEzIARLuzb30YyqA= -github.com/dgraph-io/ristretto v0.1.2-0.20240723054643-f5997484152c/go.mod h1:swkazRqnUf1N62d0Nutz7KIj2UKqsm/H8tD0nBJAXqM= +github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I= +github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -111,8 +111,8 @@ github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= @@ -172,8 +172,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/graphqlmetrics/package.json b/graphqlmetrics/package.json index 43d918b3a6..df5471448a 100644 --- a/graphqlmetrics/package.json +++ b/graphqlmetrics/package.json @@ -1,6 +1,6 @@ { "name": "graphqlmetrics", - "version": "0.32.1", + "version": "0.32.2", "private": true, "description": "Placeholder package to simplify versioning and releasing with lerna.", "keywords": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6711b75c4d..439e396322 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -387,8 +387,8 @@ importers: specifier: ^3.20.1 version: 3.20.1(@babel/core@7.24.5)(@types/node@18.19.21)(encoding@0.1.13)(graphql@16.9.0) '@graphql-inspector/core': - specifier: ^5.0.2 - version: 5.0.2(graphql@16.9.0) + specifier: ^6.2.1 + version: 6.2.1(graphql@16.9.0) '@graphql-tools/utils': specifier: ^10.1.2 version: 10.1.2(graphql@16.9.0) @@ -3276,9 +3276,9 @@ packages: peerDependencies: graphql: 16.9.0 - '@graphql-inspector/core@5.0.2': - resolution: {integrity: sha512-pXHPCggwLmgi5NACPPV4qyf2xW/sQONnu6ZqCAid3k/S2APmVYN4Z3OvxvLA12NFhzby5Sz5K4fRsId43cK8ww==} - engines: {node: '>=16.0.0'} + '@graphql-inspector/core@6.2.1': + resolution: {integrity: sha512-PxL3fNblfKx/h/B4MIXN1yGHsGdY+uuySz8MAy/ogDk7eU1+va2zDZicLMEBHf7nsKfHWCAN1WFtD1GQP824NQ==} + engines: {node: '>=18.0.0'} peerDependencies: graphql: 16.9.0 @@ -7864,9 +7864,9 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} + dependency-graph@1.0.0: + resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} + engines: {node: '>=4'} deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} @@ -10447,6 +10447,10 @@ packages: object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} @@ -13156,7 +13160,7 @@ snapshots: '@smithy/util-middleware': 2.1.3 '@smithy/util-retry': 2.1.3 '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -13199,7 +13203,7 @@ snapshots: '@smithy/util-middleware': 2.1.3 '@smithy/util-retry': 2.1.3 '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -13243,7 +13247,7 @@ snapshots: '@smithy/util-middleware': 2.1.3 '@smithy/util-retry': 2.1.3 '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -13255,14 +13259,14 @@ snapshots: '@smithy/smithy-client': 2.4.2 '@smithy/types': 2.10.1 fast-xml-parser: 4.2.5 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/credential-provider-env@3.523.0': dependencies: '@aws-sdk/types': 3.523.0 '@smithy/property-provider': 2.1.3 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/credential-provider-http@3.525.0': dependencies: @@ -13274,7 +13278,7 @@ snapshots: '@smithy/smithy-client': 2.4.2 '@smithy/types': 2.10.1 '@smithy/util-stream': 2.1.3 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/credential-provider-ini@3.529.1(@aws-sdk/credential-provider-node@3.529.1)': dependencies: @@ -13288,7 +13292,7 @@ snapshots: '@smithy/property-provider': 2.1.3 '@smithy/shared-ini-file-loader': 2.3.4 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt @@ -13306,7 +13310,7 @@ snapshots: '@smithy/property-provider': 2.1.3 '@smithy/shared-ini-file-loader': 2.3.4 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -13316,7 +13320,7 @@ snapshots: '@smithy/property-provider': 2.1.3 '@smithy/shared-ini-file-loader': 2.3.4 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/credential-provider-sso@3.529.1(@aws-sdk/credential-provider-node@3.529.1)': dependencies: @@ -13326,7 +13330,7 @@ snapshots: '@smithy/property-provider': 2.1.3 '@smithy/shared-ini-file-loader': 2.3.4 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt @@ -13337,7 +13341,7 @@ snapshots: '@aws-sdk/types': 3.523.0 '@smithy/property-provider': 2.1.3 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt @@ -13350,14 +13354,14 @@ snapshots: '@smithy/protocol-http': 3.2.1 '@smithy/types': 2.10.1 '@smithy/util-config-provider': 2.2.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/middleware-expect-continue@3.523.0': dependencies: '@aws-sdk/types': 3.523.0 '@smithy/protocol-http': 3.2.1 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/middleware-flexible-checksums@3.523.0': dependencies: @@ -13368,33 +13372,33 @@ snapshots: '@smithy/protocol-http': 3.2.1 '@smithy/types': 2.10.1 '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/middleware-host-header@3.523.0': dependencies: '@aws-sdk/types': 3.523.0 '@smithy/protocol-http': 3.2.1 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/middleware-location-constraint@3.523.0': dependencies: '@aws-sdk/types': 3.523.0 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/middleware-logger@3.523.0': dependencies: '@aws-sdk/types': 3.523.0 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/middleware-recursion-detection@3.523.0': dependencies: '@aws-sdk/types': 3.523.0 '@smithy/protocol-http': 3.2.1 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/middleware-sdk-s3@3.525.0': dependencies: @@ -13406,7 +13410,7 @@ snapshots: '@smithy/smithy-client': 2.4.2 '@smithy/types': 2.10.1 '@smithy/util-config-provider': 2.2.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/middleware-signing@3.523.0': dependencies: @@ -13416,13 +13420,13 @@ snapshots: '@smithy/signature-v4': 2.1.3 '@smithy/types': 2.10.1 '@smithy/util-middleware': 2.1.3 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/middleware-ssec@3.523.0': dependencies: '@aws-sdk/types': 3.523.0 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/middleware-user-agent@3.525.0': dependencies: @@ -13430,7 +13434,7 @@ snapshots: '@aws-sdk/util-endpoints': 3.525.0 '@smithy/protocol-http': 3.2.1 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/region-config-resolver@3.525.0': dependencies: @@ -13439,7 +13443,7 @@ snapshots: '@smithy/types': 2.10.1 '@smithy/util-config-provider': 2.2.1 '@smithy/util-middleware': 2.1.3 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/signature-v4-multi-region@3.525.0': dependencies: @@ -13448,7 +13452,7 @@ snapshots: '@smithy/protocol-http': 3.2.1 '@smithy/signature-v4': 2.1.3 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/token-providers@3.529.1(@aws-sdk/credential-provider-node@3.529.1)': dependencies: @@ -13457,7 +13461,7 @@ snapshots: '@smithy/property-provider': 2.1.3 '@smithy/shared-ini-file-loader': 2.3.4 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt @@ -13465,50 +13469,50 @@ snapshots: '@aws-sdk/types@3.433.0': dependencies: '@smithy/types': 2.4.0 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/types@3.523.0': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/util-arn-parser@3.495.0': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/util-endpoints@3.525.0': dependencies: '@aws-sdk/types': 3.523.0 '@smithy/types': 2.10.1 '@smithy/util-endpoints': 1.1.4 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/util-locate-window@3.310.0': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/util-user-agent-browser@3.523.0': dependencies: '@aws-sdk/types': 3.523.0 '@smithy/types': 2.10.1 bowser: 2.11.0 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/util-user-agent-node@3.525.0': dependencies: '@aws-sdk/types': 3.523.0 '@smithy/node-config-provider': 2.2.4 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/util-utf8-browser@3.259.0': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@aws-sdk/xml-builder@3.523.0': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@babel/code-frame@7.22.5': dependencies: @@ -15508,11 +15512,11 @@ snapshots: - supports-color - utf-8-validate - '@graphql-inspector/core@5.0.2(graphql@16.9.0)': + '@graphql-inspector/core@6.2.1(graphql@16.9.0)': dependencies: - dependency-graph: 0.11.0 + dependency-graph: 1.0.0 graphql: 16.9.0 - object-inspect: 1.12.3 + object-inspect: 1.13.2 tslib: 2.6.2 '@graphql-tools/batch-execute@8.5.22(graphql@16.9.0)': @@ -15520,7 +15524,7 @@ snapshots: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) dataloader: 2.2.2 graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 value-or-promise: 1.0.12 '@graphql-tools/code-file-loader@7.3.23(@babel/core@7.24.5)(graphql@16.9.0)': @@ -15529,7 +15533,7 @@ snapshots: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) globby: 11.1.0 graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 unixify: 1.0.0 transitivePeerDependencies: - '@babel/core' @@ -15543,7 +15547,7 @@ snapshots: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) dataloader: 2.2.2 graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 value-or-promise: 1.0.12 '@graphql-tools/executor-graphql-ws@0.0.14(graphql@16.9.0)': @@ -15554,7 +15558,7 @@ snapshots: graphql: 16.9.0 graphql-ws: 5.12.1(graphql@16.9.0) isomorphic-ws: 5.0.0(ws@8.13.0) - tslib: 2.6.2 + tslib: 2.8.1 ws: 8.13.0 transitivePeerDependencies: - bufferutil @@ -15569,7 +15573,7 @@ snapshots: extract-files: 11.0.0 graphql: 16.9.0 meros: 1.3.0(@types/node@18.19.21) - tslib: 2.6.2 + tslib: 2.8.1 value-or-promise: 1.0.12 transitivePeerDependencies: - '@types/node' @@ -15580,7 +15584,7 @@ snapshots: '@types/ws': 8.5.10 graphql: 16.9.0 isomorphic-ws: 5.0.0(ws@8.13.0) - tslib: 2.6.2 + tslib: 2.8.1 ws: 8.13.0 transitivePeerDependencies: - bufferutil @@ -15592,7 +15596,7 @@ snapshots: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) '@repeaterjs/repeater': 3.0.5 graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 value-or-promise: 1.0.12 '@graphql-tools/graphql-file-loader@7.5.17(graphql@16.9.0)': @@ -15601,7 +15605,7 @@ snapshots: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) globby: 11.1.0 graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 unixify: 1.0.0 '@graphql-tools/graphql-tag-pluck@7.5.2(@babel/core@7.24.5)(graphql@16.9.0)': @@ -15612,7 +15616,7 @@ snapshots: '@babel/types': 7.23.6 '@graphql-tools/utils': 9.2.1(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - '@babel/core' - supports-color @@ -15622,14 +15626,14 @@ snapshots: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) graphql: 16.9.0 resolve-from: 5.0.0 - tslib: 2.6.2 + tslib: 2.8.1 '@graphql-tools/json-file-loader@7.4.18(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) globby: 11.1.0 graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 unixify: 1.0.0 '@graphql-tools/load@7.8.14(graphql@16.9.0)': @@ -15638,19 +15642,19 @@ snapshots: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) graphql: 16.9.0 p-limit: 3.1.0 - tslib: 2.6.2 + tslib: 2.8.1 '@graphql-tools/merge@8.3.1(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 8.9.0(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 '@graphql-tools/merge@8.4.2(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 '@graphql-tools/merge@9.0.0(graphql@16.9.0)': dependencies: @@ -15679,7 +15683,7 @@ snapshots: '@graphql-tools/merge': 8.4.2(graphql@16.9.0) '@graphql-tools/utils': 9.2.1(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 value-or-promise: 1.0.12 '@graphql-tools/url-loader@7.17.18(@types/node@18.19.21)(encoding@0.1.13)(graphql@16.9.0)': @@ -15695,7 +15699,7 @@ snapshots: '@whatwg-node/fetch': 0.8.8 graphql: 16.9.0 isomorphic-ws: 5.0.0(ws@8.16.0) - tslib: 2.6.2 + tslib: 2.8.1 value-or-promise: 1.0.12 ws: 8.16.0 transitivePeerDependencies: @@ -15731,7 +15735,7 @@ snapshots: '@graphql-tools/utils@8.9.0(graphql@16.9.0)': dependencies: graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 '@graphql-tools/utils@9.2.1(graphql@16.9.0)': dependencies: @@ -15745,7 +15749,7 @@ snapshots: '@graphql-tools/schema': 9.0.19(graphql@16.9.0) '@graphql-tools/utils': 9.2.1(graphql@16.9.0) graphql: 16.9.0 - tslib: 2.6.2 + tslib: 2.8.1 value-or-promise: 1.0.12 '@graphql-typed-document-node/core@3.2.0(graphql@16.9.0)': @@ -16330,7 +16334,7 @@ snapshots: '@motionone/easing': 10.16.3 '@motionone/types': 10.16.3 '@motionone/utils': 10.16.3 - tslib: 2.6.2 + tslib: 2.8.1 '@motionone/dom@10.12.0': dependencies: @@ -16339,18 +16343,18 @@ snapshots: '@motionone/types': 10.16.3 '@motionone/utils': 10.16.3 hey-listen: 1.0.8 - tslib: 2.6.2 + tslib: 2.8.1 '@motionone/easing@10.16.3': dependencies: '@motionone/utils': 10.16.3 - tslib: 2.6.2 + tslib: 2.8.1 '@motionone/generators@10.16.4': dependencies: '@motionone/types': 10.16.3 '@motionone/utils': 10.16.3 - tslib: 2.6.2 + tslib: 2.8.1 '@motionone/types@10.16.3': {} @@ -16358,7 +16362,7 @@ snapshots: dependencies: '@motionone/types': 10.16.3 hey-listen: 1.0.8 - tslib: 2.6.2 + tslib: 2.8.1 '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2': optional: true @@ -17137,18 +17141,18 @@ snapshots: dependencies: asn1js: 3.0.5 pvtsutils: 1.3.5 - tslib: 2.6.2 + tslib: 2.8.1 '@peculiar/json-schema@1.1.12': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@peculiar/webcrypto@1.4.5': dependencies: '@peculiar/asn1-schema': 2.3.8 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.5 - tslib: 2.6.2 + tslib: 2.8.1 webcrypto-core: 1.7.8 '@pkgjs/parseargs@0.11.0': @@ -17161,7 +17165,7 @@ snapshots: is-glob: 4.0.3 open: 9.1.0 picocolors: 1.0.1 - tslib: 2.6.2 + tslib: 2.8.1 '@popperjs/core@2.11.8': {} @@ -18761,16 +18765,16 @@ snapshots: '@smithy/abort-controller@2.1.3': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/chunked-blob-reader-native@2.1.1': dependencies: '@smithy/util-base64': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/chunked-blob-reader@2.1.1': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/config-resolver@2.1.4': dependencies: @@ -18778,7 +18782,7 @@ snapshots: '@smithy/types': 2.10.1 '@smithy/util-config-provider': 2.2.1 '@smithy/util-middleware': 2.1.3 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/core@1.3.5': dependencies: @@ -18789,7 +18793,7 @@ snapshots: '@smithy/smithy-client': 2.4.2 '@smithy/types': 2.10.1 '@smithy/util-middleware': 2.1.3 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/credential-provider-imds@2.2.4': dependencies: @@ -18797,37 +18801,37 @@ snapshots: '@smithy/property-provider': 2.1.3 '@smithy/types': 2.10.1 '@smithy/url-parser': 2.1.3 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/eventstream-codec@2.1.3': dependencies: '@aws-crypto/crc32': 3.0.0 '@smithy/types': 2.10.1 '@smithy/util-hex-encoding': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/eventstream-serde-browser@2.1.3': dependencies: '@smithy/eventstream-serde-universal': 2.1.3 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/eventstream-serde-config-resolver@2.1.3': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/eventstream-serde-node@2.1.3': dependencies: '@smithy/eventstream-serde-universal': 2.1.3 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/eventstream-serde-universal@2.1.3': dependencies: '@smithy/eventstream-codec': 2.1.3 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/fetch-http-handler@2.4.3': dependencies: @@ -18835,48 +18839,48 @@ snapshots: '@smithy/querystring-builder': 2.1.3 '@smithy/types': 2.10.1 '@smithy/util-base64': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/hash-blob-browser@2.1.3': dependencies: '@smithy/chunked-blob-reader': 2.1.1 '@smithy/chunked-blob-reader-native': 2.1.1 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/hash-node@2.1.3': dependencies: '@smithy/types': 2.10.1 '@smithy/util-buffer-from': 2.1.1 '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/hash-stream-node@2.1.3': dependencies: '@smithy/types': 2.10.1 '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/invalid-dependency@2.1.3': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/is-array-buffer@2.1.1': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/md5-js@2.1.3': dependencies: '@smithy/types': 2.10.1 '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/middleware-content-length@2.1.3': dependencies: '@smithy/protocol-http': 3.2.1 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/middleware-endpoint@2.4.4': dependencies: @@ -18886,7 +18890,7 @@ snapshots: '@smithy/types': 2.10.1 '@smithy/url-parser': 2.1.3 '@smithy/util-middleware': 2.1.3 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/middleware-retry@2.1.4': dependencies: @@ -18897,25 +18901,25 @@ snapshots: '@smithy/types': 2.10.1 '@smithy/util-middleware': 2.1.3 '@smithy/util-retry': 2.1.3 - tslib: 2.6.2 + tslib: 2.8.1 uuid: 8.3.2 '@smithy/middleware-serde@2.1.3': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/middleware-stack@2.1.3': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/node-config-provider@2.2.4': dependencies: '@smithy/property-provider': 2.1.3 '@smithy/shared-ini-file-loader': 2.3.4 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/node-http-handler@2.4.1': dependencies: @@ -18923,28 +18927,28 @@ snapshots: '@smithy/protocol-http': 3.2.1 '@smithy/querystring-builder': 2.1.3 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/property-provider@2.1.3': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/protocol-http@3.2.1': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/querystring-builder@2.1.3': dependencies: '@smithy/types': 2.10.1 '@smithy/util-uri-escape': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/querystring-parser@2.1.3': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/service-error-classification@2.1.3': dependencies: @@ -18953,7 +18957,7 @@ snapshots: '@smithy/shared-ini-file-loader@2.3.4': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/signature-v4@2.1.3': dependencies: @@ -18964,7 +18968,7 @@ snapshots: '@smithy/util-middleware': 2.1.3 '@smithy/util-uri-escape': 2.1.1 '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/smithy-client@2.4.2': dependencies: @@ -18973,43 +18977,43 @@ snapshots: '@smithy/protocol-http': 3.2.1 '@smithy/types': 2.10.1 '@smithy/util-stream': 2.1.3 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/types@2.10.1': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/types@2.4.0': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/url-parser@2.1.3': dependencies: '@smithy/querystring-parser': 2.1.3 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-base64@2.1.1': dependencies: '@smithy/util-buffer-from': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-body-length-browser@2.1.1': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-body-length-node@2.2.1': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-buffer-from@2.1.1': dependencies: '@smithy/is-array-buffer': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-config-provider@2.2.1': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-defaults-mode-browser@2.1.4': dependencies: @@ -19017,7 +19021,7 @@ snapshots: '@smithy/smithy-client': 2.4.2 '@smithy/types': 2.10.1 bowser: 2.11.0 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-defaults-mode-node@2.2.3': dependencies: @@ -19027,28 +19031,28 @@ snapshots: '@smithy/property-provider': 2.1.3 '@smithy/smithy-client': 2.4.2 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-endpoints@1.1.4': dependencies: '@smithy/node-config-provider': 2.2.4 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-hex-encoding@2.1.1': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-middleware@2.1.3': dependencies: '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-retry@2.1.3': dependencies: '@smithy/service-error-classification': 2.1.3 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-stream@2.1.3': dependencies: @@ -19059,22 +19063,22 @@ snapshots: '@smithy/util-buffer-from': 2.1.1 '@smithy/util-hex-encoding': 2.1.1 '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-uri-escape@2.1.1': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-utf8@2.1.1': dependencies: '@smithy/util-buffer-from': 2.1.1 - tslib: 2.6.2 + tslib: 2.8.1 '@smithy/util-waiter@2.1.3': dependencies: '@smithy/abort-controller': 2.1.3 '@smithy/types': 2.10.1 - tslib: 2.6.2 + tslib: 2.8.1 '@stripe/stripe-js@2.2.2': {} @@ -19083,7 +19087,7 @@ snapshots: '@swc/helpers@0.5.5': dependencies: '@swc/counter': 0.1.3 - tslib: 2.6.2 + tslib: 2.8.1 '@t3-oss/env-core@0.4.1(typescript@5.5.2)(zod@3.22.4)': dependencies: @@ -20140,7 +20144,7 @@ snapshots: busboy: 1.6.0 fast-querystring: 1.1.2 fast-url-parser: 1.1.3 - tslib: 2.6.2 + tslib: 2.8.1 '@xtuc/ieee754@1.2.0': {} @@ -20306,11 +20310,11 @@ snapshots: aria-hidden@1.2.3: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 aria-hidden@1.2.4: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 aria-query@5.1.3: dependencies: @@ -20374,7 +20378,7 @@ snapshots: dependencies: pvtsutils: 1.3.5 pvutils: 1.1.3 - tslib: 2.6.2 + tslib: 2.8.1 assertion-error@2.0.1: {} @@ -20657,7 +20661,7 @@ snapshots: camel-case@4.1.2: dependencies: pascal-case: 3.1.2 - tslib: 2.6.2 + tslib: 2.8.1 camelcase-css@2.0.1: {} @@ -20685,7 +20689,7 @@ snapshots: capital-case@1.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 upper-case-first: 2.0.2 ccount@2.0.1: {} @@ -20959,7 +20963,7 @@ snapshots: constant-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 upper-case: 2.0.2 conventional-changelog-angular@7.0.0: @@ -21069,7 +21073,7 @@ snapshots: cross-inspect@1.0.0: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 cross-spawn@7.0.3: dependencies: @@ -21383,7 +21387,7 @@ snapshots: depd@2.0.0: {} - dependency-graph@0.11.0: {} + dependency-graph@1.0.0: {} deprecation@2.3.1: {} @@ -21440,7 +21444,7 @@ snapshots: dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 dot-prop@5.3.0: dependencies: @@ -22927,13 +22931,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) style-value-types: 5.0.0 - tslib: 2.6.2 + tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 framesync@6.0.1: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 framesync@6.1.2: dependencies: @@ -23234,7 +23238,7 @@ snapshots: jiti: 1.17.1 minimatch: 4.2.3 string-env-interpolation: 1.0.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - bufferutil @@ -23397,7 +23401,7 @@ snapshots: header-case@2.0.4: dependencies: capital-case: 1.0.4 - tslib: 2.6.2 + tslib: 2.8.1 headers-polyfill@4.0.3: {} @@ -24201,7 +24205,7 @@ snapshots: lower-case@2.0.2: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 lru-cache@10.4.3: {} @@ -24876,7 +24880,7 @@ snapshots: no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.8.1 node-abort-controller@3.1.1: {} @@ -25056,6 +25060,8 @@ snapshots: object-inspect@1.12.3: {} + object-inspect@1.13.2: {} + object-is@1.1.5: dependencies: call-bind: 1.0.5 @@ -25271,7 +25277,7 @@ snapshots: param-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 parent-module@1.0.1: dependencies: @@ -25336,14 +25342,14 @@ snapshots: pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 path-browserify@1.0.1: {} path-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 path-exists@4.0.0: {} @@ -25518,7 +25524,7 @@ snapshots: framesync: 6.0.1 hey-listen: 1.0.8 style-value-types: 5.0.0 - tslib: 2.6.2 + tslib: 2.8.1 postcss-import@15.1.0(postcss@8.4.49): dependencies: @@ -25808,7 +25814,7 @@ snapshots: pvtsutils@1.3.5: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 pvutils@1.1.3: {} @@ -25926,7 +25932,7 @@ snapshots: dependencies: react: 18.3.1 react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.3 @@ -25935,7 +25941,7 @@ snapshots: react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.1 use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) optionalDependencies: @@ -25946,7 +25952,7 @@ snapshots: react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.1 use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) optionalDependencies: @@ -25981,7 +25987,7 @@ snapshots: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 - tslib: 2.6.2 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.3 @@ -26419,7 +26425,7 @@ snapshots: sentence-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 upper-case-first: 2.0.2 serialize-javascript@6.0.2: @@ -26517,7 +26523,7 @@ snapshots: snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 socks-proxy-agent@8.0.2: dependencies: @@ -26747,7 +26753,7 @@ snapshots: style-value-types@5.0.0: dependencies: hey-listen: 1.0.8 - tslib: 2.6.2 + tslib: 2.8.1 styled-jsx@5.1.1(@babel/core@7.24.5)(babel-plugin-macros@3.1.0)(react@18.3.1): dependencies: @@ -26798,7 +26804,7 @@ snapshots: synckit@0.8.5: dependencies: '@pkgr/utils': 2.4.2 - tslib: 2.6.2 + tslib: 2.8.1 tailwind-merge@2.0.0: dependencies: @@ -27269,11 +27275,11 @@ snapshots: upper-case-first@2.0.2: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 upper-case@2.0.2: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 uri-js@4.4.1: dependencies: @@ -27293,7 +27299,7 @@ snapshots: use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): dependencies: react: 18.3.1 - tslib: 2.6.2 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.3 @@ -27311,7 +27317,7 @@ snapshots: dependencies: detect-node-es: 1.1.0 react: 18.3.1 - tslib: 2.6.2 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.3 @@ -27703,7 +27709,7 @@ snapshots: '@peculiar/json-schema': 1.1.12 asn1js: 3.0.5 pvtsutils: 1.3.5 - tslib: 2.6.2 + tslib: 2.8.1 webidl-conversions@3.0.1: {} diff --git a/router-tests/go.mod b/router-tests/go.mod index 8566e83213..0ed2233e88 100644 --- a/router-tests/go.mod +++ b/router-tests/go.mod @@ -26,7 +26,7 @@ require ( github.com/twmb/franz-go/pkg/kadm v1.11.0 github.com/wundergraph/cosmo/demo v0.0.0-20250119174948-4b991294658e github.com/wundergraph/cosmo/router v0.0.0-20250119174948-4b991294658e - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.144 + github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.145 go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 go.opentelemetry.io/otel/sdk/metric v1.28.0 @@ -60,7 +60,8 @@ require ( github.com/cpuguy83/dockercfg v0.3.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/dgraph-io/ristretto v0.1.2-0.20240723054643-f5997484152c // indirect + github.com/dgraph-io/ristretto v0.2.0 // indirect + github.com/dgraph-io/ristretto/v2 v2.1.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/distribution/reference v0.5.0 // indirect github.com/docker/docker v25.0.5+incompatible // indirect diff --git a/router-tests/go.sum b/router-tests/go.sum index 927499adc0..2bdc071b5e 100644 --- a/router-tests/go.sum +++ b/router-tests/go.sum @@ -67,8 +67,10 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto v0.1.2-0.20240723054643-f5997484152c h1:V2+MhiAoTwUNENo9PFoz2NSr0VDJEzIARLuzb30YyqA= -github.com/dgraph-io/ristretto v0.1.2-0.20240723054643-f5997484152c/go.mod h1:swkazRqnUf1N62d0Nutz7KIj2UKqsm/H8tD0nBJAXqM= +github.com/dgraph-io/ristretto v0.2.0 h1:XAfl+7cmoUDWW/2Lx8TGZQjjxIQ2Ley9DSf52dru4WE= +github.com/dgraph-io/ristretto v0.2.0/go.mod h1:8uBHCU/PBV4Ag0CJrP47b9Ofby5dqWNh4FicAdoqFNU= +github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I= +github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= @@ -361,8 +363,8 @@ github.com/vektah/gqlparser/v2 v2.5.21 h1:Zw1rG2dr1pRR4wqwbVq4d6+xk2f4ut/yo+hwr4 github.com/vektah/gqlparser/v2 v2.5.21/go.mod h1:xMl+ta8a5M1Yo1A1Iwt/k7gSpscwSnHZdw7tfhEGfTM= github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083 h1:8/D7f8gKxTBjW+SZK4mhxTTBVpxcqeBgWF1Rfmltbfk= github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083/go.mod h1:eOTL6acwctsN4F3b7YE+eE2t8zcJ/doLm9sZzsxxxrE= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.144 h1:dkCHwG7ku5RzOWHcaDDG6cj/RXMZW7Q1spVKlLElAp4= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.144/go.mod h1:B7eV0Qh8Lop9QzIOQcsvKp3S0ejfC6mgyWoJnI917yQ= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.145 h1:3JuBmRux6YB/UZgh6COvgLXzQhMIsdHV7A02NsYdAVE= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.145/go.mod h1:B7eV0Qh8Lop9QzIOQcsvKp3S0ejfC6mgyWoJnI917yQ= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/router-tests/testdata/fixtures/query_plans/only_query_plan.json b/router-tests/testdata/fixtures/query_plans/only_query_plan.json index 41f16fb856..861575f3c3 100644 --- a/router-tests/testdata/fixtures/query_plans/only_query_plan.json +++ b/router-tests/testdata/fixtures/query_plans/only_query_plan.json @@ -123,7 +123,8 @@ } ] } - ] + ], + "normalizedQuery": "query Requires {products {__typename ... on Consultancy {lead {__typename id derivedMood} isLeadAvailable}}}" } } } \ No newline at end of file diff --git a/router-tests/testdata/fixtures/query_plans/query_plan_with_trace_no_data.json b/router-tests/testdata/fixtures/query_plans/query_plan_with_trace_no_data.json index 9048cadb2f..3c44055d74 100644 --- a/router-tests/testdata/fixtures/query_plans/query_plan_with_trace_no_data.json +++ b/router-tests/testdata/fixtures/query_plans/query_plan_with_trace_no_data.json @@ -123,7 +123,8 @@ } ] } - ] + ], + "normalizedQuery": "query Requires {products {__typename ... on Consultancy {lead {__typename id derivedMood} isLeadAvailable}}}" }, "trace": { "version": "1", @@ -214,6 +215,36 @@ ] } ] + }, + "request": { + "method": "POST", + "url": "/graphql", + "headers": { + "Accept-Encoding": [ + "identity" + ], + "Content-Length": [ + "294" + ], + "User-Agent": [ + "Go-http-client/1.1" + ], + "X-Wg-Include-Query-Plan": [ + "true" + ], + "X-Wg-Skip-Loader": [ + "true" + ], + "X-Wg-Trace": [ + "true", + "enable_predictable_debug_timings" + ] + }, + "body": { + "query": "query Requires {\n\t\t\t\t\t products {\n\t\t\t\t\t\t__typename\n\t\t\t\t\t\t... on Consultancy {\n\t\t\t\t\t\t lead {\n\t\t\t\t\t\t\t__typename\n\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\tderivedMood\n\t\t\t\t\t\t }\n\t\t\t\t\t\t isLeadAvailable\n\t\t\t\t\t\t}\n\t\t\t\t\t }\n\t\t\t\t\t}", + "operationName": "Requires", + "variables": {} + } } } } diff --git a/router-tests/testdata/fixtures/query_plans/response_with_query_plan.json b/router-tests/testdata/fixtures/query_plans/response_with_query_plan.json index 6f1af4886c..ca6e02d15f 100644 --- a/router-tests/testdata/fixtures/query_plans/response_with_query_plan.json +++ b/router-tests/testdata/fixtures/query_plans/response_with_query_plan.json @@ -141,7 +141,8 @@ } ] } - ] + ], + "normalizedQuery": "query Requires {products {__typename ... on Consultancy {lead {__typename id derivedMood} isLeadAvailable}}}" } } } \ No newline at end of file diff --git a/router-tests/testdata/fixtures/query_plans/response_with_query_plan_operation_name.json b/router-tests/testdata/fixtures/query_plans/response_with_query_plan_operation_name.json index 324fbd40a5..e6a11cd172 100644 --- a/router-tests/testdata/fixtures/query_plans/response_with_query_plan_operation_name.json +++ b/router-tests/testdata/fixtures/query_plans/response_with_query_plan_operation_name.json @@ -141,7 +141,8 @@ } ] } - ] + ], + "normalizedQuery": "query Requires {products {__typename ... on Consultancy {lead {__typename id derivedMood} isLeadAvailable}}}" } } } \ No newline at end of file diff --git a/router-tests/testdata/fixtures/query_plans/response_with_query_plan_operation_name_sanitized_no_data.json b/router-tests/testdata/fixtures/query_plans/response_with_query_plan_operation_name_sanitized_no_data.json index ff0b9f53f5..7160cac07b 100644 --- a/router-tests/testdata/fixtures/query_plans/response_with_query_plan_operation_name_sanitized_no_data.json +++ b/router-tests/testdata/fixtures/query_plans/response_with_query_plan_operation_name_sanitized_no_data.json @@ -123,7 +123,8 @@ } ] } - ] + ], + "normalizedQuery": "query Requires {products {__typename ... on Consultancy {lead {__typename id derivedMood} isLeadAvailable}}}" }, "trace": { "version": "1", @@ -214,6 +215,36 @@ ] } ] + }, + "request": { + "method": "POST", + "url": "/graphql", + "headers": { + "Accept-Encoding": [ + "identity" + ], + "Content-Length": [ + "294" + ], + "User-Agent": [ + "Go-http-client/1.1" + ], + "X-Wg-Include-Query-Plan": [ + "true" + ], + "X-Wg-Skip-Loader": [ + "true" + ], + "X-Wg-Trace": [ + "true", + "enable_predictable_debug_timings" + ] + }, + "body": { + "query": "query Requires {\n\t\t\t\t\t products {\n\t\t\t\t\t\t__typename\n\t\t\t\t\t\t... on Consultancy {\n\t\t\t\t\t\t lead {\n\t\t\t\t\t\t\t__typename\n\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\tderivedMood\n\t\t\t\t\t\t }\n\t\t\t\t\t\t isLeadAvailable\n\t\t\t\t\t\t}\n\t\t\t\t\t }\n\t\t\t\t\t}", + "operationName": "Requires", + "variables": {} + } } } } diff --git a/router-tests/testdata/tracing.json b/router-tests/testdata/tracing.json index 1bcbd4ac9c..ff47debcfa 100644 --- a/router-tests/testdata/tracing.json +++ b/router-tests/testdata/tracing.json @@ -2010,6 +2010,29 @@ } } ] + }, + "request": { + "method": "POST", + "url": "/graphql", + "headers": { + "Accept-Encoding": [ + "identity" + ], + "Content-Length": [ + "596" + ], + "User-Agent": [ + "Go-http-client/1.1" + ], + "X-Wg-Trace": [ + "true", + "enable_predictable_debug_timings" + ] + }, + "body": { + "query": "{\n employees {\n id\n details {\n forename\n surname\n hasChildren\n }\n role {\n title\n departments\n }\n hobbies {\n ... on Exercise {\n category\n }\n ... on Flying {\n planeModels\n yearsOfExperience\n }\n ... on Gaming {\n name\n genres\n yearsOfExperience\n }\n ... on Programming {\n languages\n }\n ... on Travelling {\n countriesLived {\n\t\t language\n\t\t}\n }\n ... on Other {\n name\n }\n }\n }\n}", + "variables": {} + } } } } diff --git a/router/CHANGELOG.md b/router/CHANGELOG.md index d0725dfb7e..94ae4574c0 100644 --- a/router/CHANGELOG.md +++ b/router/CHANGELOG.md @@ -4,6 +4,12 @@ Binaries are attached to the github release otherwise all images can be found [h All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [0.168.0](https://github.com/wundergraph/cosmo/compare/router@0.167.0...router@0.168.0) (2025-01-29) + +### Features + +* add normalizedQuery to query plan and request info to trace ([#1536](https://github.com/wundergraph/cosmo/issues/1536)) ([60e3d0e](https://github.com/wundergraph/cosmo/commit/60e3d0e7d406eea103268306973425a4e4c82222)) (@alepane21) + # [0.167.0](https://github.com/wundergraph/cosmo/compare/router@0.166.0...router@0.167.0) (2025-01-27) ### Features diff --git a/router/core/context.go b/router/core/context.go index 716b3dfb82..9f58c7fec0 100644 --- a/router/core/context.go +++ b/router/core/context.go @@ -476,7 +476,9 @@ type operationContext struct { internalHash uint64 // remapVariables is a map of variables that have been remapped to the new names remapVariables map[string]string - // Content is the content of the operation + // RawContent is the raw content of the operation + rawContent string + // Content is the normalized content of the operation content string variables *astjson.Value files []httpclient.File diff --git a/router/core/graph_server.go b/router/core/graph_server.go index 6920395ad1..427aeaf7f7 100644 --- a/router/core/graph_server.go +++ b/router/core/graph_server.go @@ -17,7 +17,7 @@ import ( "github.com/klauspost/compress/gzip" "github.com/cloudflare/backoff" - "github.com/dgraph-io/ristretto" + "github.com/dgraph-io/ristretto/v2" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/golang-jwt/jwt/v5" diff --git a/router/core/graphql_prehandler.go b/router/core/graphql_prehandler.go index 9eca52b126..e608fc2889 100644 --- a/router/core/graphql_prehandler.go +++ b/router/core/graphql_prehandler.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "crypto/ecdsa" + "encoding/json" "fmt" "net/http" "strconv" @@ -350,6 +351,20 @@ func (h *PreHandler) Handler(next http.Handler) http.Handler { art.SetRequestTracingStats(r.Context(), traceOptions, traceTimings) + if traceOptions.Enable { + reqData := &resolve.RequestData{ + Method: r.Method, + URL: r.URL.String(), + Headers: r.Header, + Body: resolve.BodyData{ + Query: requestContext.operation.rawContent, + OperationName: requestContext.operation.name, + Variables: json.RawMessage(requestContext.operation.variables.String()), + }, + } + r = r.WithContext(resolve.SetRequest(r.Context(), reqData)) + } + ww := middleware.NewWrapResponseWriter(w, r.ProtoMajor) // The request context needs to be updated with the latest request to ensure that the context is up to date @@ -612,6 +627,7 @@ func (h *PreHandler) handleOperation(req *http.Request, variablesParser *astjson requestContext.telemetry.addCommonAttribute(operationHashAttribute) httpOperation.routerSpan.SetAttributes(operationHashAttribute) + requestContext.operation.rawContent = operationKit.parsedOperation.Request.Query requestContext.operation.content = operationKit.parsedOperation.NormalizedRepresentation requestContext.operation.variables, err = variablesParser.ParseBytes(operationKit.parsedOperation.Request.Variables) if err != nil { @@ -770,6 +786,11 @@ func (h *PreHandler) handleOperation(req *http.Request, variablesParser *astjson if (h.queryPlansEnabled && requestContext.operation.executionOptions.IncludeQueryPlanInResponse) || h.alwaysIncludeQueryPlan { + switch p := requestContext.operation.preparedPlan.preparedPlan.(type) { + case *plan.SynchronousResponsePlan: + p.Response.Fetches.NormalizedQuery = operationKit.parsedOperation.NormalizedRepresentation + } + if h.queryPlansLoggingEnabled { switch p := requestContext.operation.preparedPlan.preparedPlan.(type) { case *plan.SynchronousResponsePlan: diff --git a/router/core/operation_processor.go b/router/core/operation_processor.go index b33377ccb8..d305ddaf82 100644 --- a/router/core/operation_processor.go +++ b/router/core/operation_processor.go @@ -16,7 +16,7 @@ import ( "github.com/buger/jsonparser" "github.com/cespare/xxhash/v2" - "github.com/dgraph-io/ristretto" + "github.com/dgraph-io/ristretto/v2" "github.com/pkg/errors" "github.com/tidwall/sjson" fastjson "github.com/wundergraph/astjson" diff --git a/router/go.mod b/router/go.mod index 48b89278b6..0b7d3c3a0c 100644 --- a/router/go.mod +++ b/router/go.mod @@ -8,9 +8,6 @@ require ( github.com/buger/jsonparser v1.1.1 github.com/cespare/xxhash/v2 v2.3.0 github.com/cloudflare/backoff v0.0.0-20161212185259-647f3cdfc87a - // References to main that includes the fix for the race with ristretto.Close() - // Link: https://github.com/dgraph-io/ristretto/pull/384 - github.com/dgraph-io/ristretto v0.1.2-0.20240723054643-f5997484152c github.com/dustin/go-humanize v1.0.1 github.com/go-chi/chi/v5 v5.1.0 github.com/go-redis/redis_rate/v10 v10.0.1 @@ -30,11 +27,11 @@ require ( github.com/redis/go-redis/v9 v9.4.0 github.com/sebdah/goldie/v2 v2.5.3 github.com/shirou/gopsutil/v3 v3.24.3 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/tidwall/gjson v1.18.0 github.com/tidwall/sjson v1.2.5 github.com/twmb/franz-go v1.16.1 - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.144 + github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.145 // Do not upgrade, it renames attributes we rely on go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 go.opentelemetry.io/contrib/propagators/b3 v1.23.0 @@ -65,6 +62,7 @@ require ( github.com/MicahParks/keyfunc/v3 v3.3.5 github.com/bep/debounce v1.2.1 github.com/caarlos0/env/v11 v11.1.0 + github.com/dgraph-io/ristretto/v2 v2.1.0 github.com/expr-lang/expr v1.16.9 github.com/fsnotify/fsnotify v1.7.0 github.com/klauspost/compress v1.17.9 diff --git a/router/go.sum b/router/go.sum index e6907b1d01..5dabb1661f 100644 --- a/router/go.sum +++ b/router/go.sum @@ -44,8 +44,8 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto v0.1.2-0.20240723054643-f5997484152c h1:V2+MhiAoTwUNENo9PFoz2NSr0VDJEzIARLuzb30YyqA= -github.com/dgraph-io/ristretto v0.1.2-0.20240723054643-f5997484152c/go.mod h1:swkazRqnUf1N62d0Nutz7KIj2UKqsm/H8tD0nBJAXqM= +github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I= +github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= @@ -248,8 +248,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= @@ -274,8 +275,8 @@ github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0 github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083 h1:8/D7f8gKxTBjW+SZK4mhxTTBVpxcqeBgWF1Rfmltbfk= github.com/wundergraph/astjson v0.0.0-20250106123708-be463c97e083/go.mod h1:eOTL6acwctsN4F3b7YE+eE2t8zcJ/doLm9sZzsxxxrE= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.144 h1:dkCHwG7ku5RzOWHcaDDG6cj/RXMZW7Q1spVKlLElAp4= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.144/go.mod h1:B7eV0Qh8Lop9QzIOQcsvKp3S0ejfC6mgyWoJnI917yQ= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.145 h1:3JuBmRux6YB/UZgh6COvgLXzQhMIsdHV7A02NsYdAVE= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.145/go.mod h1:B7eV0Qh8Lop9QzIOQcsvKp3S0ejfC6mgyWoJnI917yQ= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= diff --git a/router/internal/persistedoperation/operationstorage/cache.go b/router/internal/persistedoperation/operationstorage/cache.go index 581351546a..27152ac356 100644 --- a/router/internal/persistedoperation/operationstorage/cache.go +++ b/router/internal/persistedoperation/operationstorage/cache.go @@ -2,7 +2,7 @@ package operationstorage import ( "fmt" - "github.com/dgraph-io/ristretto" + "github.com/dgraph-io/ristretto/v2" "sync" "time" ) diff --git a/router/package.json b/router/package.json index 2b3b06da08..d65f3aa389 100644 --- a/router/package.json +++ b/router/package.json @@ -1,6 +1,6 @@ { "name": "router", - "version": "0.167.0", + "version": "0.168.0", "private": true, "description": "Placeholder package to simplify versioning and releasing with lerna.", "keywords": [ diff --git a/router/pkg/config/config.go b/router/pkg/config/config.go index fac97f09d8..45457e36eb 100644 --- a/router/pkg/config/config.go +++ b/router/pkg/config/config.go @@ -322,7 +322,7 @@ type EngineExecutionConfiguration struct { EnableSingleFlight bool `envDefault:"true" env:"ENGINE_ENABLE_SINGLE_FLIGHT" yaml:"enable_single_flight"` EnableRequestTracing bool `envDefault:"true" env:"ENGINE_ENABLE_REQUEST_TRACING" yaml:"enable_request_tracing"` EnableExecutionPlanCacheResponseHeader bool `envDefault:"false" env:"ENGINE_ENABLE_EXECUTION_PLAN_CACHE_RESPONSE_HEADER" yaml:"enable_execution_plan_cache_response_header"` - MaxConcurrentResolvers int `envDefault:"32" env:"ENGINE_MAX_CONCURRENT_RESOLVERS" yaml:"max_concurrent_resolvers,omitempty"` + MaxConcurrentResolvers int `envDefault:"1024" env:"ENGINE_MAX_CONCURRENT_RESOLVERS" yaml:"max_concurrent_resolvers,omitempty"` EnableNetPoll bool `envDefault:"true" env:"ENGINE_ENABLE_NET_POLL" yaml:"enable_net_poll"` WebSocketClientPollTimeout time.Duration `envDefault:"1s" env:"ENGINE_WEBSOCKET_CLIENT_POLL_TIMEOUT" yaml:"websocket_client_poll_timeout,omitempty"` WebSocketClientConnBufferSize int `envDefault:"128" env:"ENGINE_WEBSOCKET_CLIENT_CONN_BUFFER_SIZE" yaml:"websocket_client_conn_buffer_size,omitempty"` diff --git a/router/pkg/config/config.schema.json b/router/pkg/config/config.schema.json index 1c3136aeb3..8ee6c27f62 100644 --- a/router/pkg/config/config.schema.json +++ b/router/pkg/config/config.schema.json @@ -2182,8 +2182,8 @@ }, "max_concurrent_resolvers": { "type": "integer", - "description": "The maximum number of concurrent resolvers.", - "default": 32 + "description": "The maximum number of concurrent resolvers. The higher the number, the more requests can be processed in parallel but at the cost of more memory usage.", + "default": 1024 }, "enable_net_poll": { "type": "boolean", diff --git a/router/pkg/config/testdata/config_defaults.json b/router/pkg/config/testdata/config_defaults.json index cc2a9afecd..b58010dca5 100644 --- a/router/pkg/config/testdata/config_defaults.json +++ b/router/pkg/config/testdata/config_defaults.json @@ -276,7 +276,7 @@ "EnableSingleFlight": true, "EnableRequestTracing": true, "EnableExecutionPlanCacheResponseHeader": false, - "MaxConcurrentResolvers": 32, + "MaxConcurrentResolvers": 1024, "EnableNetPoll": true, "WebSocketClientPollTimeout": 1000000000, "WebSocketClientConnBufferSize": 128, diff --git a/router/pkg/metric/cache_metrics.go b/router/pkg/metric/cache_metrics.go index 917fddaa1a..1d238aea5e 100644 --- a/router/pkg/metric/cache_metrics.go +++ b/router/pkg/metric/cache_metrics.go @@ -3,7 +3,7 @@ package metric import ( "context" "errors" - "github.com/dgraph-io/ristretto" + "github.com/dgraph-io/ristretto/v2" "github.com/wundergraph/cosmo/router/pkg/otel" "go.opentelemetry.io/otel/attribute" otelmetric "go.opentelemetry.io/otel/metric" diff --git a/studio/CHANGELOG.md b/studio/CHANGELOG.md index c50239a0ba..b6bcd0715b 100644 --- a/studio/CHANGELOG.md +++ b/studio/CHANGELOG.md @@ -4,6 +4,14 @@ Binaries are attached to the github release otherwise all images can be found [h All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.99.2](https://github.com/wundergraph/cosmo/compare/studio@0.99.1...studio@0.99.2) (2025-01-29) + +### Bug Fixes + +* add copy button to subgraph routing url ([#1543](https://github.com/wundergraph/cosmo/issues/1543)) ([d48255d](https://github.com/wundergraph/cosmo/commit/d48255d8edcc4907cc5730636b3cda43dc582db8)) (@thisisnithin) +* subgraphs search functionality ([#1540](https://github.com/wundergraph/cosmo/issues/1540)) ([3bd7b36](https://github.com/wundergraph/cosmo/commit/3bd7b36fa0a5db912afbe127c2616542fc68399d)) (@JivusAyrus) +* trim the inputs of group mappers ([#1541](https://github.com/wundergraph/cosmo/issues/1541)) ([18a6025](https://github.com/wundergraph/cosmo/commit/18a6025a1e352ae6adb77ec2d231f209e20c4833)) (@JivusAyrus) + ## [0.99.1](https://github.com/wundergraph/cosmo/compare/studio@0.99.0...studio@0.99.1) (2025-01-24) **Note:** Version bump only for package studio diff --git a/studio/package.json b/studio/package.json index 6f75edfd1e..4bd1542efb 100644 --- a/studio/package.json +++ b/studio/package.json @@ -1,6 +1,6 @@ { "name": "studio", - "version": "0.99.1", + "version": "0.99.2", "private": true, "license": "Apache-2.0", "description": "WunderGraph Cosmo Studio", diff --git a/studio/src/pages/[organizationSlug]/[namespace]/graph/[slug]/subgraphs.tsx b/studio/src/pages/[organizationSlug]/[namespace]/graph/[slug]/subgraphs.tsx index b4e400b74e..35235d0f74 100644 --- a/studio/src/pages/[organizationSlug]/[namespace]/graph/[slug]/subgraphs.tsx +++ b/studio/src/pages/[organizationSlug]/[namespace]/graph/[slug]/subgraphs.tsx @@ -41,11 +41,11 @@ const SubGraphsPage: NextPageWithLayout = () => { if (tab === "featureSubgraphs") { const fuse = new Fuse(graphData.featureSubgraphs, { keys: ["name"], - minMatchCharLength: 1, + useExtendedSearch: true, }); const searchedFetaureSubgraphs = search - ? fuse.search(search).map(({ item }) => item) + ? fuse.search(`'${search}`).map(({ item }) => item) : graphData.featureSubgraphs; setTotalCount(searchedFetaureSubgraphs.length); @@ -55,11 +55,12 @@ const SubGraphsPage: NextPageWithLayout = () => { } else { const fuse = new Fuse(graphData.subgraphs, { keys: ["name", "id"], - minMatchCharLength: 1, + useExtendedSearch: true, }); + // https://www.fusejs.io/examples.html#default-weight:~:text=%23-,Extended%20Search,-This%20form%20of const searchedSubgraphs = search - ? fuse.search(search).map(({ item }) => item) + ? fuse.search(`'${search}`).map(({ item }) => item) : graphData.subgraphs; setTotalCount(searchedSubgraphs.length); diff --git a/studio/src/pages/[organizationSlug]/[namespace]/subgraph/[subgraphSlug]/index.tsx b/studio/src/pages/[organizationSlug]/[namespace]/subgraph/[subgraphSlug]/index.tsx index 557311674e..2cc895e903 100644 --- a/studio/src/pages/[organizationSlug]/[namespace]/subgraph/[subgraphSlug]/index.tsx +++ b/studio/src/pages/[organizationSlug]/[namespace]/subgraph/[subgraphSlug]/index.tsx @@ -6,6 +6,7 @@ import { import { AddSubgraphUsersContent } from "@/components/subgraphs-table"; import { Badge } from "@/components/ui/badge"; import { CLI } from "@/components/ui/cli"; +import { CopyButton } from "@/components/ui/copy-button"; import { Tooltip, TooltipContent, @@ -15,8 +16,8 @@ import { useSubgraph } from "@/hooks/use-subgraph"; import { docsBaseURL } from "@/lib/constants"; import { formatDateTime } from "@/lib/format-date"; import { cn } from "@/lib/utils"; -import { CommandLineIcon } from "@heroicons/react/24/outline"; import { useQuery } from "@connectrpc/connect-query"; +import { CommandLineIcon } from "@heroicons/react/24/outline"; import { getOrganizationMembers, getSubgraphMembers, @@ -100,15 +101,16 @@ const SubgraphOverviewPage = () => {
{subgraph.id}
{subgraph.routingURL && ( -
+
Routing URL
-
+
{subgraph.routingURL} {subgraph.routingURL} +
)} diff --git a/studio/src/pages/[organizationSlug]/settings.tsx b/studio/src/pages/[organizationSlug]/settings.tsx index 77a7f80069..6783f9df38 100644 --- a/studio/src/pages/[organizationSlug]/settings.tsx +++ b/studio/src/pages/[organizationSlug]/settings.tsx @@ -387,7 +387,7 @@ const UpdateIDPMappers = ({ const mutateMappers = () => { const groupMappers = mappers.map((m) => { - return { role: m.dbRole, ssoGroup: m.ssoGroup }; + return { role: m.dbRole, ssoGroup: m.ssoGroup.trim() }; }); groupMappers.push({ @@ -522,7 +522,7 @@ const OpenIDConnectProvider = ({ const onSubmit: SubmitHandler = (data) => { const groupMappers = mappers.map((m) => { - return { role: m.dbRole, ssoGroup: m.ssoGroup }; + return { role: m.dbRole, ssoGroup: m.ssoGroup.trim() }; }); groupMappers.push({