@reveldigital/mcp-graphql-proxy 1.16.0 → 1.18.0

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.
@@ -499,6 +499,34 @@ type AuditEvent {
499
499
  geoLocation: String
500
500
  }
501
501
 
502
+ "Result from a batch row create mutation."
503
+ type BatchCreateDataTableRowsResult {
504
+ "Whether the overall operation was successful."
505
+ success: Boolean!
506
+ "Per-row results."
507
+ results: [BatchRowResultModel]
508
+ "Error message if the operation failed."
509
+ error: String
510
+ }
511
+
512
+ "Result from a batch row delete mutation."
513
+ type BatchDeleteDataTableRowsResult {
514
+ "Whether the overall operation was successful."
515
+ success: Boolean!
516
+ "Number of rows successfully deleted."
517
+ deletedCount: Int!
518
+ "Per-row results."
519
+ results: [BatchRowResultModel]
520
+ "Error message if the operation failed."
521
+ error: String
522
+ }
523
+
524
+ type BatchRowResultModel {
525
+ rowId: String
526
+ success: Boolean!
527
+ error: String
528
+ }
529
+
502
530
  """
503
531
  Represents Bluetooth Low Energy (BLE) beacon configuration for a device.
504
532
  Beacons enable proximity-based interactions, allowing mobile devices to detect nearby digital signage
@@ -624,6 +652,73 @@ type CreateMediaResult {
624
652
  error: String
625
653
  }
626
654
 
655
+ type DataTableColumnModel {
656
+ id: String
657
+ name: String!
658
+ key: String!
659
+ type: ColumnType!
660
+ required: Boolean!
661
+ sortable: Boolean!
662
+ options: [String]
663
+ default: JSON
664
+ }
665
+
666
+ type DataTableDetail {
667
+ id: String
668
+ name: String
669
+ description: String
670
+ columns: [DataTableColumnModel]
671
+ groupId: String
672
+ rowCount: Int!
673
+ cacheTtlSeconds: Int
674
+ createdAt: DateTime!
675
+ updatedAt: DateTime!
676
+ }
677
+
678
+ type DataTableListResponse {
679
+ data: [DataTableSummary]
680
+ continuationToken: String
681
+ }
682
+
683
+ "Result from a data table create or update mutation."
684
+ type DataTableMutationResult {
685
+ "Whether the operation was successful."
686
+ success: Boolean!
687
+ "The created or updated data table."
688
+ table: DataTableDetail
689
+ "Error message if the operation failed."
690
+ error: String
691
+ }
692
+
693
+ type DataTableRowModel {
694
+ id: String
695
+ sortOrder: Int!
696
+ data: [JSON]
697
+ updatedAt: DateTime!
698
+ }
699
+
700
+ "Result from a data table row create or update mutation."
701
+ type DataTableRowMutationResult {
702
+ "Whether the operation was successful."
703
+ success: Boolean!
704
+ "The created or updated row."
705
+ row: DataTableRowModel
706
+ "Error message if the operation failed."
707
+ error: String
708
+ "Validation errors if the row data failed schema validation."
709
+ validationErrors: [String]
710
+ }
711
+
712
+ type DataTableSummary {
713
+ id: String
714
+ name: String
715
+ description: String
716
+ columnCount: Int!
717
+ rowCount: Int!
718
+ groupId: String
719
+ updatedAt: DateTime!
720
+ }
721
+
627
722
  "Result from a delete operation."
628
723
  type DeleteResult {
629
724
  "Whether the operation was successful."
@@ -753,6 +848,25 @@ type Group {
753
848
  children: [Group]
754
849
  }
755
850
 
851
+ "Result from an import rows mutation."
852
+ type ImportDataTableRowsResult {
853
+ "Whether the overall operation was successful."
854
+ success: Boolean!
855
+ "Number of rows successfully imported."
856
+ successCount: Int!
857
+ "Number of rows that failed to import."
858
+ errorCount: Int!
859
+ "Per-row import errors."
860
+ errors: [ImportRowErrorModel]
861
+ "Error message if the overall operation failed."
862
+ error: String
863
+ }
864
+
865
+ type ImportRowErrorModel {
866
+ lineNumber: Int!
867
+ error: String
868
+ }
869
+
756
870
  type KeyValuePairOfStringAndObject {
757
871
  key: String!
758
872
  }
@@ -852,6 +966,49 @@ type Module {
852
966
  }
853
967
 
854
968
  type Mutation @authorize {
969
+ """
970
+ Create a new data table with the specified column schema.
971
+ Example: Create a menu board table with columns for item name, price, description, and image.
972
+ """
973
+ createDataTable(input: CreateDataTableInput): DataTableMutationResult @authorize(policy: "DataTables_Edit") @cost(weight: "10")
974
+ """
975
+ Update an existing data table definition. Only provided fields are changed.
976
+ Example: Add a new "calories" column to a menu board table.
977
+ """
978
+ updateDataTable(input: UpdateDataTableInput): DataTableMutationResult @authorize(policy: "DataTables_Edit") @cost(weight: "10")
979
+ "Delete a data table and all its rows."
980
+ deleteDataTable(tableId: String): DeleteResult @authorize(policy: "DataTables_Delete") @cost(weight: "10")
981
+ """
982
+ Create a new row in a data table.
983
+ Example: Add a new menu item to a menu board table.
984
+ """
985
+ createDataTableRow(input: CreateDataTableRowInput): DataTableRowMutationResult @authorize(policy: "DataTables_Edit") @cost(weight: "10")
986
+ """
987
+ Update an existing row in a data table (partial update — only provided keys are changed).
988
+ Example: Update the price of a menu item.
989
+ """
990
+ updateDataTableRow(input: UpdateDataTableRowInput): DataTableRowMutationResult @authorize(policy: "DataTables_Edit") @cost(weight: "10")
991
+ "Delete a row from a data table."
992
+ deleteDataTableRow(tableId: String rowId: String): DeleteResult @authorize(policy: "DataTables_Delete") @cost(weight: "10")
993
+ """
994
+ Batch create multiple rows in a data table (max 100 rows per call).
995
+ Example: Bulk-load menu items into a table from an external data source.
996
+ """
997
+ batchCreateDataTableRows(input: BatchCreateDataTableRowsInput): BatchCreateDataTableRowsResult @authorize(policy: "DataTables_Edit") @cost(weight: "10")
998
+ "Batch delete multiple rows from a data table (max 100 row IDs per call)."
999
+ batchDeleteDataTableRows(input: BatchDeleteDataTableRowsInput): BatchDeleteDataTableRowsResult @authorize(policy: "DataTables_Delete") @cost(weight: "10")
1000
+ """
1001
+ Import rows from CSV content into a data table.
1002
+ Example: Import a spreadsheet of menu items. Use replace mode to overwrite all existing rows.
1003
+ """
1004
+ importDataTableRows(input: ImportDataTableRowsInput): ImportDataTableRowsResult @authorize(policy: "DataTables_Edit") @cost(weight: "10")
1005
+ "Reorder rows in a data table by specifying the desired row ID sequence."
1006
+ reorderDataTableRows(input: ReorderDataTableRowsInput): DeleteResult @authorize(policy: "DataTables_Edit") @cost(weight: "10")
1007
+ """
1008
+ Roll back a row to a previous version, creating a new version for the rollback action.
1009
+ Example: Undo an accidental price change by restoring a previous version.
1010
+ """
1011
+ rollbackDataTableRow(input: RollbackDataTableRowInput): RollbackDataTableRowResult @authorize(policy: "DataTables_Edit") @cost(weight: "10")
855
1012
  """
