@osdk/client 2.2.0-beta.8 → 2.2.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/build/browser/createMinimalClient.js +2 -2
  3. package/build/browser/createMinimalClient.js.map +1 -1
  4. package/build/browser/object/SimpleOsdkProperties.js +2 -0
  5. package/build/browser/object/SimpleOsdkProperties.js.map +1 -0
  6. package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js +2 -0
  7. package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -0
  8. package/build/browser/object/convertWireToOsdkObjects/InterfaceHolder.js.map +1 -1
  9. package/build/browser/object/convertWireToOsdkObjects/ObjectHolder.js.map +1 -1
  10. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  11. package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js +10 -3
  12. package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
  13. package/build/browser/object/convertWireToOsdkObjects/getDollarAs.js.map +1 -1
  14. package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
  15. package/build/browser/object/convertWireToOsdkObjects.js +4 -2
  16. package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
  17. package/build/browser/object/fetchPage.js +13 -1
  18. package/build/browser/object/fetchPage.js.map +1 -1
  19. package/build/browser/object/fetchPage.test.js +56 -2
  20. package/build/browser/object/fetchPage.test.js.map +1 -1
  21. package/build/browser/object/object.test.js.map +1 -1
  22. package/build/browser/objectSet/InterfaceObjectSet.test.js +18 -2
  23. package/build/browser/objectSet/InterfaceObjectSet.test.js.map +1 -1
  24. package/build/browser/objectSet/ObjectSet.test.js +92 -102
  25. package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
  26. package/build/browser/objectSet/ObjectSetListenerWebsocket.js +18 -14
  27. package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  28. package/build/browser/objectSet/createObjectSet.js.map +1 -1
  29. package/build/browser/observable/ListPayload.js.map +1 -1
  30. package/build/browser/observable/ObjectPayload.js.map +1 -1
  31. package/build/browser/observable/ObservableClient.js.map +1 -1
  32. package/build/browser/observable/internal/ActionApplication.js +29 -29
  33. package/build/browser/observable/internal/ActionApplication.js.map +1 -1
  34. package/build/browser/observable/internal/CacheKey.js +1 -1
  35. package/build/browser/observable/internal/CacheKey.js.map +1 -1
  36. package/build/browser/observable/internal/CacheKeys.js +2 -2
  37. package/build/browser/observable/internal/CacheKeys.js.map +1 -1
  38. package/build/browser/observable/internal/{ChangedObjects.js → Changes.js} +20 -9
  39. package/build/browser/observable/internal/Changes.js.map +1 -0
  40. package/build/browser/observable/internal/Layer.js +3 -0
  41. package/build/browser/observable/internal/Layer.js.map +1 -1
  42. package/build/browser/observable/internal/ListQuery.js +411 -170
  43. package/build/browser/observable/internal/ListQuery.js.map +1 -1
  44. package/build/browser/observable/internal/ObjectQuery.js +32 -16
  45. package/build/browser/observable/internal/ObjectQuery.js.map +1 -1
  46. package/build/browser/observable/internal/ObservableClientImpl.js +4 -12
  47. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  48. package/build/browser/observable/internal/OptimisticJob.js.map +1 -1
  49. package/build/browser/observable/internal/OrderByCanonicalizer.js +73 -0
  50. package/build/browser/observable/internal/OrderByCanonicalizer.js.map +1 -0
  51. package/build/browser/observable/internal/OrderByCanonicalizer.test.js +78 -0
  52. package/build/browser/observable/internal/OrderByCanonicalizer.test.js.map +1 -0
  53. package/build/browser/observable/internal/Query.js +64 -31
  54. package/build/browser/observable/internal/Query.js.map +1 -1
  55. package/build/browser/observable/internal/RefCounts.js +7 -2
  56. package/build/browser/observable/internal/RefCounts.js.map +1 -1
  57. package/build/browser/observable/internal/SimpleWhereClause.js +2 -0
  58. package/build/browser/observable/internal/SimpleWhereClause.js.map +1 -0
  59. package/build/browser/observable/internal/Store.js +84 -267
  60. package/build/browser/observable/internal/Store.js.map +1 -1
  61. package/build/browser/observable/internal/Store.test.js +264 -247
  62. package/build/browser/observable/internal/Store.test.js.map +1 -1
  63. package/build/browser/observable/internal/WhereClauseCanonicalizer.js +11 -3
  64. package/build/browser/observable/internal/WhereClauseCanonicalizer.js.map +1 -1
  65. package/build/browser/observable/internal/objectMatchesWhereClause.js.map +1 -1
  66. package/build/browser/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
  67. package/build/browser/observable/internal/testUtils.js +82 -18
  68. package/build/browser/observable/internal/testUtils.js.map +1 -1
  69. package/build/browser/public/unstable-do-not-use.js.map +1 -1
  70. package/build/browser/util/UserAgent.js +1 -1
  71. package/build/cjs/{chunk-JPENHIJB.cjs → chunk-EY52J5Z4.cjs} +25 -15
  72. package/build/cjs/chunk-EY52J5Z4.cjs.map +1 -0
  73. package/build/cjs/{chunk-IU47QMYO.cjs → chunk-MCQVHD2F.cjs} +32 -28
  74. package/build/cjs/chunk-MCQVHD2F.cjs.map +1 -0
  75. package/build/cjs/chunk-T4NIFYZS.cjs +14 -0
  76. package/build/cjs/chunk-T4NIFYZS.cjs.map +1 -0
  77. package/build/cjs/index.cjs +69 -72
  78. package/build/cjs/index.cjs.map +1 -1
  79. package/build/cjs/public/internal.cjs +6 -6
  80. package/build/cjs/public/unstable-do-not-use.cjs +683 -539
  81. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  82. package/build/cjs/public/unstable-do-not-use.d.cts +27 -26
  83. package/build/esm/createMinimalClient.js +2 -2
  84. package/build/esm/createMinimalClient.js.map +1 -1
  85. package/build/esm/object/SimpleOsdkProperties.js +2 -0
  86. package/build/esm/object/SimpleOsdkProperties.js.map +1 -0
  87. package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js +2 -0
  88. package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -0
  89. package/build/esm/object/convertWireToOsdkObjects/InterfaceHolder.js.map +1 -1
  90. package/build/esm/object/convertWireToOsdkObjects/ObjectHolder.js.map +1 -1
  91. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  92. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js +10 -3
  93. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
  94. package/build/esm/object/convertWireToOsdkObjects/getDollarAs.js.map +1 -1
  95. package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
  96. package/build/esm/object/convertWireToOsdkObjects.js +4 -2
  97. package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
  98. package/build/esm/object/fetchPage.js +13 -1
  99. package/build/esm/object/fetchPage.js.map +1 -1
  100. package/build/esm/object/fetchPage.test.js +56 -2
  101. package/build/esm/object/fetchPage.test.js.map +1 -1
  102. package/build/esm/object/object.test.js.map +1 -1
  103. package/build/esm/objectSet/InterfaceObjectSet.test.js +18 -2
  104. package/build/esm/objectSet/InterfaceObjectSet.test.js.map +1 -1
  105. package/build/esm/objectSet/ObjectSet.test.js +92 -102
  106. package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
  107. package/build/esm/objectSet/ObjectSetListenerWebsocket.js +18 -14
  108. package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  109. package/build/esm/objectSet/createObjectSet.js.map +1 -1
  110. package/build/esm/observable/ListPayload.js.map +1 -1
  111. package/build/esm/observable/ObjectPayload.js.map +1 -1
  112. package/build/esm/observable/ObservableClient.js.map +1 -1
  113. package/build/esm/observable/internal/ActionApplication.js +29 -29
  114. package/build/esm/observable/internal/ActionApplication.js.map +1 -1
  115. package/build/esm/observable/internal/CacheKey.js +1 -1
  116. package/build/esm/observable/internal/CacheKey.js.map +1 -1
  117. package/build/esm/observable/internal/CacheKeys.js +2 -2
  118. package/build/esm/observable/internal/CacheKeys.js.map +1 -1
  119. package/build/esm/observable/internal/{ChangedObjects.js → Changes.js} +20 -9
  120. package/build/esm/observable/internal/Changes.js.map +1 -0
  121. package/build/esm/observable/internal/Layer.js +3 -0
  122. package/build/esm/observable/internal/Layer.js.map +1 -1
  123. package/build/esm/observable/internal/ListQuery.js +411 -170
  124. package/build/esm/observable/internal/ListQuery.js.map +1 -1
  125. package/build/esm/observable/internal/ObjectQuery.js +32 -16
  126. package/build/esm/observable/internal/ObjectQuery.js.map +1 -1
  127. package/build/esm/observable/internal/ObservableClientImpl.js +4 -12
  128. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  129. package/build/esm/observable/internal/OptimisticJob.js.map +1 -1
  130. package/build/esm/observable/internal/OrderByCanonicalizer.js +73 -0
  131. package/build/esm/observable/internal/OrderByCanonicalizer.js.map +1 -0
  132. package/build/esm/observable/internal/OrderByCanonicalizer.test.js +78 -0
  133. package/build/esm/observable/internal/OrderByCanonicalizer.test.js.map +1 -0
  134. package/build/esm/observable/internal/Query.js +64 -31
  135. package/build/esm/observable/internal/Query.js.map +1 -1
  136. package/build/esm/observable/internal/RefCounts.js +7 -2
  137. package/build/esm/observable/internal/RefCounts.js.map +1 -1
  138. package/build/esm/observable/internal/SimpleWhereClause.js +2 -0
  139. package/build/esm/observable/internal/SimpleWhereClause.js.map +1 -0
  140. package/build/esm/observable/internal/Store.js +84 -267
  141. package/build/esm/observable/internal/Store.js.map +1 -1
  142. package/build/esm/observable/internal/Store.test.js +264 -247
  143. package/build/esm/observable/internal/Store.test.js.map +1 -1
  144. package/build/esm/observable/internal/WhereClauseCanonicalizer.js +11 -3
  145. package/build/esm/observable/internal/WhereClauseCanonicalizer.js.map +1 -1
  146. package/build/esm/observable/internal/objectMatchesWhereClause.js.map +1 -1
  147. package/build/esm/observable/internal/objectMatchesWhereClause.test.js.map +1 -1
  148. package/build/esm/observable/internal/testUtils.js +82 -18
  149. package/build/esm/observable/internal/testUtils.js.map +1 -1
  150. package/build/esm/public/unstable-do-not-use.js.map +1 -1
  151. package/build/esm/util/UserAgent.js +1 -1
  152. package/build/types/object/SimpleOsdkProperties.d.ts +1 -0
  153. package/build/types/object/SimpleOsdkProperties.d.ts.map +1 -0
  154. package/build/types/object/convertWireToOsdkObjects/BaseHolder.d.ts +1 -0
  155. package/build/types/object/convertWireToOsdkObjects/BaseHolder.d.ts.map +1 -0
  156. package/build/types/object/convertWireToOsdkObjects.d.ts +8 -1
  157. package/build/types/object/convertWireToOsdkObjects.d.ts.map +1 -1
  158. package/build/types/observable/ListPayload.d.ts +5 -9
  159. package/build/types/observable/ListPayload.d.ts.map +1 -1
  160. package/build/types/observable/ObjectPayload.d.ts +4 -7
  161. package/build/types/observable/ObjectPayload.d.ts.map +1 -1
  162. package/build/types/observable/ObservableClient.d.ts +27 -11
  163. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  164. package/build/types/observable/internal/ActionApplication.d.ts.map +1 -1
  165. package/build/types/observable/internal/CacheKeys.d.ts +1 -1
  166. package/build/types/observable/internal/CacheKeys.d.ts.map +1 -1
  167. package/build/types/observable/internal/Changes.d.ts +15 -0
  168. package/build/types/observable/internal/Changes.d.ts.map +1 -0
  169. package/build/types/observable/internal/Layer.d.ts +1 -0
  170. package/build/types/observable/internal/Layer.d.ts.map +1 -1
  171. package/build/types/observable/internal/ListQuery.d.ts +59 -14
  172. package/build/types/observable/internal/ListQuery.d.ts.map +1 -1
  173. package/build/types/observable/internal/ObjectQuery.d.ts +5 -6
  174. package/build/types/observable/internal/ObjectQuery.d.ts.map +1 -1
  175. package/build/types/observable/internal/OptimisticJob.d.ts +1 -1
  176. package/build/types/observable/internal/OptimisticJob.d.ts.map +1 -1
  177. package/build/types/observable/internal/OrderByCanonicalizer.d.ts +12 -0
  178. package/build/types/observable/internal/OrderByCanonicalizer.d.ts.map +1 -0
  179. package/build/types/observable/internal/OrderByCanonicalizer.test.d.ts +1 -0
  180. package/build/types/observable/internal/OrderByCanonicalizer.test.d.ts.map +1 -0
  181. package/build/types/observable/internal/Query.d.ts +39 -4
  182. package/build/types/observable/internal/Query.d.ts.map +1 -1
  183. package/build/types/observable/internal/RefCounts.d.ts.map +1 -1
  184. package/build/types/observable/internal/SimpleWhereClause.d.ts +2 -0
  185. package/build/types/observable/internal/SimpleWhereClause.d.ts.map +1 -0
  186. package/build/types/observable/internal/Store.d.ts +19 -43
  187. package/build/types/observable/internal/Store.d.ts.map +1 -1
  188. package/build/types/observable/internal/WhereClauseCanonicalizer.d.ts +2 -1
  189. package/build/types/observable/internal/WhereClauseCanonicalizer.d.ts.map +1 -1
  190. package/build/types/observable/internal/objectMatchesWhereClause.d.ts +4 -2
  191. package/build/types/observable/internal/objectMatchesWhereClause.d.ts.map +1 -1
  192. package/build/types/observable/internal/testUtils.d.ts +39 -9
  193. package/build/types/observable/internal/testUtils.d.ts.map +1 -1
  194. package/build/types/public/unstable-do-not-use.d.ts +1 -4
  195. package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
  196. package/package.json +12 -10
  197. package/build/browser/observable/internal/ChangedObjects.js.map +0 -1
  198. package/build/cjs/chunk-IU47QMYO.cjs.map +0 -1
  199. package/build/cjs/chunk-JPENHIJB.cjs.map +0 -1
  200. package/build/esm/observable/internal/ChangedObjects.js.map +0 -1
  201. package/build/types/observable/internal/ChangedObjects.d.ts +0 -11
  202. package/build/types/observable/internal/ChangedObjects.d.ts.map +0 -1
