@equinor/fusion-framework-react-components-people-provider 1.5.3 → 1.5.4

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.
@@ -1,4 +1,4 @@
1
- import { EMPTY, Observable, concat, from, fromEvent, of } from 'rxjs';
1
+ import { EMPTY, type Observable, concat, from, fromEvent, of } from 'rxjs';
2
2
  import { catchError, filter, find, map, switchMap, take, takeUntil } from 'rxjs/operators';
3
3
 
4
4
  import type { ApiPerson, PeopleApiClient } from '@equinor/fusion-framework-module-services/people';
@@ -8,11 +8,11 @@ import type { ApiResponse as QueryPersonApiResponse } from '@equinor/fusion-fram
8
8
  import { Query } from '@equinor/fusion-query';
9
9
  import { queryValue } from '@equinor/fusion-query/operators';
10
10
 
11
- import { ApiProviderError } from '@equinor/fusion-framework-module-services/provider';
11
+ import type { ApiProviderError } from '@equinor/fusion-framework-module-services/provider';
12
12
 
13
13
  type GetPersonResult = GetPersonApiResponse<
14
- 'v4',
15
- { azureId: ''; expand: ['positions', 'manager'] }
14
+ 'v4',
15
+ { azureId: ''; expand: ['positions', 'manager'] }
16
16
  >;
17
17
 
18
18
  type PersonSearchResult = QueryPersonApiResponse<'v2'>;
@@ -20,247 +20,237 @@ type PersonSearchResult = QueryPersonApiResponse<'v2'>;
20
20
  type MatcherArgs = { upn: string; azureId?: string } | { upn?: string; azureId: string };
21
21
 
22
22
  type ResolverArgs<T> = T extends object
23
- ? { [K in keyof T]: T[K] } & { signal?: AbortSignal }
24
- : { signal?: AbortSignal };
23
+ ? { [K in keyof T]: T[K] } & { signal?: AbortSignal }
24
+ : { signal?: AbortSignal };
25
25
 
26
26
  const personMatcher =
27
- (args: MatcherArgs) =>
28
- <T extends { azureUniqueId?: string; upn?: string }>(value: T): value is T => {
29
- const { azureId, upn } = args;
30
- if (azureId && upn) {
31
- return (
32
- value.upn?.toLocaleLowerCase() === upn.toLocaleLowerCase() &&
33
- value.azureUniqueId === azureId
34
- );
35
- } else if (azureId) {
36
- return value.azureUniqueId === azureId;
37
- } else if (upn) {
38
- return value.upn?.toLocaleLowerCase() === upn.toLocaleLowerCase();
39
- }
40
- return false;
41
- };
27
+ (args: MatcherArgs) =>
28
+ <T extends { azureUniqueId?: string; upn?: string }>(value: T): value is T => {
29
+ const { azureId, upn } = args;
30
+ if (azureId && upn) {
31
+ return (
32
+ value.upn?.toLocaleLowerCase() === upn.toLocaleLowerCase() &&
33
+ value.azureUniqueId === azureId
34
+ );
35
+ } else if (azureId) {
36
+ return value.azureUniqueId === azureId;
37
+ } else if (upn) {
38
+ return value.upn?.toLocaleLowerCase() === upn.toLocaleLowerCase();
39
+ }
40
+ return false;
41
+ };
42
42
 
43
43
  export interface IPersonController {
44
- getPerson(args: ResolverArgs<MatcherArgs>): Observable<GetPersonResult>;
45
- getPersonInfo(args: ResolverArgs<MatcherArgs>): Observable<ApiPerson<'v2'>>;
46
- getPhoto(args: ResolverArgs<MatcherArgs>): Observable<string>;
47
- search(args: ResolverArgs<{ search: string }>): Observable<PersonSearchResult>;
44
+ getPerson(args: ResolverArgs<MatcherArgs>): Observable<GetPersonResult>;
45
+ getPersonInfo(args: ResolverArgs<MatcherArgs>): Observable<ApiPerson<'v2'>>;
46
+ getPhoto(args: ResolverArgs<MatcherArgs>): Observable<string>;
47
+ search(args: ResolverArgs<{ search: string }>): Observable<PersonSearchResult>;
48
48
  }
49
49
 
50
50
  export type PersonControllerOptions = {
51
- fallbackImage?: Blob;
51
+ fallbackImage?: Blob;
52
52
  };
