@osdk/react 0.9.0-beta.1 → 0.9.0-beta.10

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 (100) hide show
  1. package/AGENTS.md +253 -0
  2. package/CHANGELOG.md +118 -0
  3. package/build/browser/intellisense.test.js +1 -1
  4. package/build/browser/intellisense.test.js.map +1 -1
  5. package/build/browser/new/makeExternalStore.js +2 -2
  6. package/build/browser/new/makeExternalStore.js.map +1 -1
  7. package/build/browser/new/platform-apis/admin/useCurrentFoundryUser.js +44 -0
  8. package/build/browser/new/platform-apis/admin/useCurrentFoundryUser.js.map +1 -0
  9. package/build/browser/new/platform-apis/admin/useFoundryUser.js +50 -0
  10. package/build/browser/new/platform-apis/admin/useFoundryUser.js.map +1 -0
  11. package/build/browser/new/platform-apis/admin/useFoundryUsersList.js +54 -0
  12. package/build/browser/new/platform-apis/admin/useFoundryUsersList.js.map +1 -0
  13. package/build/browser/new/useLinks.js +15 -8
  14. package/build/browser/new/useLinks.js.map +1 -1
  15. package/build/browser/new/useObjectSet.js +20 -4
  16. package/build/browser/new/useObjectSet.js.map +1 -1
  17. package/build/browser/new/useOsdkAction.js.map +1 -1
  18. package/build/browser/new/useOsdkAggregation.js +1 -1
  19. package/build/browser/new/useOsdkAggregation.js.map +1 -1
  20. package/build/browser/new/useOsdkFunction.js +101 -0
  21. package/build/browser/new/useOsdkFunction.js.map +1 -0
  22. package/build/browser/new/useOsdkObject.js +1 -1
  23. package/build/browser/new/useOsdkObject.js.map +1 -1
  24. package/build/browser/new/useOsdkObjects.js +4 -3
  25. package/build/browser/new/useOsdkObjects.js.map +1 -1
  26. package/build/browser/public/experimental.js +4 -0
  27. package/build/browser/public/experimental.js.map +1 -1
  28. package/build/browser/utils/usePlatformQuery.js +74 -0
  29. package/build/browser/utils/usePlatformQuery.js.map +1 -0
  30. package/build/cjs/{chunk-OVBG5VXE.cjs → chunk-V32JHU3O.cjs} +8 -3
  31. package/build/cjs/chunk-V32JHU3O.cjs.map +1 -0
  32. package/build/cjs/index.cjs +4 -4
  33. package/build/cjs/public/experimental.cjs +413 -67
  34. package/build/cjs/public/experimental.cjs.map +1 -1
  35. package/build/cjs/public/experimental.d.cts +279 -32
  36. package/build/esm/intellisense.test.js +1 -1
  37. package/build/esm/intellisense.test.js.map +1 -1
  38. package/build/esm/new/makeExternalStore.js +2 -2
  39. package/build/esm/new/makeExternalStore.js.map +1 -1
  40. package/build/esm/new/platform-apis/admin/useCurrentFoundryUser.js +44 -0
  41. package/build/esm/new/platform-apis/admin/useCurrentFoundryUser.js.map +1 -0
  42. package/build/esm/new/platform-apis/admin/useFoundryUser.js +50 -0
  43. package/build/esm/new/platform-apis/admin/useFoundryUser.js.map +1 -0
  44. package/build/esm/new/platform-apis/admin/useFoundryUsersList.js +54 -0
  45. package/build/esm/new/platform-apis/admin/useFoundryUsersList.js.map +1 -0
  46. package/build/esm/new/useLinks.js +15 -8
  47. package/build/esm/new/useLinks.js.map +1 -1
  48. package/build/esm/new/useObjectSet.js +20 -4
  49. package/build/esm/new/useObjectSet.js.map +1 -1
  50. package/build/esm/new/useOsdkAction.js.map +1 -1
  51. package/build/esm/new/useOsdkAggregation.js +1 -1
  52. package/build/esm/new/useOsdkAggregation.js.map +1 -1
  53. package/build/esm/new/useOsdkFunction.js +101 -0
  54. package/build/esm/new/useOsdkFunction.js.map +1 -0
  55. package/build/esm/new/useOsdkObject.js +1 -1
  56. package/build/esm/new/useOsdkObject.js.map +1 -1
  57. package/build/esm/new/useOsdkObjects.js +4 -3
  58. package/build/esm/new/useOsdkObjects.js.map +1 -1
  59. package/build/esm/public/experimental.js +4 -0
  60. package/build/esm/public/experimental.js.map +1 -1
  61. package/build/esm/utils/usePlatformQuery.js +74 -0
  62. package/build/esm/utils/usePlatformQuery.js.map +1 -0
  63. package/build/types/new/makeExternalStore.d.ts +1 -1
  64. package/build/types/new/makeExternalStore.d.ts.map +1 -1
  65. package/build/types/new/platform-apis/admin/useCurrentFoundryUser.d.ts +28 -0
  66. package/build/types/new/platform-apis/admin/useCurrentFoundryUser.d.ts.map +1 -0
  67. package/build/types/new/platform-apis/admin/useFoundryUser.d.ts +36 -0
  68. package/build/types/new/platform-apis/admin/useFoundryUser.d.ts.map +1 -0
  69. package/build/types/new/platform-apis/admin/useFoundryUsersList.d.ts +52 -0
  70. package/build/types/new/platform-apis/admin/useFoundryUsersList.d.ts.map +1 -0
  71. package/build/types/new/useLinks.d.ts +5 -5
  72. package/build/types/new/useLinks.d.ts.map +1 -1
  73. package/build/types/new/useObjectSet.d.ts +4 -0
  74. package/build/types/new/useObjectSet.d.ts.map +1 -1
  75. package/build/types/new/useOsdkAction.d.ts +3 -3
  76. package/build/types/new/useOsdkAction.d.ts.map +1 -1
  77. package/build/types/new/useOsdkAggregation.d.ts +10 -12
  78. package/build/types/new/useOsdkAggregation.d.ts.map +1 -1
  79. package/build/types/new/useOsdkFunction.d.ts +112 -0
  80. package/build/types/new/useOsdkFunction.d.ts.map +1 -0
  81. package/build/types/new/useOsdkObjects.d.ts +31 -13
  82. package/build/types/new/useOsdkObjects.d.ts.map +1 -1
  83. package/build/types/public/experimental.d.ts +5 -0
  84. package/build/types/public/experimental.d.ts.map +1 -1
  85. package/build/types/utils/usePlatformQuery.d.ts +25 -0
  86. package/build/types/utils/usePlatformQuery.d.ts.map +1 -0
  87. package/docs/actions.md +414 -0
  88. package/docs/advanced-queries.md +663 -0
  89. package/docs/cache-management.md +213 -0
  90. package/docs/getting-started.md +382 -0
  91. package/docs/platform-apis.md +203 -0
  92. package/docs/querying-data.md +648 -0
  93. package/package.json +8 -4
  94. package/build/browser/new/types.js +0 -2
  95. package/build/browser/new/types.js.map +0 -1
  96. package/build/cjs/chunk-OVBG5VXE.cjs.map +0 -1
  97. package/build/esm/new/types.js +0 -2
  98. package/build/esm/new/types.js.map +0 -1
  99. package/build/types/new/types.d.ts +0 -5
  100. package/build/types/new/types.d.ts.map +0 -1
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkOVBG5VXE_cjs = require('../chunk-OVBG5VXE.cjs');
3
+ var chunkV32JHU3O_cjs = require('../chunk-V32JHU3O.cjs');
4
4
  var unstableDoNotUse = require('@osdk/client/unstable-do-not-use');
