From 0c2c14ec073ecbfb3e1154636572546018e0503a Mon Sep 17 00:00:00 2001 From: Kistl Date: Mon, 30 Mar 2026 14:52:51 +0200 Subject: [PATCH 1/3] Support upcoming Shell event handler update for permission events by enhancing models, schemas and docs --- CHANGELOG.md | 8 +++++ docs/events.md | 27 +++++++++++++- package-lock.json | 4 +-- package.json | 2 +- src/index.ts | 2 ++ src/models/index.ts | 1 + .../permission-request.v2.model.ts | 6 ++++ .../permission-request.v3.model.ts | 6 ++-- .../get-permissions-request.v2.schema.ts | 35 +++++++++++++------ .../get-permissions-request.v3.schema.ts | 27 ++++++++++---- src/validation/schemas/schemas.spec.ts | 12 ++++--- 11 files changed, 104 insertions(+), 26 deletions(-) create mode 100644 src/models/permissions/permission-request.v2.model.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index d47f915..266ad47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.26.0] - 2026-03-30 + +### Changed + +- Change model `PermissionRequestV3` from `interface` to `type` to support multiple permissions at once for event `Version3.GET_PERMISSIONS` +- Define new model `PermissionRequestV2` to support multiple permissions at once for event `Version2.GET_PERMISSIONS` + - So far the events `Version2.GET_PERMISSIONS` and `Version1.GET_PERMISSIONS` shared the model `PermissionRequest` as request payload model. However, as only the event `Version2.GET_PERMISSIONS` is enhanced the new model is introduced to distiguish the request payload between the two events. The event `Version1.GET_PERMISSIONS` is not enhanced as it is deprecated. + ## [1.25.1] - 2026-03-25 ### Added diff --git a/docs/events.md b/docs/events.md index 01c2d7e..1a18eb2 100644 --- a/docs/events.md +++ b/docs/events.md @@ -124,16 +124,28 @@ Request permissions for specified object from the Shell. The version 3 uses a di type: PermissionRequestV3 + Supports object or array of objects as request payload: + ```typescript { objectName: string; // permission object type } ``` + or + + ```typescript + { + objectName: string; // permission object type + } [] + ``` + - Response payload type: PermissionResponseV3 + In case array of objects are provided as payload, there will be a response for each object. + ```typescript { objectName: string; @@ -158,7 +170,9 @@ Request permissions for specified object from the Shell - Request payload - type: PermissionRequest + type: PermissionRequestV2 + + Supports object or array of objects as request payload: ```typescript { @@ -167,10 +181,21 @@ Request permissions for specified object from the Shell } ``` + or + + ```typescript + { + objectName: string; // permission object type + owners?: string[]; // person Ids + } [] + ``` + - Response payload type: PermissionResponse + In case array of objects are provided as payload, there will be a response for each object. + ```typescript { objectName: string; diff --git a/package-lock.json b/package-lock.json index 3536cc0..cde8966 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "fsm-shell", - "version": "1.25.1", + "version": "1.26.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "fsm-shell", - "version": "1.25.1", + "version": "1.26.0", "license": "Apache-2.0", "devDependencies": { "@types/jasmine": "^3.5.12", diff --git a/package.json b/package.json index bb7dba3..d1f397f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fsm-shell", - "version": "1.25.1", + "version": "1.26.0", "description": "client library for FSM shell", "main": "release/fsm-shell-client.js", "module": "release/fsm-shell-client.es.js", diff --git a/src/index.ts b/src/index.ts index 2389f44..3155c46 100644 --- a/src/index.ts +++ b/src/index.ts @@ -42,6 +42,7 @@ import { OutletsRequestDynamicContextResponse, Permission, PermissionRequest, + PermissionRequestV2, PermissionRequestV3, PermissionResponse, PermissionResponseV3, @@ -80,6 +81,7 @@ export { OutletsRequestDynamicContextResponse, Permission, PermissionRequest, + PermissionRequestV2, PermissionRequestV3, PermissionResponse, PermissionResponseV3, diff --git a/src/models/index.ts b/src/models/index.ts index 852d00c..518e8e5 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -1,5 +1,6 @@ export { PermissionRequest } from './permissions/permission-request.model'; export { PermissionResponse } from './permissions/permission-response.model'; +export { PermissionRequestV2 } from './permissions/permission-request.v2.model'; export { PermissionRequestV3 } from './permissions/permission-request.v3.model'; export { PermissionResponseV3 } from './permissions/permission-response.v3.model'; export { Permission } from './permissions/permission.model'; diff --git a/src/models/permissions/permission-request.v2.model.ts b/src/models/permissions/permission-request.v2.model.ts new file mode 100644 index 0000000..3e3cde9 --- /dev/null +++ b/src/models/permissions/permission-request.v2.model.ts @@ -0,0 +1,6 @@ +export interface PermissionRequestV2Payload { + objectName: string; + owners?: string[]; +} + +export type PermissionRequestV2 = PermissionRequestV2Payload | PermissionRequestV2Payload[]; diff --git a/src/models/permissions/permission-request.v3.model.ts b/src/models/permissions/permission-request.v3.model.ts index 98abbae..5d02f7e 100644 --- a/src/models/permissions/permission-request.v3.model.ts +++ b/src/models/permissions/permission-request.v3.model.ts @@ -1,3 +1,5 @@ -export interface PermissionRequestV3 { +export interface PermissionRequestV3Payload { objectName: string; -} +}; + +export type PermissionRequestV3 = PermissionRequestV3Payload | PermissionRequestV3Payload[]; diff --git a/src/validation/schemas/permissions/get-permissions-request.v2.schema.ts b/src/validation/schemas/permissions/get-permissions-request.v2.schema.ts index 3c2fbf0..159df87 100644 --- a/src/validation/schemas/permissions/get-permissions-request.v2.schema.ts +++ b/src/validation/schemas/permissions/get-permissions-request.v2.schema.ts @@ -1,15 +1,30 @@ export const getPermissionsRequest_v2_schema = { - type: 'object', - properties: { - objectName: { - type: 'string', + $defs: { + payload: { + type: 'object', + properties: { + objectName: { + type: 'string', + }, + }, + owners: { + type: 'array', + items: { + type: 'string', + }, + }, + required: ['objectName'], + } + }, + oneOf: [ + { + $ref: '#/$defs/payload', }, - owners: { + { type: 'array', items: { - type: 'string', - }, - }, - }, - required: ['objectName'], + $ref: '#/$defs/payload', + } + } + ], }; diff --git a/src/validation/schemas/permissions/get-permissions-request.v3.schema.ts b/src/validation/schemas/permissions/get-permissions-request.v3.schema.ts index 390cd74..7c8e6b6 100644 --- a/src/validation/schemas/permissions/get-permissions-request.v3.schema.ts +++ b/src/validation/schemas/permissions/get-permissions-request.v3.schema.ts @@ -1,9 +1,24 @@ export const getPermissionsRequest_v3_schema = { - type: 'object', - properties: { - objectName: { - type: 'string', - }, + $defs: { + payload: { + type: 'object', + properties: { + objectName: { + type: 'string', + }, + }, + required: ['objectName'], + } }, - required: ['objectName'], + oneOf: [ + { + $ref: '#/$defs/payload', + }, + { + type: 'array', + items: { + $ref: '#/$defs/payload', + } + } + ], }; diff --git a/src/validation/schemas/schemas.spec.ts b/src/validation/schemas/schemas.spec.ts index 942f5f4..082f5f8 100644 --- a/src/validation/schemas/schemas.spec.ts +++ b/src/validation/schemas/schemas.spec.ts @@ -82,8 +82,10 @@ export const validModalOpenRequest_v2 = { }; export const validModalCloseRequest_v1 = {}; export const validGetPermissionsRequest_v1 = { objectName: 'string', owners: ['string'] }; -export const validGetPermissionsRequest_v2 = { objectName: 'string', owners: ['string'] }; -export const validGetPermissionsRequest_v3 = { objectName: 'string' }; +export const validGetPermissionsRequest_v2_subschema_1 = { objectName: 'string', owners: ['string'] }; +export const validGetPermissionsRequest_v2_subschema_2 = [{ objectName: 'string', owners: ['string'] }, { objectName: 'string', owners: ['string'] }]; +export const validGetPermissionsRequest_v3_subschema_1 = { objectName: 'string' }; +export const validGetPermissionsRequest_v3_subschema_2 = [{ objectName: 'string' }, { objectName: 'string' }]; export const validGetPermissionsResponse_v1 = { CREATE: true, READ: true, UPDATE: true, DELETE: true, UI_PERMISSIONS: [1] }; export const validGetPermissionsResponse_v2 = { objectName: 'string', owners: ['string'], permission: validGetPermissionsResponse_v1 }; export const validGetPermissionsResponse_v3 = { objectName: 'string', permission: validGetPermissionsResponse_v1 }; @@ -325,8 +327,10 @@ describe('Schemas', () => { validateValidDataAgainstSchemaHelper(ajv, 'modalOpenRequest_v2_schema', modalOpenRequest_v2_schema, validModalOpenRequest_v2); validateValidDataAgainstSchemaHelper(ajv, 'modalCloseRequest_v1_schema', modalCloseRequest_v1_schema, validModalCloseRequest_v1); validateValidDataAgainstSchemaHelper(ajv, 'getPermissionsRequest_v1_schema', getPermissionsRequest_v1_schema, validGetPermissionsRequest_v1); - validateValidDataAgainstSchemaHelper(ajv, 'getPermissionsRequest_v2_schema', getPermissionsRequest_v2_schema, validGetPermissionsRequest_v2); - validateValidDataAgainstSchemaHelper(ajv, 'getPermissionsRequest_v3_schema', getPermissionsRequest_v3_schema, validGetPermissionsRequest_v3); + validateValidDataAgainstSchemaHelper(ajv, 'getPermissionsRequest_v2_schema', getPermissionsRequest_v2_schema, validGetPermissionsRequest_v2_subschema_1); + validateValidDataAgainstSchemaHelper(ajv, 'getPermissionsRequest_v2_schema', getPermissionsRequest_v2_schema, validGetPermissionsRequest_v2_subschema_2); + validateValidDataAgainstSchemaHelper(ajv, 'getPermissionsRequest_v3_schema', getPermissionsRequest_v3_schema, validGetPermissionsRequest_v3_subschema_1); + validateValidDataAgainstSchemaHelper(ajv, 'getPermissionsRequest_v3_schema', getPermissionsRequest_v3_schema, validGetPermissionsRequest_v3_subschema_2); validateValidDataAgainstSchemaHelper(ajv, 'getPermissionsResponse_v1_schema', getPermissionsResponse_v1_schema, validGetPermissionsResponse_v1); validateValidDataAgainstSchemaHelper(ajv, 'getPermissionsResponse_v2_schema', getPermissionsResponse_v2_schema, validGetPermissionsResponse_v2); validateValidDataAgainstSchemaHelper(ajv, 'getPermissionsResponse_v3_schema', getPermissionsResponse_v3_schema, validGetPermissionsResponse_v3); From 7ff321770228eae8fa7f00e380c03ba60870dd46 Mon Sep 17 00:00:00 2001 From: Lukas Kistl <51904901+kistll@users.noreply.github.com> Date: Mon, 30 Mar 2026 14:55:01 +0200 Subject: [PATCH 2/3] Fix typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 266ad47..0d75d67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Change model `PermissionRequestV3` from `interface` to `type` to support multiple permissions at once for event `Version3.GET_PERMISSIONS` - Define new model `PermissionRequestV2` to support multiple permissions at once for event `Version2.GET_PERMISSIONS` - - So far the events `Version2.GET_PERMISSIONS` and `Version1.GET_PERMISSIONS` shared the model `PermissionRequest` as request payload model. However, as only the event `Version2.GET_PERMISSIONS` is enhanced the new model is introduced to distiguish the request payload between the two events. The event `Version1.GET_PERMISSIONS` is not enhanced as it is deprecated. + - So far the events `Version2.GET_PERMISSIONS` and `Version1.GET_PERMISSIONS` shared the model `PermissionRequest` as request payload model. However, as only the event `Version2.GET_PERMISSIONS` is enhanced the new model is introduced to distinguish the request payload between the two events. The event `Version1.GET_PERMISSIONS` is not enhanced as it is deprecated. ## [1.25.1] - 2026-03-25 From 1d283084c7baf1eff5fadb9e220222a686d5bac4 Mon Sep 17 00:00:00 2001 From: Kistl Date: Mon, 30 Mar 2026 16:21:42 +0200 Subject: [PATCH 3/3] Expose model ValidationMode --- CHANGELOG.md | 1 + src/index.ts | 2 ++ src/models/index.ts | 2 ++ 3 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d75d67..1b68b58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Change model `PermissionRequestV3` from `interface` to `type` to support multiple permissions at once for event `Version3.GET_PERMISSIONS` - Define new model `PermissionRequestV2` to support multiple permissions at once for event `Version2.GET_PERMISSIONS` - So far the events `Version2.GET_PERMISSIONS` and `Version1.GET_PERMISSIONS` shared the model `PermissionRequest` as request payload model. However, as only the event `Version2.GET_PERMISSIONS` is enhanced the new model is introduced to distinguish the request payload between the two events. The event `Version1.GET_PERMISSIONS` is not enhanced as it is deprecated. +- Expose model `ValidationMode` ## [1.25.1] - 2026-03-25 diff --git a/src/index.ts b/src/index.ts index 3155c46..141e415 100644 --- a/src/index.ts +++ b/src/index.ts @@ -55,6 +55,7 @@ import { SetViewStateResponse, TraceEntry, UiPermissions, + ValidationMode } from './models/index'; export { @@ -94,4 +95,5 @@ export { SetViewStateResponse, TraceEntry, UiPermissions, + ValidationMode }; diff --git a/src/models/index.ts b/src/models/index.ts index 518e8e5..584fd5d 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -54,3 +54,5 @@ export { Outlet } from './outlets/outlet.model'; export { TraceEntry } from './trace/trace-entry.model'; export { CloudStorageKey } from './cloud-storage/cloud-storage-key.model'; + +export { ValidationMode } from '../ShellSdk';