@osdk/faux 0.5.0-beta.3 → 0.5.0-rc.5

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 (94) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/build/browser/FauxFoundry/FauxAdmin.js +67 -0
  3. package/build/browser/FauxFoundry/FauxAdmin.js.map +1 -0
  4. package/build/browser/FauxFoundry/FauxAdmin.test.js +248 -0
  5. package/build/browser/FauxFoundry/FauxAdmin.test.js.map +1 -0
  6. package/build/browser/FauxFoundry/FauxDataStore.js +32 -49
  7. package/build/browser/FauxFoundry/FauxDataStore.js.map +1 -1
  8. package/build/browser/FauxFoundry/FauxFoundry.js +5 -0
  9. package/build/browser/FauxFoundry/FauxFoundry.js.map +1 -1
  10. package/build/browser/FauxFoundry/filterObjects.js +181 -2
  11. package/build/browser/FauxFoundry/filterObjects.js.map +1 -1
  12. package/build/browser/FauxFoundry/filterObjects.test.js +216 -0
  13. package/build/browser/FauxFoundry/filterObjects.test.js.map +1 -0
  14. package/build/browser/errors.js +51 -2
  15. package/build/browser/errors.js.map +1 -1
  16. package/build/browser/filterObjects.js +1 -2
  17. package/build/browser/filterObjects.js.map +1 -1
  18. package/build/browser/handlers/createAdminHandlers.js +52 -0
  19. package/build/browser/handlers/createAdminHandlers.js.map +1 -0
  20. package/build/browser/handlers/createFauxFoundryHandlers.js +2 -1
  21. package/build/browser/handlers/createFauxFoundryHandlers.js.map +1 -1
  22. package/build/browser/handlers/createObjectSetHandlers.js +2 -4
  23. package/build/browser/handlers/createObjectSetHandlers.js.map +1 -1
  24. package/build/browser/handlers/util/pageThroughResponseSearchParams.js +2 -3
  25. package/build/browser/handlers/util/pageThroughResponseSearchParams.js.map +1 -1
  26. package/build/browser/index.js +1 -0
  27. package/build/browser/index.js.map +1 -1
  28. package/build/browser/mock/Admin/Users.js +22 -0
  29. package/build/browser/mock/Admin/Users.js.map +1 -0
  30. package/build/browser/mock/Admin/index.js +18 -0
  31. package/build/browser/mock/Admin/index.js.map +1 -0
  32. package/build/browser/mock/index.js +1 -0
  33. package/build/browser/mock/index.js.map +1 -1
  34. package/build/cjs/index.cjs +473 -162
  35. package/build/cjs/index.cjs.map +1 -1
  36. package/build/cjs/index.d.cts +33 -7
  37. package/build/esm/FauxFoundry/FauxAdmin.js +67 -0
  38. package/build/esm/FauxFoundry/FauxAdmin.js.map +1 -0
  39. package/build/esm/FauxFoundry/FauxAdmin.test.js +248 -0
  40. package/build/esm/FauxFoundry/FauxAdmin.test.js.map +1 -0
  41. package/build/esm/FauxFoundry/FauxDataStore.js +32 -49
  42. package/build/esm/FauxFoundry/FauxDataStore.js.map +1 -1
  43. package/build/esm/FauxFoundry/FauxFoundry.js +5 -0
  44. package/build/esm/FauxFoundry/FauxFoundry.js.map +1 -1
  45. package/build/esm/FauxFoundry/filterObjects.js +181 -2
  46. package/build/esm/FauxFoundry/filterObjects.js.map +1 -1
  47. package/build/esm/FauxFoundry/filterObjects.test.js +216 -0
  48. package/build/esm/FauxFoundry/filterObjects.test.js.map +1 -0
  49. package/build/esm/errors.js +51 -2
  50. package/build/esm/errors.js.map +1 -1
  51. package/build/esm/filterObjects.js +1 -2
  52. package/build/esm/filterObjects.js.map +1 -1
  53. package/build/esm/handlers/createAdminHandlers.js +52 -0
  54. package/build/esm/handlers/createAdminHandlers.js.map +1 -0
  55. package/build/esm/handlers/createFauxFoundryHandlers.js +2 -1
  56. package/build/esm/handlers/createFauxFoundryHandlers.js.map +1 -1
  57. package/build/esm/handlers/createObjectSetHandlers.js +2 -4
  58. package/build/esm/handlers/createObjectSetHandlers.js.map +1 -1
  59. package/build/esm/handlers/util/pageThroughResponseSearchParams.js +2 -3
  60. package/build/esm/handlers/util/pageThroughResponseSearchParams.js.map +1 -1
  61. package/build/esm/index.js +1 -0
  62. package/build/esm/index.js.map +1 -1
  63. package/build/esm/mock/Admin/Users.js +22 -0
  64. package/build/esm/mock/Admin/Users.js.map +1 -0
  65. package/build/esm/mock/Admin/index.js +18 -0
  66. package/build/esm/mock/Admin/index.js.map +1 -0
  67. package/build/esm/mock/index.js +1 -0
  68. package/build/esm/mock/index.js.map +1 -1
  69. package/build/types/FauxFoundry/FauxAdmin.d.ts +14 -0
  70. package/build/types/FauxFoundry/FauxAdmin.d.ts.map +1 -0
  71. package/build/types/FauxFoundry/FauxAdmin.test.d.ts +1 -0
  72. package/build/types/FauxFoundry/FauxAdmin.test.d.ts.map +1 -0
  73. package/build/types/FauxFoundry/FauxDataStore.d.ts +1 -2
  74. package/build/types/FauxFoundry/FauxDataStore.d.ts.map +1 -1
  75. package/build/types/FauxFoundry/FauxFoundry.d.ts +3 -0
  76. package/build/types/FauxFoundry/FauxFoundry.d.ts.map +1 -1
  77. package/build/types/FauxFoundry/filterObjects.test.d.ts +1 -0
  78. package/build/types/FauxFoundry/filterObjects.test.d.ts.map +1 -0
  79. package/build/types/errors.d.ts +8 -0
  80. package/build/types/errors.d.ts.map +1 -1
  81. package/build/types/handlers/createAdminHandlers.d.ts +2 -0
  82. package/build/types/handlers/createAdminHandlers.d.ts.map +1 -0
  83. package/build/types/handlers/createFauxFoundryHandlers.d.ts.map +1 -1
  84. package/build/types/handlers/util/pageThroughResponseSearchParams.d.ts +1 -3
  85. package/build/types/handlers/util/pageThroughResponseSearchParams.d.ts.map +1 -1
  86. package/build/types/index.d.ts +1 -0
  87. package/build/types/index.d.ts.map +1 -1
  88. package/build/types/mock/Admin/Users.d.ts +5 -0
  89. package/build/types/mock/Admin/Users.d.ts.map +1 -0
  90. package/build/types/mock/Admin/index.d.ts +1 -0
  91. package/build/types/mock/Admin/index.d.ts.map +1 -0
  92. package/build/types/mock/index.d.ts +1 -0
  93. package/build/types/mock/index.d.ts.map +1 -1
  94. package/package.json +9 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @osdk/shared.test
