@workos-inc/node 3.0.0-user-management.2 → 3.0.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.
Files changed (217) 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.d.ts +2 -2
  15. package/lib/audit-trail/audit-trail.spec.js +2 -1
  16. package/lib/common/interfaces/at-least-one-property-of.interface.d.ts +7 -0
  17. package/lib/common/interfaces/event.interface.d.ts +142 -0
  18. package/lib/common/interfaces/index.d.ts +5 -0
  19. package/lib/common/interfaces/index.js +5 -0
  20. package/lib/common/interfaces/list.interface.d.ts +9 -1
  21. package/lib/common/interfaces/workos-response-error.interface.d.ts +8 -0
  22. package/lib/common/serializers/event.serializer.d.ts +2 -0
  23. package/lib/common/serializers/event.serializer.js +40 -0
  24. package/lib/common/serializers/index.d.ts +2 -0
  25. package/lib/common/serializers/index.js +18 -0
  26. package/lib/common/serializers/list.serializer.d.ts +2 -0
  27. package/lib/common/serializers/list.serializer.js +9 -0
  28. package/lib/common/utils/fetch-and-deserialize.d.ts +3 -0
  29. package/lib/common/utils/fetch-and-deserialize.js +23 -0
  30. package/lib/common/utils/pagination.d.ts +15 -0
  31. package/lib/common/utils/pagination.js +90 -0
  32. package/lib/common/utils/workos-mock-response.d.ts +7 -0
  33. package/lib/common/utils/workos-mock-response.js +11 -0
  34. package/lib/directory-sync/directory-sync.d.ts +8 -12
  35. package/lib/directory-sync/directory-sync.js +9 -15
  36. package/lib/directory-sync/directory-sync.spec.js +132 -20
  37. package/lib/directory-sync/interfaces/directory-group.interface.d.ts +40 -0
  38. package/lib/directory-sync/interfaces/directory-user.interface.d.ts +50 -0
  39. package/lib/directory-sync/interfaces/directory.interface.d.ts +47 -2
  40. package/lib/directory-sync/interfaces/index.d.ts +6 -6
  41. package/lib/directory-sync/interfaces/index.js +20 -0
  42. package/lib/directory-sync/interfaces/list-directories-options.interface.d.ts +1 -1
  43. package/lib/directory-sync/interfaces/{list-users-options.interface.d.ts → list-directory-users-options.interface.d.ts} +1 -1
  44. package/lib/directory-sync/interfaces/list-groups-options.interface.d.ts +1 -1
  45. package/lib/directory-sync/serializers/directory-group.serializer.d.ts +4 -0
  46. package/lib/directory-sync/serializers/directory-group.serializer.js +37 -0
  47. package/lib/directory-sync/serializers/directory-user.serializer.d.ts +4 -0
  48. package/lib/directory-sync/serializers/directory-user.serializer.js +43 -0
  49. package/lib/directory-sync/serializers/directory.serializer.d.ts +5 -0
  50. package/lib/directory-sync/serializers/directory.serializer.js +50 -0
  51. package/lib/directory-sync/serializers/index.d.ts +3 -0
  52. package/lib/directory-sync/serializers/index.js +19 -0
  53. package/lib/directory-sync/utils/get-primary-email.d.ts +2 -2
  54. package/lib/directory-sync/utils/get-primary-email.spec.js +11 -8
  55. package/lib/events/events.d.ts +1 -2
  56. package/lib/events/events.js +2 -1
  57. package/lib/events/events.spec.js +39 -5
  58. package/lib/events/interfaces/index.d.ts +0 -1
  59. package/lib/events/interfaces/index.js +0 -1
  60. package/lib/events/interfaces/list-events-options.interface.d.ts +4 -4
  61. package/lib/index.d.ts +1 -1
  62. package/lib/index.js +1 -1
  63. package/lib/mfa/interfaces/challenge.interface.d.ts +9 -0
  64. package/lib/mfa/interfaces/factor.interface.d.ts +13 -4
  65. package/lib/mfa/interfaces/index.d.ts +9 -0
  66. package/lib/mfa/interfaces/index.js +25 -0
  67. package/lib/mfa/interfaces/sms.interface.d.ts +3 -0
  68. package/lib/mfa/interfaces/totp.interface.d.ts +7 -0
  69. package/lib/mfa/interfaces/verify-challenge-response.d.ts +5 -1
  70. package/lib/mfa/mfa.d.ts +2 -8
  71. package/lib/mfa/mfa.js +5 -4
  72. package/lib/mfa/mfa.spec.js +134 -115
  73. package/lib/mfa/serializers/challenge.serializer.d.ts +2 -0
  74. package/lib/mfa/serializers/challenge.serializer.js +13 -0
  75. package/lib/mfa/serializers/factor.serializer.d.ts +2 -0
  76. package/lib/mfa/serializers/factor.serializer.js +7 -0
  77. package/lib/mfa/serializers/index.d.ts +3 -0
  78. package/lib/{webhooks/interfaces → mfa/serializers}/index.js +3 -4
  79. package/lib/mfa/serializers/sms.serializer.d.ts +2 -0
  80. package/lib/mfa/serializers/sms.serializer.js +7 -0
  81. package/lib/mfa/serializers/totp.serializer.d.ts +2 -0
  82. package/lib/mfa/serializers/totp.serializer.js +11 -0
  83. package/lib/mfa/serializers/verify-response.serializer.d.ts +2 -0
  84. package/lib/mfa/serializers/verify-response.serializer.js +9 -0
  85. package/lib/organizations/interfaces/create-organization-options.interface.d.ts +5 -0
  86. package/lib/organizations/interfaces/organization.interface.d.ts +9 -0
  87. package/lib/organizations/interfaces/update-organization-options.interface.d.ts +5 -0
  88. package/lib/organizations/organizations.d.ts +2 -2
  89. package/lib/organizations/organizations.js +9 -9
  90. package/lib/organizations/organizations.spec.js +11 -4
  91. package/lib/organizations/serializers/create-organization-options.serializer.d.ts +2 -0
  92. package/lib/organizations/serializers/create-organization-options.serializer.js +9 -0
  93. package/lib/organizations/serializers/index.d.ts +3 -0
  94. package/lib/organizations/serializers/index.js +19 -0
  95. package/lib/organizations/serializers/organization.serializer.d.ts +2 -0
  96. package/lib/organizations/serializers/organization.serializer.js +13 -0
  97. package/lib/organizations/serializers/update-organization-options.serializer.d.ts +2 -0
  98. package/lib/organizations/serializers/update-organization-options.serializer.js +9 -0
  99. package/lib/passwordless/interfaces/create-passwordless-session-options.interface.d.ts +8 -0
  100. package/lib/passwordless/interfaces/index.d.ts +3 -3
  101. package/lib/passwordless/interfaces/index.js +17 -0
  102. package/lib/passwordless/interfaces/passwordless-session.interface.d.ts +7 -0
  103. package/lib/passwordless/passwordless.d.ts +1 -3
  104. package/lib/passwordless/passwordless.js +2 -1
  105. package/lib/passwordless/serializers/index.d.ts +0 -0
  106. package/lib/passwordless/serializers/index.js +1 -0
  107. package/lib/passwordless/serializers/passwordless-session.serializer.d.ts +2 -0
  108. package/lib/passwordless/serializers/passwordless-session.serializer.js +11 -0
  109. package/lib/portal/interfaces/generate-portal-link-intent.interface.js +1 -1
  110. package/lib/sso/interfaces/connection-type.enum.d.ts +1 -0
  111. package/lib/sso/interfaces/connection-type.enum.js +2 -1
  112. package/lib/sso/interfaces/connection.interface.d.ts +16 -5
  113. package/lib/sso/interfaces/index.d.ts +2 -0
  114. package/lib/sso/interfaces/index.js +2 -0
  115. package/lib/sso/interfaces/list-connections-options.interface.d.ts +5 -0
  116. package/lib/sso/interfaces/profile-and-token.interface.d.ts +6 -2
  117. package/lib/sso/interfaces/profile.interface.d.ts +14 -0
  118. package/lib/sso/serializers/connection.serializer.d.ts +2 -0
  119. package/lib/sso/serializers/connection.serializer.js +16 -0
  120. package/lib/sso/serializers/index.d.ts +3 -0
  121. package/lib/sso/serializers/index.js +19 -0
  122. package/lib/sso/serializers/profile-and-token.serializer.d.ts +2 -0
  123. package/lib/sso/serializers/profile-and-token.serializer.js +9 -0
  124. package/lib/sso/serializers/profile.serializer.d.ts +2 -0
  125. package/lib/sso/serializers/profile.serializer.js +16 -0
  126. package/lib/sso/sso.d.ts +3 -9
  127. package/lib/sso/sso.js +23 -16
  128. package/lib/sso/sso.spec.js +26 -9
  129. package/lib/users/exceptions/index.d.ts +4 -0
  130. package/lib/users/exceptions/index.js +10 -0
  131. package/lib/users/fixtures/list-users.json +0 -1
  132. package/lib/users/fixtures/session.json +2 -0
  133. package/lib/users/fixtures/user.json +0 -1
  134. package/lib/users/interfaces/add-user-to-organization-options.interface.d.ts +4 -1
  135. package/lib/users/interfaces/authenticate-user-with-magic-auth-options.interface.d.ts +21 -0
  136. package/lib/users/interfaces/authenticate-user-with-password-options.interface.d.ts +14 -1
  137. package/lib/users/interfaces/authenticate-user-with-token-options.interface.d.ts +10 -1
  138. package/lib/users/interfaces/authentication-response.interface.d.ts +7 -3
  139. package/lib/users/interfaces/complete-password-reset-options.interface.d.ts +4 -0
  140. package/lib/users/interfaces/create-email-verification-challenge-options.interface.d.ts +9 -2
  141. package/lib/users/interfaces/create-password-reset-challenge-options.interface.d.ts +9 -1
  142. package/lib/users/interfaces/create-user-options.interface.d.ts +8 -1
  143. package/lib/users/interfaces/index.d.ts +7 -0
  144. package/lib/users/interfaces/index.js +7 -0
  145. package/lib/users/interfaces/magic-auth-challenge.interface.d.ts +3 -0
  146. package/lib/users/interfaces/remove-user-from-organization-options.interface.d.ts +2 -2
  147. package/lib/users/interfaces/revoke-all-sessions-for-user-options.interface.d.ts +3 -0
  148. package/lib/users/interfaces/revoke-all-sessions-for-user-options.interface.js +2 -0
  149. package/lib/users/interfaces/revoke-session-options.interface.d.ts +7 -0
  150. package/lib/users/interfaces/send-magic-auth-code-options.interface.d.ts +6 -0
  151. package/lib/users/interfaces/send-magic-auth-code-options.interface.js +2 -0
  152. package/lib/users/interfaces/session.interface.d.ts +35 -0
  153. package/lib/users/interfaces/update-user-options.interface.d.ts +14 -0
  154. package/lib/users/interfaces/update-user-options.interface.js +2 -0
  155. package/lib/users/interfaces/update-user-password-options.interface.d.ts +7 -0
  156. package/lib/users/interfaces/update-user-password-options.interface.js +2 -0
  157. package/lib/users/interfaces/user.interface.d.ts +28 -18
  158. package/lib/users/interfaces/verify-session.interface.d.ts +10 -2
  159. package/lib/users/serializers/authenticate-user-with-magic-auth-options.serializer.d.ts +2 -0
  160. package/lib/users/serializers/authenticate-user-with-magic-auth-options.serializer.js +14 -0
  161. package/lib/users/serializers/authenticate-user-with-password-options.serializer.d.ts +2 -0
  162. package/lib/users/serializers/authenticate-user-with-password-options.serializer.js +14 -0
  163. package/lib/users/serializers/authenticate-user-with-token-options.serializer.d.ts +2 -0
  164. package/lib/users/serializers/authenticate-user-with-token-options.serializer.js +11 -0
  165. package/lib/users/serializers/authentication-response.serializer.d.ts +2 -0
  166. package/lib/users/serializers/authentication-response.serializer.js +10 -0
  167. package/lib/users/serializers/complete-password-reset-options.serializer.d.ts +2 -0
  168. package/lib/users/serializers/complete-password-reset-options.serializer.js +8 -0
  169. package/lib/users/serializers/create-email-verification-challenge.serializer.d.ts +2 -0
  170. package/lib/users/serializers/create-email-verification-challenge.serializer.js +9 -0
  171. package/lib/users/serializers/create-password-reset-challenge.serializer.d.ts +3 -0
  172. package/lib/users/serializers/create-password-reset-challenge.serializer.js +14 -0
  173. package/lib/users/serializers/create-user-options.serializer.d.ts +2 -0
  174. package/lib/users/serializers/create-user-options.serializer.js +11 -0
  175. package/lib/users/serializers/index.d.ts +15 -0
  176. package/lib/users/serializers/index.js +31 -0
  177. package/lib/users/serializers/revoke-session-options.serializer.d.ts +2 -0
  178. package/lib/users/serializers/revoke-session-options.serializer.js +14 -0
  179. package/lib/users/serializers/send-magic-auth-code-options.serializer.d.ts +2 -0
  180. package/lib/users/serializers/send-magic-auth-code-options.serializer.js +7 -0
  181. package/lib/users/serializers/session.serializer.d.ts +4 -0
  182. package/lib/users/serializers/session.serializer.js +22 -0
  183. package/lib/users/serializers/update-user-options.serializer.d.ts +2 -0
  184. package/lib/users/serializers/update-user-options.serializer.js +8 -0
  185. package/lib/users/serializers/update-user-password-options.serializer.d.ts +2 -0
  186. package/lib/users/serializers/update-user-password-options.serializer.js +7 -0
  187. package/lib/users/serializers/user.serializer.d.ts +2 -0
  188. package/lib/users/serializers/user.serializer.js +24 -0
  189. package/lib/users/serializers/verify-session.serializer.d.ts +3 -0
  190. package/lib/users/serializers/verify-session.serializer.js +15 -0
  191. package/lib/users/users.d.ts +11 -7
  192. package/lib/users/users.js +54 -30
  193. package/lib/users/users.spec.js +133 -49
  194. package/lib/webhooks/fixtures/webhook.json +67 -1
  195. package/lib/webhooks/webhooks.d.ts +2 -2
  196. package/lib/webhooks/webhooks.js +2 -1
  197. package/lib/webhooks/webhooks.spec.js +8 -6
  198. package/lib/workos.d.ts +5 -4
  199. package/lib/workos.js +4 -1
  200. package/lib/workos.spec.js +11 -1
  201. package/package.json +14 -15
  202. package/lib/directory-sync/interfaces/group.interface.d.ts +0 -10
  203. package/lib/directory-sync/interfaces/user.interface.d.ts +0 -23
  204. package/lib/events/interfaces/event.interface.d.ts +0 -63
  205. package/lib/webhooks/interfaces/index.d.ts +0 -4
  206. package/lib/webhooks/interfaces/webhook-directory-group.interface.d.ts +0 -10
  207. package/lib/webhooks/interfaces/webhook-directory-user.interface.d.ts +0 -5
  208. package/lib/webhooks/interfaces/webhook-directory.interface.d.ts +0 -20
  209. package/lib/webhooks/interfaces/webhook.interface.d.ts +0 -73
  210. /package/lib/{directory-sync/interfaces/group.interface.js → common/interfaces/at-least-one-property-of.interface.js} +0 -0
  211. /package/lib/{events → common}/interfaces/event.interface.js +0 -0
  212. /package/lib/{directory-sync/interfaces/list-users-options.interface.js → common/interfaces/workos-response-error.interface.js} +0 -0
  213. /package/lib/directory-sync/interfaces/{user.interface.js → directory-group.interface.js} +0 -0
  214. /package/lib/{webhooks/interfaces/webhook-directory-group.interface.js → directory-sync/interfaces/directory-user.interface.js} +0 -0
  215. /package/lib/{webhooks/interfaces/webhook-directory-user.interface.js → directory-sync/interfaces/list-directory-users-options.interface.js} +0 -0
  216. /package/lib/{webhooks/interfaces/webhook-directory.interface.js → users/interfaces/authenticate-user-with-magic-auth-options.interface.js} +0 -0
  217. /package/lib/{webhooks/interfaces/webhook.interface.js → users/interfaces/magic-auth-challenge.interface.js} +0 -0
