@epilot/cli 0.1.117 → 0.1.119
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/definitions/ai-agents.json +121 -27
- package/definitions/customer-portal.json +207 -17
- package/definitions/message.json +164 -14
- package/dist/bin/epilot.js +6 -6
- package/dist/{chunk-PKLYEJHD.js → chunk-IKYUAORY.js} +3 -1
- package/dist/{completion-YY2UW6SA.js → completion-CPMUSY3E.js} +1 -1
- package/dist/{upgrade-YQ6STVES.js → upgrade-LASQG4TZ.js} +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"tags": [
|
|
46
46
|
"Agents Configuration"
|
|
47
47
|
],
|
|
48
|
-
"summary": "
|
|
48
|
+
"summary": "createAgent",
|
|
49
49
|
"description": "Creates a new custom agent. System skills cannot be created via this endpoint.",
|
|
50
50
|
"operationId": "createAgent",
|
|
51
51
|
"security": [
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"tags": [
|
|
91
91
|
"Agents Configuration"
|
|
92
92
|
],
|
|
93
|
-
"summary": "
|
|
93
|
+
"summary": "listAgents",
|
|
94
94
|
"description": "Lists agents from both system skills and custom agents.\nUse query parameters to filter by source, availability, or entity schema.\n",
|
|
95
95
|
"operationId": "listAgents",
|
|
96
96
|
"parameters": [
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
"tags": [
|
|
149
149
|
"Agents Configuration"
|
|
150
150
|
],
|
|
151
|
-
"summary": "
|
|
151
|
+
"summary": "getAgentById",
|
|
152
152
|
"description": "Retrieves an agent by ID. Supports both:\n- System skill IDs (prefixed): \"skill:email-categorizer\"\n- Custom agent IDs (UUID): \"0336a235-9417-4dd8-894c-fe81285bba75\"\n",
|
|
153
153
|
"operationId": "getAgentById",
|
|
154
154
|
"security": [
|
|
@@ -193,7 +193,7 @@
|
|
|
193
193
|
"tags": [
|
|
194
194
|
"Agents Configuration"
|
|
195
195
|
],
|
|
196
|
-
"summary": "
|
|
196
|
+
"summary": "updateAgentById",
|
|
197
197
|
"description": "Updates a custom agent. System skills cannot be updated via this endpoint.",
|
|
198
198
|
"operationId": "updateAgentById",
|
|
199
199
|
"security": [
|
|
@@ -248,7 +248,7 @@
|
|
|
248
248
|
"tags": [
|
|
249
249
|
"Agents Configuration"
|
|
250
250
|
],
|
|
251
|
-
"summary": "
|
|
251
|
+
"summary": "deleteAgentById",
|
|
252
252
|
"description": "Deletes a custom agent. System skills cannot be deleted via this endpoint.",
|
|
253
253
|
"security": [
|
|
254
254
|
{
|
|
@@ -288,7 +288,7 @@
|
|
|
288
288
|
"tags": [
|
|
289
289
|
"Agent Execution"
|
|
290
290
|
],
|
|
291
|
-
"summary": "
|
|
291
|
+
"summary": "executeAgent",
|
|
292
292
|
"description": "Executes an agent (system skill or custom agent).\nSupports both:\n- System skill IDs (prefixed): \"skill:email-categorizer\"\n- Custom agent IDs (UUID): \"0336a235-9417-4dd8-894c-fe81285bba75\"\n",
|
|
293
293
|
"operationId": "executeAgent",
|
|
294
294
|
"security": [
|
|
@@ -355,7 +355,7 @@
|
|
|
355
355
|
"tags": [
|
|
356
356
|
"Agent Execution"
|
|
357
357
|
],
|
|
358
|
-
"summary": "
|
|
358
|
+
"summary": "executeAgentStream",
|
|
359
359
|
"description": "Executes an agent with real-time streaming of tokens and tool events.\nReturns Server-Sent Events (SSE) stream with token-by-token output,\ntool call progress, and completion status.\n\nUnlike the async `/execute` endpoint which returns immediately with\nan execution_id for polling, this endpoint streams all events in real-time.\n\nSupports both:\n- System skill IDs (prefixed): \"skill:email-categorizer\"\n- Custom agent IDs (UUID): \"0336a235-9417-4dd8-894c-fe81285bba75\"\n",
|
|
360
360
|
"operationId": "executeAgentStream",
|
|
361
361
|
"security": [
|
|
@@ -422,7 +422,8 @@
|
|
|
422
422
|
"tags": [
|
|
423
423
|
"Agent Execution"
|
|
424
424
|
],
|
|
425
|
-
"summary": "
|
|
425
|
+
"summary": "listExecutions",
|
|
426
|
+
"description": "List executions",
|
|
426
427
|
"operationId": "listExecutions",
|
|
427
428
|
"security": [
|
|
428
429
|
{
|
|
@@ -485,7 +486,8 @@
|
|
|
485
486
|
"tags": [
|
|
486
487
|
"Agent Execution"
|
|
487
488
|
],
|
|
488
|
-
"summary": "
|
|
489
|
+
"summary": "getExecution",
|
|
490
|
+
"description": "Get execution by ID",
|
|
489
491
|
"operationId": "getExecution",
|
|
490
492
|
"security": [
|
|
491
493
|
{
|
|
@@ -530,7 +532,8 @@
|
|
|
530
532
|
"tags": [
|
|
531
533
|
"Agent Execution"
|
|
532
534
|
],
|
|
533
|
-
"summary": "
|
|
535
|
+
"summary": "cancelExecution",
|
|
536
|
+
"description": "Cancel execution",
|
|
534
537
|
"operationId": "cancelExecution",
|
|
535
538
|
"security": [
|
|
536
539
|
{
|
|
@@ -587,7 +590,7 @@
|
|
|
587
590
|
"tags": [
|
|
588
591
|
"Agent Execution"
|
|
589
592
|
],
|
|
590
|
-
"summary": "
|
|
593
|
+
"summary": "getExecutionTrace",
|
|
591
594
|
"description": "Returns the step-by-step reasoning and tool calls for ReAct mode executions. Returns empty iterations array for direct mode executions.",
|
|
592
595
|
"operationId": "getExecutionTrace",
|
|
593
596
|
"security": [
|
|
@@ -759,7 +762,7 @@
|
|
|
759
762
|
"tags": [
|
|
760
763
|
"Agent Execution"
|
|
761
764
|
],
|
|
762
|
-
"summary": "
|
|
765
|
+
"summary": "approveExecution",
|
|
763
766
|
"description": "Approves a pending tool action when execution is in waiting_approval status",
|
|
764
767
|
"operationId": "approveExecution",
|
|
765
768
|
"security": [
|
|
@@ -826,7 +829,7 @@
|
|
|
826
829
|
"tags": [
|
|
827
830
|
"Agent Execution"
|
|
828
831
|
],
|
|
829
|
-
"summary": "
|
|
832
|
+
"summary": "rejectExecution",
|
|
830
833
|
"description": "Rejects a pending tool action when execution is in waiting_approval status",
|
|
831
834
|
"operationId": "rejectExecution",
|
|
832
835
|
"security": [
|
|
@@ -894,7 +897,7 @@
|
|
|
894
897
|
"tags": [
|
|
895
898
|
"Agent Execution"
|
|
896
899
|
],
|
|
897
|
-
"summary": "
|
|
900
|
+
"summary": "streamExecution",
|
|
898
901
|
"description": "Reconnects to an execution's event stream after approval. Replays missed events from event log and continues streaming if execution is still running.",
|
|
899
902
|
"operationId": "streamExecution",
|
|
900
903
|
"security": [
|
|
@@ -950,7 +953,7 @@
|
|
|
950
953
|
"tags": [
|
|
951
954
|
"Chat"
|
|
952
955
|
],
|
|
953
|
-
"summary": "
|
|
956
|
+
"summary": "chat",
|
|
954
957
|
"description": "Initiates a streaming chat session with an AI agent. Supports server-side conversation memory via conversationId or client-provided history via clientHistory.",
|
|
955
958
|
"operationId": "chat",
|
|
956
959
|
"security": [
|
|
@@ -1007,7 +1010,7 @@
|
|
|
1007
1010
|
"tags": [
|
|
1008
1011
|
"Conversations"
|
|
1009
1012
|
],
|
|
1010
|
-
"summary": "
|
|
1013
|
+
"summary": "listConversations",
|
|
1011
1014
|
"description": "Lists conversations for the authenticated user, sorted by most recent.",
|
|
1012
1015
|
"operationId": "listConversations",
|
|
1013
1016
|
"security": [
|
|
@@ -1071,7 +1074,7 @@
|
|
|
1071
1074
|
"tags": [
|
|
1072
1075
|
"Conversations"
|
|
1073
1076
|
],
|
|
1074
|
-
"summary": "
|
|
1077
|
+
"summary": "getConversation",
|
|
1075
1078
|
"description": "Retrieves a conversation and its message history.",
|
|
1076
1079
|
"operationId": "getConversation",
|
|
1077
1080
|
"security": [
|
|
@@ -1126,7 +1129,7 @@
|
|
|
1126
1129
|
"tags": [
|
|
1127
1130
|
"Conversations"
|
|
1128
1131
|
],
|
|
1129
|
-
"summary": "
|
|
1132
|
+
"summary": "deleteConversation",
|
|
1130
1133
|
"description": "Deletes a conversation and all its messages.",
|
|
1131
1134
|
"operationId": "deleteConversation",
|
|
1132
1135
|
"security": [
|
|
@@ -1167,7 +1170,7 @@
|
|
|
1167
1170
|
"tags": [
|
|
1168
1171
|
"Conversations"
|
|
1169
1172
|
],
|
|
1170
|
-
"summary": "
|
|
1173
|
+
"summary": "submitConversationFeedback",
|
|
1171
1174
|
"description": "Records a thumbs up/down (with optional comment) for the assistant turn identified by its Langfuse trace id. The rating is persisted on the message and mirrored to Langfuse as a trace score.\n",
|
|
1172
1175
|
"operationId": "submitConversationFeedback",
|
|
1173
1176
|
"security": [
|
|
@@ -1505,14 +1508,6 @@
|
|
|
1505
1508
|
"type": "string"
|
|
1506
1509
|
},
|
|
1507
1510
|
"description": "For batch approval - list of action IDs to reject. Actions not in approved_action_ids are implicitly rejected."
|
|
1508
|
-
},
|
|
1509
|
-
"share_scope": {
|
|
1510
|
-
"type": "string",
|
|
1511
|
-
"enum": [
|
|
1512
|
-
"primary_only",
|
|
1513
|
-
"primary_and_relations"
|
|
1514
|
-
],
|
|
1515
|
-
"description": "For `partnering.proposeAssignment` approvals. `primary_only` (default) shares only the primary entity; `primary_and_relations` also shares every entity in the proposal's `related_entities` as a child of the primary. Ignored by other tools.\n"
|
|
1516
1511
|
}
|
|
1517
1512
|
}
|
|
1518
1513
|
},
|
|
@@ -1887,6 +1882,105 @@
|
|
|
1887
1882
|
}
|
|
1888
1883
|
}
|
|
1889
1884
|
},
|
|
1885
|
+
"AgentExecutionEventStatus": {
|
|
1886
|
+
"type": "string",
|
|
1887
|
+
"description": "Lifecycle status carried on an agent execution event.\n\nDeliberately narrower than `ExecutionStatus`, which is the stored status of\nthe execution row: `pending` and `running` both surface as `started`, and\n`cancelled` surfaces as `failed`. Consumers must not assume the two\nvocabularies are interchangeable.\n",
|
|
1888
|
+
"enum": [
|
|
1889
|
+
"started",
|
|
1890
|
+
"completed",
|
|
1891
|
+
"failed",
|
|
1892
|
+
"approval_required"
|
|
1893
|
+
]
|
|
1894
|
+
},
|
|
1895
|
+
"AgentExecutionEvent": {
|
|
1896
|
+
"type": "object",
|
|
1897
|
+
"description": "Detail payload of the `agent-execution-status-update` event, published on\nthe AI Agents event bus with source `ai-agents`.\n\n`execution_context` and `input` are present on every status, so a consumer\ncan tell whether an execution is theirs, and what it belonged to, from the\nterminal event alone — without a secondary lookup.\n",
|
|
1898
|
+
"required": [
|
|
1899
|
+
"executionId",
|
|
1900
|
+
"agentId",
|
|
1901
|
+
"orgId",
|
|
1902
|
+
"execution_status"
|
|
1903
|
+
],
|
|
1904
|
+
"properties": {
|
|
1905
|
+
"executionId": {
|
|
1906
|
+
"type": "string",
|
|
1907
|
+
"description": "The agent execution this event reports on"
|
|
1908
|
+
},
|
|
1909
|
+
"agentId": {
|
|
1910
|
+
"$ref": "#/components/schemas/AgentId"
|
|
1911
|
+
},
|
|
1912
|
+
"orgId": {
|
|
1913
|
+
"type": "string"
|
|
1914
|
+
},
|
|
1915
|
+
"userId": {
|
|
1916
|
+
"type": "string"
|
|
1917
|
+
},
|
|
1918
|
+
"execution_status": {
|
|
1919
|
+
"$ref": "#/components/schemas/AgentExecutionEventStatus"
|
|
1920
|
+
},
|
|
1921
|
+
"execution_context": {
|
|
1922
|
+
"$ref": "#/components/schemas/ExecutionContext"
|
|
1923
|
+
},
|
|
1924
|
+
"input": {
|
|
1925
|
+
"type": "object",
|
|
1926
|
+
"additionalProperties": true,
|
|
1927
|
+
"description": "The execution input, as supplied by the caller of the execute endpoint"
|
|
1928
|
+
},
|
|
1929
|
+
"output": {
|
|
1930
|
+
"type": "object",
|
|
1931
|
+
"additionalProperties": true,
|
|
1932
|
+
"description": "Present on `completed` — the execution result"
|
|
1933
|
+
},
|
|
1934
|
+
"error": {
|
|
1935
|
+
"type": "object",
|
|
1936
|
+
"description": "Present on `failed`",
|
|
1937
|
+
"properties": {
|
|
1938
|
+
"message": {
|
|
1939
|
+
"type": "string"
|
|
1940
|
+
},
|
|
1941
|
+
"code": {
|
|
1942
|
+
"type": "string"
|
|
1943
|
+
},
|
|
1944
|
+
"stack": {
|
|
1945
|
+
"type": "string"
|
|
1946
|
+
}
|
|
1947
|
+
}
|
|
1948
|
+
},
|
|
1949
|
+
"duration": {
|
|
1950
|
+
"type": "integer",
|
|
1951
|
+
"description": "Wall-clock duration in milliseconds, present on `completed`"
|
|
1952
|
+
},
|
|
1953
|
+
"iterations": {
|
|
1954
|
+
"type": "integer"
|
|
1955
|
+
},
|
|
1956
|
+
"iteration": {
|
|
1957
|
+
"type": "integer"
|
|
1958
|
+
},
|
|
1959
|
+
"message": {
|
|
1960
|
+
"type": "string",
|
|
1961
|
+
"description": "Present on `approval_required` — what is awaiting approval"
|
|
1962
|
+
},
|
|
1963
|
+
"toolCalls": {
|
|
1964
|
+
"type": "array",
|
|
1965
|
+
"items": {
|
|
1966
|
+
"type": "object",
|
|
1967
|
+
"properties": {
|
|
1968
|
+
"name": {
|
|
1969
|
+
"type": "string"
|
|
1970
|
+
},
|
|
1971
|
+
"args": {
|
|
1972
|
+
"type": "object",
|
|
1973
|
+
"additionalProperties": true
|
|
1974
|
+
}
|
|
1975
|
+
}
|
|
1976
|
+
}
|
|
1977
|
+
},
|
|
1978
|
+
"timestamp": {
|
|
1979
|
+
"type": "string",
|
|
1980
|
+
"format": "date-time"
|
|
1981
|
+
}
|
|
1982
|
+
}
|
|
1983
|
+
},
|
|
1890
1984
|
"ToolPreview": {
|
|
1891
1985
|
"type": "object",
|
|
1892
1986
|
"description": "Structured preview data for approval UI. Provides a generic format that any tool can populate.",
|
|
@@ -884,7 +884,7 @@
|
|
|
884
884
|
"/v2/portal/consumption": {
|
|
885
885
|
"get": {
|
|
886
886
|
"operationId": "getConsumption",
|
|
887
|
-
"summary": "
|
|
887
|
+
"summary": "getConsumption",
|
|
888
888
|
"description": "Get energy consumption data between a given time period.",
|
|
889
889
|
"tags": [
|
|
890
890
|
"ECP"
|
|
@@ -1039,7 +1039,7 @@
|
|
|
1039
1039
|
"/v2/portal/visualization:export": {
|
|
1040
1040
|
"post": {
|
|
1041
1041
|
"operationId": "prepareVisualizationExport",
|
|
1042
|
-
"summary": "
|
|
1042
|
+
"summary": "prepareVisualizationExport",
|
|
1043
1043
|
"description": "Asks an installed App to prepare a downloadable export of a visualization (consumption chart, dynamic tariff chart, etc.). The export is produced by the third-party App via a configured portal extension hook of type `dataExport` — this endpoint does not generate the file itself, it forwards the request to the configured hook and returns the descriptor the App provides (typically a `download_url`).\n",
|
|
1044
1044
|
"tags": [
|
|
1045
1045
|
"ECP"
|
|
@@ -1143,7 +1143,7 @@
|
|
|
1143
1143
|
"/v2/portal/visualization/metadata": {
|
|
1144
1144
|
"get": {
|
|
1145
1145
|
"operationId": "getVisualizationMetadata",
|
|
1146
|
-
"summary": "
|
|
1146
|
+
"summary": "getVisualizationMetadata",
|
|
1147
1147
|
"description": "Returns runtime metadata describing how a visualization (consumption / price / cost chart) should be rendered for a given portal context (meter, contract, etc). Resolves the extension's `visualizationMetadata` hook implicitly from `app_id` + `extensionId` and invokes it. Supplies the response as a structured payload that the portal uses to configure type/aggregation options, supported intervals, and the available data range.\n",
|
|
1148
1148
|
"tags": [
|
|
1149
1149
|
"ECP"
|
|
@@ -1211,7 +1211,7 @@
|
|
|
1211
1211
|
"/v2/portal/costs": {
|
|
1212
1212
|
"get": {
|
|
1213
1213
|
"operationId": "getCosts",
|
|
1214
|
-
"summary": "
|
|
1214
|
+
"summary": "getCosts",
|
|
1215
1215
|
"description": "Get energy cost data between a given time period.",
|
|
1216
1216
|
"tags": [
|
|
1217
1217
|
"ECP"
|
|
@@ -1385,7 +1385,7 @@
|
|
|
1385
1385
|
"/v2/portal/prices": {
|
|
1386
1386
|
"get": {
|
|
1387
1387
|
"operationId": "getPrices",
|
|
1388
|
-
"summary": "
|
|
1388
|
+
"summary": "getPrices",
|
|
1389
1389
|
"description": "Get energy prices data between a given time period.",
|
|
1390
1390
|
"tags": [
|
|
1391
1391
|
"ECP"
|
|
@@ -3119,6 +3119,10 @@
|
|
|
3119
3119
|
"journey_registration_email": {
|
|
3120
3120
|
"type": "string",
|
|
3121
3121
|
"description": "The email address registered in the journey's Login & Registration block"
|
|
3122
|
+
},
|
|
3123
|
+
"journey_registration_portal_id": {
|
|
3124
|
+
"type": "string",
|
|
3125
|
+
"description": "The portal selected on the journey's Login & Registration block, used to target the registration link to that portal"
|
|
3122
3126
|
}
|
|
3123
3127
|
}
|
|
3124
3128
|
}
|
|
@@ -6965,6 +6969,56 @@
|
|
|
6965
6969
|
}
|
|
6966
6970
|
}
|
|
6967
6971
|
},
|
|
6972
|
+
"/v2/portal/user/file/{id}/preview": {
|
|
6973
|
+
"get": {
|
|
6974
|
+
"operationId": "getFilePreview",
|
|
6975
|
+
"summary": "getFilePreview",
|
|
6976
|
+
"description": "resolves an in-portal preview for a file. Returns a Content-Disposition: inline URL for directly-previewable files (PDF, common image formats), or a document-api PDF conversion result for the Office formats it currently supports (docx/xls/xlsx/xlsm) -- NOT doc/csv/pptx, which document-api's conversion does not cover today. Returns { kind: \"unsupported\" } (no url) for anything else, so the caller can fall back to the existing download flow. An optional `download_url` is returned for all kinds — including \"unsupported\" — whenever the file entity exposes one, so the client can render a real anchor for its Download action; it is only a Content-Disposition: attachment URL for private files, and for other access levels it is the plain object URL, which may render inline. The previewability decision is made server-side from the file's own filename/mime_type — never trust a client-supplied kind for anything security-sensitive.",
|
|
6977
|
+
"tags": [
|
|
6978
|
+
"ECP"
|
|
6979
|
+
],
|
|
6980
|
+
"security": [
|
|
6981
|
+
{
|
|
6982
|
+
"PortalAuth": []
|
|
6983
|
+
}
|
|
6984
|
+
],
|
|
6985
|
+
"parameters": [
|
|
6986
|
+
{
|
|
6987
|
+
"in": "path",
|
|
6988
|
+
"name": "id",
|
|
6989
|
+
"schema": {
|
|
6990
|
+
"$ref": "#/components/schemas/EntityId"
|
|
6991
|
+
},
|
|
6992
|
+
"required": true,
|
|
6993
|
+
"description": "The Id of a file"
|
|
6994
|
+
}
|
|
6995
|
+
],
|
|
6996
|
+
"responses": {
|
|
6997
|
+
"200": {
|
|
6998
|
+
"description": "The file preview was resolved (which may still indicate kind \"unsupported\" with no url).",
|
|
6999
|
+
"content": {
|
|
7000
|
+
"application/json": {
|
|
7001
|
+
"schema": {
|
|
7002
|
+
"$ref": "#/components/schemas/FilePreviewResult"
|
|
7003
|
+
}
|
|
7004
|
+
}
|
|
7005
|
+
}
|
|
7006
|
+
},
|
|
7007
|
+
"401": {
|
|
7008
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7009
|
+
},
|
|
7010
|
+
"403": {
|
|
7011
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7012
|
+
},
|
|
7013
|
+
"404": {
|
|
7014
|
+
"$ref": "#/components/responses/NotFound"
|
|
7015
|
+
},
|
|
7016
|
+
"500": {
|
|
7017
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
7018
|
+
}
|
|
7019
|
+
}
|
|
7020
|
+
}
|
|
7021
|
+
},
|
|
6968
7022
|
"/v2/portal/user/file/{id}/downloaded": {
|
|
6969
7023
|
"post": {
|
|
6970
7024
|
"operationId": "trackFileDownloaded",
|
|
@@ -7023,7 +7077,7 @@
|
|
|
7023
7077
|
"/v2/portal/user/files/count-by-entity": {
|
|
7024
7078
|
"get": {
|
|
7025
7079
|
"operationId": "getFilesCountByEntity",
|
|
7026
|
-
"summary": "
|
|
7080
|
+
"summary": "getFilesCountByEntity",
|
|
7027
7081
|
"description": "Fetch file counts for all ECP user related entities",
|
|
7028
7082
|
"deprecated": true,
|
|
7029
7083
|
"tags": [
|
|
@@ -7911,7 +7965,7 @@
|
|
|
7911
7965
|
"/v2/portal/entity/{slug}/{id}/workflows": {
|
|
7912
7966
|
"get": {
|
|
7913
7967
|
"operationId": "getEntityWorkflows",
|
|
7914
|
-
"summary": "
|
|
7968
|
+
"summary": "getEntityWorkflows",
|
|
7915
7969
|
"description": "Get all workflows associated with an entity (requires access to the entity)",
|
|
7916
7970
|
"tags": [
|
|
7917
7971
|
"ECP"
|
|
@@ -7980,7 +8034,7 @@
|
|
|
7980
8034
|
"/v2/portal/entity/{slug}/{id}/workflows/linearized": {
|
|
7981
8035
|
"get": {
|
|
7982
8036
|
"operationId": "getEntityPortalWorkflows",
|
|
7983
|
-
"summary": "
|
|
8037
|
+
"summary": "getEntityPortalWorkflows",
|
|
7984
8038
|
"description": "Get all portal-relevant workflows associated with an entity (requires access to the entity),\nlinearized by the Workflows API into a flat, ordered list of portal-visible tasks.\n\nUnlike `getEntityWorkflows`, this endpoint returns a single uniform shape for both legacy\n(V1) workflow executions and graph-based (V2) flow executions — the execution graph is\nalready resolved server-side (active path, task reachability, chronological ordering), so\nclients can render a timeline without any graph traversal logic.\n\nTasks carry the config of both portal audiences (`ecp` and `installer`); clients filter\nper their configured audience, so one response serves every block on a page.\n",
|
|
7985
8039
|
"tags": [
|
|
7986
8040
|
"ECP"
|
|
@@ -8046,10 +8100,96 @@
|
|
|
8046
8100
|
}
|
|
8047
8101
|
}
|
|
8048
8102
|
},
|
|
8103
|
+
"/v2/portal/entities/workflows/linearized/batch": {
|
|
8104
|
+
"post": {
|
|
8105
|
+
"operationId": "getEntityPortalWorkflowsBatch",
|
|
8106
|
+
"summary": "getEntityPortalWorkflowsBatch",
|
|
8107
|
+
"description": "Batch variant of `getEntityPortalWorkflows`: returns portal-relevant workflows for\nup to 50 entities — schemas may differ — in a single call, each already linearized\nby the Workflows API into a flat, ordered list of portal-visible tasks.\n\nIntended for portal list views (e.g. an entity list where every card shows its\nworkflow progress). Entities the portal user cannot access are omitted from the\nresponse; an entry with an empty task list means the entity has no portal-relevant\nworkflow.\n",
|
|
8108
|
+
"tags": [
|
|
8109
|
+
"ECP"
|
|
8110
|
+
],
|
|
8111
|
+
"security": [
|
|
8112
|
+
{
|
|
8113
|
+
"PortalAuth": []
|
|
8114
|
+
}
|
|
8115
|
+
],
|
|
8116
|
+
"requestBody": {
|
|
8117
|
+
"description": "Entities to load portal workflows for",
|
|
8118
|
+
"required": true,
|
|
8119
|
+
"content": {
|
|
8120
|
+
"application/json": {
|
|
8121
|
+
"schema": {
|
|
8122
|
+
"type": "object",
|
|
8123
|
+
"properties": {
|
|
8124
|
+
"entities": {
|
|
8125
|
+
"type": "array",
|
|
8126
|
+
"items": {
|
|
8127
|
+
"type": "object",
|
|
8128
|
+
"properties": {
|
|
8129
|
+
"id": {
|
|
8130
|
+
"type": "string",
|
|
8131
|
+
"description": "ID of the entity"
|
|
8132
|
+
},
|
|
8133
|
+
"slug": {
|
|
8134
|
+
"type": "string",
|
|
8135
|
+
"description": "Schema slug of the entity",
|
|
8136
|
+
"example": "order"
|
|
8137
|
+
}
|
|
8138
|
+
},
|
|
8139
|
+
"required": [
|
|
8140
|
+
"id",
|
|
8141
|
+
"slug"
|
|
8142
|
+
]
|
|
8143
|
+
},
|
|
8144
|
+
"minItems": 1,
|
|
8145
|
+
"maxItems": 50
|
|
8146
|
+
}
|
|
8147
|
+
},
|
|
8148
|
+
"required": [
|
|
8149
|
+
"entities"
|
|
8150
|
+
]
|
|
8151
|
+
}
|
|
8152
|
+
}
|
|
8153
|
+
}
|
|
8154
|
+
},
|
|
8155
|
+
"responses": {
|
|
8156
|
+
"200": {
|
|
8157
|
+
"description": "One entry per accessible entity, each with its linearized workflows",
|
|
8158
|
+
"content": {
|
|
8159
|
+
"application/json": {
|
|
8160
|
+
"schema": {
|
|
8161
|
+
"type": "object",
|
|
8162
|
+
"properties": {
|
|
8163
|
+
"results": {
|
|
8164
|
+
"type": "array",
|
|
8165
|
+
"items": {
|
|
8166
|
+
"$ref": "#/components/schemas/EntityPortalWorkflows"
|
|
8167
|
+
}
|
|
8168
|
+
}
|
|
8169
|
+
}
|
|
8170
|
+
}
|
|
8171
|
+
}
|
|
8172
|
+
}
|
|
8173
|
+
},
|
|
8174
|
+
"400": {
|
|
8175
|
+
"$ref": "#/components/responses/InvalidRequest"
|
|
8176
|
+
},
|
|
8177
|
+
"401": {
|
|
8178
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8179
|
+
},
|
|
8180
|
+
"403": {
|
|
8181
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8182
|
+
},
|
|
8183
|
+
"500": {
|
|
8184
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
8185
|
+
}
|
|
8186
|
+
}
|
|
8187
|
+
}
|
|
8188
|
+
},
|
|
8049
8189
|
"/v2/portal/metering/reading/photo": {
|
|
8050
8190
|
"post": {
|
|
8051
8191
|
"operationId": "uploadMeterReadingPhoto",
|
|
8052
|
-
"summary": "
|
|
8192
|
+
"summary": "uploadMeterReadingPhoto",
|
|
8053
8193
|
"description": "Uploads a Meter Reading photo and - if enabled - gives back data extracted from the photo.",
|
|
8054
8194
|
"tags": [
|
|
8055
8195
|
"ECP"
|
|
@@ -8104,7 +8244,7 @@
|
|
|
8104
8244
|
"/v2/portal/metering/reading": {
|
|
8105
8245
|
"post": {
|
|
8106
8246
|
"operationId": "createMeterReading",
|
|
8107
|
-
"summary": "
|
|
8247
|
+
"summary": "createMeterReading",
|
|
8108
8248
|
"description": "Inserts a new meter reading.",
|
|
8109
8249
|
"tags": [
|
|
8110
8250
|
"ECP"
|
|
@@ -8171,6 +8311,7 @@
|
|
|
8171
8311
|
"/v2/portal/metering/reading/allowed-range/{meter_id}": {
|
|
8172
8312
|
"get": {
|
|
8173
8313
|
"operationId": "getAllowedMeterReadingRange",
|
|
8314
|
+
"summary": "getAllowedMeterReadingRange",
|
|
8174
8315
|
"description": "Get allowed reading range for all counters of a meter from the configured\nthird-party plausibility check hook using 'range' mode. This endpoint requires\na plausibility check hook to be configured for the portal.\n",
|
|
8175
8316
|
"tags": [
|
|
8176
8317
|
"ECP"
|
|
@@ -8272,7 +8413,7 @@
|
|
|
8272
8413
|
"/v2/portal/metering/readings": {
|
|
8273
8414
|
"post": {
|
|
8274
8415
|
"operationId": "getMeterReadings",
|
|
8275
|
-
"summary": "
|
|
8416
|
+
"summary": "getMeterReadings",
|
|
8276
8417
|
"description": "Fetches meter readings for a counter and optionally resolves Handlebars\ntemplate strings against each reading object using @epilot/variables.\n",
|
|
8277
8418
|
"tags": [
|
|
8278
8419
|
"ECP"
|
|
@@ -9617,7 +9758,7 @@
|
|
|
9617
9758
|
"/v2/portal/campaign/{campaign_id}/entity:status": {
|
|
9618
9759
|
"put": {
|
|
9619
9760
|
"operationId": "updateCampaignPortalBlockStatus",
|
|
9620
|
-
"summary": "
|
|
9761
|
+
"summary": "updateCampaignPortalBlockStatus",
|
|
9621
9762
|
"description": "Updates the status of a campaign portal block for multiple recipients.",
|
|
9622
9763
|
"tags": [
|
|
9623
9764
|
"ECP"
|
|
@@ -10271,7 +10412,7 @@
|
|
|
10271
10412
|
"items": {
|
|
10272
10413
|
"$ref": "#/components/schemas/SwappableConfig"
|
|
10273
10414
|
},
|
|
10274
|
-
"description": "
|
|
10415
|
+
"description": "Optional, opt-in configuration items to additionally swap on top of the always-swapped pages and functional config. Defaults to an empty list (nothing extra swapped). Domain and access/security settings can never be swapped."
|
|
10275
10416
|
}
|
|
10276
10417
|
}
|
|
10277
10418
|
}
|
|
@@ -11579,6 +11720,10 @@
|
|
|
11579
11720
|
"message": {
|
|
11580
11721
|
"type": "string",
|
|
11581
11722
|
"description": "Error message"
|
|
11723
|
+
},
|
|
11724
|
+
"reason": {
|
|
11725
|
+
"type": "string",
|
|
11726
|
+
"description": "Machine-readable cause, when the API can name one. `PORTAL_USER_PENDING_ACTIVATION` means the portal user is authenticated but not mapped to a contact yet, so re-authenticating will not help."
|
|
11582
11727
|
}
|
|
11583
11728
|
}
|
|
11584
11729
|
},
|
|
@@ -11994,7 +12139,7 @@
|
|
|
11994
12139
|
},
|
|
11995
12140
|
"identity_providers": {
|
|
11996
12141
|
"type": "array",
|
|
11997
|
-
"description": "SSO identity providers for the portal. When sent on a portal save (PUT/POST),\nthe list is fully synced — incoming providers are upserted and any existing\nproviders not in the list are deleted. Omit the field to leave SSO\nconfiguration unchanged; send an empty array to remove all providers.\n\
|
|
12142
|
+
"description": "SSO identity providers for the portal. When sent on a portal save (PUT/POST),\nthe list is fully synced — incoming providers are upserted and any existing\nproviders not in the list are deleted. Omit the field to leave SSO\nconfiguration unchanged; send an empty array to remove all providers.\n\nSecrets: a provider sent without `oidc_config.client_secret` keeps the\nstored secret for the same slug; an explicit empty string clears it.\n`getPortalConfigV3` returns providers with raw secrets redacted;\n`{{ env.VAR }}` references pass through.\n",
|
|
11998
12143
|
"items": {
|
|
11999
12144
|
"$ref": "#/components/schemas/ProviderConfig"
|
|
12000
12145
|
}
|
|
@@ -14369,6 +14514,33 @@
|
|
|
14369
14514
|
}
|
|
14370
14515
|
]
|
|
14371
14516
|
},
|
|
14517
|
+
"FilePreviewResult": {
|
|
14518
|
+
"type": "object",
|
|
14519
|
+
"required": [
|
|
14520
|
+
"kind"
|
|
14521
|
+
],
|
|
14522
|
+
"properties": {
|
|
14523
|
+
"kind": {
|
|
14524
|
+
"type": "string",
|
|
14525
|
+
"description": "What kind of preview (if any) is available. \"pdf\" covers both native PDFs and Office documents that were converted to PDF server-side. \"unsupported\" means no preview is available and the caller should fall back to download.",
|
|
14526
|
+
"enum": [
|
|
14527
|
+
"pdf",
|
|
14528
|
+
"image",
|
|
14529
|
+
"unsupported"
|
|
14530
|
+
]
|
|
14531
|
+
},
|
|
14532
|
+
"url": {
|
|
14533
|
+
"type": "string",
|
|
14534
|
+
"format": "uri",
|
|
14535
|
+
"description": "A Content-Disposition: inline URL to render in a preview viewer. Present only when kind is \"pdf\" or \"image\". Short-lived — do not cache across dialog opens."
|
|
14536
|
+
},
|
|
14537
|
+
"download_url": {
|
|
14538
|
+
"type": "string",
|
|
14539
|
+
"format": "uri",
|
|
14540
|
+
"description": "Optional download URL for the file, returned for any kind — including \"unsupported\" — whenever the file entity exposes one. It is only a Content-Disposition: attachment URL for files with access_control \"private\", where it is a short-lived signed URL; for any other access level it is the file entity's plain public/CDN object URL, which carries no attachment disposition and may render inline in the browser. Absent when the file entity exposes no usable URL, so clients must handle it being missing."
|
|
14541
|
+
}
|
|
14542
|
+
}
|
|
14543
|
+
},
|
|
14372
14544
|
"EntityFileCount": {
|
|
14373
14545
|
"type": "object",
|
|
14374
14546
|
"required": [
|
|
@@ -14868,6 +15040,26 @@
|
|
|
14868
15040
|
"is_active"
|
|
14869
15041
|
]
|
|
14870
15042
|
},
|
|
15043
|
+
"EntityPortalWorkflows": {
|
|
15044
|
+
"type": "object",
|
|
15045
|
+
"description": "Linearized portal workflows of a single entity",
|
|
15046
|
+
"properties": {
|
|
15047
|
+
"entity_id": {
|
|
15048
|
+
"type": "string"
|
|
15049
|
+
},
|
|
15050
|
+
"portal_workflows": {
|
|
15051
|
+
"type": "array",
|
|
15052
|
+
"description": "Empty when the entity has no portal-relevant workflow",
|
|
15053
|
+
"items": {
|
|
15054
|
+
"$ref": "#/components/schemas/PortalWorkflow"
|
|
15055
|
+
}
|
|
15056
|
+
}
|
|
15057
|
+
},
|
|
15058
|
+
"required": [
|
|
15059
|
+
"entity_id",
|
|
15060
|
+
"portal_workflows"
|
|
15061
|
+
]
|
|
15062
|
+
},
|
|
14871
15063
|
"PortalTaskConfig": {
|
|
14872
15064
|
"type": "object",
|
|
14873
15065
|
"description": "Portal-specific (ECP / installer) display config of a workflow task",
|
|
@@ -19211,10 +19403,8 @@
|
|
|
19211
19403
|
},
|
|
19212
19404
|
"SwappableConfig": {
|
|
19213
19405
|
"type": "string",
|
|
19406
|
+
"description": "Optional configuration item that a portal swap can additionally include. The swap always transfers the pages and the functional experience config that keep the portal working. These items are opt-in on top of that and are OFF by default. Domain and access/security settings (domain, cognito_details, auth_settings) can never be swapped and are therefore not part of this enum.",
|
|
19214
19407
|
"enum": [
|
|
19215
|
-
"all",
|
|
19216
|
-
"domain",
|
|
19217
|
-
"users",
|
|
19218
19408
|
"email_templates"
|
|
19219
19409
|
]
|
|
19220
19410
|
},
|
package/definitions/message.json
CHANGED
|
@@ -585,7 +585,7 @@
|
|
|
585
585
|
"post": {
|
|
586
586
|
"operationId": "getUnreadCounts",
|
|
587
587
|
"summary": "getUnreadCounts",
|
|
588
|
-
"description": "Unread counts for several named scopes in one request.\n\nA scope is a name plus the same parameters the thread list already takes (`q`, `inbox_id`),\nso a scope's count and the list beneath it are the same predicate and agree by construction.\nThe server adds only the read-state condition; it does not re-author the caller's view.\n\nThe `organization` scope is the exception and takes no `q`: it reuses the four canonical\ncentral-inbox queries, so its numbers match `getUnread` exactly.\n\
|
|
588
|
+
"description": "Unread counts for several named scopes in one request.\n\nA scope is a name plus the same parameters the thread list already takes (`q`, `inbox_id`),\nso a scope's count and the list beneath it are the same predicate and agree by construction.\nThe server adds only the read-state condition; it does not re-author the caller's view.\n\nThe `organization` scope is the exception and takes no `q`: it reuses the four canonical\ncentral-inbox queries, so its numbers match `getUnread` exactly.\n\nWhich buckets come back varies by scope type and actor. Every scope other than `organization`\nreturns `unread` alone. An `organization` scope returns all four (`unread`, `drafts`,\n`unassigned`, `spam`) for `actor: organization`, and `unread` and `drafts` only for\n`actor: user`. `getUnread` returns all four for both actors; this endpoint omits the two that\nno per-user surface renders, since each costs an aggregation.\n\nGated on the `message-unread-counts` flag, evaluated once per request against the calling\norg. With the flag off the response is `{ \"enabled\": false, \"counts\": {} }` and no\nElasticsearch query is issued.\n",
|
|
589
589
|
"tags": [
|
|
590
590
|
"Messages"
|
|
591
591
|
],
|
|
@@ -611,7 +611,7 @@
|
|
|
611
611
|
}
|
|
612
612
|
},
|
|
613
613
|
"400": {
|
|
614
|
-
"description": "The request names more scopes than the cap allows, repeats a scope name, or omits `q
|
|
614
|
+
"description": "The request names more scopes than the cap allows, repeats a scope name, or omits both\n`q` and `view` on a scope type that needs a predicate. Over-cap requests are refused rather than truncated:\na silently dropped scope renders as a missing badge, which is indistinguishable from\nzero unread.\n"
|
|
615
615
|
},
|
|
616
616
|
"403": {
|
|
617
617
|
"description": "Forbidden"
|
|
@@ -832,7 +832,7 @@
|
|
|
832
832
|
"post": {
|
|
833
833
|
"operationId": "getAssigneeWorkload",
|
|
834
834
|
"summary": "getAssigneeWorkload",
|
|
835
|
-
"description": "Return the open-thread workload for a set of user ids.\n\nFor each requested user id, returns the number of *open* threads assigned\ndirectly to that user
|
|
835
|
+
"description": "Return the open-thread workload for a set of user ids.\n\nFor each requested user id, returns the number of *open* threads assigned\ndirectly to that user \u2014 matching what the user sees in their central-inbox\nopen view: in inbox, not trashed, not done, and excluding notification-only\nand spam threads.\n\nOnly threads assigned directly to a user are counted; threads assigned to a\ngroup the user belongs to are not. Intended for assignment load-balancing\n(e.g. even-distribution automations) that need a consistent, inbox-aligned\nworkload per user.\n",
|
|
836
836
|
"tags": [
|
|
837
837
|
"Threads"
|
|
838
838
|
],
|
|
@@ -2695,6 +2695,117 @@
|
|
|
2695
2695
|
}
|
|
2696
2696
|
}
|
|
2697
2697
|
},
|
|
2698
|
+
"ThreadView": {
|
|
2699
|
+
"type": "object",
|
|
2700
|
+
"additionalProperties": true,
|
|
2701
|
+
"description": "A central-inbox view, described structurally so the server compiles the query for it. Both the\nthread list and the unread count for a view are compiled from the same description, so the two\ncannot disagree about what the view means.\n\nEvery field is optional and an omitted field adds no condition, so a view narrows the whole\nmailbox rather than being a template with required holes. Unknown fields are ignored.\n",
|
|
2702
|
+
"properties": {
|
|
2703
|
+
"folder": {
|
|
2704
|
+
"type": "string",
|
|
2705
|
+
"enum": [
|
|
2706
|
+
"inbox",
|
|
2707
|
+
"favorite",
|
|
2708
|
+
"sent",
|
|
2709
|
+
"trash",
|
|
2710
|
+
"spam",
|
|
2711
|
+
"unassignable",
|
|
2712
|
+
"draft"
|
|
2713
|
+
],
|
|
2714
|
+
"description": "Which sidebar folder's membership predicate to apply."
|
|
2715
|
+
},
|
|
2716
|
+
"mailbox": {
|
|
2717
|
+
"type": "string",
|
|
2718
|
+
"enum": [
|
|
2719
|
+
"organization",
|
|
2720
|
+
"agent"
|
|
2721
|
+
],
|
|
2722
|
+
"description": "Whose mailbox this is. `agent` scopes to threads assigned to the caller or their groups;\n`organization` scopes to the org and is the only mailbox that carries address filtering.\n"
|
|
2723
|
+
},
|
|
2724
|
+
"labels": {
|
|
2725
|
+
"type": "array",
|
|
2726
|
+
"items": {
|
|
2727
|
+
"type": "string"
|
|
2728
|
+
},
|
|
2729
|
+
"description": "Saved-filter labels, ANDed. Matched exactly against the tag rather than against its\ntokens, so a label whose words overlap a folder tag no longer lands in that folder.\n"
|
|
2730
|
+
},
|
|
2731
|
+
"purposes": {
|
|
2732
|
+
"type": "array",
|
|
2733
|
+
"items": {
|
|
2734
|
+
"type": "string"
|
|
2735
|
+
},
|
|
2736
|
+
"description": "Purpose ids on linked entities, ANDed."
|
|
2737
|
+
},
|
|
2738
|
+
"filters": {
|
|
2739
|
+
"type": "array",
|
|
2740
|
+
"items": {
|
|
2741
|
+
"type": "string",
|
|
2742
|
+
"enum": [
|
|
2743
|
+
"unread",
|
|
2744
|
+
"resolved",
|
|
2745
|
+
"trash"
|
|
2746
|
+
]
|
|
2747
|
+
},
|
|
2748
|
+
"description": "State filters, independent of the folder. `resolved` and `trash` reach the Inbox folder\nonly and are mutually exclusive there; `unread` applies anywhere.\n"
|
|
2749
|
+
},
|
|
2750
|
+
"from": {
|
|
2751
|
+
"type": "array",
|
|
2752
|
+
"items": {
|
|
2753
|
+
"type": "string"
|
|
2754
|
+
},
|
|
2755
|
+
"description": "Sender addresses to filter on."
|
|
2756
|
+
},
|
|
2757
|
+
"to": {
|
|
2758
|
+
"type": "array",
|
|
2759
|
+
"items": {
|
|
2760
|
+
"type": "string"
|
|
2761
|
+
},
|
|
2762
|
+
"description": "Recipient addresses to filter on."
|
|
2763
|
+
},
|
|
2764
|
+
"assigned_to": {
|
|
2765
|
+
"type": "array",
|
|
2766
|
+
"items": {
|
|
2767
|
+
"type": "string"
|
|
2768
|
+
},
|
|
2769
|
+
"description": "Assignee user ids."
|
|
2770
|
+
},
|
|
2771
|
+
"include_unassigned": {
|
|
2772
|
+
"type": "boolean",
|
|
2773
|
+
"description": "Whether threads with no assignee join the `assigned_to` set. A separate flag rather than a\nsentinel entry in that list, so `assigned_to` holds user ids and nothing else.\n"
|
|
2774
|
+
},
|
|
2775
|
+
"date_from_days_ago": {
|
|
2776
|
+
"type": "integer",
|
|
2777
|
+
"minimum": 0,
|
|
2778
|
+
"description": "Lower bound of the date range, in days before now. Omitted means the epoch."
|
|
2779
|
+
},
|
|
2780
|
+
"date_to_days_ago": {
|
|
2781
|
+
"type": "integer",
|
|
2782
|
+
"minimum": 0,
|
|
2783
|
+
"description": "Upper bound of the date range, in days before now. Omitted means now."
|
|
2784
|
+
},
|
|
2785
|
+
"email_filter": {
|
|
2786
|
+
"type": "array",
|
|
2787
|
+
"items": {
|
|
2788
|
+
"type": "string"
|
|
2789
|
+
},
|
|
2790
|
+
"description": "Addresses the user selected in the address filter. Absent and empty differ, and the\ndifference is a real UI state: absent is \"not filtering by address\", empty is \"every\naddress deselected\", which matches nothing.\n\nDistinct from the permission restriction, which the server derives and a caller cannot\nauthor.\n"
|
|
2791
|
+
},
|
|
2792
|
+
"text": {
|
|
2793
|
+
"type": "string",
|
|
2794
|
+
"description": "The user's search string, as typed. Expanded across the searched fields server-side and\nnever interpreted as query syntax, so a typed operator or a stray bracket cannot\nre-associate the predicate around it.\n"
|
|
2795
|
+
},
|
|
2796
|
+
"thread_ids": {
|
|
2797
|
+
"type": "array",
|
|
2798
|
+
"items": {
|
|
2799
|
+
"type": "string"
|
|
2800
|
+
},
|
|
2801
|
+
"description": "Restrict the view to these threads. Exists because \"would this thread appear in the view\nthe user is looking at?\" is a real question the inbox asks when a new thread arrives, and\nit is a membership test against the view rather than a different view.\n"
|
|
2802
|
+
},
|
|
2803
|
+
"pinned_by": {
|
|
2804
|
+
"type": "string",
|
|
2805
|
+
"description": "Restrict the view to threads this user pinned. The pinned strip above the list is the same\nview with this one extra condition.\n"
|
|
2806
|
+
}
|
|
2807
|
+
}
|
|
2808
|
+
},
|
|
2698
2809
|
"UnreadCountScope": {
|
|
2699
2810
|
"type": "object",
|
|
2700
2811
|
"required": [
|
|
@@ -2714,13 +2825,18 @@
|
|
|
2714
2825
|
"shared_inbox",
|
|
2715
2826
|
"saved_view"
|
|
2716
2827
|
],
|
|
2717
|
-
"description": "Decides which buckets come back, and whether `q` is required. `organization` returns all\nfour buckets from the canonical central-inbox queries and takes no `q`. `shared_inbox`\nand `saved_view` return `unread` alone
|
|
2828
|
+
"description": "Decides which buckets come back, and whether `q` is required. `organization` returns all\nfour buckets from the canonical central-inbox queries and takes no `q`. `shared_inbox`\nand `saved_view` return `unread` alone. A `saved_view` scope names its view with `view_id`;\na `shared_inbox` scope needs only its `inbox_id`, since the query follows from the type.\n\nA `shared_inbox` scope additionally requires `actor: organization` and is refused with a\n400 otherwise. A shared inbox is an organization-level construct \u2014 selecting one always\nswitches the mailbox to the organization \u2014 so it has no per-user read state and the\ncombination would compute a number no surface renders. `saved_view` accepts either actor,\nbecause a view's own configuration names its mailbox.\n"
|
|
2718
2829
|
},
|
|
2719
2830
|
"q": {
|
|
2720
2831
|
"type": "string",
|
|
2721
|
-
"description": "The scope's
|
|
2832
|
+
"description": "The scope's query, in Lucene syntax, as passed to `threads:search` for the same scope. The\nserver adds the read-state condition and nothing else, so the count matches that list.\n\nAccepted for `shared_inbox` and `saved_view`; rejected for `organization`.\n\nSuperseded by server-side compilation. It remains accepted for callers whose counts are\nenabled while compilation is not, and is ignored when compilation is enabled. It will be\nremoved once compilation is enabled everywhere counts are.\n",
|
|
2722
2833
|
"example": "_tags.keyword:inbox AND !_tags.keyword:trash"
|
|
2723
2834
|
},
|
|
2835
|
+
"view_id": {
|
|
2836
|
+
"type": "string",
|
|
2837
|
+
"description": "The id of the saved view this scope counts. The server reads that view and compiles the same\nquery the thread list runs for it, so the count and the list cannot describe the view\ndifferently.\n\nRequired for `saved_view` scopes unless `q` is supplied instead; rejected for the other two\ntypes. A `shared_inbox` scope needs no predicate field at all, because its query follows from\nthe type and its `inbox_id`. An `organization` scope uses the canonical folder queries.\n\nThe view's own shared-inbox filter is read from the stored view, so `inbox_id` need not be\nsent alongside this.\n\nCompilation is enabled per organization by the `message-unread-unified-predicate` feature\nflag. While it is off, a scope supplying only a `view_id` has no query to run and its name is\nreturned in `omitted` rather than counted. A named view that this organization does not have,\nor whose stored configuration cannot be read, is omitted the same way.\n",
|
|
2838
|
+
"example": "3f34ce73-089c-4d45-a5ee-c161234e41c3"
|
|
2839
|
+
},
|
|
2724
2840
|
"inbox_id": {
|
|
2725
2841
|
"description": "Shared inbox ids, resolved to bucket ids the same way `threads:search` resolves them.",
|
|
2726
2842
|
"oneOf": [
|
|
@@ -2751,7 +2867,7 @@
|
|
|
2751
2867
|
"organization",
|
|
2752
2868
|
"user"
|
|
2753
2869
|
],
|
|
2754
|
-
"description": "Which read state to count against
|
|
2870
|
+
"description": "Which read state to count against \u2014 the org's or the calling user's. Same meaning as\n`getUnread`'s path parameter, and unrelated to a scope's `type`.\n"
|
|
2755
2871
|
},
|
|
2756
2872
|
"email_filter": {
|
|
2757
2873
|
"type": "array",
|
|
@@ -2760,6 +2876,13 @@
|
|
|
2760
2876
|
},
|
|
2761
2877
|
"description": "Restrict every scope to messages involving these addresses."
|
|
2762
2878
|
},
|
|
2879
|
+
"user_groups": {
|
|
2880
|
+
"type": "array",
|
|
2881
|
+
"items": {
|
|
2882
|
+
"type": "string"
|
|
2883
|
+
},
|
|
2884
|
+
"description": "The caller's group ids, as `group_<id>`, with the same meaning and constraints as on\n`threads:search`. Read only when a scope carries a `view`. Entries not matching\n`group_<id>` are dropped. Not an authorization input.\n"
|
|
2885
|
+
},
|
|
2763
2886
|
"scopes": {
|
|
2764
2887
|
"type": "array",
|
|
2765
2888
|
"minItems": 1,
|
|
@@ -2791,7 +2914,7 @@
|
|
|
2791
2914
|
},
|
|
2792
2915
|
"omitted": {
|
|
2793
2916
|
"type": "array",
|
|
2794
|
-
"description": "Names of scopes that were accepted but could not be counted
|
|
2917
|
+
"description": "Names of scopes that were accepted but could not be counted. Each appears here and is\nabsent from `counts`, so an omission is distinguishable from a mis-spelled scope name.\n\nCauses, not distinguishable from this field: a `shared_inbox` scope whose ids matched no\nbucket in the organization; a scope with no query to run because compilation is disabled for\nthe organization and no `q` was supplied; and a `view_id` naming a view this organization\ndoes not have or whose stored configuration cannot be read.\n",
|
|
2795
2918
|
"items": {
|
|
2796
2919
|
"type": "string"
|
|
2797
2920
|
}
|
|
@@ -2827,9 +2950,6 @@
|
|
|
2827
2950
|
},
|
|
2828
2951
|
"SearchParamsV2": {
|
|
2829
2952
|
"type": "object",
|
|
2830
|
-
"required": [
|
|
2831
|
-
"q"
|
|
2832
|
-
],
|
|
2833
2953
|
"properties": {
|
|
2834
2954
|
"inbox_id": {
|
|
2835
2955
|
"oneOf": [
|
|
@@ -2852,10 +2972,25 @@
|
|
|
2852
2972
|
]
|
|
2853
2973
|
},
|
|
2854
2974
|
"q": {
|
|
2855
|
-
"description": "Lucene query syntax supported with ElasticSearch",
|
|
2975
|
+
"description": "Lucene query syntax supported with ElasticSearch.\n\nSend this or `view`, not both. At least one is required; a request with neither is refused\nwith a 400. An empty string is accepted and returns no hits.\n",
|
|
2856
2976
|
"type": "string",
|
|
2857
2977
|
"example": "subject:\"Request for solar panel price\" AND _tags:INBOX"
|
|
2858
2978
|
},
|
|
2979
|
+
"view": {
|
|
2980
|
+
"allOf": [
|
|
2981
|
+
{
|
|
2982
|
+
"$ref": "#/components/schemas/ThreadView"
|
|
2983
|
+
}
|
|
2984
|
+
],
|
|
2985
|
+
"description": "A view for the server to compile into the query, instead of supplying `q`. When a view is\npresent and compilation is enabled for the calling organization, the compiled query runs and\n`q` is not consulted.\n\nRead by `threads:search` and `threads:searchIds` only. This schema is shared with\n`messages:search`, which compiles no view and ignores the field, so a request there must\nsupply `q`.\n\nCompilation is enabled per organization by the `message-unread-unified-predicate` feature\nflag. While it is off, `q` runs and a request supplying only a view returns no hits.\n"
|
|
2986
|
+
},
|
|
2987
|
+
"user_groups": {
|
|
2988
|
+
"type": "array",
|
|
2989
|
+
"items": {
|
|
2990
|
+
"type": "string"
|
|
2991
|
+
},
|
|
2992
|
+
"description": "The caller's group ids, as `group_<id>`. Read only when a `view` is compiled, where they\ndetermine the agent mailbox's assignee condition and which shared inboxes, and therefore\nwhich addresses, are reachable. Required for those conditions to be correct, because group\nmembership is not present on the id token this service parses.\n\nEntries not matching `group_<id>` are dropped.\n\nNot an authorization input, and not treated as one: naming groups the caller is not in\nwidens what the response includes, exactly as supplying a broader `q` does. Access control\nis enforced elsewhere.\n"
|
|
2993
|
+
},
|
|
2859
2994
|
"fields": {
|
|
2860
2995
|
"$ref": "#/components/schemas/FieldsParam"
|
|
2861
2996
|
},
|
|
@@ -2913,6 +3048,21 @@
|
|
|
2913
3048
|
"SearchIDParams": {
|
|
2914
3049
|
"type": "object",
|
|
2915
3050
|
"properties": {
|
|
3051
|
+
"view": {
|
|
3052
|
+
"allOf": [
|
|
3053
|
+
{
|
|
3054
|
+
"$ref": "#/components/schemas/ThreadView"
|
|
3055
|
+
}
|
|
3056
|
+
],
|
|
3057
|
+
"description": "The view to compile, with the same meaning as on `threads:search`. Present here because\nthis endpoint returns the ordered id set *for that list*: if one compiled its view and the\nother ran an authored `q`, the two would disagree inside a single feature, which is the\ndrift this replaces.\n"
|
|
3058
|
+
},
|
|
3059
|
+
"user_groups": {
|
|
3060
|
+
"type": "array",
|
|
3061
|
+
"items": {
|
|
3062
|
+
"type": "string"
|
|
3063
|
+
},
|
|
3064
|
+
"description": "The caller's group ids, with the same meaning and caveats as on `threads:search`."
|
|
3065
|
+
},
|
|
2916
3066
|
"inbox_id": {
|
|
2917
3067
|
"oneOf": [
|
|
2918
3068
|
{
|
|
@@ -3160,7 +3310,7 @@
|
|
|
3160
3310
|
},
|
|
3161
3311
|
"label_name": {
|
|
3162
3312
|
"type": "string",
|
|
3163
|
-
"description": "Resolved taxonomy classification display name (e.g. `
|
|
3313
|
+
"description": "Resolved taxonomy classification display name (e.g. `Ver\u00e4rgert`), when the label is a classification. Absent for free-form tags."
|
|
3164
3314
|
}
|
|
3165
3315
|
}
|
|
3166
3316
|
},
|
|
@@ -3183,7 +3333,7 @@
|
|
|
3183
3333
|
},
|
|
3184
3334
|
"label_name": {
|
|
3185
3335
|
"type": "string",
|
|
3186
|
-
"description": "Resolved taxonomy classification display name (e.g. `
|
|
3336
|
+
"description": "Resolved taxonomy classification display name (e.g. `Ver\u00e4rgert`), when the label is a classification. Absent for free-form tags."
|
|
3187
3337
|
}
|
|
3188
3338
|
}
|
|
3189
3339
|
},
|
|
@@ -3400,7 +3550,7 @@
|
|
|
3400
3550
|
"timestamp": {
|
|
3401
3551
|
"type": "string",
|
|
3402
3552
|
"description": "Timestamp of the event",
|
|
3403
|
-
"example": "2024-01-01T00:00:
|
|
3553
|
+
"example": "2024-01-01T00:00:00.000Z"
|
|
3404
3554
|
},
|
|
3405
3555
|
"message_id": {
|
|
3406
3556
|
"type": "string",
|
package/dist/bin/epilot.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
API_LIST
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-IKYUAORY.js";
|
|
5
5
|
|
|
6
6
|
// bin/epilot.ts
|
|
7
7
|
import { runMain } from "citty";
|
|
@@ -11,7 +11,7 @@ import { defineCommand } from "citty";
|
|
|
11
11
|
var main = defineCommand({
|
|
12
12
|
meta: {
|
|
13
13
|
name: "epilot",
|
|
14
|
-
version: "0.1.
|
|
14
|
+
version: "0.1.119",
|
|
15
15
|
description: "CLI for epilot APIs"
|
|
16
16
|
},
|
|
17
17
|
args: {
|
|
@@ -30,8 +30,8 @@ var main = defineCommand({
|
|
|
30
30
|
auth: () => import("../auth-WMXFMPWE.js").then((m) => m.default),
|
|
31
31
|
profile: () => import("../profile-OZJL5ZPT.js").then((m) => m.default),
|
|
32
32
|
config: () => import("../config-DGZIMLZK.js").then((m) => m.default),
|
|
33
|
-
completion: () => import("../completion-
|
|
34
|
-
upgrade: () => import("../upgrade-
|
|
33
|
+
completion: () => import("../completion-CPMUSY3E.js").then((m) => m.default),
|
|
34
|
+
upgrade: () => import("../upgrade-LASQG4TZ.js").then((m) => m.default),
|
|
35
35
|
"access-token": () => import("../access-token-WWE6BDJH.js").then((m) => m.default),
|
|
36
36
|
address: () => import("../address-EH3C4CVB.js").then((m) => m.default),
|
|
37
37
|
"address-suggestions": () => import("../address-suggestions-RRSLOBFW.js").then((m) => m.default),
|
|
@@ -134,13 +134,13 @@ process.stderr.on("error", (err) => {
|
|
|
134
134
|
if (err.code === "EPIPE") process.exit(0);
|
|
135
135
|
throw err;
|
|
136
136
|
});
|
|
137
|
-
var VERSION = true ? "0.1.
|
|
137
|
+
var VERSION = true ? "0.1.119" : (await null).default.version;
|
|
138
138
|
var reorderedArgv = hoistFlagsAfterSubcommand(process.argv.slice(2));
|
|
139
139
|
process.argv = [process.argv[0], process.argv[1], ...reorderedArgv];
|
|
140
140
|
var args = process.argv.slice(2);
|
|
141
141
|
var completionsIdx = args.indexOf("--_completions");
|
|
142
142
|
if (completionsIdx >= 0) {
|
|
143
|
-
const { handleCompletions } = await import("../completion-
|
|
143
|
+
const { handleCompletions } = await import("../completion-CPMUSY3E.js");
|
|
144
144
|
handleCompletions(args[completionsIdx + 1], args[completionsIdx + 2]);
|
|
145
145
|
process.exit(0);
|
|
146
146
|
}
|
|
@@ -328,7 +328,7 @@ var API_LIST = [
|
|
|
328
328
|
kebabName: "customer-portal",
|
|
329
329
|
title: "Portal API",
|
|
330
330
|
serverUrl: "https://customer-portal-api.sls.epilot.io",
|
|
331
|
-
operationCount:
|
|
331
|
+
operationCount: 162,
|
|
332
332
|
operationIds: [
|
|
333
333
|
"upsertPortal",
|
|
334
334
|
"createUser",
|
|
@@ -428,6 +428,7 @@ var API_LIST = [
|
|
|
428
428
|
"getRegistrationIdentifiers",
|
|
429
429
|
"getAllFiles",
|
|
430
430
|
"getFileById",
|
|
431
|
+
"getFilePreview",
|
|
431
432
|
"trackFileDownloaded",
|
|
432
433
|
"getFilesCountByEntity",
|
|
433
434
|
"getBillingEvents",
|
|
@@ -445,6 +446,7 @@ var API_LIST = [
|
|
|
445
446
|
"updateWorkflowStepAsDone",
|
|
446
447
|
"getEntityWorkflows",
|
|
447
448
|
"getEntityPortalWorkflows",
|
|
449
|
+
"getEntityPortalWorkflowsBatch",
|
|
448
450
|
"uploadMeterReadingPhoto",
|
|
449
451
|
"createMeterReading",
|
|
450
452
|
"getAllowedMeterReadingRange",
|
|
@@ -72,7 +72,7 @@ ${GREEN}${BOLD}Upgraded to @epilot/cli@${latest}${RESET}
|
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
74
|
var getCurrentVersion = () => {
|
|
75
|
-
if (true) return "0.1.
|
|
75
|
+
if (true) return "0.1.119";
|
|
76
76
|
try {
|
|
77
77
|
const output = execSync("npm ls -g @epilot/cli --depth=0 --json 2>/dev/null", {
|
|
78
78
|
encoding: "utf-8",
|