53
53
 
54
54
  export class PersonController implements IPersonController {
55
- #personQuery: Query<GetPersonResult, ResolverArgs<{ azureId: string }>>;
56
- #personSearchQuery: Query<PersonSearchResult, ResolverArgs<{ search: string }>>;
57
- #personPhotoQuery: Query<Blob, ResolverArgs<{ azureId: string }>>;
55
+ #personQuery: Query<GetPersonResult, ResolverArgs<{ azureId: string }>>;
56
+ #personSearchQuery: Query<PersonSearchResult, ResolverArgs<{ search: string }>>;
57
+ #personPhotoQuery: Query<Blob, ResolverArgs<{ azureId: string }>>;
58
58
 
59
- constructor(client: PeopleApiClient, options?: PersonControllerOptions) {
60
- const expire = 3 * 60 * 1000;
61
- this.#personQuery = new Query({
62
- expire,
63
- queueOperator: 'merge',
64
- key: ({ azureId }) => azureId,
65
- client: {
66
- fn: ({ azureId }, signal): Observable<GetPersonResult> => {
67
- return client
68
- .get(
69
- 'v4',
70
- 'json$',
71
- { azureId, expand: ['manager', 'positions'] },
72
- { signal },
73
- )
74
- .pipe(
75
- map((result) => {
76
- const { positions = [] } = result;
77
- return {
78
- ...result,
79
- positions: positions.filter(
80
- (x) => new Date(x.appliesTo) > new Date(),
81
- ),
82
- };
83
- }),
84
- );
85
- },
86
- },
87
- });
88
- this.#personSearchQuery = new Query({
89
- expire,
90
- queueOperator: 'merge',
91
- key: ({ search }) => search,
92
- client: {
93
- fn: ({ search }, signal) => {
94
- return client.query('v2', 'json$', { search }, { signal });
95
- },
96
- },
97
- });
98
- this.#personPhotoQuery = new Query({
99
- expire,
100
- queueOperator: 'merge',
101
- key: ({ azureId }) => azureId,
102
- client: {
103
- fn: ({ azureId }, signal): Observable<Blob> => {
104
- return client.photo('v2', 'blob$', { azureId }, { signal }).pipe(
105
- map((result) => {
106
- return result.blob;
107
- }),
108
- catchError((err) => {
109
- if (
110
- (err as Error).name === 'ApiProviderError' &&
111
- (err as ApiProviderError).response?.status === 404 &&
112
- options?.fallbackImage
113
- ) {
114
- return of(options?.fallbackImage);
115
- }
116
- throw err;
117
- }),
118
- );
119
- },
120
- },
121
- });
122
- }
59
+ constructor(client: PeopleApiClient, options?: PersonControllerOptions) {
60
+ const expire = 3 * 60 * 1000;
61
+ this.#personQuery = new Query({
62
+ expire,
63
+ queueOperator: 'merge',
64
+ key: ({ azureId }) => azureId,
65
+ client: {
66
+ fn: ({ azureId }, signal): Observable<GetPersonResult> => {
67
+ return client
68
+ .get('v4', 'json$', { azureId, expand: ['manager', 'positions'] }, { signal })
69
+ .pipe(
70
+ map((result) => {
71
+ const { positions = [] } = result;
72
+ return {
73
+ ...result,
74
+ positions: positions.filter((x) => new Date(x.appliesTo) > new Date()),
75
+ };
76
+ }),
77
+ );
78
+ },
79
+ },
80
+ });
81
+ this.#personSearchQuery = new Query({
82
+ expire,
83
+ queueOperator: 'merge',
84
+ key: ({ search }) => search,
85
+ client: {
86
+ fn: ({ search }, signal) => {
87
+ return client.query('v2', 'json$', { search }, { signal });
88
+ },
89
+ },
90
+ });
91
+ this.#personPhotoQuery = new Query({
92
+ expire,
93
+ queueOperator: 'merge',
94
+ key: ({ azureId }) => azureId,
95
+ client: {
96
+ fn: ({ azureId }, signal): Observable<Blob> => {
97
+ return client.photo('v2', 'blob$', { azureId }, { signal }).pipe(
98
+ map((result) => {
99
+ return result.blob;
100
+ }),
101
+ catchError((err) => {
102
+ if (
103
+ (err as Error).name === 'ApiProviderError' &&
104
+ (err as ApiProviderError).response?.status === 404 &&
105
+ options?.fallbackImage
106
+ ) {
107
+ return of(options?.fallbackImage);
108
+ }
109
+ throw err;
110
+ }),
111
+ );
112
+ },
113
+ },
114
+ });
115
+ }
123
116
 
