@workos-inc/node 7.37.1 → 7.38.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.
@@ -0,0 +1,2 @@
1
+ export * from './action.interface';
2
+ export * from './response-payload.interface';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./action.interface"), exports);
18
+ __exportStar(require("./response-payload.interface"), exports);
@@ -24,6 +24,7 @@ describe('FGA', () => {
24
24
  (0, test_utils_1.fetchOnce)({
25
25
  result: 'authorized',
26
26
  is_implicit: false,
27
+ warrant_token: 'abc',
27
28
  });
28
29
  const checkResult = yield workos.fga.check({
29
30
  checks: [
@@ -44,6 +45,7 @@ describe('FGA', () => {
44
45
  expect(checkResult).toMatchObject({
45
46
  result: 'authorized',
46
47
  isImplicit: false,
48
+ warrantToken: 'abc',
47
49
  });
48
50
  }));
49
51
  });
@@ -37,6 +37,7 @@ export interface SerializedCheckBatchOptions {
37
37
  export interface CheckResultResponse {
38
38
  result: string;
39
39
  is_implicit: boolean;
40
+ warrant_token: string;
40
41
  debug_info?: DebugInfoResponse;
41
42
  }
42
43
  export interface DebugInfo {
@@ -64,11 +65,13 @@ export interface DecisionTreeNodeResponse {
64
65
  export interface CheckResultInterface {
65
66
  result: string;
66
67
  isImplicit: boolean;
68
+ warrantToken: string;
67
69
  debugInfo?: DebugInfo;
68
70
  }
69
71
  export declare class CheckResult implements CheckResultInterface {
70
72
  result: string;
71
73
  isImplicit: boolean;
74
+ warrantToken: string;
72
75
  debugInfo?: DebugInfo;
73
76
  constructor(json: CheckResultResponse);
74
77
  isAuthorized(): boolean;
@@ -7,6 +7,7 @@ class CheckResult {
7
7
  constructor(json) {
8
8
  this.result = json.result;
9
9
  this.isImplicit = json.is_implicit;
10
+ this.warrantToken = json.warrant_token;
10
11
  this.debugInfo = json.debug_info
11
12
  ? {
12
13
  processingTime: json.debug_info.processing_time,
package/lib/index.d.ts CHANGED
@@ -4,6 +4,7 @@ import { Webhooks } from './webhooks/webhooks';
4
4
  import { WorkOS } from './workos';
5
5
  import { WorkOSOptions } from './common/interfaces';
6
6
  import { IronSessionProvider } from './common/iron-session/iron-session-provider';
7
+ export * from './actions/interfaces';
7
8
  export * from './audit-logs/interfaces';
8
9
  export * from './common/exceptions';
9
10
  export * from './common/interfaces';
@@ -18,6 +19,7 @@ export * from './passwordless/interfaces';
18
19
  export * from './portal/interfaces';
19
20
  export * from './sso/interfaces';
20
21
  export * from './user-management/interfaces';
22
+ export * from './roles/interfaces';
21
23
  declare class WorkOSNode extends WorkOS {
22
24
  /** @override */
23
25
  createHttpClient(options: WorkOSOptions, userAgent: string): HttpClient;
package/lib/index.js CHANGED
@@ -23,6 +23,7 @@ const actions_1 = require("./actions/actions");
23
23
  const webhooks_1 = require("./webhooks/webhooks");
24
24
  const workos_1 = require("./workos");
25
25
  const web_iron_session_provider_1 = require("./common/iron-session/web-iron-session-provider");
26
+ __exportStar(require("./actions/interfaces"), exports);
26
27
  __exportStar(require("./audit-logs/interfaces"), exports);
27
28
  __exportStar(require("./common/exceptions"), exports);
28
29
  __exportStar(require("./common/interfaces"), exports);
@@ -37,6 +38,7 @@ __exportStar(require("./passwordless/interfaces"), exports);
37
38
  __exportStar(require("./portal/interfaces"), exports);
38
39
  __exportStar(require("./sso/interfaces"), exports);
39
40
  __exportStar(require("./user-management/interfaces"), exports);
41
+ __exportStar(require("./roles/interfaces"), exports);
40
42
  class WorkOSNode extends workos_1.WorkOS {
41
43
  /** @override */
42
44
  createHttpClient(options, userAgent) {
@@ -4,6 +4,7 @@ import { HttpClient } from './common/net/http-client';
4
4
  import { WorkOSOptions } from './index.worker';
5
5
  import { Webhooks } from './webhooks/webhooks';
6
6
  import { WorkOS } from './workos';
7
+ export * from './actions/interfaces';
7
8
  export * from './audit-logs/interfaces';
8
9
  export * from './common/exceptions';
9
10
  export * from './common/interfaces';
@@ -11,11 +12,14 @@ export * from './common/utils/pagination';
11
12
  export * from './directory-sync/interfaces';
12
13
  export * from './directory-sync/utils/get-primary-email';
13
14
  export * from './events/interfaces';
15
+ export * from './fga/interfaces';
14
16
  export * from './organizations/interfaces';
17
+ export * from './organization-domains/interfaces';
15
18
  export * from './passwordless/interfaces';
16
19
  export * from './portal/interfaces';
17
20
  export * from './sso/interfaces';
18
21
  export * from './user-management/interfaces';
22
+ export * from './roles/interfaces';
19
23
  declare class WorkOSWorker extends WorkOS {
20
24
  /** @override */
21
25
  createHttpClient(options: WorkOSOptions, userAgent: string): HttpClient;
@@ -21,6 +21,7 @@ const edge_iron_session_provider_1 = require("./common/iron-session/edge-iron-se
21
21
  const fetch_client_1 = require("./common/net/fetch-client");
22
22
  const webhooks_1 = require("./webhooks/webhooks");
23
23
  const workos_1 = require("./workos");
24
+ __exportStar(require("./actions/interfaces"), exports);
24
25
  __exportStar(require("./audit-logs/interfaces"), exports);
25
26
  __exportStar(require("./common/exceptions"), exports);
26
27
  __exportStar(require("./common/interfaces"), exports);
@@ -28,11 +29,14 @@ __exportStar(require("./common/utils/pagination"), exports);
28
29
  __exportStar(require("./directory-sync/interfaces"), exports);
29
30
  __exportStar(require("./directory-sync/utils/get-primary-email"), exports);
30
31
  __exportStar(require("./events/interfaces"), exports);
32
+ __exportStar(require("./fga/interfaces"), exports);
31
33
  __exportStar(require("./organizations/interfaces"), exports);
34
+ __exportStar(require("./organization-domains/interfaces"), exports);
32
35
  __exportStar(require("./passwordless/interfaces"), exports);
33
36
  __exportStar(require("./portal/interfaces"), exports);
34
37
  __exportStar(require("./sso/interfaces"), exports);
35
38
  __exportStar(require("./user-management/interfaces"), exports);
39
+ __exportStar(require("./roles/interfaces"), exports);
36
40
  class WorkOSWorker extends workos_1.WorkOS {
37
41
  /** @override */
38
42
  createHttpClient(options, userAgent) {
@@ -7,6 +7,10 @@
7
7
  "name": "Admin",
8
8
  "slug": "admin",
9
9
  "description": null,
10
+ "permissions": [
11
+ "posts:create",
12
+ "posts:delete"
13
+ ],
10
14
  "type": "EnvironmentRole",
11
15
  "created_at": "2024-01-01T00:00:00.000Z",
12
16
  "updated_at": "2024-01-01T00:00:00.000Z"
@@ -17,6 +21,7 @@
17
21
  "name": "Member",
18
22
  "slug": "member",
19
23
  "description": null,
24
+ "permissions": [],
20
25
  "type": "EnvironmentRole",
21
26
  "created_at": "2024-01-01T00:00:00.000Z",
22
27
  "updated_at": "2024-01-01T00:00:00.000Z"
@@ -27,6 +32,9 @@
27
32
  "name": "OrganizationMember",
28
33
  "slug": "org-member",
29
34
  "description": null,
35
+ "permissions": [
36
+ "posts:read"
37
+ ],
30
38
  "type": "OrganizationRole",
31
39
  "created_at": "2024-01-01T00:00:00.000Z",
32
40
  "updated_at": "2024-01-01T00:00:00.000Z"
@@ -285,6 +285,41 @@ describe('Organizations', () => {
285
285
  expect((0, test_utils_1.fetchURL)()).toContain('/organizations/org_01EHT88Z8J8795GZNQ4ZP1J81T/roles');
286
286
  expect(object).toEqual('list');
287
287
  expect(data).toHaveLength(3);
288
+ expect(data).toEqual([
289
+ {
290
+ object: 'role',
291
+ id: 'role_01EHQMYV6MBK39QC5PZXHY59C5',
292
+ name: 'Admin',
293
+ slug: 'admin',
294
+ description: null,
295
+ permissions: ['posts:create', 'posts:delete'],
296
+ type: 'EnvironmentRole',
297
+ createdAt: '2024-01-01T00:00:00.000Z',
298
+ updatedAt: '2024-01-01T00:00:00.000Z',
299
+ },
300
+ {
301
+ object: 'role',
302
+ id: 'role_01EHQMYV6MBK39QC5PZXHY59C3',
303
+ name: 'Member',
304
+ slug: 'member',
305
+ description: null,
306
+ permissions: [],
307
+ type: 'EnvironmentRole',
308
+ createdAt: '2024-01-01T00:00:00.000Z',
309
+ updatedAt: '2024-01-01T00:00:00.000Z',
310
+ },
311
+ {
312
+ object: 'role',
313
+ id: 'role_01EHQMYV6MBK39QC5PZXHY59C3',
314
+ name: 'OrganizationMember',
315
+ slug: 'org-member',
316
+ description: null,
317
+ permissions: ['posts:read'],
318
+ type: 'OrganizationRole',
319
+ createdAt: '2024-01-01T00:00:00.000Z',
320
+ updatedAt: '2024-01-01T00:00:00.000Z',
321
+ },
322
+ ]);
288
323
  }));
289
324
  });
290
325
  });
@@ -4,10 +4,16 @@ export interface RoleResponse {
4
4
  export interface RoleEvent {
5
5
  object: 'role';
6
6
  slug: string;
7
+ permissions: string[];
8
+ createdAt: string;
9
+ updatedAt: string;
7
10
  }
8
11
  export interface RoleEventResponse {
9
12
  object: 'role';
10
13
  slug: string;
14
+ permissions: string[];
15
+ created_at: string;
16
+ updated_at: string;
11
17
  }
12
18
  export interface ListOrganizationRolesResponse {
13
19
  object: 'list';
@@ -19,6 +25,7 @@ export interface OrganizationRoleResponse {
19
25
  name: string;
20
26
  slug: string;
21
27
  description: string | null;
28
+ permissions: string[];
22
29
  type: 'EnvironmentRole' | 'OrganizationRole';
23
30
  created_at: string;
24
31
  updated_at: string;
@@ -29,6 +36,7 @@ export interface Role {
29
36
  name: string;
30
37
  slug: string;
31
38
  description: string | null;
39
+ permissions: string[];
32
40
  type: 'EnvironmentRole' | 'OrganizationRole';
33
41
  createdAt: string;
34
42
  updatedAt: string;
@@ -7,6 +7,7 @@ const deserializeRole = (role) => ({
7
7
  name: role.name,
8
8
  slug: role.slug,
9
9
  description: role.description,
10
+ permissions: role.permissions,
10
11
  type: role.type,
11
12
  createdAt: role.created_at,
12
13
  updatedAt: role.updated_at,
@@ -1,3 +1,4 @@
1
+ import { AuthenticateWithSessionCookieSuccessResponse } from './authenticate-with-session-cookie.interface';
1
2
  import { AuthenticationResponse } from './authentication-response.interface';
2
3
  export declare enum RefreshAndSealSessionDataFailureReason {
3
4
  /**
@@ -14,14 +15,23 @@ export declare enum RefreshAndSealSessionDataFailureReason {
14
15
  */
15
16
  ORGANIZATION_NOT_AUTHORIZED = "organization_not_authorized"
16
17
  }
17
- type RefreshAndSealSessionDataFailedResponse = {
18
+ type RefreshSessionFailedResponse = {
18
19
  authenticated: false;
19
20
  reason: RefreshAndSealSessionDataFailureReason;
20
21
  };
22
+ /**
23
+ * @deprecated To be removed in a future major version along with `refreshAndSealSessionData`.
24
+ */
21
25
  type RefreshAndSealSessionDataSuccessResponse = {
22
26
  authenticated: true;
23
27
  session?: AuthenticationResponse;
24
28
  sealedSession?: string;
25
29
  };
26
- export type RefreshAndSealSessionDataResponse = RefreshAndSealSessionDataFailedResponse | RefreshAndSealSessionDataSuccessResponse;
30
+ export type RefreshAndSealSessionDataResponse = RefreshSessionFailedResponse | RefreshAndSealSessionDataSuccessResponse;
31
+ type RefreshSessionSuccessResponse = Omit<AuthenticateWithSessionCookieSuccessResponse, 'accessToken'> & {
32
+ authenticated: true;
33
+ session?: AuthenticationResponse;
34
+ sealedSession?: string;
35
+ };
36
+ export type RefreshSessionResponse = RefreshSessionFailedResponse | RefreshSessionSuccessResponse;
27
37
  export {};
@@ -4,5 +4,8 @@ exports.deserializeRoleEvent = void 0;
4
4
  const deserializeRoleEvent = (role) => ({
5
5
  object: 'role',
6
6
  slug: role.slug,
7
+ permissions: role.permissions,
8
+ createdAt: role.created_at,
9
+ updatedAt: role.updated_at,
7
10
  });
8
11
  exports.deserializeRoleEvent = deserializeRoleEvent;
@@ -1,5 +1,5 @@
1
+ import { AuthenticateWithSessionCookieFailedResponse, AuthenticateWithSessionCookieSuccessResponse, RefreshSessionResponse } from './interfaces';
1
2
  import { UserManagement } from './user-management';
2
- import { AuthenticateWithSessionCookieFailedResponse, AuthenticateWithSessionCookieSuccessResponse, RefreshAndSealSessionDataResponse } from './interfaces';
3
3
  type RefreshOptions = {
4
4
  cookiePassword?: string;
5
5
  organizationId?: string;
@@ -25,7 +25,7 @@ export declare class Session {
25
25
  * @param options.organizationId - The organization ID to use for the new session cookie.
26
26
  * @returns An object indicating whether the refresh was successful or not. If successful, it will include the new sealed session data.
27
27
  */
28
- refresh(options?: RefreshOptions): Promise<RefreshAndSealSessionDataResponse>;
28
+ refresh(options?: RefreshOptions): Promise<RefreshSessionResponse>;
29
29
  /**
30
30
  * Gets the URL to redirect the user to for logging out.
31
31
  *
@@ -116,10 +116,20 @@ class Session {
116
116
  this.cookiePassword = options.cookiePassword;
117
117
  }
118
118
  this.sessionData = authenticationResponse.sealedSession;
119
+ const { sid: sessionId, org_id: organizationId, role, permissions, entitlements, } = (0, jose_1.decodeJwt)(authenticationResponse.accessToken);
120
+ // TODO: Returning `session` here means there's some duplicated data.
121
+ // Slim down the return type in a future major version.
119
122
  return {
120
123
  authenticated: true,
121
124
  sealedSession: authenticationResponse.sealedSession,
122
125
  session: authenticationResponse,
126
+ sessionId,
127
+ organizationId,
128
+ role,
129
+ permissions,
130
+ entitlements,
131
+ user: session.user,
132
+ impersonator: session.impersonator,
123
133
  };
124
134
  }
125
135
  catch (error) {
@@ -200,11 +200,11 @@ describe('Session', () => {
200
200
  const response = yield session.refresh();
201
201
  expect(response).toEqual({
202
202
  authenticated: true,
203
- accessToken: undefined,
204
- authenticationMethod: undefined,
205
- impersonator: undefined,
206
- organizationId: undefined,
207
- refreshToken: undefined,
203
+ impersonator: {
204
+ email: 'admin@example.com',
205
+ reason: 'test',
206
+ },
207
+ organizationId: 'org_123',
208
208
  sealedSession: expect.any(String),
209
209
  session: expect.objectContaining({
210
210
  sealedSession: expect.any(String),
@@ -212,6 +212,15 @@ describe('Session', () => {
212
212
  email: 'test01@example.com',
213
213
  }),
214
214
  }),
215
+ entitlements: undefined,
216
+ permissions: ['posts:create', 'posts:delete'],
217
+ role: 'member',
218
+ sessionId: 'session_123',
219
+ user: expect.objectContaining({
220
+ email: 'test01@example.com',
221
+ id: 'user_01H5JQDV7R7ATEYZDEG0W5PRYS',
222
+ object: 'user',
223
+ }),
215
224
  });
216
225
  }));
217
226
  it('overwrites the cookie password if a new one is provided', () => __awaiter(void 0, void 0, void 0, function* () {
package/lib/workos.js CHANGED
@@ -29,7 +29,7 @@ const subtle_crypto_provider_1 = require("./common/crypto/subtle-crypto-provider
29
29
  const fetch_client_1 = require("./common/net/fetch-client");
30
30
  const widgets_1 = require("./widgets/widgets");
31
31
  const actions_1 = require("./actions/actions");
32
- const VERSION = '7.37.1';
32
+ const VERSION = '7.38.0';
33
33
  const DEFAULT_HOSTNAME = 'api.workos.com';
34
34
  const HEADER_AUTHORIZATION = 'Authorization';
35
35
  const HEADER_IDEMPOTENCY_KEY = 'Idempotency-Key';
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "7.37.1",
2
+ "version": "7.38.0",
3
3
  "name": "@workos-inc/node",
4
4
  "author": "WorkOS",
5
5
  "description": "A Node wrapper for the WorkOS API",
@@ -72,4 +72,4 @@
72
72
  "default": "./lib/index.js"
73
73
  }
74
74
  }
75
- }
75
+ }