@workos-inc/node 6.3.0 → 6.5.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.
- package/lib/common/interfaces/event.interface.d.ts +12 -4
- package/lib/common/serializers/event.serializer.js +3 -0
- package/lib/common/utils/test-utils.d.ts +1 -1
- package/lib/user-management/interfaces/authentication-response.interface.d.ts +7 -4
- package/lib/user-management/interfaces/impersonator.interface.d.ts +8 -0
- package/lib/user-management/interfaces/impersonator.interface.js +2 -0
- package/lib/user-management/interfaces/index.d.ts +1 -0
- package/lib/user-management/interfaces/index.js +1 -0
- package/lib/user-management/interfaces/session.interface.d.ts +19 -0
- package/lib/user-management/interfaces/session.interface.js +2 -0
- package/lib/user-management/serializers/authentication-response.serializer.js +2 -2
- package/lib/user-management/serializers/session.serializer.d.ts +2 -0
- package/lib/user-management/serializers/session.serializer.js +13 -0
- package/lib/user-management/user-management.spec.js +24 -0
- package/lib/workos.js +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DirectoryUser, DirectoryUserResponse, DirectoryGroup, DirectoryGroupResponse, EventDirectory, EventDirectoryResponse } from '../../directory-sync/interfaces';
|
|
2
2
|
import { Connection, ConnectionResponse } from '../../sso/interfaces';
|
|
3
|
-
import { User, UserResponse } from '../../user-management/interfaces';
|
|
3
|
+
import { Session, SessionResponse, User, UserResponse } from '../../user-management/interfaces';
|
|
4
4
|
import { OrganizationMembership, OrganizationMembershipResponse } from '../../user-management/interfaces/organization-membership.interface';
|
|
5
5
|
export interface EventBase {
|
|
6
6
|
id: string;
|
|
@@ -162,6 +162,14 @@ export interface UserDeletedEventResponse extends EventResponseBase {
|
|
|
162
162
|
event: 'user.deleted';
|
|
163
163
|
data: UserResponse;
|
|
164
164
|
}
|
|
165
|
+
export interface UserImpersonatedEvent extends EventBase {
|
|
166
|
+
event: 'user.impersonated';
|
|
167
|
+
data: Session;
|
|
168
|
+
}
|
|
169
|
+
export interface UserImpersonatedEventResponse extends EventResponseBase {
|
|
170
|
+
event: 'user.impersonated';
|
|
171
|
+
data: SessionResponse;
|
|
172
|
+
}
|
|
165
173
|
export interface OrganizationMembershipAdded extends EventBase {
|
|
166
174
|
event: 'organization_membership.added';
|
|
167
175
|
data: OrganizationMembership;
|
|
@@ -186,7 +194,7 @@ export interface OrganizationMembershipRemovedResponse extends EventResponseBase
|
|
|
186
194
|
event: 'organization_membership.removed';
|
|
187
195
|
data: OrganizationMembershipResponse;
|
|
188
196
|
}
|
|
189
|
-
export type Event = ConnectionActivatedEvent | ConnectionDeactivatedEvent | ConnectionDeletedEvent | DsyncActivatedEvent | DsyncDeactivatedEvent | DsyncDeletedEvent | DsyncGroupCreatedEvent | DsyncGroupUpdatedEvent | DsyncGroupDeletedEvent | DsyncGroupUserAddedEvent | DsyncGroupUserRemovedEvent | DsyncUserCreatedEvent | DsyncUserUpdatedEvent | DsyncUserDeletedEvent | UserCreatedEvent | UserUpdatedEvent | UserDeletedEvent | OrganizationMembershipAdded | OrganizationMembershipUpdated | OrganizationMembershipRemoved;
|
|
190
|
-
export type EventResponse = ConnectionActivatedEventResponse | ConnectionDeactivatedEventResponse | ConnectionDeletedEventResponse | DsyncActivatedEventResponse | DsyncDeactivatedEventResponse | DsyncDeletedEventResponse | DsyncGroupCreatedEventResponse | DsyncGroupUpdatedEventResponse | DsyncGroupDeletedEventResponse | DsyncGroupUserAddedEventResponse | DsyncGroupUserRemovedEventResponse | DsyncUserCreatedEventResponse | DsyncUserUpdatedEventResponse | DsyncUserDeletedEventResponse | UserCreatedEventResponse | UserUpdatedEventResponse | UserDeletedEventResponse | OrganizationMembershipAddedResponse | OrganizationMembershipUpdatedResponse | OrganizationMembershipRemovedResponse;
|
|
191
|
-
export type EventName = '
|
|
197
|
+
export type Event = ConnectionActivatedEvent | ConnectionDeactivatedEvent | ConnectionDeletedEvent | DsyncActivatedEvent | DsyncDeactivatedEvent | DsyncDeletedEvent | DsyncGroupCreatedEvent | DsyncGroupUpdatedEvent | DsyncGroupDeletedEvent | DsyncGroupUserAddedEvent | DsyncGroupUserRemovedEvent | DsyncUserCreatedEvent | DsyncUserUpdatedEvent | DsyncUserDeletedEvent | UserCreatedEvent | UserUpdatedEvent | UserDeletedEvent | UserImpersonatedEvent | OrganizationMembershipAdded | OrganizationMembershipUpdated | OrganizationMembershipRemoved;
|
|
198
|
+
export type EventResponse = ConnectionActivatedEventResponse | ConnectionDeactivatedEventResponse | ConnectionDeletedEventResponse | DsyncActivatedEventResponse | DsyncDeactivatedEventResponse | DsyncDeletedEventResponse | DsyncGroupCreatedEventResponse | DsyncGroupUpdatedEventResponse | DsyncGroupDeletedEventResponse | DsyncGroupUserAddedEventResponse | DsyncGroupUserRemovedEventResponse | DsyncUserCreatedEventResponse | DsyncUserUpdatedEventResponse | DsyncUserDeletedEventResponse | UserCreatedEventResponse | UserUpdatedEventResponse | UserDeletedEventResponse | UserImpersonatedEventResponse | OrganizationMembershipAddedResponse | OrganizationMembershipUpdatedResponse | OrganizationMembershipRemovedResponse;
|
|
199
|
+
export type EventName = Event['event'];
|
|
192
200
|
export {};
|
|
@@ -5,6 +5,7 @@ const serializers_1 = require("../../directory-sync/serializers");
|
|
|
5
5
|
const serializers_2 = require("../../sso/serializers");
|
|
6
6
|
const serializers_3 = require("../../user-management/serializers");
|
|
7
7
|
const organization_membership_serializer_1 = require("../../user-management/serializers/organization-membership.serializer");
|
|
8
|
+
const session_serializer_1 = require("../../user-management/serializers/session.serializer");
|
|
8
9
|
const deserializeEvent = (event) => {
|
|
9
10
|
const eventBase = {
|
|
10
11
|
id: event.id,
|
|
@@ -41,6 +42,8 @@ const deserializeEvent = (event) => {
|
|
|
41
42
|
case 'user.updated':
|
|
42
43
|
case 'user.deleted':
|
|
43
44
|
return Object.assign(Object.assign({}, eventBase), { event: event.event, data: (0, serializers_3.deserializeUser)(event.data) });
|
|
45
|
+
case 'user.impersonated':
|
|
46
|
+
return Object.assign(Object.assign({}, eventBase), { event: event.event, data: (0, session_serializer_1.deserializeSession)(event.data) });
|
|
44
47
|
case 'organization_membership.added':
|
|
45
48
|
case 'organization_membership.updated':
|
|
46
49
|
case 'organization_membership.removed':
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MockParams } from 'jest-fetch-mock';
|
|
2
|
-
export declare function fetchOnce(response?:
|
|
2
|
+
export declare function fetchOnce(response?: {}, { status, headers, ...rest }?: MockParams): import("jest-fetch-mock").FetchMock;
|
|
3
3
|
export declare function fetchURL(): string | Request | undefined;
|
|
4
4
|
export declare function fetchSearchParams(): {
|
|
5
5
|
[k: string]: string;
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
+
import { Impersonator, ImpersonatorResponse } from './impersonator.interface';
|
|
1
2
|
import { User, UserResponse } from './user.interface';
|
|
2
3
|
export interface AuthenticationResponse {
|
|
3
4
|
user: User;
|
|
4
5
|
organizationId?: string;
|
|
5
|
-
accessToken
|
|
6
|
-
refreshToken
|
|
6
|
+
accessToken: string;
|
|
7
|
+
refreshToken: string;
|
|
8
|
+
impersonator?: Impersonator;
|
|
7
9
|
}
|
|
8
10
|
export interface AuthenticationResponseResponse {
|
|
9
11
|
user: UserResponse;
|
|
10
12
|
organization_id?: string;
|
|
11
|
-
access_token
|
|
12
|
-
refresh_token
|
|
13
|
+
access_token: string;
|
|
14
|
+
refresh_token: string;
|
|
15
|
+
impersonator?: ImpersonatorResponse;
|
|
13
16
|
}
|
|
14
17
|
export interface RefreshAuthenticationResponse {
|
|
15
18
|
accessToken: string;
|
|
@@ -15,4 +15,5 @@ export * from './send-verification-email-options';
|
|
|
15
15
|
export * from './update-user-options.interface';
|
|
16
16
|
export * from './update-user-password-options.interface';
|
|
17
17
|
export * from './user.interface';
|
|
18
|
+
export * from './session.interface';
|
|
18
19
|
export * from './verify-email-options.interface';
|
|
@@ -31,4 +31,5 @@ __exportStar(require("./send-verification-email-options"), exports);
|
|
|
31
31
|
__exportStar(require("./update-user-options.interface"), exports);
|
|
32
32
|
__exportStar(require("./update-user-password-options.interface"), exports);
|
|
33
33
|
__exportStar(require("./user.interface"), exports);
|
|
34
|
+
__exportStar(require("./session.interface"), exports);
|
|
34
35
|
__exportStar(require("./verify-email-options.interface"), exports);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Impersonator } from './impersonator.interface';
|
|
2
|
+
export interface Session {
|
|
3
|
+
object: 'session';
|
|
4
|
+
id: string;
|
|
5
|
+
userId: string;
|
|
6
|
+
ipAddress: string | null;
|
|
7
|
+
userAgent: string | null;
|
|
8
|
+
organizationId?: string;
|
|
9
|
+
impersonator?: Impersonator;
|
|
10
|
+
}
|
|
11
|
+
export interface SessionResponse {
|
|
12
|
+
object: 'session';
|
|
13
|
+
id: string;
|
|
14
|
+
user_id: string;
|
|
15
|
+
ip_address: string | null;
|
|
16
|
+
user_agent: string | null;
|
|
17
|
+
organization_id?: string;
|
|
18
|
+
impersonator?: Impersonator;
|
|
19
|
+
}
|
|
@@ -14,8 +14,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.deserializeRefreshAuthenticationResponse = exports.deserializeAuthenticationResponse = void 0;
|
|
15
15
|
const user_serializer_1 = require("./user.serializer");
|
|
16
16
|
const deserializeAuthenticationResponse = (authenticationResponse) => {
|
|
17
|
-
const { user, organization_id, access_token, refresh_token } = authenticationResponse, rest = __rest(authenticationResponse, ["user", "organization_id", "access_token", "refresh_token"]);
|
|
18
|
-
return Object.assign({ user: (0, user_serializer_1.deserializeUser)(user), organizationId: organization_id, accessToken: access_token, refreshToken: refresh_token }, rest);
|
|
17
|
+
const { user, organization_id, access_token, refresh_token, impersonator } = authenticationResponse, rest = __rest(authenticationResponse, ["user", "organization_id", "access_token", "refresh_token", "impersonator"]);
|
|
18
|
+
return Object.assign({ user: (0, user_serializer_1.deserializeUser)(user), organizationId: organization_id, accessToken: access_token, refreshToken: refresh_token, impersonator }, rest);
|
|
19
19
|
};
|
|
20
20
|
exports.deserializeAuthenticationResponse = deserializeAuthenticationResponse;
|
|
21
21
|
const deserializeRefreshAuthenticationResponse = (refreshAuthenticationResponse) => {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deserializeSession = void 0;
|
|
4
|
+
const deserializeSession = (session) => ({
|
|
5
|
+
object: 'session',
|
|
6
|
+
id: session.id,
|
|
7
|
+
userId: session.user_id,
|
|
8
|
+
ipAddress: session.ip_address,
|
|
9
|
+
userAgent: session.user_agent,
|
|
10
|
+
organizationId: session.organization_id,
|
|
11
|
+
impersonator: session.impersonator,
|
|
12
|
+
});
|
|
13
|
+
exports.deserializeSession = deserializeSession;
|
|
@@ -155,6 +155,30 @@ describe('UserManagement', () => {
|
|
|
155
155
|
},
|
|
156
156
|
});
|
|
157
157
|
}));
|
|
158
|
+
describe('when the code is for an impersonator', () => {
|
|
159
|
+
it('deserializes the impersonator metadata', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
160
|
+
(0, test_utils_1.fetchOnce)({
|
|
161
|
+
user: user_json_1.default,
|
|
162
|
+
impersonator: {
|
|
163
|
+
email: 'admin@example.com',
|
|
164
|
+
reason: 'A good reason.',
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
const resp = yield workos.userManagement.authenticateWithCode({
|
|
168
|
+
clientId: 'proj_whatever',
|
|
169
|
+
code: 'or this',
|
|
170
|
+
});
|
|
171
|
+
expect(resp).toMatchObject({
|
|
172
|
+
user: {
|
|
173
|
+
email: 'test01@example.com',
|
|
174
|
+
},
|
|
175
|
+
impersonator: {
|
|
176
|
+
email: 'admin@example.com',
|
|
177
|
+
reason: 'A good reason.',
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
}));
|
|
181
|
+
});
|
|
158
182
|
});
|
|
159
183
|
describe('authenticateWithRefreshToken', () => {
|
|
160
184
|
it('sends a refresh_token authentication request', () => __awaiter(void 0, void 0, void 0, function* () {
|
package/lib/workos.js
CHANGED
|
@@ -24,7 +24,7 @@ const audit_logs_1 = require("./audit-logs/audit-logs");
|
|
|
24
24
|
const user_management_1 = require("./user-management/user-management");
|
|
25
25
|
const bad_request_exception_1 = require("./common/exceptions/bad-request.exception");
|
|
26
26
|
const fetch_client_1 = require("./common/utils/fetch-client");
|
|
27
|
-
const VERSION = '6.
|
|
27
|
+
const VERSION = '6.5.0';
|
|
28
28
|
const DEFAULT_HOSTNAME = 'api.workos.com';
|
|
29
29
|
class WorkOS {
|
|
30
30
|
constructor(key, options = {}) {
|
package/package.json
CHANGED