124
- public search(args: { search: string; signal?: AbortSignal }): Observable<PersonSearchResult> {
125
- const { search, signal } = args;
126
- return this.#personSearchQuery.query({ search }, { signal }).pipe(queryValue);
127
- }
117
+ public search(args: { search: string; signal?: AbortSignal }): Observable<PersonSearchResult> {
118
+ const { search, signal } = args;
119
+ return this.#personSearchQuery.query({ search }, { signal }).pipe(queryValue);
120
+ }
128
121
 
129
- /** TODO why does this need to have data?!? */
130
- public getPhoto(args: ResolverArgs<MatcherArgs>): Observable<string> {
131
- const { azureId, upn, signal } = args;
122
+ /** TODO why does this need to have data?!? */
123
+ public getPhoto(args: ResolverArgs<MatcherArgs>): Observable<string> {
124
+ const { azureId, upn, signal } = args;
132
125
 
133
- if (azureId) {
134
- return this._getPersonPhotoByAzureId(azureId, signal);
135
- } else if (upn) {
136
- return this._getPersonPhotoByUpn(upn, signal);
137
- }
138
- throw Error('invalid args provided');
126
+ if (azureId) {
127
+ return this._getPersonPhotoByAzureId(azureId, signal);
128
+ } else if (upn) {
129
+ return this._getPersonPhotoByUpn(upn, signal);
139
130
  }
131
+ throw Error('invalid args provided');
132
+ }
140
133
 
141
- public getPerson(args: ResolverArgs<MatcherArgs>): Observable<GetPersonResult> {
142
- const { azureId, upn, signal } = args;
143
- if (azureId) {
144
- return this._getPersonByAzureId(azureId, signal);
145
- } else if (upn) {
146
- return this._getPersonByUpn(upn, signal);
147
- }
148
- throw Error('invalid args provided');
134
+ public getPerson(args: ResolverArgs<MatcherArgs>): Observable<GetPersonResult> {
135
+ const { azureId, upn, signal } = args;
136
+ if (azureId) {
137
+ return this._getPersonByAzureId(azureId, signal);
138
+ } else if (upn) {
139
+ return this._getPersonByUpn(upn, signal);
149
140
  }
141
+ throw Error('invalid args provided');
142
+ }
150
143
 
151
- public getPersonInfo(args: ResolverArgs<MatcherArgs>): Observable<ApiPerson<'v2'>> {
152
- const { azureId, upn, signal } = args;
153
- if (azureId) {
154
- return this._getPersonInfoById(azureId, signal);
155
- } else if (upn) {
156
- return this._getPersonInfoByUpn(upn, signal);
157
- }
158
- throw Error('invalid args provided');
144
+ public getPersonInfo(args: ResolverArgs<MatcherArgs>): Observable<ApiPerson<'v2'>> {
145
+ const { azureId, upn, signal } = args;
146
+ if (azureId) {
147
+ return this._getPersonInfoById(azureId, signal);
148
+ } else if (upn) {
149
+ return this._getPersonInfoByUpn(upn, signal);
159
150
  }
151
+ throw Error('invalid args provided');
152
+ }
160
153
 
161
- protected _getPersonByUpn(upn: string, signal?: AbortSignal): Observable<GetPersonResult> {
162
- const abort$ = signal ? fromEvent(signal, 'abort') : EMPTY;
163
- return concat(
164
- this._personCache$({ upn }),
165
- this._getPersonInfoByUpn(upn, signal).pipe(
166
- filter(isApiPerson('v2')),
167
- switchMap(({ azureUniqueId: azureId }) => {
168
- return this._getPersonByAzureId(azureId, signal);
169
- }),
170
- ),
171
- ).pipe(
172
- /** */
173
- filter(isApiPerson('v4')),
174
- takeUntil(abort$),
175
- );
176
- }
154
+ protected _getPersonByUpn(upn: string, signal?: AbortSignal): Observable<GetPersonResult> {
155
+ const abort$ = signal ? fromEvent(signal, 'abort') : EMPTY;
156
+ return concat(
157
+ this._personCache$({ upn }),
158
+ this._getPersonInfoByUpn(upn, signal).pipe(
159
+ filter(isApiPerson('v2')),
160
+ switchMap(({ azureUniqueId: azureId }) => {
161
+ return this._getPersonByAzureId(azureId, signal);
162
+ }),
163
+ ),
164
+ ).pipe(
165
+ /** */
166
+ filter(isApiPerson('v4')),
167
+ takeUntil(abort$),
168
+ );
169
+ }
177
170
 
178
- public _getPersonByAzureId(azureId: string, signal?: AbortSignal): Observable<GetPersonResult> {
179
- return this.#personQuery.query({ azureId }, { signal }).pipe(queryValue);
180
- }
171
+ public _getPersonByAzureId(azureId: string, signal?: AbortSignal): Observable<GetPersonResult> {
172
+ return this.#personQuery.query({ azureId }, { signal }).pipe(queryValue);
173
+ }
181
174
 
182
- protected _getPersonInfoById(
183
- azureId: string,
184
- signal?: AbortSignal,
185
- ): Observable<ApiPerson<'v2'>> {
186
- const abort$ = signal ? fromEvent(signal, 'abort') : EMPTY;
187
- return concat(
188
- /** */
189
- this._personCache$({ azureId }),
190
- this._queryCache$({ azureId }),
191
- this._getPersonByAzureId(azureId, signal),
192
- ).pipe(
193
- /** */
194
- filter(isApiPerson('v2')),
195
- takeUntil(abort$),
196
- );
197
- }
175
+ protected _getPersonInfoById(azureId: string, signal?: AbortSignal): Observable<ApiPerson<'v2'>> {
176
+ const abort$ = signal ? fromEvent(signal, 'abort') : EMPTY;
177
+ return concat(
178
+ /** */
179
+ this._personCache$({ azureId }),
180
+ this._queryCache$({ azureId }),
181
+ this._getPersonByAzureId(azureId, signal),
182
+ ).pipe(
183
+ /** */
184
+ filter(isApiPerson('v2')),
185
+ takeUntil(abort$),
186
+ );
187
+ }
198
188
 
199
- protected _getPersonInfoByUpn(upn: string, signal?: AbortSignal): Observable<ApiPerson<'v2'>> {
200
- const matcher = personMatcher({ upn });
201
- const abort$ = signal ? fromEvent(signal, 'abort') : EMPTY;
202
- return concat(
203
- this._personCache$({ upn }),
204
- this._queryCache$({ upn }),
205
- this.#personSearchQuery.query({ search: upn }, { signal }).pipe(
206
- /** extract first match, should only be 0 or 1 */
207
- map((x) => x.value.find(matcher)),
208
- /** type cast and end stream */
209
- find(isApiPerson('v2')),
210
- ),
211
- ).pipe(
212
- /** */
213
- find(isApiPerson('v2')),
214
- filter(isApiPerson('v2')),
215
- filter(isApiPerson('v2')),
216
- takeUntil(abort$),
217
- );
218
- }
189
+ protected _getPersonInfoByUpn(upn: string, signal?: AbortSignal): Observable<ApiPerson<'v2'>> {
190
+ const matcher = personMatcher({ upn });
191
+ const abort$ = signal ? fromEvent(signal, 'abort') : EMPTY;
192
+ return concat(
193
+ this._personCache$({ upn }),
194
+ this._queryCache$({ upn }),
195
+ this.#personSearchQuery.query({ search: upn }, { signal }).pipe(
196
+ /** extract first match, should only be 0 or 1 */
197
+ map((x) => x.value.find(matcher)),
198
+ /** type cast and end stream */
199
+ find(isApiPerson('v2')),
200
+ ),
201
+ ).pipe(
202
+ /** */
203
+ find(isApiPerson('v2')),
204
+ filter(isApiPerson('v2')),
205
+ filter(isApiPerson('v2')),
206
+ takeUntil(abort$),
207
+ );
208
+ }
219
209
 
220
- protected _getPersonPhotoByAzureId(azureId: string, signal?: AbortSignal): Observable<string> {
221
- return this.#personPhotoQuery.query({ azureId }, { signal }).pipe(
222
- /** */
223
- take(1),
224
- map((result) => URL.createObjectURL(result.value)),
225
- );
226
- }
210
+ protected _getPersonPhotoByAzureId(azureId: string, signal?: AbortSignal): Observable<string> {
211
+ return this.#personPhotoQuery.query({ azureId }, { signal }).pipe(
212
+ /** */
213
+ take(1),
214
+ map((result) => URL.createObjectURL(result.value)),
215
+ );
216
+ }
227
217
 
