@workos-inc/node 7.41.0 → 7.43.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 (64) hide show
  1. package/lib/actions/actions.spec.js +2 -0
  2. package/lib/common/exceptions/conflict.exception.d.ts +11 -0
  3. package/lib/common/exceptions/conflict.exception.js +21 -0
  4. package/lib/common/utils/test-utils.d.ts +1 -0
  5. package/lib/common/utils/test-utils.js +6 -1
  6. package/lib/organizations/fixtures/get-organization.json +2 -1
  7. package/lib/organizations/interfaces/create-organization-options.interface.d.ts +2 -0
  8. package/lib/organizations/interfaces/organization.interface.d.ts +2 -0
  9. package/lib/organizations/interfaces/update-organization-options.interface.d.ts +2 -0
  10. package/lib/organizations/organizations.spec.js +20 -0
  11. package/lib/organizations/serializers/create-organization-options.serializer.js +1 -0
  12. package/lib/organizations/serializers/organization.serializer.js +2 -2
  13. package/lib/organizations/serializers/organization.serializer.spec.d.ts +1 -0
  14. package/lib/organizations/serializers/organization.serializer.spec.js +33 -0
  15. package/lib/organizations/serializers/update-organization-options.serializer.js +1 -0
  16. package/lib/user-management/fixtures/user.json +2 -1
  17. package/lib/user-management/interfaces/create-user-options.interface.d.ts +2 -0
  18. package/lib/user-management/interfaces/update-user-options.interface.d.ts +2 -0
  19. package/lib/user-management/interfaces/user.interface.d.ts +2 -0
  20. package/lib/user-management/serializers/create-user-options.serializer.js +1 -0
  21. package/lib/user-management/serializers/update-user-options.serializer.js +1 -0
  22. package/lib/user-management/serializers/user.serializer.js +2 -1
  23. package/lib/user-management/serializers/user.serializer.spec.d.ts +1 -0
  24. package/lib/user-management/serializers/user.serializer.spec.js +32 -0
  25. package/lib/user-management/user-management.spec.js +20 -0
  26. package/lib/vault/cryptography/decrypt.d.ts +9 -0
  27. package/lib/vault/cryptography/decrypt.js +37 -0
  28. package/lib/vault/cryptography/encrypt.d.ts +1 -0
  29. package/lib/vault/cryptography/encrypt.js +31 -0
  30. package/lib/vault/interfaces/index.d.ts +10 -0
  31. package/lib/vault/interfaces/index.js +26 -0
  32. package/lib/vault/interfaces/key/create-data-key.interface.d.ts +10 -0
  33. package/lib/vault/interfaces/key/create-data-key.interface.js +2 -0
  34. package/lib/vault/interfaces/key/decrypt-data-key.interface.d.ts +7 -0
  35. package/lib/vault/interfaces/key/decrypt-data-key.interface.js +2 -0
  36. package/lib/vault/interfaces/key.interface.d.ts +10 -0
  37. package/lib/vault/interfaces/key.interface.js +2 -0
  38. package/lib/vault/interfaces/secret/create-secret.interface.d.ts +11 -0
  39. package/lib/vault/interfaces/secret/create-secret.interface.js +2 -0
  40. package/lib/vault/interfaces/secret/delete-secret.interface.d.ts +3 -0
  41. package/lib/vault/interfaces/secret/delete-secret.interface.js +2 -0
  42. package/lib/vault/interfaces/secret/list-secret-versions.interface.d.ts +8 -0
  43. package/lib/vault/interfaces/secret/list-secret-versions.interface.js +2 -0
  44. package/lib/vault/interfaces/secret/list-secrets.interface.d.ts +5 -0
  45. package/lib/vault/interfaces/secret/list-secrets.interface.js +2 -0
  46. package/lib/vault/interfaces/secret/read-secret.interface.d.ts +19 -0
  47. package/lib/vault/interfaces/secret/read-secret.interface.js +2 -0
  48. package/lib/vault/interfaces/secret/update-secret.interface.d.ts +9 -0
  49. package/lib/vault/interfaces/secret/update-secret.interface.js +2 -0
  50. package/lib/vault/interfaces/secret.interface.d.ts +32 -0
  51. package/lib/vault/interfaces/secret.interface.js +2 -0
  52. package/lib/vault/serializers/vault-key.serializer.d.ts +5 -0
  53. package/lib/vault/serializers/vault-key.serializer.js +17 -0
  54. package/lib/vault/serializers/vault-secret.serializer.d.ts +8 -0
  55. package/lib/vault/serializers/vault-secret.serializer.js +55 -0
  56. package/lib/vault/vault-live-test.spec.d.ts +1 -0
  57. package/lib/vault/vault-live-test.spec.js +245 -0
  58. package/lib/vault/vault.d.ts +19 -0
  59. package/lib/vault/vault.js +97 -0
  60. package/lib/vault/vault.spec.d.ts +1 -0
  61. package/lib/vault/vault.spec.js +247 -0
  62. package/lib/workos.d.ts +2 -0
  63. package/lib/workos.js +7 -1
  64. package/package.json +2 -1
