@workos-inc/node 2.20.0 → 3.0.0-alpha.2

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.
Files changed (202) hide show
  1. package/lib/audit-logs/audit-logs.js +5 -4
  2. package/lib/audit-logs/audit-logs.spec.js +87 -87
  3. package/lib/audit-logs/interfaces/audit-log-export-options.interface.d.ts +13 -3
  4. package/lib/audit-logs/interfaces/audit-log-export.interface.d.ts +8 -0
  5. package/lib/audit-logs/interfaces/create-audit-log-event-options.interface.d.ts +13 -1
  6. package/lib/audit-logs/serializers/audit-log-export-options.serializer.d.ts +2 -0
  7. package/lib/audit-logs/serializers/audit-log-export-options.serializer.js +14 -0
  8. package/lib/audit-logs/serializers/audit-log-export.serializer.d.ts +2 -0
  9. package/lib/audit-logs/serializers/audit-log-export.serializer.js +12 -0
  10. package/lib/audit-logs/serializers/create-audit-log-event-options.serializer.d.ts +2 -0
  11. package/lib/audit-logs/serializers/create-audit-log-event-options.serializer.js +16 -0
  12. package/lib/audit-logs/serializers/index.d.ts +3 -0
  13. package/lib/audit-logs/serializers/index.js +19 -0
  14. package/lib/audit-trail/audit-trail.spec.js +2 -1
  15. package/lib/common/interfaces/index.d.ts +2 -0
  16. package/lib/common/interfaces/index.js +2 -0
  17. package/lib/common/interfaces/list.interface.d.ts +8 -0
  18. package/lib/common/interfaces/workos-response-error.interface.d.ts +8 -0
  19. package/lib/common/serializers/index.d.ts +1 -0
  20. package/lib/common/serializers/index.js +17 -0
  21. package/lib/common/serializers/list.serializer.d.ts +2 -0
  22. package/lib/common/serializers/list.serializer.js +9 -0
  23. package/lib/common/utils/workos-mock-response.d.ts +7 -0
  24. package/lib/common/utils/workos-mock-response.js +11 -0
  25. package/lib/directory-sync/directory-sync.d.ts +7 -12
  26. package/lib/directory-sync/directory-sync.js +8 -6
  27. package/lib/directory-sync/directory-sync.spec.js +95 -20
  28. package/lib/directory-sync/interfaces/directory-group.interface.d.ts +20 -0
  29. package/lib/directory-sync/interfaces/directory-user.interface.d.ts +48 -0
  30. package/lib/directory-sync/interfaces/directory.interface.d.ts +12 -0
  31. package/lib/directory-sync/interfaces/index.d.ts +6 -6
  32. package/lib/directory-sync/interfaces/index.js +20 -0
  33. package/lib/directory-sync/interfaces/list-directories-options.interface.d.ts +1 -1
  34. package/lib/directory-sync/interfaces/{list-users-options.interface.d.ts → list-directory-users-options.interface.d.ts} +1 -1
  35. package/lib/directory-sync/interfaces/list-directory-users-options.interface.js +2 -0
  36. package/lib/directory-sync/serializers/directory-group.serializer.d.ts +2 -0
  37. package/lib/directory-sync/serializers/directory-group.serializer.js +14 -0
  38. package/lib/directory-sync/serializers/directory-user.serializer.d.ts +3 -0
  39. package/lib/directory-sync/serializers/directory-user.serializer.js +23 -0
  40. package/lib/directory-sync/serializers/directory.serializer.d.ts +2 -0
  41. package/lib/directory-sync/serializers/directory.serializer.js +16 -0
  42. package/lib/directory-sync/serializers/index.d.ts +3 -0
  43. package/lib/directory-sync/serializers/index.js +19 -0
  44. package/lib/directory-sync/utils/get-primary-email.d.ts +2 -2
  45. package/lib/directory-sync/utils/get-primary-email.spec.js +10 -8
  46. package/lib/events/events.d.ts +3 -3
  47. package/lib/events/events.js +3 -1
  48. package/lib/events/events.spec.js +19 -3
  49. package/lib/events/interfaces/event.interface.d.ts +4 -1
  50. package/lib/events/interfaces/list-events-options.interface.d.ts +2 -2
  51. package/lib/events/serializers/event.serializer.d.ts +2 -0
  52. package/lib/events/serializers/event.serializer.js +10 -0
  53. package/lib/index.d.ts +1 -0
  54. package/lib/index.js +1 -0
  55. package/lib/mfa/interfaces/challenge.interface.d.ts +9 -0
  56. package/lib/mfa/interfaces/factor.interface.d.ts +13 -4
  57. package/lib/mfa/interfaces/index.d.ts +9 -0
  58. package/lib/mfa/interfaces/index.js +25 -0
  59. package/lib/mfa/interfaces/sms.interface.d.ts +3 -0
  60. package/lib/mfa/interfaces/totp.interface.d.ts +7 -0
  61. package/lib/mfa/interfaces/verify-challenge-response.d.ts +5 -1
  62. package/lib/mfa/mfa.d.ts +2 -8
  63. package/lib/mfa/mfa.js +5 -4
  64. package/lib/mfa/mfa.spec.js +134 -115
  65. package/lib/mfa/serializers/challenge.serializer.d.ts +2 -0
  66. package/lib/mfa/serializers/challenge.serializer.js +13 -0
  67. package/lib/mfa/serializers/factor.serializer.d.ts +2 -0
  68. package/lib/mfa/serializers/factor.serializer.js +7 -0
  69. package/lib/mfa/serializers/index.d.ts +3 -0
  70. package/lib/mfa/serializers/index.js +19 -0
  71. package/lib/mfa/serializers/sms.serializer.d.ts +2 -0
  72. package/lib/mfa/serializers/sms.serializer.js +7 -0
  73. package/lib/mfa/serializers/totp.serializer.d.ts +2 -0
  74. package/lib/mfa/serializers/totp.serializer.js +11 -0
  75. package/lib/mfa/serializers/verify-response.serializer.d.ts +2 -0
  76. package/lib/mfa/serializers/verify-response.serializer.js +9 -0
  77. package/lib/organizations/interfaces/create-organization-options.interface.d.ts +5 -0
  78. package/lib/organizations/interfaces/organization.interface.d.ts +9 -0
  79. package/lib/organizations/interfaces/update-organization-options.interface.d.ts +5 -0
  80. package/lib/organizations/organizations.d.ts +2 -2
  81. package/lib/organizations/organizations.js +8 -6
  82. package/lib/organizations/organizations.spec.js +4 -3
  83. package/lib/organizations/serializers/create-organization-options.serializer.d.ts +2 -0
  84. package/lib/organizations/serializers/create-organization-options.serializer.js +9 -0
  85. package/lib/organizations/serializers/index.d.ts +3 -0
  86. package/lib/organizations/serializers/index.js +19 -0
  87. package/lib/organizations/serializers/organization.serializer.d.ts +2 -0
  88. package/lib/organizations/serializers/organization.serializer.js +13 -0
  89. package/lib/organizations/serializers/update-organization-options.serializer.d.ts +2 -0
  90. package/lib/organizations/serializers/update-organization-options.serializer.js +9 -0
  91. package/lib/passwordless/interfaces/create-passwordless-session-options.interface.d.ts +8 -0
  92. package/lib/passwordless/interfaces/index.d.ts +3 -3
  93. package/lib/passwordless/interfaces/index.js +17 -0
  94. package/lib/passwordless/interfaces/passwordless-session.interface.d.ts +7 -0
  95. package/lib/passwordless/passwordless.d.ts +1 -3
  96. package/lib/passwordless/passwordless.js +2 -1
  97. package/lib/passwordless/serializers/index.d.ts +0 -0
  98. package/lib/passwordless/serializers/index.js +1 -0
  99. package/lib/passwordless/serializers/passwordless-session.serializer.d.ts +2 -0
  100. package/lib/passwordless/serializers/passwordless-session.serializer.js +11 -0
  101. package/lib/portal/interfaces/generate-portal-link-intent.interface.js +1 -1
  102. package/lib/sso/interfaces/connection-type.enum.d.ts +1 -0
  103. package/lib/sso/interfaces/connection-type.enum.js +2 -1
  104. package/lib/sso/interfaces/connection.interface.d.ts +20 -1
  105. package/lib/sso/interfaces/index.d.ts +2 -0
  106. package/lib/sso/interfaces/index.js +2 -0
  107. package/lib/sso/interfaces/list-connections-options.interface.d.ts +5 -0
  108. package/lib/sso/interfaces/profile-and-token.interface.d.ts +6 -2
  109. package/lib/sso/interfaces/profile.interface.d.ts +14 -0
  110. package/lib/sso/serializers/connection.serializer.d.ts +2 -0
  111. package/lib/sso/serializers/connection.serializer.js +17 -0
  112. package/lib/sso/serializers/index.d.ts +3 -0
  113. package/lib/sso/serializers/index.js +19 -0
  114. package/lib/sso/serializers/profile-and-token.serializer.d.ts +2 -0
  115. package/lib/sso/serializers/profile-and-token.serializer.js +9 -0
  116. package/lib/sso/serializers/profile.serializer.d.ts +2 -0
  117. package/lib/sso/serializers/profile.serializer.js +16 -0
  118. package/lib/sso/sso.d.ts +3 -9
  119. package/lib/sso/sso.js +18 -9
  120. package/lib/sso/sso.spec.js +27 -9
  121. package/lib/users/exceptions/index.d.ts +4 -0
  122. package/lib/users/exceptions/index.js +10 -0
  123. package/lib/users/fixtures/list-users.json +21 -0
  124. package/lib/users/fixtures/session.json +6 -0
  125. package/lib/users/fixtures/user.json +12 -0
  126. package/lib/users/interfaces/add-user-to-organization-options.interface.d.ts +7 -0
  127. package/lib/users/interfaces/add-user-to-organization-options.interface.js +2 -0
  128. package/lib/users/interfaces/authenticate-user-with-password-options.interface.d.ts +21 -0
  129. package/lib/users/interfaces/authenticate-user-with-password-options.interface.js +2 -0
  130. package/lib/users/interfaces/authenticate-user-with-token-options.interface.d.ts +15 -0
  131. package/lib/users/interfaces/authenticate-user-with-token-options.interface.js +2 -0
  132. package/lib/users/interfaces/authentication-response.interface.d.ts +10 -0
  133. package/lib/users/interfaces/authentication-response.interface.js +2 -0
  134. package/lib/users/interfaces/complete-password-reset-options.interface.d.ts +8 -0
  135. package/lib/users/interfaces/complete-password-reset-options.interface.js +2 -0
  136. package/lib/users/interfaces/create-email-verification-challenge-options.interface.d.ts +16 -0
  137. package/lib/users/interfaces/create-email-verification-challenge-options.interface.js +2 -0
  138. package/lib/users/interfaces/create-password-reset-challenge-options.interface.d.ts +17 -0
  139. package/lib/users/interfaces/create-password-reset-challenge-options.interface.js +2 -0
  140. package/lib/users/interfaces/create-user-options.interface.d.ts +14 -0
  141. package/lib/users/interfaces/create-user-options.interface.js +2 -0
  142. package/lib/users/interfaces/index.d.ts +15 -0
  143. package/lib/users/interfaces/index.js +31 -0
  144. package/lib/users/interfaces/list-users-options.interface.d.ts +6 -0
  145. package/lib/users/interfaces/list-users-options.interface.js +2 -0
  146. package/lib/users/interfaces/remove-user-from-organization-options.interface.d.ts +4 -0
  147. package/lib/users/interfaces/remove-user-from-organization-options.interface.js +2 -0
  148. package/lib/users/interfaces/revoke-session-options.interface.d.ts +15 -0
  149. package/lib/users/interfaces/revoke-session-options.interface.js +2 -0
  150. package/lib/users/interfaces/session.interface.d.ts +12 -0
  151. package/lib/users/interfaces/session.interface.js +2 -0
  152. package/lib/users/interfaces/update-user-options.interface.d.ts +9 -0
  153. package/lib/users/interfaces/update-user-options.interface.js +2 -0
  154. package/lib/users/interfaces/update-user-password-options.interface.d.ts +7 -0
  155. package/lib/users/interfaces/update-user-password-options.interface.js +2 -0
  156. package/lib/users/interfaces/user.interface.d.ts +59 -0
  157. package/lib/users/interfaces/user.interface.js +2 -0
  158. package/lib/users/interfaces/verify-session.interface.d.ts +18 -0
  159. package/lib/users/interfaces/verify-session.interface.js +2 -0
  160. package/lib/users/serializers/authenticate-user-with-password-options.serializer.d.ts +2 -0
  161. package/lib/users/serializers/authenticate-user-with-password-options.serializer.js +14 -0
  162. package/lib/users/serializers/authenticate-user-with-token-options.serializer.d.ts +2 -0
  163. package/lib/users/serializers/authenticate-user-with-token-options.serializer.js +11 -0
  164. package/lib/users/serializers/authentication-response.serializer.d.ts +2 -0
  165. package/lib/users/serializers/authentication-response.serializer.js +12 -0
  166. package/lib/users/serializers/complete-password-reset-options.serializer.d.ts +2 -0
  167. package/lib/users/serializers/complete-password-reset-options.serializer.js +8 -0
  168. package/lib/users/serializers/create-email-verification-challenge.serializer.d.ts +2 -0
  169. package/lib/users/serializers/create-email-verification-challenge.serializer.js +9 -0
  170. package/lib/users/serializers/create-password-reset-challenge.serializer.d.ts +3 -0
  171. package/lib/users/serializers/create-password-reset-challenge.serializer.js +14 -0
  172. package/lib/users/serializers/create-user-options.serializer.d.ts +2 -0
  173. package/lib/users/serializers/create-user-options.serializer.js +11 -0
  174. package/lib/users/serializers/index.d.ts +13 -0
  175. package/lib/users/serializers/index.js +29 -0
  176. package/lib/users/serializers/revoke-session-options.serializer.d.ts +2 -0
  177. package/lib/users/serializers/revoke-session-options.serializer.js +14 -0
  178. package/lib/users/serializers/session.serializer.d.ts +2 -0
  179. package/lib/users/serializers/session.serializer.js +10 -0
  180. package/lib/users/serializers/update-user-options.serializer.d.ts +2 -0
  181. package/lib/users/serializers/update-user-options.serializer.js +8 -0
  182. package/lib/users/serializers/update-user-password-options.serializer.d.ts +2 -0
  183. package/lib/users/serializers/update-user-password-options.serializer.js +7 -0
  184. package/lib/users/serializers/user.serializer.d.ts +2 -0
  185. package/lib/users/serializers/user.serializer.js +31 -0
  186. package/lib/users/serializers/verify-session.serializer.d.ts +3 -0
  187. package/lib/users/serializers/verify-session.serializer.js +15 -0
  188. package/lib/users/users.d.ts +23 -0
  189. package/lib/users/users.js +124 -0
  190. package/lib/users/users.spec.d.ts +1 -0
  191. package/lib/users/users.spec.js +318 -0
  192. package/lib/webhooks/fixtures/webhook.json +1 -1
  193. package/lib/webhooks/interfaces/webhook-directory-user.interface.d.ts +2 -2
  194. package/lib/webhooks/interfaces/webhook.interface.d.ts +1 -0
  195. package/lib/workos.d.ts +6 -4
  196. package/lib/workos.js +3 -1
  197. package/package.json +13 -14
  198. package/lib/directory-sync/interfaces/group.interface.d.ts +0 -10
  199. package/lib/directory-sync/interfaces/user.interface.d.ts +0 -23
  200. /package/lib/{directory-sync/interfaces/group.interface.js → common/interfaces/workos-response-error.interface.js} +0 -0
  201. /package/lib/directory-sync/interfaces/{list-users-options.interface.js → directory-group.interface.js} +0 -0
  202. /package/lib/directory-sync/interfaces/{user.interface.js → directory-user.interface.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  interface EventBase {
2
2
  id: string;
3
- created_at: string;
3
+ createdAt: string;
4
4
  }
5
5
  export interface ConnectionActivatedEvent extends EventBase {
6
6
  event: 'connection.activated';
@@ -59,5 +59,8 @@ export interface DsyncUserUpdatedEvent extends EventBase {
59
59
  data: Record<string, unknown>;
60
60
  }
61
61
  export type Event = ConnectionActivatedEvent | ConnectionDeactivatedEvent | ConnectionDeletedEvent | DsyncActivatedEvent | DsyncDeactivatedEvent | DsyncDeletedEvent | DsyncGroupCreatedEvent | DsyncGroupUpdatedEvent | DsyncGroupDeletedEvent | DsyncGroupUserAddedEvent | DsyncGroupUserRemovedEvent | DsyncUserCreatedEvent | DsyncUserUpdatedEvent | DsyncUserDeletedEvent;
62
+ export type EventResponse = Omit<Event, 'createdAt'> & {
63
+ created_at: string;
64
+ };
62
65
  export type EventNames = 'connection.activated' | 'connection.deactivated' | 'connection.deleted' | 'dsync.activated' | 'dsync.deactivated' | 'dsync.deleted' | 'dsync.group.created' | 'dsync.group.deleted' | 'dsync.group.updated' | 'dsync.group.user_added' | 'dsync.group.user_removed' | 'dsync.user.created' | 'dsync.user.deleted' | 'dsync.user.updated';
63
66
  export {};
@@ -1,8 +1,8 @@
1
1
  import { EventNames } from './event.interface';
2
2
  export interface ListEventOptions {
3
3
  events?: EventNames[];
4
- range_start?: string;
5
- range_end?: string;
4
+ rangeStart?: string;
5
+ rangeEnd?: string;
6
6
  limit?: number;
7
7
  after?: string;
8
8
  }
@@ -0,0 +1,2 @@
1
+ import { Event, EventResponse } from '../interfaces';
2
+ export declare const deserializeEvent: (event: EventResponse) => Event;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deserializeEvent = void 0;
4
+ const deserializeEvent = (event) => ({
5
+ id: event.id,
6
+ createdAt: event.created_at,
7
+ data: event.data,
8
+ event: event.event,
9
+ });
10
+ exports.deserializeEvent = deserializeEvent;
package/lib/index.d.ts CHANGED
@@ -11,5 +11,6 @@ export * from './passwordless/interfaces';
11
11
  export * from './portal/interfaces';
12
12
  export * from './sso/interfaces';
13
13
  export * from './webhooks/interfaces';
14
+ export * from './users/interfaces';
14
15
  export { WorkOS };
15
16
  export default WorkOS;
package/lib/index.js CHANGED
@@ -29,5 +29,6 @@ __exportStar(require("./passwordless/interfaces"), exports);
29
29
  __exportStar(require("./portal/interfaces"), exports);
30
30
  __exportStar(require("./sso/interfaces"), exports);
31
31
  __exportStar(require("./webhooks/interfaces"), exports);
32
+ __exportStar(require("./users/interfaces"), exports);
32
33
  // tslint:disable-next-line:no-default-export
33
34
  exports.default = workos_1.WorkOS;
@@ -1,4 +1,13 @@
1
1
  export interface Challenge {
2
+ object: 'authentication_challenge';
3
+ id: string;
4
+ createdAt: string;
5
+ updatedAt: string;
6
+ expiresAt?: string;
7
+ code: string;
8
+ authenticationFactorId: string;
9
+ }
10
+ export interface ChallengeResponse {
2
11
  object: 'authentication_challenge';
3
12
  id: string;
4
13
  created_at: string;
@@ -1,11 +1,20 @@
1
- import { Sms } from './sms.interface';
2
- import { Totp } from './totp.interface';
1
+ import { Sms, SmsResponse } from './sms.interface';
2
+ import { Totp, TotpResponse } from './totp.interface';
3
3
  export interface Factor {
4
+ object: 'authentication_factor';
5
+ id: string;
6
+ createdAt: string;
7
+ updatedAt: string;
8
+ type: string;
9
+ sms?: Sms;
10
+ totp?: Totp;
11
+ }
12
+ export interface FactorResponse {
4
13
  object: 'authentication_factor';
5
14
  id: string;
6
15
  created_at: string;
7
16
  updated_at: string;
8
17
  type: string;
9
- sms: Sms;
10
- totp: Totp;
18
+ sms?: SmsResponse;
19
+ totp?: TotpResponse;
11
20
  }
@@ -0,0 +1,9 @@
1
+ export * from './challenge-factor-options';
2
+ export * from './challenge.interface';
3
+ export * from './enroll-factor-options';
4
+ export * from './factor.interface';
5
+ export * from './sms.interface';
6
+ export * from './totp.interface';
7
+ export * from './verify-challenge-options';
8
+ export * from './verify-challenge-response';
9
+ export * from './verify-factor-options';
@@ -0,0 +1,25 @@
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("./challenge-factor-options"), exports);
18
+ __exportStar(require("./challenge.interface"), exports);
19
+ __exportStar(require("./enroll-factor-options"), exports);
20
+ __exportStar(require("./factor.interface"), exports);
21
+ __exportStar(require("./sms.interface"), exports);
22
+ __exportStar(require("./totp.interface"), exports);
23
+ __exportStar(require("./verify-challenge-options"), exports);
24
+ __exportStar(require("./verify-challenge-response"), exports);
25
+ __exportStar(require("./verify-factor-options"), exports);
@@ -1,3 +1,6 @@
1
1
  export interface Sms {
2
+ phoneNumber: string;
3
+ }
4
+ export interface SmsResponse {
2
5
  phone_number: string;
3
6
  }
@@ -1,4 +1,11 @@
1
1
  export interface Totp {
2
+ issuer: string;
3
+ user: string;
4
+ qrCode: string;
5
+ secret: string;
6
+ uri: string;
7
+ }
8
+ export interface TotpResponse {
2
9
  issuer: string;
3
10
  user: string;
4
11
  qr_code: string;
@@ -1,5 +1,9 @@
1
- import { Challenge } from './challenge.interface';
1
+ import { Challenge, ChallengeResponse } from './challenge.interface';
2
2
  export interface VerifyResponse {
3
3
  challenge: Challenge;
4
4
  valid: boolean;
5
5
  }
6
+ export interface VerifyResponseResponse {
7
+ challenge: ChallengeResponse;
8
+ valid: boolean;
9
+ }
package/lib/mfa/mfa.d.ts CHANGED
@@ -1,16 +1,10 @@
1
1
  import { WorkOS } from '../workos';
2
- import { ChallengeFactorOptions } from './interfaces/challenge-factor-options';
3
- import { Challenge } from './interfaces/challenge.interface';
4
- import { EnrollFactorOptions } from './interfaces/enroll-factor-options';
5
- import { Factor } from './interfaces/factor.interface';
6
- import { VerifyFactorOptions } from './interfaces/verify-factor-options';
7
- import { VerifyResponse } from './interfaces/verify-challenge-response';
8
- import { VerifyChallengeOptions } from './interfaces/verify-challenge-options';
2
+ import { ChallengeFactorOptions, Challenge, EnrollFactorOptions, Factor, VerifyChallengeOptions, VerifyFactorOptions, VerifyResponse } from './interfaces';
9
3
  export declare class Mfa {
10
4
  private readonly workos;
11
5
  constructor(workos: WorkOS);
12
6
  deleteFactor(id: string): Promise<void>;
13
- getFactor(id: string): Promise<any>;
7
+ getFactor(id: string): Promise<Factor>;
14
8
  enrollFactor(options: EnrollFactorOptions): Promise<Factor>;
15
9
  challengeFactor(options: ChallengeFactorOptions): Promise<Challenge>;
16
10
  /**
package/lib/mfa/mfa.js CHANGED
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.Mfa = void 0;
13
+ const serializers_1 = require("./serializers");
13
14
  class Mfa {
14
15
  constructor(workos) {
15
16
  this.workos = workos;
@@ -22,7 +23,7 @@ class Mfa {
22
23
  getFactor(id) {
23
24
  return __awaiter(this, void 0, void 0, function* () {
24
25
  const { data } = yield this.workos.get(`/auth/factors/${id}`);
25
- return data;
26
+ return (0, serializers_1.deserializeFactor)(data);
26
27
  });
27
28
  }
28
29
  enrollFactor(options) {
@@ -42,7 +43,7 @@ class Mfa {
42
43
  return {};
43
44
  }
44
45
  })()));
45
- return data;
46
+ return (0, serializers_1.deserializeFactor)(data);
46
47
  });
47
48
  }
48
49
  challengeFactor(options) {
@@ -50,7 +51,7 @@ class Mfa {
50
51
  const { data } = yield this.workos.post(`/auth/factors/${options.authenticationFactorId}/challenge`, {
51
52
  sms_template: 'smsTemplate' in options ? options.smsTemplate : undefined,
52
53
  });
53
- return data;
54
+ return (0, serializers_1.deserializeChallenge)(data);
54
55
  });
55
56
  }
56
57
  /**
@@ -66,7 +67,7 @@ class Mfa {
66
67
  const { data } = yield this.workos.post(`/auth/challenges/${options.authenticationChallengeId}/verify`, {
67
68
  code: options.code,
68
69
  });
69
- return data;
70
+ return (0, serializers_1.deserializeVerifyResponse)(data);
70
71
  });
71
72
  }
72
73
  }
@@ -16,19 +16,46 @@ const axios_1 = __importDefault(require("axios"));
16
16
  const axios_mock_adapter_1 = __importDefault(require("axios-mock-adapter"));
17
17
  const exceptions_1 = require("../common/exceptions");
18
18
  const workos_1 = require("../workos");
19
+ const mock = new axios_mock_adapter_1.default(axios_1.default);
19
20
  describe('MFA', () => {
20
21
  describe('getFactor', () => {
21
- it('throws an error for incomplete arguments', () => __awaiter(void 0, void 0, void 0, function* () {
22
- const mock = new axios_mock_adapter_1.default(axios_1.default);
23
- mock.onGet().reply(200, {});
22
+ it('returns the requested factor', () => __awaiter(void 0, void 0, void 0, function* () {
23
+ const factor = {
24
+ object: 'authentication_factor',
25
+ id: 'auth_factor_1234',
26
+ createdAt: '2022-03-15T20:39:19.892Z',
27
+ updatedAt: '2022-03-15T20:39:19.892Z',
28
+ type: 'totp',
29
+ totp: {
30
+ issuer: 'WorkOS',
31
+ qrCode: 'qr-code-test',
32
+ secret: 'secret-test',
33
+ uri: 'uri-test',
34
+ user: 'some_user',
35
+ },
36
+ };
37
+ const factorResponse = {
38
+ object: 'authentication_factor',
39
+ id: 'auth_factor_1234',
40
+ created_at: '2022-03-15T20:39:19.892Z',
41
+ updated_at: '2022-03-15T20:39:19.892Z',
42
+ type: 'totp',
43
+ totp: {
44
+ issuer: 'WorkOS',
45
+ qr_code: 'qr-code-test',
46
+ secret: 'secret-test',
47
+ uri: 'uri-test',
48
+ user: 'some_user',
49
+ },
50
+ };
51
+ mock.onGet().reply(200, factorResponse);
24
52
  const workos = new workos_1.WorkOS('sk_test_Sz3IQjepeSWaI4cMS4ms4sMuU');
25
- const factor = yield workos.mfa.getFactor('test_123');
26
- expect(factor).toMatchInlineSnapshot(`Object {}`);
53
+ const subject = yield workos.mfa.getFactor('test_123');
54
+ expect(subject).toEqual(factor);
27
55
  }));
28
56
  });
29
57
  describe('deleteFactor', () => {
30
58
  it('sends request to delete a Factor', () => __awaiter(void 0, void 0, void 0, function* () {
31
- const mock = new axios_mock_adapter_1.default(axios_1.default);
32
59
  mock.onDelete().reply(200, {});
33
60
  const workos = new workos_1.WorkOS('sk_test_Sz3IQjepeSWaI4cMS4ms4sMuU');
34
61
  yield workos.mfa.deleteFactor('conn_123');
@@ -38,35 +65,47 @@ describe('MFA', () => {
38
65
  describe('enrollFactor', () => {
39
66
  describe('with generic', () => {
40
67
  it('enrolls a factor with generic type', () => __awaiter(void 0, void 0, void 0, function* () {
41
- const mock = new axios_mock_adapter_1.default(axios_1.default);
42
- mock.onPost('/auth/factors/enroll').reply(200, {
68
+ const factor = {
69
+ object: 'authentication_factor',
70
+ id: 'auth_factor_1234',
71
+ createdAt: '2022-03-15T20:39:19.892Z',
72
+ updatedAt: '2022-03-15T20:39:19.892Z',
73
+ type: 'generic_otp',
74
+ };
75
+ const factorResponse = {
43
76
  object: 'authentication_factor',
44
77
  id: 'auth_factor_1234',
45
78
  created_at: '2022-03-15T20:39:19.892Z',
46
79
  updated_at: '2022-03-15T20:39:19.892Z',
47
80
  type: 'generic_otp',
48
- });
81
+ };
82
+ mock.onPost('/auth/factors/enroll').reply(200, factorResponse);
49
83
  const workos = new workos_1.WorkOS('sk_test_Sz3IQjepeSWaI4cMS4ms4sMuU', {
50
84
  apiHostname: 'api.workos.dev',
51
85
  });
52
- const enrollResponse = yield workos.mfa.enrollFactor({
86
+ const subject = yield workos.mfa.enrollFactor({
53
87
  type: 'generic_otp',
54
88
  });
55
- expect(enrollResponse).toMatchInlineSnapshot(`
56
- Object {
57
- "created_at": "2022-03-15T20:39:19.892Z",
58
- "id": "auth_factor_1234",
59
- "object": "authentication_factor",
60
- "type": "generic_otp",
61
- "updated_at": "2022-03-15T20:39:19.892Z",
62
- }
63
- `);
89
+ expect(subject).toEqual(factor);
64
90
  }));
65
91
  });
66
92
  describe('with totp', () => {
67
93
  it('enrolls a factor with totp type', () => __awaiter(void 0, void 0, void 0, function* () {
68
- const mock = new axios_mock_adapter_1.default(axios_1.default);
69
- mock.onPost('/auth/factors/enroll').reply(200, {
94
+ const factor = {
95
+ object: 'authentication_factor',
96
+ id: 'auth_factor_1234',
97
+ createdAt: '2022-03-15T20:39:19.892Z',
98
+ updatedAt: '2022-03-15T20:39:19.892Z',
99
+ type: 'totp',
100
+ totp: {
101
+ issuer: 'WorkOS',
102
+ qrCode: 'qr-code-test',
103
+ secret: 'secret-test',
104
+ uri: 'uri-test',
105
+ user: 'some_user',
106
+ },
107
+ };
108
+ const factorResponse = {
70
109
  object: 'authentication_factor',
71
110
  id: 'auth_factor_1234',
72
111
  created_at: '2022-03-15T20:39:19.892Z',
@@ -79,37 +118,32 @@ describe('MFA', () => {
79
118
  uri: 'uri-test',
80
119
  user: 'some_user',
81
120
  },
82
- });
121
+ };
122
+ mock.onPost('/auth/factors/enroll').reply(200, factorResponse);
83
123
  const workos = new workos_1.WorkOS('sk_test_Sz3IQjepeSWaI4cMS4ms4sMuU', {
84
124
  apiHostname: 'api.workos.dev',
85
125
  });
86
- const enrollResponse = yield workos.mfa.enrollFactor({
126
+ const subject = yield workos.mfa.enrollFactor({
87
127
  type: 'totp',
88
128
  issuer: 'WorkOS',
89
129
  user: 'some_user',
90
130
  });
91
- expect(enrollResponse).toMatchInlineSnapshot(`
92
- Object {
93
- "created_at": "2022-03-15T20:39:19.892Z",
94
- "id": "auth_factor_1234",
95
- "object": "authentication_factor",
96
- "totp": Object {
97
- "issuer": "WorkOS",
98
- "qr_code": "qr-code-test",
99
- "secret": "secret-test",
100
- "uri": "uri-test",
101
- "user": "some_user",
102
- },
103
- "type": "totp",
104
- "updated_at": "2022-03-15T20:39:19.892Z",
105
- }
106
- `);
131
+ expect(subject).toEqual(factor);
107
132
  }));
108
133
  });
109
134
  describe('with sms', () => {
110
135
  it('enrolls a factor with sms type', () => __awaiter(void 0, void 0, void 0, function* () {
111
- const mock = new axios_mock_adapter_1.default(axios_1.default);
112
- mock.onPost('/auth/factors/enroll').reply(200, {
136
+ const factor = {
137
+ object: 'authentication_factor',
138
+ id: 'auth_factor_1234',
139
+ createdAt: '2022-03-15T20:39:19.892Z',
140
+ updatedAt: '2022-03-15T20:39:19.892Z',
141
+ type: 'sms',
142
+ sms: {
143
+ phoneNumber: '+15555555555',
144
+ },
145
+ };
146
+ const factorResponse = {
113
147
  object: 'authentication_factor',
114
148
  id: 'auth_factor_1234',
115
149
  created_at: '2022-03-15T20:39:19.892Z',
@@ -118,30 +152,19 @@ describe('MFA', () => {
118
152
  sms: {
119
153
  phone_number: '+15555555555',
120
154
  },
121
- });
155
+ };
156
+ mock.onPost('/auth/factors/enroll').reply(200, factorResponse);
122
157
  const workos = new workos_1.WorkOS('sk_test_Sz3IQjepeSWaI4cMS4ms4sMuU', {
123
158
  apiHostname: 'api.workos.dev',
124
159
  });
125
- const enrollResponse = yield workos.mfa.enrollFactor({
160
+ const subject = yield workos.mfa.enrollFactor({
126
161
  type: 'sms',
127
162
  phoneNumber: '+1555555555',
128
163
  });
129
- expect(enrollResponse).toMatchInlineSnapshot(`
130
- Object {
131
- "created_at": "2022-03-15T20:39:19.892Z",
132
- "id": "auth_factor_1234",
133
- "object": "authentication_factor",
134
- "sms": Object {
135
- "phone_number": "+15555555555",
136
- },
137
- "type": "sms",
138
- "updated_at": "2022-03-15T20:39:19.892Z",
139
- }
140
- `);
164
+ expect(subject).toEqual(factor);
141
165
  }));
142
166
  describe('when phone number is invalid', () => {
143
167
  it('throws an exception', () => __awaiter(void 0, void 0, void 0, function* () {
144
- const mock = new axios_mock_adapter_1.default(axios_1.default);
145
168
  mock.onPost('/auth/factors/enroll').reply(422, {
146
169
  message: `Phone number is invalid: 'foo'`,
147
170
  code: 'invalid_phone_number',
@@ -162,8 +185,16 @@ describe('MFA', () => {
162
185
  describe('challengeFactor', () => {
163
186
  describe('with no sms template', () => {
164
187
  it('challenge a factor with no sms template', () => __awaiter(void 0, void 0, void 0, function* () {
165
- const mock = new axios_mock_adapter_1.default(axios_1.default);
166
- mock.onPost('/auth/factors/auth_factor_1234/challenge').reply(200, {
188
+ const challenge = {
189
+ object: 'authentication_challenge',
190
+ id: 'auth_challenge_1234',
191
+ createdAt: '2022-03-15T20:39:19.892Z',
192
+ updatedAt: '2022-03-15T20:39:19.892Z',
193
+ expiresAt: '2022-03-15T21:39:19.892Z',
194
+ code: '12345',
195
+ authenticationFactorId: 'auth_factor_1234',
196
+ };
197
+ const challengeResponse = {
167
198
  object: 'authentication_challenge',
168
199
  id: 'auth_challenge_1234',
169
200
  created_at: '2022-03-15T20:39:19.892Z',
@@ -171,34 +202,31 @@ describe('MFA', () => {
171
202
  expires_at: '2022-03-15T21:39:19.892Z',
172
203
  code: '12345',
173
204
  authentication_factor_id: 'auth_factor_1234',
174
- });
205
+ };
206
+ mock
207
+ .onPost('/auth/factors/auth_factor_1234/challenge')
208
+ .reply(200, challengeResponse);
175
209
  const workos = new workos_1.WorkOS('sk_test_Sz3IQjepeSWaI4cMS4ms4sMuU', {
176
210
  apiHostname: 'api.workos.dev',
177
211
  });
178
- const challengeResponse = yield workos.mfa.challengeFactor({
212
+ const subject = yield workos.mfa.challengeFactor({
179
213
  authenticationFactorId: 'auth_factor_1234',
180
214
  });
181
- expect(challengeResponse).toMatchInlineSnapshot(`
182
- Object {
183
- "authentication_factor_id": "auth_factor_1234",
184
- "code": "12345",
185
- "created_at": "2022-03-15T20:39:19.892Z",
186
- "expires_at": "2022-03-15T21:39:19.892Z",
187
- "id": "auth_challenge_1234",
188
- "object": "authentication_challenge",
189
- "updated_at": "2022-03-15T20:39:19.892Z",
190
- }
191
- `);
215
+ expect(subject).toEqual(challenge);
192
216
  }));
193
217
  });
194
218
  describe('with sms template', () => {
195
219
  it('challenge a factor with sms template', () => __awaiter(void 0, void 0, void 0, function* () {
196
- const mock = new axios_mock_adapter_1.default(axios_1.default);
197
- mock
198
- .onPost('/auth/factors/auth_factor_1234/challenge', {
199
- sms_template: 'This is your code: 12345',
200
- })
201
- .reply(200, {
220
+ const challenge = {
221
+ object: 'authentication_challenge',
222
+ id: 'auth_challenge_1234',
223
+ createdAt: '2022-03-15T20:39:19.892Z',
224
+ updatedAt: '2022-03-15T20:39:19.892Z',
225
+ expiresAt: '2022-03-15T21:39:19.892Z',
226
+ code: '12345',
227
+ authenticationFactorId: 'auth_factor_1234',
228
+ };
229
+ const challengeResponse = {
202
230
  object: 'authentication_challenge',
203
231
  id: 'auth_challenge_1234',
204
232
  created_at: '2022-03-15T20:39:19.892Z',
@@ -206,37 +234,39 @@ describe('MFA', () => {
206
234
  expires_at: '2022-03-15T21:39:19.892Z',
207
235
  code: '12345',
208
236
  authentication_factor_id: 'auth_factor_1234',
209
- });
237
+ };
238
+ mock
239
+ .onPost('/auth/factors/auth_factor_1234/challenge', {
240
+ sms_template: 'This is your code: 12345',
241
+ })
242
+ .reply(200, challengeResponse);
210
243
  const workos = new workos_1.WorkOS('sk_test_Sz3IQjepeSWaI4cMS4ms4sMuU', {
211
244
  apiHostname: 'api.workos.dev',
212
245
  });
213
- const challengeResponse = yield workos.mfa.challengeFactor({
246
+ const subject = yield workos.mfa.challengeFactor({
214
247
  authenticationFactorId: 'auth_factor_1234',
215
248
  smsTemplate: 'This is your code: 12345',
216
249
  });
217
- expect(challengeResponse).toMatchInlineSnapshot(`
218
- Object {
219
- "authentication_factor_id": "auth_factor_1234",
220
- "code": "12345",
221
- "created_at": "2022-03-15T20:39:19.892Z",
222
- "expires_at": "2022-03-15T21:39:19.892Z",
223
- "id": "auth_challenge_1234",
224
- "object": "authentication_challenge",
225
- "updated_at": "2022-03-15T20:39:19.892Z",
226
- }
227
- `);
250
+ expect(subject).toEqual(challenge);
228
251
  }));
229
252
  });
230
253
  });
231
254
  describe('verifyChallenge', () => {
232
255
  describe('verify with successful response', () => {
233
256
  it('verifies a successful factor', () => __awaiter(void 0, void 0, void 0, function* () {
234
- const mock = new axios_mock_adapter_1.default(axios_1.default);
235
- mock
236
- .onPost('/auth/challenges/auth_challenge_1234/verify', {
237
- code: '12345',
238
- })
239
- .reply(200, {
257
+ const verifyResponse = {
258
+ challenge: {
259
+ object: 'authentication_challenge',
260
+ id: 'auth_challenge_1234',
261
+ createdAt: '2022-03-15T20:39:19.892Z',
262
+ updatedAt: '2022-03-15T20:39:19.892Z',
263
+ expiresAt: '2022-03-15T21:39:19.892Z',
264
+ code: '12345',
265
+ authenticationFactorId: 'auth_factor_1234',
266
+ },
267
+ valid: true,
268
+ };
269
+ const verifyResponseResponse = {
240
270
  challenge: {
241
271
  object: 'authentication_challenge',
242
272
  id: 'auth_challenge_1234',
@@ -247,33 +277,24 @@ describe('MFA', () => {
247
277
  authentication_factor_id: 'auth_factor_1234',
248
278
  },
249
279
  valid: true,
250
- });
280
+ };
281
+ mock
282
+ .onPost('/auth/challenges/auth_challenge_1234/verify', {
283
+ code: '12345',
284
+ })
285
+ .reply(200, verifyResponseResponse);
251
286
  const workos = new workos_1.WorkOS('sk_test_Sz3IQjepeSWaI4cMS4ms4sMuU', {
252
287
  apiHostname: 'api.workos.dev',
253
288
  });
254
- const verifyResponse = yield workos.mfa.verifyChallenge({
289
+ const subject = yield workos.mfa.verifyChallenge({
255
290
  authenticationChallengeId: 'auth_challenge_1234',
256
291
  code: '12345',
257
292
  });
258
- expect(verifyResponse).toMatchInlineSnapshot(`
259
- Object {
260
- "challenge": Object {
261
- "authentication_factor_id": "auth_factor_1234",
262
- "code": "12345",
263
- "created_at": "2022-03-15T20:39:19.892Z",
264
- "expires_at": "2022-03-15T21:39:19.892Z",
265
- "id": "auth_challenge_1234",
266
- "object": "authentication_challenge",
267
- "updated_at": "2022-03-15T20:39:19.892Z",
268
- },
269
- "valid": true,
270
- }
271
- `);
293
+ expect(subject).toEqual(verifyResponse);
272
294
  }));
273
295
  });
274
296
  describe('when the challenge has been previously verified', () => {
275
297
  it('throws an exception', () => __awaiter(void 0, void 0, void 0, function* () {
276
- const mock = new axios_mock_adapter_1.default(axios_1.default);
277
298
  mock
278
299
  .onPost('/auth/challenges/auth_challenge_1234/verify', {
279
300
  code: '12345',
@@ -295,7 +316,6 @@ describe('MFA', () => {
295
316
  });
296
317
  describe('when the challenge has expired', () => {
297
318
  it('throws an exception', () => __awaiter(void 0, void 0, void 0, function* () {
298
- const mock = new axios_mock_adapter_1.default(axios_1.default);
299
319
  mock
300
320
  .onPost('/auth/challenges/auth_challenge_1234/verify', {
301
321
  code: '12345',
@@ -315,7 +335,6 @@ describe('MFA', () => {
315
335
  })).rejects.toThrow(exceptions_1.UnprocessableEntityException);
316
336
  }));
317
337
  it('exception has code', () => __awaiter(void 0, void 0, void 0, function* () {
318
- const mock = new axios_mock_adapter_1.default(axios_1.default);
319
338
  mock
320
339
  .onPost('/auth/challenges/auth_challenge_1234/verify', {
321
340
  code: '12345',
@@ -0,0 +1,2 @@
1
+ import { Challenge, ChallengeResponse } from '../interfaces';
2
+ export declare const deserializeChallenge: (challenge: ChallengeResponse) => Challenge;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deserializeChallenge = void 0;
4
+ const deserializeChallenge = (challenge) => ({
5
+ object: challenge.object,
6
+ id: challenge.id,
7
+ createdAt: challenge.created_at,
8
+ updatedAt: challenge.updated_at,
9
+ expiresAt: challenge.expires_at,
10
+ code: challenge.code,
11
+ authenticationFactorId: challenge.authentication_factor_id,
12
+ });
13
+ exports.deserializeChallenge = deserializeChallenge;
@@ -0,0 +1,2 @@
1
+ import { Factor, FactorResponse } from '../interfaces';
2
+ export declare const deserializeFactor: (factor: FactorResponse) => Factor;