228
- protected _getPersonPhotoByUpn(upn: string, signal?: AbortSignal) {
229
- return this._getPersonInfoByUpn(upn, signal).pipe(
230
- /** */
231
- take(1),
232
- switchMap((x) => this._getPersonPhotoByAzureId(x.azureUniqueId, signal)),
233
- );
234
- }
218
+ protected _getPersonPhotoByUpn(upn: string, signal?: AbortSignal) {
219
+ return this._getPersonInfoByUpn(upn, signal).pipe(
220
+ /** */
221
+ take(1),
222
+ switchMap((x) => this._getPersonPhotoByAzureId(x.azureUniqueId, signal)),
223
+ );
224
+ }
235
225
 
236
- protected _personCache$(args: MatcherArgs): Observable<GetPersonResult> {
237
- const mather = personMatcher(args);
238
- return this.#personQuery.cache.state$.pipe(
239
- /** make subscription cold */
240
- take(1),
241
- /** map out cached ApiPerson_v2 which matches upn */
242
- map((x) => Object.values(x).find((x) => mather(x.value))?.value),
243
- find(isApiPerson('v4')),
244
- filter(isApiPerson('v4')),
245
- );
246
- }
226
+ protected _personCache$(args: MatcherArgs): Observable<GetPersonResult> {
227
+ const mather = personMatcher(args);
228
+ return this.#personQuery.cache.state$.pipe(
229
+ /** make subscription cold */
230
+ take(1),
231
+ /** map out cached ApiPerson_v2 which matches upn */
232
+ map((x) => Object.values(x).find((x) => mather(x.value))?.value),
233
+ find(isApiPerson('v4')),
234
+ filter(isApiPerson('v4')),
235
+ );
236
+ }
247
237
 