@@ -0,0 +1,247 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const jest_fetch_mock_1 = __importDefault(require("jest-fetch-mock"));
16
+ const test_utils_1 = require("../common/utils/test-utils");
17
+ const workos_1 = require("../workos");
18
+ const conflict_exception_1 = require("../common/exceptions/conflict.exception");
19
+ const workos = new workos_1.WorkOS('sk_test_Sz3IQjepeSWaI4cMS4ms4sMuU');
20
+ describe('Vault', () => {
21
+ beforeEach(() => jest_fetch_mock_1.default.resetMocks());
22
+ describe('createSecret', () => {
23
+ it('creates secret', () => __awaiter(void 0, void 0, void 0, function* () {
24
+ const secretName = 'charger';
25
+ (0, test_utils_1.fetchOnce)({
26
+ id: 's1',
27
+ context: {
28
+ type: 'spore',
29
+ },
30
+ environment_id: 'xxx',
31
+ key_id: 'k1',
32
+ updated_at: '2029-03-17T04:37:46.748303Z',
33
+ updated_by: {
34
+ id: 'key_xxx',
35
+ name: 'Local Test Key',
36
+ },
37
+ version_id: 'v1',
38
+ });
39
+ const resource = yield workos.vault.createSecret({
40
+ name: secretName,
41
+ context: { type: 'spore' },
42
+ value: 'Full speed ahead',
43
+ });
44
+ expect((0, test_utils_1.fetchURL)()).toContain(`/vault/v1/kv`);
45
+ expect((0, test_utils_1.fetchMethod)()).toBe('POST');
46
+ expect(resource).toStrictEqual({
47
+ id: 's1',
48
+ context: {
49
+ type: 'spore',
50
+ },
51
+ environmentId: 'xxx',
52
+ keyId: 'k1',
53
+ updatedAt: new Date(Date.parse('2029-03-17T04:37:46.748303Z')),
54
+ updatedBy: {
55
+ id: 'key_xxx',
56
+ name: 'Local Test Key',
57
+ },
58
+ versionId: 'v1',
59
+ });
60
+ }));
61
+ it('throws an error if secret exists', () => __awaiter(void 0, void 0, void 0, function* () {
62
+ const secretName = 'charger';
63
+ (0, test_utils_1.fetchOnce)({
64
+ error: 'Item already exists',
65
+ }, { status: 409 });
66
+ yield expect(workos.vault.createSecret({
67
+ name: secretName,
68
+ context: { type: 'spore' },
69
+ value: 'Full speed ahead',
70
+ })).rejects.toThrow(conflict_exception_1.ConflictException);
71
+ expect((0, test_utils_1.fetchURL)()).toContain(`/vault/v1/kv`);
72
+ expect((0, test_utils_1.fetchMethod)()).toBe('POST');
73
+ }));
74
+ });
75
+ describe('readSecret', () => {
76
+ it('reads a secret by id', () => __awaiter(void 0, void 0, void 0, function* () {
77
+ const secretName = 'lima';
78
+ const secretId = 'secret1';
79
+ (0, test_utils_1.fetchOnce)({
80
+ id: secretId,
81
+ metadata: {
82
+ id: secretId,
83
+ context: {
84
+ emporer: 'groove',
85
+ },
86
+ environment_id: 'environment_d',
87
+ key_id: 'key1',
88
+ updated_at: '2025-03-11T02:18:54.250931Z',
89
+ updated_by: {
90
+ id: 'key_xxx',
91
+ name: 'Local Test Key',
92
+ },
93
+ version_id: 'version1',
94
+ },
95
+ name: secretName,
96
+ value: 'Pull the lever Gronk',
97
+ });
98
+ const resource = yield workos.vault.readSecret({
99
+ id: secretId,
100
+ });
101
+ expect((0, test_utils_1.fetchURL)()).toContain(`/vault/v1/kv/${secretId}`);
102
+ expect((0, test_utils_1.fetchMethod)()).toBe('GET');
103
+ expect(resource).toStrictEqual({
104
+ id: secretId,
105
+ metadata: {
106
+ id: secretId,
107
+ context: {
108
+ emporer: 'groove',
109
+ },
110
+ environmentId: 'environment_d',
111
+ keyId: 'key1',
112
+ updatedAt: new Date(Date.parse('2025-03-11T02:18:54.250931Z')),
113
+ updatedBy: {
114
+ id: 'key_xxx',
115
+ name: 'Local Test Key',
116
+ },
117
+ versionId: 'version1',
118
+ },
119
+ name: secretName,
120
+ value: 'Pull the lever Gronk',
121
+ });
122
+ }));
123
+ });
124
+ describe('listSecrets', () => {
125
+ it('gets a paginated list of secrets', () => __awaiter(void 0, void 0, void 0, function* () {
126
+ (0, test_utils_1.fetchOnce)({
127
+ data: [
128
+ {
129
+ id: 's1',
130
+ name: 'charger',
131
+ updated_at: '2029-03-17T04:37:46.748303Z',
132
+ },
133
+ ],
134
+ list_metadata: {
135
+ after: null,
136
+ before: 'charger',
137
+ },
138
+ });
139
+ const resource = yield workos.vault.listSecrets();
140
+ expect((0, test_utils_1.fetchURL)()).toContain(`/vault/v1/kv`);
141
+ expect((0, test_utils_1.fetchMethod)()).toBe('GET');
142
+ expect(resource).toStrictEqual({
143
+ object: 'list',
144
+ data: [
145
+ {
146
+ id: 's1',
147
+ name: 'charger',
148
+ updatedAt: new Date(Date.parse('2029-03-17T04:37:46.748303Z')),
149
+ },
150
+ ],
151
+ listMetadata: {
152
+ after: undefined,
153
+ before: 'charger',
154
+ },
155
+ });
156
+ }));
157
+ });
158
+ describe('listSecretVersions', () => {
159
+ it('gets a paginated list of secret versions', () => __awaiter(void 0, void 0, void 0, function* () {
160
+ (0, test_utils_1.fetchOnce)({
161
+ data: [
162
+ {
163
+ id: 'raZUqoHteQkLihH6AG5bj6sYAqMcJS76',
164
+ size: 270,
165
+ etag: '"5147c963627323edcb15910ceea573bf"',
166
+ created_at: '2029-03-17T15:51:57.000000Z',
167
+ current_version: true,
168
+ },
169
+ ],
170
+ list_metadata: {
171
+ after: null,
172
+ before: 'raZUqoHteQkLihH6AG5bj6sYAqMcJS76',
173
+ },
174
+ });
175
+ const resource = yield workos.vault.listSecretVersions({ id: 'secret1' });
176
+ expect((0, test_utils_1.fetchURL)()).toContain(`/vault/v1/kv/secret1/versions`);
177
+ expect((0, test_utils_1.fetchMethod)()).toBe('GET');
178
+ expect(resource).toStrictEqual([
179
+ {
180
+ createdAt: new Date(Date.parse('2029-03-17T15:51:57.000000Z')),
181
+ currentVersion: true,
182
+ id: 'raZUqoHteQkLihH6AG5bj6sYAqMcJS76',
183
+ },
184
+ ]);
185
+ }));
186
+ });
187
+ describe('updateSecret', () => {
188
+ it('updates secret', () => __awaiter(void 0, void 0, void 0, function* () {
189
+ const secretId = 's1';
190
+ (0, test_utils_1.fetchOnce)({
191
+ id: secretId,
192
+ name: 'charger',
193
+ metadata: {
194
+ id: secretId,
195
+ context: {
196
+ type: 'spore',
197
+ },
198
+ environment_id: 'xxx',
199
+ key_id: 'k1',
200
+ updated_at: '2029-03-17T04:37:46.748303Z',
201
+ updated_by: {
202
+ id: 'key_xxx',
203
+ name: 'Local Test Key',
204
+ },
205
+ version_id: 'v1',
206
+ },
207
+ });
208
+ const resource = yield workos.vault.updateSecret({
209
+ id: secretId,
210
+ value: 'Full speed ahead',
211
+ });
212
+ expect((0, test_utils_1.fetchURL)()).toContain(`/vault/v1/kv/${secretId}`);
213
+ expect((0, test_utils_1.fetchMethod)()).toBe('PUT');
214
+ expect(resource).toStrictEqual({
215
+ id: secretId,
216
+ name: 'charger',
217
+ metadata: {
218
+ id: secretId,
219
+ context: {
220
+ type: 'spore',
221
+ },
222
+ environmentId: 'xxx',
223
+ keyId: 'k1',
224
+ updatedAt: new Date(Date.parse('2029-03-17T04:37:46.748303Z')),
225
+ updatedBy: {
226
+ id: 'key_xxx',
227
+ name: 'Local Test Key',
228
+ },
229
+ versionId: 'v1',
230
+ },
231
+ value: undefined,
232
+ });
233
+ }));
234
+ it('throws an error if secret version check fails', () => __awaiter(void 0, void 0, void 0, function* () {
235
+ (0, test_utils_1.fetchOnce)({
236
+ error: 'Item already exists',
237
+ }, { status: 409 });
238
+ yield expect(workos.vault.updateSecret({
239
+ id: 'secret1',
240
+ value: 'Full speed ahead',
241
+ versionCheck: 'notaversion',
242
+ })).rejects.toThrow(conflict_exception_1.ConflictException);
243
+ expect((0, test_utils_1.fetchURL)()).toContain(`/vault/v1/kv/secret1`);
244
+ expect((0, test_utils_1.fetchMethod)()).toBe('PUT');
245
+ }));
246
+ });
247
+ });
package/lib/workos.d.ts CHANGED
@@ -15,6 +15,7 @@ import { HttpClient } from './common/net/http-client';
15
15
  import { IronSessionProvider } from './common/iron-session/iron-session-provider';
