diff --git a/api/dbschema/edgeql-js/__spec__.ts b/api/dbschema/edgeql-js/__spec__.ts index 4cab7ff43..ab3111080 100644 --- a/api/dbschema/edgeql-js/__spec__.ts +++ b/api/dbschema/edgeql-js/__spec__.ts @@ -12,10 +12,10 @@ spec.set("80d4b62c-e31c-51c6-b994-afaae5b6eff6", {"id":"80d4b62c-e31c-51c6-b994- spec.set("3a39c464-a115-5b5e-8968-fb30b2c6a7a1", {"id":"3a39c464-a115-5b5e-8968-fb30b2c6a7a1","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"00000000-0000-0000-0000-00000000010b","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("d9d5e4a4-d545-5a03-a9da-571d8807619f", {"id":"d9d5e4a4-d545-5a03-a9da-571d8807619f","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"00000000-0000-0000-0000-00000000010d","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("2417884d-4995-5a45-8c61-614adab347a7", {"id":"2417884d-4995-5a45-8c61-614adab347a7","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"00000000-0000-0000-0000-000000000111","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("1b3a06d0-4b36-11ef-adcf-f77dd10024cc", {"id":"1b3a06d0-4b36-11ef-adcf-f77dd10024cc","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"1a275d06-4b36-11ef-b8e8-c3caa8d68cb7","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("1b4f6c2f-4b36-11ef-b847-b51a5a48a1ed", {"id":"1b4f6c2f-4b36-11ef-b847-b51a5a48a1ed","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"1a82d952-4b36-11ef-a948-ffba23af87f6","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("1b857978-4b36-11ef-b39f-837dcabfca8d", {"id":"1b857978-4b36-11ef-b39f-837dcabfca8d","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"1b7d40fd-4b36-11ef-929e-5b00fd0f092b","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("1a990ff9-4b36-11ef-a19d-15ed28460818", {"id":"1a990ff9-4b36-11ef-a19d-15ed28460818","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"1a42b750-4b36-11ef-981e-a578ba2a1e5f","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); +spec.set("5e86691a-4ca5-11ef-867e-af4948fd97e5", {"id":"5e86691a-4ca5-11ef-867e-af4948fd97e5","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"5dd32b18-4ca5-11ef-8908-0152ca6f9c93","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); +spec.set("5e930c4d-4ca5-11ef-8c7a-21d9fba63b42", {"id":"5e930c4d-4ca5-11ef-8c7a-21d9fba63b42","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"5e201426-4ca5-11ef-ad4b-473805dcae4c","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); +spec.set("5eaffa5c-4ca5-11ef-917e-11e708e32a7b", {"id":"5eaffa5c-4ca5-11ef-917e-11e708e32a7b","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"5eac7755-4ca5-11ef-8c59-b1ff14e546b9","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); +spec.set("5e2f69df-4ca5-11ef-9c77-0752475c490a", {"id":"5e2f69df-4ca5-11ef-9c77-0752475c490a","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"5de76b99-4ca5-11ef-a8fd-ffc4d6d66524","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("3ed001c4-98e8-53a8-b2d1-0cad168d926c", {"id":"3ed001c4-98e8-53a8-b2d1-0cad168d926c","name":"array>","is_abstract":true,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"49748e47-8d91-5269-9a34-2e8ca194e0f2","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("48aa45ef-4d93-5fbd-bfb5-81bf67b49eab", {"id":"48aa45ef-4d93-5fbd-bfb5-81bf67b49eab","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"00000000-0000-0000-0000-000000000102","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("2b65df4c-4942-59b1-8819-061ca68b2f4e", {"id":"2b65df4c-4942-59b1-8819-061ca68b2f4e","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"00000000-0000-0000-0000-000000000107","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); @@ -25,8 +25,8 @@ spec.set("bb221d39-09f1-507e-8851-62075bb61823", {"id":"bb221d39-09f1-507e-8851- spec.set("1378c9c3-b11a-5a95-bdac-066a4143094d", {"id":"1378c9c3-b11a-5a95-bdac-066a4143094d","name":"array","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"00000000-0000-0000-0000-000000000100","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("212f4161-55eb-569e-945d-ae24bdab437a", {"id":"212f4161-55eb-569e-945d-ae24bdab437a","name":"array>","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"f5e31516-7567-519d-847f-397a0762ce23","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("cc3f58f4-ffd4-5f38-97d9-6b5844e89037", {"id":"cc3f58f4-ffd4-5f38-97d9-6b5844e89037","name":"array>>>","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"27d815f4-6518-598a-a3c5-9364342d6e06","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("1a9ab295-4b36-11ef-995a-03d4ff4d966b", {"id":"1a9ab295-4b36-11ef-995a-03d4ff4d966b","name":"array>","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"1a9a9f20-4b36-11ef-8a7c-43f759df9310","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("1c2d6370-4b36-11ef-8c16-5d22b2d65c72", {"id":"1c2d6370-4b36-11ef-8c16-5d22b2d65c72","name":"array>","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"1c2d508e-4b36-11ef-b1df-edbc38ebd518","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); +spec.set("5e304f47-4ca5-11ef-917b-e927ec5c1d6e", {"id":"5e304f47-4ca5-11ef-917b-e927ec5c1d6e","name":"array>","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"5e30443a-4ca5-11ef-be36-6ff8e1ead1f5","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); +spec.set("5f1f2d85-4ca5-11ef-894f-bb72a5071292", {"id":"5f1f2d85-4ca5-11ef-894f-bb72a5071292","name":"array>","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"5f1f2067-4ca5-11ef-a3b9-4340f6c9a103","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("db5fcf76-8269-568c-ba2b-b36b0796b880", {"id":"db5fcf76-8269-568c-ba2b-b36b0796b880","name":"array>>","is_abstract":false,"kind":"array","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":"67996f7a-c82f-5b58-bb0a-f29764ee45c2","tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("a64cb492-91a2-5ee0-890a-6caeb3e32aa5", {"id":"a64cb492-91a2-5ee0-890a-6caeb3e32aa5","name":"std::anyscalar","is_abstract":true,"kind":"scalar","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("00000000-0000-0000-0000-000000000112", {"id":"00000000-0000-0000-0000-000000000112","name":"cal::date_duration","is_abstract":false,"kind":"scalar","enum_values":null,"is_seq":false,"material_id":null,"bases":[{"id":"a64cb492-91a2-5ee0-890a-6caeb3e32aa5"}],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); @@ -39,7 +39,7 @@ spec.set("00000000-0000-0000-0000-00000000010d", {"id":"00000000-0000-0000-0000- spec.set("00000000-0000-0000-0000-000000000111", {"id":"00000000-0000-0000-0000-000000000111","name":"cal::relative_duration","is_abstract":false,"kind":"scalar","enum_values":null,"is_seq":false,"material_id":null,"bases":[{"id":"a64cb492-91a2-5ee0-890a-6caeb3e32aa5"}],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("0d14e49f-d9f9-51f0-b8f4-c432982cbac2", {"id":"0d14e49f-d9f9-51f0-b8f4-c432982cbac2","name":"std::BaseObject","is_abstract":true,"kind":"object","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[{"card":"One","name":"id","target_id":"00000000-0000-0000-0000-000000000100","kind":"property","is_exclusive":true,"is_computed":false,"is_readonly":true,"has_default":true,"pointers":[]},{"card":"One","name":"__type__","target_id":"2662a1b4-4f3f-5875-b6eb-ce52101a90a3","kind":"link","is_exclusive":false,"is_computed":false,"is_readonly":true,"has_default":false,"pointers":[]}],"exclusives":[{"id":{"card":"One","name":"id","target_id":"00000000-0000-0000-0000-000000000100","kind":"property","is_exclusive":true,"is_computed":false,"is_readonly":true,"has_default":true,"pointers":[]}}],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); spec.set("d408002f-3891-5b9a-b19c-23589a88998b", {"id":"d408002f-3891-5b9a-b19c-23589a88998b","name":"cfg::ConfigObject","is_abstract":true,"kind":"object","enum_values":null,"is_seq":false,"material_id":null,"bases":[{"id":"0d14e49f-d9f9-51f0-b8f4-c432982cbac2"}],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("8b66e734-a01e-5638-a812-359e0d005a37", {"id":"8b66e734-a01e-5638-a812-359e0d005a37","name":"cfg::AbstractConfig","is_abstract":true,"kind":"object","enum_values":null,"is_seq":false,"material_id":null,"bases":[{"id":"d408002f-3891-5b9a-b19c-23589a88998b"}],"union_of":[],"intersection_of":[],"pointers":[{"card":"Many","name":"extensions","target_id":"89fb9b8b-d3b2-5075-9d1a-f5b116a0f188","kind":"link","is_exclusive":false,"is_computed":true,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"One","name":"session_idle_timeout","target_id":"00000000-0000-0000-0000-00000000010e","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]},{"card":"One","name":"session_idle_transaction_timeout","target_id":"00000000-0000-0000-0000-00000000010e","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]},{"card":"One","name":"query_execution_timeout","target_id":"00000000-0000-0000-0000-00000000010e","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"One","name":"listen_port","target_id":"00000000-0000-0000-0000-000000000104","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]},{"card":"Many","name":"listen_addresses","target_id":"00000000-0000-0000-0000-000000000101","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"Many","name":"auth","target_id":"a2ba7516-d398-5ec2-b25e-221b2f7b9e87","kind":"link","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"AtMostOne","name":"allow_dml_in_functions","target_id":"00000000-0000-0000-0000-000000000109","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]},{"card":"AtMostOne","name":"allow_bare_ddl","target_id":"50264e27-859e-5d2b-a589-ebb3d8ba4d8c","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]},{"card":"AtMostOne","name":"apply_access_policies","target_id":"00000000-0000-0000-0000-000000000109","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]},{"card":"AtMostOne","name":"allow_user_specified_id","target_id":"00000000-0000-0000-0000-000000000109","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]},{"card":"Many","name":"cors_allow_origins","target_id":"00000000-0000-0000-0000-000000000101","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"AtMostOne","name":"auto_rebuild_query_cache","target_id":"00000000-0000-0000-0000-000000000109","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]},{"card":"AtMostOne","name":"query_cache_mode","target_id":"7cb23cda-17b8-575c-9561-05e2e9351897","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]},{"card":"AtMostOne","name":"shared_buffers","target_id":"00000000-0000-0000-0000-000000000130","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"AtMostOne","name":"query_work_mem","target_id":"00000000-0000-0000-0000-000000000130","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"AtMostOne","name":"maintenance_work_mem","target_id":"00000000-0000-0000-0000-000000000130","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"AtMostOne","name":"effective_cache_size","target_id":"00000000-0000-0000-0000-000000000130","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"AtMostOne","name":"effective_io_concurrency","target_id":"00000000-0000-0000-0000-000000000105","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"AtMostOne","name":"default_statistics_target","target_id":"00000000-0000-0000-0000-000000000105","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":false,"pointers":[]},{"card":"AtMostOne","name":"force_database_error","target_id":"00000000-0000-0000-0000-000000000101","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]},{"card":"One","name":"_pg_prepared_statement_cache_size","target_id":"00000000-0000-0000-0000-000000000103","kind":"property","is_exclusive":false,"is_computed":false,"is_readonly":false,"has_default":true,"pointers":[]}],"exclusives":[],"backlinks":[{"card":"AtMostOne","name":">","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000105","name":"major"},{"target_id":"00000000-0000-0000-0000-000000000105","name":"minor"},{"target_id":"16a08f13-b1b1-57f4-8e82-062f67fb2a4c","name":"stage"},{"target_id":"00000000-0000-0000-0000-000000000105","name":"stage_no"},{"target_id":"bb221d39-09f1-507e-8851-62075bb61823","name":"local"}],"range_element_id":null,"multirange_element_id":null} as any); spec.set("f5e31516-7567-519d-847f-397a0762ce23", {"id":"f5e31516-7567-519d-847f-397a0762ce23","name":"tuple","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000101","name":"name"},{"target_id":"00000000-0000-0000-0000-000000000101","name":"expr"}],"range_element_id":null,"multirange_element_id":null} as any); spec.set("27d815f4-6518-598a-a3c5-9364342d6e06", {"id":"27d815f4-6518-598a-a3c5-9364342d6e06","name":"tuple>>","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000101","name":"name"},{"target_id":"67996f7a-c82f-5b58-bb0a-f29764ee45c2","name":"expr"}],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("1a992b03-4b36-11ef-bcc2-779917acbe68", {"id":"1a992b03-4b36-11ef-bcc2-779917acbe68","name":"tuple>","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000101","name":"name"},{"target_id":"1a42b750-4b36-11ef-981e-a578ba2a1e5f","name":"url"},{"target_id":"1a990ff9-4b36-11ef-a19d-15ed28460818","name":"icons"}],"range_element_id":null,"multirange_element_id":null} as any); +spec.set("5e2f7660-4ca5-11ef-af8a-db7031536774", {"id":"5e2f7660-4ca5-11ef-af8a-db7031536774","name":"tuple>","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000101","name":"name"},{"target_id":"5de76b99-4ca5-11ef-a8fd-ffc4d6d66524","name":"url"},{"target_id":"5e2f69df-4ca5-11ef-9c77-0752475c490a","name":"icons"}],"range_element_id":null,"multirange_element_id":null} as any); spec.set("c13eb6f1-a05c-533f-bfe8-a50b1a077fd0", {"id":"c13eb6f1-a05c-533f-bfe8-a50b1a077fd0","name":"tuple","is_abstract":true,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000003","name":"object"},{"target_id":"00000000-0000-0000-0000-000000000106","name":"score"}],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("1b865ae8-4b36-11ef-bdf3-67689f2d08e8", {"id":"1b865ae8-4b36-11ef-bdf3-67689f2d08e8","name":"tuple","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"1b7fdd13-4b36-11ef-85fe-8b424baca406","name":"provider"},{"target_id":"00000000-0000-0000-0000-000000000101","name":"subject"}],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("1a9a9f20-4b36-11ef-8a7c-43f759df9310", {"id":"1a9a9f20-4b36-11ef-8a7c-43f759df9310","name":"tuple","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000101","name":"reason"},{"target_id":"00000000-0000-0000-0000-000000000104","name":"operation"}],"range_element_id":null,"multirange_element_id":null} as any); +spec.set("5eb05fbd-4ca5-11ef-80f9-4b113dc73361", {"id":"5eb05fbd-4ca5-11ef-80f9-4b113dc73361","name":"tuple","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"5ead5b32-4ca5-11ef-9f86-39a3186e8917","name":"provider"},{"target_id":"00000000-0000-0000-0000-000000000101","name":"subject"}],"range_element_id":null,"multirange_element_id":null} as any); +spec.set("5e30443a-4ca5-11ef-be36-6ff8e1ead1f5", {"id":"5e30443a-4ca5-11ef-be36-6ff8e1ead1f5","name":"tuple","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000101","name":"reason"},{"target_id":"00000000-0000-0000-0000-000000000104","name":"operation"}],"range_element_id":null,"multirange_element_id":null} as any); spec.set("e34cf562-ee0c-58d3-a1ee-ff9fbb35bfc3", {"id":"e34cf562-ee0c-58d3-a1ee-ff9fbb35bfc3","name":"tuple","is_abstract":true,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000105","name":"0"},{"target_id":"00000000-0000-0000-0000-000000000001","name":"1"}],"range_element_id":null,"multirange_element_id":null} as any); spec.set("b20a2c38-2942-5085-88a3-1bbb1eea755f", {"id":"b20a2c38-2942-5085-88a3-1bbb1eea755f","name":"tuple","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000105","name":"0"},{"target_id":"00000000-0000-0000-0000-000000000105","name":"1"}],"range_element_id":null,"multirange_element_id":null} as any); spec.set("416fe1a6-d62c-5481-80cd-2102a37b3415", {"id":"416fe1a6-d62c-5481-80cd-2102a37b3415","name":"tuple","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000101","name":"0"},{"target_id":"00000000-0000-0000-0000-00000000010f","name":"1"}],"range_element_id":null,"multirange_element_id":null} as any); -spec.set("1c2d508e-4b36-11ef-b1df-edbc38ebd518", {"id":"1c2d508e-4b36-11ef-b1df-edbc38ebd518","name":"tuple","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"1bdb81bf-4b36-11ef-b53e-0581de928de0","name":"symbol"},{"target_id":"1a368674-4b36-11ef-b9c0-b7de70401604","name":"decimals"}],"range_element_id":null,"multirange_element_id":null} as any); +spec.set("5f1f2067-4ca5-11ef-a3b9-4340f6c9a103", {"id":"5f1f2067-4ca5-11ef-a3b9-4340f6c9a103","name":"tuple","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"5ede9377-4ca5-11ef-9b2c-d10ba38b9cc3","name":"symbol"},{"target_id":"5ddeceee-4ca5-11ef-af1c-d716780f2bd4","name":"decimals"}],"range_element_id":null,"multirange_element_id":null} as any); spec.set("67996f7a-c82f-5b58-bb0a-f29764ee45c2", {"id":"67996f7a-c82f-5b58-bb0a-f29764ee45c2","name":"tuple>","is_abstract":false,"kind":"tuple","enum_values":null,"is_seq":false,"material_id":null,"bases":[],"union_of":[],"intersection_of":[],"pointers":[],"exclusives":[],"backlinks":[],"backlink_stubs":[],"array_element_id":null,"tuple_elements":[{"target_id":"00000000-0000-0000-0000-000000000101","name":"text"},{"target_id":"1378c9c3-b11a-5a95-bdac-066a4143094d","name":"refs"}],"range_element_id":null,"multirange_element_id":null} as any); spec.set("00000000-0000-0000-0000-0000000001ff", {"id":"00000000-0000-0000-0000-0000000001ff","name":"std::number","is_abstract":false,"is_seq":false,"kind":"scalar","enum_values":null,"material_id":null,"bases":[]} as any); diff --git a/api/dbschema/edgeql-js/modules/cfg.ts b/api/dbschema/edgeql-js/modules/cfg.ts index e3788ebe6..ed32812a0 100644 --- a/api/dbschema/edgeql-js/modules/cfg.ts +++ b/api/dbschema/edgeql-js/modules/cfg.ts @@ -62,6 +62,7 @@ export type $AbstractConfigλShape = $.typeutil.flatten<$ConfigObjectλShape & { "default_statistics_target": $.PropertyDesc<_std.$int64, $.Cardinality.AtMostOne, false, false, false, false>; "force_database_error": $.PropertyDesc<_std.$str, $.Cardinality.AtMostOne, false, false, false, true>; "_pg_prepared_statement_cache_size": $.PropertyDesc<_std.$int16, $.Cardinality.One, false, false, false, true>; + "auto_rebuild_query_cache_timeout": $.PropertyDesc<_std.$duration, $.Cardinality.AtMostOne, false, false, false, true>; "; "; }>; diff --git a/api/dbschema/edgeql-js/modules/default.ts b/api/dbschema/edgeql-js/modules/default.ts index acd09f978..bad0f2b22 100644 --- a/api/dbschema/edgeql-js/modules/default.ts +++ b/api/dbschema/edgeql-js/modules/default.ts @@ -6,43 +6,43 @@ import type * as _std from "./std"; export type $AbiSource = { "Verified": $.$expr_Literal<$AbiSource>; } & $.EnumType<"default::AbiSource", ["Verified"]>; -const AbiSource: $AbiSource = $.makeType<$AbiSource>(_.spec, "298e04d4-4b36-11ef-a84a-d34f8bbddff6", _.syntax.literal); +const AbiSource: $AbiSource = $.makeType<$AbiSource>(_.spec, "6a961afe-4ca5-11ef-87a6-bd878921b9fc", _.syntax.literal); export type $Address = $.ScalarType<"std::str", string>; -const Address: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "1a33a4c1-4b36-11ef-a7f2-d57008777643", _.syntax.literal); +const Address: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "5ddcd0de-4ca5-11ef-8df4-3ffb14dc9232", _.syntax.literal); export type $Amount = $.ScalarType<"std::decimal", string>; -const Amount: $.scalarTypeWithConstructor<_std.$decimal, never> = $.makeType<$.scalarTypeWithConstructor<_std.$decimal, never>>(_.spec, "299884a8-4b36-11ef-bbed-758939f35803", _.syntax.literal); +const Amount: $.scalarTypeWithConstructor<_std.$decimal, never> = $.makeType<$.scalarTypeWithConstructor<_std.$decimal, never>>(_.spec, "6aa0cc82-4ca5-11ef-87f5-c7f7265088f3", _.syntax.literal); export type $ApprovalIssue = { "HashMismatch": $.$expr_Literal<$ApprovalIssue>; "Expired": $.$expr_Literal<$ApprovalIssue>; } & $.EnumType<"default::ApprovalIssue", ["HashMismatch", "Expired"]>; -const ApprovalIssue: $ApprovalIssue = $.makeType<$ApprovalIssue>(_.spec, "1a275d06-4b36-11ef-b8e8-c3caa8d68cb7", _.syntax.literal); +const ApprovalIssue: $ApprovalIssue = $.makeType<$ApprovalIssue>(_.spec, "5dd32b18-4ca5-11ef-8908-0152ca6f9c93", _.syntax.literal); export type $BoundedStr = $.ScalarType<"std::str", string>; -const BoundedStr: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "1a8e8942-4b36-11ef-a6fa-d799675b75ad", _.syntax.literal); +const BoundedStr: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "5e292db3-4ca5-11ef-9c55-8599349dbf7e", _.syntax.literal); export type $Bytes = $.ScalarType<"std::str", string>; -const Bytes: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "1a82d952-4b36-11ef-a948-ffba23af87f6", _.syntax.literal); +const Bytes: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "5e201426-4ca5-11ef-ad4b-473805dcae4c", _.syntax.literal); export type $Bytes32 = $.ScalarType<"std::str", string>; -const Bytes32: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "1a413352-4b36-11ef-9f5d-7f4d5586255e", _.syntax.literal); +const Bytes32: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "5de6699f-4ca5-11ef-acc5-d7d265bcd6bd", _.syntax.literal); export type $Bytes4 = $.ScalarType<"std::str", string>; -const Bytes4: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "1fa5b7cb-4b36-11ef-8b27-63fa8b83bc4d", _.syntax.literal); +const Bytes4: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "616eae9b-4ca5-11ef-b511-292a009dc950", _.syntax.literal); export type $CloudProvider = { "Apple": $.$expr_Literal<$CloudProvider>; "Google": $.$expr_Literal<$CloudProvider>; } & $.EnumType<"default::CloudProvider", ["Apple", "Google"]>; -const CloudProvider: $CloudProvider = $.makeType<$CloudProvider>(_.spec, "1b7fdd13-4b36-11ef-85fe-8b424baca406", _.syntax.literal); +const CloudProvider: $CloudProvider = $.makeType<$CloudProvider>(_.spec, "5ead5b32-4ca5-11ef-9f86-39a3186e8917", _.syntax.literal); export type $MAC = $.ScalarType<"std::str", string>; -const MAC: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "1b7d40fd-4b36-11ef-929e-5b00fd0f092b", _.syntax.literal); +const MAC: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "5eac7755-4ca5-11ef-8c59-b1ff14e546b9", _.syntax.literal); export type $NonEmptyStr = $.ScalarType<"std::str", string>; -const NonEmptyStr: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "1bdb81bf-4b36-11ef-b53e-0581de928de0", _.syntax.literal); +const NonEmptyStr: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "5ede9377-4ca5-11ef-9b2c-d10ba38b9cc3", _.syntax.literal); export type $TransactionStatus = { "Pending": $.$expr_Literal<$TransactionStatus>; @@ -52,28 +52,28 @@ export type $TransactionStatus = { "Failed": $.$expr_Literal<$TransactionStatus>; "Cancelled": $.$expr_Literal<$TransactionStatus>; } & $.EnumType<"default::TransactionStatus", ["Pending", "Scheduled", "Executing", "Successful", "Failed", "Cancelled"]>; -const TransactionStatus: $TransactionStatus = $.makeType<$TransactionStatus>(_.spec, "1bdd1d8d-4b36-11ef-b87e-a594c493b827", _.syntax.literal); +const TransactionStatus: $TransactionStatus = $.makeType<$TransactionStatus>(_.spec, "5edf70a4-4ca5-11ef-b1ed-cf5638223ae2", _.syntax.literal); export type $UAddress = $.ScalarType<"std::str", string>; -const UAddress: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "1a30a3aa-4b36-11ef-96e8-036575b5b350", _.syntax.literal); +const UAddress: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "5dda9836-4ca5-11ef-acf5-437102eb4894", _.syntax.literal); export type $Url = $.ScalarType<"std::str", string>; -const Url: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "1a42b750-4b36-11ef-981e-a578ba2a1e5f", _.syntax.literal); +const Url: $.scalarTypeWithConstructor<_std.$str, never> = $.makeType<$.scalarTypeWithConstructor<_std.$str, never>>(_.spec, "5de76b99-4ca5-11ef-a8fd-ffc4d6d66524", _.syntax.literal); export type $uint16 = $.ScalarType<"std::number", number>; -const uint16: $.scalarTypeWithConstructor<_std.$number, string> = $.makeType<$.scalarTypeWithConstructor<_std.$number, string>>(_.spec, "1a368674-4b36-11ef-b9c0-b7de70401604", _.syntax.literal); +const uint16: $.scalarTypeWithConstructor<_std.$number, string> = $.makeType<$.scalarTypeWithConstructor<_std.$number, string>>(_.spec, "5ddeceee-4ca5-11ef-af1c-d716780f2bd4", _.syntax.literal); export type $uint224 = $.ScalarType<"std::bigint", bigint>; -const uint224: $.scalarTypeWithConstructor<_std.$bigint, never> = $.makeType<$.scalarTypeWithConstructor<_std.$bigint, never>>(_.spec, "1fae5ddd-4b36-11ef-9b52-579ac964ba55", _.syntax.literal); +const uint224: $.scalarTypeWithConstructor<_std.$bigint, never> = $.makeType<$.scalarTypeWithConstructor<_std.$bigint, never>>(_.spec, "61766170-4ca5-11ef-afd5-d3ebf99a5ad9", _.syntax.literal); export type $uint256 = $.ScalarType<"std::bigint", bigint>; -const uint256: $.scalarTypeWithConstructor<_std.$bigint, never> = $.makeType<$.scalarTypeWithConstructor<_std.$bigint, never>>(_.spec, "1bccea41-4b36-11ef-a7c9-2b37b2c96f6e", _.syntax.literal); +const uint256: $.scalarTypeWithConstructor<_std.$bigint, never> = $.makeType<$.scalarTypeWithConstructor<_std.$bigint, never>>(_.spec, "5ed70515-4ca5-11ef-ba40-4f0f6a12fb9a", _.syntax.literal); export type $uint32 = $.ScalarType<"std::number", number>; -const uint32: $.scalarTypeWithConstructor<_std.$number, string> = $.makeType<$.scalarTypeWithConstructor<_std.$number, string>>(_.spec, "1d9fdabc-4b36-11ef-bac1-f7044983d249", _.syntax.literal); +const uint32: $.scalarTypeWithConstructor<_std.$number, string> = $.makeType<$.scalarTypeWithConstructor<_std.$number, string>>(_.spec, "5fecb02f-4ca5-11ef-8048-175cec1b6f0c", _.syntax.literal); export type $uint64 = $.ScalarType<"std::bigint", bigint>; -const uint64: $.scalarTypeWithConstructor<_std.$bigint, never> = $.makeType<$.scalarTypeWithConstructor<_std.$bigint, never>>(_.spec, "299a2283-4b36-11ef-9c02-9b022f0204f9", _.syntax.literal); +const uint64: $.scalarTypeWithConstructor<_std.$bigint, never> = $.makeType<$.scalarTypeWithConstructor<_std.$bigint, never>>(_.spec, "6aa26ab8-4ca5-11ef-ac13-570aaf7b32d4", _.syntax.literal); export type $LabelledλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588λShape & { "address": $.PropertyDesc<$UAddress, $.Cardinality.One, false, false, false, false>; @@ -86,7 +86,7 @@ export type $LabelledλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4fa5f738 type $Labelled = $.ObjectType<"default::Labelled", $LabelledλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], ]>; -const $Labelled = $.makeType<$Labelled>(_.spec, "1a43dc58-4b36-11ef-9620-990ee4522e61", _.syntax.literal); +const $Labelled = $.makeType<$Labelled>(_.spec, "5de85cc7-4ca5-11ef-9493-39ac5fad6fde", _.syntax.literal); const Labelled: $.$expr_PathNode<$.TypeSet<$Labelled, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Labelled, $.Cardinality.Many), null); @@ -129,7 +129,7 @@ type $Account = $.ObjectType<"default::Account", $AccountλShape, null, [ ...$Labelled['__exclusives__'], {address: {__element__: $UAddress, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $Account = $.makeType<$Account>(_.spec, "1a4b89b6-4b36-11ef-8f8a-f72b02699cff", _.syntax.literal); +const $Account = $.makeType<$Account>(_.spec, "5dee2ff0-4ca5-11ef-b17a-3db83afa9cff", _.syntax.literal); const Account: $.$expr_PathNode<$.TypeSet<$Account, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Account, $.Cardinality.Many), null); @@ -144,7 +144,7 @@ export type $ActionλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4fa5f73840 type $Action = $.ObjectType<"default::Action", $ActionλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], ]>; -const $Action = $.makeType<$Action>(_.spec, "1faa1af4-4b36-11ef-abac-436a642cad0f", _.syntax.literal); +const $Action = $.makeType<$Action>(_.spec, "6172f3ff-4ca5-11ef-b3bc-0f766e4cdc3f", _.syntax.literal); const Action: $.$expr_PathNode<$.TypeSet<$Action, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Action, $.Cardinality.Many), null); @@ -158,7 +158,7 @@ export type $ActionFunctionλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4f type $ActionFunction = $.ObjectType<"default::ActionFunction", $ActionFunctionλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], ]>; -const $ActionFunction = $.makeType<$ActionFunction>(_.spec, "1fa6c1ec-4b36-11ef-9f47-79c5ef75ab80", _.syntax.literal); +const $ActionFunction = $.makeType<$ActionFunction>(_.spec, "616ffca6-4ca5-11ef-8539-4b7a8e90b437", _.syntax.literal); const ActionFunction: $.$expr_PathNode<$.TypeSet<$ActionFunction, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($ActionFunction, $.Cardinality.Many), null); @@ -171,7 +171,7 @@ type $ProposalResponse = $.ObjectType<"default::ProposalResponse", $ProposalResp ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], {proposal: {__element__: $Proposal, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },approver: {__element__: $Approver, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $ProposalResponse = $.makeType<$ProposalResponse>(_.spec, "1a83f60d-4b36-11ef-b876-99ecb3447428", _.syntax.literal); +const $ProposalResponse = $.makeType<$ProposalResponse>(_.spec, "5e2190df-4ca5-11ef-b210-2dc960a5a551", _.syntax.literal); const ProposalResponse: $.$expr_PathNode<$.TypeSet<$ProposalResponse, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($ProposalResponse, $.Cardinality.Many), null); @@ -188,7 +188,7 @@ export type $ApprovalλShape = $.typeutil.flatten<$ProposalResponseλShape & { type $Approval = $.ObjectType<"default::Approval", $ApprovalλShape, null, [ ...$ProposalResponse['__exclusives__'], ]>; -const $Approval = $.makeType<$Approval>(_.spec, "1a892717-4b36-11ef-9422-79ef01774168", _.syntax.literal); +const $Approval = $.makeType<$Approval>(_.spec, "5e257f08-4ca5-11ef-9fba-a3d5d247989e", _.syntax.literal); const Approval: $.$expr_PathNode<$.TypeSet<$Approval, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Approval, $.Cardinality.Many), null); @@ -219,7 +219,7 @@ type $Approver = $.ObjectType<"default::Approver", $ApproverλShape, null, [ {user: {__element__: $User, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },address: {__element__: $Address, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, {address: {__element__: $Address, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $Approver = $.makeType<$Approver>(_.spec, "1c64092c-4b36-11ef-99c5-4ff4bedc1903", _.syntax.literal); +const $Approver = $.makeType<$Approver>(_.spec, "5f2237e8-4ca5-11ef-afc9-975fa86b969c", _.syntax.literal); const Approver: $.$expr_PathNode<$.TypeSet<$Approver, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Approver, $.Cardinality.Many), null); @@ -237,7 +237,7 @@ type $ApproverDetails = $.ObjectType<"default::ApproverDetails", $ApproverDetail ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], {approver: {__element__: $Approver, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $ApproverDetails = $.makeType<$ApproverDetails>(_.spec, "1b801c6c-4b36-11ef-8953-8ffddeb8e463", _.syntax.literal); +const $ApproverDetails = $.makeType<$ApproverDetails>(_.spec, "5ead7865-4ca5-11ef-a3bd-e7eac02cd5ee", _.syntax.literal); const ApproverDetails: $.$expr_PathNode<$.TypeSet<$ApproverDetails, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($ApproverDetails, $.Cardinality.Many), null); @@ -246,7 +246,7 @@ export type $UserLabelledλShape = $.typeutil.flatten<$LabelledλShape & { type $UserLabelled = $.ObjectType<"default::UserLabelled", $UserLabelledλShape, null, [ ...$Labelled['__exclusives__'], ]>; -const $UserLabelled = $.makeType<$UserLabelled>(_.spec, "1c1b3274-4b36-11ef-891e-37c491e81ae2", _.syntax.literal); +const $UserLabelled = $.makeType<$UserLabelled>(_.spec, "5f03604c-4ca5-11ef-802c-ed51330482be", _.syntax.literal); const UserLabelled: $.$expr_PathNode<$.TypeSet<$UserLabelled, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($UserLabelled, $.Cardinality.Many), null); @@ -261,7 +261,7 @@ type $Contact = $.ObjectType<"default::Contact", $ContactλShape, null, [ ...$UserLabelled['__exclusives__'], {user: {__element__: $User, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },name: {__element__: $BoundedStr, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $Contact = $.makeType<$Contact>(_.spec, "1cc3bb62-4b36-11ef-9770-a7af0b2f92d8", _.syntax.literal); +const $Contact = $.makeType<$Contact>(_.spec, "5f5e8397-4ca5-11ef-abfb-2f8539a20d77", _.syntax.literal); const Contact: $.$expr_PathNode<$.TypeSet<$Contact, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Contact, $.Cardinality.Many), null); @@ -273,7 +273,7 @@ type $Contract = $.ObjectType<"default::Contract", $ContractλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], {address: {__element__: $Address, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $Contract = $.makeType<$Contract>(_.spec, "2992acbf-4b36-11ef-bef3-9186886cdd4c", _.syntax.literal); +const $Contract = $.makeType<$Contract>(_.spec, "6a9aed65-4ca5-11ef-9bc2-d55d381da0fd", _.syntax.literal); const Contract: $.$expr_PathNode<$.TypeSet<$Contract, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Contract, $.Cardinality.Many), null); @@ -296,7 +296,7 @@ export type $EventλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4fa5f73840c type $Event = $.ObjectType<"default::Event", $EventλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], ]>; -const $Event = $.makeType<$Event>(_.spec, "1da62e27-4b36-11ef-b9a3-bfe7ff669602", _.syntax.literal); +const $Event = $.makeType<$Event>(_.spec, "5ff093bc-4ca5-11ef-9c43-6f19ada07e90", _.syntax.literal); const Event: $.$expr_PathNode<$.TypeSet<$Event, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Event, $.Cardinality.Many), null); @@ -317,7 +317,7 @@ type $Result = $.ObjectType<"default::Result", $ResultλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], {systx: {__element__: $SystemTx, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $Result = $.makeType<$Result>(_.spec, "1b5188a7-4b36-11ef-b3aa-eb10666d6d03", _.syntax.literal); +const $Result = $.makeType<$Result>(_.spec, "5e94264b-4ca5-11ef-81c2-851fd2b5c5ec", _.syntax.literal); const Result: $.$expr_PathNode<$.TypeSet<$Result, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Result, $.Cardinality.Many), null); @@ -330,7 +330,7 @@ export type $ReceiptResultλShape = $.typeutil.flatten<$ResultλShape & { type $ReceiptResult = $.ObjectType<"default::ReceiptResult", $ReceiptResultλShape, null, [ ...$Result['__exclusives__'], ]>; -const $ReceiptResult = $.makeType<$ReceiptResult>(_.spec, "1b5696a7-4b36-11ef-86fb-4d3c7eac55c1", _.syntax.literal); +const $ReceiptResult = $.makeType<$ReceiptResult>(_.spec, "5e975625-4ca5-11ef-a9a7-0f9650e94845", _.syntax.literal); const ReceiptResult: $.$expr_PathNode<$.TypeSet<$ReceiptResult, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($ReceiptResult, $.Cardinality.Many), null); @@ -340,7 +340,7 @@ export type $FailedλShape = $.typeutil.flatten<$ReceiptResultλShape & { type $Failed = $.ObjectType<"default::Failed", $FailedλShape, null, [ ...$ReceiptResult['__exclusives__'], ]>; -const $Failed = $.makeType<$Failed>(_.spec, "24547899-4b36-11ef-90e0-37dc15d66171", _.syntax.literal); +const $Failed = $.makeType<$Failed>(_.spec, "65b798d7-4ca5-11ef-a444-390b5f498c9a", _.syntax.literal); const Failed: $.$expr_PathNode<$.TypeSet<$Failed, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Failed, $.Cardinality.Many), null); @@ -356,7 +356,7 @@ type $Function = $.ObjectType<"default::Function", $FunctionλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], {abiMd5: {__element__: _std.$str, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $Function = $.makeType<$Function>(_.spec, "298e216c-4b36-11ef-9448-4731854e1798", _.syntax.literal); +const $Function = $.makeType<$Function>(_.spec, "6a9639ba-4ca5-11ef-b273-9d776e1189b3", _.syntax.literal); const Function: $.$expr_PathNode<$.TypeSet<$Function, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Function, $.Cardinality.Many), null); @@ -365,7 +365,7 @@ export type $GlobalLabelλShape = $.typeutil.flatten<$LabelledλShape & { type $GlobalLabel = $.ObjectType<"default::GlobalLabel", $GlobalLabelλShape, null, [ ...$Labelled['__exclusives__'], ]>; -const $GlobalLabel = $.makeType<$GlobalLabel>(_.spec, "1d83972e-4b36-11ef-a5fa-33913cc6bc72", _.syntax.literal); +const $GlobalLabel = $.makeType<$GlobalLabel>(_.spec, "5fd91d02-4ca5-11ef-9583-cb65e38f1de8", _.syntax.literal); const GlobalLabel: $.$expr_PathNode<$.TypeSet<$GlobalLabel, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($GlobalLabel, $.Cardinality.Many), null); @@ -393,7 +393,7 @@ type $Proposal = $.ObjectType<"default::Proposal", $ProposalλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], {hash: {__element__: $Bytes32, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $Proposal = $.makeType<$Proposal>(_.spec, "1a906b59-4b36-11ef-bf52-61767406ef1a", _.syntax.literal); +const $Proposal = $.makeType<$Proposal>(_.spec, "5e2a2680-4ca5-11ef-8f61-79e494cad542", _.syntax.literal); const Proposal: $.$expr_PathNode<$.TypeSet<$Proposal, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Proposal, $.Cardinality.Many), null); @@ -408,7 +408,7 @@ export type $MessageλShape = $.typeutil.flatten<$ProposalλShape & { type $Message = $.ObjectType<"default::Message", $MessageλShape, null, [ ...$Proposal['__exclusives__'], ]>; -const $Message = $.makeType<$Message>(_.spec, "1b9a1412-4b36-11ef-82a8-4b9a0cad881b", _.syntax.literal); +const $Message = $.makeType<$Message>(_.spec, "5ebaef20-4ca5-11ef-a2e8-01685d5aa6c8", _.syntax.literal); const Message: $.$expr_PathNode<$.TypeSet<$Message, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Message, $.Cardinality.Many), null); @@ -425,7 +425,7 @@ export type $OperationλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4fa5f73 type $Operation = $.ObjectType<"default::Operation", $OperationλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], ]>; -const $Operation = $.makeType<$Operation>(_.spec, "1bd4ecce-4b36-11ef-901f-d18c068d9e75", _.syntax.literal); +const $Operation = $.makeType<$Operation>(_.spec, "5edb2383-4ca5-11ef-bf9a-f900748efb6d", _.syntax.literal); const Operation: $.$expr_PathNode<$.TypeSet<$Operation, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Operation, $.Cardinality.Many), null); @@ -438,7 +438,7 @@ export type $PaymasterFeesλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4fa type $PaymasterFees = $.ObjectType<"default::PaymasterFees", $PaymasterFeesλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], ]>; -const $PaymasterFees = $.makeType<$PaymasterFees>(_.spec, "2583c2d5-4b36-11ef-938f-05cb388e257e", _.syntax.literal); +const $PaymasterFees = $.makeType<$PaymasterFees>(_.spec, "669db769-4ca5-11ef-837c-454737a7fbed", _.syntax.literal); const PaymasterFees: $.$expr_PathNode<$.TypeSet<$PaymasterFees, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($PaymasterFees, $.Cardinality.Many), null); @@ -467,7 +467,7 @@ export type $PolicyStateλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4fa5f type $PolicyState = $.ObjectType<"default::PolicyState", $PolicyStateλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], ]>; -const $PolicyState = $.makeType<$PolicyState>(_.spec, "1fbb6622-4b36-11ef-90df-5d276d241e99", _.syntax.literal); +const $PolicyState = $.makeType<$PolicyState>(_.spec, "61817794-4ca5-11ef-9dbf-594bbdf4d9c1", _.syntax.literal); const PolicyState: $.$expr_PathNode<$.TypeSet<$PolicyState, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($PolicyState, $.Cardinality.Many), null); @@ -484,8 +484,8 @@ export type $PolicyλShape = $.typeutil.flatten<$PolicyStateλShape & { "; "; "; - "; "; + "; "; "; "; @@ -493,7 +493,7 @@ export type $PolicyλShape = $.typeutil.flatten<$PolicyStateλShape & { type $Policy = $.ObjectType<"default::Policy", $PolicyλShape, null, [ ...$PolicyState['__exclusives__'], ]>; -const $Policy = $.makeType<$Policy>(_.spec, "200cdf19-4b36-11ef-9d96-0bf1afb28023", _.syntax.literal); +const $Policy = $.makeType<$Policy>(_.spec, "61c6e63c-4ca5-11ef-ba19-d7f9c89de017", _.syntax.literal); const Policy: $.$expr_PathNode<$.TypeSet<$Policy, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Policy, $.Cardinality.Many), null); @@ -506,7 +506,7 @@ export type $RejectionλShape = $.typeutil.flatten<$ProposalResponseλShape & { type $Rejection = $.ObjectType<"default::Rejection", $RejectionλShape, null, [ ...$ProposalResponse['__exclusives__'], ]>; -const $Rejection = $.makeType<$Rejection>(_.spec, "1f6e85b5-4b36-11ef-9c84-3df151462fe8", _.syntax.literal); +const $Rejection = $.makeType<$Rejection>(_.spec, "6124ba1d-4ca5-11ef-b5d8-ef5656bcdf46", _.syntax.literal); const Rejection: $.$expr_PathNode<$.TypeSet<$Rejection, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Rejection, $.Cardinality.Many), null); @@ -515,7 +515,7 @@ export type $RemovedPolicyλShape = $.typeutil.flatten<$PolicyStateλShape & { type $RemovedPolicy = $.ObjectType<"default::RemovedPolicy", $RemovedPolicyλShape, null, [ ...$PolicyState['__exclusives__'], ]>; -const $RemovedPolicy = $.makeType<$RemovedPolicy>(_.spec, "20db416c-4b36-11ef-b849-e1614eed38aa", _.syntax.literal); +const $RemovedPolicy = $.makeType<$RemovedPolicy>(_.spec, "626fe938-4ca5-11ef-9756-25b9d52b20d6", _.syntax.literal); const RemovedPolicy: $.$expr_PathNode<$.TypeSet<$RemovedPolicy, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($RemovedPolicy, $.Cardinality.Many), null); @@ -526,7 +526,7 @@ export type $ScheduledλShape = $.typeutil.flatten<$ResultλShape & { type $Scheduled = $.ObjectType<"default::Scheduled", $ScheduledλShape, null, [ ...$Result['__exclusives__'], ]>; -const $Scheduled = $.makeType<$Scheduled>(_.spec, "251298e0-4b36-11ef-8aa5-01eec8c752e5", _.syntax.literal); +const $Scheduled = $.makeType<$Scheduled>(_.spec, "662c4c25-4ca5-11ef-a518-5d099ea9ef3a", _.syntax.literal); const Scheduled: $.$expr_PathNode<$.TypeSet<$Scheduled, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Scheduled, $.Cardinality.Many), null); @@ -542,7 +542,7 @@ type $Simulation = $.ObjectType<"default::Simulation", $SimulationλShape, null, ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], {transfers: {__element__: $TransferDetails, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $Simulation = $.makeType<$Simulation>(_.spec, "1b4bf4ce-4b36-11ef-9e04-6b8996e605e5", _.syntax.literal); +const $Simulation = $.makeType<$Simulation>(_.spec, "5e9060fc-4ca5-11ef-9b3d-51fb30cd6781", _.syntax.literal); const Simulation: $.$expr_PathNode<$.TypeSet<$Simulation, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Simulation, $.Cardinality.Many), null); @@ -552,7 +552,7 @@ export type $SuccessfulλShape = $.typeutil.flatten<$ReceiptResultλShape & { type $Successful = $.ObjectType<"default::Successful", $SuccessfulλShape, null, [ ...$ReceiptResult['__exclusives__'], ]>; -const $Successful = $.makeType<$Successful>(_.spec, "1b686cda-4b36-11ef-b64c-29c88204475f", _.syntax.literal); +const $Successful = $.makeType<$Successful>(_.spec, "5ea170f6-4ca5-11ef-bf31-afea94cfc7c3", _.syntax.literal); const Successful: $.$expr_PathNode<$.TypeSet<$Successful, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Successful, $.Cardinality.Many), null); @@ -569,8 +569,8 @@ export type $SystemTxλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4fa5f738 "result": $.LinkDesc<$Result, $.Cardinality.AtMostOne, {}, false, true, false, false>; "; "; - "; "; + "; "; "; "; @@ -585,7 +585,7 @@ type $SystemTx = $.ObjectType<"default::SystemTx", $SystemTxλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], {hash: {__element__: $Bytes32, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $SystemTx = $.makeType<$SystemTx>(_.spec, "22c7b790-4b36-11ef-b493-0303ea568391", _.syntax.literal); +const $SystemTx = $.makeType<$SystemTx>(_.spec, "6407576a-4ca5-11ef-ae65-21d610945520", _.syntax.literal); const SystemTx: $.$expr_PathNode<$.TypeSet<$SystemTx, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($SystemTx, $.Cardinality.Many), null); @@ -612,7 +612,7 @@ type $Token = $.ObjectType<"default::Token", $TokenλShape, null, [ ...$UserLabelled['__exclusives__'], {user: {__element__: $User, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },address: {__element__: $UAddress, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $Token = $.makeType<$Token>(_.spec, "1c240910-4b36-11ef-80b2-d34b44c27486", _.syntax.literal); +const $Token = $.makeType<$Token>(_.spec, "5f08a947-4ca5-11ef-8b38-29c221c39440", _.syntax.literal); const Token: $.$expr_PathNode<$.TypeSet<$Token, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Token, $.Cardinality.Many), null); @@ -654,7 +654,7 @@ type $Transaction = $.ObjectType<"default::Transaction", $TransactionλShape, nu {paymasterEthFees: {__element__: $PaymasterFees, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, {systx: {__element__: $SystemTx, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $Transaction = $.makeType<$Transaction>(_.spec, "1bdd537c-4b36-11ef-977b-2f12462c627d", _.syntax.literal); +const $Transaction = $.makeType<$Transaction>(_.spec, "5edf8ed4-4ca5-11ef-8ce7-c5b943565f34", _.syntax.literal); const Transaction: $.$expr_PathNode<$.TypeSet<$Transaction, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Transaction, $.Cardinality.Many), null); @@ -674,7 +674,7 @@ export type $TransferDetailsλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4 type $TransferDetails = $.ObjectType<"default::TransferDetails", $TransferDetailsλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], ]>; -const $TransferDetails = $.makeType<$TransferDetails>(_.spec, "1dcf23c0-4b36-11ef-8692-e7389c0ba5f8", _.syntax.literal); +const $TransferDetails = $.makeType<$TransferDetails>(_.spec, "60223aa5-4ca5-11ef-8489-b1524c592d8a", _.syntax.literal); const TransferDetails: $.$expr_PathNode<$.TypeSet<$TransferDetails, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($TransferDetails, $.Cardinality.Many), null); @@ -685,7 +685,7 @@ type $Transferlike = $.ObjectType<"default::Transferlike", $TransferlikeλShape, ...$Event['__exclusives__'], ...$TransferDetails['__exclusives__'], ]>; -const $Transferlike = $.makeType<$Transferlike>(_.spec, "1e07a961-4b36-11ef-aa46-333fc8f1cf02", _.syntax.literal); +const $Transferlike = $.makeType<$Transferlike>(_.spec, "604bc01a-4ca5-11ef-8c8e-956cb484045b", _.syntax.literal); const Transferlike: $.$expr_PathNode<$.TypeSet<$Transferlike, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Transferlike, $.Cardinality.Many), null); @@ -701,7 +701,7 @@ export type $TransferλShape = $.typeutil.flatten<$TransferlikeλShape & { type $Transfer = $.ObjectType<"default::Transfer", $TransferλShape, null, [ ...$Transferlike['__exclusives__'], ]>; -const $Transfer = $.makeType<$Transfer>(_.spec, "1e4be585-4b36-11ef-96af-35796e3fb081", _.syntax.literal); +const $Transfer = $.makeType<$Transfer>(_.spec, "60775221-4ca5-11ef-87bd-a5b051854896", _.syntax.literal); const Transfer: $.$expr_PathNode<$.TypeSet<$Transfer, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($Transfer, $.Cardinality.Many), null); @@ -720,7 +720,7 @@ export type $TransferApprovalλShape = $.typeutil.flatten<$TransferlikeλShape & type $TransferApproval = $.ObjectType<"default::TransferApproval", $TransferApprovalλShape, null, [ ...$Transferlike['__exclusives__'], ]>; -const $TransferApproval = $.makeType<$TransferApproval>(_.spec, "1e91bee4-4b36-11ef-8007-4fe801319b1f", _.syntax.literal); +const $TransferApproval = $.makeType<$TransferApproval>(_.spec, "60a7c17a-4ca5-11ef-8ffd-7d96b96c14db", _.syntax.literal); const TransferApproval: $.$expr_PathNode<$.TypeSet<$TransferApproval, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($TransferApproval, $.Cardinality.Many), null); @@ -734,7 +734,7 @@ export type $TransferLimitλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4fa type $TransferLimit = $.ObjectType<"default::TransferLimit", $TransferLimitλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], ]>; -const $TransferLimit = $.makeType<$TransferLimit>(_.spec, "1fb2e7a4-4b36-11ef-8a22-a92e256d6fbc", _.syntax.literal); +const $TransferLimit = $.makeType<$TransferLimit>(_.spec, "617a241e-4ca5-11ef-a223-13f0879448cb", _.syntax.literal); const TransferLimit: $.$expr_PathNode<$.TypeSet<$TransferLimit, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($TransferLimit, $.Cardinality.Many), null); @@ -749,7 +749,7 @@ type $TransfersConfig = $.ObjectType<"default::TransfersConfig", $TransfersConfi ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], {limits: {__element__: $TransferLimit, __cardinality__: $.Cardinality.One | $.Cardinality.AtMostOne },}, ]>; -const $TransfersConfig = $.makeType<$TransfersConfig>(_.spec, "1fb642e4-4b36-11ef-8a18-1964b67ccfda", _.syntax.literal); +const $TransfersConfig = $.makeType<$TransfersConfig>(_.spec, "617d203b-4ca5-11ef-8359-a50089664c38", _.syntax.literal); const TransfersConfig: $.$expr_PathNode<$.TypeSet<$TransfersConfig, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($TransfersConfig, $.Cardinality.Many), null); @@ -767,7 +767,7 @@ export type $UserλShape = $.typeutil.flatten<_std.$Object_8ce8c71ee4fa5f73840c2 type $User = $.ObjectType<"default::User", $UserλShape, null, [ ..._std.$Object_8ce8c71ee4fa5f73840c22d7eaa58588['__exclusives__'], ]>; -const $User = $.makeType<$User>(_.spec, "1caac907-4b36-11ef-8a7d-cdfd8fc20caa", _.syntax.literal); +const $User = $.makeType<$User>(_.spec, "5f4a7663-4ca5-11ef-b418-515b28451a86", _.syntax.literal); const User: $.$expr_PathNode<$.TypeSet<$User, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($User, $.Cardinality.Many), null); @@ -776,7 +776,7 @@ export type $current_approverλShape = $.typeutil.flatten<$ApproverλShape & { type $current_approver = $.ObjectType<"default::current_approver", $current_approverλShape, null, [ ...$Approver['__exclusives__'], ]>; -const $current_approver = $.makeType<$current_approver>(_.spec, "1ca93982-4b36-11ef-b7ca-15d8819d0bbd", _.syntax.literal); +const $current_approver = $.makeType<$current_approver>(_.spec, "5f498803-4ca5-11ef-91ed-e3c9ff5a9035", _.syntax.literal); const current_approver: $.$expr_PathNode<$.TypeSet<$current_approver, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($current_approver, $.Cardinality.Many), null); @@ -785,7 +785,7 @@ export type $current_userλShape = $.typeutil.flatten<$UserλShape & { type $current_user = $.ObjectType<"default::current_user", $current_userλShape, null, [ ...$User['__exclusives__'], ]>; -const $current_user = $.makeType<$current_user>(_.spec, "1cc2972a-4b36-11ef-96d6-79206edef743", _.syntax.literal); +const $current_user = $.makeType<$current_user>(_.spec, "5f5d8621-4ca5-11ef-9b10-61d3b29d427c", _.syntax.literal); const current_user: $.$expr_PathNode<$.TypeSet<$current_user, $.Cardinality.Many>, null> = _.syntax.$PathNode($.$toSet($current_user, $.Cardinality.Many), null); @@ -801,7 +801,7 @@ function as_chain< ): as_chainλFuncExpr; function as_chain(...args: any[]) { const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('default::as_chain', args, _.spec, [ - {args: [{typeId: "1a30a3aa-4b36-11ef-96e8-036575b5b350", optional: false, setoftype: false, variadic: false}], returnTypeId: "00000000-0000-0000-0000-000000000101"}, + {args: [{typeId: "5dda9836-4ca5-11ef-acf5-437102eb4894", optional: false, setoftype: false, variadic: false}], returnTypeId: "00000000-0000-0000-0000-000000000101"}, ]); return _.syntax.$expressionify({ __kind__: $.ExpressionKind.Function, @@ -825,7 +825,7 @@ function as_address< ): as_addressλFuncExpr; function as_address(...args: any[]) { const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('default::as_address', args, _.spec, [ - {args: [{typeId: "1a30a3aa-4b36-11ef-96e8-036575b5b350", optional: false, setoftype: false, variadic: false}], returnTypeId: "1a33a4c1-4b36-11ef-a7f2-d57008777643"}, + {args: [{typeId: "5dda9836-4ca5-11ef-acf5-437102eb4894", optional: false, setoftype: false, variadic: false}], returnTypeId: "5ddcd0de-4ca5-11ef-8df4-3ffb14dc9232"}, ]); return _.syntax.$expressionify({ __kind__: $.ExpressionKind.Function, @@ -876,7 +876,7 @@ function as_fixed< ): as_fixedλFuncExpr; function as_fixed(...args: any[]) { const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('default::as_fixed', args, _.spec, [ - {args: [{typeId: "00000000-0000-0000-0000-000000000108", optional: false, setoftype: false, variadic: false}, {typeId: "1a368674-4b36-11ef-b9c0-b7de70401604", optional: false, setoftype: false, variadic: false}], returnTypeId: "00000000-0000-0000-0000-000000000110"}, + {args: [{typeId: "00000000-0000-0000-0000-000000000108", optional: false, setoftype: false, variadic: false}, {typeId: "5ddeceee-4ca5-11ef-af1c-d716780f2bd4", optional: false, setoftype: false, variadic: false}], returnTypeId: "00000000-0000-0000-0000-000000000110"}, ]); return _.syntax.$expressionify({ __kind__: $.ExpressionKind.Function, @@ -900,7 +900,7 @@ function is_member< ): is_memberλFuncExpr; function is_member(...args: any[]) { const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('default::is_member', args, _.spec, [ - {args: [{typeId: "1a4b89b6-4b36-11ef-8f8a-f72b02699cff", optional: false, setoftype: false, variadic: false}], returnTypeId: "00000000-0000-0000-0000-000000000109"}, + {args: [{typeId: "5dee2ff0-4ca5-11ef-b17a-3db83afa9cff", optional: false, setoftype: false, variadic: false}], returnTypeId: "00000000-0000-0000-0000-000000000109"}, ]); return _.syntax.$expressionify({ __kind__: $.ExpressionKind.Function, @@ -927,7 +927,7 @@ function as_decimal< ): as_decimalλFuncExpr; function as_decimal(...args: any[]) { const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('default::as_decimal', args, _.spec, [ - {args: [{typeId: "00000000-0000-0000-0000-000000000110", optional: false, setoftype: false, variadic: false}, {typeId: "1a368674-4b36-11ef-b9c0-b7de70401604", optional: false, setoftype: false, variadic: false}], returnTypeId: "00000000-0000-0000-0000-000000000108"}, + {args: [{typeId: "00000000-0000-0000-0000-000000000110", optional: false, setoftype: false, variadic: false}, {typeId: "5ddeceee-4ca5-11ef-af1c-d716780f2bd4", optional: false, setoftype: false, variadic: false}], returnTypeId: "00000000-0000-0000-0000-000000000108"}, ]); return _.syntax.$expressionify({ __kind__: $.ExpressionKind.Function, @@ -954,7 +954,7 @@ function latestPolicy< ): latestPolicyλFuncExpr; function latestPolicy(...args: any[]) { const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('default::latestPolicy', args, _.spec, [ - {args: [{typeId: "1a4b89b6-4b36-11ef-8f8a-f72b02699cff", optional: false, setoftype: false, variadic: false}, {typeId: "00000000-0000-0000-0000-0000000001ff", optional: false, setoftype: false, variadic: false}], returnTypeId: "200cdf19-4b36-11ef-9d96-0bf1afb28023", returnTypemod: "OptionalType"}, + {args: [{typeId: "5dee2ff0-4ca5-11ef-b17a-3db83afa9cff", optional: false, setoftype: false, variadic: false}, {typeId: "00000000-0000-0000-0000-0000000001ff", optional: false, setoftype: false, variadic: false}], returnTypeId: "61c6e63c-4ca5-11ef-ba19-d7f9c89de017", returnTypemod: "OptionalType"}, ]); return _.syntax.$expressionify({ __kind__: $.ExpressionKind.Function, @@ -981,7 +981,7 @@ function tokenForUser< ): tokenForUserλFuncExpr; function tokenForUser(...args: any[]) { const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('default::tokenForUser', args, _.spec, [ - {args: [{typeId: "00000000-0000-0000-0000-000000000101", optional: false, setoftype: false, variadic: false}, {typeId: "1caac907-4b36-11ef-8a7d-cdfd8fc20caa", optional: false, setoftype: false, variadic: false}], returnTypeId: "1c240910-4b36-11ef-80b2-d34b44c27486", returnTypemod: "OptionalType"}, + {args: [{typeId: "00000000-0000-0000-0000-000000000101", optional: false, setoftype: false, variadic: false}, {typeId: "5f4a7663-4ca5-11ef-b418-515b28451a86", optional: false, setoftype: false, variadic: false}], returnTypeId: "5f08a947-4ca5-11ef-8b38-29c221c39440", returnTypemod: "OptionalType"}, ]); return _.syntax.$expressionify({ __kind__: $.ExpressionKind.Function, @@ -1005,7 +1005,7 @@ function token< ): tokenλFuncExpr; function token(...args: any[]) { const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('default::token', args, _.spec, [ - {args: [{typeId: "00000000-0000-0000-0000-000000000101", optional: false, setoftype: false, variadic: false}], returnTypeId: "1c240910-4b36-11ef-80b2-d34b44c27486", returnTypemod: "OptionalType"}, + {args: [{typeId: "00000000-0000-0000-0000-000000000101", optional: false, setoftype: false, variadic: false}], returnTypeId: "5f08a947-4ca5-11ef-8b38-29c221c39440", returnTypemod: "OptionalType"}, ]); return _.syntax.$expressionify({ __kind__: $.ExpressionKind.Function, @@ -1056,7 +1056,7 @@ function labelForUser< ): labelForUserλFuncExpr; function labelForUser(...args: any[]) { const {returnType, cardinality, args: positionalArgs, namedArgs} = _.syntax.$resolveOverload('default::labelForUser', args, _.spec, [ - {args: [{typeId: "00000000-0000-0000-0000-000000000101", optional: false, setoftype: false, variadic: false}, {typeId: "1caac907-4b36-11ef-8a7d-cdfd8fc20caa", optional: false, setoftype: false, variadic: false}], returnTypeId: "00000000-0000-0000-0000-000000000101", returnTypemod: "OptionalType"}, + {args: [{typeId: "00000000-0000-0000-0000-000000000101", optional: false, setoftype: false, variadic: false}, {typeId: "5f4a7663-4ca5-11ef-b418-515b28451a86", optional: false, setoftype: false, variadic: false}], returnTypeId: "00000000-0000-0000-0000-000000000101", returnTypemod: "OptionalType"}, ]); return _.syntax.$expressionify({ __kind__: $.ExpressionKind.Function, @@ -1089,13 +1089,13 @@ const $default__globals: { current_accounts: _.syntax.$expr_Global< $.makeType(_.spec, "1378c9c3-b11a-5a95-bdac-066a4143094d", _.syntax.literal), $.Cardinality.AtMostOne) as any, current_approver: _.syntax.makeGlobal( "default::current_approver", - $.makeType(_.spec, "1ca93982-4b36-11ef-b7ca-15d8819d0bbd", _.syntax.literal), + $.makeType(_.spec, "5f498803-4ca5-11ef-91ed-e3c9ff5a9035", _.syntax.literal), $.Cardinality.AtMostOne) as any, current_approver_address: _.syntax.makeGlobal( "default::current_approver_address", - $.makeType(_.spec, "1a33a4c1-4b36-11ef-a7f2-d57008777643", _.syntax.literal), + $.makeType(_.spec, "5ddcd0de-4ca5-11ef-8df4-3ffb14dc9232", _.syntax.literal), $.Cardinality.AtMostOne) as any, current_user: _.syntax.makeGlobal( "default::current_user", - $.makeType(_.spec, "1cc2972a-4b36-11ef-96d6-79206edef743", _.syntax.literal), + $.makeType(_.spec, "5f5d8621-4ca5-11ef-9b10-61d3b29d427c", _.syntax.literal), $.Cardinality.AtMostOne) as any}; diff --git a/api/dbschema/interfaces.ts b/api/dbschema/interfaces.ts index 32745d172..c90d5f9ae 100644 --- a/api/dbschema/interfaces.ts +++ b/api/dbschema/interfaces.ts @@ -38,6 +38,7 @@ export namespace cfg { "default_statistics_target"?: number | null; "force_database_error"?: string | null; "_pg_prepared_statement_cache_size": number; + "auto_rebuild_query_cache_timeout"?: edgedb.Duration | null; } export type AllowBareDDL = "AlwaysAllow" | "NeverAllow"; export interface Auth extends ConfigObject { diff --git a/api/src/feat/accounts/accounts.service.ts b/api/src/feat/accounts/accounts.service.ts index 096b218a0..2a713d664 100644 --- a/api/src/feat/accounts/accounts.service.ts +++ b/api/src/feat/accounts/accounts.service.ts @@ -151,7 +151,11 @@ export class AccountsService { }), ); - await this.policies.propose({ account: address, policies: selfRefPolicies }, true); + await this.policies.propose({ + account: address, + policies: selfRefPolicies, + isInitialization: true, + }); }); this.contracts.addAccountAsVerified(asAddress(address)); diff --git a/api/src/feat/policies/insert-policies.edgeql b/api/src/feat/policies/insert-policies.edgeql index e3e310b23..2e8bdbf46 100644 --- a/api/src/feat/policies/insert-policies.edgeql +++ b/api/src/feat/policies/insert-policies.edgeql @@ -2,11 +2,11 @@ with account := (select Account filter .address = $account), txId := $transaction, tx := ((select Transaction filter .id = txId) if exists txId else {}) for p in array_unpack(>$policies) union ( - insert Policy { + with policy := (insert Policy { account := account, key := p['key'], proposal := tx, - activationBlock := p['activationBlock'], + activationBlock := json_get(p, 'activationBlock'), name := p['name'], threshold := p['threshold'], approvers := ( @@ -39,11 +39,11 @@ for p in array_unpack(>$policies) union ( defaultAllow := p['transfers']['defaultAllow'], budget := p['transfers']['budget'], limits := ( - for l in array_unpack(>json_get(p, 'transfers.limits')) union ( + for l in array_unpack(>json_get(p, 'transfers', 'limits')) union ( insert TransferLimit { token :=
l['token'], amount := l['amount'], - duration := l['duration'], + duration := l['duration'], } ) ), @@ -51,5 +51,9 @@ for p in array_unpack(>$policies) union ( ), allowMessages := json_get(p, 'allowMessages'), delay := json_get(p, 'delay'), + }) + select policy { + id, + key } ) \ No newline at end of file diff --git a/api/src/feat/policies/insert-policies.query.ts b/api/src/feat/policies/insert-policies.query.ts index b799ca8cc..3269c4849 100644 --- a/api/src/feat/policies/insert-policies.query.ts +++ b/api/src/feat/policies/insert-policies.query.ts @@ -10,6 +10,7 @@ export type InsertPoliciesArgs = { export type InsertPoliciesReturns = Array<{ "id": string; + "key": number; }>; export function insertPolicies(client: Executor, args: InsertPoliciesArgs): Promise { @@ -18,11 +19,11 @@ with account := (select Account filter .address = $account), txId := $transaction, tx := ((select Transaction filter .id = txId) if exists txId else {}) for p in array_unpack(>$policies) union ( - insert Policy { + with policy := (insert Policy { account := account, key := p['key'], proposal := tx, - activationBlock := p['activationBlock'], + activationBlock := json_get(p, 'activationBlock'), name := p['name'], threshold := p['threshold'], approvers := ( @@ -55,11 +56,11 @@ for p in array_unpack(>$policies) union ( defaultAllow := p['transfers']['defaultAllow'], budget := p['transfers']['budget'], limits := ( - for l in array_unpack(>json_get(p, 'transfers.limits')) union ( + for l in array_unpack(>json_get(p, 'transfers', 'limits')) union ( insert TransferLimit { token :=
l['token'], amount := l['amount'], - duration := l['duration'], + duration := l['duration'], } ) ), @@ -67,6 +68,10 @@ for p in array_unpack(>$policies) union ( ), allowMessages := json_get(p, 'allowMessages'), delay := json_get(p, 'delay'), + }) + select policy { + id, + key } )`, args); diff --git a/api/src/feat/policies/policies.service.spec.ts b/api/src/feat/policies/policies.service.spec.ts index f41583d61..c42e2a299 100644 --- a/api/src/feat/policies/policies.service.spec.ts +++ b/api/src/feat/policies/policies.service.spec.ts @@ -1,287 +1,287 @@ -// import { Test } from '@nestjs/testing'; -// import { createMock, DeepMocked } from '@golevelup/ts-jest'; -// import { CreatePolicyParams, PoliciesService } from './policies.service'; -// import { -// asPolicyKey, -// asSelector, -// asUUID, -// randomDeploySalt, -// randomHex, -// UAddress, -// ZERO_ADDR, -// } from 'lib'; -// import { UserContext } from '~/core/context'; -// import { asUser, getUserCtx } from '~/core/context'; -// import { randomAddress, randomLabel, randomUAddress, randomUser } from '~/util/test'; -// import { TransactionsService } from '../transactions/transactions.service'; -// import { DatabaseService } from '~/core/database'; -// import e from '~/edgeql-js'; -// import { inputAsPolicy, policyStateAsPolicy, PolicyShape, selectPolicy } from './policies.util'; -// import { PolicyInput } from './policies.input'; -// import { v1 as uuidv1 } from 'uuid'; -// import { selectAccount } from '../accounts/accounts.util'; -// import { and } from '~/core/database'; - -// describe(PoliciesService.name, () => { -// let service: PoliciesService; -// let db: DatabaseService; -// let proposals: DeepMocked; - -// beforeEach(async () => { -// const module = await Test.createTestingModule({ -// providers: [PoliciesService, DatabaseService], -// }) -// .useMocker(createMock) -// .compile(); - -// service = module.get(PoliciesService); -// db = module.get(DatabaseService); -// proposals = module.get(TransactionsService); -// }); - -// let user1Account: UAddress; -// let user1: UserContext; - -// const create = async ({ -// activate, -// ...params -// }: Partial & { activate?: boolean } = {}) => { -// const userCtx = getUserCtx(); -// const account = user1Account; - -// const accountId = uuidv1(); -// userCtx.accounts.push({ id: accountId, address: account }); -// await e.insert(e.Approver, { address: userCtx.approver }).unlessConflict().run(db.client); - -// await db.query( -// e.insert(e.Account, { -// id: accountId, -// address: account, -// name: randomLabel(), -// implementation: randomAddress(), -// salt: randomDeploySalt(), -// }), -// ); - -// const initPolicy = ( -// await service.create({ -// account, -// approvers: [userCtx.approver], -// initState: true, -// }) -// )._unsafeUnwrap(); - -// proposals.propose.mockImplementation(async () => { -// const hash = randomHex(32); - -// const { id } = await db.query( -// e.insert(e.Transaction, { -// hash, -// account: selectAccount(account), -// policy: selectPolicy(initPolicy.id), -// validationErrors: [], -// unorderedOperations: e.insert(e.Operation, { to: ZERO_ADDR }), -// timestamp: new Date(), -// paymaster: ZERO_ADDR, -// feeToken: e.assert_single( -// e.select(e.Token, (t) => ({ -// filter: t.isFeeToken, -// limit: 1, -// })), -// ), -// maxAmount: '1', -// }), -// ); - -// return asUUID(id); -// }); - -// const { id, key } = ( -// await service.create({ -// account, -// approvers: [userCtx.approver], -// ...params, -// }) -// )._unsafeUnwrap(); - -// if (activate) { -// await db.query( -// e.update(e.PolicyState, () => ({ -// filter_single: { id }, -// set: { activationBlock: 0n }, -// })), -// ); -// } - -// return { id, account, key }; -// }; - -// beforeEach(() => { -// user1Account = randomUAddress(); -// user1 = randomUser(); -// }); - -// describe('create', () => { -// it('create policy', () => -// asUser(user1, async () => { -// const { id } = await create(); - -// expect( -// await e.select(e.Policy, () => ({ filter_single: { id } })).run(db.client), -// ).toBeTruthy(); -// })); - -// it('proposes an upsert', () => -// asUser(user1, async () => { -// await create(); -// expect(proposals.propose).toHaveBeenCalled(); -// })); - -// it('inserts correct policy', () => -// asUser(user1, async () => { -// const key = asPolicyKey(125); -// const policyInput: PolicyInput = { -// approvers: [getUserCtx().approver, randomAddress()], -// threshold: 1, -// actions: [ -// { -// label: 'my action', -// functions: [ -// { contract: randomAddress(), selector: asSelector('0x12345678') }, -// { contract: randomAddress() }, -// { selector: asSelector('0x12345678') }, -// ], -// allow: true, -// }, -// { -// label: 'Anything else', -// functions: [{}], -// allow: false, -// }, -// ], -// transfers: { -// limits: [{ token: randomAddress(), amount: 4n, duration: 25 }], -// budget: 10, -// defaultAllow: false, -// }, -// }; -// const expectedPolicy = inputAsPolicy(key, policyInput); - -// const { id } = await create({ ...policyInput, key }); - -// const p = await db.query(e.select(selectPolicy(id), () => PolicyShape)); -// const actualPolicy = policyStateAsPolicy(p); -// expect(actualPolicy).toEqual(expectedPolicy); -// })); -// }); - -// describe('update', () => { -// it('creates draft state', () => -// asUser(user1, async () => { -// const { account, key } = await create(); -// await service.update({ account, key, approvers: [] }); - -// const states = await db.query( -// e.select(e.Policy, (p) => ({ -// filter: and(e.op(p.account, '=', selectAccount(account)), e.op(p.key, '=', key)), -// })), -// ); - -// expect(states).toHaveLength(2); -// })); - -// it('proposes transaction', () => -// asUser(user1, async () => { -// const policy = await create(); - -// expect(proposals.propose).toHaveBeenCalled(); -// await service.update({ ...policy, approvers: [] }); -// })); - -// it('updates names', () => -// asUser(user1, async () => { -// const { account, key } = await create(); -// const newName = 'new name'; -// await service.update({ account, key, name: newName }); - -// const names = e.select(e.Policy, (p) => ({ -// filter: and(e.op(p.account, '=', selectAccount(account)), e.op(p.key, '=', key)), -// })).name; - -// expect(await db.query(names)).toEqual([newName]); -// })); - -// it("throws if the user isn't a member of the account", async () => { -// const policy = await asUser(user1, create); - -// await asUser(randomUser(), () => -// expect(service.update({ ...policy, name: '' })).rejects.toThrow(), -// ); -// }); - -// it("throws if the policy doesn't exist", () => -// asUser(user1, async () => { -// await expect( -// service.update({ -// account: user1Account, -// key: asPolicyKey(10), -// approvers: [], -// }), -// ).rejects.toThrow(); -// })); -// }); - -// describe('remove', () => { -// it('becomes draft of active policy', () => -// asUser(user1, async () => { -// const { account, key } = await create({ activate: true }); -// await service.remove({ account, key }); - -// const removalDrafted = await db.query( -// e.select(selectPolicy({ account, key }), (p) => ({ -// removalDrafted: e.op('exists', p.draft.is(e.RemovedPolicy)), -// })).removalDrafted, -// ); -// expect(removalDrafted).toBeTruthy(); -// })); - -// it('proposes a remove if the policy is active', () => -// asUser(user1, async () => { -// const policy = await create({ activate: true }); - -// proposals.propose.mockClear(); -// await service.remove(policy); -// expect(proposals.propose).toHaveBeenCalled(); -// })); - -// it('removes without a proposal if the policy is inactive', () => -// asUser(user1, async () => { -// const policy = await create(); - -// proposals.propose.mockClear(); -// await service.remove(policy); -// expect(proposals.propose).not.toHaveBeenCalled(); -// })); - -// it("returns undefined if the user isn't a member of the account", async () => { -// const policy = await asUser(user1, create); - -// await asUser(randomUser(), async () => -// expect(await service.remove(policy)).toEqual(undefined), -// ); -// }); -// }); - -// describe('delete', () => { -// it('should not delete active policy', () => -// asUser(user1, async () => { -// const policy = await create({ activate: true }); - -// const deleteQuery = e.delete(e.Policy, () => ({ -// filter_single: { id: policy.id }, -// })); - -// expect(await deleteQuery.run(db.client)).toBeNull(); -// })); -// }); -// }); +import { Test } from '@nestjs/testing'; +import { createMock, DeepMocked } from '@golevelup/ts-jest'; +import { PoliciesService, ProposePoliciesParams } from './policies.service'; +import { + asPolicyKey, + asSelector, + asUUID, + randomDeploySalt, + randomHex, + UAddress, + ZERO_ADDR, +} from 'lib'; +import { UserContext } from '~/core/context'; +import { asUser, getUserCtx } from '~/core/context'; +import { randomAddress, randomLabel, randomUAddress, randomUser } from '~/util/test'; +import { TransactionsService } from '../transactions/transactions.service'; +import { DatabaseService } from '~/core/database'; +import e from '~/edgeql-js'; +import { inputAsPolicy, policyStateAsPolicy, PolicyShape, selectPolicy } from './policies.util'; +import { PolicyInput } from './policies.input'; +import { v1 as uuidv1 } from 'uuid'; +import { selectAccount } from '../accounts/accounts.util'; + +describe(PoliciesService.name, () => { + let service: PoliciesService; + let db: DatabaseService; + let transactions: DeepMocked; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + providers: [PoliciesService, DatabaseService], + }) + .useMocker(createMock) + .compile(); + + service = module.get(PoliciesService); + db = module.get(DatabaseService); + transactions = module.get(TransactionsService); + }); + + let user1Account: UAddress; + let user1: UserContext; + + const create = async ({ + activate, + policies, + account = user1Account, + isInitialization, + }: Partial & { activate?: boolean } = {}) => { + const accountId = uuidv1(); + const userCtx = getUserCtx(); + userCtx.accounts.push({ id: accountId, address: account }); + await e.insert(e.Approver, { address: userCtx.approver }).unlessConflict().run(db.client); + policies ??= [{ approvers: [] }]; + + await db.query( + e.insert(e.Account, { + id: accountId, + address: account, + name: randomLabel(), + implementation: randomAddress(), + salt: randomDeploySalt(), + }), + ); + + const [initPolicy] = await service.propose( + { + account, + isInitialization: true, + }, + { approvers: [userCtx.approver] }, + ); + + transactions.propose.mockImplementation(async () => { + const hash = randomHex(32); + + const { id } = await db.query( + e.insert(e.Transaction, { + hash, + account: selectAccount(account), + policy: selectPolicy(initPolicy.id), + validationErrors: [], + unorderedOperations: e.insert(e.Operation, { to: ZERO_ADDR }), + timestamp: new Date(), + paymaster: ZERO_ADDR, + feeToken: e.assert_single( + e.select(e.Token, (t) => ({ + filter: t.isFeeToken, + limit: 1, + })), + ), + maxAmount: '1', + }), + ); + + return asUUID(id); + }); + + const [{ id, key }] = await service.propose( + { + account, + isInitialization, + }, + ...policies, + ); + + if (activate) { + await db.query( + e.update(e.PolicyState, () => ({ + filter_single: { id }, + set: { activationBlock: 0n }, + })), + ); + } + + return { id, account, key }; + }; + + beforeEach(() => { + user1Account = randomUAddress(); + user1 = randomUser(); + }); + + describe('create', () => { + it('create policy', () => + asUser(user1, async () => { + const { id } = await create(); + + expect( + await e.select(e.Policy, () => ({ filter_single: { id } })).run(db.client), + ).toBeTruthy(); + })); + + it('proposes an upsert', () => + asUser(user1, async () => { + await create(); + expect(transactions.propose).toHaveBeenCalled(); + })); + + it.only('inserts correct policy', () => + asUser(user1, async () => { + const policyInput = { + key: asPolicyKey(125), + approvers: [getUserCtx().approver, randomAddress()], + threshold: 1, + actions: [ + { + label: 'my action', + functions: [ + { contract: randomAddress(), selector: asSelector('0x12345678') }, + { contract: randomAddress() }, + { selector: asSelector('0x12345678') }, + ], + allow: true, + }, + { + label: 'Anything else', + functions: [{}], + allow: false, + }, + ], + transfers: { + limits: [{ token: randomAddress(), amount: 4n, duration: 25 }], + budget: 10, + defaultAllow: false, + }, + } satisfies PolicyInput; + const expectedPolicy = inputAsPolicy(policyInput.key, policyInput); + + const { id } = await create({ policies: [policyInput] }); + + const p = await db.query(e.select(selectPolicy(id), () => PolicyShape)); + const actualPolicy = policyStateAsPolicy(p); + expect(actualPolicy).toEqual(expectedPolicy); + })); + }); + + // describe('update', () => { + // it('creates draft state', () => + // asUser(user1, async () => { + // const { account, key } = await create(); + // await service.create({ account }, { key, approvers: [] }); + + // const states = await db.query( + // e.select(e.Policy, (p) => ({ + // filter: and(e.op(p.account, '=', selectAccount(account)), e.op(p.key, '=', key)), + // })), + // ); + + // expect(states).toHaveLength(2); + // })); + + // it('proposes transaction', () => + // asUser(user1, async () => { + // const policy = await create(); + + // expect(proposals.propose).toHaveBeenCalled(); + // await service.create({ account: policy.account }, { ...policy, approvers: [] }); + // })); + + // it('updates names', () => + // asUser(user1, async () => { + // const { account, key } = await create(); + // const newName = 'new name'; + // await service.update({ account, key, name: newName }); + + // const names = e.select(e.Policy, (p) => ({ + // filter: and(e.op(p.account, '=', selectAccount(account)), e.op(p.key, '=', key)), + // })).name; + + // expect(await db.query(names)).toEqual([newName]); + // })); + + // it("throws if the user isn't a member of the account", async () => { + // const policy = await asUser(user1, create); + + // await asUser(randomUser(), () => + // expect(service.update({ ...policy, name: '' })).rejects.toThrow(), + // ); + // }); + + // it("throws if the policy doesn't exist", () => + // asUser(user1, async () => { + // await expect( + // service.update({ + // account: user1Account, + // key: asPolicyKey(10), + // approvers: [], + // }), + // ).rejects.toThrow(); + // })); + // }); + + describe('remove', () => { + it('becomes draft of active policy', () => + asUser(user1, async () => { + const { account, key } = await create({ activate: true }); + await service.remove({ account, key }); + + const removalDrafted = await db.query( + e.select(selectPolicy({ account, key }), (p) => ({ + removalDrafted: e.op('exists', p.draft.is(e.RemovedPolicy)), + })).removalDrafted, + ); + expect(removalDrafted).toBeTruthy(); + })); + + it('proposes a remove if the policy is active', () => + asUser(user1, async () => { + const policy = await create({ activate: true }); + + transactions.propose.mockClear(); + await service.remove(policy); + expect(transactions.propose).toHaveBeenCalled(); + })); + + it('removes without a proposal if the policy is inactive', () => + asUser(user1, async () => { + const policy = await create(); + + transactions.propose.mockClear(); + await service.remove(policy); + expect(transactions.propose).not.toHaveBeenCalled(); + })); + + it("returns undefined if the user isn't a member of the account", async () => { + const policy = await asUser(user1, create); + + await asUser(randomUser(), async () => + expect(await service.remove(policy)).toEqual(undefined), + ); + }); + }); + + describe('delete', () => { + it('should not delete active policy', () => + asUser(user1, async () => { + const policy = await create({ activate: true }); + + const deleteQuery = e.delete(e.Policy, () => ({ + filter_single: { id: policy.id }, + })); + + expect(await deleteQuery.run(db.client)).toBeNull(); + })); + }); +}); diff --git a/api/src/feat/policies/policies.service.ts b/api/src/feat/policies/policies.service.ts index 44fdeb87d..978d6e12a 100644 --- a/api/src/feat/policies/policies.service.ts +++ b/api/src/feat/policies/policies.service.ts @@ -18,6 +18,7 @@ import { } from 'lib'; import { TransactionsService } from '../transactions/transactions.service'; import { + PolicyInput, ProposePoliciesInput, UniquePolicyInput, UpdatePolicyDetailsInput, @@ -44,7 +45,6 @@ import { getUserCtx } from '~/core/context'; import { PubsubService } from '~/core/pubsub/pubsub.service'; import { existingPolicies } from './existing-policies.query'; import { insertPolicies } from './insert-policies.query'; -import { ok } from 'neverthrow'; import { updatePolicyDetails } from './update-policy-details.query'; import { ConstraintViolationError } from 'edgedb'; @@ -57,6 +57,10 @@ export interface PolicyUpdatedPayload { } const policyUpdatedTrigger = (account: UAddress) => `account.policy:${account}`; +export type ProposePoliciesParams = ProposePoliciesInput & { + isInitialization?: boolean; +}; + @Injectable() export class PoliciesService { constructor( @@ -98,11 +102,13 @@ export class PoliciesService { ); } - async propose({ account, policies }: ProposePoliciesInput, isInitialization?: boolean) { + async propose( + { account, isInitialization }: Omit, + ...policies: PolicyInput[] + ) { let autoKey = policies.some((p) => p.key === undefined) ? await this.getNextKey(account) : asPolicyKey(0); - const policiesWithKeys = policies.map((p) => ({ ...p, key: (p.key ?? autoKey++) as PolicyKey, @@ -151,12 +157,14 @@ export class PoliciesService { name: input.name || 'Policy ' + input.key, })), }) - ).map((p) => asUUID(p.id)); + ).map((p) => ({ ...p, id: asUUID(p.id), key: asPolicyKey(p.key) })); const approvers = new Set(changedPolicies.flatMap(({ input }) => input.approvers)); this.userAccounts.invalidateApproversCache(...approvers); - newPolicies.forEach((id) => this.event({ event: PolicyEvent.created, account, policyId: id })); + newPolicies.forEach(({ id }) => + this.event({ event: PolicyEvent.created, account, policyId: id }), + ); return newPolicies; }