@@ -127,7 +127,7 @@ export class ObjectSetListenerWebsocket {
127
127
  */
128
128
  async #initiateSubscribe(sub) {
129
129
  if (process.env.NODE_ENV !== "production") {
130
- this.#logger?.trace("#initiateSubscribe()");
130
+ this.#logger?.debug("#initiateSubscribe()");
131
131
  }
132
132
  try {
133
133
  await this.#ensureWebsocket();
@@ -149,7 +149,7 @@ export class ObjectSetListenerWebsocket {
149
149
  }
150
150
  #sendSubscribeMessage() {
151
151
  if (process.env.NODE_ENV !== "production") {
152
- this.#logger?.trace("#sendSubscribeMessage()");
152
+ this.#logger?.debug("#sendSubscribeMessage()");
153
153
  }
154
154
  // If two calls to `.subscribe()` happen at once (or if the connection is reset),
155
155
  // we may have multiple subscriptions that don't have a subscriptionId yet,
@@ -177,7 +177,7 @@ export class ObjectSetListenerWebsocket {
177
177
  })
178
178
  };
179
179
  if (process.env.NODE_ENV !== "production") {
180
- this.#logger?.trace({
180
+ this.#logger?.debug({
181
181
  payload: subscribe
182
182
  }, "sending subscribe message");
183
183
  }
@@ -244,7 +244,7 @@ export class ObjectSetListenerWebsocket {
244
244
  // we again may have lost the race after our minimum backoff time
245
245
  if (this.#ws == null) {
246
246
  if (process.env.NODE_ENV !== "production") {
247
- this.#logger?.trace("Creating websocket");
247
+ this.#logger?.debug("Creating websocket");
248
248
  }
249
249
  this.#ws = new WebSocket(url, [`Bearer-${token}`]);
250
250
  this.#ws.addEventListener("close", this.#onClose);
@@ -284,20 +284,24 @@ export class ObjectSetListenerWebsocket {
284
284
  #onMessage = async message => {
285
285
  const data = JSON.parse(message.data.toString());
286
286
  if (process.env.NODE_ENV !== "production") {
287
- this.#logger?.trace({
287
+ this.#logger?.debug({
288
288
  payload: data
289
289
  }, "received message from ws");
290
290
  }
291
291
  switch (data.type) {
292
292
  case "objectSetChanged":
293
- return void this.#handleMessage_objectSetChanged(data);
293
+ await this.#handleMessage_objectSetChanged(data);
294
+ return;
294
295
  case "refreshObjectSet":
295
- return void this.#handleMessage_refreshObjectSet(data);
296
+ this.#handleMessage_refreshObjectSet(data);
297
+ return;
296
298
  case "subscribeResponses":
297
- return void this.#handleMessage_subscribeResponses(data);
299
+ this.#handleMessage_subscribeResponses(data);
300
+ return;
298
301
  case "subscriptionClosed":
299
302
  {
300
- return void this.#handleMessage_subscriptionClosed(data);
303
+ this.#handleMessage_subscriptionClosed(data);
304
+ return;
301
305
  }
302
306
  default:
303
307
  process.env.NODE_ENV !== "production" ? invariant(false, "Unexpected message type") : invariant(false);
@@ -321,10 +325,10 @@ export class ObjectSetListenerWebsocket {
321
325
  state: "ADDED_OR_UPDATED"
322
326
  } : undefined;
323
327
  }));