856
1013
  Send commands to a specific device.
857
1014
  Commands are dispatched via Azure SignalR, FCM, Pusher, and legacy SignalR channels
@@ -1147,6 +1304,20 @@ type Query @authorize {
1147
1304
  List of audit events
1148
1305
  """
1149
1306
  auditEvent("Filter by user ID (encrypted)" userId: String "Filter by event type" eventType: String "Filter by HTTP method (GET, POST, PUT, DELETE, etc.)" httpMethod: String "Filter by controller name" controllerName: String "Filter by action name" actionName: String "Filter events after this date" startDate: DateTime "Filter events before this date" endDate: DateTime "Filter by IP address" ipAddress: String "Filter by HTTP response code" responseCode: String "Maximum number of items to return" limit: Int where: AuditEventFilterInput @cost(weight: "10") order: [AuditEventSortInput!] @cost(weight: "10")): [AuditEvent!]! @authorize(policy: "AuditEventsOwnerOnly") @cost(weight: "10")
1307
+ "Lists data tables in the account, with optional group filtering."
1308
+ dataTables("Optional group ID to filter by" groupId: String "Number of tables per page (default 50)" pageSize: Int! = 50 "Token for fetching the next page" continuationToken: String): DataTableListResponse @authorize(policy: "DataTables_View") @cost(weight: "10")
1309
+ "Gets a single data table definition by ID, including column schema."
1310
+ dataTable("The data table ID" tableId: String): DataTableDetail @authorize(policy: "DataTables_View") @cost(weight: "10")
1311
+ "Lists rows in a data table, with optional filtering, sorting, and field selection."
1312
+ dataTableRows("The data table ID" tableId: String "Optional filter as a JSON string (e.g., {\"status\":\"active\"})" filter: String "Column key to sort by" sort: String "Sort direction: \"asc\" or \"desc\"" sortDir: String = "asc" "Number of rows per page (default 50)" pageSize: Int! = 50 "Token for fetching the next page" continuationToken: String "Comma-separated list of column keys to return" fields: String): RowListResponse @authorize(policy: "DataTables_View") @cost(weight: "10")
1313
+ "Gets a single row by ID."
1314
+ dataTableRow("The data table ID" tableId: String "The row ID" rowId: String): DataTableRowModel @authorize(policy: "DataTables_View") @cost(weight: "10")
1315
+ "Exports all rows from a data table as a CSV string."
1316
+ exportDataTableRows("The data table ID" tableId: String): String @authorize(policy: "DataTables_View") @cost(weight: "10")
1317
+ "Lists version history for a row (newest first)."
1318
+ dataTableRowVersions("The data table ID" tableId: String "The row ID" rowId: String "Number of versions per page (default 25)" pageSize: Int! = 25 "Token for fetching the next page" continuationToken: String): VersionListResponse @authorize(policy: "DataTables_View") @cost(weight: "10")
1319
+ "Gets a specific version snapshot of a row."
1320
+ dataTableRowVersion("The data table ID" tableId: String "The row ID" rowId: String "The version number to retrieve" version: Int!): RowVersionModel @authorize(policy: "DataTables_View") @cost(weight: "10")
1150
1321
  device(id: [String!] groupId: [String!] groupName: [String!] deviceTypeId: [String!] includeSnap: Boolean orgId: String limit: Int where: DeviceFilterInput @cost(weight: "10") order: [DeviceSortInput!] @cost(weight: "10")): [Device] @authorize(policy: "Devices_View") @cost(weight: "10")
1151
1322
  deviceGroups(id: String tree: Boolean limit: Int where: GroupFilterInput @cost(weight: "10") order: [GroupSortInput!] @cost(weight: "10")): [Group] @authorize(policy: "Devices_View") @cost(weight: "10")
1152
1323
  """
@@ -1184,6 +1355,36 @@ type ResourcePermission {
1184
1355
  canDelete: Boolean!
1185
1356
  }
1186
1357
 
1358
+ "Result from a rollback mutation."
1359
+ type RollbackDataTableRowResult {
1360
+ "Whether the rollback was successful."
1361
+ success: Boolean!
1362
+ "The new version number after rollback."
1363
+ newVersion: Int!
1364
+ "The restored row data."
1365
+ restoredRow: DataTableRowModel
1366
+ "Error message if the rollback failed."
1367
+ error: String
1368
+ }
1369
+
1370
+ type RowListResponse {
1371
+ data: [DataTableRowModel]
1372
+ totalCount: Int!
1373
+ continuationToken: String
1374
+ }
1375
+
1376
+ type RowVersionModel {
1377
+ id: String
1378
+ rowId: String
1379
+ version: Int!
1380
+ action: String
1381
+ data: [JSON]
1382
+ changedFields: [String]
1383
+ previousValues: [JSON]
1384
+ changedBy: String
1385
+ timestamp: DateTime!
1386
+ }
1387
+
1187
1388
  type Schedule {
1188
1389
  "The schedule id"
1189
1390
  id: String
@@ -1412,6 +1613,12 @@ type User {
1412
1613
  isTwoFactor: Boolean
1413
1614
  }
1414
1615
 
1616
+ type VersionListResponse {
1617
+ data: [RowVersionModel]
1618
+ totalCount: Int!
1619
+ continuationToken: String
1620
+ }
1621
+
1415
1622
  "Aggregated audience metrics for a device over a time period"
1416
1623
  input AdHawkAudienceMetricsFilterInput {
1417
1624
  and: [AdHawkAudienceMetricsFilterInput!]
@@ -2442,6 +2649,22 @@ input AuditEventSortInput {
2442
2649
  geoLocation: SortEnumType @cost(weight: "10")
2443
2650
  }
2444
2651
 
2652
+ "Input for batch creating rows."
2653
+ input BatchCreateDataTableRowsInput {
2654
+ "The table ID to add rows to."
2655
+ tableId: String
2656
+ "Row data objects to create (max 100)."
2657
+ rows: [[JSON]]
2658
+ }
2659
+
2660
+ "Input for batch deleting rows."
2661
+ input BatchDeleteDataTableRowsInput {
2662
+ "The table ID containing the rows."
2663
+ tableId: String
2664
+ "Row IDs to delete (max 100)."
2665
+ rowIds: [String]
2666
+ }
2667
+
2445
2668
  """
2446
2669
  Represents Bluetooth Low Energy (BLE) beacon configuration for a device.
2447
2670
  Beacons enable proximity-based interactions, allowing mobile devices to detect nearby digital signage
@@ -2680,6 +2903,28 @@ input ConditionTypeOperationFilterInput {
2680
2903
  nin: [ConditionType!] @cost(weight: "10")
2681
2904
  }
2682
2905
 
2906
+ "Input for creating a new data table."
2907
+ input CreateDataTableInput {
2908
+ "Table name (max 100 characters)."
2909
+ name: String
2910
+ "Optional table description (max 500 characters)."
2911
+ description: String
2912
+ "Optional group ID for organizing tables."
2913
+ groupId: String
2914
+ "Column definitions (at least one required)."
2915
+ columns: [DataTableColumnInput]
2916
+ "Optional cache TTL in seconds for gadget\/player reads."
2917
+ cacheTtlSeconds: Int
2918
+ }
2919
+
2920
+ "Input for creating a row in a data table."
2921
+ input CreateDataTableRowInput {
2922
+ "The table ID to add the row to."
2923
+ tableId: String
2924
+ "Row data as a JSON object. Keys must match column keys defined in the table schema."
2925
+ data: [JSON]
2926
+ }
2927
+
2683
2928
  "Input for creating a media asset by downloading from a URL."
2684
2929
  input CreateMediaFromUrlInput {
2685
2930
  "URL to download the media file from."
@@ -2698,6 +2943,26 @@ input CreateMediaFromUrlInput {
2698
2943
  endDate: DateTime
2699
2944
  }
2700
2945
 
2946
+ "Column definition for creating or updating a data table."
2947
+ input DataTableColumnInput {
2948
+ "Column ID (only needed when updating existing columns)."
2949
+ id: String
2950
+ "Display name for the column."
2951
+ name: String
2952
+ "Unique key used in row data objects."
2953
+ key: String
2954
+ "Data type of the column."
2955
+ type: ColumnType!
2956
+ "Whether a value is required for this column."
2957
+ required: Boolean!
2958
+ "Whether the column supports sorting."
2959
+ sortable: Boolean!
2960
+ "Allowed values for Select-type columns."
2961
+ options: [String]
2962
+ "Default value for the column."
2963
+ default: JSON
2964
+ }
2965
+
2701
2966
  input DateTimeOperationFilterInput {
2702
2967
  eq: DateTime @cost(weight: "10")
2703
2968
  neq: DateTime @cost(weight: "10")
@@ -2991,6 +3256,16 @@ input GroupSortInput {
2991
3256
  organizationCount: SortEnumType @cost(weight: "10")
2992
3257
  }
2993
3258
 
3259
+ "Input for importing rows from CSV content."
3260
+ input ImportDataTableRowsInput {
3261
+ "The table ID to import rows into."
3262
+ tableId: String
3263
+ "Raw CSV content (header row + data rows)."
3264
+ csvContent: String
3265
+ "When true, replaces all existing rows. When false (default), appends to existing rows."
3266
+ replace: Boolean!
3267
+ }
3268
+
2994
3269
  input IntOperationFilterInput {
2995
3270
  eq: Int @cost(weight: "10")
2996
3271
  neq: Int @cost(weight: "10")
@@ -3490,6 +3765,14 @@ input PlaylistTypeOperationFilterInput {
3490
3765
  nin: [PlaylistType!] @cost(weight: "10")
3491
3766
  }
3492
3767
 
3768
+ "Input for reordering rows in a data table."
3769
+ input ReorderDataTableRowsInput {
3770
+ "The table ID containing the rows."
3771
+ tableId: String
3772
+ "Row IDs in the desired display order."
3773
+ rowIds: [String]
3774
+ }
3775
+
3493
3776
  "Input for reordering sources within a playlist."
3494
3777
  input ReorderPlaylistSourcesInput {
3495
3778
  "The playlist ID."
@@ -3498,6 +3781,16 @@ input ReorderPlaylistSourcesInput {
3498
3781
  sourceIds: [String]
3499
3782
  }
3500
3783
 
3784
+ "Input for rolling back a row to a previous version."
3785
+ input RollbackDataTableRowInput {
3786
+ "The table ID containing the row."
3787
+ tableId: String
3788
+ "The row ID to roll back."
3789
+ rowId: String
3790
+ "The version number to restore."
3791
+ version: Int!
3792
+ }
3793
+
3501
3794
  input ScheduleDeviceFilterInput {
3502
3795
  and: [ScheduleDeviceFilterInput!]
3503
3796
  or: [ScheduleDeviceFilterInput!]
@@ -3876,6 +4169,37 @@ input TemplateSortInput {
3876
4169
  orientation: SortEnumType @cost(weight: "10")
3877
4170
  }
3878
4171
 
4172
+ """
4173
+ Input for updating an existing data table definition.
4174
+ Only provided fields are changed.
4175
+ """
4176
+ input UpdateDataTableInput {
4177
+ "The table ID to update."
4178
+ tableId: String
4179
+ "New table name. Null leaves unchanged."
4180
+ name: String
4181
+ "New description. Null leaves unchanged."
4182
+ description: String
4183
+ "New group ID. Null leaves unchanged."
4184
+ groupId: String
4185
+ "Updated column definitions. Null leaves unchanged."
4186
+ columns: [DataTableColumnInput]
4187
+ "New cache TTL in seconds. Null leaves unchanged."
4188
+ cacheTtlSeconds: Int
4189
+ }
4190
+
4191
+ "Input for updating an existing row (partial update)."
4192
+ input UpdateDataTableRowInput {
4193
+ "The table ID containing the row."
4194
+ tableId: String
4195
+ "The row ID to update."
4196
+ rowId: String
4197
+ "Partial row data. Only provided keys are updated."
4198
+ data: [JSON]
4199
+ "Optional ETag for optimistic concurrency. Pass the row's current ETag to prevent conflicting writes."
4200
+ eTag: String
4201
+ }
4202
+
3879
4203
  "Input for updating media metadata."
3880
4204
  input UpdateMediaInput {
3881
4205
  "The media ID to update."
@@ -4034,6 +4358,19 @@ enum ApplyPolicy {
4034
4358
  VALIDATION
4035
4359
  }
4036
4360
 
4361
+ enum ColumnType {
4362
+ STRING
4363
+ NUMBER
4364
+ BOOLEAN
4365
+ DATE
4366
+ SELECT
4367
+ MEDIA
4368
+ URL
4369
+ RICH_TEXT
4370
+ TIME
4371
+ HIDDEN
4372
+ }
4373
+
4037
4374
  enum ConditionOperator {
4038
4375
  AND
4039
4376
  OR
@@ -4432,5 +4769,7 @@ scalar DateTime @specifiedBy(url: "https:\/\/www.graphql-scalars.com\/date-time"
4432
4769
  "The `Decimal` scalar type represents a decimal floating-point number."
4433
4770
  scalar Decimal
4434
4771
 
4772
+ scalar JSON
4773
+
4435
4774
  "The `Long` scalar type represents non-fractional signed whole 64-bit numeric values. Long can represent values between -(2^63) and 2^63 - 1."
4436
4775
  scalar Long