Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ 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 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

### Added
Expand Down
27 changes: 26 additions & 1 deletion docs/events.md
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
{
Expand All @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
4 changes: 4 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import {
OutletsRequestDynamicContextResponse,
Permission,
PermissionRequest,
PermissionRequestV2,
PermissionRequestV3,
PermissionResponse,
PermissionResponseV3,
Expand All @@ -54,6 +55,7 @@ import {
SetViewStateResponse,
TraceEntry,
UiPermissions,
ValidationMode
} from './models/index';

export {
Expand All @@ -80,6 +82,7 @@ export {
OutletsRequestDynamicContextResponse,
Permission,
PermissionRequest,
PermissionRequestV2,
PermissionRequestV3,
PermissionResponse,
PermissionResponseV3,
Expand All @@ -92,4 +95,5 @@ export {
SetViewStateResponse,
TraceEntry,
UiPermissions,
ValidationMode
};
3 changes: 3 additions & 0 deletions src/models/index.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -53,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';
6 changes: 6 additions & 0 deletions src/models/permissions/permission-request.v2.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export interface PermissionRequestV2Payload {
objectName: string;
owners?: string[];
}

export type PermissionRequestV2 = PermissionRequestV2Payload | PermissionRequestV2Payload[];
6 changes: 4 additions & 2 deletions src/models/permissions/permission-request.v3.model.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
export interface PermissionRequestV3 {
export interface PermissionRequestV3Payload {
objectName: string;
}
};

export type PermissionRequestV3 = PermissionRequestV3Payload | PermissionRequestV3Payload[];
Original file line number Diff line number Diff line change
@@ -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',
}
}
],
};
Original file line number Diff line number Diff line change
@@ -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',
}
}
],
};
12 changes: 8 additions & 4 deletions src/validation/schemas/schemas.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 };
Expand Down Expand Up @@ -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);
Expand Down
Loading