@@ -0,0 +1,142 @@
1
+ import { DirectoryUser, DirectoryUserResponse, EventDirectory, EventDirectoryGroup, EventDirectoryGroupResponse, EventDirectoryResponse } from '../../directory-sync/interfaces';
2
+ import { Connection, ConnectionResponse } from '../../sso/interfaces';
3
+ export interface EventBase {
4
+ id: string;
5
+ createdAt: string;
6
+ }
7
+ interface EventResponseBase {
8
+ id: string;
9
+ created_at: string;
10
+ }
11
+ export interface ConnectionActivatedEvent extends EventBase {
12
+ event: 'connection.activated';
13
+ data: Connection;
14
+ }
15
+ export interface ConnectionActivatedEventResponse extends EventResponseBase {
16
+ event: 'connection.activated';
17
+ data: ConnectionResponse;
18
+ }
19
+ export interface ConnectionDeactivatedEvent extends EventBase {
20
+ event: 'connection.deactivated';
21
+ data: Connection;
22
+ }
23
+ export interface ConnectionDeactivatedEventResponse extends EventResponseBase {
24
+ event: 'connection.deactivated';
25
+ data: ConnectionResponse;
26
+ }
27
+ export interface ConnectionDeletedEvent extends EventBase {
28
+ event: 'connection.deleted';
29
+ data: Connection;
30
+ }
31
+ export interface ConnectionDeletedEventResponse extends EventResponseBase {
32
+ event: 'connection.deleted';
33
+ data: ConnectionResponse;
34
+ }
35
+ export interface DsyncActivatedEvent extends EventBase {
36
+ event: 'dsync.activated';
37
+ data: EventDirectory;
38
+ }
39
+ export interface DsyncActivatedEventResponse extends EventResponseBase {
40
+ event: 'dsync.activated';
41
+ data: EventDirectoryResponse;
42
+ }
43
+ export interface DsyncDeactivatedEvent extends EventBase {
44
+ event: 'dsync.deactivated';
45
+ data: EventDirectory;
46
+ }
47
+ export interface DsyncDeactivatedEventResponse extends EventResponseBase {
48
+ event: 'dsync.deactivated';
49
+ data: EventDirectoryResponse;
50
+ }
51
+ export interface DsyncDeletedEvent extends EventBase {
52
+ event: 'dsync.deleted';
53
+ data: Omit<EventDirectory, 'domains' | 'externalKey'>;
54
+ }
55
+ export interface DsyncDeletedEventResponse extends EventResponseBase {
56
+ event: 'dsync.deleted';
57
+ data: Omit<EventDirectoryResponse, 'domains' | 'external_key'>;
58
+ }
59
+ export interface DsyncGroupCreatedEvent extends EventBase {
60
+ event: 'dsync.group.created';
61
+ data: EventDirectoryGroup;
62
+ }
63
+ export interface DsyncGroupCreatedEventResponse extends EventResponseBase {
64
+ event: 'dsync.group.created';
65
+ data: EventDirectoryGroupResponse;
66
+ }
67
+ export interface DsyncGroupDeletedEvent extends EventBase {
68
+ event: 'dsync.group.deleted';
69
+ data: EventDirectoryGroup;
70
+ }
71
+ export interface DsyncGroupDeletedEventResponse extends EventResponseBase {
72
+ event: 'dsync.group.deleted';
73
+ data: EventDirectoryGroupResponse;
74
+ }
75
+ export interface DsyncGroupUpdatedEvent extends EventBase {
76
+ event: 'dsync.group.updated';
77
+ data: EventDirectoryGroup & Record<'previousAttributes', any>;
78
+ }
79
+ export interface DsyncGroupUpdatedEventResponse extends EventResponseBase {
80
+ event: 'dsync.group.updated';
81
+ data: EventDirectoryGroupResponse & Record<'previous_attributes', any>;
82
+ }
83
+ export interface DsyncGroupUserAddedEvent extends EventBase {
84
+ event: 'dsync.group.user_added';
85
+ data: {
86
+ directoryId: string;
87
+ user: DirectoryUser;
88
+ group: Pick<EventDirectoryGroup, 'id' | 'name'>;
89
+ };
90
+ }
91
+ export interface DsyncGroupUserAddedEventResponse extends EventResponseBase {
92
+ event: 'dsync.group.user_added';
93
+ data: {
94
+ directory_id: string;
95
+ user: DirectoryUserResponse;
96
+ group: Pick<EventDirectoryGroupResponse, 'id' | 'name'>;
97
+ };
98
+ }
99
+ export interface DsyncGroupUserRemovedEvent extends EventBase {
100
+ event: 'dsync.group.user_removed';
101
+ data: {
102
+ directoryId: string;
103
+ user: DirectoryUser;
104
+ group: Pick<EventDirectoryGroup, 'id' | 'name'>;
105
+ };
106
+ }
107
+ export interface DsyncGroupUserRemovedEventResponse extends EventResponseBase {
108
+ event: 'dsync.group.user_removed';
109
+ data: {
110
+ directory_id: string;
111
+ user: DirectoryUserResponse;
112
+ group: Pick<EventDirectoryGroupResponse, 'id' | 'name'>;
113
+ };
114
+ }
115
+ export interface DsyncUserCreatedEvent extends EventBase {
116
+ event: 'dsync.user.created';
117
+ data: DirectoryUser;
118
+ }
119
+ export interface DsyncUserCreatedEventResponse extends EventResponseBase {
120
+ event: 'dsync.user.created';
121
+ data: DirectoryUserResponse;
122
+ }
123
+ export interface DsyncUserDeletedEvent extends EventBase {
124
+ event: 'dsync.user.deleted';
125
+ data: DirectoryUser;
126
+ }
127
+ export interface DsyncUserDeletedEventResponse extends EventResponseBase {
128
+ event: 'dsync.user.deleted';
129
+ data: DirectoryUserResponse;
130
+ }
131
+ export interface DsyncUserUpdatedEvent extends EventBase {
132
+ event: 'dsync.user.updated';
133
+ data: DirectoryUser & Record<'previousAttributes', any>;
134
+ }
135
+ export interface DsyncUserUpdatedEventResponse extends EventResponseBase {
136
+ event: 'dsync.user.updated';
137
+ data: DirectoryUserResponse & Record<'previous_attributes', any>;
138
+ }
139
+ export type Event = ConnectionActivatedEvent | ConnectionDeactivatedEvent | ConnectionDeletedEvent | DsyncActivatedEvent | DsyncDeactivatedEvent | DsyncDeletedEvent | DsyncGroupCreatedEvent | DsyncGroupUpdatedEvent | DsyncGroupDeletedEvent | DsyncGroupUserAddedEvent | DsyncGroupUserRemovedEvent | DsyncUserCreatedEvent | DsyncUserUpdatedEvent | DsyncUserDeletedEvent;
140
+ export type EventResponse = ConnectionActivatedEventResponse | ConnectionDeactivatedEventResponse | ConnectionDeletedEventResponse | DsyncActivatedEventResponse | DsyncDeactivatedEventResponse | DsyncDeletedEventResponse | DsyncGroupCreatedEventResponse | DsyncGroupUpdatedEventResponse | DsyncGroupDeletedEventResponse | DsyncGroupUserAddedEventResponse | DsyncGroupUserRemovedEventResponse | DsyncUserCreatedEventResponse | DsyncUserUpdatedEventResponse | DsyncUserDeletedEventResponse;
141
+ export type EventName = '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';
142
+ export {};
@@ -1,5 +1,10 @@
1
+ export * from './at-least-one-property-of.interface';
2
+ export * from './event.interface';
1
3
  export * from './get-options.interface';