16
16
  import { Widgets } from './widgets/widgets';
17
17
  import { Actions } from './actions/actions';
18
+ import { Vault } from './vault/vault';
18
19
  export declare class WorkOS {
19
20
  readonly key?: string | undefined;
20
21
  readonly options: WorkOSOptions;
@@ -35,6 +36,7 @@ export declare class WorkOS {
35
36
  readonly userManagement: UserManagement;
36
37
  readonly fga: FGA;
37
38
  readonly widgets: Widgets;
39
+ readonly vault: Vault;
38
40
  constructor(key?: string | undefined, options?: WorkOSOptions);
39
41
  createWebhookClient(): Webhooks;
40
42
  createActionsClient(): Actions;
package/lib/workos.js CHANGED
@@ -29,7 +29,9 @@ 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.41.0';
32
+ const vault_1 = require("./vault/vault");
33
+ const conflict_exception_1 = require("./common/exceptions/conflict.exception");
34
+ const VERSION = '7.43.0';
33
35
  const DEFAULT_HOSTNAME = 'api.workos.com';
34
36
  const HEADER_AUTHORIZATION = 'Authorization';
35
37
  const HEADER_IDEMPOTENCY_KEY = 'Idempotency-Key';
@@ -49,6 +51,7 @@ class WorkOS {
49
51
  this.events = new events_1.Events(this);
50
52
  this.fga = new fga_1.FGA(this);
51
53
  this.widgets = new widgets_1.Widgets(this);
54
+ this.vault = new vault_1.Vault(this);
52
55
  if (!key) {
53
56
  // process might be undefined in some environments
54
57
  this.key =
@@ -194,6 +197,9 @@ class WorkOS {
194
197
  case 401: {
195
198
  throw new exceptions_1.UnauthorizedException(requestID);
196
199
  }
200
+ case 409: {
201
+ throw new conflict_exception_1.ConflictException({ requestID, message, error });
202
+ }
197
203
  case 422: {
198
204
  throw new exceptions_1.UnprocessableEntityException({
199
205
  code,
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "7.41.0",
2
+ "version": "7.43.0",
3
3
  "name": "@workos-inc/node",
4
4
  "author": "WorkOS",
5
5
  "description": "A Node wrapper for the WorkOS API",
@@ -40,6 +40,7 @@
40
40
  "dependencies": {
41
41
  "iron-session": "~6.3.1",
42
42
  "jose": "~5.6.3",
43
+ "leb": "^1.0.0",
43
44
  "pluralize": "8.0.0"
44
45
  },
45
46
  "devDependencies": {