2
2
 
3
+ ## 0.5.0-rc.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 31cd835: Revert beta changes
8
+ - 0dbd0d0: add useOsdkObjects rid querying support
9
+ - Updated dependencies [31cd835]
10
+ - @osdk/generator-converters@2.7.0-rc.15
11
+ - @osdk/api@2.7.0-rc.15
12
+
13
+ ## 0.5.0-beta.4
14
+
15
+ ### Minor Changes
16
+
17
+ - ab1957f: Added FauxAdmin support
18
+ - 862910e: Adds support for wider variety of query filters
19
+
20
+ ### Patch Changes
21
+
22
+ - Updated dependencies [fb83808]
23
+ - @osdk/api@2.7.0-beta.13
24
+ - @osdk/generator-converters@2.7.0-beta.13
25
+
3
26
  ## 0.5.0-beta.3
4
27
 
5
28
  ### Minor Changes
@@ -24,6 +47,59 @@
24
47
  - @osdk/api@2.7.0-beta.2
25
48
  - @osdk/generator-converters@2.7.0-beta.2
26
49
 
50
+ ## 0.4.0
51
+
52
+ ### Patch Changes
53
+
54
+ - 150da1a: Simulated release
55
+
56
+ - 98cdfee: Added more object type validation
57
+
58
+ - b313525: bump osdk
59
+
60
+ - 3fbb596: Pipe through transactionId to endpoints that load data via object sets
61
+
62
+ - a1ffb20: Use new ephemeral media upload endpoint.
63
+
64
+ - af4f3bf: Remove the following features for RC:
65
+ - Property formatting
66
+ - Branching
67
+ - Constant RDPs
68
+
69
+ - Updated dependencies [322c5bc]
70
+
71
+ - Updated dependencies [322c5bc]
72
+
73
+ - Updated dependencies [b313525]
74
+
75
+ - Updated dependencies [3fbb596]
76
+
77
+ - Updated dependencies [f7ae38a]
78
+
79
+ - Updated dependencies [486ef7e]
80
+
81
+ - Updated dependencies [ea077c6]
82
+
83
+ - Updated dependencies [3d7dc0a]
84
+
85
+ - Updated dependencies [2556c64]
86
+
87
+ - Updated dependencies [5a9cd8f]
88
+
89
+ - Updated dependencies [b307201]
90
+
91
+ - Updated dependencies [e7bf02a]
92
+
93
+ - Updated dependencies [a1ffb20]
94
+
95
+ - Updated dependencies [b959085]
96
+
97
+ - Updated dependencies [af4f3bf]
98
+
99
+ - Updated dependencies [e62c692]
100
+ - @osdk/api@2.6.0
101
+ - @osdk/generator-converters@2.6.0
102
+
27
103
  ## 0.4.0-beta.6
28
104
 
29
105
  ### Minor Changes
