From 6d7fda1421ff82bc7f731b0bc40119da1b16702e Mon Sep 17 00:00:00 2001 From: Eleazar Resendez Date: Tue, 30 Jun 2026 10:58:06 -0600 Subject: [PATCH 01/52] FOUR-31727: Fix DevLink bundle listing and selector search --- .../admin/devlink/components/LocalBundles.vue | 40 +++++++++-- .../js/components/shared/AddToBundle.vue | 13 +++- .../js/components/shared/BackendSelect.vue | 56 ++++++++++++--- tests/Feature/Api/DevLinkTest.php | 72 +++++++++++++++++++ 4 files changed, 166 insertions(+), 15 deletions(-) diff --git a/resources/js/admin/devlink/components/LocalBundles.vue b/resources/js/admin/devlink/components/LocalBundles.vue index 6a57f68285..d97d748e4a 100644 --- a/resources/js/admin/devlink/components/LocalBundles.vue +++ b/resources/js/admin/devlink/components/LocalBundles.vue @@ -8,11 +8,15 @@ import BundleModal from './BundleModal.vue'; import DeleteModal from './DeleteModal.vue'; import { useRouter, useRoute } from 'vue-router/composables'; import UpdateBundle from './UpdateBundle.vue'; +import PaginationTable from '../../../components/shared/PaginationTable.vue'; const vue = getCurrentInstance().proxy; const router = useRouter(); const route = useRoute(); const bundles = ref([]); +const meta = ref({}); +const page = ref(1); +const perPage = ref(15); const editModal = ref(null); const confirmDeleteModal = ref(null); const confirmPublishNewVersion = ref(null); @@ -50,9 +54,18 @@ onMounted(() => { const load = () => { ProcessMaker.apiClient - .get(`/devlink/local-bundles?filter=${filter.value}`) + .get('/devlink/local-bundles', { + params: { + filter: filter.value, + page: page.value, + per_page: perPage.value, + order_by: 'created_at', + order_direction: 'desc', + } + }) .then((result) => { bundles.value = result.data.data; + meta.value = result.data.meta; refreshKey.value++; }); }; @@ -131,6 +144,7 @@ const create = () => { ProcessMaker.apiClient .post('/devlink/local-bundles', selected.value) .then((result) => { + page.value = 1; load(); }); }; @@ -197,9 +211,21 @@ const debouncedLoad = debounce(load, 300); // Function called on change const handleFilterChange = () => { + page.value = 1; debouncedLoad(); }; +const handlePageChange = (newPage) => { + page.value = newPage; + load(); +}; + +const handlePerPageChange = (newPerPage) => { + page.value = 1; + perPage.value = newPerPage; + load(); +}; + const canEdit = (bundle) => { return bundle.dev_link === null; } @@ -280,9 +306,9 @@ const handleInstallationComplete = () => { @@ -301,6 +327,12 @@ const handleInstallationComplete = () => {
{{ $t("Create a bundle to easily share assets and settings between ProcessMaker instances.") }}
+ diff --git a/resources/js/components/shared/AddToBundle.vue b/resources/js/components/shared/AddToBundle.vue index d3b47dc218..c909acddcb 100644 --- a/resources/js/components/shared/AddToBundle.vue +++ b/resources/js/components/shared/AddToBundle.vue @@ -102,8 +102,8 @@ const save = (event) => { diff --git a/resources/js/processes-catalogue/components/ProcessesCatalogue.vue b/resources/js/processes-catalogue/components/ProcessesCatalogue.vue index 95f7115307..1f9d1dac7d 100644 --- a/resources/js/processes-catalogue/components/ProcessesCatalogue.vue +++ b/resources/js/processes-catalogue/components/ProcessesCatalogue.vue @@ -5,7 +5,6 @@ ref="breadcrumb" :category="category ? category.name : ''" :process="selectedProcess ? selectedProcess.name : ''" - :template="guidedTemplates ? 'Guided Templates' : ''" />
- -
- - - - - diff --git a/resources/js/processes-catalogue/components/menuCatologue.vue b/resources/js/processes-catalogue/components/menuCatologue.vue index e043959878..448ad4c5a4 100644 --- a/resources/js/processes-catalogue/components/menuCatologue.vue +++ b/resources/js/processes-catalogue/components/menuCatologue.vue @@ -64,7 +64,7 @@ @@ -124,7 +124,7 @@ export default { modalProcess: true, countCategories: 0, showCatalogue: false, - showGuidedTemplates: false, + showTemplates: false, selectedProcessItem: null, selectedTemplateItem: null, templateOptions: [ @@ -133,11 +133,6 @@ export default { selected: false, id: "all_templates", }, - { - label: this.$t("Guided Templates"), - selected: false, - id: "guided_templates", - }, ], comeFromProcess: false, }; @@ -147,7 +142,7 @@ export default { this.openTemplate(obj); }); - window.ProcessMaker.EventBus.$on("wizard-templates-selected", (obj) => { + window.ProcessMaker.EventBus.$on("all-templates-selected", (obj) => { this.selectTemplateItem(obj); }); }, @@ -235,7 +230,7 @@ export default { selectTemplateItem(item = null) { if (item === null) { item = this.templateOptions.find((obj) => { - return obj.id === "guided_templates"; + return obj.id === "all_templates"; }); } this.selectedTemplateItem = item; @@ -269,7 +264,7 @@ export default { this.showCatalogue = !this.showCatalogue; }, onToggleTemplates() { - this.showGuidedTemplates = !this.showGuidedTemplates; + this.showTemplates = !this.showTemplates; }, /** * Filter categories diff --git a/resources/js/processes-catalogue/components/optionsMenu/ProcessCounter.vue b/resources/js/processes-catalogue/components/optionsMenu/ProcessCounter.vue index 449e2b674b..41fd12db39 100644 --- a/resources/js/processes-catalogue/components/optionsMenu/ProcessCounter.vue +++ b/resources/js/processes-catalogue/components/optionsMenu/ProcessCounter.vue @@ -150,8 +150,4 @@ export default { margin-top: 10px; padding-left: 15px; } -.icon-wizard-class { - border-left: 1px solid rgba(0, 0, 0, 0.125); - z-index: 5; -} diff --git a/resources/js/processes-catalogue/components/slideProcessInfo/SlideProcessInfo.vue b/resources/js/processes-catalogue/components/slideProcessInfo/SlideProcessInfo.vue index 681a3eb123..624f9a1068 100644 --- a/resources/js/processes-catalogue/components/slideProcessInfo/SlideProcessInfo.vue +++ b/resources/js/processes-catalogue/components/slideProcessInfo/SlideProcessInfo.vue @@ -20,21 +20,6 @@ {{ title }}
-
-
- - {{ $t('Re-run Wizard') }} -
-
@endsection diff --git a/routes/api.php b/routes/api.php index 9cc716d4d4..a94349b9b8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -43,7 +43,6 @@ use ProcessMaker\Http\Controllers\Api\UserConfigurationController; use ProcessMaker\Http\Controllers\Api\UserController; use ProcessMaker\Http\Controllers\Api\UserTokenController; -use ProcessMaker\Http\Controllers\Api\WizardTemplateController; use ProcessMaker\Http\Controllers\Auth\TwoFactorAuthController; use ProcessMaker\Http\Controllers\TestStatusController; @@ -378,10 +377,6 @@ Route::post('template/{type}/{id}/apply', [TemplateController::class, 'applyTemplate'])->name('template.applyTemplate')->middleware('template-authorization'); Route::get('screen-builder/{type}/{id}', [TemplateController::class, 'show'])->name('screenBuilder.template.show')->middleware('template-authorization'); - // Wizard Templates - Route::get('wizard-templates', [WizardTemplateController::class, 'index'])->name('wizard-templates.index'); - Route::get('wizard-templates/{template_uuid}/get-helper-process', [WizardTemplateController::class, 'getHelperProcess'])->name('wizard-templates.getHelperProcess'); - // debugging javascript errors Route::post('debug', [DebugController::class, 'store'])->name('debug.store')->middleware('throttle'); diff --git a/storage/api-docs/api-docs.json b/storage/api-docs/api-docs.json index 3b01de8d45..832f903c0e 100644 --- a/storage/api-docs/api-docs.json +++ b/storage/api-docs/api-docs.json @@ -4069,16 +4069,10 @@ "schema": { "properties": { "data": { - "type": "array", - "items": { - "type": "object" - } + "type": "object" }, "config": { - "type": "array", - "items": { - "type": "object" - } + "type": "object" }, "code": { "type": "string" @@ -4123,16 +4117,10 @@ "schema": { "properties": { "data": { - "type": "array", - "items": { - "type": "object" - } + "type": "object" }, "config": { - "type": "array", - "items": { - "type": "object" - } + "type": "object" }, "sync": { "type": "boolean" @@ -6052,412 +6040,3718 @@ }, "servers": [ { - "url": "http://landlord.test/api/1.1", + "url": "http://localhost/api/1.1", "description": "API v1.1 Server" } ] } - } - }, - "components": { - "schemas": { - "DateTime": { - "properties": { - "date": { - "type": "string" - } - }, - "type": "object" - }, - "updateUserGroups": { - "properties": { - "groups": { - "type": "array", - "items": { - "type": "integer", - "example": 1 - } - } - }, - "type": "object" - }, - "restoreUser": { - "properties": { - "username": { - "description": "Username to restore", - "type": "string" - } - }, - "type": "object" - }, - "Variable": { - "properties": { - "id": { - "type": "integer", - "example": 1 - }, - "process_id": { - "type": "integer", - "example": 1 - }, - "uuid": { - "type": "string", - "format": "uuid", - "example": "550e8400-e29b-41d4-a716-446655440000" + }, + "/collections": { + "get": { + "tags": [ + "Collections" + ], + "summary": "Returns all collections that the user has access to", + "description": "Get a list of Collections.", + "operationId": "getCollections", + "parameters": [ + { + "$ref": "#/components/parameters/filter" }, - "field": { - "type": "string", - "example": "string", - "enum": [ - "string", - "number", - "boolean", - "array" - ] + { + "$ref": "#/components/parameters/order_by" }, - "label": { - "type": "string", - "example": "Variable 1 for Process 1" + { + "$ref": "#/components/parameters/order_direction" }, - "name": { - "type": "string", - "example": "var_1_1" + { + "$ref": "#/components/parameters/per_page" }, - "asset": { - "properties": { - "id": { - "type": "string", - "example": "asset_1_1" - }, - "type": { - "type": "string", - "example": "sensor", - "enum": [ - "sensor", - "actuator", - "controller", - "device" - ] - }, - "name": { - "type": "string", - "example": "Asset 1 for Process 1" - }, - "uuid": { - "type": "string", - "format": "uuid", - "example": "550e8400-e29b-41d4-a716-446655440000" + { + "$ref": "#/components/parameters/include" + } + ], + "responses": { + "200": { + "description": "list of collections", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/collections" + } + }, + "meta": { + "$ref": "#/components/schemas/metadata" + } + }, + "type": "object" + } } - }, - "type": "object" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" + } } - }, - "type": "object" + } }, - "PaginationMeta": { - "properties": { - "current_page": { - "type": "integer", - "example": 1 - }, - "from": { - "type": "integer", - "example": 1 - }, - "last_page": { - "type": "integer", - "example": 5 - }, - "path": { - "type": "string", - "example": "http://processmaker.com/processes/variables" - }, - "per_page": { - "type": "integer", - "example": 20 - }, - "to": { - "type": "integer", - "example": 20 - }, - "total": { - "type": "integer", - "example": 100 - }, - "links": { - "properties": { - "first": { - "type": "string", - "example": "http://processmaker.com/processes/variables?page=1" - }, - "last": { - "type": "string", - "example": "http://processmaker.com/processes/variables?page=5" - }, - "prev": { - "type": "string", - "nullable": true - }, - "next": { - "type": "string", - "example": "http://processmaker.com/processes/variables?page=2" + "post": { + "tags": [ + "Collections" + ], + "summary": "Save a new collections", + "description": "Create a new Collection.", + "operationId": "createCollection", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/collectionsEditable" } - }, - "type": "object" + } } }, - "type": "object" + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/collections" + } + } + } + } + } + } + }, + "/collections/{collection_id}": { + "get": { + "tags": [ + "Collections" + ], + "summary": "Get single collections by ID", + "description": "Get a single Collection.", + "operationId": "getCollectionById", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of collection to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully found the collections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/collections" + } + } + } + } + } }, - "metadata": { - "properties": { - "filter": { - "type": "string" - }, - "sort_by": { - "type": "string" - }, + "put": { + "tags": [ + "Collections" + ], + "summary": "Update a collection", + "description": "Update a Collection.", + "operationId": "updateCollection", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of collection to update", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/collectionsEditable" + } + } + } + }, + "responses": { + "204": { + "description": "success" + } + } + }, + "delete": { + "tags": [ + "Collections" + ], + "summary": "Delete a collection", + "description": "Delete a Collection.", + "operationId": "deleteCollection", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of collection to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "success" + } + } + } + }, + "/collections/{collection_id}/export": { + "post": { + "tags": [ + "Screens" + ], + "summary": "Trigger export collections job", + "description": "Export the specified collection.", + "operationId": "exportCollection", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of the collection to export", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "success" + } + } + } + }, + "/collections/import": { + "post": { + "tags": [ + "Collections" + ], + "summary": "Import a new collection", + "description": "Import the specified collection.", + "operationId": "importCollection", + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "required": [ + "file" + ], + "properties": { + "file": { + "description": "file to upload", + "type": "file", + "format": "file" + } + }, + "type": "object" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/collections" + } + } + } + }, + "200": { + "description": "success" + } + } + } + }, + "/collections/{collection_id}/truncate": { + "delete": { + "tags": [ + "Collections" + ], + "summary": "Deletes all records in a collection", + "description": "Truncate a Collection.", + "operationId": "truncateCollection", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of collection to truncate", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "success" + } + } + } + }, + "/collections/{collection_id}/records": { + "get": { + "tags": [ + "Collections" + ], + "summary": "Returns paginated collection records", + "description": "Get the list of records of a collection.", + "operationId": "getRecords", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of collection to get records for", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pmql", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Number of records to return per page. Defaults to 10,000 when omitted, invalid, or non-positive.", + "schema": { + "type": "integer", + "default": 10000 + } + }, + { + "$ref": "#/components/parameters/filter" + }, + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + }, + { + "$ref": "#/components/parameters/include" + } + ], + "responses": { + "200": { + "description": "list of records of a collection", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/records" + } + }, + "meta": { + "$ref": "#/components/schemas/metadata" + } + }, + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "Collections" + ], + "summary": "Save a new record in a collection", + "description": "Create a new record in a Collection.", + "operationId": "createRecord", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of the collection", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/recordsEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/records" + } + } + } + } + } + } + }, + "/collections/{collection_id}/records/{record_id}": { + "get": { + "tags": [ + "Collections" + ], + "summary": "Get single record of a collection", + "description": "Get a single record of a Collection.", + "operationId": "getRecordById", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of the collection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "record_id", + "in": "path", + "description": "ID of the record to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully found the record", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/records" + } + } + } + } + } + }, + "put": { + "tags": [ + "Collections" + ], + "summary": "Update a record", + "description": "Update a record in a Collection.", + "operationId": "updateRecord", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of collection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "record_id", + "in": "path", + "description": "ID of the record ", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/recordsEditable" + } + } + } + }, + "responses": { + "204": { + "description": "success" + } + } + }, + "delete": { + "tags": [ + "Collections" + ], + "summary": "Delete a collection record", + "description": "Delete a record of a Collection.", + "operationId": "deleteRecord", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of collection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "record_id", + "in": "path", + "description": "ID of record in collection", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "success" + } + } + }, + "patch": { + "tags": [ + "Collections" + ], + "summary": "Partial update of a record", + "description": "Implements a partial update of a record in a Collection.", + "operationId": "patchRecord", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "ID of collection ", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "record_id", + "in": "path", + "description": "ID of the record ", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/collectionsEditable" + } + } + } + }, + "responses": { + "200": { + "description": "success" + } + } + } + }, + "/comments/tasks": { + "get": { + "tags": [ + "Comments" + ], + "summary": "Returns all the tasks that are active.", + "description": "Display a listing of the resource.", + "operationId": "getCommentTasks", + "parameters": [ + { + "name": "process_request_id", + "in": "query", + "description": "Process request id", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "$ref": "#/components/parameters/filter" + }, + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + } + ], + "responses": { + "200": { + "description": "list all tasks taht are active", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/processRequestToken" + } + }, + "meta": { + "$ref": "#/components/schemas/metadata" + } + }, + "type": "object" + } + } + } + } + } + } + }, + "/data_source_categories": { + "get": { + "tags": [ + "DataSourcesCategories" + ], + "summary": "Returns all Data Connectors categories that the user has access to", + "description": "Display a listing of the Data Connector Categories.", + "operationId": "getDataSourceCategories", + "parameters": [ + { + "$ref": "#/components/parameters/filter" + }, + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + }, + { + "$ref": "#/components/parameters/per_page" + } + ], + "responses": { + "200": { + "description": "list of Data Connectors categories", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DataSourceCategory" + } + }, + "meta": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/metadata" + } + ] + } + }, + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "DataSourcesCategories" + ], + "summary": "Save a new Data Connector Category", + "description": "Store a newly created Data Connector Category in storage", + "operationId": "createDataSourceCategory", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/dataSourceCategoryEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataSourceCategory" + } + } + } + } + } + } + }, + "/data_source_categories/{data_source_category_id}": { + "get": { + "tags": [ + "DataSourcesCategories" + ], + "summary": "Get single Data Connector category by ID", + "description": "Display the specified data Source category.", + "operationId": "getDatasourceCategoryById", + "parameters": [ + { + "name": "data_source_category_id", + "in": "path", + "description": "ID of Data Connector category to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully found the Data Connector", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataSourceCategory" + } + } + } + } + } + }, + "put": { + "tags": [ + "DataSourcesCategories" + ], + "summary": "Update a Data Connector Category", + "description": "Updates the current element", + "operationId": "updateDatasourceCategory", + "parameters": [ + { + "name": "data_source_category_id", + "in": "path", + "description": "ID of Data Connector category to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/dataSourceCategoryEditable" + } + } + } + }, + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataSourceCategory" + } + } + } + } + } + }, + "delete": { + "tags": [ + "DataSourcesCategories" + ], + "summary": "Delete a Data Connector category", + "description": "Remove the specified resource from storage.", + "operationId": "deleteDataSourceCategory", + "parameters": [ + { + "name": "data_source_category_id", + "in": "path", + "description": "ID of Data Connector category to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "success" + } + } + } + }, + "/data_sources": { + "get": { + "tags": [ + "DataSources" + ], + "summary": "Returns all Data Connectors that the user has access to", + "description": "Get the list of records of a Data Connector", + "operationId": "getDataSources", + "parameters": [ + { + "$ref": "#/components/parameters/filter" + }, + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + }, + { + "$ref": "#/components/parameters/per_page" + }, + { + "$ref": "#/components/parameters/include" + } + ], + "responses": { + "200": { + "description": "list of Data Connectors", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/dataSource" + } + }, + "meta": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/metadata" + } + ] + } + }, + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "DataSources" + ], + "summary": "Save a new Data Connector", + "description": "Create a new Data Connector.", + "operationId": "createDataSource", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/dataSourceEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/dataSource" + } + } + } + } + } + } + }, + "/data_sources/{data_source_id}": { + "get": { + "tags": [ + "DataSources" + ], + "summary": "Get single Data Connector by ID", + "description": "Get a single Data Connector.", + "operationId": "getDataSourceById", + "parameters": [ + { + "name": "data_source_id", + "in": "path", + "description": "ID of Data Connector to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully found the Data Connector", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/dataSource" + } + } + } + } + } + }, + "put": { + "tags": [ + "DataSources" + ], + "summary": "Update a Data Connector", + "description": "Update a Data Connector.", + "operationId": "updateDataSource", + "parameters": [ + { + "name": "data_source_id", + "in": "path", + "description": "ID of Data Connector to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/dataSourceEditable" + } + } + } + }, + "responses": { + "204": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/dataSource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "DataSources" + ], + "summary": "Delete a Data Connector", + "description": "Delete a Data Connector.", + "operationId": "deleteDataSource", + "parameters": [ + { + "name": "data_source_id", + "in": "path", + "description": "ID of Data Connector to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/dataSource" + } + } + } + } + } + } + }, + "/data_sources/{data_source_id}/test": { + "post": { + "tags": [ + "DataSources" + ], + "summary": "Send a Data Connector request", + "description": "Send a Data Connector request.", + "operationId": "sendDataSource", + "parameters": [ + { + "name": "data_source_id", + "in": "path", + "description": "ID of Data Connector to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/dataSourceEditable" + } + } + } + }, + "responses": { + "204": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/dataSource" + } + } + } + } + } + } + }, + "/requests/{request_id}/data_sources/{data_source_id}": { + "post": { + "tags": [ + "DataSources" + ], + "summary": "execute Data Source", + "description": "Execute a data Source endpoint", + "operationId": "executeDataSourceForRequest", + "parameters": [ + { + "name": "request_id", + "in": "path", + "description": "ID of the request in whose context the datasource will be executed", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "data_source_id", + "in": "path", + "description": "ID of DataSource to be run", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "config": { + "$ref": "#/components/schemas/DataSourceCallParameters" + } + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataSourceResponse" + } + } + } + } + } + } + }, + "/requests/data_sources/{data_source_id}": { + "post": { + "tags": [ + "DataSources" + ], + "summary": "execute Data Source", + "operationId": "executeDataSource", + "parameters": [ + { + "name": "data_source_id", + "in": "path", + "description": "ID of DataSource to be run", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "config": { + "$ref": "#/components/schemas/DataSourceCallParameters" + }, + "data": { + "type": "object" + } + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataSourceResponse" + } + } + } + } + } + } + }, + "/requests/data_sources/{data_source_id}/resources/{endpoint}/data": { + "post": { + "tags": [ + "DataSources" + ], + "summary": "Get Data from Data Source", + "operationId": "getDataFromDataSource", + "parameters": [ + { + "name": "data_source_id", + "in": "path", + "description": "ID of DataSource to be run", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "endpoint", + "in": "path", + "description": "Endpoint of the data source", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataSourceResponse" + } + } + } + } + } + } + }, + "/decision_table_categories": { + "get": { + "tags": [ + "DecisionTableCategories" + ], + "summary": "Returns all Decision Tables categories that the user has access to", + "description": "Display a listing of the Decision Tables Categories.", + "operationId": "getDecisionTableCategories", + "parameters": [ + { + "$ref": "#/components/parameters/filter" + }, + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + }, + { + "$ref": "#/components/parameters/per_page" + } + ], + "responses": { + "200": { + "description": "list of Decision Tables categories", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DecisionTableCategory" + } + }, + "meta": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/metadata" + } + ] + } + }, + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "DecisionTableCategories" + ], + "summary": "Save a new Decision Table Category", + "description": "Store a newly created Decision Tables Category in storage", + "operationId": "createDecisionTableCategory", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/decisionTableCategoryEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DecisionTableCategory" + } + } + } + } + } + } + }, + "/decision_table_categories/{decision_table_categories_id}": { + "get": { + "tags": [ + "DecisionTableCategories" + ], + "summary": "Get single Decision Table category by ID", + "description": "Display the specified decision Tables category.", + "operationId": "getDecisionTableCategoryById", + "parameters": [ + { + "name": "decision_table_categories_id", + "in": "path", + "description": "ID of Decision Table category to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully found the Decision Table", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DecisionTableCategory" + } + } + } + } + } + }, + "put": { + "tags": [ + "DecisionTableCategories" + ], + "summary": "Update a Decision Table Category", + "description": "Updates the current element", + "operationId": "updateDecisionTableCategory", + "parameters": [ + { + "name": "decision_table_categories_id", + "in": "path", + "description": "ID of Decision Table category to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/decisionTableCategoryEditable" + } + } + } + }, + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DecisionTableCategory" + } + } + } + } + } + }, + "delete": { + "tags": [ + "DecisionTableCategories" + ], + "summary": "Delete a Decision Table category", + "description": "Remove the specified resource from storage.", + "operationId": "deleteDecisionTableCategory", + "parameters": [ + { + "name": "decision_table_categories_id", + "in": "path", + "description": "ID of Decision Table category to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "success" + } + } + } + }, + "/decision_tables": { + "get": { + "tags": [ + "DecisionTables" + ], + "summary": "Returns all Decision tables that the user has access to", + "description": "Display a listing of the resource.", + "operationId": "getDecisionTables", + "parameters": [ + { + "$ref": "#/components/parameters/filter" + }, + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + }, + { + "$ref": "#/components/parameters/per_page" + }, + { + "$ref": "#/components/parameters/include" + } + ], + "responses": { + "200": { + "description": "list of Decision Tables", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/decisionTable" + } + }, + "meta": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/metadata" + } + ] + } + }, + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "DecisionTables" + ], + "summary": "Save a new Decision Table", + "description": "Store a newly created resource in storage.", + "operationId": "createDecisionTable", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/decisionTableEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/decisionTable" + } + } + } + } + } + } + }, + "/decision_tables/{decision_table_id}": { + "get": { + "tags": [ + "DecisionTables" + ], + "summary": "Get single Decision Table by ID", + "description": "Display the specified resource.", + "operationId": "getDecisionTableById", + "parameters": [ + { + "name": "decision_table_id", + "in": "path", + "description": "ID of Decision Table to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully found the Decision Table", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/decisionTable" + } + } + } + } + } + }, + "put": { + "tags": [ + "DecisionTables" + ], + "summary": "Update a Decision Table", + "description": "Update a Decision table", + "operationId": "updateDecisionTable", + "parameters": [ + { + "name": "decision_table_id", + "in": "path", + "description": "ID of Decision Table to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/decisionTableEditable" + } + } + } + }, + "responses": { + "204": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/decisionTable" + } + } + } + } + } + }, + "delete": { + "tags": [ + "DecisionTables" + ], + "summary": "Delete a Decision Table", + "description": "Delete a Decision tables", + "operationId": "deleteDecisionTable", + "parameters": [ + { + "name": "decision_table_id", + "in": "path", + "description": "ID of Decision Table to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/decisionTable" + } + } + } + } + } + } + }, + "/decision_tables/{decision_table_id}/duplicate": { + "put": { + "tags": [ + "DecisionTables" + ], + "summary": "duplicate a Decision Table", + "description": "duplicate a Decision table.", + "operationId": "duplicateDecisionTable", + "parameters": [ + { + "name": "decision_table_id", + "in": "path", + "description": "ID of Decision Table to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/decisionTableEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/decisionTable" + } + } + } + } + } + } + }, + "/decision_tables/{decision_table_id}/excel-import": { + "post": { + "tags": [ + "DecisionTables" + ], + "summary": "Import a new decision table", + "description": "Import a Decision table from excel", + "operationId": "importExcel", + "parameters": [ + { + "name": "decision_table_id", + "in": "path", + "description": "ID of Decision Table to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "properties": { + "file": { + "description": "file to import", + "type": "string", + "format": "binary" + } + }, + "type": "object" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "type": "object" + } + }, + "type": "object" + } + } + } + } + } + } + }, + "/decision_tables/{decision_table_id}/export": { + "post": { + "tags": [ + "DecisionTables" + ], + "summary": "Export a single Decision Table by ID", + "description": "Export the specified screen.", + "operationId": "exportDecisionTable", + "parameters": [ + { + "name": "decision_table_id", + "in": "path", + "description": "ID of Decision Table to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully exported the decision table", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DecisionTableExported" + } + } + } + } + } + } + }, + "/decision_tables/import": { + "post": { + "tags": [ + "DecisionTables" + ], + "summary": "Import a new Decision Table", + "description": "Import the specified Decision Table.", + "operationId": "importDecisionTable", + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "properties": { + "file": { + "description": "file to import", + "type": "string", + "format": "binary" + } + }, + "type": "object" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "type": "object" + } + }, + "type": "object" + } + } + } + } + } + } + }, + "/decision_tables/{decision_table_id}/execute": { + "post": { + "tags": [ + "DecisionTables" + ], + "summary": "Execute a Decision Table definition", + "description": "Execute a Decision Table definition", + "operationId": "previewDecisionTable", + "parameters": [ + { + "name": "decision_table_id", + "in": "path", + "description": "Decision Table unique Identifier", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully executed", + "content": { + "application/json": { + "schema": {} + } + } + } + } + } + }, + "/saved-searches/{saved_search_id}/charts": { + "get": { + "tags": [ + "SavedSearchCharts" + ], + "summary": "Returns all saved search charts that the user has access to", + "description": "Get a list of SavedSearchCharts.", + "operationId": "getSavedSearchCharts", + "parameters": [ + { + "$ref": "#/components/parameters/filter" + }, + { + "name": "type", + "in": "query", + "description": "Only return saved searches by type", + "required": false, + "schema": { + "type": "string", + "enum": [ + "request", + "task", + "collection" + ] + } + }, + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + }, + { + "$ref": "#/components/parameters/per_page" + }, + { + "$ref": "#/components/parameters/include" + } + ], + "responses": { + "200": { + "description": "list of saved search charts", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SavedSearchChart" + } + }, + "meta": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/metadata" + } + ] + } + }, + "type": "object" + } + } + } + } + } + }, + "put": { + "tags": [ + "SavedSearchCharts" + ], + "summary": "Update several saved search charts at once", + "description": "Batch update several SavedSearchCharts.", + "operationId": "batchUpdateSavedSearchCharts", + "parameters": [ + { + "name": "saved_search_id", + "in": "path", + "description": "ID of saved search to which these charts will be saved", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SavedSearchChart" + } + } + } + } + }, + "responses": { + "204": { + "description": "success" + } + } + }, + "post": { + "tags": [ + "SavedSearchCharts" + ], + "summary": "Save a new saved search chart", + "description": "Create a new SavedSearchChart.", + "operationId": "createSavedSearchChart", + "parameters": [ + { + "name": "saved_search_id", + "in": "path", + "description": "ID of saved search to which this chart will be saved", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearchChartEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearchChart" + } + } + } + } + } + } + }, + "/saved-searches/charts/{chart_id}": { + "get": { + "tags": [ + "SavedSearchCharts" + ], + "summary": "Get single saved search chart by ID", + "description": "Get a single SavedSearchChart.", + "operationId": "getSavedSearchChartById", + "parameters": [ + { + "name": "chart_id", + "in": "path", + "description": "ID of chart to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully found the saved search chart", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearchChart" + } + } + } + } + } + }, + "put": { + "tags": [ + "SavedSearchCharts" + ], + "summary": "Update a saved search chart", + "description": "Update a SavedSearchChart.", + "operationId": "updateSavedSearchChart", + "parameters": [ + { + "name": "chart_id", + "in": "path", + "description": "ID of chart to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearchChartEditable" + } + } + } + }, + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearchChart" + } + } + } + } + } + }, + "delete": { + "tags": [ + "SavedSearchCharts" + ], + "summary": "Delete a saved search chart", + "description": "Delete a SavedSearchChart.", + "operationId": "deleteSavedSearchChart", + "parameters": [ + { + "name": "chart_id", + "in": "path", + "description": "ID of chart to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "success" + } + } + } + }, + "/saved-searches/charts/{chart_id}/fields": { + "get": { + "tags": [ + "SavedSearchCharts" + ], + "summary": "Get available chart fields for a Saved Search by ID", + "description": "Get available chart fields for a Saved Search.", + "operationId": "getSavedSearchFieldsById", + "parameters": [ + { + "name": "chart_id", + "in": "path", + "description": "ID of Saved Search to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully found the saved search", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearch" + } + } + } + } + } + } + }, + "/saved-searches/qa/batch-create-requests": { + "post": { + "tags": [ + "SavedSearches" + ], + "summary": "Batch-create test process requests for saved search testing (QA only)", + "description": "Batch-create process requests via the seed-performance Artisan command.", + "operationId": "batchCreateRequests", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "required": [ + "cases" + ], + "properties": { + "cases": { + "description": "Number of cases to create", + "type": "integer", + "example": 1000 + }, + "process_id": { + "description": "Reuse an existing process ID", + "type": "integer", + "nullable": true + }, + "data_size": { + "description": "Target payload size in bytes (default 262144 = 256KB)", + "type": "integer", + "nullable": true + }, + "status": { + "type": "string", + "default": "ACTIVE", + "enum": [ + "ACTIVE", + "COMPLETED", + "ERROR", + "CANCELED" + ] + } + }, + "type": "object" + } + } + } + }, + "responses": { + "201": { + "description": "Requests created successfully", + "content": { + "application/json": { + "schema": { + "properties": { + "cases": { + "type": "integer" + }, + "exit_code": { + "type": "integer" + }, + "output": { + "type": "string" + } + }, + "type": "object" + } + } + } + }, + "403": { + "description": "QA endpoint is disabled" + }, + "422": { + "description": "Command failed" + } + } + } + }, + "/saved-searches/reports": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Save a new report", + "operationId": "createReport", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Report" + } + } + } + } + } + } + }, + "/saved-searches/reports/{reportId}": { + "put": { + "tags": [ + "SavedSearches" + ], + "summary": "Update a saved search", + "description": "Update a Report", + "operationId": "updateReport", + "parameters": [ + { + "name": "reportId", + "in": "path", + "description": "ID of report", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearchEditable" + } + } + } + }, + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearch" + } + } + } + } + } + } + }, + "/saved-searches": { + "get": { + "tags": [ + "SavedSearches" + ], + "summary": "Returns all saved searches that the user has access to", + "description": "Get a list of SavedSearches.", + "operationId": "getSavedSearches", + "parameters": [ + { + "$ref": "#/components/parameters/filter" + }, + { + "name": "type", + "in": "query", + "description": "Only return saved searches by type", + "required": false, + "schema": { + "type": "string", + "enum": [ + "request", + "task", + "collection" + ] + } + }, + { + "name": "subset", + "in": "query", + "description": "Only return saved searches that are yours or those that have been shared with you", + "required": false, + "schema": { + "type": "string", + "enum": [ + "mine", + "shared" + ] + } + }, + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + }, + { + "$ref": "#/components/parameters/per_page" + }, + { + "$ref": "#/components/parameters/include" + } + ], + "responses": { + "200": { + "description": "list of saved searches", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SavedSearch" + } + }, + "meta": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/metadata" + } + ] + } + }, + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "SavedSearches" + ], + "summary": "Save a new saved search", + "description": "Create a new SavedSearch.", + "operationId": "createSavedSearch", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearchEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearch" + } + } + } + } + } + } + }, + "/saved-searches/{savedSearchId}": { + "get": { + "tags": [ + "SavedSearches" + ], + "summary": "Get single saved searches by ID", + "description": "Get a single SavedSearch.", + "operationId": "getSavedSearchById", + "parameters": [ + { + "name": "savedSearchId", + "in": "path", + "description": "ID of saved search to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully found the saved search", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearch" + } + } + } + } + } + }, + "put": { + "tags": [ + "SavedSearches" + ], + "summary": "Update a saved search", + "description": "Update a SavedSearch.", + "operationId": "updateSavedSearch", + "parameters": [ + { + "name": "savedSearchId", + "in": "path", + "description": "ID of saved search to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearchEditable" + } + } + } + }, + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedSearch" + } + } + } + } + } + } + }, + "/saved-searches/{savedSearchId}/columns": { + "get": { + "tags": [ + "SavedSearches" + ], + "summary": "Returns all columns associated with a Saved Search", + "description": "Display a listing of columns.", + "operationId": "getSavedSearchColumns", + "parameters": [ + { + "name": "savedSearchId", + "in": "path", + "description": "ID of saved search to return", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "include", + "in": "query", + "description": "Include specific categories. Comma separated list.", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "current", + "default", + "available", + "data" + ] + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Categorized list of columns", + "content": { + "application/json": { + "schema": { + "properties": { + "current": { + "type": "array", + "items": { + "$ref": "#/components/schemas/columns" + } + }, + "default": { + "type": "array", + "items": { + "$ref": "#/components/schemas/columns" + } + }, + "available": { + "type": "array", + "items": { + "$ref": "#/components/schemas/columns" + } + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/columns" + } + } + }, + "type": "object" + } + } + } + } + } + } + }, + "/saved-searches/{savedSearchId}/users": { + "get": { + "tags": [ + "Users" + ], + "summary": "Returns all users", + "description": "Display a listing of the resource.", + "operationId": "getSavedSearchUsers", + "parameters": [ + { + "name": "savedSearchId", + "in": "path", + "description": "ID of saved search to return", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "filter", + "in": "query", + "description": "Filter results by string. Searches First Name, Last Name, Email and Username.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + }, + { + "$ref": "#/components/parameters/per_page" + }, + { + "$ref": "#/components/parameters/include" + } + ], + "responses": { + "200": { + "description": "list of users", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/users" + } + }, + "meta": { + "$ref": "#/components/schemas/metadata" + } + }, + "type": "object" + } + } + } + } + } + } + }, + "/saved-searches/{savedSearchId}/groups": { + "get": { + "tags": [ + "Groups" + ], + "summary": "Returns all groups that the user has access to", + "description": "Display a listing of the resource.", + "operationId": "getSavedSearchGroups", + "parameters": [ + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + }, + { + "$ref": "#/components/parameters/per_page" + }, + { + "$ref": "#/components/parameters/include" + } + ], + "responses": { + "200": { + "description": "list of groups", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/groups" + } + }, + "meta": { + "$ref": "#/components/schemas/metadata" + } + }, + "type": "object" + } + } + } + } + } + } + }, + "/saved-searches/{saved_search_id}": { + "delete": { + "tags": [ + "SavedSearches" + ], + "summary": "Delete a saved search", + "description": "Delete a SavedSearch.", + "operationId": "deleteSavedSearch", + "parameters": [ + { + "name": "saved_search_id", + "in": "path", + "description": "ID of saved search to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "success" + } + } + } + }, + "/saved-searches/icons": { + "get": { + "tags": [ + "SavedSearches" + ], + "summary": "Returns all icons for saved searches", + "description": "Get a list of icons available for SavedSearches.", + "operationId": "getSavedSearchesIcons", + "parameters": [ + { + "$ref": "#/components/parameters/per_page" + } + ], + "responses": { + "200": { + "description": "list of icons for saved searches", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SavedSearchIcon" + } + }, + "meta": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/metadata" + } + ] + } + }, + "type": "object" + } + } + } + } + } + } + }, + "/version_histories": { + "get": { + "tags": [ + "Version History" + ], + "summary": "Return all version History according to the model", + "description": "Get the list of records of Version History", + "operationId": "getVersionHistories", + "parameters": [ + { + "$ref": "#/components/parameters/filter" + }, + { + "$ref": "#/components/parameters/order_by" + }, + { + "$ref": "#/components/parameters/order_direction" + }, + { + "$ref": "#/components/parameters/per_page" + }, + { + "$ref": "#/components/parameters/include" + } + ], + "responses": { + "200": { + "description": "list of Version History", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/versionHistory" + } + }, + "meta": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/metadata" + } + ] + } + }, + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "Version History" + ], + "summary": "Save a new Version History", + "description": "Create a new Version History.", + "operationId": "createVersion", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/versionHistoryEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/versionHistory" + } + } + } + } + } + } + }, + "/version_histories/{version_history_id}": { + "get": { + "tags": [ + "Version History" + ], + "summary": "Get single Version History by ID", + "description": "Get a single Version History.", + "operationId": "getVersionHistoryById", + "parameters": [ + { + "name": "version_history_id", + "in": "path", + "description": "ID of Version History to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully found the Version History", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/versionHistory" + } + } + } + } + } + }, + "put": { + "tags": [ + "Version History" + ], + "summary": "Update a Version History", + "description": "Update a Version History.", + "operationId": "updateVersion", + "parameters": [ + { + "name": "version_history_id", + "in": "path", + "description": "ID of Version History to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/versionHistoryEditable" + } + } + } + }, + "responses": { + "204": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/versionHistory" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Version History" + ], + "summary": "Delete a Version History", + "description": "Delete a Version History.", + "operationId": "deleteVersion", + "parameters": [ + { + "name": "version_history_id", + "in": "path", + "description": "ID of Version History to return", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/versionHistory" + } + } + } + } + } + } + }, + "/version_histories/clone": { + "post": { + "tags": [ + "Version History" + ], + "summary": "Clone a new Version History", + "description": "Clone a new Version History.", + "operationId": "cloneVersion", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/versionHistoryEditable" + } + } + } + }, + "responses": { + "201": { + "description": "success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/versionHistory" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "DateTime": { + "properties": { + "date": { + "type": "string" + } + }, + "type": "object" + }, + "updateUserGroups": { + "properties": { + "groups": { + "type": "array", + "items": { + "type": "integer", + "example": 1 + } + } + }, + "type": "object" + }, + "restoreUser": { + "properties": { + "username": { + "description": "Username to restore", + "type": "string" + } + }, + "type": "object" + }, + "Variable": { + "properties": { + "id": { + "type": "integer", + "example": 1 + }, + "process_id": { + "type": "integer", + "example": 1 + }, + "uuid": { + "type": "string", + "format": "uuid", + "example": "550e8400-e29b-41d4-a716-446655440000" + }, + "field": { + "type": "string", + "example": "string", + "enum": [ + "string", + "number", + "boolean", + "array" + ] + }, + "label": { + "type": "string", + "example": "Variable 1 for Process 1" + }, + "name": { + "type": "string", + "example": "var_1_1" + }, + "asset": { + "properties": { + "id": { + "type": "string", + "example": "asset_1_1" + }, + "type": { + "type": "string", + "example": "sensor", + "enum": [ + "sensor", + "actuator", + "controller", + "device" + ] + }, + "name": { + "type": "string", + "example": "Asset 1 for Process 1" + }, + "uuid": { + "type": "string", + "format": "uuid", + "example": "550e8400-e29b-41d4-a716-446655440000" + } + }, + "type": "object" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" + }, + "PaginationMeta": { + "properties": { + "current_page": { + "type": "integer", + "example": 1 + }, + "from": { + "type": "integer", + "example": 1 + }, + "last_page": { + "type": "integer", + "example": 5 + }, + "path": { + "type": "string", + "example": "http://processmaker.com/processes/variables" + }, + "per_page": { + "type": "integer", + "example": 20 + }, + "to": { + "type": "integer", + "example": 20 + }, + "total": { + "type": "integer", + "example": 100 + }, + "links": { + "properties": { + "first": { + "type": "string", + "example": "http://processmaker.com/processes/variables?page=1" + }, + "last": { + "type": "string", + "example": "http://processmaker.com/processes/variables?page=5" + }, + "prev": { + "type": "string", + "nullable": true + }, + "next": { + "type": "string", + "example": "http://processmaker.com/processes/variables?page=2" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "metadata": { + "properties": { + "filter": { + "type": "string" + }, + "sort_by": { + "type": "string" + }, "sort_order": { "type": "string", - "enum": [ - "asc", - "desc" - ] + "enum": [ + "asc", + "desc" + ] + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "current_page": { + "type": "integer" + }, + "form": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "path": { + "type": "string" + }, + "per_page": { + "type": "integer" + }, + "to": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "taskMetadata": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/metadata" + }, + { + "properties": { + "filter": { + "type": "string" + }, + "sort_by": { + "type": "string" + }, + "sort_order": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "current_page": { + "type": "integer" + }, + "form": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "path": { + "type": "string" + }, + "per_page": { + "type": "integer" + }, + "to": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "in_overdue": { + "type": "integer" + } + }, + "type": "object" + } + ] + }, + "signalsEditable": { + "properties": { + "id": { + "description": "Represents a business signal definition.", + "type": "string", + "format": "id" + }, + "name": { + "type": "string" + }, + "detail": { + "type": "string" + } + }, + "type": "object" + }, + "signals": { + "allOf": [ + { + "$ref": "#/components/schemas/signalsEditable" + }, + { + "properties": { + "type": { + "type": "string" + }, + "processes": { + "type": "array", + "items": { + "properties": { + "id": { + "type": "integer", + "format": "id" + }, + "is_system": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "catches": { + "type": "array", + "items": { + "properties": { + "id": { + "type": "integer", + "format": "id" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "type": "object" + } + } + }, + "type": "object" + } + ] + }, + "columns": { + "properties": { + "label": { + "type": "string" + }, + "field": { + "type": "string" + }, + "sortable": { + "type": "boolean" + }, + "default": { + "type": "boolean" + }, + "format": { + "type": "string" + }, + "mask": { + "type": "string" + } + }, + "type": "object" + }, + "commentsEditable": { + "properties": { + "id": { + "description": "Represents a business process definition.", + "type": "string", + "format": "id" }, - "count": { - "type": "integer" + "user_id": { + "type": "string", + "format": "id" }, - "total_pages": { - "type": "integer" + "commentable_id": { + "type": "string", + "format": "id" }, - "current_page": { - "type": "integer" + "commentable_type": { + "type": "string" }, - "form": { + "up": { "type": "integer" }, - "last_page": { + "down": { "type": "integer" }, - "path": { + "subject": { "type": "string" }, - "per_page": { - "type": "integer" + "body": { + "type": "string" }, - "to": { - "type": "integer" + "hidden": { + "type": "boolean" }, - "total": { - "type": "integer" + "type": { + "type": "string", + "enum": [ + "LOG", + "MESSAGE" + ] + } + }, + "type": "object" + }, + "comments": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/commentsEditable" + }, + { + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" + } + ] + }, + "EnvironmentVariableEditable": { + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": { + "type": "string" + }, + "asset_type": { + "type": "string", + "nullable": true + }, + "do_not_update": { + "type": "boolean" + } + }, + "type": "object" + }, + "EnvironmentVariable": { + "allOf": [ + { + "$ref": "#/components/schemas/EnvironmentVariableEditable" + }, + { + "properties": { + "id": { + "type": "integer", + "format": "id" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" + } + ] + }, + "groupsEditable": { + "properties": { + "name": { + "description": "Represents a group definition.", + "type": "string" + }, + "description": { + "type": "string" + }, + "manager_id": { + "type": "integer", + "format": "id" + }, + "status": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] + } + }, + "type": "object" + }, + "groups": { + "allOf": [ + { + "$ref": "#/components/schemas/groupsEditable" + }, + { + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "id": { + "type": "string", + "format": "id" + } + }, + "type": "object" + } + ] + }, + "groupMembersEditable": { + "properties": { + "group_id": { + "description": "Represents a group Members definition.", + "type": "string", + "format": "id" + }, + "member_id": { + "type": "string", + "format": "id" + }, + "member_type": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "type": "object" + }, + "groupMembers": { + "allOf": [ + { + "$ref": "#/components/schemas/groupMembersEditable" + }, + { + "properties": { + "id": { + "type": "string", + "format": "id" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" } - }, - "type": "object" + ] }, - "taskMetadata": { - "type": "object", + "createGroupMembers": { "allOf": [ { - "$ref": "#/components/schemas/metadata" + "$ref": "#/components/schemas/groupMembersEditable" }, { "properties": { - "filter": { - "type": "string" + "id": { + "type": "string", + "format": "id" }, - "sort_by": { - "type": "string" + "group": { + "type": "object" }, - "sort_order": { + "member": { + "type": "object" + }, + "created_at": { "type": "string", - "enum": [ - "asc", - "desc" - ] + "format": "date-time" }, - "count": { - "type": "integer" + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" + } + ] + }, + "getGroupMembersById": { + "allOf": [ + { + "properties": { + "group_id": { + "type": "string", + "format": "id" }, - "total_pages": { - "type": "integer" + "member_id": { + "type": "string", + "format": "id" }, - "current_page": { - "type": "integer" + "member_type": { + "type": "string" }, - "form": { - "type": "integer" + "id": { + "type": "string", + "format": "id" }, - "last_page": { - "type": "integer" + "created_at": { + "type": "string", + "format": "date-time" }, - "path": { + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" + } + ] + }, + "availableGroupMembers": { + "allOf": [ + { + "properties": { + "id": { + "type": "string", + "format": "id" + }, + "description": { "type": "string" }, - "per_page": { - "type": "integer" + "name": { + "type": "string" }, - "to": { - "type": "integer" + "status": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] }, - "total": { - "type": "integer" + "created_at": { + "type": "string", + "format": "date-time" }, - "in_overdue": { - "type": "integer" + "updated_at": { + "type": "string", + "format": "date-time" } }, "type": "object" } ] }, - "signalsEditable": { + "mediaEditable": { "properties": { "id": { - "description": "Represents a business signal definition.", + "description": "Represents media files stored in the database", + "type": "integer", + "format": "id" + }, + "model_id": { + "type": "integer", + "format": "id" + }, + "model_type": { "type": "string", "format": "id" }, + "collection_name": { + "type": "string" + }, "name": { "type": "string" }, - "detail": { + "file_name": { + "type": "string" + }, + "mime_type": { "type": "string" + }, + "disk": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "manipulations": { + "type": "object" + }, + "custom_properties": { + "type": "object" + }, + "responsive_images": { + "type": "object" + }, + "order_column": { + "type": "integer" } }, "type": "object" }, - "signals": { + "media": { + "type": "object", "allOf": [ { - "$ref": "#/components/schemas/signalsEditable" + "$ref": "#/components/schemas/mediaEditable" }, { "properties": { - "type": { - "type": "string" + "created_at": { + "type": "string", + "format": "date-time" }, - "processes": { - "type": "array", - "items": { - "properties": { - "id": { - "type": "integer", - "format": "id" - }, - "is_system": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "catches": { - "type": "array", - "items": { - "properties": { - "id": { - "type": "integer", - "format": "id" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - } - } - }, - "type": "object" - } + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" + } + ] + }, + "mediaExported": { + "properties": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "NotificationEditable": { + "properties": { + "type": { + "description": "Represents a notification definition.", + "type": "string" + }, + "notifiable_type": { + "type": "string" + }, + "notifiable_id": { + "type": "integer" + }, + "data": { + "type": "string" + }, + "name": { + "type": "string" + }, + "message": { + "type": "string" + }, + "processName": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "Notification": { + "allOf": [ + { + "$ref": "#/components/schemas/NotificationEditable" + }, + { + "properties": { + "id": { + "type": "string" + }, + "read_at": { + "type": "string", + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" } }, "type": "object" } ] }, - "columns": { + "ProcessEditable": { "properties": { - "label": { - "type": "string" + "process_category_id": { + "description": "Represents a business process definition.", + "type": "integer", + "format": "id" }, - "field": { + "name": { "type": "string" }, - "sortable": { - "type": "boolean" - }, - "default": { - "type": "boolean" - }, - "format": { + "case_title": { "type": "string" }, - "mask": { + "description": { "type": "string" - } - }, - "type": "object" - }, - "commentsEditable": { - "properties": { - "id": { - "description": "Represents a business process definition.", - "type": "string", - "format": "id" - }, - "user_id": { - "type": "string", - "format": "id" }, - "commentable_id": { + "status": { "type": "string", - "format": "id" + "enum": [ + "ACTIVE", + "INACTIVE", + "ARCHIVED" + ] }, - "commentable_type": { - "type": "string" + "pause_timer_start": { + "type": "integer" }, - "up": { + "cancel_screen_id": { "type": "integer" }, - "down": { + "has_timer_start_events": { + "type": "boolean" + }, + "request_detail_screen_id": { + "type": "integer", + "format": "id" + }, + "is_valid": { "type": "integer" }, - "subject": { + "package_key": { "type": "string" }, - "body": { + "start_events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProcessStartEvents" + } + }, + "warnings": { "type": "string" }, - "hidden": { - "type": "boolean" + "self_service_tasks": { + "type": "object" }, - "type": { - "type": "string", - "enum": [ - "LOG", - "MESSAGE" - ] + "signal_events": { + "type": "array", + "items": { + "type": "object" + } + }, + "category": { + "type": "object" + }, + "manager_id": { + "type": "array", + "items": { + "type": "integer", + "format": "id" + } } }, "type": "object" }, - "comments": { - "type": "object", + "Process": { "allOf": [ { - "$ref": "#/components/schemas/commentsEditable" + "$ref": "#/components/schemas/ProcessEditable" }, { "properties": { + "user_id": { + "type": "integer", + "format": "id" + }, + "id": { + "type": "string", + "format": "id" + }, + "deleted_at": { + "type": "string", + "format": "date-time" + }, "created_at": { "type": "string", "format": "date-time" @@ -6465,35 +9759,126 @@ "updated_at": { "type": "string", "format": "date-time" + }, + "notifications": { + "type": "object" + }, + "task_notifications": { + "type": "object" } }, "type": "object" } ] }, - "EnvironmentVariableEditable": { + "ProcessStartEvents": { "properties": { - "name": { + "eventDefinitions": { + "type": "object" + }, + "parallelMultiple": { + "type": "boolean" + }, + "outgoing": { + "type": "object" + }, + "incoming": { + "type": "object" + }, + "id": { "type": "string" }, - "description": { + "name": { "type": "string" + } + }, + "type": "object" + }, + "ProcessWithStartEvents": { + "allOf": [ + { + "$ref": "#/components/schemas/Process" }, - "value": { + { + "properties": { + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProcessStartEvents" + } + } + }, + "type": "object" + } + ] + }, + "ProcessImport": { + "allOf": [ + { + "$ref": "#/components/schemas/ProcessEditable" + }, + { + "properties": { + "status": { + "type": "array", + "items": { + "type": "object" + } + }, + "assignable": { + "type": "array", + "items": { + "type": "object" + } + }, + "process": {} + }, + "type": "object" + } + ] + }, + "ProcessAssignments": { + "properties": { + "assignable": { + "type": "array", + "items": { + "type": "object" + } + }, + "cancel_request": { + "type": "object" + }, + "edit_data": { + "type": "object" + } + }, + "type": "object" + }, + "ProcessCategoryEditable": { + "properties": { + "name": { + "description": "Represents a business process category definition.", "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] } }, "type": "object" }, - "EnvironmentVariable": { + "ProcessCategory": { "allOf": [ { - "$ref": "#/components/schemas/EnvironmentVariableEditable" + "$ref": "#/components/schemas/ProcessCategoryEditable" }, { "properties": { "id": { - "type": "integer", + "type": "string", "format": "id" }, "created_at": { @@ -6509,33 +9894,36 @@ } ] }, - "groupsEditable": { + "processPermissionsEditable": { "properties": { - "name": { - "description": "Represents a group definition.", - "type": "string" + "id": { + "description": "Represents a Process permission.", + "type": "integer", + "format": "id" }, - "description": { - "type": "string" + "process_id": { + "type": "integer", + "format": "id" }, - "manager_id": { + "permission_id": { "type": "integer", "format": "id" }, - "status": { - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ] + "assignable_id": { + "type": "integer", + "format": "id" + }, + "assignable_type": { + "type": "string" } }, "type": "object" }, - "groups": { + "processPermissions": { + "type": "object", "allOf": [ { - "$ref": "#/components/schemas/groupsEditable" + "$ref": "#/components/schemas/processPermissionsEditable" }, { "properties": { @@ -6546,40 +9934,63 @@ "updated_at": { "type": "string", "format": "date-time" - }, - "id": { - "type": "string", - "format": "id" } }, "type": "object" } ] }, - "groupMembersEditable": { + "processRequestEditable": { "properties": { - "group_id": { - "description": "Represents a group Members definition.", + "user_id": { + "description": "Represents an Eloquent model of a Request which is an instance of a Process.", "type": "string", "format": "id" }, - "member_id": { + "callable_id": { "type": "string", "format": "id" }, - "member_type": { + "data": { + "type": "object" + }, + "status": { + "type": "string", + "enum": [ + "ACTIVE", + "COMPLETED", + "ERROR", + "CANCELED" + ] + }, + "name": { "type": "string" }, - "description": { + "case_title": { + "type": "string" + }, + "case_title_formatted": { + "type": "string" + }, + "user_viewed_at": { "type": "string" + }, + "case_number": { + "type": "integer" + }, + "process_id": { + "type": "integer" + }, + "process": { + "type": "object" } }, "type": "object" }, - "groupMembers": { + "processRequest": { "allOf": [ { - "$ref": "#/components/schemas/groupMembersEditable" + "$ref": "#/components/schemas/processRequestEditable" }, { "properties": { @@ -6587,6 +9998,22 @@ "type": "string", "format": "id" }, + "process_id": { + "type": "string", + "format": "id" + }, + "process_collaboration_id": { + "type": "string", + "format": "id" + }, + "participant_id": { + "type": "string", + "format": "id" + }, + "process_category_id": { + "type": "string", + "format": "id" + }, "created_at": { "type": "string", "format": "date-time" @@ -6594,16 +10021,54 @@ "updated_at": { "type": "string", "format": "date-time" + }, + "user": {}, + "participants": { + "type": "array", + "items": { + "$ref": "#/components/schemas/users" + } } }, "type": "object" } ] }, - "createGroupMembers": { + "processRequestTokenEditable": { + "properties": { + "user_id": { + "description": "ProcessRequestToken is used to store the state of a token of the\nNayra engine", + "type": "string", + "format": "id" + }, + "status": { + "type": "string" + }, + "due_at": { + "type": "string", + "format": "date-time" + }, + "initiated_at": { + "type": "string", + "format": "date-time" + }, + "riskchanges_at": { + "type": "string", + "format": "date-time" + }, + "subprocess_start_event_id": { + "type": "string" + }, + "data": { + "type": "object" + } + }, + "type": "object" + }, + "processRequestToken": { "allOf": [ { - "$ref": "#/components/schemas/groupMembersEditable" + "$ref": "#/components/schemas/processRequestTokenEditable" }, { "properties": { @@ -6611,43 +10076,27 @@ "type": "string", "format": "id" }, - "group": { - "type": "object" - }, - "member": { - "type": "object" - }, - "created_at": { + "process_id": { "type": "string", - "format": "date-time" + "format": "id" }, - "updated_at": { + "process_request_id": { "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "getGroupMembersById": { - "allOf": [ - { - "properties": { - "group_id": { + "format": "id" + }, + "element_id": { "type": "string", "format": "id" }, - "member_id": { + "element_type": { "type": "string", "format": "id" }, - "member_type": { + "element_index": { "type": "string" }, - "id": { - "type": "string", - "format": "id" + "element_name": { + "type": "string" }, "created_at": { "type": "string", @@ -6656,33 +10105,68 @@ "updated_at": { "type": "string", "format": "date-time" + }, + "initiated_at": { + "type": "string", + "format": "date-time" + }, + "advanceStatus": { + "type": "string" + }, + "due_notified": { + "type": "integer" + }, + "user": { + "type": "object" + }, + "process": { + "type": "object" + }, + "process_request": { + "type": "object" } }, "type": "object" } ] }, - "availableGroupMembers": { + "taskAssignmentsEditable": { + "properties": { + "process_id": { + "description": "Represents a business process task assignment definition.", + "type": "integer", + "format": "id" + }, + "process_task_id": { + "type": "string", + "format": "id" + }, + "assignment_id": { + "type": "integer", + "format": "id" + }, + "assignment_type": { + "type": "string", + "enum": [ + "ProcessMaker\\Models\\User", + "ProcessMaker\\Models\\Group" + ] + } + }, + "type": "object" + }, + "taskAssignments": { + "type": "object", "allOf": [ + { + "$ref": "#/components/schemas/taskAssignmentsEditable" + }, { "properties": { "id": { - "type": "string", + "type": "integer", "format": "id" }, - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ] - }, "created_at": { "type": "string", "format": "date-time" @@ -6696,62 +10180,56 @@ } ] }, - "mediaEditable": { + "screensEditable": { "properties": { - "id": { - "description": "Represents media files stored in the database", - "type": "integer", - "format": "id" - }, - "model_id": { - "type": "integer", - "format": "id" - }, - "model_type": { - "type": "string", - "format": "id" - }, - "collection_name": { - "type": "string" - }, - "name": { - "type": "string" - }, - "file_name": { + "title": { + "description": "Class Screen", "type": "string" }, - "mime_type": { + "type": { "type": "string" }, - "disk": { + "description": { "type": "string" }, - "size": { - "type": "integer" + "config": { + "type": "array", + "items": { + "type": "object" + } }, - "manipulations": { - "type": "object" + "computed": { + "type": "array", + "items": { + "type": "object" + } }, - "custom_properties": { - "type": "object" + "watchers": { + "type": "array", + "items": { + "type": "object" + } }, - "responsive_images": { - "type": "object" + "custom_css": { + "type": "string" }, - "order_column": { - "type": "integer" + "screen_category_id": { + "type": "string" } }, "type": "object" }, - "media": { - "type": "object", + "screens": { "allOf": [ { - "$ref": "#/components/schemas/mediaEditable" + "$ref": "#/components/schemas/screensEditable" }, { "properties": { + "id": { + "type": "string", + "format": "id" + }, "created_at": { "type": "string", "format": "date-time" @@ -6765,7 +10243,7 @@ } ] }, - "mediaExported": { + "screenExported": { "properties": { "url": { "type": "string" @@ -6773,55 +10251,32 @@ }, "type": "object" }, - "NotificationEditable": { + "ScreenCategoryEditable": { "properties": { - "type": { - "description": "Represents a notification definition.", - "type": "string" - }, - "notifiable_type": { - "type": "string" - }, - "notifiable_id": { - "type": "integer" - }, - "data": { - "type": "string" - }, "name": { + "description": "Represents a business screen category definition.", "type": "string" }, - "message": { - "type": "string" - }, - "processName": { - "type": "string" - }, - "userName": { - "type": "string" - }, - "request_id": { - "type": "string" - }, - "url": { - "type": "string" + "status": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] } }, "type": "object" }, - "Notification": { + "ScreenCategory": { "allOf": [ { - "$ref": "#/components/schemas/NotificationEditable" + "$ref": "#/components/schemas/ScreenCategoryEditable" }, { "properties": { "id": { - "type": "string" - }, - "read_at": { "type": "string", - "format": "date-time" + "format": "id" }, "created_at": { "type": "string", @@ -6836,99 +10291,72 @@ } ] }, - "ProcessEditable": { + "ScreenTypeEditable": { "properties": { - "process_category_id": { - "description": "Represents a business process definition.", - "type": "integer", - "format": "id" - }, "name": { + "description": "Represents a business screen Type definition.", "type": "string" + } + }, + "type": "object" + }, + "ScreenType": { + "allOf": [ + { + "$ref": "#/components/schemas/ScreenTypeEditable" }, - "case_title": { + { + "properties": { + "id": { + "type": "string", + "format": "id" + } + }, + "type": "object" + } + ] + }, + "scriptsEditable": { + "properties": { + "title": { + "description": "Represents an Eloquent model of a Script", "type": "string" }, "description": { "type": "string" }, - "status": { - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE", - "ARCHIVED" - ] + "language": { + "type": "string" }, - "pause_timer_start": { - "type": "integer" + "code": { + "type": "string" }, - "cancel_screen_id": { + "timeout": { "type": "integer" }, - "has_timer_start_events": { - "type": "boolean" - }, - "request_detail_screen_id": { - "type": "integer", - "format": "id" - }, - "is_valid": { + "run_as_user_id": { "type": "integer" }, - "package_key": { - "type": "string" - }, - "start_events": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProcessStartEvents" - } - }, - "warnings": { + "key": { "type": "string" }, - "self_service_tasks": { - "type": "object" - }, - "signal_events": { - "type": "array", - "items": { - "type": "object" - } - }, - "category": { - "type": "object" - }, - "manager_id": { - "type": "array", - "items": { - "type": "integer", - "format": "id" - } + "script_category_id": { + "type": "integer" } }, "type": "object" }, - "Process": { + "scripts": { "allOf": [ { - "$ref": "#/components/schemas/ProcessEditable" + "$ref": "#/components/schemas/scriptsEditable" }, { "properties": { - "user_id": { - "type": "integer", - "format": "id" - }, "id": { - "type": "string", + "type": "integer", "format": "id" }, - "deleted_at": { - "type": "string", - "format": "date-time" - }, "created_at": { "type": "string", "format": "date-time" @@ -6936,121 +10364,228 @@ "updated_at": { "type": "string", "format": "date-time" - }, - "notifications": { - "type": "object" - }, - "task_notifications": { - "type": "object" } }, "type": "object" } ] }, - "ProcessStartEvents": { + "scriptsPreview": { "properties": { - "eventDefinitions": { - "type": "object" - }, - "parallelMultiple": { - "type": "boolean" - }, - "outgoing": { - "type": "object" - }, - "incoming": { - "type": "object" + "status": { + "type": "string" }, - "id": { + "key": { "type": "string" }, + "output": { + "type": "object" + } + }, + "type": "object" + }, + "ScriptCategoryEditable": { + "properties": { "name": { + "description": "Represents a business script category definition.", "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] } }, "type": "object" }, - "ProcessWithStartEvents": { + "ScriptCategory": { "allOf": [ { - "$ref": "#/components/schemas/Process" + "$ref": "#/components/schemas/ScriptCategoryEditable" }, { "properties": { - "events": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProcessStartEvents" - } + "id": { + "type": "string", + "format": "id" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" } }, "type": "object" } ] }, - "ProcessImport": { + "scriptExecutorsEditable": { + "properties": { + "title": { + "description": "Represents an Eloquent model of a Script Executor", + "type": "string" + }, + "description": { + "type": "string" + }, + "language": { + "type": "string" + }, + "config": { + "type": "string" + }, + "is_system": { + "type": "boolean" + } + }, + "type": "object" + }, + "scriptExecutors": { "allOf": [ { - "$ref": "#/components/schemas/ProcessEditable" + "$ref": "#/components/schemas/scriptExecutorsEditable" }, { "properties": { - "status": { - "type": "array", - "items": { - "type": "object" - } + "id": { + "type": "integer", + "format": "id" }, - "assignable": { - "type": "array", - "items": { - "type": "object" - } + "created_at": { + "type": "string", + "format": "date-time" }, - "process": {} + "updated_at": { + "type": "string", + "format": "date-time" + } }, "type": "object" } ] }, - "ProcessAssignments": { + "availableLanguages": { "properties": { - "assignable": { + "text": { + "type": "string" + }, + "value": { + "type": "string" + }, + "initDockerFile": { + "type": "string" + } + }, + "type": "object" + }, + "securityLog": { + "properties": { + "id": { + "description": "Class SecurityLog", + "type": "integer" + }, + "event": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "meta": { "type": "array", "items": { + "properties": { + "os": { + "type": "array", + "items": { + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + } + }, + "browser": { + "type": "array", + "items": { + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + } + }, + "user_agent": { + "type": "string" + } + }, "type": "object" } }, - "cancel_request": { - "type": "object" + "user_id": { + "type": "integer" }, - "edit_data": { - "type": "object" + "occured_at": { + "type": "string" } }, "type": "object" }, - "ProcessCategoryEditable": { + "settingsEditable": { "properties": { + "key": { + "description": "Class Settings", + "type": "string" + }, + "config": { + "type": "array", + "items": { + "type": "object" + } + }, "name": { - "description": "Represents a business process category definition.", "type": "string" }, - "status": { - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ] + "helper": { + "type": "string" + }, + "group": { + "type": "string" + }, + "format": { + "type": "string" + }, + "hidden": { + "type": "boolean" + }, + "readonly": { + "type": "boolean" + }, + "variables": { + "type": "string" + }, + "sansSerifFont": { + "type": "string" } }, "type": "object" }, - "ProcessCategory": { + "settings": { "allOf": [ { - "$ref": "#/components/schemas/ProcessCategoryEditable" + "$ref": "#/components/schemas/settingsEditable" }, { "properties": { @@ -7071,125 +10606,166 @@ } ] }, - "processPermissionsEditable": { + "TokenClient": { "properties": { "id": { - "description": "Represents a Process permission.", - "type": "integer", - "format": "id" + "type": "integer" }, - "process_id": { - "type": "integer", - "format": "id" + "user_id": { + "type": "integer" }, - "permission_id": { - "type": "integer", - "format": "id" + "name": { + "type": "string" }, - "assignable_id": { - "type": "integer", - "format": "id" + "provider": { + "type": "string" }, - "assignable_type": { + "redirect": { "type": "string" + }, + "personal_access_client": { + "type": "boolean" + }, + "password_client": { + "type": "boolean" + }, + "revoked": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" } }, "type": "object" }, - "processPermissions": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/processPermissionsEditable" - }, - { - "properties": { - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "processRequestEditable": { + "usersEditable": { "properties": { - "user_id": { - "description": "Represents an Eloquent model of a Request which is an instance of a Process.", + "email": { + "description": "The attributes that are mass assignable.", "type": "string", - "format": "id" + "format": "email" + }, + "firstname": { + "type": "string" + }, + "lastname": { + "type": "string" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "postal": { + "type": "string" + }, + "country": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "fax": { + "type": "string" + }, + "cell": { + "type": "string" + }, + "title": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "datetime_format": { + "type": "string" + }, + "language": { + "type": "string" + }, + "is_administrator": { + "type": "boolean" + }, + "expires_at": { + "type": "string" }, - "callable_id": { - "type": "string", - "format": "id" + "loggedin_at": { + "type": "string" }, - "data": { - "type": "object" + "remember_token": { + "type": "string" }, "status": { "type": "string", "enum": [ "ACTIVE", - "COMPLETED", - "ERROR", - "CANCELED" + "INACTIVE", + "SCHEDULED", + "OUT_OF_OFFICE", + "BLOCKED" ] }, - "name": { + "fullname": { "type": "string" }, - "case_title": { + "avatar": { "type": "string" }, - "case_title_formatted": { - "type": "string" + "media": { + "type": "array", + "items": { + "$ref": "#/components/schemas/media" + } }, - "user_viewed_at": { - "type": "string" + "birthdate": { + "type": "string", + "format": "date" }, - "case_number": { - "type": "integer" + "delegation_user_id": { + "type": "string", + "format": "id" }, - "process_id": { - "type": "integer" + "manager_id": { + "type": "string", + "format": "id" }, - "process": { - "type": "object" + "meta": { + "type": "object", + "additionalProperties": true + }, + "force_change_password": { + "type": "boolean" + }, + "email_task_notification": { + "type": "boolean" } }, "type": "object" }, - "processRequest": { + "users": { "allOf": [ { - "$ref": "#/components/schemas/processRequestEditable" + "$ref": "#/components/schemas/usersEditable" }, { "properties": { "id": { - "type": "string", - "format": "id" - }, - "process_id": { - "type": "string", - "format": "id" - }, - "process_collaboration_id": { - "type": "string", - "format": "id" - }, - "participant_id": { - "type": "string", - "format": "id" - }, - "process_category_id": { - "type": "string", - "format": "id" + "type": "integer" }, "created_at": { "type": "string", @@ -7199,81 +10775,97 @@ "type": "string", "format": "date-time" }, - "user": {}, - "participants": { - "type": "array", - "items": { - "$ref": "#/components/schemas/users" - } + "deleted_at": { + "type": "string", + "format": "date-time" } }, "type": "object" } ] }, - "processRequestTokenEditable": { + "UserToken": { "properties": { + "id": { + "type": "string" + }, "user_id": { - "description": "ProcessRequestToken is used to store the state of a token of the\nNayra engine", - "type": "string", - "format": "id" + "type": "integer" }, - "status": { + "client_id": { + "type": "integer" + }, + "name": { "type": "string" }, - "due_at": { + "scopes": { + "type": "object" + }, + "revoked": { + "type": "boolean" + }, + "client": { + "$ref": "#/components/schemas/TokenClient" + }, + "created_at": { "type": "string", "format": "date-time" }, - "initiated_at": { + "updated_at": { "type": "string", "format": "date-time" }, - "riskchanges_at": { + "expires_at": { "type": "string", "format": "date-time" + } + }, + "type": "object" + }, + "collectionsEditable": { + "properties": { + "name": { + "type": "string" }, - "subprocess_start_event_id": { + "description": { "type": "string" }, - "data": { - "type": "object" + "custom_title": { + "type": "string" + }, + "create_screen_id": { + "type": "string", + "format": "id" + }, + "read_screen_id": { + "type": "string", + "format": "id" + }, + "update_screen_id": { + "type": "string", + "format": "id" + }, + "signal_create": { + "type": "boolean" + }, + "signal_update": { + "type": "boolean" + }, + "signal_delete": { + "type": "boolean" } }, "type": "object" }, - "processRequestToken": { + "collections": { "allOf": [ { - "$ref": "#/components/schemas/processRequestTokenEditable" + "$ref": "#/components/schemas/collectionsEditable" }, { "properties": { "id": { - "type": "string", - "format": "id" - }, - "process_id": { - "type": "string", - "format": "id" - }, - "process_request_id": { - "type": "string", - "format": "id" - }, - "element_id": { - "type": "string", - "format": "id" - }, - "element_type": { - "type": "string", - "format": "id" - }, - "element_index": { - "type": "string" - }, - "element_name": { - "type": "string" + "type": "integer" }, "created_at": { "type": "string", @@ -7283,130 +10875,141 @@ "type": "string", "format": "date-time" }, - "initiated_at": { + "created_by_id": { "type": "string", - "format": "date-time" - }, - "advanceStatus": { - "type": "string" - }, - "due_notified": { - "type": "integer" - }, - "user": { - "type": "object" + "format": "id" }, - "process": { - "type": "object" + "updated_by_id": { + "type": "string", + "format": "id" }, - "process_request": { - "type": "object" + "columns": { + "type": "array", + "items": { + "type": "object" + } } }, "type": "object" } ] }, - "taskAssignmentsEditable": { + "recordsEditable": { "properties": { - "process_id": { - "description": "Represents a business process task assignment definition.", - "type": "integer", - "format": "id" - }, - "process_task_id": { - "type": "string", - "format": "id" - }, - "assignment_id": { - "type": "integer", - "format": "id" - }, - "assignment_type": { - "type": "string", - "enum": [ - "ProcessMaker\\Models\\User", - "ProcessMaker\\Models\\Group" - ] + "data": { + "type": "object" } }, "type": "object" }, - "taskAssignments": { - "type": "object", + "records": { "allOf": [ { - "$ref": "#/components/schemas/taskAssignmentsEditable" + "$ref": "#/components/schemas/recordsEditable" }, { "properties": { "id": { - "type": "integer", - "format": "id" - }, - "created_at": { - "type": "string", - "format": "date-time" + "type": "integer" }, - "updated_at": { + "collection_id": { "type": "string", - "format": "date-time" + "format": "id" } }, "type": "object" } - ] + ] + }, + "DataSourceCallParameters": { + "properties": { + "endpoint": { + "type": "string" + }, + "dataMapping": { + "type": "array", + "items": { + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + } + }, + "outboundConfig": { + "type": "array", + "items": { + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "type": "object" + }, + "DataSourceResponse": { + "properties": { + "status": { + "type": "integer" + }, + "response": { + "type": "object" + } + }, + "type": "object" }, - "screensEditable": { + "dataSourceEditable": { "properties": { - "title": { - "description": "Class Screen", - "type": "string" + "id": { + "description": "Class DataSource", + "type": "string", + "format": "id" }, - "type": { + "name": { "type": "string" }, "description": { "type": "string" }, - "config": { - "type": "array", - "items": { - "type": "object" - } + "endpoints": { + "type": "string" }, - "computed": { - "type": "array", - "items": { - "type": "object" - } + "mappings": { + "type": "string" }, - "watchers": { - "type": "array", - "items": { - "type": "object" - } + "authtype": { + "type": "string" }, - "custom_css": { + "credentials": { "type": "string" }, - "screen_category_id": { + "status": { + "type": "string" + }, + "data_source_category_id": { "type": "string" } }, "type": "object" }, - "screens": { + "dataSource": { + "type": "object", "allOf": [ { - "$ref": "#/components/schemas/screensEditable" + "$ref": "#/components/schemas/dataSourceEditable" }, { "properties": { - "id": { - "type": "string", - "format": "id" - }, "created_at": { "type": "string", "format": "date-time" @@ -7420,18 +11023,10 @@ } ] }, - "screenExported": { - "properties": { - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ScreenCategoryEditable": { + "dataSourceCategoryEditable": { "properties": { "name": { - "description": "Represents a business screen category definition.", + "description": "Represents a business data Source category definition.", "type": "string" }, "status": { @@ -7444,10 +11039,11 @@ }, "type": "object" }, - "ScreenCategory": { + "DataSourceCategory": { + "type": "object", "allOf": [ { - "$ref": "#/components/schemas/ScreenCategoryEditable" + "$ref": "#/components/schemas/dataSourceCategoryEditable" }, { "properties": { @@ -7468,72 +11064,36 @@ } ] }, - "ScreenTypeEditable": { + "decisionTableEditable": { "properties": { - "name": { - "description": "Represents a business screen Type definition.", - "type": "string" - } - }, - "type": "object" - }, - "ScreenType": { - "allOf": [ - { - "$ref": "#/components/schemas/ScreenTypeEditable" + "id": { + "description": "Class Screen", + "type": "string", + "format": "id" }, - { - "properties": { - "id": { - "type": "string", - "format": "id" - } - }, - "type": "object" - } - ] - }, - "scriptsEditable": { - "properties": { - "title": { - "description": "Represents an Eloquent model of a Script", + "name": { "type": "string" }, "description": { "type": "string" }, - "language": { - "type": "string" - }, - "code": { + "definition": { "type": "string" }, - "timeout": { - "type": "integer" - }, - "run_as_user_id": { - "type": "integer" - }, - "key": { + "decision_table_categories_id": { "type": "string" - }, - "script_category_id": { - "type": "integer" } }, "type": "object" }, - "scripts": { + "decisionTable": { + "type": "object", "allOf": [ { - "$ref": "#/components/schemas/scriptsEditable" + "$ref": "#/components/schemas/decisionTableEditable" }, { "properties": { - "id": { - "type": "integer", - "format": "id" - }, "created_at": { "type": "string", "format": "date-time" @@ -7547,24 +11107,18 @@ } ] }, - "scriptsPreview": { + "DecisionTableExported": { "properties": { - "status": { - "type": "string" - }, - "key": { + "url": { "type": "string" - }, - "output": { - "type": "object" } }, "type": "object" }, - "ScriptCategoryEditable": { + "decisionTableCategoryEditable": { "properties": { "name": { - "description": "Represents a business script category definition.", + "description": "Represents a business decision Table category definition.", "type": "string" }, "status": { @@ -7577,10 +11131,11 @@ }, "type": "object" }, - "ScriptCategory": { + "DecisionTableCategory": { + "type": "object", "allOf": [ { - "$ref": "#/components/schemas/ScriptCategoryEditable" + "$ref": "#/components/schemas/decisionTableCategoryEditable" }, { "properties": { @@ -7601,36 +11156,43 @@ } ] }, - "scriptExecutorsEditable": { + "SavedSearchEditable": { "properties": { - "title": { - "description": "Represents an Eloquent model of a Script Executor", - "type": "string" + "meta": { + "description": "Represents an Eloquent model of a Saved Search.", + "type": "object", + "additionalProperties": "true" }, - "description": { + "pmql": { "type": "string" }, - "language": { + "title": { "type": "string" }, - "config": { - "type": "string" + "type": { + "type": "string", + "enum": [ + "task", + "request" + ] }, - "is_system": { - "type": "boolean" + "advanced_filter": { + "type": "object", + "additionalProperties": "true" } }, "type": "object" }, - "scriptExecutors": { + "SavedSearch": { "allOf": [ - { - "$ref": "#/components/schemas/scriptExecutorsEditable" - }, { "properties": { "id": { - "type": "integer", + "type": "string", + "format": "id" + }, + "user_id": { + "type": "string", "format": "id" }, "created_at": { @@ -7643,133 +11205,65 @@ } }, "type": "object" + }, + { + "$ref": "#/components/schemas/SavedSearchEditable" } ] }, - "availableLanguages": { + "SavedSearchIcon": { "properties": { - "text": { + "name": { "type": "string" }, "value": { "type": "string" - }, - "initDockerFile": { - "type": "string" } }, "type": "object" }, - "securityLog": { + "SavedSearchChartEditable": { "properties": { - "id": { - "description": "Class SecurityLog", - "type": "integer" - }, - "event": { - "type": "string" - }, - "ip": { + "title": { + "description": "Represents an Eloquent model of a Saved Search Chart.", "type": "string" }, - "meta": { - "type": "array", - "items": { - "properties": { - "os": { - "type": "array", - "items": { - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "type": "object" - } - }, - "browser": { - "type": "array", - "items": { - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "type": "object" - } - }, - "user_agent": { - "type": "string" - } - }, - "type": "object" - } - }, - "user_id": { - "type": "integer" - }, - "occured_at": { - "type": "string" - } - }, - "type": "object" - }, - "settingsEditable": { - "properties": { - "key": { - "description": "Class Settings", - "type": "string" + "type": { + "type": "string", + "enum": [ + "bar", + "bar-vertical", + "line", + "pie", + "doughnut" + ] }, "config": { - "type": "array", - "items": { - "type": "object" - } - }, - "name": { - "type": "string" - }, - "helper": { - "type": "string" - }, - "group": { - "type": "string" - }, - "format": { - "type": "string" - }, - "hidden": { - "type": "boolean" - }, - "readonly": { - "type": "boolean" - }, - "variables": { - "type": "string" + "type": "object", + "additionalProperties": "true" }, - "sansSerifFont": { - "type": "string" + "sort": { + "type": "integer" } }, "type": "object" }, - "settings": { + "SavedSearchChart": { "allOf": [ - { - "$ref": "#/components/schemas/settingsEditable" - }, { "properties": { "id": { "type": "string", "format": "id" }, + "saved_search_id": { + "type": "string", + "format": "id" + }, + "user_id": { + "type": "string", + "format": "id" + }, "created_at": { "type": "string", "format": "date-time" @@ -7777,227 +11271,133 @@ "updated_at": { "type": "string", "format": "date-time" + }, + "deleted_at": { + "type": "string", + "format": "date-time" } }, "type": "object" - } - ] - }, - "TokenClient": { - "properties": { - "id": { - "type": "integer" - }, - "user_id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "provider": { - "type": "string" - }, - "redirect": { - "type": "string" - }, - "personal_access_client": { - "type": "boolean" - }, - "password_client": { - "type": "boolean" - }, - "revoked": { - "type": "boolean" - }, - "created_at": { - "type": "string", - "format": "date-time" }, - "updated_at": { - "type": "string", - "format": "date-time" + { + "$ref": "#/components/schemas/SavedSearchChartEditable" } - }, - "type": "object" + ] }, - "usersEditable": { + "ReportEditable": { "properties": { - "email": { - "description": "The attributes that are mass assignable.", + "type": { "type": "string", - "format": "email" - }, - "firstname": { - "type": "string" - }, - "lastname": { - "type": "string" - }, - "username": { - "type": "string" - }, - "password": { - "type": "string" - }, - "address": { - "type": "string" - }, - "city": { - "type": "string" - }, - "state": { - "type": "string" - }, - "postal": { - "type": "string" - }, - "country": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "fax": { - "type": "string" - }, - "cell": { - "type": "string" - }, - "title": { - "type": "string" - }, - "timezone": { - "type": "string" - }, - "datetime_format": { - "type": "string" - }, - "language": { - "type": "string" - }, - "is_administrator": { - "type": "boolean" - }, - "expires_at": { - "type": "string" - }, - "loggedin_at": { - "type": "string" - }, - "remember_token": { - "type": "string" + "enum": [ + "adhoc", + "scheduled" + ] }, - "status": { + "format": { "type": "string", "enum": [ - "ACTIVE", - "INACTIVE", - "SCHEDULED", - "OUT_OF_OFFICE", - "BLOCKED" + "csv", + "xlsx" ] }, - "fullname": { - "type": "string" + "saved_search_id": { + "type": "integer" }, - "avatar": { - "type": "string" + "config": { + "type": "object", + "additionalProperties": "true" }, - "media": { + "to": { "type": "array", "items": { - "$ref": "#/components/schemas/media" + "type": "string" } }, - "birthdate": { - "type": "string", - "format": "date" - }, - "delegation_user_id": { - "type": "string", - "format": "id" - }, - "manager_id": { - "type": "string", - "format": "id" - }, - "meta": { - "type": "object", - "additionalProperties": true - }, - "force_change_password": { - "type": "boolean" + "subject": { + "type": "string" }, - "email_task_notification": { - "type": "boolean" + "body": { + "type": "string" } }, "type": "object" }, - "users": { + "Report": { "allOf": [ - { - "$ref": "#/components/schemas/usersEditable" - }, { "properties": { "id": { - "type": "integer" + "type": "string", + "format": "id" }, - "created_at": { + "user_id": { "type": "string", - "format": "date-time" + "format": "id" }, - "updated_at": { + "created_at": { "type": "string", "format": "date-time" }, - "deleted_at": { + "updated_at": { "type": "string", "format": "date-time" } }, "type": "object" + }, + { + "$ref": "#/components/schemas/SavedSearchEditable" } ] }, - "UserToken": { + "versionHistoryEditable": { "properties": { - "id": { - "type": "string" - }, - "user_id": { + "versionable_id": { + "description": "Class VersionHistoryCollection", "type": "integer" }, - "client_id": { - "type": "integer" + "versionable_type": { + "type": "string" }, "name": { "type": "string" }, - "scopes": { - "type": "object" - }, - "revoked": { - "type": "boolean" - }, - "client": { - "$ref": "#/components/schemas/TokenClient" - }, - "created_at": { - "type": "string", - "format": "date-time" + "subject": { + "type": "string" }, - "updated_at": { - "type": "string", - "format": "date-time" + "description": { + "type": "string" }, - "expires_at": { + "status": { "type": "string", - "format": "date-time" + "enum": [ + "ACTIVE", + "INACTIVE" + ] } }, "type": "object" + }, + "versionHistory": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/versionHistoryEditable" + }, + { + "properties": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" + } + ] } }, "responses": { @@ -8236,6 +11636,46 @@ { "name": "Processes Variables", "description": "Processes Variables" + }, + { + "name": "Collections", + "description": "Collections" + }, + { + "name": "Comments", + "description": "Comments" + }, + { + "name": "DataSourcesCategories", + "description": "DataSourcesCategories" + }, + { + "name": "DataSources", + "description": "DataSources" + }, + { + "name": "DecisionTableCategories", + "description": "DecisionTableCategories" + }, + { + "name": "DecisionTables", + "description": "DecisionTables" + }, + { + "name": "SavedSearchCharts", + "description": "SavedSearchCharts" + }, + { + "name": "SavedSearches", + "description": "SavedSearches" + }, + { + "name": "Reports", + "description": "Reports" + }, + { + "name": "Version History", + "description": "Version History" } ], "security": [ diff --git a/tests/Feature/Api/WizardTemplatesTest.php b/tests/Feature/Api/WizardTemplatesTest.php deleted file mode 100644 index 38e2abcd5e..0000000000 --- a/tests/Feature/Api/WizardTemplatesTest.php +++ /dev/null @@ -1,61 +0,0 @@ -count($total)->create(); - - $params = [ - 'order_by' => 'id', - 'order_direction' => 'asc', - 'per_page' => 10, - ]; - $route = route('api.wizard-templates.index', $params); - $response = $this->apiCall('GET', $route); - - $response->assertStatus(200); - $response->assertJsonCount(10, 'data'); - $response->assertJson([ - 'meta' => [ - 'per_page' => $params['per_page'], - 'total' => $total, - ], - ]); - } - - public function testItCanAddFilesFromUrlToMediaCollection() - { - // Create fake files. - Storage::fake('public'); - $directoryName = 'images'; - $filesToCreate = 3; - for ($i = 0; $i < $filesToCreate; $i++) { - UploadedFile::fake()->image("test_image{$i}.jpg")->storeAs($directoryName, "test_image{$i}.jpg", 'public'); - } - - // Add files to media collection. - $directory = Storage::disk('public')->path($directoryName); - $wizardTemplate = WizardTemplate::factory()->create(); - $wizardTemplate->addFilesToMediaCollection($directory); - - $this->assertCount($filesToCreate, $wizardTemplate->getMedia($directoryName)); - $this->assertDatabaseHas('media', [ - 'model_type' => WizardTemplate::class, - 'model_id' => $wizardTemplate->id, - 'collection_name' => $directoryName, - 'name' => 'test_image0', - ]); - } -} From 8c8295a24058d82b4c0d0777ca47173bb075918f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 27 Jul 2026 15:13:28 -0400 Subject: [PATCH 29/52] FOUR-31416 Remove guided templates --- ProcessMaker/Events/ProcessCompleted.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ProcessMaker/Events/ProcessCompleted.php b/ProcessMaker/Events/ProcessCompleted.php index be95f14dae..566fd59730 100644 --- a/ProcessMaker/Events/ProcessCompleted.php +++ b/ProcessMaker/Events/ProcessCompleted.php @@ -28,7 +28,10 @@ public function __construct(ProcessRequest $processRequest) { $this->payloadUrl = route('api.requests.show', ['request' => $processRequest->getKey()]); $this->processRequest = $processRequest; - $this->endEventDestination = $processRequest->getElementDestination(); + + if ($processRequest->process->asset_type !== 'GUIDED_HELPER_PROCESS') { + $this->endEventDestination = $processRequest->getElementDestination(); + } } /** From 5705c021a47981f687c7f6cce1195b4abef6f91c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 27 Jul 2026 16:03:51 -0400 Subject: [PATCH 30/52] FOUR-31416 Remove guided templates --- .../components/ProcessHeader.vue | 225 + storage/api-docs/api-docs.json | 5822 ++++------------- 2 files changed, 1416 insertions(+), 4631 deletions(-) create mode 100644 resources/js/processes-catalogue/components/ProcessHeader.vue diff --git a/resources/js/processes-catalogue/components/ProcessHeader.vue b/resources/js/processes-catalogue/components/ProcessHeader.vue new file mode 100644 index 0000000000..da85136b7e --- /dev/null +++ b/resources/js/processes-catalogue/components/ProcessHeader.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/storage/api-docs/api-docs.json b/storage/api-docs/api-docs.json index 832f903c0e..3b01de8d45 100644 --- a/storage/api-docs/api-docs.json +++ b/storage/api-docs/api-docs.json @@ -4069,10 +4069,16 @@ "schema": { "properties": { "data": { - "type": "object" + "type": "array", + "items": { + "type": "object" + } }, "config": { - "type": "object" + "type": "array", + "items": { + "type": "object" + } }, "code": { "type": "string" @@ -4117,10 +4123,16 @@ "schema": { "properties": { "data": { - "type": "object" + "type": "array", + "items": { + "type": "object" + } }, "config": { - "type": "object" + "type": "array", + "items": { + "type": "object" + } }, "sync": { "type": "boolean" @@ -6040,3980 +6052,412 @@ }, "servers": [ { - "url": "http://localhost/api/1.1", + "url": "http://landlord.test/api/1.1", "description": "API v1.1 Server" } ] } - }, - "/collections": { - "get": { - "tags": [ - "Collections" - ], - "summary": "Returns all collections that the user has access to", - "description": "Get a list of Collections.", - "operationId": "getCollections", - "parameters": [ - { - "$ref": "#/components/parameters/filter" - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/per_page" - }, - { - "$ref": "#/components/parameters/include" - } - ], - "responses": { - "200": { - "description": "list of collections", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/collections" - } - }, - "meta": { - "$ref": "#/components/schemas/metadata" - } - }, - "type": "object" - } - } - } + } + }, + "components": { + "schemas": { + "DateTime": { + "properties": { + "date": { + "type": "string" } - } + }, + "type": "object" }, - "post": { - "tags": [ - "Collections" - ], - "summary": "Save a new collections", - "description": "Create a new Collection.", - "operationId": "createCollection", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/collectionsEditable" - } + "updateUserGroups": { + "properties": { + "groups": { + "type": "array", + "items": { + "type": "integer", + "example": 1 } } }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/collections" - } - } - } - } - } - } - }, - "/collections/{collection_id}": { - "get": { - "tags": [ - "Collections" - ], - "summary": "Get single collections by ID", - "description": "Get a single Collection.", - "operationId": "getCollectionById", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of collection to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully found the collections", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/collections" - } - } - } - } - } + "type": "object" }, - "put": { - "tags": [ - "Collections" - ], - "summary": "Update a collection", - "description": "Update a Collection.", - "operationId": "updateCollection", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of collection to update", - "required": true, - "schema": { - "type": "string" - } + "restoreUser": { + "properties": { + "username": { + "description": "Username to restore", + "type": "string" } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/collectionsEditable" + }, + "type": "object" + }, + "Variable": { + "properties": { + "id": { + "type": "integer", + "example": 1 + }, + "process_id": { + "type": "integer", + "example": 1 + }, + "uuid": { + "type": "string", + "format": "uuid", + "example": "550e8400-e29b-41d4-a716-446655440000" + }, + "field": { + "type": "string", + "example": "string", + "enum": [ + "string", + "number", + "boolean", + "array" + ] + }, + "label": { + "type": "string", + "example": "Variable 1 for Process 1" + }, + "name": { + "type": "string", + "example": "var_1_1" + }, + "asset": { + "properties": { + "id": { + "type": "string", + "example": "asset_1_1" + }, + "type": { + "type": "string", + "example": "sensor", + "enum": [ + "sensor", + "actuator", + "controller", + "device" + ] + }, + "name": { + "type": "string", + "example": "Asset 1 for Process 1" + }, + "uuid": { + "type": "string", + "format": "uuid", + "example": "550e8400-e29b-41d4-a716-446655440000" } - } + }, + "type": "object" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" } }, - "responses": { - "204": { - "description": "success" - } - } + "type": "object" }, - "delete": { - "tags": [ - "Collections" - ], - "summary": "Delete a collection", - "description": "Delete a Collection.", - "operationId": "deleteCollection", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of collection to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "success" - } - } - } - }, - "/collections/{collection_id}/export": { - "post": { - "tags": [ - "Screens" - ], - "summary": "Trigger export collections job", - "description": "Export the specified collection.", - "operationId": "exportCollection", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of the collection to export", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "202": { - "description": "success" - } - } - } - }, - "/collections/import": { - "post": { - "tags": [ - "Collections" - ], - "summary": "Import a new collection", - "description": "Import the specified collection.", - "operationId": "importCollection", - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "required": [ - "file" - ], - "properties": { - "file": { - "description": "file to upload", - "type": "file", - "format": "file" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/collections" - } - } - } - }, - "200": { - "description": "success" - } - } - } - }, - "/collections/{collection_id}/truncate": { - "delete": { - "tags": [ - "Collections" - ], - "summary": "Deletes all records in a collection", - "description": "Truncate a Collection.", - "operationId": "truncateCollection", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of collection to truncate", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "success" - } - } - } - }, - "/collections/{collection_id}/records": { - "get": { - "tags": [ - "Collections" - ], - "summary": "Returns paginated collection records", - "description": "Get the list of records of a collection.", - "operationId": "getRecords", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of collection to get records for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "pmql", - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "per_page", - "in": "query", - "description": "Number of records to return per page. Defaults to 10,000 when omitted, invalid, or non-positive.", - "schema": { - "type": "integer", - "default": 10000 - } - }, - { - "$ref": "#/components/parameters/filter" - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/include" - } - ], - "responses": { - "200": { - "description": "list of records of a collection", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/records" - } - }, - "meta": { - "$ref": "#/components/schemas/metadata" - } - }, - "type": "object" - } - } - } - } - } - }, - "post": { - "tags": [ - "Collections" - ], - "summary": "Save a new record in a collection", - "description": "Create a new record in a Collection.", - "operationId": "createRecord", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of the collection", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/recordsEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/records" - } - } - } - } - } - } - }, - "/collections/{collection_id}/records/{record_id}": { - "get": { - "tags": [ - "Collections" - ], - "summary": "Get single record of a collection", - "description": "Get a single record of a Collection.", - "operationId": "getRecordById", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of the collection", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "record_id", - "in": "path", - "description": "ID of the record to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully found the record", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/records" - } - } - } - } - } - }, - "put": { - "tags": [ - "Collections" - ], - "summary": "Update a record", - "description": "Update a record in a Collection.", - "operationId": "updateRecord", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of collection", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "record_id", - "in": "path", - "description": "ID of the record ", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/recordsEditable" - } - } - } - }, - "responses": { - "204": { - "description": "success" - } - } - }, - "delete": { - "tags": [ - "Collections" - ], - "summary": "Delete a collection record", - "description": "Delete a record of a Collection.", - "operationId": "deleteRecord", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of collection", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "record_id", - "in": "path", - "description": "ID of record in collection", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "success" - } - } - }, - "patch": { - "tags": [ - "Collections" - ], - "summary": "Partial update of a record", - "description": "Implements a partial update of a record in a Collection.", - "operationId": "patchRecord", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "ID of collection ", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "record_id", - "in": "path", - "description": "ID of the record ", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/collectionsEditable" - } - } - } - }, - "responses": { - "200": { - "description": "success" - } - } - } - }, - "/comments/tasks": { - "get": { - "tags": [ - "Comments" - ], - "summary": "Returns all the tasks that are active.", - "description": "Display a listing of the resource.", - "operationId": "getCommentTasks", - "parameters": [ - { - "name": "process_request_id", - "in": "query", - "description": "Process request id", - "required": false, - "schema": { - "type": "integer" - } - }, - { - "$ref": "#/components/parameters/filter" - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - } - ], - "responses": { - "200": { - "description": "list all tasks taht are active", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/processRequestToken" - } - }, - "meta": { - "$ref": "#/components/schemas/metadata" - } - }, - "type": "object" - } - } - } - } - } - } - }, - "/data_source_categories": { - "get": { - "tags": [ - "DataSourcesCategories" - ], - "summary": "Returns all Data Connectors categories that the user has access to", - "description": "Display a listing of the Data Connector Categories.", - "operationId": "getDataSourceCategories", - "parameters": [ - { - "$ref": "#/components/parameters/filter" - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/per_page" - } - ], - "responses": { - "200": { - "description": "list of Data Connectors categories", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DataSourceCategory" - } - }, - "meta": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/metadata" - } - ] - } - }, - "type": "object" - } - } - } - } - } - }, - "post": { - "tags": [ - "DataSourcesCategories" - ], - "summary": "Save a new Data Connector Category", - "description": "Store a newly created Data Connector Category in storage", - "operationId": "createDataSourceCategory", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/dataSourceCategoryEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DataSourceCategory" - } - } - } - } - } - } - }, - "/data_source_categories/{data_source_category_id}": { - "get": { - "tags": [ - "DataSourcesCategories" - ], - "summary": "Get single Data Connector category by ID", - "description": "Display the specified data Source category.", - "operationId": "getDatasourceCategoryById", - "parameters": [ - { - "name": "data_source_category_id", - "in": "path", - "description": "ID of Data Connector category to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully found the Data Connector", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DataSourceCategory" - } - } - } - } - } - }, - "put": { - "tags": [ - "DataSourcesCategories" - ], - "summary": "Update a Data Connector Category", - "description": "Updates the current element", - "operationId": "updateDatasourceCategory", - "parameters": [ - { - "name": "data_source_category_id", - "in": "path", - "description": "ID of Data Connector category to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/dataSourceCategoryEditable" - } - } - } - }, - "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DataSourceCategory" - } - } - } - } - } - }, - "delete": { - "tags": [ - "DataSourcesCategories" - ], - "summary": "Delete a Data Connector category", - "description": "Remove the specified resource from storage.", - "operationId": "deleteDataSourceCategory", - "parameters": [ - { - "name": "data_source_category_id", - "in": "path", - "description": "ID of Data Connector category to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "success" - } - } - } - }, - "/data_sources": { - "get": { - "tags": [ - "DataSources" - ], - "summary": "Returns all Data Connectors that the user has access to", - "description": "Get the list of records of a Data Connector", - "operationId": "getDataSources", - "parameters": [ - { - "$ref": "#/components/parameters/filter" - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/per_page" - }, - { - "$ref": "#/components/parameters/include" - } - ], - "responses": { - "200": { - "description": "list of Data Connectors", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/dataSource" - } - }, - "meta": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/metadata" - } - ] - } - }, - "type": "object" - } - } - } - } - } - }, - "post": { - "tags": [ - "DataSources" - ], - "summary": "Save a new Data Connector", - "description": "Create a new Data Connector.", - "operationId": "createDataSource", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/dataSourceEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/dataSource" - } - } - } - } - } - } - }, - "/data_sources/{data_source_id}": { - "get": { - "tags": [ - "DataSources" - ], - "summary": "Get single Data Connector by ID", - "description": "Get a single Data Connector.", - "operationId": "getDataSourceById", - "parameters": [ - { - "name": "data_source_id", - "in": "path", - "description": "ID of Data Connector to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully found the Data Connector", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/dataSource" - } - } - } - } - } - }, - "put": { - "tags": [ - "DataSources" - ], - "summary": "Update a Data Connector", - "description": "Update a Data Connector.", - "operationId": "updateDataSource", - "parameters": [ - { - "name": "data_source_id", - "in": "path", - "description": "ID of Data Connector to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/dataSourceEditable" - } - } - } - }, - "responses": { - "204": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/dataSource" - } - } - } - } - } - }, - "delete": { - "tags": [ - "DataSources" - ], - "summary": "Delete a Data Connector", - "description": "Delete a Data Connector.", - "operationId": "deleteDataSource", - "parameters": [ - { - "name": "data_source_id", - "in": "path", - "description": "ID of Data Connector to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/dataSource" - } - } - } - } - } - } - }, - "/data_sources/{data_source_id}/test": { - "post": { - "tags": [ - "DataSources" - ], - "summary": "Send a Data Connector request", - "description": "Send a Data Connector request.", - "operationId": "sendDataSource", - "parameters": [ - { - "name": "data_source_id", - "in": "path", - "description": "ID of Data Connector to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/dataSourceEditable" - } - } - } - }, - "responses": { - "204": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/dataSource" - } - } - } - } - } - } - }, - "/requests/{request_id}/data_sources/{data_source_id}": { - "post": { - "tags": [ - "DataSources" - ], - "summary": "execute Data Source", - "description": "Execute a data Source endpoint", - "operationId": "executeDataSourceForRequest", - "parameters": [ - { - "name": "request_id", - "in": "path", - "description": "ID of the request in whose context the datasource will be executed", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "data_source_id", - "in": "path", - "description": "ID of DataSource to be run", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "config": { - "$ref": "#/components/schemas/DataSourceCallParameters" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DataSourceResponse" - } - } - } - } - } - } - }, - "/requests/data_sources/{data_source_id}": { - "post": { - "tags": [ - "DataSources" - ], - "summary": "execute Data Source", - "operationId": "executeDataSource", - "parameters": [ - { - "name": "data_source_id", - "in": "path", - "description": "ID of DataSource to be run", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "config": { - "$ref": "#/components/schemas/DataSourceCallParameters" - }, - "data": { - "type": "object" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DataSourceResponse" - } - } - } - } - } - } - }, - "/requests/data_sources/{data_source_id}/resources/{endpoint}/data": { - "post": { - "tags": [ - "DataSources" - ], - "summary": "Get Data from Data Source", - "operationId": "getDataFromDataSource", - "parameters": [ - { - "name": "data_source_id", - "in": "path", - "description": "ID of DataSource to be run", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "endpoint", - "in": "path", - "description": "Endpoint of the data source", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DataSourceResponse" - } - } - } - } - } - } - }, - "/decision_table_categories": { - "get": { - "tags": [ - "DecisionTableCategories" - ], - "summary": "Returns all Decision Tables categories that the user has access to", - "description": "Display a listing of the Decision Tables Categories.", - "operationId": "getDecisionTableCategories", - "parameters": [ - { - "$ref": "#/components/parameters/filter" - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/per_page" - } - ], - "responses": { - "200": { - "description": "list of Decision Tables categories", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DecisionTableCategory" - } - }, - "meta": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/metadata" - } - ] - } - }, - "type": "object" - } - } - } - } - } - }, - "post": { - "tags": [ - "DecisionTableCategories" - ], - "summary": "Save a new Decision Table Category", - "description": "Store a newly created Decision Tables Category in storage", - "operationId": "createDecisionTableCategory", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/decisionTableCategoryEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DecisionTableCategory" - } - } - } - } - } - } - }, - "/decision_table_categories/{decision_table_categories_id}": { - "get": { - "tags": [ - "DecisionTableCategories" - ], - "summary": "Get single Decision Table category by ID", - "description": "Display the specified decision Tables category.", - "operationId": "getDecisionTableCategoryById", - "parameters": [ - { - "name": "decision_table_categories_id", - "in": "path", - "description": "ID of Decision Table category to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully found the Decision Table", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DecisionTableCategory" - } - } - } - } - } - }, - "put": { - "tags": [ - "DecisionTableCategories" - ], - "summary": "Update a Decision Table Category", - "description": "Updates the current element", - "operationId": "updateDecisionTableCategory", - "parameters": [ - { - "name": "decision_table_categories_id", - "in": "path", - "description": "ID of Decision Table category to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/decisionTableCategoryEditable" - } - } - } - }, - "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DecisionTableCategory" - } - } - } - } - } - }, - "delete": { - "tags": [ - "DecisionTableCategories" - ], - "summary": "Delete a Decision Table category", - "description": "Remove the specified resource from storage.", - "operationId": "deleteDecisionTableCategory", - "parameters": [ - { - "name": "decision_table_categories_id", - "in": "path", - "description": "ID of Decision Table category to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "success" - } - } - } - }, - "/decision_tables": { - "get": { - "tags": [ - "DecisionTables" - ], - "summary": "Returns all Decision tables that the user has access to", - "description": "Display a listing of the resource.", - "operationId": "getDecisionTables", - "parameters": [ - { - "$ref": "#/components/parameters/filter" - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/per_page" - }, - { - "$ref": "#/components/parameters/include" - } - ], - "responses": { - "200": { - "description": "list of Decision Tables", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/decisionTable" - } - }, - "meta": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/metadata" - } - ] - } - }, - "type": "object" - } - } - } - } - } - }, - "post": { - "tags": [ - "DecisionTables" - ], - "summary": "Save a new Decision Table", - "description": "Store a newly created resource in storage.", - "operationId": "createDecisionTable", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/decisionTableEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/decisionTable" - } - } - } - } - } - } - }, - "/decision_tables/{decision_table_id}": { - "get": { - "tags": [ - "DecisionTables" - ], - "summary": "Get single Decision Table by ID", - "description": "Display the specified resource.", - "operationId": "getDecisionTableById", - "parameters": [ - { - "name": "decision_table_id", - "in": "path", - "description": "ID of Decision Table to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully found the Decision Table", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/decisionTable" - } - } - } - } - } - }, - "put": { - "tags": [ - "DecisionTables" - ], - "summary": "Update a Decision Table", - "description": "Update a Decision table", - "operationId": "updateDecisionTable", - "parameters": [ - { - "name": "decision_table_id", - "in": "path", - "description": "ID of Decision Table to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/decisionTableEditable" - } - } - } - }, - "responses": { - "204": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/decisionTable" - } - } - } - } - } - }, - "delete": { - "tags": [ - "DecisionTables" - ], - "summary": "Delete a Decision Table", - "description": "Delete a Decision tables", - "operationId": "deleteDecisionTable", - "parameters": [ - { - "name": "decision_table_id", - "in": "path", - "description": "ID of Decision Table to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/decisionTable" - } - } - } - } - } - } - }, - "/decision_tables/{decision_table_id}/duplicate": { - "put": { - "tags": [ - "DecisionTables" - ], - "summary": "duplicate a Decision Table", - "description": "duplicate a Decision table.", - "operationId": "duplicateDecisionTable", - "parameters": [ - { - "name": "decision_table_id", - "in": "path", - "description": "ID of Decision Table to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/decisionTableEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/decisionTable" - } - } - } - } - } - } - }, - "/decision_tables/{decision_table_id}/excel-import": { - "post": { - "tags": [ - "DecisionTables" - ], - "summary": "Import a new decision table", - "description": "Import a Decision table from excel", - "operationId": "importExcel", - "parameters": [ - { - "name": "decision_table_id", - "in": "path", - "description": "ID of Decision Table to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "properties": { - "file": { - "description": "file to import", - "type": "string", - "format": "binary" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "type": "object" - } - }, - "type": "object" - } - } - } - } - } - } - }, - "/decision_tables/{decision_table_id}/export": { - "post": { - "tags": [ - "DecisionTables" - ], - "summary": "Export a single Decision Table by ID", - "description": "Export the specified screen.", - "operationId": "exportDecisionTable", - "parameters": [ - { - "name": "decision_table_id", - "in": "path", - "description": "ID of Decision Table to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully exported the decision table", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DecisionTableExported" - } - } - } - } - } - } - }, - "/decision_tables/import": { - "post": { - "tags": [ - "DecisionTables" - ], - "summary": "Import a new Decision Table", - "description": "Import the specified Decision Table.", - "operationId": "importDecisionTable", - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "properties": { - "file": { - "description": "file to import", - "type": "string", - "format": "binary" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "type": "object" - } - }, - "type": "object" - } - } - } - } - } - } - }, - "/decision_tables/{decision_table_id}/execute": { - "post": { - "tags": [ - "DecisionTables" - ], - "summary": "Execute a Decision Table definition", - "description": "Execute a Decision Table definition", - "operationId": "previewDecisionTable", - "parameters": [ - { - "name": "decision_table_id", - "in": "path", - "description": "Decision Table unique Identifier", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully executed", - "content": { - "application/json": { - "schema": {} - } - } - } - } - } - }, - "/saved-searches/{saved_search_id}/charts": { - "get": { - "tags": [ - "SavedSearchCharts" - ], - "summary": "Returns all saved search charts that the user has access to", - "description": "Get a list of SavedSearchCharts.", - "operationId": "getSavedSearchCharts", - "parameters": [ - { - "$ref": "#/components/parameters/filter" - }, - { - "name": "type", - "in": "query", - "description": "Only return saved searches by type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "request", - "task", - "collection" - ] - } - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/per_page" - }, - { - "$ref": "#/components/parameters/include" - } - ], - "responses": { - "200": { - "description": "list of saved search charts", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SavedSearchChart" - } - }, - "meta": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/metadata" - } - ] - } - }, - "type": "object" - } - } - } - } - } - }, - "put": { - "tags": [ - "SavedSearchCharts" - ], - "summary": "Update several saved search charts at once", - "description": "Batch update several SavedSearchCharts.", - "operationId": "batchUpdateSavedSearchCharts", - "parameters": [ - { - "name": "saved_search_id", - "in": "path", - "description": "ID of saved search to which these charts will be saved", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SavedSearchChart" - } - } - } - } - }, - "responses": { - "204": { - "description": "success" - } - } - }, - "post": { - "tags": [ - "SavedSearchCharts" - ], - "summary": "Save a new saved search chart", - "description": "Create a new SavedSearchChart.", - "operationId": "createSavedSearchChart", - "parameters": [ - { - "name": "saved_search_id", - "in": "path", - "description": "ID of saved search to which this chart will be saved", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearchChartEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearchChart" - } - } - } - } - } - } - }, - "/saved-searches/charts/{chart_id}": { - "get": { - "tags": [ - "SavedSearchCharts" - ], - "summary": "Get single saved search chart by ID", - "description": "Get a single SavedSearchChart.", - "operationId": "getSavedSearchChartById", - "parameters": [ - { - "name": "chart_id", - "in": "path", - "description": "ID of chart to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully found the saved search chart", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearchChart" - } - } - } - } - } - }, - "put": { - "tags": [ - "SavedSearchCharts" - ], - "summary": "Update a saved search chart", - "description": "Update a SavedSearchChart.", - "operationId": "updateSavedSearchChart", - "parameters": [ - { - "name": "chart_id", - "in": "path", - "description": "ID of chart to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearchChartEditable" - } - } - } - }, - "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearchChart" - } - } - } - } - } - }, - "delete": { - "tags": [ - "SavedSearchCharts" - ], - "summary": "Delete a saved search chart", - "description": "Delete a SavedSearchChart.", - "operationId": "deleteSavedSearchChart", - "parameters": [ - { - "name": "chart_id", - "in": "path", - "description": "ID of chart to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "success" - } - } - } - }, - "/saved-searches/charts/{chart_id}/fields": { - "get": { - "tags": [ - "SavedSearchCharts" - ], - "summary": "Get available chart fields for a Saved Search by ID", - "description": "Get available chart fields for a Saved Search.", - "operationId": "getSavedSearchFieldsById", - "parameters": [ - { - "name": "chart_id", - "in": "path", - "description": "ID of Saved Search to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully found the saved search", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearch" - } - } - } - } - } - } - }, - "/saved-searches/qa/batch-create-requests": { - "post": { - "tags": [ - "SavedSearches" - ], - "summary": "Batch-create test process requests for saved search testing (QA only)", - "description": "Batch-create process requests via the seed-performance Artisan command.", - "operationId": "batchCreateRequests", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "required": [ - "cases" - ], - "properties": { - "cases": { - "description": "Number of cases to create", - "type": "integer", - "example": 1000 - }, - "process_id": { - "description": "Reuse an existing process ID", - "type": "integer", - "nullable": true - }, - "data_size": { - "description": "Target payload size in bytes (default 262144 = 256KB)", - "type": "integer", - "nullable": true - }, - "status": { - "type": "string", - "default": "ACTIVE", - "enum": [ - "ACTIVE", - "COMPLETED", - "ERROR", - "CANCELED" - ] - } - }, - "type": "object" - } - } - } - }, - "responses": { - "201": { - "description": "Requests created successfully", - "content": { - "application/json": { - "schema": { - "properties": { - "cases": { - "type": "integer" - }, - "exit_code": { - "type": "integer" - }, - "output": { - "type": "string" - } - }, - "type": "object" - } - } - } - }, - "403": { - "description": "QA endpoint is disabled" - }, - "422": { - "description": "Command failed" - } - } - } - }, - "/saved-searches/reports": { - "post": { - "tags": [ - "Reports" - ], - "summary": "Save a new report", - "operationId": "createReport", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReportEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Report" - } - } - } - } - } - } - }, - "/saved-searches/reports/{reportId}": { - "put": { - "tags": [ - "SavedSearches" - ], - "summary": "Update a saved search", - "description": "Update a Report", - "operationId": "updateReport", - "parameters": [ - { - "name": "reportId", - "in": "path", - "description": "ID of report", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearchEditable" - } - } - } - }, - "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearch" - } - } - } - } - } - } - }, - "/saved-searches": { - "get": { - "tags": [ - "SavedSearches" - ], - "summary": "Returns all saved searches that the user has access to", - "description": "Get a list of SavedSearches.", - "operationId": "getSavedSearches", - "parameters": [ - { - "$ref": "#/components/parameters/filter" - }, - { - "name": "type", - "in": "query", - "description": "Only return saved searches by type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "request", - "task", - "collection" - ] - } - }, - { - "name": "subset", - "in": "query", - "description": "Only return saved searches that are yours or those that have been shared with you", - "required": false, - "schema": { - "type": "string", - "enum": [ - "mine", - "shared" - ] - } - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/per_page" - }, - { - "$ref": "#/components/parameters/include" - } - ], - "responses": { - "200": { - "description": "list of saved searches", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SavedSearch" - } - }, - "meta": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/metadata" - } - ] - } - }, - "type": "object" - } - } - } - } - } - }, - "post": { - "tags": [ - "SavedSearches" - ], - "summary": "Save a new saved search", - "description": "Create a new SavedSearch.", - "operationId": "createSavedSearch", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearchEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearch" - } - } - } - } - } - } - }, - "/saved-searches/{savedSearchId}": { - "get": { - "tags": [ - "SavedSearches" - ], - "summary": "Get single saved searches by ID", - "description": "Get a single SavedSearch.", - "operationId": "getSavedSearchById", - "parameters": [ - { - "name": "savedSearchId", - "in": "path", - "description": "ID of saved search to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully found the saved search", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearch" - } - } - } - } - } - }, - "put": { - "tags": [ - "SavedSearches" - ], - "summary": "Update a saved search", - "description": "Update a SavedSearch.", - "operationId": "updateSavedSearch", - "parameters": [ - { - "name": "savedSearchId", - "in": "path", - "description": "ID of saved search to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearchEditable" - } - } - } - }, - "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedSearch" - } - } - } - } - } - } - }, - "/saved-searches/{savedSearchId}/columns": { - "get": { - "tags": [ - "SavedSearches" - ], - "summary": "Returns all columns associated with a Saved Search", - "description": "Display a listing of columns.", - "operationId": "getSavedSearchColumns", - "parameters": [ - { - "name": "savedSearchId", - "in": "path", - "description": "ID of saved search to return", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "include", - "in": "query", - "description": "Include specific categories. Comma separated list.", - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "current", - "default", - "available", - "data" - ] - }, - "uniqueItems": false - } - } - ], - "responses": { - "200": { - "description": "Categorized list of columns", - "content": { - "application/json": { - "schema": { - "properties": { - "current": { - "type": "array", - "items": { - "$ref": "#/components/schemas/columns" - } - }, - "default": { - "type": "array", - "items": { - "$ref": "#/components/schemas/columns" - } - }, - "available": { - "type": "array", - "items": { - "$ref": "#/components/schemas/columns" - } - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/columns" - } - } - }, - "type": "object" - } - } - } - } - } - } - }, - "/saved-searches/{savedSearchId}/users": { - "get": { - "tags": [ - "Users" - ], - "summary": "Returns all users", - "description": "Display a listing of the resource.", - "operationId": "getSavedSearchUsers", - "parameters": [ - { - "name": "savedSearchId", - "in": "path", - "description": "ID of saved search to return", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "filter", - "in": "query", - "description": "Filter results by string. Searches First Name, Last Name, Email and Username.", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/per_page" - }, - { - "$ref": "#/components/parameters/include" - } - ], - "responses": { - "200": { - "description": "list of users", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/users" - } - }, - "meta": { - "$ref": "#/components/schemas/metadata" - } - }, - "type": "object" - } - } - } - } - } - } - }, - "/saved-searches/{savedSearchId}/groups": { - "get": { - "tags": [ - "Groups" - ], - "summary": "Returns all groups that the user has access to", - "description": "Display a listing of the resource.", - "operationId": "getSavedSearchGroups", - "parameters": [ - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/per_page" - }, - { - "$ref": "#/components/parameters/include" - } - ], - "responses": { - "200": { - "description": "list of groups", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/groups" - } - }, - "meta": { - "$ref": "#/components/schemas/metadata" - } - }, - "type": "object" - } - } - } - } - } - } - }, - "/saved-searches/{saved_search_id}": { - "delete": { - "tags": [ - "SavedSearches" - ], - "summary": "Delete a saved search", - "description": "Delete a SavedSearch.", - "operationId": "deleteSavedSearch", - "parameters": [ - { - "name": "saved_search_id", - "in": "path", - "description": "ID of saved search to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "success" - } - } - } - }, - "/saved-searches/icons": { - "get": { - "tags": [ - "SavedSearches" - ], - "summary": "Returns all icons for saved searches", - "description": "Get a list of icons available for SavedSearches.", - "operationId": "getSavedSearchesIcons", - "parameters": [ - { - "$ref": "#/components/parameters/per_page" - } - ], - "responses": { - "200": { - "description": "list of icons for saved searches", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SavedSearchIcon" - } - }, - "meta": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/metadata" - } - ] - } - }, - "type": "object" - } - } - } - } - } - } - }, - "/version_histories": { - "get": { - "tags": [ - "Version History" - ], - "summary": "Return all version History according to the model", - "description": "Get the list of records of Version History", - "operationId": "getVersionHistories", - "parameters": [ - { - "$ref": "#/components/parameters/filter" - }, - { - "$ref": "#/components/parameters/order_by" - }, - { - "$ref": "#/components/parameters/order_direction" - }, - { - "$ref": "#/components/parameters/per_page" - }, - { - "$ref": "#/components/parameters/include" - } - ], - "responses": { - "200": { - "description": "list of Version History", - "content": { - "application/json": { - "schema": { - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/versionHistory" - } - }, - "meta": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/metadata" - } - ] - } - }, - "type": "object" - } - } - } - } - } - }, - "post": { - "tags": [ - "Version History" - ], - "summary": "Save a new Version History", - "description": "Create a new Version History.", - "operationId": "createVersion", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/versionHistoryEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/versionHistory" - } - } - } - } - } - } - }, - "/version_histories/{version_history_id}": { - "get": { - "tags": [ - "Version History" - ], - "summary": "Get single Version History by ID", - "description": "Get a single Version History.", - "operationId": "getVersionHistoryById", - "parameters": [ - { - "name": "version_history_id", - "in": "path", - "description": "ID of Version History to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully found the Version History", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/versionHistory" - } - } - } - } - } - }, - "put": { - "tags": [ - "Version History" - ], - "summary": "Update a Version History", - "description": "Update a Version History.", - "operationId": "updateVersion", - "parameters": [ - { - "name": "version_history_id", - "in": "path", - "description": "ID of Version History to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/versionHistoryEditable" - } - } - } - }, - "responses": { - "204": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/versionHistory" - } - } - } - } - } - }, - "delete": { - "tags": [ - "Version History" - ], - "summary": "Delete a Version History", - "description": "Delete a Version History.", - "operationId": "deleteVersion", - "parameters": [ - { - "name": "version_history_id", - "in": "path", - "description": "ID of Version History to return", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/versionHistory" - } - } - } - } - } - } - }, - "/version_histories/clone": { - "post": { - "tags": [ - "Version History" - ], - "summary": "Clone a new Version History", - "description": "Clone a new Version History.", - "operationId": "cloneVersion", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/versionHistoryEditable" - } - } - } - }, - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/versionHistory" - } - } - } - } - } - } - } - }, - "components": { - "schemas": { - "DateTime": { - "properties": { - "date": { - "type": "string" - } - }, - "type": "object" - }, - "updateUserGroups": { - "properties": { - "groups": { - "type": "array", - "items": { - "type": "integer", - "example": 1 - } - } - }, - "type": "object" - }, - "restoreUser": { - "properties": { - "username": { - "description": "Username to restore", - "type": "string" - } - }, - "type": "object" - }, - "Variable": { - "properties": { - "id": { - "type": "integer", - "example": 1 - }, - "process_id": { - "type": "integer", - "example": 1 - }, - "uuid": { - "type": "string", - "format": "uuid", - "example": "550e8400-e29b-41d4-a716-446655440000" - }, - "field": { - "type": "string", - "example": "string", - "enum": [ - "string", - "number", - "boolean", - "array" - ] - }, - "label": { - "type": "string", - "example": "Variable 1 for Process 1" - }, - "name": { - "type": "string", - "example": "var_1_1" - }, - "asset": { - "properties": { - "id": { - "type": "string", - "example": "asset_1_1" - }, - "type": { - "type": "string", - "example": "sensor", - "enum": [ - "sensor", - "actuator", - "controller", - "device" - ] - }, - "name": { - "type": "string", - "example": "Asset 1 for Process 1" - }, - "uuid": { - "type": "string", - "format": "uuid", - "example": "550e8400-e29b-41d4-a716-446655440000" - } - }, - "type": "object" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - }, - "PaginationMeta": { - "properties": { - "current_page": { - "type": "integer", - "example": 1 - }, - "from": { - "type": "integer", - "example": 1 - }, - "last_page": { - "type": "integer", - "example": 5 - }, - "path": { - "type": "string", - "example": "http://processmaker.com/processes/variables" - }, - "per_page": { - "type": "integer", - "example": 20 - }, - "to": { - "type": "integer", - "example": 20 - }, - "total": { - "type": "integer", - "example": 100 - }, - "links": { - "properties": { - "first": { - "type": "string", - "example": "http://processmaker.com/processes/variables?page=1" - }, - "last": { - "type": "string", - "example": "http://processmaker.com/processes/variables?page=5" - }, - "prev": { - "type": "string", - "nullable": true - }, - "next": { - "type": "string", - "example": "http://processmaker.com/processes/variables?page=2" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "metadata": { - "properties": { - "filter": { - "type": "string" - }, - "sort_by": { - "type": "string" - }, - "sort_order": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "count": { - "type": "integer" - }, - "total_pages": { - "type": "integer" - }, - "current_page": { - "type": "integer" - }, - "form": { - "type": "integer" - }, - "last_page": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "per_page": { - "type": "integer" - }, - "to": { - "type": "integer" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "taskMetadata": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/metadata" - }, - { - "properties": { - "filter": { - "type": "string" - }, - "sort_by": { - "type": "string" - }, - "sort_order": { - "type": "string", - "enum": [ - "asc", - "desc" - ] - }, - "count": { - "type": "integer" - }, - "total_pages": { - "type": "integer" - }, - "current_page": { - "type": "integer" - }, - "form": { - "type": "integer" - }, - "last_page": { - "type": "integer" - }, - "path": { - "type": "string" - }, - "per_page": { - "type": "integer" - }, - "to": { - "type": "integer" - }, - "total": { - "type": "integer" - }, - "in_overdue": { - "type": "integer" - } - }, - "type": "object" - } - ] - }, - "signalsEditable": { - "properties": { - "id": { - "description": "Represents a business signal definition.", - "type": "string", - "format": "id" - }, - "name": { - "type": "string" - }, - "detail": { - "type": "string" - } - }, - "type": "object" - }, - "signals": { - "allOf": [ - { - "$ref": "#/components/schemas/signalsEditable" - }, - { - "properties": { - "type": { - "type": "string" - }, - "processes": { - "type": "array", - "items": { - "properties": { - "id": { - "type": "integer", - "format": "id" - }, - "is_system": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "catches": { - "type": "array", - "items": { - "properties": { - "id": { - "type": "integer", - "format": "id" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "type": "object" - } - } - }, - "type": "object" - } - } - }, - "type": "object" - } - ] - }, - "columns": { - "properties": { - "label": { - "type": "string" - }, - "field": { - "type": "string" - }, - "sortable": { - "type": "boolean" - }, - "default": { - "type": "boolean" - }, - "format": { - "type": "string" - }, - "mask": { - "type": "string" - } - }, - "type": "object" - }, - "commentsEditable": { - "properties": { - "id": { - "description": "Represents a business process definition.", - "type": "string", - "format": "id" - }, - "user_id": { - "type": "string", - "format": "id" - }, - "commentable_id": { - "type": "string", - "format": "id" - }, - "commentable_type": { - "type": "string" - }, - "up": { - "type": "integer" - }, - "down": { - "type": "integer" - }, - "subject": { - "type": "string" - }, - "body": { - "type": "string" - }, - "hidden": { - "type": "boolean" - }, - "type": { - "type": "string", - "enum": [ - "LOG", - "MESSAGE" - ] - } - }, - "type": "object" - }, - "comments": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/commentsEditable" - }, - { - "properties": { - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "EnvironmentVariableEditable": { - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "value": { - "type": "string" - }, - "asset_type": { - "type": "string", - "nullable": true - }, - "do_not_update": { - "type": "boolean" - } - }, - "type": "object" - }, - "EnvironmentVariable": { - "allOf": [ - { - "$ref": "#/components/schemas/EnvironmentVariableEditable" - }, - { - "properties": { - "id": { - "type": "integer", - "format": "id" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "groupsEditable": { - "properties": { - "name": { - "description": "Represents a group definition.", - "type": "string" - }, - "description": { - "type": "string" - }, - "manager_id": { - "type": "integer", - "format": "id" - }, - "status": { - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ] - } - }, - "type": "object" - }, - "groups": { - "allOf": [ - { - "$ref": "#/components/schemas/groupsEditable" - }, - { - "properties": { - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - }, - "id": { - "type": "string", - "format": "id" - } - }, - "type": "object" - } - ] - }, - "groupMembersEditable": { - "properties": { - "group_id": { - "description": "Represents a group Members definition.", - "type": "string", - "format": "id" - }, - "member_id": { - "type": "string", - "format": "id" - }, - "member_type": { - "type": "string" - }, - "description": { - "type": "string" - } - }, - "type": "object" - }, - "groupMembers": { - "allOf": [ - { - "$ref": "#/components/schemas/groupMembersEditable" - }, - { - "properties": { - "id": { - "type": "string", - "format": "id" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "createGroupMembers": { - "allOf": [ - { - "$ref": "#/components/schemas/groupMembersEditable" - }, - { - "properties": { - "id": { - "type": "string", - "format": "id" - }, - "group": { - "type": "object" - }, - "member": { - "type": "object" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "getGroupMembersById": { - "allOf": [ - { - "properties": { - "group_id": { - "type": "string", - "format": "id" - }, - "member_id": { - "type": "string", - "format": "id" - }, - "member_type": { - "type": "string" - }, - "id": { - "type": "string", - "format": "id" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "availableGroupMembers": { - "allOf": [ - { - "properties": { - "id": { - "type": "string", - "format": "id" - }, - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ] - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "mediaEditable": { - "properties": { - "id": { - "description": "Represents media files stored in the database", - "type": "integer", - "format": "id" - }, - "model_id": { - "type": "integer", - "format": "id" - }, - "model_type": { - "type": "string", - "format": "id" - }, - "collection_name": { - "type": "string" - }, - "name": { - "type": "string" - }, - "file_name": { - "type": "string" - }, - "mime_type": { - "type": "string" - }, - "disk": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "manipulations": { - "type": "object" - }, - "custom_properties": { - "type": "object" - }, - "responsive_images": { - "type": "object" - }, - "order_column": { - "type": "integer" - } - }, - "type": "object" - }, - "media": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/mediaEditable" - }, - { - "properties": { - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "mediaExported": { - "properties": { - "url": { - "type": "string" - } - }, - "type": "object" - }, - "NotificationEditable": { - "properties": { - "type": { - "description": "Represents a notification definition.", - "type": "string" - }, - "notifiable_type": { - "type": "string" - }, - "notifiable_id": { - "type": "integer" - }, - "data": { - "type": "string" - }, - "name": { - "type": "string" - }, - "message": { - "type": "string" - }, - "processName": { - "type": "string" - }, - "userName": { - "type": "string" - }, - "request_id": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "Notification": { - "allOf": [ - { - "$ref": "#/components/schemas/NotificationEditable" - }, - { - "properties": { - "id": { - "type": "string" - }, - "read_at": { - "type": "string", - "format": "date-time" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "ProcessEditable": { + "PaginationMeta": { "properties": { - "process_category_id": { - "description": "Represents a business process definition.", + "current_page": { "type": "integer", - "format": "id" - }, - "name": { - "type": "string" + "example": 1 }, - "case_title": { - "type": "string" + "from": { + "type": "integer", + "example": 1 }, - "description": { - "type": "string" + "last_page": { + "type": "integer", + "example": 5 }, - "status": { + "path": { "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE", - "ARCHIVED" - ] - }, - "pause_timer_start": { - "type": "integer" - }, - "cancel_screen_id": { - "type": "integer" - }, - "has_timer_start_events": { - "type": "boolean" + "example": "http://processmaker.com/processes/variables" }, - "request_detail_screen_id": { + "per_page": { "type": "integer", - "format": "id" - }, - "is_valid": { - "type": "integer" - }, - "package_key": { - "type": "string" - }, - "start_events": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProcessStartEvents" - } - }, - "warnings": { - "type": "string" - }, - "self_service_tasks": { - "type": "object" - }, - "signal_events": { - "type": "array", - "items": { - "type": "object" - } + "example": 20 }, - "category": { - "type": "object" + "to": { + "type": "integer", + "example": 20 }, - "manager_id": { - "type": "array", - "items": { - "type": "integer", - "format": "id" - } - } - }, - "type": "object" - }, - "Process": { - "allOf": [ - { - "$ref": "#/components/schemas/ProcessEditable" + "total": { + "type": "integer", + "example": 100 }, - { + "links": { "properties": { - "user_id": { - "type": "integer", - "format": "id" - }, - "id": { + "first": { "type": "string", - "format": "id" + "example": "http://processmaker.com/processes/variables?page=1" }, - "deleted_at": { + "last": { "type": "string", - "format": "date-time" + "example": "http://processmaker.com/processes/variables?page=5" }, - "created_at": { + "prev": { "type": "string", - "format": "date-time" + "nullable": true }, - "updated_at": { + "next": { "type": "string", - "format": "date-time" - }, - "notifications": { - "type": "object" - }, - "task_notifications": { - "type": "object" - } - }, - "type": "object" - } - ] - }, - "ProcessStartEvents": { - "properties": { - "eventDefinitions": { - "type": "object" - }, - "parallelMultiple": { - "type": "boolean" - }, - "outgoing": { - "type": "object" - }, - "incoming": { - "type": "object" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "ProcessWithStartEvents": { - "allOf": [ - { - "$ref": "#/components/schemas/Process" - }, - { - "properties": { - "events": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProcessStartEvents" - } + "example": "http://processmaker.com/processes/variables?page=2" } }, "type": "object" } - ] - }, - "ProcessImport": { - "allOf": [ - { - "$ref": "#/components/schemas/ProcessEditable" - }, - { - "properties": { - "status": { - "type": "array", - "items": { - "type": "object" - } - }, - "assignable": { - "type": "array", - "items": { - "type": "object" - } - }, - "process": {} - }, - "type": "object" - } - ] - }, - "ProcessAssignments": { - "properties": { - "assignable": { - "type": "array", - "items": { - "type": "object" - } - }, - "cancel_request": { - "type": "object" - }, - "edit_data": { - "type": "object" - } }, "type": "object" }, - "ProcessCategoryEditable": { + "metadata": { "properties": { - "name": { - "description": "Represents a business process category definition.", + "filter": { + "type": "string" + }, + "sort_by": { "type": "string" }, - "status": { + "sort_order": { "type": "string", "enum": [ - "ACTIVE", - "INACTIVE" + "asc", + "desc" ] + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "current_page": { + "type": "integer" + }, + "form": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "path": { + "type": "string" + }, + "per_page": { + "type": "integer" + }, + "to": { + "type": "integer" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "ProcessCategory": { + "taskMetadata": { + "type": "object", "allOf": [ { - "$ref": "#/components/schemas/ProcessCategoryEditable" + "$ref": "#/components/schemas/metadata" }, { "properties": { - "id": { - "type": "string", - "format": "id" + "filter": { + "type": "string" }, - "created_at": { - "type": "string", - "format": "date-time" + "sort_by": { + "type": "string" }, - "updated_at": { + "sort_order": { "type": "string", - "format": "date-time" + "enum": [ + "asc", + "desc" + ] + }, + "count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "current_page": { + "type": "integer" + }, + "form": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "path": { + "type": "string" + }, + "per_page": { + "type": "integer" + }, + "to": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "in_overdue": { + "type": "integer" } }, "type": "object" } ] }, - "processPermissionsEditable": { + "signalsEditable": { "properties": { "id": { - "description": "Represents a Process permission.", - "type": "integer", - "format": "id" - }, - "process_id": { - "type": "integer", - "format": "id" - }, - "permission_id": { - "type": "integer", + "description": "Represents a business signal definition.", + "type": "string", "format": "id" }, - "assignable_id": { - "type": "integer", - "format": "id" + "name": { + "type": "string" }, - "assignable_type": { + "detail": { "type": "string" } }, "type": "object" }, - "processPermissions": { - "type": "object", + "signals": { "allOf": [ { - "$ref": "#/components/schemas/processPermissionsEditable" + "$ref": "#/components/schemas/signalsEditable" }, { "properties": { - "created_at": { - "type": "string", - "format": "date-time" + "type": { + "type": "string" }, - "updated_at": { - "type": "string", - "format": "date-time" + "processes": { + "type": "array", + "items": { + "properties": { + "id": { + "type": "integer", + "format": "id" + }, + "is_system": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "catches": { + "type": "array", + "items": { + "properties": { + "id": { + "type": "integer", + "format": "id" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "type": "object" + } } }, "type": "object" } ] }, - "processRequestEditable": { + "columns": { "properties": { - "user_id": { - "description": "Represents an Eloquent model of a Request which is an instance of a Process.", + "label": { + "type": "string" + }, + "field": { + "type": "string" + }, + "sortable": { + "type": "boolean" + }, + "default": { + "type": "boolean" + }, + "format": { + "type": "string" + }, + "mask": { + "type": "string" + } + }, + "type": "object" + }, + "commentsEditable": { + "properties": { + "id": { + "description": "Represents a business process definition.", "type": "string", "format": "id" }, - "callable_id": { + "user_id": { "type": "string", "format": "id" }, - "data": { - "type": "object" - }, - "status": { + "commentable_id": { "type": "string", - "enum": [ - "ACTIVE", - "COMPLETED", - "ERROR", - "CANCELED" - ] + "format": "id" }, - "name": { + "commentable_type": { "type": "string" }, - "case_title": { - "type": "string" + "up": { + "type": "integer" }, - "case_title_formatted": { - "type": "string" + "down": { + "type": "integer" }, - "user_viewed_at": { + "subject": { "type": "string" }, - "case_number": { - "type": "integer" + "body": { + "type": "string" }, - "process_id": { - "type": "integer" + "hidden": { + "type": "boolean" }, - "process": { - "type": "object" + "type": { + "type": "string", + "enum": [ + "LOG", + "MESSAGE" + ] } }, - "type": "object" - }, - "processRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/processRequestEditable" - }, - { - "properties": { - "id": { - "type": "string", - "format": "id" - }, - "process_id": { - "type": "string", - "format": "id" - }, - "process_collaboration_id": { - "type": "string", - "format": "id" - }, - "participant_id": { - "type": "string", - "format": "id" - }, - "process_category_id": { - "type": "string", - "format": "id" - }, + "type": "object" + }, + "comments": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/commentsEditable" + }, + { + "properties": { "created_at": { "type": "string", "format": "date-time" @@ -10021,83 +6465,37 @@ "updated_at": { "type": "string", "format": "date-time" - }, - "user": {}, - "participants": { - "type": "array", - "items": { - "$ref": "#/components/schemas/users" - } } }, "type": "object" } ] }, - "processRequestTokenEditable": { + "EnvironmentVariableEditable": { "properties": { - "user_id": { - "description": "ProcessRequestToken is used to store the state of a token of the\nNayra engine", - "type": "string", - "format": "id" - }, - "status": { + "name": { "type": "string" }, - "due_at": { - "type": "string", - "format": "date-time" - }, - "initiated_at": { - "type": "string", - "format": "date-time" - }, - "riskchanges_at": { - "type": "string", - "format": "date-time" - }, - "subprocess_start_event_id": { + "description": { "type": "string" }, - "data": { - "type": "object" + "value": { + "type": "string" } }, "type": "object" }, - "processRequestToken": { + "EnvironmentVariable": { "allOf": [ { - "$ref": "#/components/schemas/processRequestTokenEditable" + "$ref": "#/components/schemas/EnvironmentVariableEditable" }, { "properties": { "id": { - "type": "string", - "format": "id" - }, - "process_id": { - "type": "string", - "format": "id" - }, - "process_request_id": { - "type": "string", - "format": "id" - }, - "element_id": { - "type": "string", - "format": "id" - }, - "element_type": { - "type": "string", + "type": "integer", "format": "id" }, - "element_index": { - "type": "string" - }, - "element_name": { - "type": "string" - }, "created_at": { "type": "string", "format": "date-time" @@ -10105,68 +6503,42 @@ "updated_at": { "type": "string", "format": "date-time" - }, - "initiated_at": { - "type": "string", - "format": "date-time" - }, - "advanceStatus": { - "type": "string" - }, - "due_notified": { - "type": "integer" - }, - "user": { - "type": "object" - }, - "process": { - "type": "object" - }, - "process_request": { - "type": "object" } }, "type": "object" } ] }, - "taskAssignmentsEditable": { + "groupsEditable": { "properties": { - "process_id": { - "description": "Represents a business process task assignment definition.", - "type": "integer", - "format": "id" + "name": { + "description": "Represents a group definition.", + "type": "string" }, - "process_task_id": { - "type": "string", - "format": "id" + "description": { + "type": "string" }, - "assignment_id": { + "manager_id": { "type": "integer", "format": "id" }, - "assignment_type": { + "status": { "type": "string", "enum": [ - "ProcessMaker\\Models\\User", - "ProcessMaker\\Models\\Group" + "ACTIVE", + "INACTIVE" ] } }, "type": "object" }, - "taskAssignments": { - "type": "object", + "groups": { "allOf": [ { - "$ref": "#/components/schemas/taskAssignmentsEditable" + "$ref": "#/components/schemas/groupsEditable" }, { "properties": { - "id": { - "type": "integer", - "format": "id" - }, "created_at": { "type": "string", "format": "date-time" @@ -10174,55 +6546,40 @@ "updated_at": { "type": "string", "format": "date-time" + }, + "id": { + "type": "string", + "format": "id" } }, "type": "object" } ] }, - "screensEditable": { + "groupMembersEditable": { "properties": { - "title": { - "description": "Class Screen", - "type": "string" - }, - "type": { - "type": "string" - }, - "description": { - "type": "string" - }, - "config": { - "type": "array", - "items": { - "type": "object" - } - }, - "computed": { - "type": "array", - "items": { - "type": "object" - } + "group_id": { + "description": "Represents a group Members definition.", + "type": "string", + "format": "id" }, - "watchers": { - "type": "array", - "items": { - "type": "object" - } + "member_id": { + "type": "string", + "format": "id" }, - "custom_css": { + "member_type": { "type": "string" }, - "screen_category_id": { + "description": { "type": "string" } }, "type": "object" }, - "screens": { + "groupMembers": { "allOf": [ { - "$ref": "#/components/schemas/screensEditable" + "$ref": "#/components/schemas/groupMembersEditable" }, { "properties": { @@ -10243,34 +6600,10 @@ } ] }, - "screenExported": { - "properties": { - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ScreenCategoryEditable": { - "properties": { - "name": { - "description": "Represents a business screen category definition.", - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ] - } - }, - "type": "object" - }, - "ScreenCategory": { + "createGroupMembers": { "allOf": [ { - "$ref": "#/components/schemas/ScreenCategoryEditable" + "$ref": "#/components/schemas/groupMembersEditable" }, { "properties": { @@ -10278,6 +6611,12 @@ "type": "string", "format": "id" }, + "group": { + "type": "object" + }, + "member": { + "type": "object" + }, "created_at": { "type": "string", "format": "date-time" @@ -10291,72 +6630,128 @@ } ] }, - "ScreenTypeEditable": { - "properties": { - "name": { - "description": "Represents a business screen Type definition.", - "type": "string" + "getGroupMembersById": { + "allOf": [ + { + "properties": { + "group_id": { + "type": "string", + "format": "id" + }, + "member_id": { + "type": "string", + "format": "id" + }, + "member_type": { + "type": "string" + }, + "id": { + "type": "string", + "format": "id" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" } - }, - "type": "object" + ] }, - "ScreenType": { + "availableGroupMembers": { "allOf": [ - { - "$ref": "#/components/schemas/ScreenTypeEditable" - }, { "properties": { "id": { "type": "string", - "format": "id" + "format": "id" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE" + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" } }, "type": "object" } ] }, - "scriptsEditable": { + "mediaEditable": { "properties": { - "title": { - "description": "Represents an Eloquent model of a Script", + "id": { + "description": "Represents media files stored in the database", + "type": "integer", + "format": "id" + }, + "model_id": { + "type": "integer", + "format": "id" + }, + "model_type": { + "type": "string", + "format": "id" + }, + "collection_name": { "type": "string" }, - "description": { + "name": { "type": "string" }, - "language": { + "file_name": { "type": "string" }, - "code": { + "mime_type": { "type": "string" }, - "timeout": { - "type": "integer" + "disk": { + "type": "string" }, - "run_as_user_id": { + "size": { "type": "integer" }, - "key": { - "type": "string" + "manipulations": { + "type": "object" }, - "script_category_id": { + "custom_properties": { + "type": "object" + }, + "responsive_images": { + "type": "object" + }, + "order_column": { "type": "integer" } }, "type": "object" }, - "scripts": { + "media": { + "type": "object", "allOf": [ { - "$ref": "#/components/schemas/scriptsEditable" + "$ref": "#/components/schemas/mediaEditable" }, { "properties": { - "id": { - "type": "integer", - "format": "id" - }, "created_at": { "type": "string", "format": "date-time" @@ -10370,91 +6765,63 @@ } ] }, - "scriptsPreview": { + "mediaExported": { "properties": { - "status": { - "type": "string" - }, - "key": { + "url": { "type": "string" - }, - "output": { - "type": "object" } }, "type": "object" }, - "ScriptCategoryEditable": { + "NotificationEditable": { "properties": { - "name": { - "description": "Represents a business script category definition.", + "type": { + "description": "Represents a notification definition.", "type": "string" }, - "status": { - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ] - } - }, - "type": "object" - }, - "ScriptCategory": { - "allOf": [ - { - "$ref": "#/components/schemas/ScriptCategoryEditable" + "notifiable_type": { + "type": "string" }, - { - "properties": { - "id": { - "type": "string", - "format": "id" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] - }, - "scriptExecutorsEditable": { - "properties": { - "title": { - "description": "Represents an Eloquent model of a Script Executor", + "notifiable_id": { + "type": "integer" + }, + "data": { "type": "string" }, - "description": { + "name": { "type": "string" }, - "language": { + "message": { "type": "string" }, - "config": { + "processName": { "type": "string" }, - "is_system": { - "type": "boolean" + "userName": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "scriptExecutors": { + "Notification": { "allOf": [ { - "$ref": "#/components/schemas/scriptExecutorsEditable" + "$ref": "#/components/schemas/NotificationEditable" }, { "properties": { "id": { - "type": "integer", - "format": "id" + "type": "string" + }, + "read_at": { + "type": "string", + "format": "date-time" }, "created_at": { "type": "string", @@ -10469,130 +6836,99 @@ } ] }, - "availableLanguages": { + "ProcessEditable": { "properties": { - "text": { + "process_category_id": { + "description": "Represents a business process definition.", + "type": "integer", + "format": "id" + }, + "name": { "type": "string" }, - "value": { + "case_title": { "type": "string" }, - "initDockerFile": { + "description": { "type": "string" - } - }, - "type": "object" - }, - "securityLog": { - "properties": { - "id": { - "description": "Class SecurityLog", + }, + "status": { + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE", + "ARCHIVED" + ] + }, + "pause_timer_start": { "type": "integer" }, - "event": { - "type": "string" + "cancel_screen_id": { + "type": "integer" }, - "ip": { - "type": "string" + "has_timer_start_events": { + "type": "boolean" }, - "meta": { - "type": "array", - "items": { - "properties": { - "os": { - "type": "array", - "items": { - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "type": "object" - } - }, - "browser": { - "type": "array", - "items": { - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "type": "object" - } - }, - "user_agent": { - "type": "string" - } - }, - "type": "object" - } + "request_detail_screen_id": { + "type": "integer", + "format": "id" }, - "user_id": { + "is_valid": { "type": "integer" }, - "occured_at": { - "type": "string" - } - }, - "type": "object" - }, - "settingsEditable": { - "properties": { - "key": { - "description": "Class Settings", + "package_key": { "type": "string" }, - "config": { + "start_events": { "type": "array", "items": { - "type": "object" + "$ref": "#/components/schemas/ProcessStartEvents" } }, - "name": { - "type": "string" - }, - "helper": { - "type": "string" - }, - "group": { - "type": "string" - }, - "format": { + "warnings": { "type": "string" }, - "hidden": { - "type": "boolean" + "self_service_tasks": { + "type": "object" }, - "readonly": { - "type": "boolean" + "signal_events": { + "type": "array", + "items": { + "type": "object" + } }, - "variables": { - "type": "string" + "category": { + "type": "object" }, - "sansSerifFont": { - "type": "string" + "manager_id": { + "type": "array", + "items": { + "type": "integer", + "format": "id" + } } }, "type": "object" }, - "settings": { + "Process": { "allOf": [ { - "$ref": "#/components/schemas/settingsEditable" + "$ref": "#/components/schemas/ProcessEditable" }, { "properties": { + "user_id": { + "type": "integer", + "format": "id" + }, "id": { "type": "string", "format": "id" }, + "deleted_at": { + "type": "string", + "format": "date-time" + }, "created_at": { "type": "string", "format": "date-time" @@ -10600,173 +6936,174 @@ "updated_at": { "type": "string", "format": "date-time" + }, + "notifications": { + "type": "object" + }, + "task_notifications": { + "type": "object" } }, "type": "object" } ] }, - "TokenClient": { + "ProcessStartEvents": { "properties": { - "id": { - "type": "integer" + "eventDefinitions": { + "type": "object" }, - "user_id": { - "type": "integer" + "parallelMultiple": { + "type": "boolean" }, - "name": { - "type": "string" + "outgoing": { + "type": "object" }, - "provider": { - "type": "string" + "incoming": { + "type": "object" }, - "redirect": { + "id": { "type": "string" }, - "personal_access_client": { - "type": "boolean" + "name": { + "type": "string" + } + }, + "type": "object" + }, + "ProcessWithStartEvents": { + "allOf": [ + { + "$ref": "#/components/schemas/Process" }, - "password_client": { - "type": "boolean" + { + "properties": { + "events": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProcessStartEvents" + } + } + }, + "type": "object" + } + ] + }, + "ProcessImport": { + "allOf": [ + { + "$ref": "#/components/schemas/ProcessEditable" }, - "revoked": { - "type": "boolean" + { + "properties": { + "status": { + "type": "array", + "items": { + "type": "object" + } + }, + "assignable": { + "type": "array", + "items": { + "type": "object" + } + }, + "process": {} + }, + "type": "object" + } + ] + }, + "ProcessAssignments": { + "properties": { + "assignable": { + "type": "array", + "items": { + "type": "object" + } }, - "created_at": { - "type": "string", - "format": "date-time" + "cancel_request": { + "type": "object" }, - "updated_at": { - "type": "string", - "format": "date-time" + "edit_data": { + "type": "object" } }, "type": "object" }, - "usersEditable": { + "ProcessCategoryEditable": { "properties": { - "email": { - "description": "The attributes that are mass assignable.", - "type": "string", - "format": "email" - }, - "firstname": { - "type": "string" - }, - "lastname": { - "type": "string" - }, - "username": { - "type": "string" - }, - "password": { - "type": "string" - }, - "address": { - "type": "string" - }, - "city": { - "type": "string" - }, - "state": { - "type": "string" - }, - "postal": { - "type": "string" - }, - "country": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "fax": { - "type": "string" - }, - "cell": { - "type": "string" - }, - "title": { - "type": "string" - }, - "timezone": { - "type": "string" - }, - "datetime_format": { - "type": "string" - }, - "language": { - "type": "string" - }, - "is_administrator": { - "type": "boolean" - }, - "expires_at": { - "type": "string" - }, - "loggedin_at": { - "type": "string" - }, - "remember_token": { + "name": { + "description": "Represents a business process category definition.", "type": "string" }, "status": { "type": "string", "enum": [ "ACTIVE", - "INACTIVE", - "SCHEDULED", - "OUT_OF_OFFICE", - "BLOCKED" + "INACTIVE" ] + } + }, + "type": "object" + }, + "ProcessCategory": { + "allOf": [ + { + "$ref": "#/components/schemas/ProcessCategoryEditable" }, - "fullname": { - "type": "string" - }, - "avatar": { - "type": "string" - }, - "media": { - "type": "array", - "items": { - "$ref": "#/components/schemas/media" - } - }, - "birthdate": { - "type": "string", - "format": "date" + { + "properties": { + "id": { + "type": "string", + "format": "id" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" + } + ] + }, + "processPermissionsEditable": { + "properties": { + "id": { + "description": "Represents a Process permission.", + "type": "integer", + "format": "id" }, - "delegation_user_id": { - "type": "string", + "process_id": { + "type": "integer", "format": "id" }, - "manager_id": { - "type": "string", + "permission_id": { + "type": "integer", "format": "id" }, - "meta": { - "type": "object", - "additionalProperties": true - }, - "force_change_password": { - "type": "boolean" + "assignable_id": { + "type": "integer", + "format": "id" }, - "email_task_notification": { - "type": "boolean" + "assignable_type": { + "type": "string" } }, "type": "object" }, - "users": { + "processPermissions": { + "type": "object", "allOf": [ { - "$ref": "#/components/schemas/usersEditable" + "$ref": "#/components/schemas/processPermissionsEditable" }, { "properties": { - "id": { - "type": "integer" - }, "created_at": { "type": "string", "format": "date-time" @@ -10774,119 +7111,99 @@ "updated_at": { "type": "string", "format": "date-time" - }, - "deleted_at": { - "type": "string", - "format": "date-time" } }, "type": "object" } ] }, - "UserToken": { + "processRequestEditable": { "properties": { - "id": { - "type": "string" - }, "user_id": { - "type": "integer" - }, - "client_id": { - "type": "integer" + "description": "Represents an Eloquent model of a Request which is an instance of a Process.", + "type": "string", + "format": "id" }, - "name": { - "type": "string" + "callable_id": { + "type": "string", + "format": "id" }, - "scopes": { + "data": { "type": "object" }, - "revoked": { - "type": "boolean" - }, - "client": { - "$ref": "#/components/schemas/TokenClient" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { + "status": { "type": "string", - "format": "date-time" + "enum": [ + "ACTIVE", + "COMPLETED", + "ERROR", + "CANCELED" + ] }, - "expires_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - }, - "collectionsEditable": { - "properties": { "name": { "type": "string" }, - "description": { + "case_title": { "type": "string" }, - "custom_title": { + "case_title_formatted": { "type": "string" }, - "create_screen_id": { - "type": "string", - "format": "id" - }, - "read_screen_id": { - "type": "string", - "format": "id" - }, - "update_screen_id": { - "type": "string", - "format": "id" + "user_viewed_at": { + "type": "string" }, - "signal_create": { - "type": "boolean" + "case_number": { + "type": "integer" }, - "signal_update": { - "type": "boolean" + "process_id": { + "type": "integer" }, - "signal_delete": { - "type": "boolean" + "process": { + "type": "object" } }, "type": "object" }, - "collections": { + "processRequest": { "allOf": [ { - "$ref": "#/components/schemas/collectionsEditable" + "$ref": "#/components/schemas/processRequestEditable" }, { "properties": { "id": { - "type": "integer" + "type": "string", + "format": "id" }, - "created_at": { + "process_id": { "type": "string", - "format": "date-time" + "format": "id" }, - "updated_at": { + "process_collaboration_id": { "type": "string", - "format": "date-time" + "format": "id" }, - "created_by_id": { + "participant_id": { "type": "string", "format": "id" }, - "updated_by_id": { + "process_category_id": { "type": "string", "format": "id" }, - "columns": { + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "user": {}, + "participants": { "type": "array", "items": { - "type": "object" + "$ref": "#/components/schemas/users" } } }, @@ -10894,122 +7211,202 @@ } ] }, - "recordsEditable": { + "processRequestTokenEditable": { "properties": { + "user_id": { + "description": "ProcessRequestToken is used to store the state of a token of the\nNayra engine", + "type": "string", + "format": "id" + }, + "status": { + "type": "string" + }, + "due_at": { + "type": "string", + "format": "date-time" + }, + "initiated_at": { + "type": "string", + "format": "date-time" + }, + "riskchanges_at": { + "type": "string", + "format": "date-time" + }, + "subprocess_start_event_id": { + "type": "string" + }, "data": { "type": "object" } }, "type": "object" }, - "records": { + "processRequestToken": { "allOf": [ { - "$ref": "#/components/schemas/recordsEditable" + "$ref": "#/components/schemas/processRequestTokenEditable" }, { "properties": { "id": { - "type": "integer" + "type": "string", + "format": "id" + }, + "process_id": { + "type": "string", + "format": "id" + }, + "process_request_id": { + "type": "string", + "format": "id" + }, + "element_id": { + "type": "string", + "format": "id" }, - "collection_id": { + "element_type": { "type": "string", "format": "id" + }, + "element_index": { + "type": "string" + }, + "element_name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "initiated_at": { + "type": "string", + "format": "date-time" + }, + "advanceStatus": { + "type": "string" + }, + "due_notified": { + "type": "integer" + }, + "user": { + "type": "object" + }, + "process": { + "type": "object" + }, + "process_request": { + "type": "object" } }, "type": "object" } ] }, - "DataSourceCallParameters": { + "taskAssignmentsEditable": { "properties": { - "endpoint": { - "type": "string" + "process_id": { + "description": "Represents a business process task assignment definition.", + "type": "integer", + "format": "id" }, - "dataMapping": { - "type": "array", - "items": { - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "type": "object" - } + "process_task_id": { + "type": "string", + "format": "id" }, - "outboundConfig": { - "type": "array", - "items": { - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "type": "object" - } + "assignment_id": { + "type": "integer", + "format": "id" + }, + "assignment_type": { + "type": "string", + "enum": [ + "ProcessMaker\\Models\\User", + "ProcessMaker\\Models\\Group" + ] } }, "type": "object" }, - "DataSourceResponse": { - "properties": { - "status": { - "type": "integer" + "taskAssignments": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/taskAssignmentsEditable" }, - "response": { + { + "properties": { + "id": { + "type": "integer", + "format": "id" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, "type": "object" } - }, - "type": "object" + ] }, - "dataSourceEditable": { + "screensEditable": { "properties": { - "id": { - "description": "Class DataSource", - "type": "string", - "format": "id" - }, - "name": { + "title": { + "description": "Class Screen", "type": "string" }, - "description": { + "type": { "type": "string" }, - "endpoints": { + "description": { "type": "string" }, - "mappings": { - "type": "string" + "config": { + "type": "array", + "items": { + "type": "object" + } }, - "authtype": { - "type": "string" + "computed": { + "type": "array", + "items": { + "type": "object" + } }, - "credentials": { - "type": "string" + "watchers": { + "type": "array", + "items": { + "type": "object" + } }, - "status": { + "custom_css": { "type": "string" }, - "data_source_category_id": { + "screen_category_id": { "type": "string" } }, "type": "object" }, - "dataSource": { - "type": "object", + "screens": { "allOf": [ { - "$ref": "#/components/schemas/dataSourceEditable" + "$ref": "#/components/schemas/screensEditable" }, { "properties": { + "id": { + "type": "string", + "format": "id" + }, "created_at": { "type": "string", "format": "date-time" @@ -11023,10 +7420,18 @@ } ] }, - "dataSourceCategoryEditable": { + "screenExported": { + "properties": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ScreenCategoryEditable": { "properties": { "name": { - "description": "Represents a business data Source category definition.", + "description": "Represents a business screen category definition.", "type": "string" }, "status": { @@ -11039,11 +7444,10 @@ }, "type": "object" }, - "DataSourceCategory": { - "type": "object", + "ScreenCategory": { "allOf": [ { - "$ref": "#/components/schemas/dataSourceCategoryEditable" + "$ref": "#/components/schemas/ScreenCategoryEditable" }, { "properties": { @@ -11064,36 +7468,72 @@ } ] }, - "decisionTableEditable": { + "ScreenTypeEditable": { "properties": { - "id": { - "description": "Class Screen", - "type": "string", - "format": "id" - }, "name": { + "description": "Represents a business screen Type definition.", + "type": "string" + } + }, + "type": "object" + }, + "ScreenType": { + "allOf": [ + { + "$ref": "#/components/schemas/ScreenTypeEditable" + }, + { + "properties": { + "id": { + "type": "string", + "format": "id" + } + }, + "type": "object" + } + ] + }, + "scriptsEditable": { + "properties": { + "title": { + "description": "Represents an Eloquent model of a Script", "type": "string" }, "description": { "type": "string" }, - "definition": { + "language": { + "type": "string" + }, + "code": { "type": "string" }, - "decision_table_categories_id": { + "timeout": { + "type": "integer" + }, + "run_as_user_id": { + "type": "integer" + }, + "key": { "type": "string" + }, + "script_category_id": { + "type": "integer" } }, "type": "object" }, - "decisionTable": { - "type": "object", + "scripts": { "allOf": [ { - "$ref": "#/components/schemas/decisionTableEditable" + "$ref": "#/components/schemas/scriptsEditable" }, { "properties": { + "id": { + "type": "integer", + "format": "id" + }, "created_at": { "type": "string", "format": "date-time" @@ -11107,18 +7547,24 @@ } ] }, - "DecisionTableExported": { + "scriptsPreview": { "properties": { - "url": { + "status": { "type": "string" + }, + "key": { + "type": "string" + }, + "output": { + "type": "object" } }, "type": "object" }, - "decisionTableCategoryEditable": { + "ScriptCategoryEditable": { "properties": { "name": { - "description": "Represents a business decision Table category definition.", + "description": "Represents a business script category definition.", "type": "string" }, "status": { @@ -11131,11 +7577,10 @@ }, "type": "object" }, - "DecisionTableCategory": { - "type": "object", + "ScriptCategory": { "allOf": [ { - "$ref": "#/components/schemas/decisionTableCategoryEditable" + "$ref": "#/components/schemas/ScriptCategoryEditable" }, { "properties": { @@ -11156,43 +7601,36 @@ } ] }, - "SavedSearchEditable": { + "scriptExecutorsEditable": { "properties": { - "meta": { - "description": "Represents an Eloquent model of a Saved Search.", - "type": "object", - "additionalProperties": "true" + "title": { + "description": "Represents an Eloquent model of a Script Executor", + "type": "string" }, - "pmql": { + "description": { "type": "string" }, - "title": { + "language": { "type": "string" }, - "type": { - "type": "string", - "enum": [ - "task", - "request" - ] + "config": { + "type": "string" }, - "advanced_filter": { - "type": "object", - "additionalProperties": "true" + "is_system": { + "type": "boolean" } }, "type": "object" }, - "SavedSearch": { + "scriptExecutors": { "allOf": [ + { + "$ref": "#/components/schemas/scriptExecutorsEditable" + }, { "properties": { "id": { - "type": "string", - "format": "id" - }, - "user_id": { - "type": "string", + "type": "integer", "format": "id" }, "created_at": { @@ -11205,65 +7643,133 @@ } }, "type": "object" - }, - { - "$ref": "#/components/schemas/SavedSearchEditable" } ] }, - "SavedSearchIcon": { + "availableLanguages": { "properties": { - "name": { + "text": { "type": "string" }, "value": { "type": "string" + }, + "initDockerFile": { + "type": "string" } }, "type": "object" }, - "SavedSearchChartEditable": { + "securityLog": { "properties": { - "title": { - "description": "Represents an Eloquent model of a Saved Search Chart.", + "id": { + "description": "Class SecurityLog", + "type": "integer" + }, + "event": { "type": "string" }, - "type": { - "type": "string", - "enum": [ - "bar", - "bar-vertical", - "line", - "pie", - "doughnut" - ] + "ip": { + "type": "string" + }, + "meta": { + "type": "array", + "items": { + "properties": { + "os": { + "type": "array", + "items": { + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + } + }, + "browser": { + "type": "array", + "items": { + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + } + }, + "user_agent": { + "type": "string" + } + }, + "type": "object" + } + }, + "user_id": { + "type": "integer" + }, + "occured_at": { + "type": "string" + } + }, + "type": "object" + }, + "settingsEditable": { + "properties": { + "key": { + "description": "Class Settings", + "type": "string" }, "config": { - "type": "object", - "additionalProperties": "true" + "type": "array", + "items": { + "type": "object" + } + }, + "name": { + "type": "string" + }, + "helper": { + "type": "string" + }, + "group": { + "type": "string" + }, + "format": { + "type": "string" + }, + "hidden": { + "type": "boolean" + }, + "readonly": { + "type": "boolean" + }, + "variables": { + "type": "string" }, - "sort": { - "type": "integer" + "sansSerifFont": { + "type": "string" } }, "type": "object" }, - "SavedSearchChart": { + "settings": { "allOf": [ + { + "$ref": "#/components/schemas/settingsEditable" + }, { "properties": { "id": { "type": "string", "format": "id" }, - "saved_search_id": { - "type": "string", - "format": "id" - }, - "user_id": { - "type": "string", - "format": "id" - }, "created_at": { "type": "string", "format": "date-time" @@ -11271,68 +7777,172 @@ "updated_at": { "type": "string", "format": "date-time" - }, - "deleted_at": { - "type": "string", - "format": "date-time" } }, "type": "object" - }, - { - "$ref": "#/components/schemas/SavedSearchChartEditable" } ] }, - "ReportEditable": { + "TokenClient": { "properties": { - "type": { + "id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "redirect": { + "type": "string" + }, + "personal_access_client": { + "type": "boolean" + }, + "password_client": { + "type": "boolean" + }, + "revoked": { + "type": "boolean" + }, + "created_at": { "type": "string", - "enum": [ - "adhoc", - "scheduled" - ] + "format": "date-time" }, - "format": { + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "type": "object" + }, + "usersEditable": { + "properties": { + "email": { + "description": "The attributes that are mass assignable.", + "type": "string", + "format": "email" + }, + "firstname": { + "type": "string" + }, + "lastname": { + "type": "string" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "postal": { + "type": "string" + }, + "country": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "fax": { + "type": "string" + }, + "cell": { + "type": "string" + }, + "title": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "datetime_format": { + "type": "string" + }, + "language": { + "type": "string" + }, + "is_administrator": { + "type": "boolean" + }, + "expires_at": { + "type": "string" + }, + "loggedin_at": { + "type": "string" + }, + "remember_token": { + "type": "string" + }, + "status": { "type": "string", "enum": [ - "csv", - "xlsx" + "ACTIVE", + "INACTIVE", + "SCHEDULED", + "OUT_OF_OFFICE", + "BLOCKED" ] }, - "saved_search_id": { - "type": "integer" + "fullname": { + "type": "string" }, - "config": { - "type": "object", - "additionalProperties": "true" + "avatar": { + "type": "string" }, - "to": { + "media": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/media" } }, - "subject": { - "type": "string" + "birthdate": { + "type": "string", + "format": "date" }, - "body": { - "type": "string" + "delegation_user_id": { + "type": "string", + "format": "id" + }, + "manager_id": { + "type": "string", + "format": "id" + }, + "meta": { + "type": "object", + "additionalProperties": true + }, + "force_change_password": { + "type": "boolean" + }, + "email_task_notification": { + "type": "boolean" } }, "type": "object" }, - "Report": { + "users": { "allOf": [ + { + "$ref": "#/components/schemas/usersEditable" + }, { "properties": { "id": { - "type": "string", - "format": "id" - }, - "user_id": { - "type": "string", - "format": "id" + "type": "integer" }, "created_at": { "type": "string", @@ -11341,63 +7951,53 @@ "updated_at": { "type": "string", "format": "date-time" + }, + "deleted_at": { + "type": "string", + "format": "date-time" } }, "type": "object" - }, - { - "$ref": "#/components/schemas/SavedSearchEditable" } ] }, - "versionHistoryEditable": { + "UserToken": { "properties": { - "versionable_id": { - "description": "Class VersionHistoryCollection", + "id": { + "type": "string" + }, + "user_id": { "type": "integer" }, - "versionable_type": { - "type": "string" + "client_id": { + "type": "integer" }, "name": { "type": "string" }, - "subject": { - "type": "string" + "scopes": { + "type": "object" }, - "description": { - "type": "string" + "revoked": { + "type": "boolean" }, - "status": { + "client": { + "$ref": "#/components/schemas/TokenClient" + }, + "created_at": { "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ] + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": "string", + "format": "date-time" } }, "type": "object" - }, - "versionHistory": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/versionHistoryEditable" - }, - { - "properties": { - "created_at": { - "type": "string", - "format": "date-time" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - }, - "type": "object" - } - ] } }, "responses": { @@ -11636,46 +8236,6 @@ { "name": "Processes Variables", "description": "Processes Variables" - }, - { - "name": "Collections", - "description": "Collections" - }, - { - "name": "Comments", - "description": "Comments" - }, - { - "name": "DataSourcesCategories", - "description": "DataSourcesCategories" - }, - { - "name": "DataSources", - "description": "DataSources" - }, - { - "name": "DecisionTableCategories", - "description": "DecisionTableCategories" - }, - { - "name": "DecisionTables", - "description": "DecisionTables" - }, - { - "name": "SavedSearchCharts", - "description": "SavedSearchCharts" - }, - { - "name": "SavedSearches", - "description": "SavedSearches" - }, - { - "name": "Reports", - "description": "Reports" - }, - { - "name": "Version History", - "description": "Version History" } ], "security": [ From f43a71ecd45b6d507b8d8dcc76041202723dd921 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Mon, 27 Jul 2026 16:16:57 -0400 Subject: [PATCH 31/52] feat(FOUR-32405): add Database Indexes to Improve Saved Searches Performance --- ..._07_27_000000_add_saved_search_indexes.php | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 database/migrations/2026_07_27_000000_add_saved_search_indexes.php diff --git a/database/migrations/2026_07_27_000000_add_saved_search_indexes.php b/database/migrations/2026_07_27_000000_add_saved_search_indexes.php new file mode 100644 index 0000000000..765c2693a1 --- /dev/null +++ b/database/migrations/2026_07_27_000000_add_saved_search_indexes.php @@ -0,0 +1,101 @@ +addIndex( + 'process_request_tokens', + 'process_request_tokens_prt_task_name_id', + ['element_type', 'element_name', 'process_id', 'user_id', 'process_request_id'] + ); + $this->addIndex( + 'process_request_tokens', + 'process_request_tokens_prt_type_id_proc', + ['element_type', 'process_id', 'user_id', 'process_request_id'] + ); + $this->addIndex( + 'process_request_tokens', + 'process_request_tokens_prt_self_service_status_user', + ['is_self_service', 'status', 'user_id', 'id'] + ); + $this->addIndex( + 'process_request_tokens', + 'process_request_tokens_processid_elem_stat_self_user_elname', + ['process_id', 'element_type', 'status', 'is_self_service', 'user_id', 'element_name'] + ); + + $this->addIndex( + 'category_assignments', + 'category_assignments_assignabletyid_categorytyid', + ['assignable_type', 'assignable_id', 'category_type', 'category_id'] + ); + + $this->addIndex( + 'process_versions', + 'process_versions_processid_draft', + ['process_id', 'draft'] + ); + + // Leading `id` removed from the original proposal because the primary key + // already covers it and InnoDB secondary indexes include it automatically. + $this->addIndex( + 'processes', + 'process_idx_proc_deletedat_categoryid', + ['deleted_at', 'process_category_id'] + ); + + // Tail `id` removed for the same reason. + $this->addIndex( + 'process_categories', + 'process_categories_issystem_id', + ['is_system'] + ); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + $this->dropIndex('process_request_tokens', 'process_request_tokens_prt_task_name_id'); + $this->dropIndex('process_request_tokens', 'process_request_tokens_prt_type_id_proc'); + $this->dropIndex('process_request_tokens', 'process_request_tokens_prt_self_service_status_user'); + $this->dropIndex('process_request_tokens', 'process_request_tokens_processid_elem_stat_self_user_elname'); + $this->dropIndex('category_assignments', 'category_assignments_assignabletyid_categorytyid'); + $this->dropIndex('process_versions', 'process_versions_processid_draft'); + $this->dropIndex('processes', 'process_idx_proc_deletedat_categoryid'); + $this->dropIndex('process_categories', 'process_categories_issystem_id'); + } + + private function addIndex(string $table, string $name, array $columns): void + { + if (Schema::hasIndex($table, $name)) { + return; + } + + Schema::table($table, function (Blueprint $table) use ($name, $columns) { + $table->index($columns, $name); + }); + } + + private function dropIndex(string $table, string $name): void + { + if (!Schema::hasIndex($table, $name)) { + return; + } + + try { + DB::statement("ALTER TABLE `{$table}` DROP INDEX `{$name}`"); + } catch (Exception $e) { + // Ignore so rollback continues (e.g. index required by a foreign key). + } + } +}; From 6714abf2774669063d6aef84a1f12eea392ee8f4 Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Tue, 28 Jul 2026 12:54:09 -0400 Subject: [PATCH 32/52] FOUR-32393 REGRESSION>> The icon main disapperas with selections of the options. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Description: Fix sidebar icon flicker on navigation (FOUR-32393) Apply .logo-closed styles under #sidebar instead of #sidebar .closed so the collapsed icon renders at 40×40 before Vue mounts and adds the closed class. Override [v-cloak] with display: list-item !important so the icon is not hidden until Vue initializes. Optimize processmaker-icon.svg (4.7 KB → 1.5 KB) by simplifying structure and reducing the embedded PNG from 206×206 to 64×64. Related tickets: https://processmaker.atlassian.net/browse/FOUR-32393 --- resources/img/processmaker-icon.svg | 14 +++----------- resources/sass/sidebar/sidebar.scss | 21 +++++++++++---------- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/resources/img/processmaker-icon.svg b/resources/img/processmaker-icon.svg index 944136ba27..50a156dae0 100644 --- a/resources/img/processmaker-icon.svg +++ b/resources/img/processmaker-icon.svg @@ -1,11 +1,3 @@ - - - - - - - - - - - \ No newline at end of file + + + diff --git a/resources/sass/sidebar/sidebar.scss b/resources/sass/sidebar/sidebar.scss index 31d4cfa646..b67b2ad1e5 100644 --- a/resources/sass/sidebar/sidebar.scss +++ b/resources/sass/sidebar/sidebar.scss @@ -72,6 +72,17 @@ width: 150px; } + .logo-closed { + display: list-item !important; + margin: 16px auto 24px auto; + } + + .logo-closed img { + margin: 0px 9px; + height: 40px; + width: 40px; + } + .nav-item:hover { background-color: $hover; } @@ -89,16 +100,6 @@ color: $light; } - .logo-closed { - margin: 16px auto 24px auto; - } - - .logo-closed img { - margin: 0px 9px; - height: 40px; - width: 40px; - } - .nav-item:hover { background-color: $hover; } From 6a0abd2d4a2377e37d7917f1f85723febd46b885 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Wed, 29 Jul 2026 12:56:45 -0400 Subject: [PATCH 33/52] fix: screen were not properly exporting dependant collections and data sources --- ProcessMaker/Assets/DataSourcesInProcess.php | 72 ++++++++++ ProcessMaker/Assets/DataSourcesInScreen.php | 129 ++++++++++++++++++ ProcessMaker/Assets/ScriptsInProcess.php | 8 +- ProcessMaker/Assets/ScriptsInScreen.php | 13 +- ProcessMaker/Jobs/ExportProcess.php | 32 +++++ ProcessMaker/Jobs/ExportScreen.php | 1 + .../Providers/WorkflowServiceProvider.php | 4 + ...rocessExporterWithScreenDataSourceTest.php | 98 +++++++++++++ .../ScriptsInScreenDataSourceTest.php | 116 ++++++++++++++++ 9 files changed, 468 insertions(+), 5 deletions(-) create mode 100644 ProcessMaker/Assets/DataSourcesInProcess.php create mode 100644 ProcessMaker/Assets/DataSourcesInScreen.php create mode 100644 tests/Feature/ImportExport/Exporters/ProcessExporterWithScreenDataSourceTest.php create mode 100644 tests/Feature/ImportExport/Exporters/ScriptsInScreenDataSourceTest.php diff --git a/ProcessMaker/Assets/DataSourcesInProcess.php b/ProcessMaker/Assets/DataSourcesInProcess.php new file mode 100644 index 0000000000..0a44452214 --- /dev/null +++ b/ProcessMaker/Assets/DataSourcesInProcess.php @@ -0,0 +1,72 @@ +getDefinitions()); + $xpath->registerNamespace('pm', WorkflowServiceProvider::PROCESS_MAKER_NS); + + // Find all nodes with pm:config + $nodes = $xpath->query("//*[@pm:config!='']"); + foreach ($nodes as $node) { + $configString = $node->getAttributeNS(WorkflowServiceProvider::PROCESS_MAKER_NS, 'config'); + $config = json_decode($configString, true); + if (isset($config['dataSource']) && is_numeric($config['dataSource'])) { + $dataSources[] = [$this->type, (int) $config['dataSource']]; + } + } + + return $dataSources; + } + + /** + * Update references used in an imported process + * + * @param Process $process + * @param array $references + * + * @return void + */ + public function updateReferences(Process $process, array $references = []) + { + $definitions = $process->getDefinitions(); + $xpath = new DOMXPath($definitions); + $xpath->registerNamespace('pm', WorkflowServiceProvider::PROCESS_MAKER_NS); + + $nodes = $xpath->query("//*[@pm:config!='']"); + foreach ($nodes as $node) { + $configString = $node->getAttributeNS(WorkflowServiceProvider::PROCESS_MAKER_NS, 'config'); + $config = json_decode($configString, true); + if (isset($config['dataSource']) && is_numeric($config['dataSource'])) { + $oldRef = $config['dataSource']; + if (isset($references[$this->type][$oldRef])) { + $newRef = $references[$this->type][$oldRef]->getKey(); + $config['dataSource'] = $newRef; + $node->setAttributeNS(WorkflowServiceProvider::PROCESS_MAKER_NS, 'config', json_encode($config)); + } + } + } + $process->bpmn = $definitions->saveXML(); + $process->save(); + } +} diff --git a/ProcessMaker/Assets/DataSourcesInScreen.php b/ProcessMaker/Assets/DataSourcesInScreen.php new file mode 100644 index 0000000000..bebb322c95 --- /dev/null +++ b/ProcessMaker/Assets/DataSourcesInScreen.php @@ -0,0 +1,129 @@ +watchers; + if (is_array($watchers)) { + $this->findInArray($watchers, function ($item) use (&$dataSources) { + if (is_array($item)) { + $scriptId = (string) ($item['script_id'] ?? ''); + $id = (string) ($item['script']['id'] ?? ''); + if (str_starts_with($scriptId, 'data_source-') || str_starts_with($id, 'data_source-')) { + $numericId = str_replace('data_source-', '', str_starts_with($scriptId, 'data_source-') ? $scriptId : $id); + if (is_numeric($numericId)) { + $dataSources[] = [$this->type, (int) $numericId]; + } + } + } + }); + } + + $config = $screen->versionFor(null)->config; + if (is_array($config)) { + $this->findInArray($config, function ($item) use (&$dataSources) { + if (is_array($item) && isset($item['component']) && $item['component'] === 'FormSelectList' && !empty($item['config']['options']['selectedDataSource'])) { + $dataSources[] = [$this->type, (int) $item['config']['options']['selectedDataSource']]; + } + }); + } + + return $dataSources; + } + + /** + * Update references used in an imported screen + * + * @param Screen $screen + * @param array $references + * @param ExportManager $exportManager + * + * @return void + */ + public function updateReferences(Screen $screen, array $references, ExportManager $exportManager) + { + $watches = $screen->watchers; + if (is_array($watches)) { + foreach ($watches as &$watcher) { + $id = (string) ($watcher['script']['id'] ?? ''); + if (str_starts_with($id, 'data_source-')) { + $oldRef = str_replace('data_source-', '', $id); + if (isset($references[$this->type][$oldRef])) { + $newRef = $references[$this->type][$oldRef]->getKey(); + } else { + $newRef = null; + $exportManager->addLogMessage( + 'DataSourcesInScreen:references', + __( + 'Imported file does not contain the data source #:dataSource assigned to a watcher', + ['dataSource' => $oldRef] + ), + false, + __("Missing watcher's data source") + ); + } + if ($newRef) { + $watcher['script_id'] = $newRef; + $watcher['script']['id'] = "data_source-$newRef"; + $watcher['script']['title'] = $references[$this->type][$oldRef]->name; + } + } + } + } + $screen->watchers = $watches; + + $config = $screen->config; + if (is_array($config)) { + $this->findInArray($config, function ($item, $key) use ($references, &$config) { + if (is_array($item) && isset($item['component']) && $item['component'] === 'FormSelectList' && !empty($item['config']['options']['selectedDataSource'])) { + $oldRef = $item['config']['options']['selectedDataSource']; + if (isset($references[$this->type][$oldRef])) { + $newRef = $references[$this->type][$oldRef]->getKey(); + Arr::set($config, "$key.config.options.selectedDataSource", $newRef); + } + } + }); + $screen->config = $config; + } + + $screen->save(); + } + + /** + * Find recursively in an array + * + * @param array $array + * @param callable $callback + * + * @return void + */ + private function findInArray(array $array, callable $callback) + { + call_user_func($callback, $array); + foreach ($array as $item) { + if (is_array($item)) { + $this->findInArray($item, $callback); + } else { + call_user_func($callback, $item); + } + } + } +} diff --git a/ProcessMaker/Assets/ScriptsInProcess.php b/ProcessMaker/Assets/ScriptsInProcess.php index 5b36ff0dfa..0886099bde 100644 --- a/ProcessMaker/Assets/ScriptsInProcess.php +++ b/ProcessMaker/Assets/ScriptsInProcess.php @@ -30,7 +30,10 @@ public function referencesToExport(Process $process, array $scripts = []) // Used in scriptRef $nodes = $xpath->query("//*[@pm:scriptRef!='']"); foreach ($nodes as $node) { - $scripts[] = [Script::class, $node->getAttributeNS(WorkflowServiceProvider::PROCESS_MAKER_NS, 'scriptRef')]; + $scriptId = $node->getAttributeNS(WorkflowServiceProvider::PROCESS_MAKER_NS, 'scriptRef'); + if (!str_starts_with((string) $scriptId, 'data_source-')) { + $scripts[] = [Script::class, $scriptId]; + } } return $scripts; @@ -54,6 +57,9 @@ public function updateReferences(Process $process, array $references = []) $nodes = $xpath->query("//*[@pm:scriptRef!='']"); foreach ($nodes as $node) { $oldRef = $node->getAttributeNS(WorkflowServiceProvider::PROCESS_MAKER_NS, 'scriptRef'); + if (str_starts_with((string) $oldRef, 'data_source-')) { + continue; + } $newRef = $references[Script::class][$oldRef]->getKey(); $node->setAttributeNS(WorkflowServiceProvider::PROCESS_MAKER_NS, 'scriptRef', $newRef); } diff --git a/ProcessMaker/Assets/ScriptsInScreen.php b/ProcessMaker/Assets/ScriptsInScreen.php index 9cf41025dd..da71a1919e 100644 --- a/ProcessMaker/Assets/ScriptsInScreen.php +++ b/ProcessMaker/Assets/ScriptsInScreen.php @@ -26,7 +26,11 @@ public function referencesToExport(Screen $screen, array $scripts = []) if (is_array($config)) { $this->findInArray($config, function ($item) use (&$scripts) { if (is_array($item) && !empty($item['script_id'])) { - $scripts[] = [Script::class, $item['script_id']]; + $scriptId = (string) $item['script_id']; + $id = (string) ($item['script']['id'] ?? ''); + if (!str_starts_with($scriptId, 'data_source-') && !str_starts_with($id, 'data_source-')) { + $scripts[] = [Script::class, $item['script_id']]; + } } }); } @@ -47,11 +51,12 @@ public function updateReferences(Screen $screen, array $references, ExportManage $watches = $screen->watchers; if (is_array($watches)) { foreach ($watches as &$watcher) { - $refParts = explode('-', $watcher['script_id']); - if ($refParts[0] === 'data_source') { + $scriptId = (string) ($watcher['script_id'] ?? ''); + $id = (string) ($watcher['script']['id'] ?? ''); + if (str_starts_with($scriptId, 'data_source-') || str_starts_with($id, 'data_source-')) { continue; } - $oldRef = $refParts[1]; + $oldRef = $scriptId; if (isset($references[Script::class][$oldRef])) { $newRef = $references[Script::class][$oldRef]->getKey(); } else { diff --git a/ProcessMaker/Jobs/ExportProcess.php b/ProcessMaker/Jobs/ExportProcess.php index f7f03ecf8a..116a6c8ed2 100644 --- a/ProcessMaker/Jobs/ExportProcess.php +++ b/ProcessMaker/Jobs/ExportProcess.php @@ -217,6 +217,37 @@ public function packageScripts() } } + /** + * Package any data sources referred to in our screen or process. + * + * @return void + */ + public function packageDataSources() + { + $this->package['data_sources'] = []; + $dataSourceClass = 'ProcessMaker\Packages\Connectors\DataSources\Models\DataSource'; + + if (!class_exists($dataSourceClass)) { + return; + } + + if (!isset($this->screen)) { + $dataSourceIds = $this->manager->getDependenciesOfType($dataSourceClass, $this->process, []); + } else { + $dataSourceIds = $this->manager->getDependenciesOfType($dataSourceClass, $this->screen, []); + } + + if (count($dataSourceIds)) { + $dataSources = $dataSourceClass::whereIn('id', $dataSourceIds)->get(); + + $dataSources->each(function ($dataSource) { + $dataSourceArray = $dataSource->toArray(); + $dataSourceArray['categories'] = $dataSource->categories->toArray(); + $this->package['data_sources'][] = $dataSourceArray; + }); + } + } + /** * Package the metadata (NOT THE VALUE) of any environment variables * referred to in our scripts. @@ -253,6 +284,7 @@ private function packageFile() $this->packageProcessCategory(); $this->packageScreens(); $this->packageScripts(); + $this->packageDataSources(); $this->packageEnvironmentVariables(); } diff --git a/ProcessMaker/Jobs/ExportScreen.php b/ProcessMaker/Jobs/ExportScreen.php index 7bf930323b..3702a63331 100644 --- a/ProcessMaker/Jobs/ExportScreen.php +++ b/ProcessMaker/Jobs/ExportScreen.php @@ -38,6 +38,7 @@ private function packageFile() $this->package['version'] = '2'; $this->packageScreens(); $this->packageScripts(); + $this->packageDataSources(); } /** diff --git a/ProcessMaker/Providers/WorkflowServiceProvider.php b/ProcessMaker/Providers/WorkflowServiceProvider.php index 7bdbc78c28..fffbff740f 100644 --- a/ProcessMaker/Providers/WorkflowServiceProvider.php +++ b/ProcessMaker/Providers/WorkflowServiceProvider.php @@ -9,6 +9,8 @@ use ProcessMaker\Assets\ScreensInScreen; use ProcessMaker\Assets\ScriptsInProcess; use ProcessMaker\Assets\ScriptsInScreen; +use ProcessMaker\Assets\DataSourcesInScreen; +use ProcessMaker\Assets\DataSourcesInProcess; use ProcessMaker\Bpmn\MustacheOptions; use ProcessMaker\BpmnEngine; use ProcessMaker\Contracts\TimerExpressionInterface; @@ -195,6 +197,8 @@ function (ThrowEventInterface $source, EventDefinitionInterface $sourceEventDefi $instance->addDependencyManager(ScreensInScreen::class); $instance->addDependencyManager(ScriptsInProcess::class); $instance->addDependencyManager(ScriptsInScreen::class); + $instance->addDependencyManager(DataSourcesInScreen::class); + $instance->addDependencyManager(DataSourcesInProcess::class); return $instance; }); diff --git a/tests/Feature/ImportExport/Exporters/ProcessExporterWithScreenDataSourceTest.php b/tests/Feature/ImportExport/Exporters/ProcessExporterWithScreenDataSourceTest.php new file mode 100644 index 0000000000..f02fc39898 --- /dev/null +++ b/tests/Feature/ImportExport/Exporters/ProcessExporterWithScreenDataSourceTest.php @@ -0,0 +1,98 @@ +markTestSkipped('DataSource package not installed'); + } + + // Create a script first to consume some IDs + $script = Script::factory()->create(['title' => 'A Script']); + + $category = new $dataSourceCategoryClass(); + $category->name = 'Test Category ' . uniqid(); + $category->save(); + + $dataSource = new $dataSourceClass(); + $dataSource->name = 'Test Data Source ' . uniqid(); + $dataSource->description = 'Description'; + $dataSource->data_source_category_id = $category->id; + $dataSource->save(); + + // Let's try to make a script with the same ID as the data source + // This might be tricky due to auto-increment, but we can try to force it or just use a high ID + $duplicateScript = null; + try { + $duplicateScript = Script::factory()->create(['id' => $dataSource->id, 'title' => 'Duplicate ID Script']); + } catch (\Exception $e) { + // If ID is already taken, just create one normally + $duplicateScript = Script::factory()->create(['title' => 'Other Script']); + } + + $screen = Screen::factory()->create([ + 'title' => 'Screen with data source watcher', + 'watchers' => [ + [ + 'name' => 'Data Source Watcher', + 'script_id' => 'data_source-' . $dataSource->id, + 'script' => [ + 'id' => 'data_source-' . $dataSource->id, + 'title' => 'My Data Source', + ], + ], + ], + ]); + + $bpmn = ' + + + + +'; + + $process = Process::factory()->create([ + 'name' => 'Process with screen using data source', + 'bpmn' => $bpmn + ]); + + $exportJob = new ExportProcess($process); + $exportJob->handle(); + + // Access private package property via reflection + $reflection = new \ReflectionClass($exportJob); + $property = $reflection->getProperty('package'); + $property->setAccessible(true); + $package = $property->getValue($exportJob); + + // Check if data source is in package + $this->assertArrayHasKey('data_sources', $package); + $this->assertCount(1, $package['data_sources']); + $this->assertEquals($dataSource->id, $package['data_sources'][0]['id']); + + // Check that it is NOT in scripts + foreach ($package['scripts'] as $script) { + $this->assertNotEquals('data_source-' . $dataSource->id, $script['id']); + $this->assertNotEquals($dataSource->id, $script['id']); + // Also check that it's not present as a numeric ID if it's the same + if (is_numeric($script['id']) && (int)$script['id'] === $dataSource->id) { + $this->fail('Data source ID ' . $dataSource->id . ' found in scripts section'); + } + } + } +} diff --git a/tests/Feature/ImportExport/Exporters/ScriptsInScreenDataSourceTest.php b/tests/Feature/ImportExport/Exporters/ScriptsInScreenDataSourceTest.php new file mode 100644 index 0000000000..f22ac082ce --- /dev/null +++ b/tests/Feature/ImportExport/Exporters/ScriptsInScreenDataSourceTest.php @@ -0,0 +1,116 @@ +create([ + 'title' => 'Screen with data source watcher', + 'watchers' => [ + [ + 'name' => 'Data Source Watcher', + 'script_id' => 'data_source-3', + 'script' => [ + 'id' => 'data_source-3', + 'title' => 'My Data Source', + ], + ], + ], + ]); + + $scriptsInScreen = new ScriptsInScreen(); + $scripts = $scriptsInScreen->referencesToExport($screen); + + // After the fix, this should be 0 because the only watcher is a data source + $this->assertCount(0, $scripts, 'Should not identify data_source as a script'); + } + + /** + * Test that DataSourcesInScreen identifies data_source- prefixed IDs as data sources. + */ + public function testReferencesToExportWithDataSourceAsset() + { + $screen = Screen::factory()->create([ + 'title' => 'Screen with data source watcher', + 'watchers' => [ + [ + 'name' => 'Data Source Watcher', + 'script_id' => 'data_source-3', + 'script' => [ + 'id' => 'data_source-3', + 'title' => 'My Data Source', + ], + ], + ], + ]); + + $dataSourcesInScreen = new DataSourcesInScreen(); + $dataSources = $dataSourcesInScreen->referencesToExport($screen); + + $this->assertCount(1, $dataSources); + $this->assertEquals('ProcessMaker\Packages\Connectors\DataSources\Models\DataSource', $dataSources[0][0]); + $this->assertEquals(3, $dataSources[0][1]); + } + + /** + * Test that ExportScreen includes data sources in the package. + */ + public function testExportScreenIncludesDataSources() + { + $dataSourceClass = 'ProcessMaker\Packages\Connectors\DataSources\Models\DataSource'; + $dataSourceCategoryClass = 'ProcessMaker\Packages\Connectors\DataSources\Models\DataSourceCategory'; + if (!class_exists($dataSourceClass) || !class_exists($dataSourceCategoryClass)) { + $this->markTestSkipped('DataSource package not installed'); + } + + $category = new $dataSourceCategoryClass(); + $category->name = 'Test Category'; + $category->save(); + + $dataSource = new $dataSourceClass(); + $dataSource->name = 'Test Data Source'; + $dataSource->description = 'Description'; + $dataSource->data_source_category_id = $category->id; + $dataSource->save(); + + $screen = Screen::factory()->create([ + 'title' => 'Screen with data source watcher', + 'watchers' => [ + [ + 'name' => 'Data Source Watcher', + 'script_id' => 'data_source-' . $dataSource->id, + 'script' => [ + 'id' => 'data_source-' . $dataSource->id, + 'title' => 'My Data Source', + ], + ], + ], + ]); + + $exportJob = new ExportScreen($screen); + $exportJob->handle(); + + // Access private package property via reflection + $reflection = new \ReflectionClass($exportJob); + // package is protected in ExportProcess + $property = $reflection->getParentClass()->getProperty('package'); + $property->setAccessible(true); + $package = $property->getValue($exportJob); + + $this->assertArrayHasKey('data_sources', $package); + $this->assertCount(1, $package['data_sources']); + $this->assertEquals($dataSource->id, $package['data_sources'][0]['id']); + } +} From b80d225dfb13e038fc83f78cab22e17c3117dfa5 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Wed, 29 Jul 2026 15:00:29 -0400 Subject: [PATCH 34/52] fix: add missing Illuminate\Support\Arr import in DataSourcesInScreen asset The asset class uses Arr::set for updating references but was missing the import, causing a runtime error during the import process. --- ProcessMaker/Assets/DataSourcesInScreen.php | 1 + 1 file changed, 1 insertion(+) diff --git a/ProcessMaker/Assets/DataSourcesInScreen.php b/ProcessMaker/Assets/DataSourcesInScreen.php index bebb322c95..19bc000ae9 100644 --- a/ProcessMaker/Assets/DataSourcesInScreen.php +++ b/ProcessMaker/Assets/DataSourcesInScreen.php @@ -4,6 +4,7 @@ use ProcessMaker\Managers\ExportManager; use ProcessMaker\Models\Screen; +use Illuminate\Support\Arr; class DataSourcesInScreen { From 72a14a7902e86ec71809a2e787165dbc207c4265 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Wed, 29 Jul 2026 16:14:08 -0400 Subject: [PATCH 35/52] fix: include path tracking for improved callback context --- ProcessMaker/Assets/DataSourcesInScreen.php | 15 ++++++++------- ProcessMaker/Assets/ScriptsInScreen.php | 11 ++++++----- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/ProcessMaker/Assets/DataSourcesInScreen.php b/ProcessMaker/Assets/DataSourcesInScreen.php index 19bc000ae9..4a7494d74f 100644 --- a/ProcessMaker/Assets/DataSourcesInScreen.php +++ b/ProcessMaker/Assets/DataSourcesInScreen.php @@ -93,12 +93,12 @@ public function updateReferences(Screen $screen, array $references, ExportManage $config = $screen->config; if (is_array($config)) { - $this->findInArray($config, function ($item, $key) use ($references, &$config) { + $this->findInArray($config, function ($item, $keyDotNotation) use ($references, &$config) { if (is_array($item) && isset($item['component']) && $item['component'] === 'FormSelectList' && !empty($item['config']['options']['selectedDataSource'])) { $oldRef = $item['config']['options']['selectedDataSource']; if (isset($references[$this->type][$oldRef])) { $newRef = $references[$this->type][$oldRef]->getKey(); - Arr::set($config, "$key.config.options.selectedDataSource", $newRef); + Arr::set($config, "$keyDotNotation.config.options.selectedDataSource", $newRef); } } }); @@ -113,17 +113,18 @@ public function updateReferences(Screen $screen, array $references, ExportManage * * @param array $array * @param callable $callback + * @param array $path * * @return void */ - private function findInArray(array $array, callable $callback) + private function findInArray(array $array, callable $callback, array $path = []) { - call_user_func($callback, $array); - foreach ($array as $item) { + call_user_func($callback, $array, implode('.', $path)); + foreach ($array as $key => $item) { if (is_array($item)) { - $this->findInArray($item, $callback); + $this->findInArray($item, $callback, array_merge($path, [$key])); } else { - call_user_func($callback, $item); + call_user_func($callback, $item, implode('.', array_merge($path, [$key]))); } } } diff --git a/ProcessMaker/Assets/ScriptsInScreen.php b/ProcessMaker/Assets/ScriptsInScreen.php index da71a1919e..1d6be01ac9 100644 --- a/ProcessMaker/Assets/ScriptsInScreen.php +++ b/ProcessMaker/Assets/ScriptsInScreen.php @@ -87,17 +87,18 @@ public function updateReferences(Screen $screen, array $references, ExportManage * * @param array $array * @param callable $callback + * @param array $path * * @return void */ - private function findInArray(array $array, callable $callback) + private function findInArray(array $array, callable $callback, array $path = []) { - call_user_func($callback, $array); - foreach ($array as $item) { + call_user_func($callback, $array, implode('.', $path)); + foreach ($array as $key => $item) { if (is_array($item)) { - $this->findInArray($item, $callback); + $this->findInArray($item, $callback, array_merge($path, [$key])); } else { - call_user_func($callback, $item); + call_user_func($callback, $item, implode('.', array_merge($path, [$key]))); } } } From f2f9464d1f2792fec463739d76670d44042d9d38 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Mon, 3 Aug 2026 13:59:02 -0400 Subject: [PATCH 36/52] fix: update watcher script_id assignment to remove prefix for consistency --- ProcessMaker/Jobs/ImportProcess.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ProcessMaker/Jobs/ImportProcess.php b/ProcessMaker/Jobs/ImportProcess.php index 51ca215d7c..03b4768916 100644 --- a/ProcessMaker/Jobs/ImportProcess.php +++ b/ProcessMaker/Jobs/ImportProcess.php @@ -990,7 +990,7 @@ protected function watcherScriptsToSave($screen) $watcherList = []; foreach ($screen->watchers as $watcher) { $script = $watcher->script; - $watcher->script_id = $script->id; + $watcher->script_id = str_replace(['script-', 'data_source-'], '', $script->id); $watcher->script->title = $script->title; $watcherList[] = $watcher; } From 37212a1631e47fe93c9c757188328c069726c4b6 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Mon, 3 Aug 2026 14:33:26 -0700 Subject: [PATCH 37/52] Update security advisory --- composer.json | 2 +- composer.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 1d700325d8..d0a66693b0 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,7 @@ "fakerphp/faker": "^1.24", "google/apiclient": "^2.18", "google/protobuf": "^4.33.6", - "guzzlehttp/guzzle": "^7.13.1", + "guzzlehttp/guzzle": "^7.15.2", "guzzlehttp/psr7": "^2.12.3", "igaster/laravel-theme": "^2.0", "jenssegers/agent": "^2.6", diff --git a/composer.lock b/composer.lock index 69114017d6..7424e10bfa 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "16713528d4523a3285c6fd02776afcb3", + "content-hash": "39e08dd682bb95515f53d495a677b313", "packages": [ { "name": "aws/aws-crt-php", @@ -2283,16 +2283,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.15.1", + "version": "7.15.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "61443dfb33c62f308ee8add20f45b4d6e4bf8d2f" + "reference": "744101956d78b7c1384d0cbf379db13e859167bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/61443dfb33c62f308ee8add20f45b4d6e4bf8d2f", - "reference": "61443dfb33c62f308ee8add20f45b4d6e4bf8d2f", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/744101956d78b7c1384d0cbf379db13e859167bf", + "reference": "744101956d78b7c1384d0cbf379db13e859167bf", "shasum": "" }, "require": { @@ -2391,7 +2391,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.15.1" + "source": "https://github.com/guzzle/guzzle/tree/7.15.2" }, "funding": [ { @@ -2407,7 +2407,7 @@ "type": "tidelift" } ], - "time": "2026-07-18T11:23:11+00:00" + "time": "2026-07-26T23:23:20+00:00" }, { "name": "guzzlehttp/promises", From b0c32950dba5e0402f65cd8fe4da9241141d912a Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Mon, 3 Aug 2026 16:02:03 -0700 Subject: [PATCH 38/52] Update dependencies --- composer.json | 18 +- package-lock.json | 578 +++++++++++++++++++++++----------------------- package.json | 6 +- 3 files changed, 302 insertions(+), 300 deletions(-) diff --git a/composer.json b/composer.json index d0a66693b0..0bd34886e4 100644 --- a/composer.json +++ b/composer.json @@ -154,21 +154,21 @@ "connector-docusign": "1.11.2", "connector-idp": "1.14.2", "connector-pdf-print": "1.23.3", - "connector-send-email": "1.32.18", + "connector-send-email": "1.32.19", "connector-slack": "1.9.7", "docker-executor-node-ssr": "1.7.4", "package-ab-testing": "1.4.2", "package-actions-by-email": "1.22.17", - "package-advanced-user-manager": "1.13.3", - "package-ai": "1.16.24", + "package-advanced-user-manager": "1.13.4", + "package-ai": "1.16.25", "package-analytics-reporting": "1.11.5", - "package-auth": "1.24.19", - "package-collections": "2.27.9", + "package-auth": "1.24.20", + "package-collections": "2.27.10", "package-comments": "1.16.4", "package-conversational-forms": "1.15.2", - "package-data-sources": "1.34.12", + "package-data-sources": "1.34.13", "package-decision-engine": "1.16.3", - "package-dynamic-ui": "1.28.5", + "package-dynamic-ui": "1.28.6", "package-email-start-event": "1.0.13", "package-files": "1.23.7", "package-googleplaces": "1.12.1", @@ -179,9 +179,9 @@ "package-product-analytics": "1.5.11", "package-projects": "1.12.9", "package-rpa": "1.1.2", - "package-savedsearch": "1.43.14", + "package-savedsearch": "1.43.15", "package-slideshow": "1.4.3", - "package-smart-extract": "1.0.0", + "package-smart-extract": "1.0.1", "package-signature": "1.15.6", "package-testing": "1.8.2", "package-translations": "2.14.6", diff --git a/package-lock.json b/package-lock.json index b751211351..1946a5d866 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,10 +20,10 @@ "@fortawesome/free-solid-svg-icons": "^5.15.1", "@fortawesome/vue-fontawesome": "^0.1.9", "@panter/vue-i18next": "^0.15.2", - "@processmaker/modeler": "1.69.42", + "@processmaker/modeler": "1.69.43", "@processmaker/processmaker-bpmn-moddle": "0.16.1", - "@processmaker/screen-builder": "3.8.36", - "@processmaker/vue-form-elements": "0.65.9", + "@processmaker/screen-builder": "3.8.37", + "@processmaker/vue-form-elements": "0.65.10", "@processmaker/vue-multiselect": "2.3.2", "@tinymce/tinymce-vue": "2.0.0", "axios": "^0.27.2", @@ -2279,31 +2279,31 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", - "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", + "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.11" + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz", + "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" + "@floating-ui/core": "^1.8.0", + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", - "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.9.tgz", + "integrity": "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==", "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.7.6" + "@floating-ui/dom": "^1.8.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -2311,9 +2311,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", + "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==", "license": "MIT" }, "node_modules/@fontsource/poppins": { @@ -3748,9 +3748,9 @@ "license": "MIT" }, "node_modules/@processmaker/modeler": { - "version": "1.69.42", - "resolved": "https://registry.npmjs.org/@processmaker/modeler/-/modeler-1.69.42.tgz", - "integrity": "sha512-t/0PL1ntTBng6FmL9aFYG2ioLZcGKPwK69LlwFcjWATU/PA/LUESRz05hA5InvAOjm2W1zwkxrGezLRxXGkN/Q==", + "version": "1.69.43", + "resolved": "https://registry.npmjs.org/@processmaker/modeler/-/modeler-1.69.43.tgz", + "integrity": "sha512-5b2WvbQw49eoHUADmqAi1/Fxkndc6n8vAqMnr1bHTph6LEgVUzn4C2UyGgqMz+hlldhrBGEKw/XEtePXnmUxTQ==", "dependencies": { "@babel/plugin-proposal-private-methods": "^7.12.1", "@fortawesome/fontawesome-free": "^5.11.2", @@ -3758,8 +3758,8 @@ "@fortawesome/free-brands-svg-icons": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^5.11.2", "@fortawesome/vue-fontawesome": "^0.1.8", - "@processmaker/screen-builder": "3.8.36", - "@processmaker/vue-form-elements": "0.65.9", + "@processmaker/screen-builder": "3.8.37", + "@processmaker/vue-form-elements": "0.65.10", "@processmaker/vue-multiselect": "2.3.2", "bootstrap": "^4.3.1", "bootstrap-vue": "^2.0.4", @@ -3932,9 +3932,9 @@ } }, "node_modules/@processmaker/screen-builder": { - "version": "3.8.36", - "resolved": "https://registry.npmjs.org/@processmaker/screen-builder/-/screen-builder-3.8.36.tgz", - "integrity": "sha512-jubdmvBiG+5oreeY2E90Cnk+AjF7kNJ3V8i2Lz7QCSx8/47cXtoBAnGmctXiKkG+R96TGAA3Vyxh+3AC7iDBAQ==", + "version": "3.8.37", + "resolved": "https://registry.npmjs.org/@processmaker/screen-builder/-/screen-builder-3.8.37.tgz", + "integrity": "sha512-KwAAiXa/7x9tp/eYexH7BAdCbjCyEUPng6Mg+ctEIHz1XTUai8bkSGWmR2JOcDSNjrYCPrTSx172qU5E7EVzxg==", "dependencies": { "@chantouchsek/validatorjs": "1.2.3", "@storybook/addon-docs": "^7.6.13", @@ -3959,7 +3959,7 @@ }, "peerDependencies": { "@panter/vue-i18next": "^0.15.0", - "@processmaker/vue-form-elements": "0.65.9", + "@processmaker/vue-form-elements": "0.65.10", "i18next": "^15.0.8", "vue": "^2.6.12", "vuex": "^3.1.1" @@ -4008,9 +4008,9 @@ "license": "MIT" }, "node_modules/@processmaker/vue-form-elements": { - "version": "0.65.9", - "resolved": "https://registry.npmjs.org/@processmaker/vue-form-elements/-/vue-form-elements-0.65.9.tgz", - "integrity": "sha512-h1y6TlmQL+NIJ2iGjDd6nMQ7ex3SYQuLfh2EMM0XhDKpFJ+UCjWCSaxLqPc3WMRKBquXoQkN1k+O9zi2Yc3L1w==", + "version": "0.65.10", + "resolved": "https://registry.npmjs.org/@processmaker/vue-form-elements/-/vue-form-elements-0.65.10.tgz", + "integrity": "sha512-uPemEhLPPx2uN8wxktGSjMzmZtzYLIRHsBFoGv/OozOobtrx4iw0h7zkb1PcB84bHqh3Y0Xx/EagENJ/nltnPQ==", "license": "MIT", "dependencies": { "@chantouchsek/validatorjs": "1.2.3", @@ -4412,18 +4412,18 @@ } }, "node_modules/@radix-ui/react-toolbar": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.15.tgz", - "integrity": "sha512-t/iEuVjUnXXtrsGK40AA43uIx37sn3AqZ7oAVnPICK6lFJP6dzMzWR3U9b6eCfFjb6wtSEqkJ9Rn9xDjiOx20g==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.19.tgz", + "integrity": "sha512-Ph0IvtYw4VB12ZnZg+YtrGs8yJQsnizwo/zu0R4Y/nWugtJzA7Pg1eWeuDR9+LSqn+xjamss+UOSOJJJ4gx8jw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-roving-focus": "1.1.15", - "@radix-ui/react-separator": "1.1.11", - "@radix-ui/react-toggle-group": "1.1.15" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-separator": "1.1.15", + "@radix-ui/react-toggle-group": "1.1.19" }, "peerDependencies": { "@types/react": "*", @@ -4441,15 +4441,15 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/primitive": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.5.tgz", - "integrity": "sha512-d86WIWFYNtGA0H/d8exstrTRTp7eWJYlYJbtNofxr/3ljupZYn6EFDG/Qgu/0Kc8v7yMUxySagqJsL1+PdYjWg==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.7.tgz", + "integrity": "sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==", "license": "MIT" }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.3.tgz", - "integrity": "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.5.tgz", + "integrity": "sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -4462,9 +4462,9 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-context": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.0.tgz", - "integrity": "sha512-fOE+JtN9rygNZkCnHRBEP0TAvLldlhyOxMsbwFvTP4nAs+nBmfnna+o/Zski2wkmY1YMrFC0aSzsHoLY47iLrg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.2.tgz", + "integrity": "sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -4477,9 +4477,9 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-direction": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.2.tgz", - "integrity": "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.4.tgz", + "integrity": "sha512-5pzg4FGQNpExhnhT2zlrP1wZFaYCd1K0nYWoFAdcYoYK868IEigqMX3B3f8yIoRlAhAeDWciLI6ZdCKHF9P4Vg==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -4492,12 +4492,12 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-id": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.2.tgz", - "integrity": "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.4.tgz", + "integrity": "sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.2" + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -4510,12 +4510,12 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-primitive": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.7.tgz", - "integrity": "sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.10.tgz", + "integrity": "sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.3.0" + "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", @@ -4533,22 +4533,22 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.15.tgz", - "integrity": "sha512-40svmmugfM3mUN7VUDGVE1tQGOhyi8enlGD0CNJEcMM36C1f71PKM21DFgNHUfem0XnA+d8H8oN3Z9ZpJjSslg==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.19.tgz", + "integrity": "sha512-V9jI6hDjT7l3jsCQD9bLNvDLM3tH/gdbOTp7Tefp3hbbgCGQoK7tUvrWiRlcoBHIZ809ElXwNQwVo0B98LuTXQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-collection": "1.1.12", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-is-hydrated": "0.1.1", - "@radix-ui/react-use-layout-effect": "1.1.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-is-hydrated": "0.1.3", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -4566,15 +4566,15 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-collection": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.12.tgz", - "integrity": "sha512-nb67INpE0IahJKN7EYPp9m9YGwYeKlnzxT3MwXVkgCskaSJia97kG4T0ywpjNUSSnoJk/uvk12V8vbrEHEj+/Q==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.15.tgz", + "integrity": "sha512-9W+B9NPF0NaaPh/1NJd3+KqsnlLqU9H7T2rvww+fp+T/evVXdNAyYcnfRQZFOjkR1ajQp3yORlqnI8soawLvNA==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0" + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", @@ -4592,12 +4592,12 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-separator": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.11.tgz", - "integrity": "sha512-jRhe86+8PF7VZ1u14eOWVOuh2BuAhALg/FT1VcMC4OHedMTRUazDnDlKTt+yxo5cRNKHMfmvZ4sSQtWDeMV4CQ==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.15.tgz", + "integrity": "sha512-jOLO4lssEzWpoDu7G+Ze4VjwMRUBt291pnZD0gmalREZipnTX3wadQo7Fy48GCTfe14/YRN6rw/rOJqrE85Wxw==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.7" + "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", @@ -4615,12 +4615,12 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-slot": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.0.tgz", - "integrity": "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.3.tgz", + "integrity": "sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.3" + "@radix-ui/react-compose-refs": "1.1.5" }, "peerDependencies": { "@types/react": "*", @@ -4633,18 +4633,18 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.15.tgz", - "integrity": "sha512-gIC5Q+Xljg7lmUdzSuDoy0t97yZn1sZl00Ra37ZvKrYdWnQLU6sWLd09yG8cIB9jUAlQfHgJ2ACAG00MFwsqSQ==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.19.tgz", + "integrity": "sha512-OtnwuSVjd1Ofi+AdnvhsjQdyuhCDwYs1w9RyB5BN/OavXOVQo42SYqQjwUnbPnaiPFBpQ9aX70dWeee+v2oBLA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-roving-focus": "1.1.15", - "@radix-ui/react-toggle": "1.1.14", - "@radix-ui/react-use-controllable-state": "1.2.3" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-toggle": "1.1.18", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -4662,14 +4662,14 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-toggle": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.14.tgz", - "integrity": "sha512-QI/hB65XKWACA66P64A+aHxtLUgHJeJLkaQa+awUNXT6T3swndtY5DojeHA+vldrTspMTtFBd7HfZ9QGbM1Qrw==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.18.tgz", + "integrity": "sha512-7lonPlKfSacd20GlOBx2ltuVKz9oqWYZz+oMQyOltw6t1y2nyftj2ZmwwUHYn49kqfDWcp8dNZm5NgV+5Z+mug==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -4687,9 +4687,9 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.2.tgz", - "integrity": "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.4.tgz", + "integrity": "sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -4702,13 +4702,14 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.3.tgz", - "integrity": "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.6.tgz", + "integrity": "sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.3", - "@radix-ui/react-use-layout-effect": "1.1.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-use-effect-event": "0.0.5", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -4721,9 +4722,9 @@ } }, "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.2.tgz", - "integrity": "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.4.tgz", + "integrity": "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -4773,12 +4774,12 @@ } }, "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.3.tgz", - "integrity": "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.5.tgz", + "integrity": "sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.2" + "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", @@ -4791,9 +4792,9 @@ } }, "node_modules/@radix-ui/react-use-effect-event/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.2.tgz", - "integrity": "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.4.tgz", + "integrity": "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -4825,9 +4826,9 @@ } }, "node_modules/@radix-ui/react-use-is-hydrated": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.1.tgz", - "integrity": "sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.3.tgz", + "integrity": "sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -5149,9 +5150,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.27.10", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", - "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "version": "0.27.12", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.12.tgz", + "integrity": "sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==", "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -5364,9 +5365,9 @@ } }, "node_modules/@storybook/core-common/node_modules/brace-expansion": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", - "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -6097,9 +6098,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.25.tgz", + "integrity": "sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==", "license": "MIT" }, "node_modules/@types/mdx": { @@ -18493,9 +18494,9 @@ } }, "node_modules/react-colorful": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.7.0.tgz", - "integrity": "sha512-fuesYIemttah97XmsIHmz4OORDHiSFzyc9HMAIrCHJou2jaRQmL8cFJ76K4zQhhj8jzwOBlOi4BaGTjjOZCfTg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.8.0.tgz", + "integrity": "sha512-Wy9OzPfjSN9bF12OB8N7UQvlsZ0I+7wHxpN+bV5BjNQGxOj6IiwkRjevJK9yOBjJWGQvAaf1OXtn8rUeEatAng==", "license": "MIT", "peerDependencies": { "react": ">=16.8.0", @@ -18767,9 +18768,9 @@ } }, "node_modules/recast": { - "version": "0.23.12", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.12.tgz", - "integrity": "sha512-dEWRjcINDu/F4l2dYx57ugBtD7HV9KXESyxhzw/MqWLeglJrsjJKqACPyUPg+6AF8mIgm+Zi0dZ3ACoIg+QtpA==", + "version": "0.23.19", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.19.tgz", + "integrity": "sha512-T98lym7kH+pnZmRaD8yDRdaNqyUbwnbEBx0MuchrzMFOEMray4AO3ZJoTUZ5r78Ao78X/OhzW0DL8GB85w/I2w==", "license": "MIT", "dependencies": { "ast-types": "^0.16.1", @@ -20908,9 +20909,9 @@ } }, "node_modules/synchronous-promise": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", - "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.18.tgz", + "integrity": "sha512-4EEtGWYLkSoy/DjlKpHR6LT2AjmORt8HM+CUCSdKiKyuhL3PFBksgcTibSOj7JIoCvuqRVnZ7P9QFBMXR5kW6Q==", "license": "BSD-3-Clause" }, "node_modules/tailwindcss": { @@ -25020,34 +25021,34 @@ "dev": true }, "@floating-ui/core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", - "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", + "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", "requires": { - "@floating-ui/utils": "^0.2.11" + "@floating-ui/utils": "^0.2.12" } }, "@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz", + "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", "requires": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" + "@floating-ui/core": "^1.8.0", + "@floating-ui/utils": "^0.2.12" } }, "@floating-ui/react-dom": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", - "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.9.tgz", + "integrity": "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==", "requires": { - "@floating-ui/dom": "^1.7.6" + "@floating-ui/dom": "^1.8.0" } }, "@floating-ui/utils": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==" + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", + "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==" }, "@fontsource/poppins": { "version": "5.0.8", @@ -26007,9 +26008,9 @@ "dev": true }, "@processmaker/modeler": { - "version": "1.69.42", - "resolved": "https://registry.npmjs.org/@processmaker/modeler/-/modeler-1.69.42.tgz", - "integrity": "sha512-t/0PL1ntTBng6FmL9aFYG2ioLZcGKPwK69LlwFcjWATU/PA/LUESRz05hA5InvAOjm2W1zwkxrGezLRxXGkN/Q==", + "version": "1.69.43", + "resolved": "https://registry.npmjs.org/@processmaker/modeler/-/modeler-1.69.43.tgz", + "integrity": "sha512-5b2WvbQw49eoHUADmqAi1/Fxkndc6n8vAqMnr1bHTph6LEgVUzn4C2UyGgqMz+hlldhrBGEKw/XEtePXnmUxTQ==", "requires": { "@babel/plugin-proposal-private-methods": "^7.12.1", "@fortawesome/fontawesome-free": "^5.11.2", @@ -26017,8 +26018,8 @@ "@fortawesome/free-brands-svg-icons": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^5.11.2", "@fortawesome/vue-fontawesome": "^0.1.8", - "@processmaker/screen-builder": "3.8.36", - "@processmaker/vue-form-elements": "0.65.9", + "@processmaker/screen-builder": "3.8.37", + "@processmaker/vue-form-elements": "0.65.10", "@processmaker/vue-multiselect": "2.3.2", "bootstrap": "^4.3.1", "bootstrap-vue": "^2.0.4", @@ -26133,9 +26134,9 @@ } }, "@processmaker/screen-builder": { - "version": "3.8.36", - "resolved": "https://registry.npmjs.org/@processmaker/screen-builder/-/screen-builder-3.8.36.tgz", - "integrity": "sha512-jubdmvBiG+5oreeY2E90Cnk+AjF7kNJ3V8i2Lz7QCSx8/47cXtoBAnGmctXiKkG+R96TGAA3Vyxh+3AC7iDBAQ==", + "version": "3.8.37", + "resolved": "https://registry.npmjs.org/@processmaker/screen-builder/-/screen-builder-3.8.37.tgz", + "integrity": "sha512-KwAAiXa/7x9tp/eYexH7BAdCbjCyEUPng6Mg+ctEIHz1XTUai8bkSGWmR2JOcDSNjrYCPrTSx172qU5E7EVzxg==", "requires": { "@chantouchsek/validatorjs": "1.2.3", "@storybook/addon-docs": "^7.6.13", @@ -26189,9 +26190,9 @@ } }, "@processmaker/vue-form-elements": { - "version": "0.65.9", - "resolved": "https://registry.npmjs.org/@processmaker/vue-form-elements/-/vue-form-elements-0.65.9.tgz", - "integrity": "sha512-h1y6TlmQL+NIJ2iGjDd6nMQ7ex3SYQuLfh2EMM0XhDKpFJ+UCjWCSaxLqPc3WMRKBquXoQkN1k+O9zi2Yc3L1w==", + "version": "0.65.10", + "resolved": "https://registry.npmjs.org/@processmaker/vue-form-elements/-/vue-form-elements-0.65.10.tgz", + "integrity": "sha512-uPemEhLPPx2uN8wxktGSjMzmZtzYLIRHsBFoGv/OozOobtrx4iw0h7zkb1PcB84bHqh3Y0Xx/EagENJ/nltnPQ==", "requires": { "@chantouchsek/validatorjs": "1.2.3", "@tinymce/tinymce-vue": "2.0.0", @@ -26401,150 +26402,151 @@ } }, "@radix-ui/react-toolbar": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.15.tgz", - "integrity": "sha512-t/iEuVjUnXXtrsGK40AA43uIx37sn3AqZ7oAVnPICK6lFJP6dzMzWR3U9b6eCfFjb6wtSEqkJ9Rn9xDjiOx20g==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.19.tgz", + "integrity": "sha512-Ph0IvtYw4VB12ZnZg+YtrGs8yJQsnizwo/zu0R4Y/nWugtJzA7Pg1eWeuDR9+LSqn+xjamss+UOSOJJJ4gx8jw==", "requires": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-roving-focus": "1.1.15", - "@radix-ui/react-separator": "1.1.11", - "@radix-ui/react-toggle-group": "1.1.15" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-separator": "1.1.15", + "@radix-ui/react-toggle-group": "1.1.19" }, "dependencies": { "@radix-ui/primitive": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.5.tgz", - "integrity": "sha512-d86WIWFYNtGA0H/d8exstrTRTp7eWJYlYJbtNofxr/3ljupZYn6EFDG/Qgu/0Kc8v7yMUxySagqJsL1+PdYjWg==" + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.7.tgz", + "integrity": "sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==" }, "@radix-ui/react-compose-refs": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.3.tgz", - "integrity": "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.5.tgz", + "integrity": "sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==", "requires": {} }, "@radix-ui/react-context": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.0.tgz", - "integrity": "sha512-fOE+JtN9rygNZkCnHRBEP0TAvLldlhyOxMsbwFvTP4nAs+nBmfnna+o/Zski2wkmY1YMrFC0aSzsHoLY47iLrg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.2.tgz", + "integrity": "sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==", "requires": {} }, "@radix-ui/react-direction": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.2.tgz", - "integrity": "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.4.tgz", + "integrity": "sha512-5pzg4FGQNpExhnhT2zlrP1wZFaYCd1K0nYWoFAdcYoYK868IEigqMX3B3f8yIoRlAhAeDWciLI6ZdCKHF9P4Vg==", "requires": {} }, "@radix-ui/react-id": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.2.tgz", - "integrity": "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.4.tgz", + "integrity": "sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==", "requires": { - "@radix-ui/react-use-layout-effect": "1.1.2" + "@radix-ui/react-use-layout-effect": "1.1.4" } }, "@radix-ui/react-primitive": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.7.tgz", - "integrity": "sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.10.tgz", + "integrity": "sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==", "requires": { - "@radix-ui/react-slot": "1.3.0" + "@radix-ui/react-slot": "1.3.3" } }, "@radix-ui/react-roving-focus": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.15.tgz", - "integrity": "sha512-40svmmugfM3mUN7VUDGVE1tQGOhyi8enlGD0CNJEcMM36C1f71PKM21DFgNHUfem0XnA+d8H8oN3Z9ZpJjSslg==", - "requires": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-collection": "1.1.12", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-is-hydrated": "0.1.1", - "@radix-ui/react-use-layout-effect": "1.1.2" + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.19.tgz", + "integrity": "sha512-V9jI6hDjT7l3jsCQD9bLNvDLM3tH/gdbOTp7Tefp3hbbgCGQoK7tUvrWiRlcoBHIZ809ElXwNQwVo0B98LuTXQ==", + "requires": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-collection": "1.1.15", + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-id": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-callback-ref": "1.1.4", + "@radix-ui/react-use-controllable-state": "1.2.6", + "@radix-ui/react-use-is-hydrated": "0.1.3", + "@radix-ui/react-use-layout-effect": "1.1.4" }, "dependencies": { "@radix-ui/react-collection": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.12.tgz", - "integrity": "sha512-nb67INpE0IahJKN7EYPp9m9YGwYeKlnzxT3MwXVkgCskaSJia97kG4T0ywpjNUSSnoJk/uvk12V8vbrEHEj+/Q==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.15.tgz", + "integrity": "sha512-9W+B9NPF0NaaPh/1NJd3+KqsnlLqU9H7T2rvww+fp+T/evVXdNAyYcnfRQZFOjkR1ajQp3yORlqnI8soawLvNA==", "requires": { - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0" + "@radix-ui/react-compose-refs": "1.1.5", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-slot": "1.3.3" } } } }, "@radix-ui/react-separator": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.11.tgz", - "integrity": "sha512-jRhe86+8PF7VZ1u14eOWVOuh2BuAhALg/FT1VcMC4OHedMTRUazDnDlKTt+yxo5cRNKHMfmvZ4sSQtWDeMV4CQ==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.15.tgz", + "integrity": "sha512-jOLO4lssEzWpoDu7G+Ze4VjwMRUBt291pnZD0gmalREZipnTX3wadQo7Fy48GCTfe14/YRN6rw/rOJqrE85Wxw==", "requires": { - "@radix-ui/react-primitive": "2.1.7" + "@radix-ui/react-primitive": "2.1.10" } }, "@radix-ui/react-slot": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.0.tgz", - "integrity": "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.3.tgz", + "integrity": "sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==", "requires": { - "@radix-ui/react-compose-refs": "1.1.3" + "@radix-ui/react-compose-refs": "1.1.5" } }, "@radix-ui/react-toggle-group": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.15.tgz", - "integrity": "sha512-gIC5Q+Xljg7lmUdzSuDoy0t97yZn1sZl00Ra37ZvKrYdWnQLU6sWLd09yG8cIB9jUAlQfHgJ2ACAG00MFwsqSQ==", - "requires": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-context": "1.2.0", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-roving-focus": "1.1.15", - "@radix-ui/react-toggle": "1.1.14", - "@radix-ui/react-use-controllable-state": "1.2.3" + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.19.tgz", + "integrity": "sha512-OtnwuSVjd1Ofi+AdnvhsjQdyuhCDwYs1w9RyB5BN/OavXOVQo42SYqQjwUnbPnaiPFBpQ9aX70dWeee+v2oBLA==", + "requires": { + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-context": "1.2.2", + "@radix-ui/react-direction": "1.1.4", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-roving-focus": "1.1.19", + "@radix-ui/react-toggle": "1.1.18", + "@radix-ui/react-use-controllable-state": "1.2.6" }, "dependencies": { "@radix-ui/react-toggle": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.14.tgz", - "integrity": "sha512-QI/hB65XKWACA66P64A+aHxtLUgHJeJLkaQa+awUNXT6T3swndtY5DojeHA+vldrTspMTtFBd7HfZ9QGbM1Qrw==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.18.tgz", + "integrity": "sha512-7lonPlKfSacd20GlOBx2ltuVKz9oqWYZz+oMQyOltw6t1y2nyftj2ZmwwUHYn49kqfDWcp8dNZm5NgV+5Z+mug==", "requires": { - "@radix-ui/primitive": "1.1.5", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-primitive": "2.1.10", + "@radix-ui/react-use-controllable-state": "1.2.6" } } } }, "@radix-ui/react-use-callback-ref": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.2.tgz", - "integrity": "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.4.tgz", + "integrity": "sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==", "requires": {} }, "@radix-ui/react-use-controllable-state": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.3.tgz", - "integrity": "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.6.tgz", + "integrity": "sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ==", "requires": { - "@radix-ui/react-use-effect-event": "0.0.3", - "@radix-ui/react-use-layout-effect": "1.1.2" + "@radix-ui/primitive": "1.1.7", + "@radix-ui/react-use-effect-event": "0.0.5", + "@radix-ui/react-use-layout-effect": "1.1.4" } }, "@radix-ui/react-use-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.2.tgz", - "integrity": "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.4.tgz", + "integrity": "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==", "requires": {} } } @@ -26567,17 +26569,17 @@ } }, "@radix-ui/react-use-effect-event": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.3.tgz", - "integrity": "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.5.tgz", + "integrity": "sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==", "requires": { - "@radix-ui/react-use-layout-effect": "1.1.2" + "@radix-ui/react-use-layout-effect": "1.1.4" }, "dependencies": { "@radix-ui/react-use-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.2.tgz", - "integrity": "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.4.tgz", + "integrity": "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==", "requires": {} } } @@ -26592,9 +26594,9 @@ } }, "@radix-ui/react-use-is-hydrated": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.1.tgz", - "integrity": "sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.3.tgz", + "integrity": "sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==", "requires": {} }, "@radix-ui/react-use-layout-effect": { @@ -26740,9 +26742,9 @@ "optional": true }, "@sinclair/typebox": { - "version": "0.27.10", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", - "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==" + "version": "0.27.12", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.12.tgz", + "integrity": "sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==" }, "@sindresorhus/is": { "version": "4.6.0", @@ -26897,9 +26899,9 @@ } }, "brace-expansion": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", - "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", "requires": { "balanced-match": "^1.0.0" } @@ -27494,9 +27496,9 @@ } }, "@types/lodash": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==" + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.25.tgz", + "integrity": "sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==" }, "@types/mdx": { "version": "2.0.14", @@ -36715,9 +36717,9 @@ } }, "react-colorful": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.7.0.tgz", - "integrity": "sha512-fuesYIemttah97XmsIHmz4OORDHiSFzyc9HMAIrCHJou2jaRQmL8cFJ76K4zQhhj8jzwOBlOi4BaGTjjOZCfTg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.8.0.tgz", + "integrity": "sha512-Wy9OzPfjSN9bF12OB8N7UQvlsZ0I+7wHxpN+bV5BjNQGxOj6IiwkRjevJK9yOBjJWGQvAaf1OXtn8rUeEatAng==", "requires": {} }, "react-dom": { @@ -36909,9 +36911,9 @@ } }, "recast": { - "version": "0.23.12", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.12.tgz", - "integrity": "sha512-dEWRjcINDu/F4l2dYx57ugBtD7HV9KXESyxhzw/MqWLeglJrsjJKqACPyUPg+6AF8mIgm+Zi0dZ3ACoIg+QtpA==", + "version": "0.23.19", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.19.tgz", + "integrity": "sha512-T98lym7kH+pnZmRaD8yDRdaNqyUbwnbEBx0MuchrzMFOEMray4AO3ZJoTUZ5r78Ao78X/OhzW0DL8GB85w/I2w==", "requires": { "ast-types": "^0.16.1", "esprima": "~4.0.0", @@ -38543,9 +38545,9 @@ } }, "synchronous-promise": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", - "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==" + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.18.tgz", + "integrity": "sha512-4EEtGWYLkSoy/DjlKpHR6LT2AjmORt8HM+CUCSdKiKyuhL3PFBksgcTibSOj7JIoCvuqRVnZ7P9QFBMXR5kW6Q==" }, "tailwindcss": { "version": "3.4.13", diff --git a/package.json b/package.json index 42cd7070a1..b047762fd9 100644 --- a/package.json +++ b/package.json @@ -61,10 +61,10 @@ "@fortawesome/free-solid-svg-icons": "^5.15.1", "@fortawesome/vue-fontawesome": "^0.1.9", "@panter/vue-i18next": "^0.15.2", - "@processmaker/modeler": "1.69.42", + "@processmaker/modeler": "1.69.43", "@processmaker/processmaker-bpmn-moddle": "0.16.1", - "@processmaker/screen-builder": "3.8.36", - "@processmaker/vue-form-elements": "0.65.9", + "@processmaker/screen-builder": "3.8.37", + "@processmaker/vue-form-elements": "0.65.10", "@processmaker/vue-multiselect": "2.3.2", "@tinymce/tinymce-vue": "2.0.0", "axios": "^0.27.2", From 7a49a98c6f12c19155ea30f3b6b9b24b355841ec Mon Sep 17 00:00:00 2001 From: ProcessMaker Bot <206180840+processmaker-bot@users.noreply.github.com> Date: Mon, 3 Aug 2026 23:03:41 +0000 Subject: [PATCH 39/52] Version 2026.13.1 --- composer.json | 6 +++--- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index 0bd34886e4..1bd4939f7f 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "processmaker/processmaker", - "version": "2026.12.3", + "version": "2026.13.1", "description": "BPM PHP Software", "keywords": [ "php bpm processmaker" @@ -116,7 +116,7 @@ "Gmail" ], "processmaker": { - "build": "449111cb", + "build": "3f4181f9", "cicd-enabled": true, "custom": { "package-ellucian-ethos": "1.19.10", @@ -253,4 +253,4 @@ "ignore": [] } } -} +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1946a5d866..e98c94133d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@processmaker/processmaker", - "version": "2026.12.3", + "version": "2026.13.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@processmaker/processmaker", - "version": "2026.12.3", + "version": "2026.13.1", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index b047762fd9..c8e8ee9704 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@processmaker/processmaker", - "version": "2026.12.3", + "version": "2026.13.1", "description": "ProcessMaker 4", "author": "DevOps ", "license": "ISC", From c64b38b24cdb90242a262a4320d63e5fe5497ad3 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Mon, 3 Aug 2026 20:42:22 -0400 Subject: [PATCH 40/52] debug tests --- phpunit.xml | 5 +- tests/Extensions/RealTimeOutputExtension.php | 60 ++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 tests/Extensions/RealTimeOutputExtension.php diff --git a/phpunit.xml b/phpunit.xml index 8c16d0ae0e..7cc898e9d0 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -7,7 +7,10 @@ extensionsDirectory="tests/Extensions" displayDetailsOnAllIssues="true" > - + + + + tests/Feature tests/Managers diff --git a/tests/Extensions/RealTimeOutputExtension.php b/tests/Extensions/RealTimeOutputExtension.php new file mode 100644 index 0000000000..2816f91988 --- /dev/null +++ b/tests/Extensions/RealTimeOutputExtension.php @@ -0,0 +1,60 @@ +registerSubscriber(new class implements PreparationStartedSubscriber { + public function notify(PreparationStarted $event): void + { + fwrite(STDERR, "\n\033[1;33m[START]\033[0m " . $event->test()->id() . "\n"); + } + }); + + $facade->registerSubscriber(new class implements PassedSubscriber { + public function notify(Passed $event): void + { + fwrite(STDERR, "\033[1;32m[PASS]\033[0m " . $event->test()->id() . "\n"); + } + }); + + $facade->registerSubscriber(new class implements FailedSubscriber { + public function notify(Failed $event): void + { + fwrite(STDERR, "\033[1;31m[FAIL]\033[0m " . $event->test()->id() . "\n"); + // TESTING_VERBOSE will handle the trace, but we can add a small marker here if needed. + } + }); + + $facade->registerSubscriber(new class implements ErroredSubscriber { + public function notify(Errored $event): void + { + fwrite(STDERR, "\033[1;31m[ERROR]\033[0m " . $event->test()->id() . "\n"); + } + }); + + $facade->registerSubscriber(new class implements SkippedSubscriber { + public function notify(Skipped $event): void + { + fwrite(STDERR, "\033[1;34m[SKIP]\033[0m " . $event->test()->id() . "\n"); + } + }); + } +} From b1bbb34f7e60447eaffc4817b0db77702cc7e857 Mon Sep 17 00:00:00 2001 From: David Callizaya Date: Tue, 4 Aug 2026 12:06:31 -0400 Subject: [PATCH 41/52] ci: debug tests --- phpunit.xml | 3 + tests/Extensions/RealTimeOutputExtension.php | 109 ++++++++++++++++--- tests/TestCase.php | 14 +++ 3 files changed, 110 insertions(+), 16 deletions(-) diff --git a/phpunit.xml b/phpunit.xml index 7cc898e9d0..6d8310e71c 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -27,6 +27,9 @@ + + + diff --git a/tests/Extensions/RealTimeOutputExtension.php b/tests/Extensions/RealTimeOutputExtension.php index 2816f91988..8a317305b7 100644 --- a/tests/Extensions/RealTimeOutputExtension.php +++ b/tests/Extensions/RealTimeOutputExtension.php @@ -2,59 +2,136 @@ namespace Tests\Extensions; -use PHPUnit\Runner\Extension\Extension; -use PHPUnit\Runner\Extension\Facade; -use PHPUnit\Runner\Extension\ParameterCollection; -use PHPUnit\TextUI\Configuration\Configuration; -use PHPUnit\Event\Test\PreparationStarted; -use PHPUnit\Event\Test\PreparationStartedSubscriber; -use PHPUnit\Event\Test\Passed; -use PHPUnit\Event\Test\PassedSubscriber; -use PHPUnit\Event\Test\Failed; -use PHPUnit\Event\Test\FailedSubscriber; use PHPUnit\Event\Test\Errored; use PHPUnit\Event\Test\ErroredSubscriber; +use PHPUnit\Event\Test\Failed; +use PHPUnit\Event\Test\FailedSubscriber; +use PHPUnit\Event\Test\Passed; +use PHPUnit\Event\Test\PassedSubscriber; +use PHPUnit\Event\Test\PreparationStarted; +use PHPUnit\Event\Test\PreparationStartedSubscriber; +use PHPUnit\Event\Test\Prepared; +use PHPUnit\Event\Test\PreparedSubscriber; use PHPUnit\Event\Test\Skipped; use PHPUnit\Event\Test\SkippedSubscriber; +use PHPUnit\Runner\Extension\Extension; +use PHPUnit\Runner\Extension\Facade; +use PHPUnit\Runner\Extension\ParameterCollection; +use PHPUnit\TextUI\Configuration\Configuration; class RealTimeOutputExtension implements Extension { + /** @var array */ + private static array $startedAt = []; + + /** @var array */ + private static array $preparedAt = []; + public function bootstrap(Configuration $configuration, Facade $facade, ParameterCollection $parameters): void { $facade->registerSubscriber(new class implements PreparationStartedSubscriber { public function notify(PreparationStarted $event): void { - fwrite(STDERR, "\n\033[1;33m[START]\033[0m " . $event->test()->id() . "\n"); + $id = $event->test()->id(); + RealTimeOutputExtension::markStarted($id); + RealTimeOutputExtension::write('START', $id, "\033[1;33m", true); + } + }); + + $facade->registerSubscriber(new class implements PreparedSubscriber { + public function notify(Prepared $event): void + { + $id = $event->test()->id(); + RealTimeOutputExtension::markPrepared($id); + $setupDuration = RealTimeOutputExtension::elapsedSinceStart($id); + RealTimeOutputExtension::write( + 'PREPARED', + $id, + "\033[1;36m", + false, + $setupDuration !== null ? sprintf('setup=%.2fs', $setupDuration) : null + ); } }); $facade->registerSubscriber(new class implements PassedSubscriber { public function notify(Passed $event): void { - fwrite(STDERR, "\033[1;32m[PASS]\033[0m " . $event->test()->id() . "\n"); + RealTimeOutputExtension::writeFinished('PASS', $event->test()->id(), "\033[1;32m"); } }); $facade->registerSubscriber(new class implements FailedSubscriber { public function notify(Failed $event): void { - fwrite(STDERR, "\033[1;31m[FAIL]\033[0m " . $event->test()->id() . "\n"); - // TESTING_VERBOSE will handle the trace, but we can add a small marker here if needed. + RealTimeOutputExtension::writeFinished('FAIL', $event->test()->id(), "\033[1;31m"); } }); $facade->registerSubscriber(new class implements ErroredSubscriber { public function notify(Errored $event): void { - fwrite(STDERR, "\033[1;31m[ERROR]\033[0m " . $event->test()->id() . "\n"); + RealTimeOutputExtension::writeFinished('ERROR', $event->test()->id(), "\033[1;31m"); } }); $facade->registerSubscriber(new class implements SkippedSubscriber { public function notify(Skipped $event): void { - fwrite(STDERR, "\033[1;34m[SKIP]\033[0m " . $event->test()->id() . "\n"); + RealTimeOutputExtension::writeFinished('SKIP', $event->test()->id(), "\033[1;34m"); } }); } + + public static function markStarted(string $id): void + { + self::$startedAt[$id] = microtime(true); + unset(self::$preparedAt[$id]); + } + + public static function markPrepared(string $id): void + { + self::$preparedAt[$id] = microtime(true); + } + + public static function elapsedSinceStart(string $id): ?float + { + if (!isset(self::$startedAt[$id])) { + return null; + } + + return microtime(true) - self::$startedAt[$id]; + } + + public static function writeFinished(string $label, string $id, string $color): void + { + $total = self::elapsedSinceStart($id); + $body = null; + if ($total !== null) { + $body = sprintf('total=%.2fs', $total); + if (isset(self::$preparedAt[$id])) { + $body .= sprintf(' body=%.2fs', microtime(true) - self::$preparedAt[$id]); + } + } + + self::write($label, $id, $color, false, $body); + unset(self::$startedAt[$id], self::$preparedAt[$id]); + } + + public static function write(string $label, string $id, string $color, bool $leadingNewline = false, ?string $extra = null): void + { + $timestamp = date('H:i:s'); + $prefix = $leadingNewline ? "\n" : ''; + $suffix = $extra ? " ({$extra})" : ''; + fwrite(STDERR, sprintf( + "%s%s[%s]%s [%s] %s%s\n", + $prefix, + $color, + $label, + "\033[0m", + $timestamp, + $id, + $suffix + )); + } } diff --git a/tests/TestCase.php b/tests/TestCase.php index fce7ee220d..587ba3b53f 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -72,7 +72,21 @@ protected function setUp(): void // Clear Redis cache before running tests foreach (['default', 'cache', 'cache_settings'] as $connection) { + if (env('TESTING_SETUP_TRACE')) { + fwrite(STDERR, sprintf( + "\033[1;35m[SETUP]\033[0m [%s] Redis flushDb(%s) start\n", + date('H:i:s'), + $connection + )); + } Redis::connection($connection)->flushDb(); + if (env('TESTING_SETUP_TRACE')) { + fwrite(STDERR, sprintf( + "\033[1;35m[SETUP]\033[0m [%s] Redis flushDb(%s) done\n", + date('H:i:s'), + $connection + )); + } } if (!self::$cacheCleared) { From e7c35ab682ad05d7406183d017293d8f767d4b90 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Tue, 4 Aug 2026 12:19:54 -0400 Subject: [PATCH 42/52] Create custom executor in microservice after import --- .../Exporters/ScriptExecutorExporter.php | 13 +++++++-- .../Jobs/MoveScriptExecutorToMicroservice.php | 27 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 ProcessMaker/Jobs/MoveScriptExecutorToMicroservice.php diff --git a/ProcessMaker/ImportExport/Exporters/ScriptExecutorExporter.php b/ProcessMaker/ImportExport/Exporters/ScriptExecutorExporter.php index 0f3e8a1444..7f19142a6f 100644 --- a/ProcessMaker/ImportExport/Exporters/ScriptExecutorExporter.php +++ b/ProcessMaker/ImportExport/Exporters/ScriptExecutorExporter.php @@ -5,6 +5,7 @@ use Illuminate\Support\Facades\Auth; use ProcessMaker\Events\ScriptExecutorUpdated; use ProcessMaker\Jobs\BuildScriptExecutor; +use ProcessMaker\Jobs\MoveScriptExecutorToMicroservice; use ProcessMaker\Models\ScriptExecutor; use ProcessMaker\Models\User; @@ -28,7 +29,11 @@ public function import() : bool case 'copy': case 'new': // afterCommit is needed because we are in a db transaction - BuildScriptExecutor::dispatch($this->model->id, $userId)->afterCommit(); + if (!config('script-runner-microservice.enabled')) { + BuildScriptExecutor::dispatch($this->model->id, $userId)->afterCommit(); + } else { + MoveScriptExecutorToMicroservice::dispatch($this->model->uuid)->afterCommit(); + } break; case 'update': if (!empty($this->model->getChanges())) { @@ -40,7 +45,11 @@ public function import() : bool $user = User::where('is_administrator', 1)->first(); } // afterCommit is needed because we are in a db transaction - BuildScriptExecutor::dispatch($this->model->id, $user->id)->afterCommit(); + if (!config('script-runner-microservice.enabled')) { + BuildScriptExecutor::dispatch($this->model->id, $userId)->afterCommit(); + } else { + MoveScriptExecutorToMicroservice::dispatch($this->model->uuid)->afterCommit(); + } } break; diff --git a/ProcessMaker/Jobs/MoveScriptExecutorToMicroservice.php b/ProcessMaker/Jobs/MoveScriptExecutorToMicroservice.php new file mode 100644 index 0000000000..584b7b6f01 --- /dev/null +++ b/ProcessMaker/Jobs/MoveScriptExecutorToMicroservice.php @@ -0,0 +1,27 @@ +uuid ); + } +} From 2fbb3794359df7691188f8731ef4c9a1a9dbb96a Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Fri, 19 Jun 2026 09:41:05 -0400 Subject: [PATCH 43/52] feat(FOUR-31695): solving conflicts --- .gitignore | 5 +- .../Repositories/SettingsConfigRepository.php | 2 +- composer.json | 7 +- composer.lock | 177 ++++++++++++++++++ 4 files changed, 186 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 7a47d39bab..f30ac80d98 100644 --- a/.gitignore +++ b/.gitignore @@ -51,4 +51,7 @@ devhub/pm-font/dist test-db-snapshot.db snapshot_*.db storage/transitions -.envrc \ No newline at end of file +.envrc +**/caddy +frankenphp +frankenphp-worker.php diff --git a/ProcessMaker/Repositories/SettingsConfigRepository.php b/ProcessMaker/Repositories/SettingsConfigRepository.php index 2f4cf6e0b2..f2707faf2f 100644 --- a/ProcessMaker/Repositories/SettingsConfigRepository.php +++ b/ProcessMaker/Repositories/SettingsConfigRepository.php @@ -39,7 +39,7 @@ public function get($key, $default = null) if ($key === 'session.lifetime') { $settingValue = $this->getFromSettings($key); - return $settingValue ?? $default; + return $settingValue ?: Arr::get($this->items, $key) ?: $default ?: 120; } if (Arr::has($this->items, $key)) { diff --git a/composer.json b/composer.json index 1bd4939f7f..474148e089 100644 --- a/composer.json +++ b/composer.json @@ -25,8 +25,9 @@ "guzzlehttp/psr7": "^2.12.3", "igaster/laravel-theme": "^2.0", "jenssegers/agent": "^2.6", - "laravel/framework": "^13.13", - "laravel/horizon": "^5.47", + "laravel/framework": "^13.0", + "laravel/horizon": "^5.45", + "laravel/octane": "^2.17", "laravel/pail": "^1.2", "laravel/passport": "^13.7", "laravel/scout": "^11.1", @@ -253,4 +254,4 @@ "ignore": [] } } -} \ No newline at end of file +} diff --git a/composer.lock b/composer.lock index 7424e10bfa..b507253c75 100644 --- a/composer.lock +++ b/composer.lock @@ -2896,6 +2896,94 @@ ], "time": "2020-06-13T08:05:20+00:00" }, + { + "name": "laminas/laminas-diactoros", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "60c182916b2749480895601649563970f3f12ec4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/60c182916b2749480895601649563970f3f12ec4", + "reference": "60c182916b2749480895601649563970f3f12ec4", + "shasum": "" + }, + "require": { + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "psr/http-factory": "^1.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "conflict": { + "amphp/amp": "<2.6.4" + }, + "provide": { + "psr/http-factory-implementation": "^1.0", + "psr/http-message-implementation": "^1.1 || ^2.0" + }, + "require-dev": { + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^2.2.0", + "laminas/laminas-coding-standard": "~3.1.0", + "php-http/psr7-integration-tests": "^1.4.0", + "phpunit/phpunit": "^10.5.36", + "psalm/plugin-phpunit": "^0.19.5", + "vimeo/psalm": "^6.13" + }, + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\Diactoros", + "config-provider": "Laminas\\Diactoros\\ConfigProvider" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-17", + "psr-7" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-diactoros/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-diactoros/issues", + "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", + "source": "https://github.com/laminas/laminas-diactoros" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2025-10-12T15:31:36+00:00" + }, { "name": "laravel/framework", "version": "v13.13.0", @@ -3200,6 +3288,95 @@ }, "time": "2026-06-03T15:11:37+00:00" }, + { + "name": "laravel/octane", + "version": "v2.17.5", + "source": { + "type": "git", + "url": "https://github.com/laravel/octane.git", + "reference": "058ae4d7109eed40836dc42960f9388b9bf71f73" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/octane/zipball/058ae4d7109eed40836dc42960f9388b9bf71f73", + "reference": "058ae4d7109eed40836dc42960f9388b9bf71f73", + "shasum": "" + }, + "require": { + "laminas/laminas-diactoros": "^3.0", + "laravel/framework": "^10.10.1|^11.0|^12.0|^13.0", + "laravel/prompts": "^0.1.24|^0.2.0|^0.3.0", + "laravel/serializable-closure": "^1.3|^2.0", + "nesbot/carbon": "^2.66.0|^3.0", + "php": "^8.1.0", + "symfony/console": "^6.0|^7.0|^8.0", + "symfony/psr-http-message-bridge": "^2.2.0|^6.4|^7.0|^8.0" + }, + "conflict": { + "spiral/roadrunner": "<2023.1.0", + "spiral/roadrunner-cli": "<2.6.0", + "spiral/roadrunner-http": "<3.3.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.6.1", + "inertiajs/inertia-laravel": "^1.3.2|^2.0", + "laravel/scout": "^10.2.1", + "laravel/socialite": "^5.6.1", + "livewire/livewire": "^2.12.3|^3.0", + "nunomaduro/collision": "^6.4.0|^7.5.2|^8.0", + "orchestra/testbench": "^8.21|^9.0|^10.0|^11.0", + "phpstan/phpstan": "^2.1.7", + "phpunit/phpunit": "^10.4|^11.5|^12.0|^13.0", + "spiral/roadrunner-cli": "^2.6.0", + "spiral/roadrunner-http": "^3.3.0" + }, + "bin": [ + "bin/roadrunner-worker", + "bin/swoole-server" + ], + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Octane": "Laravel\\Octane\\Facades\\Octane" + }, + "providers": [ + "Laravel\\Octane\\OctaneServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Octane\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Supercharge your Laravel application's performance.", + "keywords": [ + "frankenphp", + "laravel", + "octane", + "roadrunner", + "swoole" + ], + "support": { + "issues": "https://github.com/laravel/octane/issues", + "source": "https://github.com/laravel/octane" + }, + "time": "2026-06-04T09:05:08+00:00" + }, { "name": "laravel/pail", "version": "v1.2.6", From f4126faafa22b3c8327a0e677473bfb13fe21de6 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Fri, 26 Jun 2026 08:41:15 -0400 Subject: [PATCH 44/52] feat(FOUR-32024): review and fix the calculation of DB timing when loaded by octane --- .../Middleware/ServerTimingMiddleware.php | 2 ++ .../Providers/ProcessMakerServiceProvider.php | 8 +++++++ tests/Feature/ServerTimingMiddlewareTest.php | 24 +++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/ProcessMaker/Http/Middleware/ServerTimingMiddleware.php b/ProcessMaker/Http/Middleware/ServerTimingMiddleware.php index 96ade2bded..2a15e84a6d 100644 --- a/ProcessMaker/Http/Middleware/ServerTimingMiddleware.php +++ b/ProcessMaker/Http/Middleware/ServerTimingMiddleware.php @@ -28,6 +28,8 @@ public function handle(Request $request, Closure $next): Response return $next($request); } + ProcessMakerServiceProvider::beginRequestTiming(); + // Start time for controller execution $startController = microtime(true); diff --git a/ProcessMaker/Providers/ProcessMakerServiceProvider.php b/ProcessMaker/Providers/ProcessMakerServiceProvider.php index 762fd6cd0b..706bba7625 100644 --- a/ProcessMaker/Providers/ProcessMakerServiceProvider.php +++ b/ProcessMaker/Providers/ProcessMakerServiceProvider.php @@ -511,6 +511,14 @@ public static function getBootTime(): ?float return self::$bootTime; } + /** + * Reset per-request query timing metrics. + */ + public static function beginRequestTiming(): void + { + self::$queryTime = 0; + } + /** * Get the query time for the request. * diff --git a/tests/Feature/ServerTimingMiddlewareTest.php b/tests/Feature/ServerTimingMiddlewareTest.php index b9449ebfed..040401d227 100644 --- a/tests/Feature/ServerTimingMiddlewareTest.php +++ b/tests/Feature/ServerTimingMiddlewareTest.php @@ -6,6 +6,8 @@ use Illuminate\Support\Facades\Route; use ProcessMaker\Http\Middleware\ServerTimingMiddleware; use ProcessMaker\Models\User; +use ProcessMaker\Providers\ProcessMakerServiceProvider; +use ReflectionClass; use Tests\Feature\Shared\RequestHelper; use Tests\TestCase; @@ -41,6 +43,28 @@ public function testServerTimingHeaderIncludesAllMetrics() $this->assertStringContainsString('db;dur=', $serverTiming[2]); } + public function testBeginRequestTimingClearsAccumulatedQueryTime() + { + $reflection = new ReflectionClass(ProcessMakerServiceProvider::class); + $property = $reflection->getProperty('queryTime'); + $property->setAccessible(true); + $property->setValue(null, 500); + + Route::middleware(ServerTimingMiddleware::class)->get('/timing-reset-test', function () { + DB::select('SELECT 1'); + + return response()->json(['message' => 'Timing reset test']); + }); + + $response = $this->get('/timing-reset-test'); + $serverTiming = $this->getHeader($response, 'server-timing'); + + preg_match('/db;dur=([\d.]+)/', implode(',', $serverTiming), $matches); + $dbTime = (float) ($matches[1] ?? 500); + + $this->assertLessThan(500, $dbTime); + } + public function testQueryTimeIsMeasured() { // Mock a route with a query From 1a44a4e1ec0803410cc88665ee0e105d2b810148 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Wed, 29 Jul 2026 10:11:13 -0400 Subject: [PATCH 45/52] feat(FOUR-32353): solving conflicts --- .env.dusk.testing | 2 + .env.example | 3 ++ .../Listeners/HandleRedirectListener.php | 11 +++++ .../Providers/ProcessMakerServiceProvider.php | 48 +++++++++++++++++++ config/app.php | 4 ++ config/octane.php | 32 +++++++++++++ 6 files changed, 100 insertions(+) create mode 100644 config/octane.php diff --git a/.env.dusk.testing b/.env.dusk.testing index 7b284846d8..a5434bf44a 100644 --- a/.env.dusk.testing +++ b/.env.dusk.testing @@ -17,6 +17,8 @@ DATA_DB_PASSWORD=secret APP_URL=http://127.0.0.1 +OCTANE_ENABLED=false + SAUCELABS_BROWSER_TESTING=false SAUCELABS_USERNAME=processmaker SAUCELABS_ACCESS_KEY=eb78836b-b7c9-4800-95b4-69ef4be96106 diff --git a/.env.example b/.env.example index c3a094135c..38cd7f8cfb 100644 --- a/.env.example +++ b/.env.example @@ -70,3 +70,6 @@ KEYCLOAK_CLIENT_SECRET= KEYCLOAK_BASE_URL= KEYCLOAK_USERNAME= KEYCLOAK_PASSWORD= +# Enable Octane compatibility listeners when running under `php artisan octane:start` +OCTANE_ENABLED=false +OCTANE_MAX_REQUESTS=500 diff --git a/ProcessMaker/Listeners/HandleRedirectListener.php b/ProcessMaker/Listeners/HandleRedirectListener.php index 78491809a4..7679a73572 100644 --- a/ProcessMaker/Listeners/HandleRedirectListener.php +++ b/ProcessMaker/Listeners/HandleRedirectListener.php @@ -20,6 +20,17 @@ protected function setRedirectTo(ProcessRequest $processRequest, string $method, self::$redirectionParams = $params; } + /** + * Reset the static state for Octane compatibility. + * This prevents data leaks between requests in long-running workers. + */ + public static function reset(): void + { + self::$processRequest = null; + self::$redirectionMethod = ''; + self::$redirectionParams = []; + } + public static function sendRedirectToEvent() { $method = self::$redirectionMethod; diff --git a/ProcessMaker/Providers/ProcessMakerServiceProvider.php b/ProcessMaker/Providers/ProcessMakerServiceProvider.php index 706bba7625..331ae6d2a7 100644 --- a/ProcessMaker/Providers/ProcessMakerServiceProvider.php +++ b/ProcessMaker/Providers/ProcessMakerServiceProvider.php @@ -43,6 +43,7 @@ use ProcessMaker\ImportExport\SignalHelper; use ProcessMaker\Jobs\SmartInbox; use ProcessMaker\LicensedPackageManifest; +use ProcessMaker\Listeners\HandleRedirectListener; use ProcessMaker\Managers; use ProcessMaker\Managers\MenuManager; use ProcessMaker\Managers\ScreenCompiledManager; @@ -107,6 +108,9 @@ public function boot(): void $this->checkConfigCache(); + // Register Octane listeners if Octane is enabled + $this->registerOctaneListeners(); + // Hook after service providers boot self::$bootTime = (microtime(true) - self::$bootStart) * 1000; // Convert to milliseconds } @@ -529,6 +533,15 @@ public static function getQueryTime(): float return self::$queryTime; } + /** + * Reset the query time for Octane compatibility. + * This prevents timing metrics from leaking between requests. + */ + public static function resetQueryTime(): void + { + self::$queryTime = 0; + } + /** * Set the boot time for service providers. * @@ -576,6 +589,41 @@ public static function getPackageBootTiming(): array return self::$packageBootTiming; } + /** + * Register Octane-specific listeners for request lifecycle management. + * + * When OCTANE_ENABLED is true, this method registers: + * - A 'requestHandled' listener to reset per-request static state + * - A flush list for stateful singletons + * - A tick listener for memory monitoring + */ + private function registerOctaneListeners(): void + { + if (!config('app.octane_enabled', false) || !class_exists('\Laravel\Octane\Octane')) { + return; + } + + $octane = \Laravel\Octane\Octane::class; + + // Reset per-request static state after each request + $octane::on('requestHandled', function ($request, $result) { + self::resetQueryTime(); + HandleRedirectListener::reset(); + }); + + // Flush stateful singletons per request + $octane::flush(config('octane.flush', [])); + + // Monitor memory usage every 30 seconds + $octane::tick('octane-memory-monitor', function () { + $memory = memory_get_usage(true); + $threshold = 128 * 1024 * 1024; // 128MB + if ($memory > $threshold) { + Log::warning('Octane worker memory high: ' . round($memory / 1024 / 1024, 2) . 'MB'); + } + })->seconds(30); + } + /** * Find the tenant based on the environment variable */ diff --git a/config/app.php b/config/app.php index b3c5891f98..72088b34ab 100644 --- a/config/app.php +++ b/config/app.php @@ -266,6 +266,10 @@ 'force_https' => env('FORCE_HTTPS', true), + // Enable Octane compatibility listeners when running under `php artisan octane:start`. + 'octane_enabled' => filter_var(env('OCTANE_ENABLED', false), FILTER_VALIDATE_BOOLEAN), + 'octane_max_requests' => (int) env('OCTANE_MAX_REQUESTS', 500), + 'nayra_docker_network' => env('NAYRA_DOCKER_NETWORK', 'host'), 'nayra_port' => env('NAYRA_PORT', 8080), diff --git a/config/octane.php b/config/octane.php new file mode 100644 index 0000000000..13fe63eb5e --- /dev/null +++ b/config/octane.php @@ -0,0 +1,32 @@ + [ + // Services with mutable state that must be recreated per request + ProcessMaker\Models\AnonymousUser::class, + ProcessMaker\ImportExport\Extension::class, + ProcessMaker\ImportExport\SignalHelper::class, + ProcessMaker\Managers\MenuManager::class, + ], + + 'warm' => [ + // Services to pre-resolve on worker start + ProcessMaker\Managers\PackageManager::class, + ProcessMaker\Managers\LoginManager::class, + ProcessMaker\Managers\IndexManager::class, + ], +]; From c7bb47d861a2ffa48d533223ae86d29e8e9cdb80 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Wed, 29 Jul 2026 11:02:25 -0400 Subject: [PATCH 46/52] feat(FOUR-32353): solving conflicts --- .env.dusk.testing | 2 - .env.example | 3 -- .../Providers/ProcessMakerServiceProvider.php | 45 +++++++------------ config/app.php | 4 -- config/octane.php | 4 +- 5 files changed, 19 insertions(+), 39 deletions(-) diff --git a/.env.dusk.testing b/.env.dusk.testing index a5434bf44a..7b284846d8 100644 --- a/.env.dusk.testing +++ b/.env.dusk.testing @@ -17,8 +17,6 @@ DATA_DB_PASSWORD=secret APP_URL=http://127.0.0.1 -OCTANE_ENABLED=false - SAUCELABS_BROWSER_TESTING=false SAUCELABS_USERNAME=processmaker SAUCELABS_ACCESS_KEY=eb78836b-b7c9-4800-95b4-69ef4be96106 diff --git a/.env.example b/.env.example index 38cd7f8cfb..c3a094135c 100644 --- a/.env.example +++ b/.env.example @@ -70,6 +70,3 @@ KEYCLOAK_CLIENT_SECRET= KEYCLOAK_BASE_URL= KEYCLOAK_USERNAME= KEYCLOAK_PASSWORD= -# Enable Octane compatibility listeners when running under `php artisan octane:start` -OCTANE_ENABLED=false -OCTANE_MAX_REQUESTS=500 diff --git a/ProcessMaker/Providers/ProcessMakerServiceProvider.php b/ProcessMaker/Providers/ProcessMakerServiceProvider.php index 331ae6d2a7..c4d09de820 100644 --- a/ProcessMaker/Providers/ProcessMakerServiceProvider.php +++ b/ProcessMaker/Providers/ProcessMakerServiceProvider.php @@ -17,12 +17,14 @@ use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Context; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\URL; use Laravel\Horizon\Horizon; use Laravel\Horizon\SystemProcessCounter; use Laravel\Horizon\WorkerCommandString; +use Laravel\Octane\Events\RequestTerminated; use Laravel\Passport\Client as PassportClient; use Lavary\Menu\Menu; use OpenApi\Analysers\AttributeAnnotationFactory; @@ -264,7 +266,7 @@ protected static function registerEvents(): void { // Listen to the events for our core screen // types and add our javascript - Facades\Event::listen(ScreenBuilderStarting::class, function ($event) { + Event::listen(ScreenBuilderStarting::class, function ($event) { // Add any extensions to form builder // and renderer from packages $event->manager->addPackageScripts($event->type); @@ -283,7 +285,7 @@ protected static function registerEvents(): void }); // Log Notifications - Facades\Event::listen(NotificationSent::class, function ($event) { + Event::listen(NotificationSent::class, function ($event) { $id = $event->notifiable->id; $notifiable = get_class($event->notifiable); $notification = get_class($event->notification); @@ -292,24 +294,24 @@ protected static function registerEvents(): void }); // Log Broadcasts (messages sent to laravel-echo-server and redis) - Facades\Event::listen(BroadcastNotificationCreated::class, function ($event) { + Event::listen(BroadcastNotificationCreated::class, function ($event) { $channels = implode(', ', $event->broadcastOn()); Log::debug('Broadcasting Notification ' . $event->broadcastType() . 'on channel(s) ' . $channels); }); // Fire job when task is assigned to a user - Facades\Event::listen(ActivityAssigned::class, function ($event) { + Event::listen(ActivityAssigned::class, function ($event) { $task_id = $event->getProcessRequestToken()->id; // Dispatch the SmartInbox job with the processRequestToken as parameter SmartInbox::dispatch($task_id); }); - Facades\Event::listen(MadeTenantCurrentEvent::class, function ($event) { + Event::listen(MadeTenantCurrentEvent::class, function ($event) { event(new TenantResolved($event->tenant)); }); - Facades\Event::listen(TenantNotFoundForRequestEvent::class, function ($event) { + Event::listen(TenantNotFoundForRequestEvent::class, function ($event) { if (config('app.multitenancy') === false || self::actuallyRunningInConsole()) { // This is expected if multitenancy is disabled. // We also need to check if we are running in a console command because @@ -334,7 +336,7 @@ protected static function registerEvents(): void } }); - Facades\Event::listen(function (CommandStarting $event) { + Event::listen(function (CommandStarting $event) { if ($event->command === 'l5-swagger:generate') { // Set the analyser to use the legacy DocBlockAnnotationFactory. This must // be set here because this config value is not serializable and cannot be cached. @@ -590,38 +592,23 @@ public static function getPackageBootTiming(): array } /** - * Register Octane-specific listeners for request lifecycle management. + * Reset per-request static state between Octane requests. * - * When OCTANE_ENABLED is true, this method registers: - * - A 'requestHandled' listener to reset per-request static state - * - A flush list for stateful singletons - * - A tick listener for memory monitoring + * Octane workers stay alive across requests, so static properties must be + * cleared to avoid leaking data from one request into the next. Singletons + * holding mutable state are handled by the 'flush' list in config/octane.php, + * which Octane applies on its own. */ private function registerOctaneListeners(): void { - if (!config('app.octane_enabled', false) || !class_exists('\Laravel\Octane\Octane')) { + if (!class_exists(RequestTerminated::class)) { return; } - $octane = \Laravel\Octane\Octane::class; - - // Reset per-request static state after each request - $octane::on('requestHandled', function ($request, $result) { + Event::listen(RequestTerminated::class, function () { self::resetQueryTime(); HandleRedirectListener::reset(); }); - - // Flush stateful singletons per request - $octane::flush(config('octane.flush', [])); - - // Monitor memory usage every 30 seconds - $octane::tick('octane-memory-monitor', function () { - $memory = memory_get_usage(true); - $threshold = 128 * 1024 * 1024; // 128MB - if ($memory > $threshold) { - Log::warning('Octane worker memory high: ' . round($memory / 1024 / 1024, 2) . 'MB'); - } - })->seconds(30); } /** diff --git a/config/app.php b/config/app.php index 72088b34ab..b3c5891f98 100644 --- a/config/app.php +++ b/config/app.php @@ -266,10 +266,6 @@ 'force_https' => env('FORCE_HTTPS', true), - // Enable Octane compatibility listeners when running under `php artisan octane:start`. - 'octane_enabled' => filter_var(env('OCTANE_ENABLED', false), FILTER_VALIDATE_BOOLEAN), - 'octane_max_requests' => (int) env('OCTANE_MAX_REQUESTS', 500), - 'nayra_docker_network' => env('NAYRA_DOCKER_NETWORK', 'host'), 'nayra_port' => env('NAYRA_PORT', 8080), diff --git a/config/octane.php b/config/octane.php index 13fe63eb5e..5a9a9c642a 100644 --- a/config/octane.php +++ b/config/octane.php @@ -8,7 +8,7 @@ | | 'flush' — Services with mutable state that must be recreated per request. | These singletons will be flushed (re-bound) on each request - | when OCTANE_ENABLED=true. + | automatically while the application runs under Octane. | | 'warm' — Services to pre-resolve once when an Octane worker starts, | avoiding lazy-resolution overhead on the first request. @@ -24,6 +24,8 @@ ], 'warm' => [ + ...Laravel\Octane\Octane::defaultServicesToWarm(), + // Services to pre-resolve on worker start ProcessMaker\Managers\PackageManager::class, ProcessMaker\Managers\LoginManager::class, From c8a6a04584a112b47ed22d2cb0501b600fac34d6 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Wed, 29 Jul 2026 11:12:20 -0400 Subject: [PATCH 47/52] feat: add test for octane --- .../Providers/ProcessMakerServiceProvider.php | 16 +--- .../Octane/ResetRequestStateTest.php | 84 +++++++++++++++++++ 2 files changed, 86 insertions(+), 14 deletions(-) create mode 100644 tests/unit/ProcessMaker/Octane/ResetRequestStateTest.php diff --git a/ProcessMaker/Providers/ProcessMakerServiceProvider.php b/ProcessMaker/Providers/ProcessMakerServiceProvider.php index c4d09de820..4d6040591f 100644 --- a/ProcessMaker/Providers/ProcessMakerServiceProvider.php +++ b/ProcessMaker/Providers/ProcessMakerServiceProvider.php @@ -45,13 +45,13 @@ use ProcessMaker\ImportExport\SignalHelper; use ProcessMaker\Jobs\SmartInbox; use ProcessMaker\LicensedPackageManifest; -use ProcessMaker\Listeners\HandleRedirectListener; use ProcessMaker\Managers; use ProcessMaker\Managers\MenuManager; use ProcessMaker\Managers\ScreenCompiledManager; use ProcessMaker\Models; use ProcessMaker\Multitenancy\Tenant; use ProcessMaker\Observers; +use ProcessMaker\Octane\ResetRequestState; use ProcessMaker\PolicyExtension; use ProcessMaker\Providers\PermissionServiceProvider; use ProcessMaker\Repositories\SettingsConfigRepository; @@ -535,15 +535,6 @@ public static function getQueryTime(): float return self::$queryTime; } - /** - * Reset the query time for Octane compatibility. - * This prevents timing metrics from leaking between requests. - */ - public static function resetQueryTime(): void - { - self::$queryTime = 0; - } - /** * Set the boot time for service providers. * @@ -605,10 +596,7 @@ private function registerOctaneListeners(): void return; } - Event::listen(RequestTerminated::class, function () { - self::resetQueryTime(); - HandleRedirectListener::reset(); - }); + Event::listen(RequestTerminated::class, ResetRequestState::class); } /** diff --git a/tests/unit/ProcessMaker/Octane/ResetRequestStateTest.php b/tests/unit/ProcessMaker/Octane/ResetRequestStateTest.php new file mode 100644 index 0000000000..03b4cf73a2 --- /dev/null +++ b/tests/unit/ProcessMaker/Octane/ResetRequestStateTest.php @@ -0,0 +1,84 @@ +assertGreaterThan(0, ProcessMakerServiceProvider::getQueryTime()); + + $listener = new ResetRequestState(); + $listener->handle(new RequestTerminated( + $this->app, + $this->app, + Request::create('/'), + new Response() + )); + + $this->assertSame(0.0, ProcessMakerServiceProvider::getQueryTime()); + } + + public function test_it_prevents_redirect_state_from_leaking_into_the_next_request(): void + { + Event::fake([RedirectToEvent::class]); + + $redirectListener = new RedirectStateProbe(); + $redirectListener->queue(ProcessRequest::factory()->create()); + + $listener = new ResetRequestState(); + $listener->handle(new RequestTerminated( + $this->app, + $this->app, + Request::create('/'), + new Response() + )); + + HandleRedirectListener::sendRedirectToEvent(); + + Event::assertNotDispatched(RedirectToEvent::class); + } + + public function test_octane_request_termination_automatically_resets_request_state(): void + { + Event::fake([RedirectToEvent::class]); + + $redirectListener = new RedirectStateProbe(); + $redirectListener->queue(ProcessRequest::factory()->create()); + + event(new RequestTerminated( + $this->app, + $this->app, + Request::create('/first-request'), + new Response() + )); + + HandleRedirectListener::sendRedirectToEvent(); + + Event::assertNotDispatched(RedirectToEvent::class); + } +} + +class RedirectStateProbe extends HandleRedirectListener +{ + public function queue(ProcessRequest $processRequest): void + { + $this->setRedirectTo($processRequest, 'processUpdated'); + } +} From a5a035802f391198824ee10e9844bdf907a2c709 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Wed, 29 Jul 2026 11:21:08 -0400 Subject: [PATCH 48/52] add octane resetRequestState class --- ProcessMaker/Octane/ResetRequestState.php | 17 +++++++++++++++++ .../Octane/ResetRequestStateTest.php | 16 +++------------- 2 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 ProcessMaker/Octane/ResetRequestState.php diff --git a/ProcessMaker/Octane/ResetRequestState.php b/ProcessMaker/Octane/ResetRequestState.php new file mode 100644 index 0000000000..45071e97ad --- /dev/null +++ b/ProcessMaker/Octane/ResetRequestState.php @@ -0,0 +1,17 @@ +assertGreaterThan(0, ProcessMakerServiceProvider::getQueryTime()); $listener = new ResetRequestState(); - $listener->handle(new RequestTerminated( - $this->app, - $this->app, - Request::create('/'), - new Response() - )); + $listener->handle(); $this->assertSame(0.0, ProcessMakerServiceProvider::getQueryTime()); } @@ -43,12 +38,7 @@ public function test_it_prevents_redirect_state_from_leaking_into_the_next_reque $redirectListener->queue(ProcessRequest::factory()->create()); $listener = new ResetRequestState(); - $listener->handle(new RequestTerminated( - $this->app, - $this->app, - Request::create('/'), - new Response() - )); + $listener->handle(); HandleRedirectListener::sendRedirectToEvent(); @@ -75,7 +65,7 @@ public function test_octane_request_termination_automatically_resets_request_sta } } -class RedirectStateProbe extends HandleRedirectListener +final class RedirectStateProbe extends HandleRedirectListener { public function queue(ProcessRequest $processRequest): void { From 741db2999ac6bb58519a7ecaddf8bf212183d02e Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Fri, 31 Jul 2026 10:26:43 -0400 Subject: [PATCH 49/52] feat: update config/octane --- config/octane.php | 222 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 210 insertions(+), 12 deletions(-) diff --git a/config/octane.php b/config/octane.php index 5a9a9c642a..598df4b7c6 100644 --- a/config/octane.php +++ b/config/octane.php @@ -1,20 +1,143 @@ env('OCTANE_SERVER', 'roadrunner'), + + /* + |-------------------------------------------------------------------------- + | Force HTTPS + |-------------------------------------------------------------------------- | - | 'warm' — Services to pre-resolve once when an Octane worker starts, - | avoiding lazy-resolution overhead on the first request. + | When this configuration value is set to "true", Octane will inform the + | framework that all absolute links must be generated using the HTTPS + | protocol. Otherwise your links may be generated using plain HTTP. | */ + 'https' => env('OCTANE_HTTPS', false), + + /* + |-------------------------------------------------------------------------- + | Octane Listeners + |-------------------------------------------------------------------------- + | + | All of the event listeners for Octane's events are defined below. These + | listeners are responsible for resetting your application's state for + | the next request. You may even add your own listeners to the list. + | + */ + + 'listeners' => [ + WorkerStarting::class => [ + EnsureUploadedFilesAreValid::class, + EnsureUploadedFilesCanBeMoved::class, + ], + + RequestReceived::class => [ + ...Octane::prepareApplicationForNextOperation(), + ...Octane::prepareApplicationForNextRequest(), + // + ], + + RequestHandled::class => [ + // + ], + + RequestTerminated::class => [ + // FlushUploadedFiles::class, + ], + + TaskReceived::class => [ + ...Octane::prepareApplicationForNextOperation(), + // + ], + + TaskTerminated::class => [ + // + ], + + TickReceived::class => [ + ...Octane::prepareApplicationForNextOperation(), + // + ], + + TickTerminated::class => [ + // + ], + + OperationTerminated::class => [ + FlushOnce::class, + FlushTemporaryContainerInstances::class, + // DisconnectFromDatabases::class, + // CollectGarbage::class, + ], + + WorkerErrorOccurred::class => [ + ReportException::class, + StopWorkerIfNecessary::class, + ], + + WorkerStopping::class => [ + CloseMonologHandlers::class, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Warm / Flush Bindings + |-------------------------------------------------------------------------- + | + | The bindings listed below will either be pre-warmed when a worker boots + | or they will be flushed before every new request. Flushing a binding + | will force the container to resolve that binding again when asked. + | + */ + + 'warm' => [ + ...Octane::defaultServicesToWarm(), + // Services to pre-resolve on worker start + ProcessMaker\Managers\PackageManager::class, + ProcessMaker\Managers\LoginManager::class, + ProcessMaker\Managers\IndexManager::class, + ], + 'flush' => [ // Services with mutable state that must be recreated per request ProcessMaker\Models\AnonymousUser::class, @@ -23,12 +146,87 @@ ProcessMaker\Managers\MenuManager::class, ], - 'warm' => [ - ...Laravel\Octane\Octane::defaultServicesToWarm(), + /* + |-------------------------------------------------------------------------- + | Octane Swoole Tables + |-------------------------------------------------------------------------- + | + | While using Swoole, you may define additional tables as required by the + | application. These tables can be used to store data that needs to be + | quickly accessed by other workers on the particular Swoole server. + | + */ - // Services to pre-resolve on worker start - ProcessMaker\Managers\PackageManager::class, - ProcessMaker\Managers\LoginManager::class, - ProcessMaker\Managers\IndexManager::class, + 'tables' => [ + 'example:1000' => [ + 'name' => 'string:1000', + 'votes' => 'int', + ], ], + + /* + |-------------------------------------------------------------------------- + | Octane Swoole Cache Table + |-------------------------------------------------------------------------- + | + | While using Swoole, you may leverage the Octane cache, which is powered + | by a Swoole table. You may set the maximum number of rows as well as + | the number of bytes per row using the configuration options below. + | + */ + + 'cache' => [ + 'rows' => 1000, + 'bytes' => 10000, + ], + + /* + |-------------------------------------------------------------------------- + | File Watching + |-------------------------------------------------------------------------- + | + | The following list of files and directories will be watched when using + | the --watch option offered by Octane. If any of the directories and + | files are changed, Octane will automatically reload your workers. + | + */ + + 'watch' => [ + 'app', + 'bootstrap', + 'config/**/*.php', + 'database/**/*.php', + 'public/**/*.php', + 'resources/**/*.php', + 'routes', + 'composer.lock', + '.env', + ], + + /* + |-------------------------------------------------------------------------- + | Garbage Collection Threshold + |-------------------------------------------------------------------------- + | + | When executing long-lived PHP scripts such as Octane, memory can build + | up before being cleared by PHP. You can force Octane to run garbage + | collection if your application consumes this amount of megabytes. + | + */ + + 'garbage' => 50, + + /* + |-------------------------------------------------------------------------- + | Maximum Execution Time + |-------------------------------------------------------------------------- + | + | The following setting configures the maximum execution time for requests + | being handled by Octane. You may set this value to 0 to indicate that + | there isn't a specific time limit on Octane request execution time. + | + */ + + 'max_execution_time' => 30, + ]; From 0e0a60bdd6952b8018021f75608b16f3597cdc65 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Fri, 7 Aug 2026 13:56:18 -0700 Subject: [PATCH 50/52] Fix security advisories --- composer.json | 6 +++--- composer.lock | 28 ++++++++++++++-------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/composer.json b/composer.json index 1bd4939f7f..c744e2055e 100644 --- a/composer.json +++ b/composer.json @@ -35,7 +35,7 @@ "laravel/ui": "^4.6", "lavary/laravel-menu": "^1.8", "lcobucci/jwt": "^5.6", - "league/commonmark": "^2.8.1", + "league/commonmark": "^2.9.0", "league/flysystem-aws-s3-v3": "^3.25.1", "mateusjunges/laravel-kafka": "^2.11", "mittwald/vault-php": "^2.1", @@ -86,7 +86,7 @@ "laravel/boost": "^2.4", "mockery/mockery": "^1.6", "phpunit/phpunit": "^12.5.8", - "squizlabs/php_codesniffer": "^3.11" + "squizlabs/php_codesniffer": "^3.13.6" }, "autoload": { "files": [ @@ -253,4 +253,4 @@ "ignore": [] } } -} \ No newline at end of file +} diff --git a/composer.lock b/composer.lock index 7424e10bfa..6e9e36bd83 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "39e08dd682bb95515f53d495a677b313", + "content-hash": "47d1471b5383bbd226596fd2add4531b", "packages": [ { "name": "aws/aws-crt-php", @@ -4008,16 +4008,16 @@ }, { "name": "league/commonmark", - "version": "2.8.2", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "59fb075d2101740c337c7216e3f32b36c204218b" + "reference": "5703d83ba3da3b2e356a5fedc848ed6d8ffb6529" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", - "reference": "59fb075d2101740c337c7216e3f32b36c204218b", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/5703d83ba3da3b2e356a5fedc848ed6d8ffb6529", + "reference": "5703d83ba3da3b2e356a5fedc848ed6d8ffb6529", "shasum": "" }, "require": { @@ -4039,8 +4039,8 @@ "github/gfm": "0.29.0", "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "phpstan/phpstan": "^2.0.0", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0 || ^12.0.0 || ^13.0.0", "scrutinizer/ocular": "^1.8.1", "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", @@ -4054,7 +4054,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.9-dev" + "dev-main": "2.10-dev" } }, "autoload": { @@ -4111,7 +4111,7 @@ "type": "tidelift" } ], - "time": "2026-03-19T13:16:38+00:00" + "time": "2026-08-03T13:42:31+00:00" }, { "name": "league/config", @@ -16292,16 +16292,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.13.5", + "version": "3.13.6", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4" + "reference": "4c378e1a528ea066890fc2397cbdd2f94eb2fc91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4", - "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/4c378e1a528ea066890fc2397cbdd2f94eb2fc91", + "reference": "4c378e1a528ea066890fc2397cbdd2f94eb2fc91", "shasum": "" }, "require": { @@ -16367,7 +16367,7 @@ "type": "thanks_dev" } ], - "time": "2025-11-04T16:30:35+00:00" + "time": "2026-08-06T00:17:32+00:00" }, { "name": "staabm/side-effects-detector", From aee6f730cfe664d249fc192cde3d28185a0b927d Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Mon, 10 Aug 2026 13:18:03 -0700 Subject: [PATCH 51/52] Update dependencies --- composer.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 7b9bfc7865..95ef01d1e5 100644 --- a/composer.json +++ b/composer.json @@ -161,10 +161,10 @@ "package-ab-testing": "1.4.2", "package-actions-by-email": "1.22.17", "package-advanced-user-manager": "1.13.4", - "package-ai": "1.16.25", + "package-ai": "1.16.26", "package-analytics-reporting": "1.11.5", "package-auth": "1.24.20", - "package-collections": "2.27.10", + "package-collections": "2.27.11", "package-comments": "1.16.4", "package-conversational-forms": "1.15.2", "package-data-sources": "1.34.13", @@ -180,12 +180,12 @@ "package-product-analytics": "1.5.11", "package-projects": "1.12.9", "package-rpa": "1.1.2", - "package-savedsearch": "1.43.15", + "package-savedsearch": "1.43.16", "package-slideshow": "1.4.3", "package-smart-extract": "1.0.1", "package-signature": "1.15.6", "package-testing": "1.8.2", - "package-translations": "2.14.6", + "package-translations": "2.14.7", "package-versions": "1.13.1", "package-vocabularies": "2.17.2", "package-webentry": "2.29.19", From 18bbc29940aea796a967f11ac367771a35cd92d5 Mon Sep 17 00:00:00 2001 From: ProcessMaker Bot <206180840+processmaker-bot@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:19:07 +0000 Subject: [PATCH 52/52] Version 2026.13.2 --- composer.json | 6 +++--- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index 95ef01d1e5..ad11ea335e 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "processmaker/processmaker", - "version": "2026.13.1", + "version": "2026.13.2", "description": "BPM PHP Software", "keywords": [ "php bpm processmaker" @@ -117,7 +117,7 @@ "Gmail" ], "processmaker": { - "build": "3f4181f9", + "build": "6557348b", "cicd-enabled": true, "custom": { "package-ellucian-ethos": "1.19.10", @@ -254,4 +254,4 @@ "ignore": [] } } -} +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e98c94133d..661ddeb413 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@processmaker/processmaker", - "version": "2026.13.1", + "version": "2026.13.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@processmaker/processmaker", - "version": "2026.13.1", + "version": "2026.13.2", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index c8e8ee9704..d861d535c3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@processmaker/processmaker", - "version": "2026.13.1", + "version": "2026.13.2", "description": "ProcessMaker 4", "author": "DevOps ", "license": "ISC",