248
- protected _queryCache$(args: MatcherArgs): Observable<ApiPerson<'v2'>> {
249
- const mather = personMatcher(args);
250
- return this.#personSearchQuery.cache.state$.pipe(
251
- /** make subscription cold */
252
- take(1),
253
- switchMap((entry) => {
254
- /** expand cache records */
255
- return from(Object.values(entry)).pipe(
256
- /** find matching cache record item */
257
- map((x) => x.value.find((x) => mather(x))),
258
- /** type cast and end stream */
259
- find(isApiPerson('v2')),
260
- );
261
- }),
262
- find(isApiPerson('v2')),
263
- filter(isApiPerson('v2')),
238
+ protected _queryCache$(args: MatcherArgs): Observable<ApiPerson<'v2'>> {
239
+ const mather = personMatcher(args);
240
+ return this.#personSearchQuery.cache.state$.pipe(
241
+ /** make subscription cold */
242
+ take(1),
243
+ switchMap((entry) => {
244
+ /** expand cache records */
245
+ return from(Object.values(entry)).pipe(
246
+ /** find matching cache record item */
247
+ map((x) => x.value.find((x) => mather(x))),
248
+ /** type cast and end stream */
249
+ find(isApiPerson('v2')),
264
250
  );
265
- }
251
+ }),
252
+ find(isApiPerson('v2')),
253
+ filter(isApiPerson('v2')),
254
+ );
255
+ }
266
256
  }
@@ -1,47 +1,47 @@
1
1
  import { firstValueFrom, map } from 'rxjs';
2
2
 
3
- import { PersonDetails, PersonInfo, PersonResolver } from '@equinor/fusion-wc-person';
4
- import { IPersonController } from './PersonController';
3
+ import type { PersonDetails, PersonInfo, PersonResolver } from '@equinor/fusion-wc-person';
4
+ import type { IPersonController } from './PersonController';
5
5
 