4
+ export * from './list.interface';
2
5
  export * from './post-options.interface';
3
6
  export * from './put-options.interface';
4
7
  export * from './unprocessable-entity-error.interface';
5
8
  export * from './workos-options.interface';
9
+ export * from './workos-response-error.interface';
10
+ export * from './pagination-options.interface';
@@ -14,8 +14,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./at-least-one-property-of.interface"), exports);
18
+ __exportStar(require("./event.interface"), exports);
17
19
  __exportStar(require("./get-options.interface"), exports);
20
+ __exportStar(require("./list.interface"), exports);
18
21
  __exportStar(require("./post-options.interface"), exports);
19
22
  __exportStar(require("./put-options.interface"), exports);
20
23
  __exportStar(require("./unprocessable-entity-error.interface"), exports);
21
24
  __exportStar(require("./workos-options.interface"), exports);
25
+ __exportStar(require("./workos-response-error.interface"), exports);
26
+ __exportStar(require("./pagination-options.interface"), exports);
@@ -1,4 +1,4 @@
1
- export interface List<T> {
1
+ export interface ListResponse<T> {
2
2
  readonly object: 'list';
3
3
  data: T[];
4
4
  list_metadata: {
@@ -6,3 +6,11 @@ export interface List<T> {
6
6
  after?: string;
7
7
  };
8
8
  }
9
+ export interface List<T> {
10
+ readonly object: 'list';
11
+ data: T[];
12
+ listMetadata: {
13
+ before?: string;
14
+ after?: string;
15
+ };
16
+ }
@@ -0,0 +1,8 @@
1
+ import { UnprocessableEntityError } from './unprocessable-entity-error.interface';
2
+ export interface WorkOSResponseError {
3
+ code?: string;
4
+ error_description?: string;
5
+ error?: string;
6
+ errors?: UnprocessableEntityError[];
7
+ message: string;
8
+ }
@@ -0,0 +1,2 @@
1
+ import { Event, EventResponse } from '../interfaces';
2
+ export declare const deserializeEvent: (event: EventResponse) => Event;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deserializeEvent = void 0;
4
+ const serializers_1 = require("../../directory-sync/serializers");
5
+ const serializers_2 = require("../../sso/serializers");
6
+ const deserializeEvent = (event) => {
7
+ const eventBase = {
8
+ id: event.id,
9
+ createdAt: event.created_at,
10
+ };
11
+ switch (event.event) {
12
+ case 'connection.activated':
13
+ case 'connection.deactivated':
14
+ case 'connection.deleted':
15
+ return Object.assign(Object.assign({}, eventBase), { event: event.event, data: (0, serializers_2.deserializeConnection)(event.data) });
16
+ case 'dsync.activated':
17
+ case 'dsync.deactivated':
18
+ return Object.assign(Object.assign({}, eventBase), { event: event.event, data: (0, serializers_1.deserializeEventDirectory)(event.data) });
19
+ case 'dsync.deleted':
20
+ return Object.assign(Object.assign({}, eventBase), { event: event.event, data: (0, serializers_1.deserializeDeletedEventDirectory)(event.data) });
21
+ case 'dsync.group.created':
22
+ case 'dsync.group.deleted':
23
+ return Object.assign(Object.assign({}, eventBase), { event: event.event, data: (0, serializers_1.deserializeEventDirectoryGroup)(event.data) });
24
+ case 'dsync.group.updated':
25
+ return Object.assign(Object.assign({}, eventBase), { event: event.event, data: (0, serializers_1.deserializeUpdatedEventDirectoryGroup)(event.data) });
26
+ case 'dsync.group.user_added':
27
+ case 'dsync.group.user_removed':
28
+ return Object.assign(Object.assign({}, eventBase), { event: event.event, data: {
29
+ directoryId: event.data.directory_id,
30
+ user: (0, serializers_1.deserializeDirectoryUser)(event.data.user),
31
+ group: event.data.group,
32
+ } });
33
+ case 'dsync.user.created':
34
+ case 'dsync.user.deleted':
35
+ return Object.assign(Object.assign({}, eventBase), { event: event.event, data: (0, serializers_1.deserializeDirectoryUser)(event.data) });
36
+ case 'dsync.user.updated':
37
+ return Object.assign(Object.assign({}, eventBase), { event: event.event, data: (0, serializers_1.deserializeUpdatedEventDirectoryUser)(event.data) });
38
+ }
39
+ };
40
+ exports.deserializeEvent = deserializeEvent;
@@ -0,0 +1,2 @@
1
+ export * from './event.serializer';
2
+ export * from './list.serializer';
@@ -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("./event.serializer"), exports);
18
+ __exportStar(require("./list.serializer"), exports);
@@ -0,0 +1,2 @@
1
+ import { List, ListResponse } from '../interfaces';
2
+ export declare const deserializeList: <TSerialized, TDeserialized>(list: ListResponse<TSerialized>, deserializer: (serialized: TSerialized) => TDeserialized) => List<TDeserialized>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deserializeList = void 0;
4
+ const deserializeList = (list, deserializer) => ({
5
+ object: 'list',
6
+ data: list.data.map(deserializer),
7
+ listMetadata: list.list_metadata,
8
+ });
9
+ exports.deserializeList = deserializeList;
@@ -0,0 +1,3 @@
1
+ import { WorkOS } from '../../workos';
2
+ import { List, PaginationOptions } from '../interfaces';
3
+ export declare const fetchAndDeserialize: <T, U>(workos: WorkOS, endpoint: string, deserializeFn: (data: T) => U, options?: PaginationOptions) => Promise<List<U>>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.fetchAndDeserialize = void 0;
13
+ const serializers_1 = require("../serializers");
14
+ const setDefaultOptions = (options) => {
15
+ return Object.assign(Object.assign({}, options), { order: (options === null || options === void 0 ? void 0 : options.order) || 'desc' });
16
+ };
17
+ const fetchAndDeserialize = (workos, endpoint, deserializeFn, options) => __awaiter(void 0, void 0, void 0, function* () {
18
+ const { data } = yield workos.get(endpoint, {
19
+ query: setDefaultOptions(options),
20
+ });
21
+ return (0, serializers_1.deserializeList)(data, deserializeFn);
22
+ });
23
+ exports.fetchAndDeserialize = fetchAndDeserialize;
@@ -0,0 +1,15 @@
1
+ import { List, PaginationOptions } from '../interfaces';
2
+ export declare class AutoPaginatable<T> {
3
+ private list;
4
+ private apiCall;
5
+ readonly object: 'list';
6
+ readonly options: PaginationOptions;
7
+ constructor(list: List<T>, apiCall: (params: PaginationOptions) => Promise<List<T>>, options?: PaginationOptions);
8
+ get data(): T[];
9
+ get listMetadata(): {
10
+ before?: string | undefined;
11
+ after?: string | undefined;
12
+ };
13
+ private generatePages;
14
+ autoPagination(): Promise<T[]>;
15
+ }
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
12
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
13
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
14
+ var m = o[Symbol.asyncIterator], i;
15
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
16
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
17
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
18
+ };
19
+ var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
20
+ var i, p;
21
+ return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
22
+ function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
23
+ };
24
+ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
25
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
26
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
27
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
28
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
29
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
30
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
31
+ function fulfill(value) { resume("next", value); }
32
+ function reject(value) { resume("throw", value); }
33
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
34
+ };
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.AutoPaginatable = void 0;
37
+ class AutoPaginatable {
38
+ constructor(list, apiCall, options) {
39
+ this.list = list;
40
+ this.apiCall = apiCall;
41
+ this.object = 'list';
42
+ this.options = Object.assign({}, options);
43
+ }
44
+ get data() {
45
+ return this.list.data;
46
+ }
47
+ get listMetadata() {
48
+ return this.list.listMetadata;
49
+ }
50
+ generatePages(params) {
51
+ return __asyncGenerator(this, arguments, function* generatePages_1() {
52
+ const result = yield __await(this.apiCall(Object.assign(Object.assign({}, this.options), { after: params.after })));
53
+ yield yield __await(result.data);
54
+ if (result.listMetadata.after) {
55
+ yield __await(yield* __asyncDelegator(__asyncValues(this.generatePages({ after: result.listMetadata.after }))));
56
+ }
57
+ });
58
+ }
59
+ autoPagination() {
60
+ var _a, e_1, _b, _c;
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ if (!this.options.limit) {
63
+ const generatePages = this.generatePages({
64
+ after: this.options.after,
65
+ });
66
+ const results = [];
67
+ try {
68
+ for (var _d = true, generatePages_2 = __asyncValues(generatePages), generatePages_2_1; generatePages_2_1 = yield generatePages_2.next(), _a = generatePages_2_1.done, !_a; _d = true) {
69
+ _c = generatePages_2_1.value;
70
+ _d = false;
71
+ const page = _c;
72
+ results.push(...page);
73
+ }
74
+ }
75
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
76
+ finally {
77
+ try {
78
+ if (!_d && !_a && (_b = generatePages_2.return)) yield _b.call(generatePages_2);
79
+ }
80
+ finally { if (e_1) throw e_1.error; }
81
+ }
82
+ return results;
83
+ }
84
+ else {
85
+ return this.data;
86
+ }
87
+ });
88
+ }
89
+ }
90
+ exports.AutoPaginatable = AutoPaginatable;
@@ -0,0 +1,7 @@
1
+ export declare const mockWorkOsResponse: (status: number, data: unknown) => {
2
+ data: unknown;
3
+ status: number;
4
+ headers: {};
5
+ statusText: string;
6
+ config: any;
7
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mockWorkOsResponse = void 0;
4
+ const mockWorkOsResponse = (status, data) => ({
5
+ data,
6
+ status,
7
+ headers: {},
8
+ statusText: '',
9
+ config: {},
10
+ });
11
+ exports.mockWorkOsResponse = mockWorkOsResponse;
@@ -1,19 +1,15 @@
1
1
  import { WorkOS } from '../workos';
2
- import { Directory } from './interfaces/directory.interface';
3
- import { List } from '../common/interfaces/list.interface';
4
- import { Group } from './interfaces/group.interface';
5
- import { DefaultCustomAttributes, UserWithGroups } from './interfaces/user.interface';
6
- import { ListDirectoriesOptions } from './interfaces/list-directories-options.interface';
7
- import { ListGroupsOptions } from './interfaces/list-groups-options.interface';
8
- import { ListUsersOptions } from './interfaces/list-users-options.interface';
2
+ import { AutoPaginatable } from '../common/utils/pagination';
3
+ import { DefaultCustomAttributes, Directory, DirectoryGroup, DirectoryUserWithGroups, ListDirectoriesOptions, ListDirectoryGroupsOptions, ListDirectoryUsersOptions } from './interfaces';
4
+ import { List } from '../common/interfaces';
9
5
  export declare class DirectorySync {
10
6
  private readonly workos;
11
7
  constructor(workos: WorkOS);
12
- listDirectories(options?: ListDirectoriesOptions): Promise<List<Directory>>;
8
+ listDirectories(options?: ListDirectoriesOptions): Promise<AutoPaginatable<Directory>>;
13
9
  getDirectory(id: string): Promise<Directory>;
14
10
  deleteDirectory(id: string): Promise<void>;
15
- listGroups(options: ListGroupsOptions): Promise<List<Group>>;
16
- listUsers<TCustomAttributes extends object = DefaultCustomAttributes>(options: ListUsersOptions): Promise<List<UserWithGroups<TCustomAttributes>>>;
17
- getUser<TCustomAttributes extends object = DefaultCustomAttributes>(user: string): Promise<UserWithGroups<TCustomAttributes>>;
18
- getGroup(group: string): Promise<Group>;
11
+ listGroups(options: ListDirectoryGroupsOptions): Promise<List<DirectoryGroup>>;
12
+ listUsers<TCustomAttributes extends object = DefaultCustomAttributes>(options: ListDirectoryUsersOptions): Promise<List<DirectoryUserWithGroups<TCustomAttributes>>>;
13
+ getUser<TCustomAttributes extends object = DefaultCustomAttributes>(user: string): Promise<DirectoryUserWithGroups<TCustomAttributes>>;
14
+ getGroup(group: string): Promise<DirectoryGroup>;
19
15
  }
@@ -10,22 +10,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.DirectorySync = void 0;
13
+ const pagination_1 = require("../common/utils/pagination");
14
+ const serializers_1 = require("./serializers");
15
+ const fetch_and_deserialize_1 = require("../common/utils/fetch-and-deserialize");
13
16
  class DirectorySync {
14
17
  constructor(workos) {
15
18
  this.workos = workos;
16
19
  }
17
20
  listDirectories(options) {
18
21
  return __awaiter(this, void 0, void 0, function* () {
19
- const { data } = yield this.workos.get('/directories', {
20
- query: options,
21
- });
22
- return data;
22
+ return new pagination_1.AutoPaginatable(yield (0, fetch_and_deserialize_1.fetchAndDeserialize)(this.workos, '/directories', serializers_1.deserializeDirectory, options), (params) => (0, fetch_and_deserialize_1.fetchAndDeserialize)(this.workos, '/directories', serializers_1.deserializeDirectory, params), options);
23
23
  });
24
24
  }
25
25
  getDirectory(id) {
26
26
  return __awaiter(this, void 0, void 0, function* () {
27
27
  const { data } = yield this.workos.get(`/directories/${id}`);
28
- return data;
28
+ return (0, serializers_1.deserializeDirectory)(data);
29
29
  });
30
30
  }
31
31
  deleteDirectory(id) {
@@ -35,30 +35,24 @@ class DirectorySync {
35
35
  }
36
36
  listGroups(options) {
37
37
  return __awaiter(this, void 0, void 0, function* () {
38
- const { data } = yield this.workos.get(`/directory_groups`, {
39
- query: options,
40
- });
41
- return data;
38
+ return new pagination_1.AutoPaginatable(yield (0, fetch_and_deserialize_1.fetchAndDeserialize)(this.workos, '/directory_groups', serializers_1.deserializeDirectoryGroup, options), (params) => (0, fetch_and_deserialize_1.fetchAndDeserialize)(this.workos, '/directory_groups', serializers_1.deserializeDirectoryGroup, params), options);
42
39
  });
43
40
  }
44
41
  listUsers(options) {
45
42
  return __awaiter(this, void 0, void 0, function* () {
46
- const { data } = yield this.workos.get(`/directory_users`, {
47
- query: options,
48
- });
49
- return data;
43
+ return new pagination_1.AutoPaginatable(yield (0, fetch_and_deserialize_1.fetchAndDeserialize)(this.workos, '/directory_users', serializers_1.deserializeDirectoryUserWithGroups, options), (params) => (0, fetch_and_deserialize_1.fetchAndDeserialize)(this.workos, '/directory_users', serializers_1.deserializeDirectoryUserWithGroups, params), options);
50
44
  });
51
45
  }
52
46
  getUser(user) {
53
47
  return __awaiter(this, void 0, void 0, function* () {
54
48
  const { data } = yield this.workos.get(`/directory_users/${user}`);
55
- return data;
49
+ return (0, serializers_1.deserializeDirectoryUserWithGroups)(data);
56
50
  });
57
51
  }
58
52
  getGroup(group) {
59
53
  return __awaiter(this, void 0, void 0, function* () {
60
54
  const { data } = yield this.workos.get(`/directory_groups/${group}`);
61
- return data;
55
+ return (0, serializers_1.deserializeDirectoryGroup)(data);
62
56
  });
63
57
  }
64
58
  }