324
- for (const osdkObject of osdkObjectsWithReferenceUpdates) {
325
- if (osdkObject != null) {
328
+ for (const update of osdkObjectsWithReferenceUpdates) {
329
+ if (update != null) {
326
330
  try {
327
- sub.listener.onChange?.(osdkObject);
331
+ sub.listener.onChange?.(update);
328
332
  } catch (error) {
329
333
  this.#logger?.error(error, "Error in onChange callback");
330
334
  this.#tryCatchOnError(sub, false, error);
@@ -397,7 +401,7 @@ export class ObjectSetListenerWebsocket {
397
401
  // `"preparing"` should only be the status on an initial subscribe.
398
402
  const shouldFireOutOfDate = sub.status === "expired" || sub.status === "reconnecting";
399
403
  if (process.env.NODE_ENV !== "production") {
400
- this.#logger?.trace({
404
+ this.#logger?.debug({
401
405
  shouldFireOutOfDate
402
406
  }, "success");
403
407
  }
@@ -429,7 +433,7 @@ export class ObjectSetListenerWebsocket {
429
433
  }
430
434
  #onClose = event => {
431
435
  if (process.env.NODE_ENV !== "production") {
432
- this.#logger?.trace({
436
+ this.#logger?.debug({
433
437
  event
434
438
  }, "Received close event from ws", event);
435
439
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectSetListenerWebsocket.js","names":["WebSocket","invariant","MINIMUM_RECONNECT_DELAY_MS","doNothing","fillOutListener","onChange","onError","onOutOfDate","onSuccessfulSubscription","isReady","sub","subscriptionIsDone","status","ObjectSetListenerWebsocket","instances","WeakMap","getInstance","client","instance","get","clientCacheKey","set","ws","lastWsConnect","logger","pendingSubscriptions","Map","subscriptions","endedSubscriptions","Set","maybeDisconnectTimeout","constructor","minimumReconnectDelayMs","child","msgPrefix","baseUrl","startsWith","process","env","NODE_ENV","subscribe","objectType","objectSet","listener","properties","objOrInterfaceDef","type","ontologyProvider","getObjectDefinition","apiName","getInterfaceDefinition","objectProperties","referenceProperties","length","Object","keys","filter","p","primaryKeyPropertyName","undefined","primaryKeyApiName","requestedProperties","requestedReferenceProperties","subscriptionId","nextUuid","interfaceApiName","initiateSubscribe","unsubscribe","#initiateSubscribe","trace","ensureWebsocket","readyState","OPEN","sendSubscribeMessage","error","tryCatchOnError","#sendSubscribeMessage","readySubs","values","id","requests","map","propertySet","referenceSet","payload","send","JSON","stringify","#unsubscribe","newStatus","delete","add","clearTimeout","setTimeout","size","cycleWebsocket","#ensureWebsocket","tokenProvider","url","constructWebsocketUrl","ontologyRid","token","nextConnectTime","Date","now","Promise","resolve","addEventListener","onClose","onMessage","onOpen","CONNECTING","reject","cleanup","removeEventListener","open","evt","#onOpen","message","data","parse","toString","handleMessage_objectSetChanged","handleMessage_refreshObjectSet","handleMessage_subscribeResponses","handleMessage_subscriptionClosed","objectUpdates","updates","update","referenceUpdates","osdkObjectsWithReferenceUpdates","all","o","osdkObjectArray","objectFactory2","__apiName","__primaryKey","primaryKey","property","value","fetchInterfaceMapping","singleOsdkObject","object","state","osdkObject","osdkObjects","keysToDelete","key","includes","#fetchInterfaceMapping","objectTypeApiName","interfaceMap","responses","subs","i","response","errors","shouldFireOutOfDate","#handleMessage_subscriptionClosed","has","cause","event","#cycleWebsocket","CLOSING","CLOSED","close","s","#tryCatchOnError","subscriptionClosed","onErrorError","console","base","URL","protocol","replace","uuidCounter","padStart"],"sources":["ObjectSetListenerWebsocket.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {\n ObjectOrInterfaceDefinition,\n ObjectSetSubscription,\n Osdk,\n PropertyKeys,\n} from \"@osdk/api\";\nimport type {\n ObjectSet,\n ObjectSetStreamSubscribeRequest,\n ObjectSetStreamSubscribeRequests,\n ObjectSetSubscribeResponses,\n ObjectSetUpdates,\n ObjectState,\n RefreshObjectSet,\n StreamMessage,\n SubscriptionClosed,\n} from \"@osdk/foundry.ontologies\";\nimport WebSocket from \"isomorphic-ws\";\nimport invariant from \"tiny-invariant\";\nimport type { Logger } from \"../Logger.js\";\nimport type { ClientCacheKey, MinimalClient } from \"../MinimalClientContext.js\";\n\nconst MINIMUM_RECONNECT_DELAY_MS = 5 * 1000;\n\n/** Noop function to reduce conditional checks */\nfunction doNothing() {}\n\n/**\n * Converts an ObjectSetListener to one where all the functions are defined.\n */\nfunction fillOutListener<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n>(\n {\n onChange = doNothing,\n onError = doNothing,\n onOutOfDate = doNothing,\n onSuccessfulSubscription = doNothing,\n }: ObjectSetSubscription.Listener<Q, P>,\n): Required<ObjectSetSubscription.Listener<Q, P>> {\n return { onChange, onError, onOutOfDate, onSuccessfulSubscription };\n}\n\ninterface Subscription<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n> {\n listener: Required<ObjectSetSubscription.Listener<Q, P>>;\n requestedProperties: Array<P>;\n requestedReferenceProperties: Array<P>;\n objectSet: ObjectSet;\n\n subscriptionId: string;\n isReady?: boolean;\n status:\n | \"preparing\"\n | \"subscribed\"\n | \"done\"\n | \"expired\"\n | \"error\"\n | \"reconnecting\";\n\n interfaceApiName?: string;\n primaryKeyPropertyName?: string;\n}\n\nfunction isReady<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n>(\n sub: Subscription<Q, P>,\n): sub is Subscription<Q, P> & { temporaryObjectSetId: string } {\n return sub.isReady != null;\n}\n\nfunction subscriptionIsDone(sub: Subscription<any, any>) {\n return sub.status === \"done\" || sub.status === \"error\";\n}\n\n/** @internal */\nexport class ObjectSetListenerWebsocket {\n static #instances = new WeakMap<\n ClientCacheKey,\n ObjectSetListenerWebsocket\n >();\n readonly MINIMUM_RECONNECT_DELAY_MS: number;\n\n // FIXME\n static getInstance(client: MinimalClient): ObjectSetListenerWebsocket {\n let instance = ObjectSetListenerWebsocket.#instances.get(\n client.clientCacheKey,\n );\n if (instance == null) {\n instance = new ObjectSetListenerWebsocket(client);\n ObjectSetListenerWebsocket.#instances.set(\n client.clientCacheKey,\n instance,\n );\n }\n return instance;\n }\n\n #ws: WebSocket | undefined;\n #lastWsConnect = 0;\n #client: MinimalClient;\n\n #logger?: Logger;\n\n /**\n * map of requestId to all active subscriptions at the time of the request\n */\n #pendingSubscriptions = new Map<\n string,\n Subscription<any, any>[]\n >();\n\n /**\n * Map of subscriptionId to Subscription. Note: the subscriptionId may be\n * temporary and not the actual subscriptionId from the server.\n */\n #subscriptions = new Map<\n string,\n Subscription<any, any>\n >();\n\n #endedSubscriptions = new Set<\n string\n >();\n\n #maybeDisconnectTimeout: ReturnType<typeof setTimeout> | undefined;\n\n // DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM\n constructor(\n client: MinimalClient,\n {\n minimumReconnectDelayMs = MINIMUM_RECONNECT_DELAY_MS,\n } = {},\n ) {\n this.MINIMUM_RECONNECT_DELAY_MS = minimumReconnectDelayMs;\n this.#client = client;\n this.#logger = client.logger?.child({}, {\n msgPrefix: \"<OSW> \",\n });\n invariant(\n client.baseUrl.startsWith(\"https://\")\n || client.baseUrl.startsWith(\"http://\"),\n \"Stack must be a URL\",\n );\n }\n\n async subscribe<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n >(\n objectType: ObjectOrInterfaceDefinition,\n objectSet: ObjectSet,\n listener: ObjectSetSubscription.Listener<Q, P>,\n properties: Array<P> = [],\n ): Promise<() => void> {\n const objOrInterfaceDef = objectType.type === \"object\"\n ? await this.#client.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n )\n : await this.#client.ontologyProvider.getInterfaceDefinition(\n objectType.apiName,\n );\n\n let objectProperties: Array<P> = [];\n let referenceProperties: Array<P> = [];\n\n if (properties.length === 0) {\n properties = Object.keys(objOrInterfaceDef.properties) as Array<P>;\n }\n\n objectProperties = properties.filter((p) =>\n objOrInterfaceDef.properties[p].type !== \"geotimeSeriesReference\"\n );\n\n referenceProperties = properties.filter((p) =>\n objOrInterfaceDef.properties[p].type === \"geotimeSeriesReference\"\n );\n\n const sub: Subscription<Q, P> = {\n listener: fillOutListener<Q, P>(listener),\n objectSet,\n primaryKeyPropertyName: objOrInterfaceDef.type === \"interface\"\n ? undefined\n : objOrInterfaceDef.primaryKeyApiName,\n requestedProperties: objectProperties,\n requestedReferenceProperties: referenceProperties,\n status: \"preparing\",\n // Since we don't have a real subscription id yet but we need to keep\n // track of this reference, we can just use a random uuid.\n subscriptionId: `TMP-${nextUuid()}}`,\n interfaceApiName: objOrInterfaceDef.type === \"object\"\n ? undefined\n : objOrInterfaceDef.apiName,\n };\n\n this.#subscriptions.set(sub.subscriptionId, sub);\n\n // actually prepares the subscription, ensures the ws is ready, and sends\n // a subscribe message. We don't want to block on this.\n void this.#initiateSubscribe(sub);\n\n return () => {\n this.#unsubscribe(sub);\n };\n }\n\n /**\n * Called at least once for every subscription.\n *\n * - Resets pending expiry\n * - Recreates temporary object set\n * - Triggers a full subscribe message\n *\n * @returns\n */\n async #initiateSubscribe(sub: Subscription<any, any>) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#initiateSubscribe()\");\n }\n\n try {\n await this.#ensureWebsocket();\n\n // the consumer may have already unsubscribed before we are ready to request a subscription\n // so we have to acquire the pendingSubscription after the await.\n if (subscriptionIsDone(sub)) {\n return;\n }\n sub.isReady = true;\n // if we aren't open, then this happens after we #onConnect\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#sendSubscribeMessage();\n }\n } catch (error) {\n this.#logger?.error(error, \"Error in #initiateSubscribe\");\n this.#tryCatchOnError(sub, true, error);\n }\n }\n\n #sendSubscribeMessage() {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#sendSubscribeMessage()\");\n }\n // If two calls to `.subscribe()` happen at once (or if the connection is reset),\n // we may have multiple subscriptions that don't have a subscriptionId yet,\n // so we filter those out.\n const readySubs = [...this.#subscriptions.values()].filter(isReady);\n\n const id = nextUuid();\n // responses come back as an array of subIds, so we need to know the sources\n this.#pendingSubscriptions.set(id, readySubs);\n\n // every subscribe message \"overwrites\" the previous ones that are not\n // re-included, so we have to reconstitute the entire list of subscriptions\n const subscribe: ObjectSetStreamSubscribeRequests = {\n id,\n requests: readySubs.map<ObjectSetStreamSubscribeRequest>((\n {\n objectSet,\n requestedProperties,\n requestedReferenceProperties,\n interfaceApiName,\n },\n ) => {\n return {\n objectSet: objectSet,\n propertySet: requestedProperties,\n referenceSet: requestedReferenceProperties,\n };\n }),\n };\n\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace(\n { payload: subscribe },\n \"sending subscribe message\",\n );\n }\n this.#ws?.send(JSON.stringify(subscribe));\n }\n\n #unsubscribe<Q extends ObjectOrInterfaceDefinition>(\n sub: Subscription<Q, any>,\n newStatus: \"done\" | \"error\" = \"done\",\n ) {\n if (subscriptionIsDone(sub)) {\n // if we are already done, we don't need to do anything\n return;\n }\n\n sub.status = newStatus;\n\n // make sure listeners do nothing now\n sub.listener = fillOutListener<Q, any>({});\n\n this.#subscriptions.delete(sub.subscriptionId);\n this.#endedSubscriptions.add(sub.subscriptionId);\n this.#sendSubscribeMessage();\n\n // If we have no more subscriptions, we can disconnect the websocket\n // however we should wait a bit to see if we get any more subscriptions.\n // For example, when switching between react views, you may unsubscribe\n // in the old view and subscribe in the new view. We don't need to re-establish\n // the websocket connection in that case.\n if (this.#maybeDisconnectTimeout) {\n // We reset the timeout on every unsubscribe so its always at least 15s from\n // the last time we are empty. E.g.:\n // - 0s: Subscribe(A)\n // - 10s: Unsubscribe(A)\n // - 11s: Subscribe(B)\n // - 20s: Unsubscribe(B)\n // If we do not clear out the timeout we would disconnect at 25s but that would only be\n // 5s after the last subscription was removed instead of at 35s for the desired 15s.\n clearTimeout(this.#maybeDisconnectTimeout);\n }\n this.#maybeDisconnectTimeout = setTimeout(() => {\n this.#maybeDisconnectTimeout = undefined;\n if (this.#subscriptions.size === 0) {\n this.#cycleWebsocket();\n }\n }, 15_000 /* ms */);\n }\n\n async #ensureWebsocket() {\n if (this.#ws == null) {\n const { baseUrl, tokenProvider } = this.#client;\n const url = constructWebsocketUrl(\n baseUrl,\n await this.#client.ontologyRid,\n );\n\n const token = await tokenProvider();\n\n // tokenProvider is async, there could potentially be a race to create the websocket.\n // Only the first call to reach here will find a null this.#ws, the rest will bail out\n if (this.#ws == null) {\n // TODO this can probably be exponential backoff with jitter\n // don't reconnect more quickly than MINIMUM_RECONNECT_DELAY\n const nextConnectTime = (this.#lastWsConnect ?? 0)\n + this.MINIMUM_RECONNECT_DELAY_MS;\n if (nextConnectTime > Date.now()) {\n await new Promise((resolve) => {\n setTimeout(resolve, nextConnectTime - Date.now());\n });\n }\n\n this.#lastWsConnect = Date.now();\n\n // we again may have lost the race after our minimum backoff time\n if (this.#ws == null) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"Creating websocket\");\n }\n this.#ws = new WebSocket(url, [`Bearer-${token}`]);\n this.#ws.addEventListener(\"close\", this.#onClose);\n this.#ws.addEventListener(\"message\", this.#onMessage);\n this.#ws.addEventListener(\"open\", this.#onOpen);\n }\n }\n // Allow await-ing the websocket open event if it isn't open already.\n // This needs to happen even for callers that didn't just create this.#ws\n if (this.#ws.readyState === WebSocket.CONNECTING) {\n const ws = this.#ws;\n return new Promise<void>((resolve, reject) => {\n function cleanup() {\n ws.removeEventListener(\"open\", open);\n ws.removeEventListener(\"error\", error);\n ws.removeEventListener(\"close\", cleanup);\n }\n function open() {\n cleanup();\n resolve();\n }\n function error(evt: unknown) {\n cleanup();\n reject(evt);\n }\n ws.addEventListener(\"open\", open);\n ws.addEventListener(\"error\", error);\n ws.addEventListener(\"close\", cleanup);\n });\n }\n }\n }\n\n #onOpen = () => {\n // resubscribe all of the listeners\n this.#sendSubscribeMessage();\n };\n\n #onMessage = async (message: WebSocket.MessageEvent) => {\n const data = JSON.parse(message.data.toString()) as StreamMessage;\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({ payload: data }, \"received message from ws\");\n }\n switch (data.type) {\n case \"objectSetChanged\":\n return void this.#handleMessage_objectSetChanged(data);\n\n case \"refreshObjectSet\":\n return void this.#handleMessage_refreshObjectSet(data);\n\n case \"subscribeResponses\":\n return void this.#handleMessage_subscribeResponses(data);\n\n case \"subscriptionClosed\": {\n return void this.#handleMessage_subscriptionClosed(data);\n }\n\n default:\n const _: never = data;\n invariant(false, \"Unexpected message type\");\n }\n };\n\n #handleMessage_objectSetChanged = async (\n payload: ObjectSetUpdates,\n ) => {\n const sub = this.#subscriptions.get(payload.id);\n if (sub == null) return;\n\n const objectUpdates = payload.updates.filter((update) =>\n update.type === \"object\"\n );\n const referenceUpdates = payload.updates.filter((update) =>\n update.type === \"reference\"\n );\n const osdkObjectsWithReferenceUpdates = await Promise.all(\n referenceUpdates.map(async (o) => {\n const osdkObjectArray = await this.#client.objectFactory2(\n this.#client,\n [{\n __apiName: o.objectType,\n __primaryKey: sub.primaryKeyPropertyName != null\n ? o.primaryKey[sub.primaryKeyPropertyName]\n : undefined,\n ...o.primaryKey,\n [o.property]: o.value,\n }],\n sub.interfaceApiName,\n false,\n undefined,\n false,\n await this.#fetchInterfaceMapping(\n o.objectType,\n sub.interfaceApiName,\n ),\n ) as Array<Osdk.Instance<any, never, any>>;\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: \"ADDED_OR_UPDATED\" as ObjectState,\n }\n : undefined;\n }),\n );\n\n for (const osdkObject of osdkObjectsWithReferenceUpdates) {\n if (osdkObject != null) {\n try {\n sub.listener.onChange?.(osdkObject);\n } catch (error) {\n this.#logger?.error(error, \"Error in onChange callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n }\n }\n\n const osdkObjects = await Promise.all(objectUpdates.map(async (o) => {\n const keysToDelete = Object.keys(o.object).filter((key) =>\n sub.requestedReferenceProperties.includes(key)\n );\n for (const key of keysToDelete) {\n delete o.object[key];\n }\n\n const osdkObjectArray = await this.#client.objectFactory2(\n this.#client,\n [o.object],\n sub.interfaceApiName,\n false,\n undefined,\n false,\n await this.#fetchInterfaceMapping(\n o.object.__apiName,\n sub.interfaceApiName,\n ),\n ) as Array<Osdk.Instance<any, never, any>>;\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: o.state,\n }\n : undefined;\n }));\n\n for (const osdkObject of osdkObjects) {\n if (osdkObject != null) {\n try {\n sub.listener.onChange?.(osdkObject);\n } catch (error) {\n this.#logger?.error(error, \"Error in onChange callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n }\n }\n };\n\n async #fetchInterfaceMapping(\n objectTypeApiName: string,\n interfaceApiName: string | undefined,\n ): Promise<Record<string, Record<string, Record<string, string>>>> {\n if (interfaceApiName == null) return {};\n const interfaceMap = (await this.#client.ontologyProvider\n .getObjectDefinition(objectTypeApiName)).interfaceMap;\n return {\n [interfaceApiName]: {\n [objectTypeApiName]: interfaceMap[interfaceApiName],\n },\n };\n }\n\n #handleMessage_refreshObjectSet = (payload: RefreshObjectSet) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n try {\n sub.listener.onOutOfDate();\n } catch (error) {\n this.#logger?.error(error, \"Error in onOutOfDate callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n };\n\n #handleMessage_subscribeResponses = (\n payload: ObjectSetSubscribeResponses,\n ) => {\n const { id, responses } = payload;\n\n const subs = this.#pendingSubscriptions.get(id);\n invariant(subs, `should have a pending subscription for ${id}`);\n this.#pendingSubscriptions.delete(id);\n\n for (let i = 0; i < responses.length; i++) {\n const sub = subs[i];\n const response = responses[i];\n\n switch (response.type) {\n case \"error\":\n this.#tryCatchOnError(sub, true, response.errors);\n this.#unsubscribe(sub, \"error\");\n break;\n\n case \"qos\":\n // the server has requested that we tear down our websocket and reconnect to help load balance\n this.#cycleWebsocket();\n break;\n\n case \"success\":\n // `\"preparing\"` should only be the status on an initial subscribe.\n const shouldFireOutOfDate = sub.status === \"expired\"\n || sub.status === \"reconnecting\";\n\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({ shouldFireOutOfDate }, \"success\");\n }\n sub.status = \"subscribed\";\n if (sub.subscriptionId !== response.id) {\n // might be the temporary one\n this.#subscriptions.delete(sub.subscriptionId);\n sub.subscriptionId = response.id;\n this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId\n }\n try {\n if (shouldFireOutOfDate) sub.listener.onOutOfDate();\n else sub.listener.onSuccessfulSubscription();\n } catch (error) {\n this.#logger?.error(\n error,\n \"Error in onOutOfDate or onSuccessfulSubscription callback\",\n );\n this.#tryCatchOnError(sub, false, error);\n }\n break;\n default:\n this.#tryCatchOnError(sub, true, response);\n }\n }\n };\n\n #handleMessage_subscriptionClosed(payload: SubscriptionClosed) {\n const sub = this.#subscriptions.get(payload.id);\n if (sub == null && this.#endedSubscriptions.has(payload.id)) return;\n invariant(sub, `Expected subscription id ${payload.id}`);\n this.#tryCatchOnError(sub, true, payload.cause);\n this.#unsubscribe(sub, \"error\");\n }\n\n #onClose = (event: WebSocket.CloseEvent) => {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({ event }, \"Received close event from ws\", event);\n }\n // TODO we should probably throttle this so we don't abuse the backend\n this.#cycleWebsocket();\n };\n\n #cycleWebsocket = () => {\n if (this.#ws) {\n this.#ws.removeEventListener(\"open\", this.#onOpen);\n this.#ws.removeEventListener(\"message\", this.#onMessage);\n this.#ws.removeEventListener(\"close\", this.#onClose);\n\n if (\n this.#ws.readyState !== WebSocket.CLOSING\n && this.#ws.readyState !== WebSocket.CLOSED\n ) {\n this.#ws.close();\n }\n this.#ws = undefined;\n }\n\n // if we have any listeners that are still depending on us, go ahead and reopen the websocket\n if (this.#subscriptions.size > 0) {\n if (process.env.NODE_ENV !== \"production\") {\n for (const s of this.#subscriptions.values()) {\n invariant(\n s.status !== \"done\" && s.status !== \"error\",\n \"should not have done/error subscriptions still\",\n );\n }\n }\n\n for (const s of this.#subscriptions.values()) {\n if (s.status === \"subscribed\") s.status = \"reconnecting\";\n }\n\n // we don't care about the result of this (we want cycleWebsocket to be fire and forget)\n // just that it happens\n void this.#ensureWebsocket();\n }\n };\n\n #tryCatchOnError = (\n sub: Subscription<any, any>,\n subscriptionClosed: boolean,\n error: any,\n ) => {\n try {\n sub.listener.onError({ subscriptionClosed: subscriptionClosed, error });\n } catch (onErrorError) {\n // eslint-disable-next-line no-console\n console.error(\n `Error encountered in an onError callback for an OSDK subscription`,\n onErrorError,\n );\n // eslint-disable-next-line no-console\n console.error(\n `This onError call was triggered by an error in another callback`,\n error,\n );\n // eslint-disable-next-line no-console\n console.error(\n `The subscription has been closed.`,\n error,\n );\n\n if (!subscriptionClosed) {\n this.#logger?.error(error, \"Error in onError callback\");\n this.#unsubscribe(sub, \"error\");\n this.#tryCatchOnError(sub, true, onErrorError);\n }\n }\n };\n}\n\n/** @internal */\nexport function constructWebsocketUrl(\n baseUrl: string,\n ontologyRid: string,\n) {\n const base = new URL(baseUrl);\n const url = new URL(\n `api/v2/ontologySubscriptions/ontologies/${ontologyRid}/streamSubscriptions`,\n base,\n );\n url.protocol = url.protocol.replace(\"https\", \"wss\");\n return url;\n}\n\nlet uuidCounter = 0;\n\nfunction nextUuid() {\n return `00000000-0000-0000-0000-${\n (uuidCounter++).toString().padStart(12, \"0\")\n }`;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ObjectSetListenerWebsocket.js","names":["WebSocket","invariant","MINIMUM_RECONNECT_DELAY_MS","doNothing","fillOutListener","onChange","onError","onOutOfDate","onSuccessfulSubscription","isReady","sub","subscriptionIsDone","status","ObjectSetListenerWebsocket","instances","WeakMap","getInstance","client","instance","get","clientCacheKey","set","ws","lastWsConnect","logger","pendingSubscriptions","Map","subscriptions","endedSubscriptions","Set","maybeDisconnectTimeout","constructor","minimumReconnectDelayMs","child","msgPrefix","baseUrl","startsWith","process","env","NODE_ENV","subscribe","objectType","objectSet","listener","properties","objOrInterfaceDef","type","ontologyProvider","getObjectDefinition","apiName","getInterfaceDefinition","objectProperties","referenceProperties","length","Object","keys","filter","p","primaryKeyPropertyName","undefined","primaryKeyApiName","requestedProperties","requestedReferenceProperties","subscriptionId","nextUuid","interfaceApiName","initiateSubscribe","unsubscribe","#initiateSubscribe","debug","ensureWebsocket","readyState","OPEN","sendSubscribeMessage","error","tryCatchOnError","#sendSubscribeMessage","readySubs","values","id","requests","map","propertySet","referenceSet","payload","send","JSON","stringify","#unsubscribe","newStatus","delete","add","clearTimeout","setTimeout","size","cycleWebsocket","#ensureWebsocket","tokenProvider","url","constructWebsocketUrl","ontologyRid","token","nextConnectTime","Date","now","Promise","resolve","addEventListener","onClose","onMessage","onOpen","CONNECTING","reject","cleanup","removeEventListener","open","evt","#onOpen","message","data","parse","toString","handleMessage_objectSetChanged","handleMessage_refreshObjectSet","handleMessage_subscribeResponses","handleMessage_subscriptionClosed","objectUpdates","updates","update","referenceUpdates","osdkObjectsWithReferenceUpdates","all","o","osdkObjectArray","objectFactory2","__apiName","__primaryKey","primaryKey","property","value","fetchInterfaceMapping","singleOsdkObject","object","state","osdkObjects","keysToDelete","key","includes","osdkObject","#fetchInterfaceMapping","objectTypeApiName","interfaceMap","responses","subs","i","response","errors","shouldFireOutOfDate","#handleMessage_subscriptionClosed","has","cause","event","#cycleWebsocket","CLOSING","CLOSED","close","s","#tryCatchOnError","subscriptionClosed","onErrorError","console","base","URL","protocol","replace","uuidCounter","padStart"],"sources":["ObjectSetListenerWebsocket.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {\n ObjectOrInterfaceDefinition,\n ObjectSetSubscription,\n Osdk,\n PropertyKeys,\n} from \"@osdk/api\";\nimport type {\n ObjectSet,\n ObjectSetStreamSubscribeRequest,\n ObjectSetStreamSubscribeRequests,\n ObjectSetSubscribeResponses,\n ObjectSetUpdates,\n ObjectState,\n RefreshObjectSet,\n StreamMessage,\n SubscriptionClosed,\n} from \"@osdk/foundry.ontologies\";\nimport WebSocket from \"isomorphic-ws\";\nimport invariant from \"tiny-invariant\";\nimport type { Logger } from \"../Logger.js\";\nimport type { ClientCacheKey, MinimalClient } from \"../MinimalClientContext.js\";\n\nconst MINIMUM_RECONNECT_DELAY_MS = 5 * 1000;\n\n/** Noop function to reduce conditional checks */\nfunction doNothing() {}\n\n/**\n * Converts an ObjectSetListener to one where all the functions are defined.\n */\nfunction fillOutListener<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n>(\n {\n onChange = doNothing,\n onError = doNothing,\n onOutOfDate = doNothing,\n onSuccessfulSubscription = doNothing,\n }: ObjectSetSubscription.Listener<Q, P>,\n): Required<ObjectSetSubscription.Listener<Q, P>> {\n return { onChange, onError, onOutOfDate, onSuccessfulSubscription };\n}\n\ninterface Subscription<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n> {\n listener: Required<ObjectSetSubscription.Listener<Q, P>>;\n requestedProperties: Array<P>;\n requestedReferenceProperties: Array<P>;\n objectSet: ObjectSet;\n\n subscriptionId: string;\n isReady?: boolean;\n status:\n | \"preparing\"\n | \"subscribed\"\n | \"done\"\n | \"expired\"\n | \"error\"\n | \"reconnecting\";\n\n interfaceApiName?: string;\n primaryKeyPropertyName?: string;\n}\n\nfunction isReady<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n>(\n sub: Subscription<Q, P>,\n): sub is Subscription<Q, P> & { temporaryObjectSetId: string } {\n return sub.isReady != null;\n}\n\nfunction subscriptionIsDone(sub: Subscription<any, any>) {\n return sub.status === \"done\" || sub.status === \"error\";\n}\n\n/** @internal */\nexport class ObjectSetListenerWebsocket {\n static #instances = new WeakMap<\n ClientCacheKey,\n ObjectSetListenerWebsocket\n >();\n readonly MINIMUM_RECONNECT_DELAY_MS: number;\n\n // FIXME\n static getInstance(client: MinimalClient): ObjectSetListenerWebsocket {\n let instance = ObjectSetListenerWebsocket.#instances.get(\n client.clientCacheKey,\n );\n if (instance == null) {\n instance = new ObjectSetListenerWebsocket(client);\n ObjectSetListenerWebsocket.#instances.set(\n client.clientCacheKey,\n instance,\n );\n }\n return instance;\n }\n\n #ws: WebSocket | undefined;\n #lastWsConnect = 0;\n #client: MinimalClient;\n\n #logger?: Logger;\n\n /**\n * map of requestId to all active subscriptions at the time of the request\n */\n #pendingSubscriptions = new Map<\n string,\n Subscription<any, any>[]\n >();\n\n /**\n * Map of subscriptionId to Subscription. Note: the subscriptionId may be\n * temporary and not the actual subscriptionId from the server.\n */\n #subscriptions = new Map<\n string,\n Subscription<any, any>\n >();\n\n #endedSubscriptions = new Set<\n string\n >();\n\n #maybeDisconnectTimeout: ReturnType<typeof setTimeout> | undefined;\n\n // DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM\n constructor(\n client: MinimalClient,\n {\n minimumReconnectDelayMs = MINIMUM_RECONNECT_DELAY_MS,\n } = {},\n ) {\n this.MINIMUM_RECONNECT_DELAY_MS = minimumReconnectDelayMs;\n this.#client = client;\n this.#logger = client.logger?.child({}, {\n msgPrefix: \"<OSW> \",\n });\n invariant(\n client.baseUrl.startsWith(\"https://\")\n || client.baseUrl.startsWith(\"http://\"),\n \"Stack must be a URL\",\n );\n }\n\n async subscribe<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n >(\n objectType: ObjectOrInterfaceDefinition,\n objectSet: ObjectSet,\n listener: ObjectSetSubscription.Listener<Q, P>,\n properties: Array<P> = [],\n ): Promise<() => void> {\n const objOrInterfaceDef = objectType.type === \"object\"\n ? await this.#client.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n )\n : await this.#client.ontologyProvider.getInterfaceDefinition(\n objectType.apiName,\n );\n\n let objectProperties: Array<P> = [];\n let referenceProperties: Array<P> = [];\n\n if (properties.length === 0) {\n properties = Object.keys(objOrInterfaceDef.properties) as Array<P>;\n }\n\n objectProperties = properties.filter((p) =>\n objOrInterfaceDef.properties[p].type !== \"geotimeSeriesReference\"\n );\n\n referenceProperties = properties.filter((p) =>\n objOrInterfaceDef.properties[p].type === \"geotimeSeriesReference\"\n );\n\n const sub: Subscription<Q, P> = {\n listener: fillOutListener<Q, P>(listener),\n objectSet,\n primaryKeyPropertyName: objOrInterfaceDef.type === \"interface\"\n ? undefined\n : objOrInterfaceDef.primaryKeyApiName,\n requestedProperties: objectProperties,\n requestedReferenceProperties: referenceProperties,\n status: \"preparing\",\n // Since we don't have a real subscription id yet but we need to keep\n // track of this reference, we can just use a random uuid.\n subscriptionId: `TMP-${nextUuid()}}`,\n interfaceApiName: objOrInterfaceDef.type === \"object\"\n ? undefined\n : objOrInterfaceDef.apiName,\n };\n\n this.#subscriptions.set(sub.subscriptionId, sub);\n\n // actually prepares the subscription, ensures the ws is ready, and sends\n // a subscribe message. We don't want to block on this.\n void this.#initiateSubscribe(sub);\n\n return () => {\n this.#unsubscribe(sub);\n };\n }\n\n /**\n * Called at least once for every subscription.\n *\n * - Resets pending expiry\n * - Recreates temporary object set\n * - Triggers a full subscribe message\n *\n * @returns\n */\n async #initiateSubscribe(sub: Subscription<any, any>) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\"#initiateSubscribe()\");\n }\n\n try {\n await this.#ensureWebsocket();\n\n // the consumer may have already unsubscribed before we are ready to request a subscription\n // so we have to acquire the pendingSubscription after the await.\n if (subscriptionIsDone(sub)) {\n return;\n }\n sub.isReady = true;\n // if we aren't open, then this happens after we #onConnect\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#sendSubscribeMessage();\n }\n } catch (error) {\n this.#logger?.error(error, \"Error in #initiateSubscribe\");\n this.#tryCatchOnError(sub, true, error);\n }\n }\n\n #sendSubscribeMessage() {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\"#sendSubscribeMessage()\");\n }\n // If two calls to `.subscribe()` happen at once (or if the connection is reset),\n // we may have multiple subscriptions that don't have a subscriptionId yet,\n // so we filter those out.\n const readySubs = [...this.#subscriptions.values()].filter(isReady);\n\n const id = nextUuid();\n // responses come back as an array of subIds, so we need to know the sources\n this.#pendingSubscriptions.set(id, readySubs);\n\n // every subscribe message \"overwrites\" the previous ones that are not\n // re-included, so we have to reconstitute the entire list of subscriptions\n const subscribe: ObjectSetStreamSubscribeRequests = {\n id,\n requests: readySubs.map<ObjectSetStreamSubscribeRequest>((\n {\n objectSet,\n requestedProperties,\n requestedReferenceProperties,\n interfaceApiName,\n },\n ) => {\n return {\n objectSet: objectSet,\n propertySet: requestedProperties,\n referenceSet: requestedReferenceProperties,\n };\n }),\n };\n\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\n { payload: subscribe },\n \"sending subscribe message\",\n );\n }\n this.#ws?.send(JSON.stringify(subscribe));\n }\n\n #unsubscribe<Q extends ObjectOrInterfaceDefinition>(\n sub: Subscription<Q, any>,\n newStatus: \"done\" | \"error\" = \"done\",\n ) {\n if (subscriptionIsDone(sub)) {\n // if we are already done, we don't need to do anything\n return;\n }\n\n sub.status = newStatus;\n\n // make sure listeners do nothing now\n sub.listener = fillOutListener<Q, any>({});\n\n this.#subscriptions.delete(sub.subscriptionId);\n this.#endedSubscriptions.add(sub.subscriptionId);\n this.#sendSubscribeMessage();\n\n // If we have no more subscriptions, we can disconnect the websocket\n // however we should wait a bit to see if we get any more subscriptions.\n // For example, when switching between react views, you may unsubscribe\n // in the old view and subscribe in the new view. We don't need to re-establish\n // the websocket connection in that case.\n if (this.#maybeDisconnectTimeout) {\n // We reset the timeout on every unsubscribe so its always at least 15s from\n // the last time we are empty. E.g.:\n // - 0s: Subscribe(A)\n // - 10s: Unsubscribe(A)\n // - 11s: Subscribe(B)\n // - 20s: Unsubscribe(B)\n // If we do not clear out the timeout we would disconnect at 25s but that would only be\n // 5s after the last subscription was removed instead of at 35s for the desired 15s.\n clearTimeout(this.#maybeDisconnectTimeout);\n }\n this.#maybeDisconnectTimeout = setTimeout(() => {\n this.#maybeDisconnectTimeout = undefined;\n if (this.#subscriptions.size === 0) {\n this.#cycleWebsocket();\n }\n }, 15_000 /* ms */);\n }\n\n async #ensureWebsocket() {\n if (this.#ws == null) {\n const { baseUrl, tokenProvider } = this.#client;\n const url = constructWebsocketUrl(\n baseUrl,\n await this.#client.ontologyRid,\n );\n\n const token = await tokenProvider();\n\n // tokenProvider is async, there could potentially be a race to create the websocket.\n // Only the first call to reach here will find a null this.#ws, the rest will bail out\n if (this.#ws == null) {\n // TODO this can probably be exponential backoff with jitter\n // don't reconnect more quickly than MINIMUM_RECONNECT_DELAY\n const nextConnectTime = (this.#lastWsConnect ?? 0)\n + this.MINIMUM_RECONNECT_DELAY_MS;\n if (nextConnectTime > Date.now()) {\n await new Promise((resolve) => {\n setTimeout(resolve, nextConnectTime - Date.now());\n });\n }\n\n this.#lastWsConnect = Date.now();\n\n // we again may have lost the race after our minimum backoff time\n if (this.#ws == null) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug(\"Creating websocket\");\n }\n this.#ws = new WebSocket(url, [`Bearer-${token}`]);\n this.#ws.addEventListener(\"close\", this.#onClose);\n this.#ws.addEventListener(\"message\", this.#onMessage);\n this.#ws.addEventListener(\"open\", this.#onOpen);\n }\n }\n // Allow await-ing the websocket open event if it isn't open already.\n // This needs to happen even for callers that didn't just create this.#ws\n if (this.#ws.readyState === WebSocket.CONNECTING) {\n const ws = this.#ws;\n return new Promise<void>((resolve, reject) => {\n function cleanup() {\n ws.removeEventListener(\"open\", open);\n ws.removeEventListener(\"error\", error);\n ws.removeEventListener(\"close\", cleanup);\n }\n function open() {\n cleanup();\n resolve();\n }\n function error(evt: unknown) {\n cleanup();\n reject(evt);\n }\n ws.addEventListener(\"open\", open);\n ws.addEventListener(\"error\", error);\n ws.addEventListener(\"close\", cleanup);\n });\n }\n }\n }\n\n #onOpen = () => {\n // resubscribe all of the listeners\n this.#sendSubscribeMessage();\n };\n\n #onMessage = async (message: WebSocket.MessageEvent): Promise<void> => {\n const data = JSON.parse(message.data.toString()) as StreamMessage;\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug({ payload: data }, \"received message from ws\");\n }\n switch (data.type) {\n case \"objectSetChanged\":\n await this.#handleMessage_objectSetChanged(data);\n return;\n\n case \"refreshObjectSet\":\n this.#handleMessage_refreshObjectSet(data);\n return;\n\n case \"subscribeResponses\":\n this.#handleMessage_subscribeResponses(data);\n return;\n\n case \"subscriptionClosed\": {\n this.#handleMessage_subscriptionClosed(data);\n return;\n }\n\n default:\n const _: never = data;\n invariant(false, \"Unexpected message type\");\n }\n };\n\n #handleMessage_objectSetChanged = async (\n payload: ObjectSetUpdates,\n ) => {\n const sub = this.#subscriptions.get(payload.id);\n if (sub == null) return;\n\n const objectUpdates = payload.updates.filter((update) =>\n update.type === \"object\"\n );\n const referenceUpdates = payload.updates.filter((update) =>\n update.type === \"reference\"\n );\n const osdkObjectsWithReferenceUpdates = await Promise.all(\n referenceUpdates.map(async (o) => {\n const osdkObjectArray = await this.#client.objectFactory2(\n this.#client,\n [{\n __apiName: o.objectType,\n __primaryKey: sub.primaryKeyPropertyName != null\n ? o.primaryKey[sub.primaryKeyPropertyName]\n : undefined,\n ...o.primaryKey,\n [o.property]: o.value,\n }],\n sub.interfaceApiName,\n false,\n undefined,\n false,\n await this.#fetchInterfaceMapping(\n o.objectType,\n sub.interfaceApiName,\n ),\n );\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject as Osdk.Instance<any, never, any>,\n state: \"ADDED_OR_UPDATED\" as ObjectState,\n }\n : undefined;\n }),\n );\n\n for (const update of osdkObjectsWithReferenceUpdates) {\n if (update != null) {\n try {\n sub.listener.onChange?.(update);\n } catch (error) {\n this.#logger?.error(error, \"Error in onChange callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n }\n }\n\n const osdkObjects = await Promise.all(objectUpdates.map(async (o) => {\n const keysToDelete = Object.keys(o.object).filter((key) =>\n sub.requestedReferenceProperties.includes(key)\n );\n for (const key of keysToDelete) {\n delete o.object[key];\n }\n\n const osdkObjectArray = await this.#client.objectFactory2(\n this.#client,\n [o.object],\n sub.interfaceApiName,\n false,\n undefined,\n false,\n await this.#fetchInterfaceMapping(\n o.object.__apiName,\n sub.interfaceApiName,\n ),\n ) as Array<Osdk.Instance<any, never, any>>;\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: o.state,\n }\n : undefined;\n }));\n\n for (const osdkObject of osdkObjects) {\n if (osdkObject != null) {\n try {\n sub.listener.onChange?.(osdkObject);\n } catch (error) {\n this.#logger?.error(error, \"Error in onChange callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n }\n }\n };\n\n async #fetchInterfaceMapping(\n objectTypeApiName: string,\n interfaceApiName: string | undefined,\n ): Promise<Record<string, Record<string, Record<string, string>>>> {\n if (interfaceApiName == null) return {};\n const interfaceMap = (await this.#client.ontologyProvider\n .getObjectDefinition(objectTypeApiName)).interfaceMap;\n return {\n [interfaceApiName]: {\n [objectTypeApiName]: interfaceMap[interfaceApiName],\n },\n };\n }\n\n #handleMessage_refreshObjectSet = (payload: RefreshObjectSet) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n try {\n sub.listener.onOutOfDate();\n } catch (error) {\n this.#logger?.error(error, \"Error in onOutOfDate callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n };\n\n #handleMessage_subscribeResponses = (\n payload: ObjectSetSubscribeResponses,\n ) => {\n const { id, responses } = payload;\n\n const subs = this.#pendingSubscriptions.get(id);\n invariant(subs, `should have a pending subscription for ${id}`);\n this.#pendingSubscriptions.delete(id);\n\n for (let i = 0; i < responses.length; i++) {\n const sub = subs[i];\n const response = responses[i];\n\n switch (response.type) {\n case \"error\":\n this.#tryCatchOnError(sub, true, response.errors);\n this.#unsubscribe(sub, \"error\");\n break;\n\n case \"qos\":\n // the server has requested that we tear down our websocket and reconnect to help load balance\n this.#cycleWebsocket();\n break;\n\n case \"success\":\n // `\"preparing\"` should only be the status on an initial subscribe.\n const shouldFireOutOfDate = sub.status === \"expired\"\n || sub.status === \"reconnecting\";\n\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug({ shouldFireOutOfDate }, \"success\");\n }\n sub.status = \"subscribed\";\n if (sub.subscriptionId !== response.id) {\n // might be the temporary one\n this.#subscriptions.delete(sub.subscriptionId);\n sub.subscriptionId = response.id;\n this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId\n }\n try {\n if (shouldFireOutOfDate) sub.listener.onOutOfDate();\n else sub.listener.onSuccessfulSubscription();\n } catch (error) {\n this.#logger?.error(\n error,\n \"Error in onOutOfDate or onSuccessfulSubscription callback\",\n );\n this.#tryCatchOnError(sub, false, error);\n }\n break;\n default:\n this.#tryCatchOnError(sub, true, response);\n }\n }\n };\n\n #handleMessage_subscriptionClosed(payload: SubscriptionClosed) {\n const sub = this.#subscriptions.get(payload.id);\n if (sub == null && this.#endedSubscriptions.has(payload.id)) return;\n invariant(sub, `Expected subscription id ${payload.id}`);\n this.#tryCatchOnError(sub, true, payload.cause);\n this.#unsubscribe(sub, \"error\");\n }\n\n #onClose = (event: WebSocket.CloseEvent) => {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.debug({ event }, \"Received close event from ws\", event);\n }\n // TODO we should probably throttle this so we don't abuse the backend\n this.#cycleWebsocket();\n };\n\n #cycleWebsocket = () => {\n if (this.#ws) {\n this.#ws.removeEventListener(\"open\", this.#onOpen);\n this.#ws.removeEventListener(\"message\", this.#onMessage);\n this.#ws.removeEventListener(\"close\", this.#onClose);\n\n if (\n this.#ws.readyState !== WebSocket.CLOSING\n && this.#ws.readyState !== WebSocket.CLOSED\n ) {\n this.#ws.close();\n }\n this.#ws = undefined;\n }\n\n // if we have any listeners that are still depending on us, go ahead and reopen the websocket\n if (this.#subscriptions.size > 0) {\n if (process.env.NODE_ENV !== \"production\") {\n for (const s of this.#subscriptions.values()) {\n invariant(\n s.status !== \"done\" && s.status !== \"error\",\n \"should not have done/error subscriptions still\",\n );\n }\n }\n\n for (const s of this.#subscriptions.values()) {\n if (s.status === \"subscribed\") s.status = \"reconnecting\";\n }\n\n // we don't care about the result of this (we want cycleWebsocket to be fire and forget)\n // just that it happens\n void this.#ensureWebsocket();\n }\n };\n\n #tryCatchOnError = (\n sub: Subscription<any, any>,\n subscriptionClosed: boolean,\n error: any,\n ) => {\n try {\n sub.listener.onError({ subscriptionClosed: subscriptionClosed, error });\n } catch (onErrorError) {\n // eslint-disable-next-line no-console\n console.error(\n `Error encountered in an onError callback for an OSDK subscription`,\n onErrorError,\n );\n // eslint-disable-next-line no-console\n console.error(\n `This onError call was triggered by an error in another callback`,\n error,\n );\n // eslint-disable-next-line no-console\n console.error(\n `The subscription has been closed.`,\n error,\n );\n\n if (!subscriptionClosed) {\n this.#logger?.error(error, \"Error in onError callback\");\n this.#unsubscribe(sub, \"error\");\n this.#tryCatchOnError(sub, true, onErrorError);\n }\n }\n };\n}\n\n/** @internal */\nexport function constructWebsocketUrl(\n baseUrl: string,\n ontologyRid: string,\n) {\n const base = new URL(baseUrl);\n const url = new URL(\n `api/v2/ontologySubscriptions/ontologies/${ontologyRid}/streamSubscriptions`,\n base,\n );\n url.protocol = url.protocol.replace(\"https\", \"wss\");\n return url;\n}\n\nlet uuidCounter = 0;\n\nfunction nextUuid() {\n return `00000000-0000-0000-0000-${\n (uuidCounter++).toString().padStart(12, \"0\")\n }`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"createObjectSet.js","names":["createWithPropertiesObjectSet","modernToLegacyWhereClause","aggregate","fetchPageInternal","fetchPageWithErrorsInternal","fetchSingle","fetchSingleWithErrors","augmentRequestContext","resolveBaseObjectSetType","isWireObjectSet","ObjectSetListenerWebsocket","isObjectTypeDefinition","def","type","isObjectSet","o","objectSetDefinitions","get","getWireObjectSet","objectSet","WeakMap","createObjectSet","objectType","clientCtx","base","bind","globalThis","finalMethodCall","fetchPage","fetchPageWithErrors","where","clause","objectSetFactory","pivotTo","createSearchAround","union","objectSets","map","os","intersect","subtract","asyncIter","args","$nextPageToken","undefined","result","nextPageToken","obj","data","fetchOne","primaryKey","options","createWithPk","fetchOneWithErrors","subscribe","listener","opts","pendingSubscribe","getInstance","properties","unsubscribe","withProperties","definitionMap","Map","derivedProperties","key","Object","keys","derivedPropertyDefinition","$objectSetInternals","link","set","objDef","ontologyProvider","getObjectDefinition","apiName","withPk","field","primaryKeyApiName","value"],"sources":["createObjectSet.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {\n AsyncIterArgs,\n Augments,\n FetchPageResult,\n LinkedType,\n LinkNames,\n NullabilityAdherence,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n Result,\n SelectArg,\n SingleOsdkResult,\n} from \"@osdk/api\";\nimport type { MinimalObjectSet } from \"@osdk/api/unstable\";\nimport type {\n DerivedPropertyDefinition,\n ObjectSet as WireObjectSet,\n} from \"@osdk/foundry.ontologies\";\nimport { createWithPropertiesObjectSet } from \"../derivedProperties/createWithPropertiesObjectSet.js\";\nimport { modernToLegacyWhereClause } from \"../internal/conversions/modernToLegacyWhereClause.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport { aggregate } from \"../object/aggregate.js\";\nimport {\n fetchPageInternal,\n fetchPageWithErrorsInternal,\n} from \"../object/fetchPage.js\";\nimport { fetchSingle, fetchSingleWithErrors } from \"../object/fetchSingle.js\";\nimport { augmentRequestContext } from \"../util/augmentRequestContext.js\";\nimport { resolveBaseObjectSetType } from \"../util/objectSetUtils.js\";\nimport { isWireObjectSet } from \"../util/WireObjectSet.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\n\nfunction isObjectTypeDefinition(\n def: ObjectOrInterfaceDefinition,\n): def is ObjectTypeDefinition {\n return def.type === \"object\";\n}\n\n/* @internal */\nexport function isObjectSet(o: any): o is ObjectSet<any> {\n return o != null && typeof o === \"object\"\n && isWireObjectSet(objectSetDefinitions.get(o));\n}\n\n/** @internal */\nexport function getWireObjectSet(\n objectSet: ObjectSet<any> | MinimalObjectSet<any>,\n): WireObjectSet {\n return objectSetDefinitions.get(objectSet)!;\n}\n\nconst objectSetDefinitions = new WeakMap<\n any,\n WireObjectSet\n>();\n\n/** @internal */\nexport function createObjectSet<Q extends ObjectOrInterfaceDefinition>(\n objectType: Q,\n clientCtx: MinimalClient,\n objectSet: WireObjectSet = resolveBaseObjectSetType(objectType),\n): ObjectSet<Q> {\n const base: ObjectSet<Q> = {\n aggregate: (aggregate<Q, any>).bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"aggregate\" })),\n objectType,\n objectSet,\n ),\n\n fetchPage: fetchPageInternal.bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"fetchPage\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPage\"],\n\n fetchPageWithErrors: fetchPageWithErrorsInternal.bind(\n globalThis,\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchPageWithErrors\" }),\n ),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPageWithErrors\"],\n\n where: (clause) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"filter\",\n objectSet: objectSet,\n where: modernToLegacyWhereClause(clause, objectType),\n });\n },\n\n pivotTo: function<L extends LinkNames<Q>>(\n type: L,\n ): ObjectSet<LinkedType<Q, L>> {\n return createSearchAround(type)();\n },\n\n union: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"union\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n intersect: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"intersect\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n subtract: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"subtract\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n asyncIter: async function*<\n L extends PropertyKeys<Q>,\n R extends boolean,\n const A extends Augments,\n S extends NullabilityAdherence = NullabilityAdherence.Default,\n >(\n args?: AsyncIterArgs<Q, L, R, A, S>,\n ): AsyncIterableIterator<SingleOsdkResult<Q, L, R, S>> {\n let $nextPageToken: string | undefined = undefined;\n do {\n const result: FetchPageResult<\n Q,\n L,\n R,\n S\n > = await fetchPageInternal(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"asyncIter\" }),\n ),\n objectType,\n objectSet,\n { ...args, $nextPageToken },\n );\n $nextPageToken = result.nextPageToken;\n\n for (const obj of result.data) {\n yield obj as SingleOsdkResult<Q, L, R, S>;\n }\n } while ($nextPageToken != null);\n },\n\n fetchOne: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: PrimaryKeyType<Q>,\n options: A,\n ) => {\n return await fetchSingle(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOne\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Osdk<Q>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOne\"],\n\n fetchOneWithErrors: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: Q extends ObjectTypeDefinition ? PrimaryKeyType<Q>\n : never,\n options: A,\n ) => {\n return await fetchSingleWithErrors(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOneWithErrors\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Result<Osdk<Q>>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOneWithErrors\"],\n\n subscribe: (\n listener,\n opts,\n ) => {\n const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(\n clientCtx,\n ).subscribe(\n objectType,\n objectSet,\n listener,\n opts?.properties,\n );\n\n return { unsubscribe: async () => (await pendingSubscribe)() };\n },\n\n withProperties: (clause) => {\n const definitionMap = new Map<any, DerivedPropertyDefinition>();\n\n const derivedProperties: Record<string, DerivedPropertyDefinition> = {};\n for (const key of Object.keys(clause)) {\n const derivedPropertyDefinition = clause\n [key](createWithPropertiesObjectSet(\n objectType,\n { type: \"methodInput\" },\n definitionMap,\n ));\n derivedProperties[key] = definitionMap.get(\n derivedPropertyDefinition,\n )!;\n }\n\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"withProperties\",\n derivedProperties: derivedProperties,\n objectSet: objectSet,\n },\n );\n },\n\n $objectSetInternals: {\n def: objectType,\n },\n };\n\n function createSearchAround<L extends LinkNames<Q>>(link: L) {\n return () => {\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"searchAround\",\n objectSet,\n link,\n },\n );\n };\n }\n\n objectSetDefinitions.set(base, objectSet);\n\n // we are using a type assertion because the marker symbol defined in BaseObjectSet isn't actually used\n // at runtime.\n return base as ObjectSet<Q>;\n}\n\nasync function createWithPk(\n clientCtx: MinimalClient,\n objectType: ObjectTypeDefinition,\n objectSet: WireObjectSet,\n primaryKey: PrimaryKeyType<ObjectTypeDefinition>,\n) {\n const objDef = await clientCtx.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n );\n\n const withPk: WireObjectSet = {\n type: \"filter\",\n objectSet: objectSet,\n where: {\n type: \"eq\",\n field: objDef.primaryKeyApiName,\n value: primaryKey,\n },\n };\n return withPk;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createObjectSet.js","names":["createWithPropertiesObjectSet","modernToLegacyWhereClause","aggregate","fetchPageInternal","fetchPageWithErrorsInternal","fetchSingle","fetchSingleWithErrors","augmentRequestContext","resolveBaseObjectSetType","isWireObjectSet","ObjectSetListenerWebsocket","isObjectTypeDefinition","def","type","isObjectSet","o","objectSetDefinitions","get","getWireObjectSet","objectSet","WeakMap","createObjectSet","objectType","clientCtx","base","bind","globalThis","finalMethodCall","fetchPage","fetchPageWithErrors","where","clause","objectSetFactory","pivotTo","createSearchAround","union","objectSets","map","os","intersect","subtract","asyncIter","args","$nextPageToken","undefined","result","nextPageToken","obj","data","fetchOne","primaryKey","options","createWithPk","fetchOneWithErrors","subscribe","listener","opts","pendingSubscribe","getInstance","properties","unsubscribe","withProperties","definitionMap","Map","derivedProperties","key","Object","keys","derivedPropertyDefinition","$objectSetInternals","link","set","objDef","ontologyProvider","getObjectDefinition","apiName","withPk","field","primaryKeyApiName","value"],"sources":["createObjectSet.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {\n AsyncIterArgs,\n Augments,\n FetchPageResult,\n LinkedType,\n LinkNames,\n NullabilityAdherence,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n Result,\n SelectArg,\n SingleOsdkResult,\n} from \"@osdk/api\";\nimport type { MinimalObjectSet } from \"@osdk/api/unstable\";\nimport type {\n DerivedPropertyDefinition,\n ObjectSet as WireObjectSet,\n} from \"@osdk/foundry.ontologies\";\nimport { createWithPropertiesObjectSet } from \"../derivedProperties/createWithPropertiesObjectSet.js\";\nimport { modernToLegacyWhereClause } from \"../internal/conversions/modernToLegacyWhereClause.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport { aggregate } from \"../object/aggregate.js\";\nimport {\n fetchPageInternal,\n fetchPageWithErrorsInternal,\n} from \"../object/fetchPage.js\";\nimport { fetchSingle, fetchSingleWithErrors } from \"../object/fetchSingle.js\";\nimport { augmentRequestContext } from \"../util/augmentRequestContext.js\";\nimport { resolveBaseObjectSetType } from \"../util/objectSetUtils.js\";\nimport { isWireObjectSet } from \"../util/WireObjectSet.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\n\nfunction isObjectTypeDefinition(\n def: ObjectOrInterfaceDefinition,\n): def is ObjectTypeDefinition {\n return def.type === \"object\";\n}\n\n/* @internal */\nexport function isObjectSet(o: any): o is ObjectSet<any> {\n return o != null && typeof o === \"object\"\n && isWireObjectSet(objectSetDefinitions.get(o));\n}\n\n/** @internal */\nexport function getWireObjectSet(\n objectSet: ObjectSet<any> | MinimalObjectSet<any>,\n): WireObjectSet {\n return objectSetDefinitions.get(objectSet)!;\n}\n\nconst objectSetDefinitions = new WeakMap<\n any,\n WireObjectSet\n>();\n\n/** @internal */\nexport function createObjectSet<Q extends ObjectOrInterfaceDefinition>(\n objectType: Q,\n clientCtx: MinimalClient,\n objectSet: WireObjectSet = resolveBaseObjectSetType(objectType),\n): ObjectSet<Q> {\n const base: ObjectSet<Q> = {\n aggregate: (aggregate<Q, any>).bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"aggregate\" })),\n objectType,\n objectSet,\n ),\n\n fetchPage: fetchPageInternal.bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"fetchPage\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPage\"],\n\n fetchPageWithErrors: fetchPageWithErrorsInternal.bind(\n globalThis,\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchPageWithErrors\" }),\n ),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPageWithErrors\"],\n\n where: (clause) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"filter\",\n objectSet: objectSet,\n where: modernToLegacyWhereClause(clause, objectType),\n });\n },\n\n pivotTo: function<L extends LinkNames<Q>>(\n type: L,\n ): ObjectSet<LinkedType<Q, L>> {\n return createSearchAround(type)();\n },\n\n union: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"union\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n intersect: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"intersect\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n subtract: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"subtract\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n asyncIter: async function*<\n L extends PropertyKeys<Q>,\n R extends boolean,\n const A extends Augments,\n S extends NullabilityAdherence = NullabilityAdherence.Default,\n T extends boolean = false,\n >(\n args?: AsyncIterArgs<Q, L, R, A, S, T>,\n ): AsyncIterableIterator<SingleOsdkResult<Q, L, R, S, {}, T>> {\n let $nextPageToken: string | undefined = undefined;\n do {\n const result: FetchPageResult<\n Q,\n L,\n R,\n S,\n T\n > = await fetchPageInternal(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"asyncIter\" }),\n ),\n objectType,\n objectSet,\n { ...args, $nextPageToken },\n );\n $nextPageToken = result.nextPageToken;\n\n for (const obj of result.data) {\n yield obj as SingleOsdkResult<Q, L, R, S, {}, T>;\n }\n } while ($nextPageToken != null);\n },\n\n fetchOne: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: PrimaryKeyType<Q>,\n options: A,\n ) => {\n return await fetchSingle(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOne\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Osdk<Q>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOne\"],\n\n fetchOneWithErrors: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: Q extends ObjectTypeDefinition ? PrimaryKeyType<Q>\n : never,\n options: A,\n ) => {\n return await fetchSingleWithErrors(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOneWithErrors\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Result<Osdk<Q>>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOneWithErrors\"],\n\n subscribe: (\n listener,\n opts,\n ) => {\n const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(\n clientCtx,\n ).subscribe(\n objectType,\n objectSet,\n listener,\n opts?.properties,\n );\n\n return { unsubscribe: async () => (await pendingSubscribe)() };\n },\n\n withProperties: (clause) => {\n const definitionMap = new Map<any, DerivedPropertyDefinition>();\n\n const derivedProperties: Record<string, DerivedPropertyDefinition> = {};\n for (const key of Object.keys(clause)) {\n const derivedPropertyDefinition = clause\n [key](createWithPropertiesObjectSet(\n objectType,\n { type: \"methodInput\" },\n definitionMap,\n ));\n derivedProperties[key] = definitionMap.get(\n derivedPropertyDefinition,\n )!;\n }\n\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"withProperties\",\n derivedProperties: derivedProperties,\n objectSet: objectSet,\n },\n );\n },\n\n $objectSetInternals: {\n def: objectType,\n },\n };\n\n function createSearchAround<L extends LinkNames<Q>>(link: L) {\n return () => {\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"searchAround\",\n objectSet,\n link,\n },\n );\n };\n }\n\n objectSetDefinitions.set(base, objectSet);\n\n // we are using a type assertion because the marker symbol defined in BaseObjectSet isn't actually used\n // at runtime.\n return base as ObjectSet<Q>;\n}\n\nasync function createWithPk(\n clientCtx: MinimalClient,\n objectType: ObjectTypeDefinition,\n objectSet: WireObjectSet,\n primaryKey: PrimaryKeyType<ObjectTypeDefinition>,\n) {\n const objDef = await clientCtx.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n );\n\n const withPk: WireObjectSet = {\n type: \"filter\",\n objectSet: objectSet,\n where: {\n type: \"eq\",\n field: objDef.primaryKeyApiName,\n value: primaryKey,\n },\n };\n return withPk;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ListPayload.js","names":[],"sources":["ListPayload.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 { Osdk } from \"@osdk/api\";\nimport type { Status } from \"./ObservableClient.js\";\n\nexport interface ListPayload {\n resolvedList: Array<Osdk.Instance<any, never, string>>;\n isOptimistic: boolean;\n lastUpdated: number;\n fetchMore: () => Promise<unknown>;\n hasMore: boolean;\n status: Status;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"ListPayload.js","names":[],"sources":["ListPayload.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 { InterfaceHolder } from \"../object/convertWireToOsdkObjects/InterfaceHolder.js\";\nimport type { ObjectHolder } from \"../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ObserveObjectsArgs } from \"./ObservableClient.js\";\n\nexport interface ListPayload\n extends Omit<ObserveObjectsArgs<any>, \"resolvedList\">\n{\n resolvedList: Array<ObjectHolder | InterfaceHolder>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectPayload.js","names":[],"sources":["ObjectPayload.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 { ObjectTypeDefinition, Osdk } from \"@osdk/api\";\nimport type { Status } from \"./ObservableClient.js\";\n\nexport interface ObjectPayload {\n object: Osdk.Instance<ObjectTypeDefinition> | undefined;\n isOptimistic: boolean;\n status: Status;\n lastUpdated: number;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"ObjectPayload.js","names":[],"sources":["ObjectPayload.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 { ObjectHolder } from \"../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ObserveObjectArgs } from \"./ObservableClient.js\";\n\nexport interface ObjectPayload extends Omit<ObserveObjectArgs<any>, \"object\"> {\n object: ObjectHolder | undefined;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableClient.js","names":["ObservableClientImpl","Store","ObservableClient","createObservableClient","client"],"sources":["ObservableClient.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 {\n ActionDefinition,\n ObjectTypeDefinition,\n PrimaryKeyType,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport type { ActionSignatureFromDef } from \"../actions/applyAction.js\";\nimport type { Client } from \"../Client.js\";\nimport type { Canonical } from \"./internal/Canonical.js\";\nimport { ObservableClientImpl } from \"./internal/ObservableClientImpl.js\";\nimport { Store } from \"./internal/Store.js\";\nimport type { ListPayload } from \"./ListPayload.js\";\nimport type { ObjectPayload } from \"./ObjectPayload.js\";\nimport type { OptimisticBuilder } from \"./OptimisticBuilder.js\";\nimport type { SubFn } from \"./types.js\";\n\nexport type Status = \"init\" | \"loading\" | \"loaded\" | \"error\";\n\nexport namespace ObservableClient {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\n }\n}\n\nexport interface CommonObserveOptions {\n dedupeInterval?: number;\n}\n\nexport interface ObserveOptions {\n mode?: \"offline\" | \"force\";\n}\n\nexport interface ObserveObjectOptions<T extends ObjectTypeDefinition>\n extends ObserveOptions\n{\n select?: PropertyKeys<T>[];\n}\n\nexport type OrderBy<Q extends ObjectTypeDefinition> = {\n [K in PropertyKeys<Q>]?: \"asc\" | \"desc\" | undefined;\n};\n\nexport interface ObserveListOptions<Q extends ObjectTypeDefinition>\n extends CommonObserveOptions, ObserveOptions\n{\n objectType: Q[\"apiName\"] | Q;\n where?: WhereClause<Q>;\n pageSize?: number;\n orderBy?: OrderBy<Q>;\n invalidationMode?: \"in-place\" | \"wait\" | \"reset\";\n expectedLength?: number;\n streamUpdates?: boolean;\n}\n\nexport interface ObservableClient {\n observeObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: ObserveOptions,\n subFn: SubFn<ObjectPayload>,\n ): Unsubscribable;\n\n observeList<T extends ObjectTypeDefinition>(\n options: ObserveListOptions<T>,\n subFn: SubFn<ListPayload>,\n ): Unsubscribable;\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: ObservableClient.ApplyActionOptions,\n ) => Promise<unknown>;\n\n canonicalizeWhereClause: <T extends ObjectTypeDefinition>(\n where: WhereClause<T>,\n ) => Canonical<WhereClause<T>>;\n}\n\nexport function createObservableClient(client: Client): ObservableClient {\n return new ObservableClientImpl(new Store(client));\n}\n\nexport interface Unsubscribable {\n unsubscribe: () => void;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA,SAASA,oBAAoB,QAAQ,oCAAoC;AACzE,SAASC,KAAK,QAAQ,qBAAqB;AAAC,WAQ3BC,gBAAgB;AA4DjC,OAAO,SAASC,sBAAsBA,CAACC,MAAc,EAAoB;EACvE,OAAO,IAAIJ,oBAAoB,CAAC,IAAIC,KAAK,CAACG,MAAM,CAAC,CAAC;AACpD","ignoreList":[]}
1
+ {"version":3,"file":"ObservableClient.js","names":["ObservableClientImpl","Store","ObservableClient","createObservableClient","client"],"sources":["ObservableClient.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 {\n ActionDefinition,\n InterfaceDefinition,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport type { ActionSignatureFromDef } from \"../actions/applyAction.js\";\nimport type { Client } from \"../Client.js\";\nimport type { Canonical } from \"./internal/Canonical.js\";\nimport { ObservableClientImpl } from \"./internal/ObservableClientImpl.js\";\nimport { Store } from \"./internal/Store.js\";\nimport type { OptimisticBuilder } from \"./OptimisticBuilder.js\";\n\nexport type Status = \"init\" | \"loading\" | \"loaded\" | \"error\";\n\nexport interface Observer<T> {\n next: (value: T) => void;\n error: (err: any) => void;\n complete: () => void;\n}\n\nexport namespace ObservableClient {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\n }\n}\n\nexport interface CommonObserveOptions {\n dedupeInterval?: number;\n}\n\nexport interface ObserveOptions {\n mode?: \"offline\" | \"force\";\n}\n\nexport interface ObserveObjectOptions<\n T extends ObjectTypeDefinition | InterfaceDefinition,\n> extends ObserveOptions {\n select?: PropertyKeys<T>[];\n}\n\nexport type OrderBy<Q extends ObjectTypeDefinition | InterfaceDefinition> = {\n [K in PropertyKeys<Q>]?: \"asc\" | \"desc\" | undefined;\n};\n\nexport interface ObserveListOptions<\n Q extends ObjectTypeDefinition | InterfaceDefinition,\n> extends CommonObserveOptions, ObserveOptions {\n type: Pick<Q, \"apiName\" | \"type\">;\n where?: WhereClause<Q>;\n pageSize?: number;\n orderBy?: OrderBy<Q>;\n invalidationMode?: \"in-place\" | \"wait\" | \"reset\";\n expectedLength?: number;\n streamUpdates?: boolean;\n}\n\nexport interface ObserveObjectArgs<T extends ObjectTypeDefinition> {\n object: Osdk.Instance<T> | undefined;\n isOptimistic: boolean;\n status: Status;\n lastUpdated: number;\n}\n\nexport interface ObserveObjectsArgs<\n T extends ObjectTypeDefinition | InterfaceDefinition,\n> {\n resolvedList: Array<Osdk.Instance<T>>;\n isOptimistic: boolean;\n lastUpdated: number;\n fetchMore: () => Promise<unknown>;\n hasMore: boolean;\n status: Status;\n}\n\nexport interface ObservableClient {\n observeObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: ObserveOptions,\n subFn: Observer<ObserveObjectArgs<T>>,\n ): Unsubscribable;\n\n observeList<T extends ObjectTypeDefinition | InterfaceDefinition>(\n options: ObserveListOptions<T>,\n subFn: Observer<ObserveObjectsArgs<T>>,\n ): Unsubscribable;\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: ObservableClient.ApplyActionOptions,\n ) => Promise<unknown>;\n\n canonicalizeWhereClause: <\n T extends ObjectTypeDefinition | InterfaceDefinition,\n >(\n where: WhereClause<T>,\n ) => Canonical<WhereClause<T>>;\n}\n\nexport function createObservableClient(client: Client): ObservableClient {\n return new ObservableClientImpl(new Store(client));\n}\n\nexport interface Unsubscribable {\n unsubscribe: () => void;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA,SAASA,oBAAoB,QAAQ,oCAAoC;AACzE,SAASC,KAAK,QAAQ,qBAAqB;AAAC,WAW3BC,gBAAgB;AAgFjC,OAAO,SAASC,sBAAsBA,CAACC,MAAc,EAAoB;EACvE,OAAO,IAAIJ,oBAAoB,CAAC,IAAIC,KAAK,CAACG,MAAM,CAAC,CAAC;AACpD","ignoreList":[]}
@@ -15,7 +15,7 @@
15
15
  */
16
16
 
17
17
  import { delay } from "msw";
18
- import { createChangedObjects } from "./ChangedObjects.js";
18
+ import { createChangedObjects } from "./Changes.js";
19
19
  import { runOptimisticJob } from "./OptimisticJob.js";
20
20
  const ACTION_DELAY = process.env.NODE_ENV === "production" ? 0 : 1000;
21
21
  export class ActionApplication {
@@ -25,6 +25,9 @@ export class ActionApplication {
25
25
  applyAction = (action, args, {
26
26
  optimisticUpdate
27
27
  } = {}) => {
28
+ const logger = process.env.NODE_ENV !== "production" ? this.store.logger?.child({
29
+ methodName: "applyAction"
30
+ }) : this.store.logger;
28
31
  const removeOptimisticResult = runOptimisticJob(this.store, optimisticUpdate);
29
32
  return (async () => {
30
33
  try {
@@ -35,18 +38,18 @@ export class ActionApplication {
35
38
  const actionResults = await this.store.client(action).applyAction(args, {
36
39
  $returnEdits: true
37
40
  });
38
- if (ACTION_DELAY > 0) {
39
- // eslint-disable-next-line no-console
40
- console.log("action done, pausing");
41
- await delay(ACTION_DELAY);
42
- // eslint-disable-next-line no-console
43
- console.log("action done, pausing done");
41
+ if (process.env.NODE_ENV !== "production") {
42
+ if (ACTION_DELAY > 0) {
43
+ logger?.debug("action done, pausing");
44
+ await delay(ACTION_DELAY);
45
+ logger?.debug("action done, pausing done");
46
+ }
44
47
  }
45
48
  await this.#invalidateActionEditResponse(actionResults);
46
49
  return actionResults;
47
50
  } finally {
48
51
  if (process.env.NODE_ENV !== "production") {
49
- this.store.logger?.debug("optimistic action complete; remove the results");
52
+ logger?.debug("optimistic action complete; remove the results");
50
53
  }
51
54
  // make sure this happens even if the action fails
52
55
  await removeOptimisticResult();
@@ -69,12 +72,24 @@ export class ActionApplication {
69
72
  await Promise.all(promisesToWait);
70
73
 
71
74
  // the action invocation just gives back object ids,
72
- // so we don't want to build the changes object
73
- // until we have up to date values.
74
- changes = this.#changesFromActionEditResponse(value);
75
-
76
- // updates `changes` in place
77
- await this.store.maybeRevalidateLists(changes);
75
+ // but the invalidateObject calls above should have put the
76
+ // actual objects in the cache
77
+ const changes = createChangedObjects();
78
+ for (const changeType of ["addedObjects", "modifiedObjects"]) {
79
+ for (const {
80
+ objectType,
81
+ primaryKey
82
+ } of value[changeType] ?? []) {
83
+ const cacheKey = this.store.getCacheKey("object", objectType, primaryKey);
84
+ // N.B. this probably isn't right. `getValue`() will give you the "top"
85
+ // value but I think we want the "truth" guaranteed.
86
+ const obj = this.store.getValue(cacheKey);
87
+ if (obj && obj.value) {
88
+ changes[changeType].set(objectType, obj.value);
89
+ (changeType === "addedObjects" ? changes.added : changes.modified).add(cacheKey);
90
+ }
91
+ }
92
+ }
78
93
  } else {
79
94
  for (const apiName of value.editedObjectTypes) {
80
95
  typesToInvalidate.add(apiName.toString());
@@ -83,20 +98,5 @@ export class ActionApplication {
83
98
  }
84
99
  return value;
85
100
  };
86
- #changesFromActionEditResponse = value => {
87
- const changes = createChangedObjects();
88
- for (const changeType of ["addedObjects", "modifiedObjects"]) {
89
- for (const {
90
- objectType,
91
- primaryKey
92
- } of value[changeType] ?? []) {
93
- const obj = this.store.getObject(objectType, primaryKey);
94
- if (obj) {
95
- changes[changeType].set(objectType, obj);
96
- }
97
- }
98
- }
99
- return changes;
100
- };
101
101
  }
102
102
  //# sourceMappingURL=ActionApplication.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionApplication.js","names":["delay","createChangedObjects","runOptimisticJob","ACTION_DELAY","process","env","NODE_ENV","ActionApplication","constructor","store","applyAction","action","args","optimisticUpdate","removeOptimisticResult","actionResults","client","$returnEdits","console","log","invalidateActionEditResponse","logger","debug","value","typesToInvalidate","Set","changes","type","promisesToWait","obj","modifiedObjects","push","invalidateObject","objectType","primaryKey","addedObjects","add","Promise","all","changesFromActionEditResponse","maybeRevalidateLists","apiName","editedObjectTypes","toString","invalidateObjectType","changeType","getObject","set"],"sources":["ActionApplication.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 { ActionDefinition, ActionEditResponse } from \"@osdk/api\";\nimport { delay } from \"msw\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\n\nimport { type Changes, createChangedObjects } from \"./ChangedObjects.js\";\nimport { runOptimisticJob } from \"./OptimisticJob.js\";\nimport type { Store } from \"./Store.js\";\n\nconst ACTION_DELAY = process.env.NODE_ENV === \"production\" ? 0 : 1000;\n\nexport class ActionApplication {\n constructor(private store: Store) {}\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: Store.ApplyActionOptions,\n ) => Promise<unknown> = (action, args, { optimisticUpdate } = {}) => {\n const removeOptimisticResult = runOptimisticJob(\n this.store,\n optimisticUpdate,\n );\n return (async () => {\n try {\n // The types for client get confused when we dynamically applyAction so we\n // have to deal with the `any` here and force cast it to what it should be.\n // TODO: Update the types so this doesn't happen!\n\n const actionResults: ActionEditResponse = await this.store.client(\n action,\n ).applyAction(args as any, { $returnEdits: true });\n\n if (ACTION_DELAY > 0) {\n // eslint-disable-next-line no-console\n console.log(\"action done, pausing\");\n await delay(ACTION_DELAY);\n // eslint-disable-next-line no-console\n console.log(\"action done, pausing done\");\n }\n await this.#invalidateActionEditResponse(actionResults);\n return actionResults;\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n this.store.logger?.debug(\n \"optimistic action complete; remove the results\",\n );\n }\n // make sure this happens even if the action fails\n await removeOptimisticResult();\n }\n })();\n };\n\n #invalidateActionEditResponse = async (\n value: ActionEditResponse,\n ): Promise<ActionEditResponse> => {\n const typesToInvalidate = new Set<string>();\n\n let changes: Changes | undefined;\n if (value.type === \"edits\") {\n const promisesToWait: Promise<any>[] = [];\n // TODO we need an backend update for deletes\n for (const obj of value.modifiedObjects) {\n promisesToWait.push(\n this.store.invalidateObject(obj.objectType, obj.primaryKey),\n );\n }\n\n for (const obj of value.addedObjects) {\n promisesToWait.push(\n this.store.invalidateObject(obj.objectType, obj.primaryKey),\n );\n\n typesToInvalidate.add(obj.objectType);\n }\n\n await Promise.all(promisesToWait);\n\n // the action invocation just gives back object ids,\n // so we don't want to build the changes object\n // until we have up to date values.\n changes = this.#changesFromActionEditResponse(value);\n\n // updates `changes` in place\n await this.store.maybeRevalidateLists(changes);\n } else {\n for (const apiName of value.editedObjectTypes) {\n typesToInvalidate.add(apiName.toString());\n await this.store.invalidateObjectType(apiName as string, changes);\n }\n }\n\n return value;\n };\n\n #changesFromActionEditResponse = (value: ActionEditResponse) => {\n const changes = createChangedObjects();\n for (const changeType of [\"addedObjects\", \"modifiedObjects\"] as const) {\n for (const { objectType, primaryKey } of (value[changeType] ?? [])) {\n const obj = this.store.getObject(objectType, primaryKey);\n if (obj) {\n changes[changeType].set(objectType, obj);\n }\n }\n }\n return changes;\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ActionApplication.js","names":["delay","createChangedObjects","runOptimisticJob","ACTION_DELAY","process","env","NODE_ENV","ActionApplication","constructor","store","applyAction","action","args","optimisticUpdate","logger","child","methodName","removeOptimisticResult","actionResults","client","$returnEdits","debug","invalidateActionEditResponse","value","typesToInvalidate","Set","changes","type","promisesToWait","obj","modifiedObjects","push","invalidateObject","objectType","primaryKey","addedObjects","add","Promise","all","changeType","cacheKey","getCacheKey","getValue","set","added","modified","apiName","editedObjectTypes","toString","invalidateObjectType"],"sources":["ActionApplication.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 { ActionDefinition, ActionEditResponse } from \"@osdk/api\";\nimport { delay } from \"msw\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { type Changes, createChangedObjects } from \"./Changes.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { runOptimisticJob } from \"./OptimisticJob.js\";\nimport type { Store } from \"./Store.js\";\n\nconst ACTION_DELAY = process.env.NODE_ENV === \"production\" ? 0 : 1000;\n\nexport class ActionApplication {\n constructor(private store: Store) {}\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: Store.ApplyActionOptions,\n ) => Promise<unknown> = (action, args, { optimisticUpdate } = {}) => {\n const logger = process.env.NODE_ENV !== \"production\"\n ? this.store.logger?.child({ methodName: \"applyAction\" })\n : this.store.logger;\n const removeOptimisticResult = runOptimisticJob(\n this.store,\n optimisticUpdate,\n );\n return (async () => {\n try {\n // The types for client get confused when we dynamically applyAction so we\n // have to deal with the `any` here and force cast it to what it should be.\n // TODO: Update the types so this doesn't happen!\n\n const actionResults: ActionEditResponse = await this.store.client(\n action,\n ).applyAction(args as any, { $returnEdits: true });\n\n if (process.env.NODE_ENV !== \"production\") {\n if (ACTION_DELAY > 0) {\n logger?.debug(\"action done, pausing\");\n await delay(ACTION_DELAY);\n logger?.debug(\"action done, pausing done\");\n }\n }\n await this.#invalidateActionEditResponse(actionResults);\n return actionResults;\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\n \"optimistic action complete; remove the results\",\n );\n }\n // make sure this happens even if the action fails\n await removeOptimisticResult();\n }\n })();\n };\n\n #invalidateActionEditResponse = async (\n value: ActionEditResponse,\n ): Promise<ActionEditResponse> => {\n const typesToInvalidate = new Set<string>();\n\n let changes: Changes | undefined;\n if (value.type === \"edits\") {\n const promisesToWait: Promise<any>[] = [];\n // TODO we need an backend update for deletes\n for (const obj of value.modifiedObjects) {\n promisesToWait.push(\n this.store.invalidateObject(obj.objectType, obj.primaryKey),\n );\n }\n\n for (const obj of value.addedObjects) {\n promisesToWait.push(\n this.store.invalidateObject(obj.objectType, obj.primaryKey),\n );\n\n typesToInvalidate.add(obj.objectType);\n }\n\n await Promise.all(promisesToWait);\n\n // the action invocation just gives back object ids,\n // but the invalidateObject calls above should have put the\n // actual objects in the cache\n const changes = createChangedObjects();\n for (const changeType of [\"addedObjects\", \"modifiedObjects\"] as const) {\n for (const { objectType, primaryKey } of (value[changeType] ?? [])) {\n const cacheKey = this.store.getCacheKey<ObjectCacheKey>(\n \"object\",\n objectType,\n primaryKey,\n );\n // N.B. this probably isn't right. `getValue`() will give you the \"top\"\n // value but I think we want the \"truth\" guaranteed.\n const obj = this.store.getValue(cacheKey);\n if (obj && obj.value) {\n changes[changeType].set(objectType, obj.value);\n (changeType === \"addedObjects\" ? changes.added : changes.modified)\n .add(cacheKey);\n }\n }\n }\n } else {\n for (const apiName of value.editedObjectTypes) {\n typesToInvalidate.add(apiName.toString());\n await this.store.invalidateObjectType(apiName as string, changes);\n }\n }\n\n return value;\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -31,7 +31,7 @@ export function DEBUG_ONLY__cacheKeyToString(x) {
31
31
  */
32
32
  export function DEBUG_ONLY__cacheKeysToString(x) {
33
33
  if (process.env.NODE_ENV !== "production") {
34
- return JSON.stringify(x.map(DEBUG_ONLY__cacheKeyToString), null, 2);
34
+ return "\n - " + x.map(DEBUG_ONLY__cacheKeyToString).join("\n - ");
35
35
  } else {
36
36
  throw new Error("not implemented");
37
37
  }