6
6
  export const createResolver = (controller: IPersonController): PersonResolver => ({
7
- getDetails(args) {
8
- return firstValueFrom(
9
- controller.getPerson(args).pipe(
10
- /** TODO */
11
- map((x) => ({ ...x, azureId: x.azureUniqueId }) as unknown as PersonDetails),
12
- ),
13
- );
14
- },
15
- getInfo(args) {
16
- return firstValueFrom(
17
- controller.getPersonInfo(args).pipe(
18
- /** TODO */
19
- map((x) => ({ ...x, azureId: x.azureUniqueId }) as unknown as PersonInfo),
20
- ),
21
- );
22
- },
23
- getPhoto(args) {
24
- return firstValueFrom(controller.getPhoto(args));
25
- },
26
- search(args) {
27
- return firstValueFrom(
28
- controller.search(args).pipe(
29
- map((x) =>
30
- x.map(
31
- (x) =>
32
- ({
33
- ...x,
34
- azureId: x.azureUniqueId,
35
- // TODO
36
- // @asbjornhaland
37
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
38
- // @ts-ignore https://github.com/equinor/fusion-web-components/issues/804
39
- }) as unknown as PersonInfo,
40
- ),
41
- ),
42
- ),
43
- );
44
- },
7
+ getDetails(args) {
8
+ return firstValueFrom(
9
+ controller.getPerson(args).pipe(
10
+ /** TODO */
11
+ map((x) => ({ ...x, azureId: x.azureUniqueId }) as unknown as PersonDetails),
12
+ ),
13
+ );
14
+ },
15
+ getInfo(args) {
16
+ return firstValueFrom(
17
+ controller.getPersonInfo(args).pipe(
18
+ /** TODO */
19
+ map((x) => ({ ...x, azureId: x.azureUniqueId }) as unknown as PersonInfo),
20
+ ),
21
+ );
22
+ },
23
+ getPhoto(args) {
24
+ return firstValueFrom(controller.getPhoto(args));
25
+ },
26
+ search(args) {
27
+ return firstValueFrom(
28
+ controller.search(args).pipe(
29
+ map((x) =>
30
+ x.map(
31
+ (x) =>
32
+ ({
33
+ ...x,
34
+ azureId: x.azureUniqueId,
35
+ // TODO
36
+ // @asbjornhaland
37
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
38
+ // @ts-ignore https://github.com/equinor/fusion-web-components/issues/804
39
+ }) as unknown as PersonInfo,
40
+ ),
41
+ ),
42
+ ),
43
+ );
44
+ },
45
45
  });
46
46
 
47
47
  export default createResolver;
@@ -1,19 +1,19 @@
1
1
  import { lazy } from 'react';
2
2
  import { PeopleResolverComponent } from './PeopleResolver';
3
- import { PersonController, PersonControllerOptions } from './PersonController';
3
+ import { PersonController, type PersonControllerOptions } from './PersonController';
4
4
  import { createResolver } from './create-resolver';
5
- import { IApiProvider } from '@equinor/fusion-framework-module-services';
5
+ import type { IApiProvider } from '@equinor/fusion-framework-module-services';
6
6
 
7
7
  export const makeResolver = (services: IApiProvider, options?: PersonControllerOptions) => {
8
- return lazy(async () => {
9
- const client = await services.createPeopleClient();
10
- const controller = new PersonController(client, options);
11
- const resolver = createResolver(controller);
12
- const Component = ({ children }: { readonly children?: React.ReactNode }) => (
13
- <PeopleResolverComponent resolver={resolver}>{children}</PeopleResolverComponent>
14
- );
15
- return {
16
- default: Component,
17
- };
18
- });
8
+ return lazy(async () => {
9
+ const client = await services.createPeopleClient();
10
+ const controller = new PersonController(client, options);
11
+ const resolver = createResolver(controller);
12
+ const Component = ({ children }: { readonly children?: React.ReactNode }) => (
13
+ <PeopleResolverComponent resolver={resolver}>{children}</PeopleResolverComponent>
14
+ );
15
+ return {
16
+ default: Component,
17
+ };
18
+ });
19
19
  };
package/src/types.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { ApiResponse as PersonDetailApiResponse } from '@equinor/fusion-framework-module-services/people/get';
2
2
 
3
3
  export type ApiPerson = PersonDetailApiResponse<
4
- 'v4',
5
- { azureId: ''; expand: ['positions', 'manager'] }
4
+ 'v4',
5
+ { azureId: ''; expand: ['positions', 'manager'] }
6
6
  >;
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // Generated by genversion.
2
- export const version = '1.5.3';
2
+ export const version = '1.5.4';