5
- var React5 = require('react');
5
+ var React9 = require('react');
6
6
  var client = require('@osdk/client');
7
7
 
8
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
9
 
10
- var React5__default = /*#__PURE__*/_interopDefault(React5);
10
+ var React9__default = /*#__PURE__*/_interopDefault(React9);
11
11
 
12
12
  function fakeClientFn(..._args) {
13
13
  throw new Error("This is not a real client. Did you forget to <OsdkContext.Provider>?");
@@ -15,7 +15,7 @@ function fakeClientFn(..._args) {
15
15
  var fakeClient = Object.assign(fakeClientFn, {
16
16
  fetchMetadata: fakeClientFn
17
17
  });
18
- var OsdkContext2 = /* @__PURE__ */ React5__default.default.createContext({
18
+ var OsdkContext2 = /* @__PURE__ */ React9__default.default.createContext({
19
19
  client: fakeClient,
20
20
  observableClient: void 0
21
21
  });
@@ -26,22 +26,165 @@ function OsdkProvider2({
26
26
  client,
27
27
  observableClient
28
28
  }) {
29
- observableClient = React5.useMemo(() => observableClient ?? unstableDoNotUse.createObservableClient(client), [client, observableClient]);
30
- return /* @__PURE__ */ React5__default.default.createElement(OsdkContext2.Provider, {
29
+ observableClient = React9.useMemo(() => observableClient ?? unstableDoNotUse.createObservableClient(client), [client, observableClient]);
30
+ return /* @__PURE__ */ React9__default.default.createElement(OsdkContext2.Provider, {
31
31
  value: {
32
32
  client,
33
33
  observableClient
34
34
  }
35
- }, /* @__PURE__ */ React5__default.default.createElement(chunkOVBG5VXE_cjs.OsdkContext.Provider, {
35
+ }, /* @__PURE__ */ React9__default.default.createElement(chunkV32JHU3O_cjs.OsdkContext.Provider, {
36
36
  value: {
37
37
  client
38
38
  }
39
39
  }, children));
40
40
  }
41
41
 
42
+ // ../../node_modules/.pnpm/@osdk+shared.client@1.0.1/node_modules/@osdk/shared.client/index.js
43
+ var symbolClientContext = Symbol("ClientContext");
44
+
45
+ // ../../node_modules/.pnpm/@osdk+shared.client2@1.0.0/node_modules/@osdk/shared.client2/index.js
46
+ var symbolClientContext2 = "__osdkClientContext";
47
+
48
+ // ../../node_modules/.pnpm/@osdk+shared.net.errors@2.5.0-beta.2/node_modules/@osdk/shared.net.errors/build/esm/PalantirApiError.js
49
+ var PalantirApiError = class extends Error {
50
+ constructor(message, errorName, errorCode, errorDescription, statusCode, errorInstanceId, parameters) {
51
+ super(message);
52
+ this.message = message;
53
+ this.errorName = errorName;
54
+ this.errorCode = errorCode;
55
+ this.errorDescription = errorDescription;
56
+ this.statusCode = statusCode;
57
+ this.errorInstanceId = errorInstanceId;
58
+ this.parameters = parameters;
59
+ }
60
+ };
61
+
62
+ // ../../node_modules/.pnpm/@osdk+shared.net.errors@2.5.0-beta.2/node_modules/@osdk/shared.net.errors/build/esm/UnknownError.js
63
+ var UnknownError = class extends PalantirApiError {
64
+ constructor(message, errorName, originalError, statusCode) {
65
+ super(message, errorName, void 0, void 0, statusCode);
66
+ this.originalError = originalError;
67
+ }
68
+ };
69
+
70
+ // ../../node_modules/.pnpm/@osdk+shared.net.platformapi@1.6.0/node_modules/@osdk/shared.net.platformapi/build/esm/foundryPlatformFetch.js
71
+ async function foundryPlatformFetch(client, [httpMethodNum, origPath, flags, contentType, responseContentType], ...args) {
72
+ const path = origPath.replace(/\{([^}]+)\}/g, () => encodeURIComponent(args.shift()));
73
+ const body = flags & 1 ? args.shift() : void 0;
74
+ const queryArgs = flags & 2 ? args.shift() : void 0;
75
+ const headerArgs = flags & 4 ? args.shift() : void 0;
76
+ const method = ["GET", "POST", "PUT", "DELETE", "PATCH"][httpMethodNum];
77
+ return await apiFetch(client[symbolClientContext2] ?? client[symbolClientContext] ?? client, method, path, body, queryArgs, headerArgs, contentType, responseContentType);
78
+ }
79
+ async function apiFetch(clientCtx, method, endpointPath, data, queryArguments, headers, requestMediaType, responseMediaType) {
80
+ const url = parseUrl(clientCtx.baseUrl, endpointPath);
81
+ for (const [key, value] of Object.entries(queryArguments || {})) {
82
+ if (value == null) {
83
+ continue;
84
+ }
85
+ if (Array.isArray(value)) {
86
+ for (const item of value) {
87
+ url.searchParams.append(key, item);
88
+ }
89
+ } else {
90
+ url.searchParams.append(key, value);
91
+ }
92
+ }
93
+ const headersInit = new Headers();
94
+ headersInit.set("Content-Type", requestMediaType ?? "application/json");
95
+ headersInit.set("Accept", responseMediaType ?? "application/json");
96
+ Object.entries(headers || {}).forEach(([key, value]) => {
97
+ if (key === "Content-Type" && typeof value === "string") {
98
+ headersInit.set("Content-Type", value);
99
+ } else if (key === "Accept" && typeof value === "string") {
100
+ headersInit.set("Accept", value);
101
+ } else if (value != null) {
102
+ headersInit.append(key, value.toString());
103
+ }
104
+ });
105
+ const body = data == null || data instanceof globalThis.Blob ? data : JSON.stringify(data);
106
+ const response = await clientCtx.fetch(url.toString(), {
107
+ body,
108
+ method,
109
+ headers: headersInit
110
+ });
111
+ if (!response.ok) {
112
+ try {
113
+ const convertedError = await response.json();
114
+ return new PalantirApiError(convertedError.message, convertedError.errorName, convertedError.errorCode, convertedError.errorDescription, response.status, convertedError.errorInstanceId, convertedError.parameters);
115
+ } catch (e) {
116
+ if (e instanceof Error) {
117
+ return new UnknownError(e.message, "UNKNOWN");
118
+ }
119
+ return new UnknownError("Unable to parse error response", "UNKNOWN");
120
+ }
121
+ }
122
+ if (response.status === 204) {
123
+ return;
124
+ }
125
+ if (responseMediaType == null || responseMediaType === "application/json") {
126
+ return await response.json();
127
+ }
128
+ return response;
129
+ }
130
+ function parseUrl(baseUrl, endpointPath) {
131
+ baseUrl += baseUrl.endsWith("/") ? "" : "/";
132
+ return new URL(`api${endpointPath}`, baseUrl);
133
+ }
134
+
135
+ // ../../node_modules/.pnpm/@osdk+foundry.admin@2.45.0/node_modules/@osdk/foundry.admin/build/esm/public/User.js
136
+ var User_exports = {};
137
+ chunkV32JHU3O_cjs.__export(User_exports, {
138
+ deleteUser: () => deleteUser,
139
+ get: () => get,
140
+ getBatch: () => getBatch,
141
+ getCurrent: () => getCurrent,
142
+ getMarkings: () => getMarkings,
143
+ list: () => list,
144
+ profilePicture: () => profilePicture,
145
+ revokeAllTokens: () => revokeAllTokens,
146
+ search: () => search
147
+ });
148
+ var _deleteUser = [3, "/v2/admin/users/{0}"];
149
+ function deleteUser($ctx, ...args) {
150
+ return foundryPlatformFetch($ctx, _deleteUser, ...args);
151
+ }
152
+ var _list = [0, "/v2/admin/users", 2];
153
+ function list($ctx, ...args) {
154
+ return foundryPlatformFetch($ctx, _list, ...args);
155
+ }
156
+ var _get = [0, "/v2/admin/users/{0}", 2];
157
+ function get($ctx, ...args) {
158
+ return foundryPlatformFetch($ctx, _get, ...args);
159
+ }
160
+ var _getBatch = [1, "/v2/admin/users/getBatch", 1];
161
+ function getBatch($ctx, ...args) {
162
+ return foundryPlatformFetch($ctx, _getBatch, ...args);
163
+ }
164
+ var _getCurrent = [0, "/v2/admin/users/getCurrent"];
165
+ function getCurrent($ctx, ...args) {
166
+ return foundryPlatformFetch($ctx, _getCurrent, ...args);
167
+ }
168
+ var _getMarkings = [0, "/v2/admin/users/{0}/getMarkings", 2];
169
+ function getMarkings($ctx, ...args) {
170
+ return foundryPlatformFetch($ctx, _getMarkings, ...args);
171
+ }
172
+ var _profilePicture = [0, "/v2/admin/users/{0}/profilePicture", , , "application/octet-stream"];
173
+ function profilePicture($ctx, ...args) {
174
+ return foundryPlatformFetch($ctx, _profilePicture, ...args);
175
+ }
176
+ var _search = [1, "/v2/admin/users/search", 1];
177
+ function search($ctx, ...args) {
178
+ return foundryPlatformFetch($ctx, _search, ...args);
179
+ }
180
+ var _revokeAllTokens = [1, "/v2/admin/users/{0}/revokeAllTokens", 2];
181
+ function revokeAllTokens($ctx, ...args) {
182
+ return foundryPlatformFetch($ctx, _revokeAllTokens, ...args);
183
+ }
184
+
42
185
  // src/new/makeExternalStore.ts
43
- function makeExternalStore(createObservation, name) {
44
- let lastResult;
186
+ function makeExternalStore(createObservation, _name, initialValue) {
187
+ let lastResult = initialValue;
45
188
  function getSnapShot() {
46
189
  return lastResult;
47
190
  }
@@ -71,56 +214,200 @@ function makeExternalStore(createObservation, name) {
71
214
  };
72
215
  }
73
216
 
74
- // src/new/useLinks.ts
217
+ // src/utils/usePlatformQuery.ts
218
+ function usePlatformQuery({
219
+ query,
220
+ queryName,
221
+ enabled = true
222
+ }) {
223
+ const observerRef = React9__default.default.useRef();
224
+ const handleQuery = React9__default.default.useCallback(() => {
225
+ const observer = observerRef.current;
226
+ if (observer == null) return;
227
+ observer.next({
228
+ status: "loading",
229
+ data: void 0
230
+ });
231
+ query().then((data) => {
232
+ observer.next({
233
+ status: "success",
234
+ data
235
+ });
236
+ }).catch((err) => {
237
+ observer.error(err);
238
+ });
239
+ }, [query]);
240
+ const {
241
+ subscribe,
242
+ getSnapShot
243
+ } = React9__default.default.useMemo(() => {
244
+ if (!enabled) {
245
+ return makeExternalStore(() => ({
246
+ unsubscribe: () => {
247
+ }
248
+ }), process.env.NODE_ENV !== "production" ? `${queryName} Query [DISABLED]` : void 0);
249
+ }
250
+ return makeExternalStore((observer) => {
251
+ observerRef.current = observer;
252
+ handleQuery();
253
+ return {
254
+ unsubscribe: () => {
255
+ observerRef.current = void 0;
256
+ }
257
+ };
258
+ });
259
+ }, [enabled, queryName, handleQuery]);
260
+ const payload = React9__default.default.useSyncExternalStore(subscribe, getSnapShot);
261
+ let error;
262
+ if (payload && "error" in payload && payload.error != null) {
263
+ error = payload.error;
264
+ } else if (payload?.status === "error") {
265
+ error = new Error(`Failed to query platform API: ${queryName}`);
266
+ }
267
+ return {
268
+ data: payload?.data,
269
+ isLoading: enabled ? payload?.status === "loading" || !payload : false,
270
+ error,
271
+ refetch: handleQuery
272
+ };
273
+ }
274
+
275
+ // src/new/platform-apis/admin/useCurrentFoundryUser.ts
276
+ function useCurrentFoundryUser({
277
+ enabled = true
278
+ } = {}) {
279
+ const {
280
+ client
281
+ } = React9__default.default.useContext(OsdkContext2);
282
+ const handleQuery = React9__default.default.useCallback(() => User_exports.getCurrent(client), [client]);
283
+ const query = usePlatformQuery({
284
+ query: handleQuery,
285
+ enabled,
286
+ queryName: "foundry-current-user"
287
+ });
288
+ return {
289
+ currentUser: query.data,
290
+ isLoading: query.isLoading,
291
+ error: query.error,
292
+ refetch: query.refetch
293
+ };
294
+ }
295
+ function useFoundryUser(userId, {
296
+ enabled = true,
297
+ status = "ACTIVE"
298
+ } = {}) {
299
+ const {
300
+ client
301
+ } = React9__default.default.useContext(OsdkContext2);
302
+ const handleQuery = React9__default.default.useCallback(() => {
303
+ return User_exports.get(client, userId, {
304
+ status
305
+ });
306
+ }, [client, userId, status]);
307
+ const query = usePlatformQuery({
308
+ query: handleQuery,
309
+ enabled,
310
+ queryName: "foundry-user"
311
+ });
312
+ return {
313
+ user: query.data,
314
+ isLoading: query.isLoading,
315
+ error: query.error,
316
+ refetch: query.refetch
317
+ };
318
+ }
319
+ function useFoundryUsersList({
320
+ enabled = true,
321
+ include = "ACTIVE",
322
+ pageSize = 1e3,
323
+ pageToken
324
+ } = {}) {
325
+ const {
326
+ client
327
+ } = React9__default.default.useContext(OsdkContext2);
328
+ const handleQuery = React9__default.default.useCallback(() => {
329
+ return User_exports.list(client, {
330
+ include,
331
+ pageSize,
332
+ pageToken
333
+ });
334
+ }, [client, include, pageSize, pageToken]);
335
+ const query = usePlatformQuery({
336
+ query: handleQuery,
337
+ enabled,
338
+ queryName: "foundry-users-list"
339
+ });
340
+ return {
341
+ users: query.data?.data,
342
+ nextPageToken: query.data?.nextPageToken,
343
+ isLoading: query.isLoading,
344
+ error: query.error,
345
+ refetch: query.refetch
346
+ };
347
+ }
75
348
  var emptyArray = Object.freeze([]);
76
349
  function useLinks(objects, linkName, options = {}) {
77
350
  const {
78
351
  observableClient
79
- } = React5__default.default.useContext(OsdkContext2);
352
+ } = React9__default.default.useContext(OsdkContext2);
80
353
  const {
81
354
  enabled = true,
82
355
  ...otherOptions
83
356
  } = options;
84
- const objectsArray = React5__default.default.useMemo(() => {
85
- return objects === void 0 ? emptyArray : Array.isArray(objects) ? objects : [objects];
357
+ const stableWhere = React9__default.default.useMemo(() => otherOptions.where, [JSON.stringify(otherOptions.where)]);
358
+ const stableOrderBy = React9__default.default.useMemo(() => otherOptions.orderBy, [JSON.stringify(otherOptions.orderBy)]);
359
+ const objectsKey = React9__default.default.useMemo(() => {
360
+ if (objects === void 0) return "";
361
+ const arr = Array.isArray(objects) ? objects : [objects];
362
+ return arr.map((obj) => `${obj.$apiName}:${obj.$primaryKey}`).join(",");
86
363
  }, [objects]);
364
+ const objectsArray = React9__default.default.useMemo(() => {
365
+ return objects === void 0 ? emptyArray : Array.isArray(objects) ? objects : [objects];
366
+ }, [objectsKey, objects]);
87
367
  const {
88
368
  subscribe,
89
369
  getSnapShot
90
- } = React5__default.default.useMemo(() => {
370
+ } = React9__default.default.useMemo(() => {
91
371
  if (!enabled) {
92
372
  return makeExternalStore(() => ({
93
373
  unsubscribe: () => {
94
374
  }
95
- }), `links ${linkName} for ${objectsArray.map((obj) => `${obj.$apiName}:${obj.$primaryKey}`).join(",")} [DISABLED]`);
375
+ }));
96
376
  }
97
377
  return makeExternalStore((observer) => observableClient.observeLinks(objectsArray, linkName, {
98
378
  linkName,
99
- where: otherOptions.where,
379
+ where: stableWhere,
100
380
  pageSize: otherOptions.pageSize,
101
- orderBy: otherOptions.orderBy,
381
+ orderBy: stableOrderBy,
102
382
  mode: otherOptions.mode
103
- }, observer), `links ${linkName} for ${objectsArray.map((obj) => `${obj.$apiName}:${obj.$primaryKey}`).join(",")}`);
104
- }, [enabled, observableClient, objectsArray, linkName, otherOptions.where, otherOptions.pageSize, otherOptions.orderBy, otherOptions.mode]);
105
- const payload = React5__default.default.useSyncExternalStore(subscribe, getSnapShot);
383
+ }, observer));
384
+ }, [enabled, observableClient, objectsArray, objectsKey, linkName, stableWhere, otherOptions.pageSize, stableOrderBy, otherOptions.mode]);
385
+ const payload = React9__default.default.useSyncExternalStore(subscribe, getSnapShot);
106
386
  return {
107
387
  links: payload?.resolvedList,
108
- isLoading: payload?.status === "loading",
388
+ isLoading: enabled ? payload?.status === "loading" || payload?.status === "init" || !payload : false,
109
389
  isOptimistic: payload?.isOptimistic ?? false,
110
390
  error: payload?.error,
111
- fetchMore: payload?.fetchMore,
391
+ fetchMore: payload?.hasMore ? payload?.fetchMore : void 0,
112
392
  hasMore: payload?.hasMore ?? false
113
393
  };
114
394
  }
115
395
  function useObjectSet(baseObjectSet, options = {}) {
116
396
  const {
117
397
  observableClient
118
- } = React5__default.default.useContext(OsdkContext2);
398
+ } = React9__default.default.useContext(OsdkContext2);
119
399
  const {
120
400
  enabled = true,
121
401
  streamUpdates,
122
402
  ...otherOptions
123
403
  } = options;
404
+ const objectTypeKey = baseObjectSet.$objectSetInternals.def.apiName;
405
+ const previousObjectTypeRef = React9__default.default.useRef(objectTypeKey);
406
+ const previousPayloadRef = React9__default.default.useRef();
407
+ const objectTypeChanged = previousObjectTypeRef.current !== objectTypeKey;
408
+ if (objectTypeChanged) {
409
+ previousObjectTypeRef.current = objectTypeKey;
410
+ }
124
411
  const stableKey = unstableDoNotUse.computeObjectSetCacheKey(baseObjectSet, {
125
412
  where: otherOptions.where,
126
413
  withProperties: otherOptions.withProperties,
@@ -134,13 +421,14 @@ function useObjectSet(baseObjectSet, options = {}) {
134
421
  const {
135
422
  subscribe,
136
423
  getSnapShot
137
- } = React5__default.default.useMemo(() => {
424
+ } = React9__default.default.useMemo(() => {
138
425
  if (!enabled) {
139
426
  return makeExternalStore(() => ({
140
427
  unsubscribe: () => {
141
428
  }
142
429
  }), process.env.NODE_ENV !== "production" ? `objectSet ${stableKey} [DISABLED]` : void 0);
143
430
  }
431
+ const initialValue = objectTypeChanged ? void 0 : previousPayloadRef.current;
144
432
  return makeExternalStore((observer) => {
145
433
  const subscription = observableClient.observeObjectSet(baseObjectSet, {
146
434
  where: otherOptions.where,
@@ -156,28 +444,34 @@ function useObjectSet(baseObjectSet, options = {}) {
156
444
  streamUpdates
157
445
  }, observer);
158
446
  return subscription;
159
- }, process.env.NODE_ENV !== "production" ? `objectSet ${stableKey}` : void 0);
160
- }, [enabled, observableClient, stableKey, streamUpdates]);
161
- const payload = React5__default.default.useSyncExternalStore(subscribe, getSnapShot);
447
+ }, process.env.NODE_ENV !== "production" ? `objectSet ${stableKey}` : void 0, initialValue);
448
+ }, [enabled, observableClient, stableKey, streamUpdates, objectTypeChanged]);
449
+ const payload = React9__default.default.useSyncExternalStore(subscribe, getSnapShot);
450
+ React9__default.default.useEffect(() => {
451
+ if (payload) {
452
+ previousPayloadRef.current = payload;
453
+ }
454
+ }, [payload]);
162
455
  return {
163
456
  data: payload?.resolvedList,
164
457
  isLoading: payload?.status === "loading" || !payload && true || false,
165
458
  error: payload && "error" in payload ? payload.error : void 0,
166
- fetchMore: payload?.fetchMore,
167
- objectSet: payload?.objectSet || baseObjectSet
459
+ fetchMore: payload?.hasMore ? payload.fetchMore : void 0,
460
+ objectSet: payload?.objectSet || baseObjectSet,
461
+ totalCount: payload?.totalCount
168
462
  };
169
463
  }
170
464
  function useOsdkAction(actionDef) {
171
465
  const {
172
466
  observableClient
173
- } = React5__default.default.useContext(OsdkContext2);
174
- const [error, setError] = React5__default.default.useState();
175
- const [data, setData] = React5__default.default.useState();
176
- const [isPending, setPending] = React5__default.default.useState(false);
177
- const [isValidating, setValidating] = React5__default.default.useState(false);
178
- const [validationResult, setValidationResult] = React5__default.default.useState();
179
- const abortControllerRef = React5__default.default.useRef(null);
180
- const applyAction = React5__default.default.useCallback(async function applyAction2(hookArgs) {
467
+ } = React9__default.default.useContext(OsdkContext2);
468
+ const [error, setError] = React9__default.default.useState();
469
+ const [data, setData] = React9__default.default.useState();
470
+ const [isPending, setPending] = React9__default.default.useState(false);
471
+ const [isValidating, setValidating] = React9__default.default.useState(false);
472
+ const [validationResult, setValidationResult] = React9__default.default.useState();
473
+ const abortControllerRef = React9__default.default.useRef(null);
474
+ const applyAction = React9__default.default.useCallback(async function applyAction2(hookArgs) {
181
475
  try {
182
476
  if (isValidating && abortControllerRef.current) {
183
477
  abortControllerRef.current.abort();
@@ -231,7 +525,7 @@ function useOsdkAction(actionDef) {
231
525
  setPending(false);
232
526
  }
233
527
  }, [observableClient, actionDef, isValidating]);
234
- const validateAction = React5__default.default.useCallback(async function validateAction2(args) {
528
+ const validateAction = React9__default.default.useCallback(async function validateAction2(args) {
235
529
  try {
236
530
  if (isPending) {
237
531
  return void 0;
@@ -267,7 +561,7 @@ function useOsdkAction(actionDef) {
267
561
  setValidating(false);
268
562
  }
269
563
  }, [observableClient, actionDef, isPending]);
270
- React5__default.default.useEffect(() => {
564
+ React9__default.default.useEffect(() => {
271
565
  return () => {
272
566
  if (abortControllerRef.current) {
273
567
  abortControllerRef.current.abort();
@@ -292,41 +586,88 @@ function useOsdkAggregation(type, {
292
586
  }) {
293
587
  const {
294
588
  observableClient
295
- } = React5__default.default.useContext(OsdkContext2);
589
+ } = React9__default.default.useContext(OsdkContext2);
296
590
  const canonWhere = observableClient.canonicalizeWhereClause(where ?? {});
297
- const stableWithProperties = React5__default.default.useMemo(() => withProperties, [JSON.stringify(withProperties)]);
298
- const stableAggregate = React5__default.default.useMemo(() => aggregate, [JSON.stringify(aggregate)]);
591
+ const stableWithProperties = React9__default.default.useMemo(() => withProperties, [JSON.stringify(withProperties)]);
592
+ const stableAggregate = React9__default.default.useMemo(() => aggregate, [JSON.stringify(aggregate)]);
299
593
  const {
300
594
  subscribe,
301
595
  getSnapShot
302
- } = React5__default.default.useMemo(() => makeExternalStore((observer) => observableClient.observeAggregation({
596
+ } = React9__default.default.useMemo(() => makeExternalStore((observer) => observableClient.observeAggregation({
303
597
  type,
304
598
  where: canonWhere,
305
599
  withProperties: stableWithProperties,
306
600
  aggregate: stableAggregate,
307
601
  dedupeInterval: dedupeIntervalMs ?? 2e3
308
602
  }, observer), process.env.NODE_ENV !== "production" ? `aggregation ${type.apiName} ${JSON.stringify(canonWhere)}` : void 0), [observableClient, type.apiName, type.type, canonWhere, stableWithProperties, stableAggregate, dedupeIntervalMs]);
309
- const payload = React5__default.default.useSyncExternalStore(subscribe, getSnapShot);
603
+ const payload = React9__default.default.useSyncExternalStore(subscribe, getSnapShot);
310
604
  let error;
311
605
  if (payload && "error" in payload && payload.error) {
312
606
  error = payload.error;
313
607
  } else if (payload?.status === "error") {
314
608
  error = new Error("Failed to execute aggregation");
315
609
  }
316
- const refetch = React5__default.default.useCallback(async () => {
610
+ const refetch = React9__default.default.useCallback(async () => {
317
611
  await observableClient.invalidateObjectType(type.apiName);
318
612
  }, [observableClient, type.apiName]);
613
+ return {
614
+ data: payload?.result,
615
+ isLoading: payload?.status === "loading" || payload?.status === "init" || !payload,
616
+ error,
617
+ refetch
618
+ };
619
+ }
620
+ function useOsdkFunction(queryDef, options = {}) {
621
+ const {
622
+ observableClient
623
+ } = React9__default.default.useContext(OsdkContext2);
624
+ const {
625
+ params,
626
+ dependsOn,
627
+ dependsOnObjects,
628
+ dedupeIntervalMs,
629
+ enabled = true
630
+ } = options;
631
+ const stableParams = React9__default.default.useMemo(() => params, [JSON.stringify(params)]);
632
+ const stableDependsOn = React9__default.default.useMemo(() => dependsOn, [JSON.stringify(dependsOn?.map((d) => typeof d === "string" ? d : d.apiName))]);
633
+ const stableDependsOnObjects = React9__default.default.useMemo(() => dependsOnObjects, [JSON.stringify(dependsOnObjects?.map((o) => ({
634
+ $apiName: o.$apiName,
635
+ $primaryKey: o.$primaryKey
636
+ })))]);
637
+ const paramsForApi = stableParams;
638
+ const {
639
+ subscribe,
640
+ getSnapShot
641
+ } = React9__default.default.useMemo(() => {
642
+ if (!enabled) {
643
+ return makeExternalStore(() => ({
644
+ unsubscribe: () => {
645
+ }
646
+ }), process.env.NODE_ENV !== "production" ? `function ${queryDef.apiName} ${JSON.stringify(stableParams)} [DISABLED]` : void 0);
647
+ }
648
+ return makeExternalStore((observer) => observableClient.observeFunction(queryDef, paramsForApi, {
649
+ dependsOn: stableDependsOn,
650
+ dependsOnObjects: stableDependsOnObjects,
651
+ dedupeInterval: dedupeIntervalMs ?? 2e3
652
+ }, observer), process.env.NODE_ENV !== "production" ? `function ${queryDef.apiName} ${JSON.stringify(stableParams)}` : void 0);
653
+ }, [observableClient, queryDef.apiName, queryDef.version, paramsForApi, stableDependsOn, stableDependsOnObjects, dedupeIntervalMs, enabled]);
654
+ const payload = React9__default.default.useSyncExternalStore(subscribe, getSnapShot);
655
+ const error = payload?.error ?? (payload?.status === "error" ? new Error("Failed to execute function") : void 0);
656
+ const refetch = React9__default.default.useCallback(() => {
657
+ void observableClient.invalidateFunction(queryDef, paramsForApi);
658
+ }, [observableClient, queryDef, paramsForApi]);
319
659
  return {
320
660
  data: payload?.result,
321
661
  isLoading: payload?.status === "loading",
322
662
  error,
663
+ lastUpdated: payload?.lastUpdated ?? 0,
323
664
  refetch
324
665
  };
325
666
  }
326
667
  function useOsdkObject(...args) {
327
668
  const {
328
669
  observableClient
329
- } = React5__default.default.useContext(OsdkContext2);
670
+ } = React9__default.default.useContext(OsdkContext2);
330
671
  const isInstanceSignature = "$objectType" in args[0];
331
672
  const enabled = isInstanceSignature ? typeof args[1] === "boolean" ? args[1] : true : typeof args[2] === "boolean" ? args[2] : true;
332
673
  const mode = isInstanceSignature ? "offline" : void 0;
@@ -335,7 +676,7 @@ function useOsdkObject(...args) {
335
676
  const {
336
677
  subscribe,
337
678
  getSnapShot
338
- } = React5__default.default.useMemo(() => {
679
+ } = React9__default.default.useMemo(() => {
339
680
  if (!enabled) {
340
681
  return makeExternalStore(() => ({
341
682
  unsubscribe: () => {
@@ -346,7 +687,7 @@ function useOsdkObject(...args) {
346
687
  mode
347
688
  }, observer));
348
689
  }, [enabled, observableClient, objectType, primaryKey, mode]);
349
- const payload = React5__default.default.useSyncExternalStore(subscribe, getSnapShot);
690
+ const payload = React9__default.default.useSyncExternalStore(subscribe, getSnapShot);
350
691
  let error;
351
692
  if (payload && "error" in payload && payload.error) {
352
693
  error = payload.error;
@@ -355,7 +696,7 @@ function useOsdkObject(...args) {
355
696
  }
356
697
  return {
357
698
  object: payload?.object,
358
- isLoading: payload?.status === "loading",
699
+ isLoading: enabled ? payload?.status === "loading" || payload?.status === "init" || !payload : false,
359
700
  isOptimistic: !!payload?.isOptimistic,
360
701
  error,
361
702
  forceUpdate: () => {
@@ -378,15 +719,15 @@ function useOsdkObjects(type, options) {
378
719
  } = options ?? {};
379
720
  const {
380
721
  observableClient
381
- } = React5__default.default.useContext(OsdkContext2);
722
+ } = React9__default.default.useContext(OsdkContext2);
382
723
  const canonWhere = observableClient.canonicalizeWhereClause(where ?? {});
383
- const stableWithProperties = React5__default.default.useMemo(() => withProperties, [JSON.stringify(withProperties)]);
384
- const stableIntersectWith = React5__default.default.useMemo(() => intersectWith, [JSON.stringify(intersectWith)]);
385
- const stableOrderBy = React5__default.default.useMemo(() => orderBy, [JSON.stringify(orderBy)]);
724
+ const stableWithProperties = React9__default.default.useMemo(() => withProperties, [JSON.stringify(withProperties)]);
725
+ const stableIntersectWith = React9__default.default.useMemo(() => intersectWith, [JSON.stringify(intersectWith)]);
726
+ const stableOrderBy = React9__default.default.useMemo(() => orderBy, [JSON.stringify(orderBy)]);
386
727
  const {
387
728
  subscribe,
388
729
  getSnapShot
389
- } = React5__default.default.useMemo(() => {
730
+ } = React9__default.default.useMemo(() => {
390
731
  if (!enabled) {
391
732
  return makeExternalStore(() => ({
392
733
  unsubscribe: () => {
@@ -410,7 +751,7 @@ function useOsdkObjects(type, options) {
410
751
  } : {}
411
752
  }, observer), process.env.NODE_ENV !== "production" ? `list ${type.apiName} ${JSON.stringify(canonWhere)}` : void 0);
412
753
  }, [enabled, observableClient, type, canonWhere, dedupeIntervalMs, pageSize, stableOrderBy, streamUpdates, stableWithProperties, autoFetchMore, stableIntersectWith, pivotTo]);
413
- const listPayload = React5__default.default.useSyncExternalStore(subscribe, getSnapShot);
754
+ const listPayload = React9__default.default.useSyncExternalStore(subscribe, getSnapShot);
414
755
  let error;
415
756
  if (listPayload && "error" in listPayload && listPayload.error) {
416
757
  error = listPayload.error;
@@ -418,39 +759,40 @@ function useOsdkObjects(type, options) {
418
759
  error = new Error("Failed to load objects");
419
760
  }
420
761
  return {
421
- fetchMore: listPayload?.fetchMore,
762
+ fetchMore: listPayload?.hasMore ? listPayload.fetchMore : void 0,
422
763
  error,
423
764
  data: listPayload?.resolvedList,
424
- isLoading: listPayload?.status === "loading",
425
- isOptimistic: listPayload?.isOptimistic ?? false
765
+ isLoading: enabled ? listPayload?.status === "loading" || listPayload?.status === "init" || !listPayload : false,
766
+ isOptimistic: listPayload?.isOptimistic ?? false,
767
+ totalCount: listPayload?.totalCount
426
768
  };
427
769
  }
428
770
  function useDebouncedCallback(callback, delay) {
429
- const timeoutRef = React5__default.default.useRef();
430
- const callbackRef = React5__default.default.useRef(callback);
431
- const lastArgsRef = React5__default.default.useRef();
771
+ const timeoutRef = React9__default.default.useRef();
772
+ const callbackRef = React9__default.default.useRef(callback);
773
+ const lastArgsRef = React9__default.default.useRef();
432
774
  callbackRef.current = callback;
433
- const cancel = React5__default.default.useCallback(() => {
775
+ const cancel = React9__default.default.useCallback(() => {
434
776
  if (timeoutRef.current) {
435
777
  clearTimeout(timeoutRef.current);
436
778
  timeoutRef.current = void 0;
437
779
  }
438
780
  }, []);
439
- const flush = React5__default.default.useCallback(() => {
781
+ const flush = React9__default.default.useCallback(() => {
440
782
  if (timeoutRef.current && lastArgsRef.current) {
441
783
  clearTimeout(timeoutRef.current);
442
784
  timeoutRef.current = void 0;
443
785
  void callbackRef.current(...lastArgsRef.current);
444
786
  }
445
787
  }, []);
446
- const debouncedCallback = React5__default.default.useCallback((...args) => {
788
+ const debouncedCallback = React9__default.default.useCallback((...args) => {
447
789
  lastArgsRef.current = args;
448
790
  cancel();
449
791
  timeoutRef.current = setTimeout(() => {
450
792
  void callbackRef.current(...args);
451
793
  }, delay);
452
794
  }, [delay, cancel]);
453
- React5__default.default.useEffect(() => {
795
+ React9__default.default.useEffect(() => {
454
796
  return () => {
455
797
  cancel();
456
798
  };
@@ -463,18 +805,22 @@ function useDebouncedCallback(callback, delay) {
463
805
 
464
806
  Object.defineProperty(exports, "useOsdkClient", {
465
807
  enumerable: true,
466
- get: function () { return chunkOVBG5VXE_cjs.useOsdkClient; }
808
+ get: function () { return chunkV32JHU3O_cjs.useOsdkClient; }
467
809
  });
468
810
  Object.defineProperty(exports, "useOsdkMetadata", {
469
811
  enumerable: true,
470
- get: function () { return chunkOVBG5VXE_cjs.useOsdkMetadata; }
812
+ get: function () { return chunkV32JHU3O_cjs.useOsdkMetadata; }
471
813
  });
472
814
  exports.OsdkProvider2 = OsdkProvider2;
815
+ exports.useCurrentFoundryUser = useCurrentFoundryUser;
473
816
  exports.useDebouncedCallback = useDebouncedCallback;
817
+ exports.useFoundryUser = useFoundryUser;
818
+ exports.useFoundryUsersList = useFoundryUsersList;
474
819
  exports.useLinks = useLinks;
475
820
  exports.useObjectSet = useObjectSet;
476
821
  exports.useOsdkAction = useOsdkAction;
477
822
  exports.useOsdkAggregation = useOsdkAggregation;
823
+ exports.useOsdkFunction = useOsdkFunction;
478
824
  exports.useOsdkObject = useOsdkObject;
479
825
  exports.useOsdkObjects = useOsdkObjects;
480
826
  //# sourceMappingURL=experimental.cjs.map