@@ -0,0 +1,67 @@
1
+ /*
2
+ * Copyright 2026 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { CurrentUserPermissionDeniedError, GetInvalidPageTokenError, GetUserActiveStatusError, GetUserDeletedStatusError, GetUserNotFoundError } from "../errors.js";
18
+ import { OpenApiCallError } from "../handlers/util/handleOpenApiCall.js";
19
+ export class FauxAdmin {
20
+ #users = [];
21
+ #currentUserId;
22
+ registerUser(user) {
23
+ if (this.#users.some(({
24
+ id
25
+ }) => id === user.id)) {
26
+ throw new Error(`Failed to register new user. A user with ID ${user.id} already exists.`);
27
+ }
28
+ this.#users.push(user);
29
+ }
30
+ setCurrentUser(currentUserId) {
31
+ // Verify this user exists and is active
32
+ this.getUser(currentUserId, "ACTIVE");
33
+ this.#currentUserId = currentUserId;
34
+ }
35
+ getCurrentUser() {
36
+ if (this.#currentUserId == null) {
37
+ throw new OpenApiCallError(403, CurrentUserPermissionDeniedError);
38
+ }
39
+ const user = this.getUser(this.#currentUserId, "ACTIVE");
40
+ if (user == null) {
41
+ throw new OpenApiCallError(403, CurrentUserPermissionDeniedError);
42
+ }
43
+ return user;
44
+ }
45
+ getUser(userId, status) {
46
+ const user = this.#users.find(user => user.id === userId);
47
+ if (user == null) {
48
+ throw new OpenApiCallError(404, GetUserNotFoundError(userId));
49
+ }
50
+ if (user.status !== status) {
51
+ throw new OpenApiCallError(400, status === "DELETED" ? GetUserActiveStatusError(userId) : GetUserDeletedStatusError(userId));
52
+ }
53
+ return user;
54
+ }
55
+ listUsers(pageSize = this.#users.length, pageToken, status) {
56
+ const filteredUsers = status != null ? this.#users.filter(user => user.status === status) : this.#users;
57
+ const startIndex = pageToken != null ? filteredUsers.findIndex(user => user.id === pageToken) : 0;
58
+ if (pageToken != null && startIndex === -1) {
59
+ throw new OpenApiCallError(400, GetInvalidPageTokenError(pageToken));
60
+ }
61
+ return {
62
+ users: filteredUsers.slice(startIndex, startIndex + pageSize),
63
+ nextPageToken: filteredUsers[startIndex + pageSize]?.id
64
+ };
65
+ }
66
+ }
67
+ //# sourceMappingURL=FauxAdmin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FauxAdmin.js","names":["CurrentUserPermissionDeniedError","GetInvalidPageTokenError","GetUserActiveStatusError","GetUserDeletedStatusError","GetUserNotFoundError","OpenApiCallError","FauxAdmin","users","currentUserId","registerUser","user","some","id","Error","push","setCurrentUser","getUser","getCurrentUser","userId","status","find","listUsers","pageSize","length","pageToken","filteredUsers","filter","startIndex","findIndex","slice","nextPageToken"],"sources":["FauxAdmin.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { User } from \"@osdk/foundry.admin\";\nimport {\n CurrentUserPermissionDeniedError,\n GetInvalidPageTokenError,\n GetUserActiveStatusError,\n GetUserDeletedStatusError,\n GetUserNotFoundError,\n} from \"../errors.js\";\nimport { OpenApiCallError } from \"../handlers/util/handleOpenApiCall.js\";\n\ntype UserStatus = \"ACTIVE\" | \"DELETED\";\n\nexport class FauxAdmin {\n #users: User[] = [];\n #currentUserId: string | undefined;\n\n registerUser(user: User): void {\n if (this.#users.some(({ id }) => id === user.id)) {\n throw new Error(\n `Failed to register new user. A user with ID ${user.id} already exists.`,\n );\n }\n\n this.#users.push(user);\n }\n\n setCurrentUser(currentUserId: string): void {\n // Verify this user exists and is active\n this.getUser(currentUserId, \"ACTIVE\");\n this.#currentUserId = currentUserId;\n }\n\n getCurrentUser(): User {\n if (this.#currentUserId == null) {\n throw new OpenApiCallError(\n 403,\n CurrentUserPermissionDeniedError,\n );\n }\n\n const user = this.getUser(this.#currentUserId, \"ACTIVE\");\n\n if (user == null) {\n throw new OpenApiCallError(\n 403,\n CurrentUserPermissionDeniedError,\n );\n }\n\n return user;\n }\n\n getUser(userId: string, status: UserStatus): User {\n const user = this.#users.find(user => user.id === userId);\n\n if (user == null) {\n throw new OpenApiCallError(404, GetUserNotFoundError(userId));\n }\n\n if (user.status !== status) {\n throw new OpenApiCallError(\n 400,\n status === \"DELETED\"\n ? GetUserActiveStatusError(userId)\n : GetUserDeletedStatusError(userId),\n );\n }\n\n return user;\n }\n\n listUsers(\n pageSize: number | undefined = this.#users.length,\n pageToken: string | undefined,\n status: UserStatus | undefined,\n ): { users: User[]; nextPageToken: string } {\n const filteredUsers = status != null\n ? this.#users.filter(user => user.status === status)\n : this.#users;\n\n const startIndex = pageToken != null\n ? filteredUsers.findIndex(user => user.id === pageToken)\n : 0;\n\n if (pageToken != null && startIndex === -1) {\n throw new OpenApiCallError(\n 400,\n GetInvalidPageTokenError(pageToken),\n );\n }\n\n return {\n users: filteredUsers.slice(startIndex, startIndex + pageSize),\n nextPageToken: filteredUsers[startIndex + pageSize]?.id,\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,248 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { beforeEach, describe, expect, it } from "vitest";
18
+ import { OpenApiCallError } from "../handlers/util/handleOpenApiCall.js";
19
+ import { FauxAdmin } from "./FauxAdmin.js";
20
+ function createUser(overrides = {}) {
21
+ return {
22
+ id: "user-1",
23
+ username: "test-user",
24
+ realm: "test-realm",
25
+ status: "ACTIVE",
26
+ attributes: {},
27
+ ...overrides
28
+ };
29
+ }
30
+ describe(FauxAdmin, () => {
31
+ let fauxAdmin;
32
+ beforeEach(() => {
33
+ fauxAdmin = new FauxAdmin();
34
+ });
35
+ describe("registerUser", () => {
36
+ it("should register a new user", () => {
37
+ const user = createUser();
38
+ fauxAdmin.registerUser(user);
39
+ expect(fauxAdmin.getUser(user.id, "ACTIVE")).toEqual(user);
40
+ });
41
+ it("should throw an error when registering a user with duplicate id", () => {
42
+ const user = createUser();
43
+ fauxAdmin.registerUser(user);
44
+ expect(() => fauxAdmin.registerUser(user)).toThrow(`Failed to register new user. A user with ID ${user.id} already exists.`);
45
+ });
46
+ it("should allow registering multiple users with different ids", () => {
47
+ const user1 = createUser({
48
+ id: "user-1"
49
+ });
50
+ const user2 = createUser({
51
+ id: "user-2",
52
+ username: "test-user2"
53
+ });
54
+ fauxAdmin.registerUser(user1);
55
+ fauxAdmin.registerUser(user2);
56
+ expect(fauxAdmin.getUser("user-1", "ACTIVE")).toEqual(user1);
57
+ expect(fauxAdmin.getUser("user-2", "ACTIVE")).toEqual(user2);
58
+ });
59
+ });
60
+ describe("setCurrentUser", () => {
61
+ it("should set the current user when user exists and is active", () => {
62
+ const user = createUser();
63
+ fauxAdmin.registerUser(user);
64
+ fauxAdmin.setCurrentUser(user.id);
65
+ expect(fauxAdmin.getCurrentUser()).toEqual(user);
66
+ });
67
+ it("should throw when setting current user to non-existent user", () => {
68
+ expect(() => fauxAdmin.setCurrentUser("non-existent")).toThrow(OpenApiCallError);
69
+ });
70
+ it("should throw when setting current user to deleted user", () => {
71
+ const user = createUser({
72
+ status: "DELETED"
73
+ });
74
+ fauxAdmin.registerUser(user);
75
+ expect(() => fauxAdmin.setCurrentUser(user.id)).toThrow(OpenApiCallError);
76
+ });
77
+ });
78
+ describe("getCurrentUser", () => {
79
+ it("should return the current user when set", () => {
80
+ const user = createUser();
81
+ fauxAdmin.registerUser(user);
82
+ fauxAdmin.setCurrentUser(user.id);
83
+ expect(fauxAdmin.getCurrentUser()).toEqual(user);
84
+ });
85
+ it("should throw when no current user is set", () => {
86
+ expect(() => fauxAdmin.getCurrentUser()).toThrow();
87
+ });
88
+ });
89
+ describe("getUser", () => {
90
+ it("should return active user when requesting active status", () => {
91
+ const user = createUser({
92
+ status: "ACTIVE"
93
+ });
94
+ fauxAdmin.registerUser(user);
95
+ expect(fauxAdmin.getUser(user.id, "ACTIVE")).toEqual(user);
96
+ });
97
+ it("should return deleted user when requesting deleted status", () => {
98
+ const user = createUser({
99
+ status: "DELETED"
100
+ });
101
+ fauxAdmin.registerUser(user);
102
+ expect(fauxAdmin.getUser(user.id, "DELETED")).toEqual(user);
103
+ });
104
+ it("should throw 404 when user does not exist", () => {
105
+ try {
106
+ fauxAdmin.getUser("non-existent", "ACTIVE");
107
+ expect.fail("Expected error to be thrown");
108
+ } catch (e) {
109
+ expect(e).toBeInstanceOf(OpenApiCallError);
110
+ expect(e.status).toBe(404);
111
+ expect(e.json.errorName).toBe("UserNotFound");
112
+ }
113
+ });
114
+ it("should throw 400 when requesting active user but user is deleted", () => {
115
+ const user = createUser({
116
+ status: "DELETED"
117
+ });
118
+ fauxAdmin.registerUser(user);
119
+ try {
120
+ fauxAdmin.getUser(user.id, "ACTIVE");
121
+ expect.fail("Expected error to be thrown");
122
+ } catch (e) {
123
+ expect(e).toBeInstanceOf(OpenApiCallError);
124
+ expect(e.status).toBe(400);
125
+ expect(e.json.errorName).toBe("UserDeleted");
126
+ }
127
+ });
128
+ it("should throw 400 when requesting deleted user but user is active", () => {
129
+ const user = createUser({
130
+ status: "ACTIVE"
131
+ });
132
+ fauxAdmin.registerUser(user);
133
+ try {
134
+ fauxAdmin.getUser(user.id, "DELETED");
135
+ expect.fail("Expected error to be thrown");
136
+ } catch (e) {
137
+ expect(e).toBeInstanceOf(OpenApiCallError);
138
+ expect(e.status).toBe(400);
139
+ expect(e.json.errorName).toBe("UserIsActive");
140
+ }
141
+ });
142
+ });
143
+ describe("listUsers", () => {
144
+ it("should return empty list when no users", () => {
145
+ const result = fauxAdmin.listUsers(10, undefined, "ACTIVE");
146
+ expect(result.users).toEqual([]);
147
+ expect(result.nextPageToken).toBeUndefined();
148
+ });
149
+ it("should return only active users when status is ACTIVE", () => {
150
+ const activeUser = createUser({
151
+ id: "active-1",
152
+ status: "ACTIVE"
153
+ });
154
+ const deletedUser = createUser({
155
+ id: "deleted-1",
156
+ status: "DELETED"
157
+ });
158
+ fauxAdmin.registerUser(activeUser);
159
+ fauxAdmin.registerUser(deletedUser);
160
+ const result = fauxAdmin.listUsers(10, undefined, "ACTIVE");
161
+ expect(result.users).toEqual([activeUser]);
162
+ });
163
+ it("should return only deleted users when status is DELETED", () => {
164
+ const activeUser = createUser({
165
+ id: "active-1",
166
+ status: "ACTIVE"
167
+ });
168
+ const deletedUser = createUser({
169
+ id: "deleted-1",
170
+ status: "DELETED"
171
+ });
172
+ fauxAdmin.registerUser(activeUser);
173
+ fauxAdmin.registerUser(deletedUser);
174
+ const result = fauxAdmin.listUsers(10, undefined, "DELETED");
175
+ expect(result.users).toEqual([deletedUser]);
176
+ });
177
+ it("should paginate results correctly", () => {
178
+ const users = [createUser({
179
+ id: "user-1",
180
+ status: "ACTIVE"
181
+ }), createUser({
182
+ id: "user-2",
183
+ status: "ACTIVE"
184
+ }), createUser({
185
+ id: "user-3",
186
+ status: "ACTIVE"
187
+ })];
188
+ users.forEach(user => fauxAdmin.registerUser(user));
189
+ const page1 = fauxAdmin.listUsers(2, undefined, "ACTIVE");
190
+ expect(page1.users).toHaveLength(2);
191
+ expect(page1.users).toEqual([users[0], users[1]]);
192
+ expect(page1.nextPageToken).toBe("user-3");
193
+ const page2 = fauxAdmin.listUsers(2, page1.nextPageToken, "ACTIVE");
194
+ expect(page2.users).toHaveLength(1);
195
+ expect(page2.users).toEqual([users[2]]);
196
+ expect(page2.nextPageToken).toBeUndefined();
197
+ });
198
+ it("should throw on invalid page token", () => {
199
+ const user = createUser();
200
+ fauxAdmin.registerUser(user);
201
+ try {
202
+ fauxAdmin.listUsers(10, "invalid-token", "ACTIVE");
203
+ expect.fail("Expected error to be thrown");
204
+ } catch (e) {
205
+ expect(e).toBeInstanceOf(OpenApiCallError);
206
+ expect(e.status).toBe(400);
207
+ expect(e.json.errorName).toBe("InvalidPageToken");
208
+ }
209
+ });
210
+ it("should respect pageSize", () => {
211
+ const users = [createUser({
212
+ id: "user-1",
213
+ status: "ACTIVE"
214
+ }), createUser({
215
+ id: "user-2",
216
+ status: "ACTIVE"
217
+ }), createUser({
218
+ id: "user-3",
219
+ status: "ACTIVE"
220
+ })];
221
+ users.forEach(user => fauxAdmin.registerUser(user));
222
+ const result = fauxAdmin.listUsers(1, undefined, "ACTIVE");
223
+ expect(result.users).toHaveLength(1);
224
+ expect(result.users).toEqual([users[0]]);
225
+ expect(result.nextPageToken).toBe("user-2");
226
+ });
227
+ it("should handle page token pointing to middle of list", () => {
228
+ const users = [createUser({
229
+ id: "user-1",
230
+ status: "ACTIVE"
231
+ }), createUser({
232
+ id: "user-2",
233
+ status: "ACTIVE"
234
+ }), createUser({
235
+ id: "user-3",
236
+ status: "ACTIVE"
237
+ }), createUser({
238
+ id: "user-4",
239
+ status: "ACTIVE"
240
+ })];
241
+ users.forEach(user => fauxAdmin.registerUser(user));
242
+ const result = fauxAdmin.listUsers(2, "user-2", "ACTIVE");
243
+ expect(result.users).toEqual([users[1], users[2]]);
244
+ expect(result.nextPageToken).toBe("user-4");
245
+ });
246
+ });
247
+ });
248
+ //# sourceMappingURL=FauxAdmin.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FauxAdmin.test.js","names":["beforeEach","describe","expect","it","OpenApiCallError","FauxAdmin","createUser","overrides","id","username","realm","status","attributes","fauxAdmin","user","registerUser","getUser","toEqual","toThrow","user1","user2","setCurrentUser","getCurrentUser","fail","e","toBeInstanceOf","toBe","json","errorName","result","listUsers","undefined","users","nextPageToken","toBeUndefined","activeUser","deletedUser","forEach","page1","toHaveLength","page2"],"sources":["FauxAdmin.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { User } from \"@osdk/foundry.admin\";\nimport { beforeEach, describe, expect, it } from \"vitest\";\nimport { OpenApiCallError } from \"../handlers/util/handleOpenApiCall.js\";\nimport { FauxAdmin } from \"./FauxAdmin.js\";\n\nfunction createUser(overrides: Partial<User> = {}): User {\n return {\n id: \"user-1\",\n username: \"test-user\",\n realm: \"test-realm\",\n status: \"ACTIVE\",\n attributes: {},\n ...overrides,\n };\n}\n\ndescribe(FauxAdmin, () => {\n let fauxAdmin: FauxAdmin;\n\n beforeEach(() => {\n fauxAdmin = new FauxAdmin();\n });\n\n describe(\"registerUser\", () => {\n it(\"should register a new user\", () => {\n const user = createUser();\n\n fauxAdmin.registerUser(user);\n\n expect(fauxAdmin.getUser(user.id, \"ACTIVE\")).toEqual(user);\n });\n\n it(\"should throw an error when registering a user with duplicate id\", () => {\n const user = createUser();\n\n fauxAdmin.registerUser(user);\n\n expect(() => fauxAdmin.registerUser(user)).toThrow(\n `Failed to register new user. A user with ID ${user.id} already exists.`,\n );\n });\n\n it(\"should allow registering multiple users with different ids\", () => {\n const user1 = createUser({ id: \"user-1\" });\n const user2 = createUser({ id: \"user-2\", username: \"test-user2\" });\n\n fauxAdmin.registerUser(user1);\n fauxAdmin.registerUser(user2);\n\n expect(fauxAdmin.getUser(\"user-1\", \"ACTIVE\")).toEqual(user1);\n expect(fauxAdmin.getUser(\"user-2\", \"ACTIVE\")).toEqual(user2);\n });\n });\n\n describe(\"setCurrentUser\", () => {\n it(\"should set the current user when user exists and is active\", () => {\n const user = createUser();\n fauxAdmin.registerUser(user);\n\n fauxAdmin.setCurrentUser(user.id);\n\n expect(fauxAdmin.getCurrentUser()).toEqual(user);\n });\n\n it(\"should throw when setting current user to non-existent user\", () => {\n expect(() => fauxAdmin.setCurrentUser(\"non-existent\")).toThrow(\n OpenApiCallError,\n );\n });\n\n it(\"should throw when setting current user to deleted user\", () => {\n const user = createUser({ status: \"DELETED\" });\n fauxAdmin.registerUser(user);\n\n expect(() => fauxAdmin.setCurrentUser(user.id)).toThrow(OpenApiCallError);\n });\n });\n\n describe(\"getCurrentUser\", () => {\n it(\"should return the current user when set\", () => {\n const user = createUser();\n fauxAdmin.registerUser(user);\n fauxAdmin.setCurrentUser(user.id);\n\n expect(fauxAdmin.getCurrentUser()).toEqual(user);\n });\n\n it(\"should throw when no current user is set\", () => {\n expect(() => fauxAdmin.getCurrentUser()).toThrow();\n });\n });\n\n describe(\"getUser\", () => {\n it(\"should return active user when requesting active status\", () => {\n const user = createUser({ status: \"ACTIVE\" });\n fauxAdmin.registerUser(user);\n\n expect(fauxAdmin.getUser(user.id, \"ACTIVE\")).toEqual(user);\n });\n\n it(\"should return deleted user when requesting deleted status\", () => {\n const user = createUser({ status: \"DELETED\" });\n fauxAdmin.registerUser(user);\n\n expect(fauxAdmin.getUser(user.id, \"DELETED\")).toEqual(user);\n });\n\n it(\"should throw 404 when user does not exist\", () => {\n try {\n fauxAdmin.getUser(\"non-existent\", \"ACTIVE\");\n expect.fail(\"Expected error to be thrown\");\n } catch (e) {\n expect(e).toBeInstanceOf(OpenApiCallError);\n expect((e as OpenApiCallError).status).toBe(404);\n expect((e as OpenApiCallError).json.errorName).toBe(\"UserNotFound\");\n }\n });\n\n it(\"should throw 400 when requesting active user but user is deleted\", () => {\n const user = createUser({ status: \"DELETED\" });\n fauxAdmin.registerUser(user);\n\n try {\n fauxAdmin.getUser(user.id, \"ACTIVE\");\n expect.fail(\"Expected error to be thrown\");\n } catch (e) {\n expect(e).toBeInstanceOf(OpenApiCallError);\n expect((e as OpenApiCallError).status).toBe(400);\n expect((e as OpenApiCallError).json.errorName).toBe(\"UserDeleted\");\n }\n });\n\n it(\"should throw 400 when requesting deleted user but user is active\", () => {\n const user = createUser({ status: \"ACTIVE\" });\n fauxAdmin.registerUser(user);\n\n try {\n fauxAdmin.getUser(user.id, \"DELETED\");\n expect.fail(\"Expected error to be thrown\");\n } catch (e) {\n expect(e).toBeInstanceOf(OpenApiCallError);\n expect((e as OpenApiCallError).status).toBe(400);\n expect((e as OpenApiCallError).json.errorName).toBe(\"UserIsActive\");\n }\n });\n });\n\n describe(\"listUsers\", () => {\n it(\"should return empty list when no users\", () => {\n const result = fauxAdmin.listUsers(10, undefined, \"ACTIVE\");\n\n expect(result.users).toEqual([]);\n expect(result.nextPageToken).toBeUndefined();\n });\n\n it(\"should return only active users when status is ACTIVE\", () => {\n const activeUser = createUser({ id: \"active-1\", status: \"ACTIVE\" });\n const deletedUser = createUser({ id: \"deleted-1\", status: \"DELETED\" });\n\n fauxAdmin.registerUser(activeUser);\n fauxAdmin.registerUser(deletedUser);\n\n const result = fauxAdmin.listUsers(10, undefined, \"ACTIVE\");\n\n expect(result.users).toEqual([activeUser]);\n });\n\n it(\"should return only deleted users when status is DELETED\", () => {\n const activeUser = createUser({ id: \"active-1\", status: \"ACTIVE\" });\n const deletedUser = createUser({ id: \"deleted-1\", status: \"DELETED\" });\n\n fauxAdmin.registerUser(activeUser);\n fauxAdmin.registerUser(deletedUser);\n\n const result = fauxAdmin.listUsers(10, undefined, \"DELETED\");\n\n expect(result.users).toEqual([deletedUser]);\n });\n\n it(\"should paginate results correctly\", () => {\n const users = [\n createUser({ id: \"user-1\", status: \"ACTIVE\" }),\n createUser({ id: \"user-2\", status: \"ACTIVE\" }),\n createUser({ id: \"user-3\", status: \"ACTIVE\" }),\n ];\n\n users.forEach(user => fauxAdmin.registerUser(user));\n\n const page1 = fauxAdmin.listUsers(2, undefined, \"ACTIVE\");\n\n expect(page1.users).toHaveLength(2);\n expect(page1.users).toEqual([users[0], users[1]]);\n expect(page1.nextPageToken).toBe(\"user-3\");\n\n const page2 = fauxAdmin.listUsers(2, page1.nextPageToken, \"ACTIVE\");\n\n expect(page2.users).toHaveLength(1);\n expect(page2.users).toEqual([users[2]]);\n expect(page2.nextPageToken).toBeUndefined();\n });\n\n it(\"should throw on invalid page token\", () => {\n const user = createUser();\n fauxAdmin.registerUser(user);\n\n try {\n fauxAdmin.listUsers(10, \"invalid-token\", \"ACTIVE\");\n expect.fail(\"Expected error to be thrown\");\n } catch (e) {\n expect(e).toBeInstanceOf(OpenApiCallError);\n expect((e as OpenApiCallError).status).toBe(400);\n expect((e as OpenApiCallError).json.errorName).toBe(\"InvalidPageToken\");\n }\n });\n\n it(\"should respect pageSize\", () => {\n const users = [\n createUser({ id: \"user-1\", status: \"ACTIVE\" }),\n createUser({ id: \"user-2\", status: \"ACTIVE\" }),\n createUser({ id: \"user-3\", status: \"ACTIVE\" }),\n ];\n\n users.forEach(user => fauxAdmin.registerUser(user));\n\n const result = fauxAdmin.listUsers(1, undefined, \"ACTIVE\");\n\n expect(result.users).toHaveLength(1);\n expect(result.users).toEqual([users[0]]);\n expect(result.nextPageToken).toBe(\"user-2\");\n });\n\n it(\"should handle page token pointing to middle of list\", () => {\n const users = [\n createUser({ id: \"user-1\", status: \"ACTIVE\" }),\n createUser({ id: \"user-2\", status: \"ACTIVE\" }),\n createUser({ id: \"user-3\", status: \"ACTIVE\" }),\n createUser({ id: \"user-4\", status: \"ACTIVE\" }),\n ];\n\n users.forEach(user => fauxAdmin.registerUser(user));\n\n const result = fauxAdmin.listUsers(2, \"user-2\", \"ACTIVE\");\n\n expect(result.users).toEqual([users[1], users[2]]);\n expect(result.nextPageToken).toBe(\"user-4\");\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -46,13 +46,11 @@ import { validateAction } from "./validateAction.js";
46
46
 
47
47
  export class FauxDataStore {
48
48
  #objects = new DefaultMap(() => new Map());
49
- #objectsWithSecurities = new DefaultMap(() => new Map());
50
49
  #singleLinks = new DefaultMap(() => new Map());
51
50
  #manyLinks = new DefaultMap(() => new MultiMap(Set));
52
51
  #fauxOntology;
53
52
  #attachments;
54
53
  #timeSeriesData = new DefaultMap(() => new DefaultMap(() => new DefaultMap(() => [])));
55
- #propertySecurities = new DefaultMap(() => [{}]);
56
54
  #media = new DefaultMap(() => new DefaultMap(() => {
57
55
  return new Map();
58
56
  }));
@@ -148,16 +146,12 @@ export class FauxDataStore {
148
146
  ...bso
149
147
  });
150
148
  this.#objects.get(bso.__apiName).set(String(bso.__primaryKey), frozenBso);
149
+ if (this.#strict) {
150
+ // registers links
151
+ this.replaceObjectOrThrow(frozenBso);
152
+ }
151
153
  return frozenBso;
152
154
  }
153
- registerObjectWithPropertySecurities(regularObject, securedObject, propertySecurities) {
154
- const registeredObj = this.registerObject(regularObject);
155
- this.#objectsWithSecurities.get(registeredObj.__apiName).set(String(registeredObj.__primaryKey), Object.freeze({
156
- ...securedObject
157
- }));
158
- this.#propertySecurities.set(objectLocator(registeredObj), propertySecurities);
159
- return registeredObj;
160
- }
161
155
  #osdkCreatableToBso(objectType, anyObj) {
162
156
  objectType = typeof objectType === "string" ? objectType : objectType.apiName;
163
157
  if ("$apiName" in anyObj) {
@@ -195,35 +189,33 @@ export class FauxDataStore {
195
189
  const fkName = linkDef.foreignKeyPropertyApiName;
196
190
  const fkValue = x[fkName];
197
191
  const oldFkValue = oldObject[fkName];
198
- if (oldObject[fkName] !== x[fkName]) {
199
- const dstSide = this.ontology.getOtherLinkTypeSideV2OrThrow(objectType.objectType.apiName, linkDef.apiName);
200
- const dstLocator = objectLocator({
201
- __apiName: linkDef.objectTypeApiName,
202
- __primaryKey: fkValue
192
+ const dstSide = this.ontology.getOtherLinkTypeSideV2OrThrow(objectType.objectType.apiName, linkDef.apiName);
193
+ const dstLocator = objectLocator({
194
+ __apiName: linkDef.objectTypeApiName,
195
+ __primaryKey: fkValue
196
+ });
197
+ const target = this.getObject(linkDef.objectTypeApiName, fkValue);
198
+ if (fkValue != null && !target) {
199
+ // eslint-disable-next-line no-console
200
+ console.log(`WARNING! Setting a FK value to a non-existent object: ${dstLocator}`);
201
+ }
202
+ if (fkValue != null) {
203
+ linksToUpdate.push({
204
+ dstSide,
205
+ dstLocator,
206
+ srcSide: linkDef,
207
+ srcLocator: objectLocator(x)
208
+ });
209
+ } else if (oldFkValue != null) {
210
+ linksToRemove.push({
211
+ srcLocator: objectLocator(x),
212
+ srcSide: linkDef,
213
+ dstLocator: objectLocator({
214
+ __apiName: linkDef.objectTypeApiName,
215
+ __primaryKey: oldFkValue
216
+ }),
217
+ dstSide
203
218
  });
204
- const target = this.getObject(linkDef.objectTypeApiName, fkValue);
205
- if (fkValue != null && !target) {
206
- // eslint-disable-next-line no-console
207
- console.log(`WARNING! Setting a FK value to a non-existent object: ${dstLocator}`);
208
- }
209
- if (fkValue != null) {
210
- linksToUpdate.push({
211
- dstSide,
212
- dstLocator,
213
- srcSide: linkDef,
214
- srcLocator: objectLocator(x)
215
- });
216
- } else {
217
- linksToRemove.push({
218
- srcLocator: objectLocator(x),
219
- srcSide: linkDef,
220
- dstLocator: objectLocator({
221
- __apiName: linkDef.objectTypeApiName,
222
- __primaryKey: oldFkValue
223
- }),
224
- dstSide
225
- });
226
- }
227
219
  }
228
220
  }
229
221
  }
@@ -444,9 +436,6 @@ export class FauxDataStore {
444
436
  }
445
437
  return object;
446
438
  }
447
- getObjectWithSecurities(apiName, primaryKey) {
448
- return this.#objectsWithSecurities.get(apiName).get(String(primaryKey));
449
- }
450
439
  getObjectByRid(rid) {
451
440
  for (const [, pkToObjects] of this.#objects) {
452
441
  for (const [, obj] of pkToObjects) {
@@ -492,20 +481,14 @@ export class FauxDataStore {
492
481
  }
493
482
  getObjectsFromObjectSet(parsedBody) {
494
483
  const selected = parsedBody.select;
495
- const loadPropertySecurities = parsedBody.loadPropertySecurities ?? false;
496
484
  // when we have interfaces in here, we have a little trick for
497
485
  // caching off the important properties
498
486
  let objects = getObjectsFromSet(this, parsedBody.objectSet, undefined);
499
- if (loadPropertySecurities) {
500
- !(objects.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, "Loading property securities is only supported when loading a single object") : invariant(false) : void 0;
501
- objects = [this.getObjectWithSecurities(objects[0].__apiName, objects[0].__primaryKey)];
502
- }
503
487
  if (!objects || objects.length === 0) {
504
488
  return {
505
489
  data: [],
506
490
  totalCount: "0",
507
- nextPageToken: undefined,
508
- propertySecurities: []
491
+ nextPageToken: undefined
509
492
  };
510
493
  }
511
494
  if (parsedBody.orderBy) {
@@ -515,7 +498,7 @@ export class FauxDataStore {
515
498
  // finally, if we got interfaces, the objects have names like the interface and we need
516
499
  // to return them like the object.
517
500
 
518
- const page = pageThroughResponseSearchParams(objects, getPaginationParamsFromRequest(parsedBody), false, loadPropertySecurities ? this.#propertySecurities.get(objectLocator(objects[0])) : undefined);
501
+ const page = pageThroughResponseSearchParams(objects, getPaginationParamsFromRequest(parsedBody), false);
519
502
  if (!page) {
520
503
  throw new OpenApiCallError(404, InvalidRequest(`No objects found for ${JSON.stringify(parsedBody)}`));
521
504
  }