@osdk/client 0.20.0 → 0.21.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/build/browser/{chunk-T5DZREKX.js → chunk-H4YHNABD.js} +12 -9
  3. package/build/browser/chunk-H4YHNABD.js.map +1 -0
  4. package/build/browser/index.js +3 -3
  5. package/build/browser/index.js.map +1 -1
  6. package/build/browser/public/unstable-do-not-use.js +13 -13
  7. package/build/browser/public/unstable-do-not-use.js.map +1 -1
  8. package/build/cjs/{chunk-VW7XYOFL.cjs → chunk-HCYUJWEE.cjs} +12 -9
  9. package/build/cjs/chunk-HCYUJWEE.cjs.map +1 -0
  10. package/build/cjs/index.cjs +7 -7
  11. package/build/cjs/index.cjs.map +1 -1
  12. package/build/cjs/public/unstable-do-not-use.cjs +19 -19
  13. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  14. package/build/esm/Client.d.ts +1 -1
  15. package/build/esm/MinimalClientContext.d.ts +0 -2
  16. package/build/esm/MinimalClientContext.d.ts.map +1 -1
  17. package/build/esm/{chunk-T5DZREKX.js → chunk-H4YHNABD.js} +12 -9
  18. package/build/esm/chunk-H4YHNABD.js.map +1 -0
  19. package/build/esm/createClient.d.ts +0 -5
  20. package/build/esm/createClient.d.ts.map +1 -1
  21. package/build/esm/createMinimalClient.d.ts +1 -9
  22. package/build/esm/createMinimalClient.d.ts.map +1 -1
  23. package/build/esm/index.js +3 -3
  24. package/build/esm/index.js.map +1 -1
  25. package/build/esm/internal/conversions/legacyToModernSingleAggregationResult.d.ts +1 -5
  26. package/build/esm/internal/conversions/legacyToModernSingleAggregationResult.d.ts.map +1 -1
  27. package/build/esm/internal/conversions/modernToLegacyAggregationClause.d.ts +1 -3
  28. package/build/esm/internal/conversions/modernToLegacyAggregationClause.d.ts.map +1 -1
  29. package/build/esm/internal/conversions/modernToLegacyGroupByClause.d.ts +1 -3
  30. package/build/esm/internal/conversions/modernToLegacyGroupByClause.d.ts.map +1 -1
  31. package/build/esm/internal/conversions/modernToLegacyWhereClause.d.ts +1 -4
  32. package/build/esm/internal/conversions/modernToLegacyWhereClause.d.ts.map +1 -1
  33. package/build/esm/object/aggregate.d.ts +1 -7
  34. package/build/esm/object/aggregate.d.ts.map +1 -1
  35. package/build/esm/object/convertWireToOsdkObjects/ObjectHolder.d.ts +1 -20
  36. package/build/esm/object/convertWireToOsdkObjects/ObjectHolder.d.ts.map +1 -1
  37. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.d.ts +1 -5
  38. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.d.ts.map +1 -1
  39. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.d.ts +1 -5
  40. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.d.ts.map +1 -1
  41. package/build/esm/object/convertWireToOsdkObjects/getDollarAs.d.ts +0 -5
  42. package/build/esm/object/convertWireToOsdkObjects/getDollarAs.d.ts.map +1 -1
  43. package/build/esm/object/convertWireToOsdkObjects/getDollarLink.d.ts +1 -3
  44. package/build/esm/object/convertWireToOsdkObjects/getDollarLink.d.ts.map +1 -1
  45. package/build/esm/object/convertWireToOsdkObjects.d.ts +1 -21
  46. package/build/esm/object/convertWireToOsdkObjects.d.ts.map +1 -1
  47. package/build/esm/object/fetchPage.d.ts +2 -13
  48. package/build/esm/object/fetchPage.d.ts.map +1 -1
  49. package/build/esm/object/fetchSingle.d.ts +1 -6
  50. package/build/esm/object/fetchSingle.d.ts.map +1 -1
  51. package/build/esm/objectSet/ObjectSetFactory.d.ts +1 -5
  52. package/build/esm/objectSet/ObjectSetFactory.d.ts.map +1 -1
  53. package/build/esm/objectSet/ObjectSetListenerWebsocket.d.ts +0 -15
  54. package/build/esm/objectSet/ObjectSetListenerWebsocket.d.ts.map +1 -1
  55. package/build/esm/objectSet/createObjectSet.d.ts +1 -8
  56. package/build/esm/objectSet/createObjectSet.d.ts.map +1 -1
  57. package/build/esm/objectSet/createUnstableObjectSet.d.ts +0 -3
  58. package/build/esm/objectSet/createUnstableObjectSet.d.ts.map +1 -1
  59. package/build/esm/objectSet/toConjureObjectSet.d.ts +1 -6
  60. package/build/esm/objectSet/toConjureObjectSet.d.ts.map +1 -1
  61. package/build/esm/public/unstable-do-not-use.js +13 -13
  62. package/build/esm/public/unstable-do-not-use.js.map +1 -1
  63. package/build/esm/util/WireObjectSet.d.ts +1 -2
  64. package/build/esm/util/WireObjectSet.d.ts.map +1 -1
  65. package/build/esm/util/isOntologyObjectV2.d.ts +1 -2
  66. package/build/esm/util/isOntologyObjectV2.d.ts.map +1 -1
  67. package/build/esm/util/toDataValue.d.ts +1 -8
  68. package/build/esm/util/toDataValue.d.ts.map +1 -1
  69. package/build/esm/util/toDataValueQueries.d.ts +1 -9
  70. package/build/esm/util/toDataValueQueries.d.ts.map +1 -1
  71. package/package.json +12 -12
  72. package/build/browser/chunk-T5DZREKX.js.map +0 -1
  73. package/build/cjs/chunk-VW7XYOFL.cjs.map +0 -1
  74. package/build/esm/chunk-T5DZREKX.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { USER_AGENT } from './chunk-T5DZREKX.js';
2
- export { ActionValidationError, createAttachmentFromRid, createAttachmentUpload, createClient } from './chunk-T5DZREKX.js';
1
+ import { USER_AGENT } from './chunk-H4YHNABD.js';
2
+ export { ActionValidationError, createAttachmentFromRid, createAttachmentUpload, createClient } from './chunk-H4YHNABD.js';
3
3
  export { isOk } from '@osdk/client.api';
4
4
  export { PalantirApiError } from '@osdk/shared.net.errors';
5
5
  import { createSharedClientContext } from '@osdk/shared.client.impl';
@@ -9,5 +9,5 @@ function createPlatformClient(baseUrl, tokenProvider, options = void 0, fetchFn
9
9
  }
10
10
 
11
11
  export { createPlatformClient };
12
- //# sourceMappingURL=out.js.map
12
+ //# sourceMappingURL=index.js.map
13
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/createPlatformClient.ts"],"names":[],"mappings":";;;;;;;;;AAgBA,SAAS,YAAY;AACrB,SAAS,wBAAwB;;;ACDjC,SAAS,iCAAiC;AAcnC,SAAS,qBAAqB,SAAS,eAAe,UAAU,QAAW,UAAU,OAAO;AACjG,SAAO,0BAA0B,SAAS,eAAe,YAAY,OAAO;AAC9E","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\nexport { isOk } from \"@osdk/client.api\";\nexport { PalantirApiError } from \"@osdk/shared.net.errors\";\nexport { ActionValidationError } from \"./actions/ActionValidationError.js\";\nexport { createAttachmentFromRid } from \"./createAttachmentFromRid.js\";\nexport { createClient } from \"./createClient.js\";\nexport { createPlatformClient } from \"./createPlatformClient.js\";\nexport { createAttachmentUpload } from \"./object/AttachmentUpload.js\";","/*\n * Copyright 2024 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 { createSharedClientContext } from \"@osdk/shared.client.impl\";\nimport { USER_AGENT } from \"./util/UserAgent.js\";\n/**\n * Creates a client that can only be used with Platform APIs.\n *\n * If you already have an OSDK Client (from `createClient`), you do not need to\n * create one of these - those clients can be used with Platform APIs as well.\n *\n * @param baseUrl\n * @param tokenProvider\n * @param options Currently unused, reserved for future use.\n * @param fetchFn\n * @returns\n */\nexport function createPlatformClient(baseUrl, tokenProvider, options = undefined, fetchFn = fetch) {\n return createSharedClientContext(baseUrl, tokenProvider, USER_AGENT, fetchFn);\n}"]}
1
+ {"version":3,"sources":["../../src/createPlatformClient.ts"],"names":[],"mappings":";;;;;;AA8BO,SAAS,qBAAqB,OAAS,EAAA,aAAA,EAAe,OAAU,GAAA,KAAA,CAAA,EAAW,UAAU,KAAO,EAAA;AACjG,EAAA,OAAO,yBAA0B,CAAA,OAAA,EAAS,aAAe,EAAA,UAAA,EAAY,OAAO,CAAA,CAAA;AAC9E","file":"index.js","sourcesContent":["/*\n * Copyright 2024 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 { createSharedClientContext } from \"@osdk/shared.client.impl\";\nimport { USER_AGENT } from \"./util/UserAgent.js\";\n/**\n * Creates a client that can only be used with Platform APIs.\n *\n * If you already have an OSDK Client (from `createClient`), you do not need to\n * create one of these - those clients can be used with Platform APIs as well.\n *\n * @param baseUrl\n * @param tokenProvider\n * @param options Currently unused, reserved for future use.\n * @param fetchFn\n * @returns\n */\nexport function createPlatformClient(baseUrl, tokenProvider, options = undefined, fetchFn = fetch) {\n return createSharedClientContext(baseUrl, tokenProvider, USER_AGENT, fetchFn);\n}"]}
@@ -1,5 +1,5 @@
1
- import { createSimpleAsyncCache, createClientInternal, createObjectSet, esm_exports, convertWireToOsdkObjects } from '../chunk-T5DZREKX.js';
2
- export { augment } from '../chunk-T5DZREKX.js';
1
+ import { createSimpleAsyncCache, createClientInternal, createObjectSet, esm_exports, convertWireToOsdkObjects } from '../chunk-H4YHNABD.js';
2
+ export { augment } from '../chunk-H4YHNABD.js';
3
3
  import { symbolClientContext } from '@osdk/shared.client';
4
4
  import { getBulkLinksPage, getLinkTypesForObjectTypes, loadOntologyEntities, createTemporaryObjectSet, loadAllOntologies } from '@osdk/client.unstable';
5
5
  import { batchEnableWatcher } from '@osdk/client.unstable.osw';
@@ -405,7 +405,7 @@ var ObjectSetListenerWebsocket = class _ObjectSetListenerWebsocket {
405
405
  * @returns
406
406
  */
407
407
  async #initiateSubscribe(sub) {
408
- if (process.env.NODE_ENV !== "production") {
408
+ if (process?.env?.NODE_ENV !== "production") {
409
409
  this.#logger?.trace("#initiateSubscribe()");
410
410
  }
411
411
  if (sub.expiry) {
@@ -435,12 +435,12 @@ var ObjectSetListenerWebsocket = class _ObjectSetListenerWebsocket {
435
435
  }
436
436
  }
437
437
  #sendSubscribeMessage() {
438
- if (process.env.NODE_ENV !== "production") {
438
+ if (process?.env?.NODE_ENV !== "production") {
439
439
  this.#logger?.trace("#sendSubscribeMessage()");
440
440
  }
441
441
  const readySubs = [...this.#subscriptions.values()].filter(isReady);
442
442
  if (readySubs.length === 0) {
443
- if (process.env.NODE_ENV !== "production") {
443
+ if (process?.env?.NODE_ENV !== "production") {
444
444
  this.#logger?.trace("#sendSubscribeMessage(): aborting due to no ready subscriptions");
445
445
  }
446
446
  return;
@@ -461,7 +461,7 @@ var ObjectSetListenerWebsocket = class _ObjectSetListenerWebsocket {
461
461
  watchAllLinks: false
462
462
  }))
463
463
  };
464
- if (process.env.NODE_ENV !== "production") {
464
+ if (process?.env?.NODE_ENV !== "production") {
465
465
  this.#logger?.trace({
466
466
  payload: subscribe
467
467
  }, "sending subscribe message");
@@ -469,7 +469,7 @@ var ObjectSetListenerWebsocket = class _ObjectSetListenerWebsocket {
469
469
  this.#ws?.send(JSON.stringify(subscribe));
470
470
  }
471
471
  #expire(sub) {
472
- if (process.env.NODE_ENV !== "production") {
472
+ if (process?.env?.NODE_ENV !== "production") {
473
473
  this.#logger?.trace({
474
474
  subscription: sub
475
475
  }, "#expire()");
@@ -520,7 +520,7 @@ var ObjectSetListenerWebsocket = class _ObjectSetListenerWebsocket {
520
520
  }
521
521
  this.#lastWsConnect = Date.now();
522
522
  if (this.#ws == null) {
523
- if (process.env.NODE_ENV !== "production") {
523
+ if (process?.env?.NODE_ENV !== "production") {
524
524
  this.#logger?.trace("Creating websocket");
525
525
  }
526
526
  this.#ws = new WebSocket(url, [`Bearer-${token}`]);
@@ -557,7 +557,7 @@ var ObjectSetListenerWebsocket = class _ObjectSetListenerWebsocket {
557
557
  };
558
558
  #onMessage = async (message) => {
559
559
  const data = JSON.parse(message.data.toString());
560
- if (process.env.NODE_ENV !== "production") {
560
+ if (process?.env?.NODE_ENV !== "production") {
561
561
  this.#logger?.trace({
562
562
  payload: data
563
563
  }, "received message from ws");
@@ -616,7 +616,7 @@ var ObjectSetListenerWebsocket = class _ObjectSetListenerWebsocket {
616
616
  break;
617
617
  case "success":
618
618
  const shouldFireOutOfDate = sub.status === "expired" || sub.status === "reconnecting";
619
- if (process.env.NODE_ENV !== "production") {
619
+ if (process?.env?.NODE_ENV !== "production") {
620
620
  this.#logger?.trace({
621
621
  shouldFireOutOfDate
622
622
  }, "success");
@@ -641,7 +641,7 @@ var ObjectSetListenerWebsocket = class _ObjectSetListenerWebsocket {
641
641
  this.#unsubscribe(sub, "error");
642
642
  }
643
643
  #onClose = (event) => {
644
- if (process.env.NODE_ENV !== "production") {
644
+ if (process?.env?.NODE_ENV !== "production") {
645
645
  this.#logger?.trace({
646
646
  event
647
647
  }, "Received close event from ws", event);
@@ -681,7 +681,7 @@ var ObjectSetListenerWebsocket = class _ObjectSetListenerWebsocket {
681
681
  this.#ws = void 0;
682
682
  }
683
683
  if (this.#subscriptions.size > 0) {
684
- if (process.env.NODE_ENV !== "production") {
684
+ if (process?.env?.NODE_ENV !== "production") {
685
685
  for (const s of this.#subscriptions.values()) {
686
686
  !(s.status !== "done" && s.status !== "error") ? process.env.NODE_ENV !== "production" ? invariant2(false, "should not have done/error subscriptions still") : invariant2(false) : void 0;
687
687
  }
@@ -862,5 +862,5 @@ function UNSTABLE_createClient(...args) {
862
862
  }
863
863
 
864
864
  export { UNSTABLE_createClient as createClient };
865
- //# sourceMappingURL=out.js.map
865
+ //# sourceMappingURL=unstable-do-not-use.js.map
866
866
  //# sourceMappingURL=unstable-do-not-use.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/__unstable/UNSTABLE_createClient.ts","../../../src/objectSet/ObjectSetListenerWebsocket.ts","../../../src/__unstable/ConjureSupport.ts","../../../src/ontology/makeConjureContext.ts","../../../src/objectSet/conjureUnionType.ts","../../../src/objectSet/toConjureObjectSet.ts","../../../src/objectSet/createUnstableObjectSet.ts","../../../src/__unstable/createBulkLinksAsyncIterFactory.ts","../../../src/pageRequestAsAsyncIter.ts"],"names":["loadAllOntologies","loadOntologyEntities","invariant"],"mappings":"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","sourcesContent":["/*\n * Copyright 2024 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 { symbolClientContext } from \"@osdk/shared.client\";\nimport { createClientInternal } from \"../createClient.js\";\nimport { UNSTABLE_createObjectSet } from \"../objectSet/createUnstableObjectSet.js\";\nimport { createBulkLinksAsyncIterFactory } from \"./createBulkLinksAsyncIterFactory.js\";\nexport function UNSTABLE_createClient(...args) {\n const client = createClientInternal(UNSTABLE_createObjectSet, ...args);\n const unstableClient = Object.defineProperties(client, {\n __UNSTABLE_getBulkLinks: {\n get: () => createBulkLinksAsyncIterFactory(client[symbolClientContext])\n },\n __UNSTABLE_preexistingObjectSet: {\n get: () => (definition, rid) => {\n return UNSTABLE_createObjectSet(definition, client[symbolClientContext], {\n type: \"intersect\",\n objectSets: [{\n type: \"base\",\n objectType: definition.apiName\n }, {\n type: \"reference\",\n reference: rid\n }]\n });\n }\n }\n });\n return unstableClient;\n}","/*\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 { createTemporaryObjectSet, loadAllOntologies, loadOntologyEntities } from \"@osdk/client.unstable\";\nimport { batchEnableWatcher } from \"@osdk/client.unstable.osw\";\nimport { OntologiesV2 } from \"@osdk/internal.foundry\";\nimport WebSocket from \"isomorphic-ws\";\nimport invariant from \"tiny-invariant\";\nimport { metadataCacheClient } from \"../__unstable/ConjureSupport.js\";\nimport { convertWireToOsdkObjects } from \"../object/convertWireToOsdkObjects.js\";\nimport { getObjectSetBaseType, toConjureObjectSet } from \"./toConjureObjectSet.js\";\nconst ONE_DAY_MS = 24 * 60 * 60 * 1000;\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 onChange = doNothing,\n onError = doNothing,\n onOutOfDate = doNothing\n}) {\n return {\n onChange,\n onError,\n onOutOfDate\n };\n}\nfunction isReady(sub) {\n return sub.temporaryObjectSetId != null;\n}\nfunction subscriptionIsDone(sub) {\n return sub.status === \"done\" || sub.status === \"error\";\n}\nexport class ObjectSetListenerWebsocket {\n static #instances = new WeakMap();\n // FIXME\n static getInstance(client) {\n let instance = ObjectSetListenerWebsocket.#instances.get(client.clientCacheKey);\n if (instance == null) {\n instance = new ObjectSetListenerWebsocket(client);\n ObjectSetListenerWebsocket.#instances.set(client.clientCacheKey, instance);\n }\n return instance;\n }\n #ws;\n #lastWsConnect = 0;\n #client;\n #logger;\n\n /**\n * map of requestId to all active subscriptions at the time of the request\n */\n #pendingSubscriptions = new Map();\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 #oswContext;\n #metadataContext;\n #ossContext;\n #maybeDisconnectTimeout;\n\n // DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM\n constructor(client, {\n objectSetExpiryMs = ONE_DAY_MS,\n minimumReconnectDelayMs = MINIMUM_RECONNECT_DELAY_MS\n } = {}) {\n this.OBJECT_SET_EXPIRY_MS = objectSetExpiryMs;\n this.MINIMUM_RECONNECT_DELAY_MS = minimumReconnectDelayMs;\n this.#client = client;\n this.#logger = client.logger?.child({}, {\n msgPrefix: \"<OSW> \"\n });\n !(client.baseUrl.startsWith(\"https://\") || client.baseUrl.startsWith(\"http://\")) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Stack must be a URL\") : invariant(false) : void 0;\n this.#oswContext = {\n baseUrl: client.baseUrl,\n servicePath: \"/object-set-watcher/api\",\n fetchFn: client.fetch,\n tokenProvider: async () => await client.tokenProvider()\n };\n this.#ossContext = {\n ...this.#oswContext,\n servicePath: \"/object-set-service/api\"\n };\n this.#metadataContext = {\n ...this.#oswContext,\n servicePath: \"/ontology-metadata/api\"\n };\n }\n async subscribe(objectSet, listener) {\n if (process.env.TARGET !== \"browser\") {\n // Node 18 does not expose 'crypto' on globalThis, so we need to do it ourselves. This\n // will not be needed after our minimum version is 19 or greater.\n globalThis.crypto ??= (await import(\"node:crypto\")).webcrypto;\n }\n const sub = {\n listener: fillOutListener(listener),\n objectSet,\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-${crypto.randomUUID()}`\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 this.#initiateSubscribe(sub);\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) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#initiateSubscribe()\");\n }\n if (sub.expiry) {\n clearTimeout(sub.expiry);\n }\n // expiry is tied to the temporary object set, which is set to `timeToLive: \"ONE_DAY\"`\n // in `#createTemporaryObjectSet`. They should be in sync\n sub.expiry = setTimeout(() => this.#expire(sub), this.OBJECT_SET_EXPIRY_MS);\n const ontologyRid = await this.#client.ontologyRid;\n try {\n const [temporaryObjectSet] = await Promise.all([\n // create a time-bounded object set representation for watching\n this.#createTemporaryObjectSet(sub.objectSet), this.#ensureWebsocket(),\n // look up the object type's rid and ensure that we have enabled object set watcher for that rid\n // TODO ???\n getObjectSetBaseType(sub.objectSet).then(baseType => OntologiesV2.ObjectTypesV2.getObjectTypeV2(this.#client, ontologyRid, baseType)).then(objectType => this.#enableObjectSetsWatcher([objectType.rid]))]);\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\n // Use new temporary object set id\n sub.temporaryObjectSetId = temporaryObjectSet.objectSetRid;\n\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 sub.listener.onError(error);\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 if (readySubs.length === 0) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#sendSubscribeMessage(): aborting due to no ready subscriptions\");\n }\n return;\n }\n\n // Assumes the node 18 crypto fallback to globalThis in `subscribe` has happened.\n const id = crypto.randomUUID();\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 = {\n id,\n requests: readySubs.map(({\n temporaryObjectSetId\n }) => ({\n objectSet: temporaryObjectSetId,\n objectSetContext: {\n objectSetFilterContext: {\n parameterOverrides: {}\n }\n },\n watchAllLinks: false\n }))\n };\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({\n payload: subscribe\n }, \"sending subscribe message\");\n }\n this.#ws?.send(JSON.stringify(subscribe));\n }\n #expire(sub) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({\n subscription: sub\n }, \"#expire()\");\n }\n // the temporary ObjectSet has expired, we should re-subscribe which will cause the\n // listener to get an onOutOfDate message when it becomes subscribed again\n sub.status = \"expired\";\n this.#initiateSubscribe(sub);\n }\n #unsubscribe(sub, newStatus = \"done\") {\n if (subscriptionIsDone(sub)) {\n // if we are already done, we don't need to do anything\n return;\n }\n sub.status = newStatus;\n // make sure listeners do nothing now\n sub.listener = fillOutListener({});\n if (sub.expiry) {\n clearTimeout(sub.expiry);\n sub.expiry = undefined;\n }\n this.#subscriptions.delete(sub.subscriptionId);\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 async #ensureWebsocket() {\n if (this.#ws == null) {\n const {\n baseUrl,\n tokenProvider\n } = this.#client;\n const base = new URL(baseUrl);\n // TODO: This should be a different endpoint\n const url = `wss://${base.host}/object-set-watcher/ws/subscriptions`;\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) + this.MINIMUM_RECONNECT_DELAY_MS;\n if (nextConnectTime > Date.now()) {\n await new Promise(resolve => {\n setTimeout(resolve, nextConnectTime - Date.now());\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\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((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) {\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 #onOpen = () => {\n // resubscribe all of the listeners\n this.#sendSubscribeMessage();\n };\n #onMessage = async message => {\n const data = JSON.parse(message.data.toString());\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({\n payload: data\n }, \"received message from ws\");\n }\n switch (data.type) {\n case \"objectSetChanged\":\n return this.#handleMessage_objectSetChanged(data.objectSetChanged);\n case \"refreshObjectSet\":\n return this.#handleMessage_refreshObjectSet(data.refreshObjectSet);\n case \"subscribeResponses\":\n return this.#handleMessage_subscribeResponses(data.subscribeResponses);\n case \"subscriptionClosed\":\n {\n const payload = data.subscriptionClosed;\n return this.#handleMessage_subscriptionClosed(payload);\n }\n default:\n const _ = data;\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Unexpected message type\") : invariant(false) : void 0;\n }\n };\n #handleMessage_objectSetChanged = async payload => {\n const sub = this.#subscriptions.get(payload.id);\n !sub ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Expected subscription id ${payload.id}`) : invariant(false) : void 0;\n if (\"confidenceValue\" in payload) {\n sub.listener.onOutOfDate();\n return;\n }\n const objects = payload.updates.filter(function (a) {\n return a.type === \"object\";\n }).map(a => a.object);\n !(objects.length === payload.updates.length) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"currently only support full updates not reference updates\") : invariant(false) : void 0;\n sub.listener.onChange(await convertFoundryToOsdkObjects(this.#client, this.#metadataContext, objects));\n };\n #handleMessage_refreshObjectSet = payload => {\n const sub = this.#subscriptions.get(payload.id);\n !sub ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Expected subscription id ${payload.id}`) : invariant(false) : void 0;\n sub.listener.onOutOfDate();\n };\n #handleMessage_subscribeResponses = payload => {\n const {\n id,\n responses\n } = payload;\n const subs = this.#pendingSubscriptions.get(id);\n !subs ? process.env.NODE_ENV !== \"production\" ? invariant(false, `should have a pending subscription for ${id}`) : invariant(false) : void 0;\n this.#pendingSubscriptions.delete(id);\n for (let i = 0; i < responses.length; i++) {\n const sub = subs[i];\n const response = responses[i];\n switch (response.type) {\n case \"error\":\n sub.listener.onError(response.error);\n this.#unsubscribe(sub, \"error\");\n break;\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 case \"success\":\n // `\"preparing\"` should only be the status on an initial subscribe.\n\n const shouldFireOutOfDate = sub.status === \"expired\" || sub.status === \"reconnecting\";\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({\n shouldFireOutOfDate\n }, \"success\");\n }\n sub.status = \"subscribed\";\n if (sub.subscriptionId !== response.success.id) {\n // might be the temporary one\n this.#subscriptions.delete(sub.subscriptionId);\n sub.subscriptionId = response.success.id;\n this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId\n }\n if (shouldFireOutOfDate) sub.listener.onOutOfDate();\n break;\n default:\n const _ = response;\n sub.listener.onError(response);\n }\n }\n };\n #handleMessage_subscriptionClosed(payload) {\n const sub = this.#subscriptions.get(payload.id);\n !sub ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Expected subscription id ${payload.id}`) : invariant(false) : void 0;\n sub.listener.onError(payload.error);\n this.#unsubscribe(sub, \"error\");\n }\n #onClose = event => {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({\n event\n }, \"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 async #enableObjectSetsWatcher(objectTypeRids) {\n return batchEnableWatcher(this.#oswContext, {\n requests: objectTypeRids\n });\n }\n async #createTemporaryObjectSet(objectSet) {\n const objectSetBaseType = await getObjectSetBaseType(objectSet);\n const mcc = await metadataCacheClient(this.#client);\n const objectInfo = await mcc.forObjectByApiName(objectSetBaseType);\n const propMapping = await objectInfo.getPropertyMapping();\n const temporaryObjectSet = await createTemporaryObjectSet(this.#ossContext, {\n objectSet: toConjureObjectSet(objectSet, propMapping),\n timeToLive: \"ONE_DAY\",\n // MUST keep in sync with the value for expiry in `#initiateSubscribe`.\n objectSetFilterContext: {\n parameterOverrides: {}\n }\n });\n return {\n objectSetRid: temporaryObjectSet.objectSetRid\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 if (this.#ws.readyState !== WebSocket.CLOSING && this.#ws.readyState !== WebSocket.CLOSED) {\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 !(s.status !== \"done\" && s.status !== \"error\") ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"should not have done/error subscriptions still\") : invariant(false) : void 0;\n }\n }\n for (const s of this.#subscriptions.values()) {\n if (s.status === \"subscribed\") s.status = \"reconnecting\";\n }\n this.#ensureWebsocket();\n }\n };\n}\nasync function convertFoundryToOsdkObjects(client, ctx, objects) {\n const osdkObjects = await Promise.all(objects.map(async object => {\n const propertyMapping = await (await (await metadataCacheClient(client)).forObjectByRid(object.type)).getPropertyMapping();\n const convertedObject = Object.fromEntries([...Object.entries(object.properties).map(([key, value]) => {\n return [propertyMapping?.propertyIdToApiNameMapping[key], value];\n }), [propertyMapping?.propertyIdToApiNameMapping[Object.entries(object.key)[0][0]], Object.entries(object.key)[0][1]], [\"__apiName\", propertyMapping?.apiName], [\"$apiName\", propertyMapping?.apiName]]);\n return convertedObject;\n }));\n\n // doesn't care about interfaces\n return await convertWireToOsdkObjects(client, osdkObjects, undefined);\n}\n// Mapping of ObjectRid to Properties\nconst objectTypeMapping = new WeakMap();\nconst objectApiNameToRid = new Map();\nasync function getOntologyPropertyMappingForApiName(client, ctx, objectApiName) {\n if (objectApiNameToRid.has(objectApiName)) {\n return objectTypeMapping.get(ctx)?.get(objectApiNameToRid.get(objectApiName));\n }\n const ontologyRid = await client.ontologyRid;\n const wireObjectType = await OntologiesV2.ObjectTypesV2.getObjectTypeV2(client, ontologyRid, objectApiName);\n return getOntologyPropertyMappingForRid(ctx, ontologyRid, wireObjectType.rid);\n}\nlet cachedAllOntologies;\nasync function getOntologyVersionForRid(ctx, ontologyRid) {\n cachedAllOntologies ??= await loadAllOntologies(ctx, {});\n !cachedAllOntologies.ontologies[ontologyRid] ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"ontology should be loaded\") : invariant(false) : void 0;\n return cachedAllOntologies.ontologies[ontologyRid].currentOntologyVersion;\n}\nasync function getOntologyPropertyMappingForRid(ctx, ontologyRid, objectRid) {\n if (!objectTypeMapping.has(ctx)) {\n objectTypeMapping.set(ctx, new Map());\n }\n if (!objectTypeMapping.get(ctx).has(objectRid)) {\n const ontologyVersion = await getOntologyVersionForRid(ctx, ontologyRid);\n const body = {\n objectTypeVersions: {\n // TODO: Undefined drops this in the body\n [objectRid]: ontologyVersion\n },\n linkTypeVersions: {},\n loadRedacted: false,\n includeObjectTypesWithoutSearchableDatasources: true\n };\n const entities = await loadOntologyEntities(ctx, body);\n !entities.objectTypes[objectRid] ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"object type should be loaded\") : invariant(false) : void 0;\n const propertyIdToApiNameMapping = Object.fromEntries(Object.values(entities.objectTypes[objectRid].propertyTypes).map(property => {\n return [property.id, property.apiName];\n }));\n const propertyApiNameToIdMapping = Object.fromEntries(Object.values(entities.objectTypes[objectRid].propertyTypes).map(property => {\n return [property.apiName, property.id];\n }));\n objectTypeMapping.get(ctx)?.set(objectRid, {\n apiName: entities.objectTypes[objectRid].apiName,\n id: entities.objectTypes[objectRid].id,\n propertyIdToApiNameMapping,\n propertyApiNameToIdMapping\n });\n objectApiNameToRid.set(entities.objectTypes[objectRid].apiName, objectRid);\n }\n return objectTypeMapping.get(ctx)?.get(objectRid);\n}","/*\n * Copyright 2024 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 { getLinkTypesForObjectTypes, loadAllOntologies, loadOntologyEntities } from \"@osdk/client.unstable\";\nimport invariant from \"tiny-invariant\";\nimport { createSimpleAsyncCache, createSimpleCache } from \"../object/SimpleCache.js\";\nimport { makeConjureContext } from \"../ontology/makeConjureContext.js\";\nlet cachedAllOntologies;\nasync function getOntologyVersionForRid(ctx, ontologyRid) {\n cachedAllOntologies ??= await loadAllOntologies(ctx, {});\n !cachedAllOntologies.ontologies[ontologyRid] ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"ontology should be loaded\") : invariant(false) : void 0;\n return cachedAllOntologies.ontologies[ontologyRid].currentOntologyVersion;\n}\nconst strongMemoSync = fn => createSimpleCache(new Map(), fn).get;\nconst weakMemoSync = fn => createSimpleCache(new WeakMap(), fn).get; // FIXME\n\nconst strongMemoAsync = fn => createSimpleAsyncCache(\"strong\", fn).get;\nconst weakMemoAsync = fn => createSimpleAsyncCache(\"weak\", fn).get;\nexport class MetadataClient {\n #client;\n #ctx;\n #logger;\n constructor(client) {\n this.#client = client;\n this.#ctx = makeConjureContext(client, \"/ontology-metadata/api\");\n this.#client.ontologyProvider.getObjectDefinition;\n this.#logger = this.#client.logger?.child({\n mcc: true\n });\n }\n forObjectByRid = strongMemoAsync(async rid => {\n return Promise.resolve({\n getPropertyMapping: this.#objectPropertyMapping.bind(this, rid),\n getLinkMapping: this.#objectLinkMapping.bind(this, rid),\n getRid: () => rid,\n getApiName: async () => (await this.#getConjureObjectType(rid)).apiName\n });\n });\n forObjectByApiName = strongMemoAsync(async objectApiName => {\n const objectDef = await this.#client.ontologyProvider.getObjectDefinition(objectApiName);\n return this.forObjectByRid(objectDef.rid);\n });\n #objectPropertyMapping = strongMemoAsync(async objectTypeRid => {\n const conjureObjectType = await this.#getConjureObjectType(objectTypeRid);\n return createObjectPropertyMapping(conjureObjectType);\n });\n #objectLinkMapping = strongMemoAsync(async objectTypeRid => {\n const linkTypes = await getLinkTypesForObjectTypes(this.#ctx, {\n includeObjectTypesWithoutSearchableDatasources: true,\n loadRedacted: false,\n objectTypeBranches: {},\n objectTypeVersions: {\n [objectTypeRid]: await this.ontologyVersion(\"\")\n }\n });\n !linkTypes.linkTypes[objectTypeRid] ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"link type should be loaded\") : invariant(false) : void 0;\n\n // apiName to content\n const ret = {};\n for (const l of linkTypes.linkTypes[objectTypeRid]) {\n const helper = ({\n apiName\n }, linkSide, otherObjectType) => {\n if (apiName) {\n ret[apiName] = {\n apiName,\n directedLinkTypeRid: {\n linkTypeRid: l.rid,\n linkSide\n },\n otherObjectType\n };\n }\n };\n if (l.definition.type === \"oneToMany\") {\n const {\n oneToMany: {\n objectTypeRidManySide,\n manyToOneLinkMetadata,\n objectTypeRidOneSide,\n oneToManyLinkMetadata\n }\n } = l.definition;\n if (objectTypeRidManySide === objectTypeRid) {\n helper(manyToOneLinkMetadata, \"TARGET\", objectTypeRidOneSide);\n }\n if (objectTypeRidOneSide === objectTypeRid) {\n helper(oneToManyLinkMetadata, \"SOURCE\", objectTypeRidManySide);\n }\n } else if (l.definition.type === \"manyToMany\") {\n const {\n manyToMany: {\n objectTypeRidA,\n objectTypeAToBLinkMetadata,\n objectTypeRidB,\n objectTypeBToALinkMetadata\n }\n } = l.definition;\n if (objectTypeRidA === objectTypeRid) {\n helper(objectTypeAToBLinkMetadata, \"SOURCE\", objectTypeRidB);\n }\n if (objectTypeRidB === objectTypeRid) {\n helper(objectTypeBToALinkMetadata, \"TARGET\", objectTypeRidA);\n }\n }\n }\n return ret;\n });\n #getConjureObjectType = strongMemoAsync(async objectTypeRid => {\n this.#logger?.debug(`getConjureObjectType(${objectTypeRid})`);\n const body = {\n objectTypeVersions: {\n [objectTypeRid]: await this.ontologyVersion(\"\")\n },\n linkTypeVersions: {},\n loadRedacted: false,\n includeObjectTypesWithoutSearchableDatasources: true\n };\n const entities = await loadOntologyEntities(this.#ctx, body);\n !entities.objectTypes[objectTypeRid] ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"object type should be loaded\") : invariant(false) : void 0;\n return entities.objectTypes[objectTypeRid];\n });\n ontologyVersion = strongMemoAsync(async _ => getOntologyVersionForRid(this.#ctx, await this.#client.ontologyRid));\n}\nexport const metadataCacheClient = weakMemoAsync(client => Promise.resolve(new MetadataClient(client)));\nfunction createObjectPropertyMapping(conjureOT) {\n !(conjureOT.primaryKeys.length === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `only one primary key supported, got ${conjureOT.primaryKeys.length}`) : invariant(false) : void 0;\n const pkRid = conjureOT.primaryKeys[0];\n const pkProperty = Object.values(conjureOT.propertyTypes).find(a => a.rid === pkRid);\n if (!pkProperty) {\n throw new Error(`Could not find PK property by rid: ${pkRid}`);\n }\n const propertyIdToApiNameMapping = Object.fromEntries(Object.values(conjureOT.propertyTypes).map(property => {\n return [property.id, property.apiName];\n }));\n const propertyApiNameToIdMapping = Object.fromEntries(Object.values(conjureOT.propertyTypes).map(property => {\n return [property.apiName, property.id];\n }));\n return {\n apiName: conjureOT.apiName,\n id: conjureOT.id,\n propertyIdToApiNameMapping,\n propertyApiNameToIdMapping,\n pk: {\n rid: pkRid,\n apiName: pkProperty.apiName,\n type: pkProperty.type\n }\n };\n}","/*\n * Copyright 2024 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\nexport function makeConjureContext({\n baseUrl,\n fetch: fetchFn,\n tokenProvider\n}, servicePath) {\n return {\n baseUrl,\n servicePath,\n fetchFn,\n tokenProvider\n };\n}","/*\n * Copyright 2024 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\n/**\n * Helper function that creates the shape of a conjure union in fewer bytes than manually declaring it (when compressed)\n *\n * e.g `{type:\"base\",base:{foo:5}}` becomes `a(\"base\",{foo:5})`\n */\nexport function conjureUnionType(type, value) {\n return {\n type,\n [type]: value\n };\n}","/*\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 { conjureUnionType } from \"./conjureUnionType.js\";\nexport function toConjureObjectSet(objectSet, objectPropertyMapping) {\n switch (objectSet.type) {\n case \"base\":\n return conjureUnionType(\"base\", {\n objectTypeId: objectPropertyMapping.id\n });\n case \"static\":\n return conjureUnionType(\"static\", {\n objectRids: objectSet.objects,\n provenance: undefined\n });\n case \"reference\":\n return conjureUnionType(\"referenced\", {\n objectSetRid: objectSet.reference\n });\n case \"filter\":\n return conjureUnionType(\"filtered\", {\n objectSet: toConjureObjectSet(objectSet.objectSet, objectPropertyMapping),\n runtimeDerivedProperties: undefined,\n filter: mapWhereClauseToObjectSetFilter(objectSet.where, objectPropertyMapping)\n });\n case \"union\":\n return conjureUnionType(\"unioned\", {\n objectSets: objectSet.objectSets.map(os => toConjureObjectSet(os, objectPropertyMapping))\n });\n case \"intersect\":\n return conjureUnionType(\"intersected\", {\n objectSets: objectSet.objectSets.map(os => toConjureObjectSet(os, objectPropertyMapping))\n });\n case \"subtract\":\n return conjureUnionType(\"subtracted\", {\n objectSets: objectSet.objectSets.map(os => toConjureObjectSet(os, objectPropertyMapping))\n });\n case \"searchAround\":\n throw new Error(\"not implemented\");\n }\n}\nexport async function getObjectSetBaseType(objectSet) {\n switch (objectSet.type) {\n case \"base\":\n return objectSet.objectType;\n case \"static\":\n // TODO: Get the object type from a wire call\n // This is not supported at the moment by the API anyway\n throw new Error(\"not implemented\");\n case \"reference\":\n // TODO: Get the object type from a wire call\n throw new Error(\"not implemented\");\n case \"filter\":\n return getObjectSetBaseType(objectSet.objectSet);\n case \"union\":\n // Technically you can have multiple ObjectTypes but at the moment we only support one\n return getObjectSetBaseType(objectSet.objectSets[0]);\n case \"intersect\":\n return getObjectSetBaseType(objectSet.objectSets[0]);\n case \"subtract\":\n return getObjectSetBaseType(objectSet.objectSets[0]);\n case \"searchAround\":\n // TODO: Get a mapping using the link\n throw new Error(\"not implemented\");\n }\n}\nfunction mapWhereClauseToObjectSetFilter(objectSetFilter, propertyMapping) {\n switch (objectSetFilter.type) {\n case \"lt\":\n return conjureUnionType(\"range\", {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field],\n lt: objectSetFilter.value,\n lte: undefined,\n gt: undefined,\n gte: undefined\n });\n case \"gt\":\n return conjureUnionType(\"range\", {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field],\n gt: objectSetFilter.value,\n lte: undefined,\n lt: undefined,\n gte: undefined\n });\n case \"lte\":\n return conjureUnionType(\"range\", {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field],\n lte: objectSetFilter.value,\n lt: undefined,\n gt: undefined,\n gte: undefined\n });\n case \"gte\":\n return conjureUnionType(\"range\", {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field],\n gte: objectSetFilter.value,\n lt: undefined,\n lte: undefined,\n gt: undefined\n });\n case \"eq\":\n return conjureUnionType(\"exactMatch\", {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field],\n terms: [objectSetFilter.value]\n });\n case \"and\":\n return conjureUnionType(\"and\", {\n filters: objectSetFilter.value.map(filter => mapWhereClauseToObjectSetFilter(filter, propertyMapping))\n });\n case \"or\":\n return conjureUnionType(\"or\", {\n filters: objectSetFilter.value.map(filter => mapWhereClauseToObjectSetFilter(filter, propertyMapping))\n });\n case \"isNull\":\n return conjureUnionType(\"not\", {\n filter: {\n type: \"hasProperty\",\n hasProperty: {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field]\n }\n }\n });\n case \"not\":\n return conjureUnionType(\"not\", {\n filter: mapWhereClauseToObjectSetFilter(objectSetFilter.value, propertyMapping)\n });\n case \"contains\":\n case \"startsWith\":\n case \"containsAllTermsInOrder\":\n case \"containsAnyTerm\":\n case \"containsAllTerms\":\n case \"withinDistanceOf\":\n case \"withinBoundingBox\":\n case \"intersectsBoundingBox\":\n case \"doesNotIntersectBoundingBox\":\n case \"withinPolygon\":\n case \"intersectsPolygon\":\n case \"doesNotIntersectPolygon\":\n case \"containsAllTermsInOrderPrefixLastTerm\":\n throw new Error(\"not implemented\");\n }\n}","/*\n * Copyright 2024 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 { createObjectSet } from \"./createObjectSet.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\nexport function UNSTABLE_createObjectSet(objectType, clientCtx, objectSet = {\n type: \"base\",\n objectType: objectType[\"apiName\"]\n}) {\n return Object.assign(createObjectSet(objectType, clientCtx, objectSet), {\n subscribe(listener) {\n const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(clientCtx).subscribe(objectSet, listener);\n return async () => (await pendingSubscribe)();\n }\n }\n // cast is needed because we are relying on the where clause doing the right thing via client.createObjectSet\n );\n}","/*\n * Copyright 2024 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 { getBulkLinksPage } from \"@osdk/client.unstable\";\nimport invariant from \"tiny-invariant\";\nimport { conjureUnionType } from \"../objectSet/conjureUnionType.js\";\nimport { makeConjureContext } from \"../ontology/makeConjureContext.js\";\nimport { applyPageToken, getResults, pageRequestAsAsyncIter } from \"../pageRequestAsAsyncIter.js\";\nimport { metadataCacheClient } from \"./ConjureSupport.js\";\nexport function createBulkLinksAsyncIterFactory(ctx) {\n return async function* (objs, linkTypes) {\n if (objs.length === 0) {\n return;\n }\n ctx.logger?.debug(\"Preparing to fetch bulk links\");\n\n // require all objects to be the same type for now\n !objs.every(a => a.$objectType === objs[0].$objectType) ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n const mcc = await metadataCacheClient(ctx);\n const helper = await mcc.forObjectByApiName(objs[0].$objectType);\n const [objectTypeRid, propertyMapping, fullLinkMapping] = await Promise.all([helper.getRid(), helper.getPropertyMapping(), helper.getLinkMapping()]);\n const linkMapping = Object.fromEntries(Object.entries(fullLinkMapping).filter(([apiName]) => linkTypes.includes(apiName)));\n\n // make sure the link being requested exists\n for (const linkType of linkTypes) {\n if (linkMapping[linkType] == null) {\n throw \"Unable to find link type: \" + linkType;\n }\n }\n const req = {\n objectSetContext: {\n forkRid: undefined,\n objectSetFilterContext: {\n parameterOverrides: {}\n },\n ontologyBranchRid: undefined,\n owningRid: undefined,\n reportUsage: undefined,\n workstateRid: undefined\n },\n responseOptions: {\n includeObjectSetEntities: true,\n includeUsageCost: false\n },\n pageSize: 1000,\n pageToken: undefined,\n linksRequests: [{\n directedLinkTypes: Object.values(linkMapping).map(({\n directedLinkTypeRid\n }) => directedLinkTypeRid),\n objects: conjureUnionType(\"objects\", objs.map(o => conjureUnionType(\"objectLocatorV2\", {\n objectTypeRid,\n objectPrimaryKey: {\n [propertyMapping.pk.rid]: conjureUnionType(propertyMapping.pk.type.type, o.$primaryKey)\n }\n })))\n }]\n };\n const bulkLinksIter = pageRequestAsAsyncIter(getBulkLinksPage.bind(undefined, makeConjureContext(ctx, \"/object-set-service/api\")), getResults, applyPageToken, req);\n for await (const item of bulkLinksIter) {\n const {\n objectIdentifier\n } = item;\n const obj = findObject(objectIdentifier, objs);\n for (const link of item.links) {\n const ref = link.link[link.linkSide === \"SOURCE\" ? \"objectSideB\" : \"objectSideA\"];\n const pk = getPrimaryKeyOrThrow(ref);\n const otherObjectApiName = await (await mcc.forObjectByRid(pk.objectTypeRid)).getApiName();\n const mappedLink = Object.values(linkMapping).find(a => a.directedLinkTypeRid.linkTypeRid === link.link.linkTypeRid && a.directedLinkTypeRid.linkSide === link.linkSide);\n if (!mappedLink) throw new Error(\"Could not find link type\"); // should not happens\n\n yield {\n object: obj,\n linkApiName: mappedLink.apiName,\n otherObjectApiName: otherObjectApiName,\n otherObjectPk: pk.pkValue\n };\n }\n }\n };\n}\nfunction findObject(objectIdentifier, objs) {\n const {\n pkValue\n } = getPrimaryKeyOrThrow(objectIdentifier);\n const obj = objs.find(o => o.$primaryKey === pkValue);\n if (obj == null) {\n throw new Error(`Needed to find object with pk ${pkValue}} and could not`);\n }\n return obj;\n}\nfunction getPrimaryKeyOrThrow(ref) {\n if (\"type\" in ref && ref.type !== \"objectLocatorV2\") {\n throw new Error(\"We do not support looking up object by rid\");\n }\n const pks = Object.entries(ref.objectLocatorV2.objectPrimaryKey);\n if (pks.length !== 1) {\n throw new Error(\"Unable to support this request due to multiple pks\");\n }\n return {\n objectTypeRid: ref.objectLocatorV2.objectTypeRid,\n pkValue: pks[0][1][pks[0][1].type]\n };\n}","/*\n * Copyright 2024 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\nexport function getResults(x) {\n return x.results;\n}\nexport function applyPageToken(payload, {\n pageToken\n}) {\n return pageToken ? {\n ...payload,\n pageToken\n } : undefined;\n}\nexport async function* pageRequestAsAsyncIter(call, values, nextArgs, initialPayload) {\n let payload = initialPayload;\n while (payload) {\n const r = await call(payload);\n for (const q of values(r)) {\n yield q;\n }\n payload = nextArgs(payload, r);\n }\n}"]}
1
+ {"version":3,"sources":["../../../src/ontology/makeConjureContext.ts","../../../src/__unstable/ConjureSupport.ts","../../../src/objectSet/conjureUnionType.ts","../../../src/objectSet/toConjureObjectSet.ts","../../../src/objectSet/ObjectSetListenerWebsocket.ts","../../../src/objectSet/createUnstableObjectSet.ts","../../../src/pageRequestAsAsyncIter.ts","../../../src/__unstable/createBulkLinksAsyncIterFactory.ts","../../../src/__unstable/UNSTABLE_createClient.ts"],"names":["invariant"],"mappings":"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","file":"unstable-do-not-use.js","sourcesContent":["/*\n * Copyright 2024 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\nexport function makeConjureContext({\n baseUrl,\n fetch: fetchFn,\n tokenProvider\n}, servicePath) {\n return {\n baseUrl,\n servicePath,\n fetchFn,\n tokenProvider\n };\n}","/*\n * Copyright 2024 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 { getLinkTypesForObjectTypes, loadAllOntologies, loadOntologyEntities } from \"@osdk/client.unstable\";\nimport invariant from \"tiny-invariant\";\nimport { createSimpleAsyncCache, createSimpleCache } from \"../object/SimpleCache.js\";\nimport { makeConjureContext } from \"../ontology/makeConjureContext.js\";\nlet cachedAllOntologies;\nasync function getOntologyVersionForRid(ctx, ontologyRid) {\n cachedAllOntologies ??= await loadAllOntologies(ctx, {});\n !cachedAllOntologies.ontologies[ontologyRid] ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"ontology should be loaded\") : invariant(false) : void 0;\n return cachedAllOntologies.ontologies[ontologyRid].currentOntologyVersion;\n}\nconst strongMemoSync = fn => createSimpleCache(new Map(), fn).get;\nconst weakMemoSync = fn => createSimpleCache(new WeakMap(), fn).get; // FIXME\n\nconst strongMemoAsync = fn => createSimpleAsyncCache(\"strong\", fn).get;\nconst weakMemoAsync = fn => createSimpleAsyncCache(\"weak\", fn).get;\nexport class MetadataClient {\n #client;\n #ctx;\n #logger;\n constructor(client) {\n this.#client = client;\n this.#ctx = makeConjureContext(client, \"/ontology-metadata/api\");\n this.#client.ontologyProvider.getObjectDefinition;\n this.#logger = this.#client.logger?.child({\n mcc: true\n });\n }\n forObjectByRid = strongMemoAsync(async rid => {\n return Promise.resolve({\n getPropertyMapping: this.#objectPropertyMapping.bind(this, rid),\n getLinkMapping: this.#objectLinkMapping.bind(this, rid),\n getRid: () => rid,\n getApiName: async () => (await this.#getConjureObjectType(rid)).apiName\n });\n });\n forObjectByApiName = strongMemoAsync(async objectApiName => {\n const objectDef = await this.#client.ontologyProvider.getObjectDefinition(objectApiName);\n return this.forObjectByRid(objectDef.rid);\n });\n #objectPropertyMapping = strongMemoAsync(async objectTypeRid => {\n const conjureObjectType = await this.#getConjureObjectType(objectTypeRid);\n return createObjectPropertyMapping(conjureObjectType);\n });\n #objectLinkMapping = strongMemoAsync(async objectTypeRid => {\n const linkTypes = await getLinkTypesForObjectTypes(this.#ctx, {\n includeObjectTypesWithoutSearchableDatasources: true,\n loadRedacted: false,\n objectTypeBranches: {},\n objectTypeVersions: {\n [objectTypeRid]: await this.ontologyVersion(\"\")\n }\n });\n !linkTypes.linkTypes[objectTypeRid] ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"link type should be loaded\") : invariant(false) : void 0;\n\n // apiName to content\n const ret = {};\n for (const l of linkTypes.linkTypes[objectTypeRid]) {\n const helper = ({\n apiName\n }, linkSide, otherObjectType) => {\n if (apiName) {\n ret[apiName] = {\n apiName,\n directedLinkTypeRid: {\n linkTypeRid: l.rid,\n linkSide\n },\n otherObjectType\n };\n }\n };\n if (l.definition.type === \"oneToMany\") {\n const {\n oneToMany: {\n objectTypeRidManySide,\n manyToOneLinkMetadata,\n objectTypeRidOneSide,\n oneToManyLinkMetadata\n }\n } = l.definition;\n if (objectTypeRidManySide === objectTypeRid) {\n helper(manyToOneLinkMetadata, \"TARGET\", objectTypeRidOneSide);\n }\n if (objectTypeRidOneSide === objectTypeRid) {\n helper(oneToManyLinkMetadata, \"SOURCE\", objectTypeRidManySide);\n }\n } else if (l.definition.type === \"manyToMany\") {\n const {\n manyToMany: {\n objectTypeRidA,\n objectTypeAToBLinkMetadata,\n objectTypeRidB,\n objectTypeBToALinkMetadata\n }\n } = l.definition;\n if (objectTypeRidA === objectTypeRid) {\n helper(objectTypeAToBLinkMetadata, \"SOURCE\", objectTypeRidB);\n }\n if (objectTypeRidB === objectTypeRid) {\n helper(objectTypeBToALinkMetadata, \"TARGET\", objectTypeRidA);\n }\n }\n }\n return ret;\n });\n #getConjureObjectType = strongMemoAsync(async objectTypeRid => {\n this.#logger?.debug(`getConjureObjectType(${objectTypeRid})`);\n const body = {\n objectTypeVersions: {\n [objectTypeRid]: await this.ontologyVersion(\"\")\n },\n linkTypeVersions: {},\n loadRedacted: false,\n includeObjectTypesWithoutSearchableDatasources: true\n };\n const entities = await loadOntologyEntities(this.#ctx, body);\n !entities.objectTypes[objectTypeRid] ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"object type should be loaded\") : invariant(false) : void 0;\n return entities.objectTypes[objectTypeRid];\n });\n ontologyVersion = strongMemoAsync(async _ => getOntologyVersionForRid(this.#ctx, await this.#client.ontologyRid));\n}\nexport const metadataCacheClient = weakMemoAsync(client => Promise.resolve(new MetadataClient(client)));\nfunction createObjectPropertyMapping(conjureOT) {\n !(conjureOT.primaryKeys.length === 1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `only one primary key supported, got ${conjureOT.primaryKeys.length}`) : invariant(false) : void 0;\n const pkRid = conjureOT.primaryKeys[0];\n const pkProperty = Object.values(conjureOT.propertyTypes).find(a => a.rid === pkRid);\n if (!pkProperty) {\n throw new Error(`Could not find PK property by rid: ${pkRid}`);\n }\n const propertyIdToApiNameMapping = Object.fromEntries(Object.values(conjureOT.propertyTypes).map(property => {\n return [property.id, property.apiName];\n }));\n const propertyApiNameToIdMapping = Object.fromEntries(Object.values(conjureOT.propertyTypes).map(property => {\n return [property.apiName, property.id];\n }));\n return {\n apiName: conjureOT.apiName,\n id: conjureOT.id,\n propertyIdToApiNameMapping,\n propertyApiNameToIdMapping,\n pk: {\n rid: pkRid,\n apiName: pkProperty.apiName,\n type: pkProperty.type\n }\n };\n}","/*\n * Copyright 2024 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\n/**\n * Helper function that creates the shape of a conjure union in fewer bytes than manually declaring it (when compressed)\n *\n * e.g `{type:\"base\",base:{foo:5}}` becomes `a(\"base\",{foo:5})`\n */\nexport function conjureUnionType(type, value) {\n return {\n type,\n [type]: value\n };\n}","/*\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 { conjureUnionType } from \"./conjureUnionType.js\";\n\n/** @internal */\nexport function toConjureObjectSet(objectSet, objectPropertyMapping) {\n switch (objectSet.type) {\n case \"base\":\n return conjureUnionType(\"base\", {\n objectTypeId: objectPropertyMapping.id\n });\n case \"static\":\n return conjureUnionType(\"static\", {\n objectRids: objectSet.objects,\n provenance: undefined\n });\n case \"reference\":\n return conjureUnionType(\"referenced\", {\n objectSetRid: objectSet.reference\n });\n case \"filter\":\n return conjureUnionType(\"filtered\", {\n objectSet: toConjureObjectSet(objectSet.objectSet, objectPropertyMapping),\n runtimeDerivedProperties: undefined,\n filter: mapWhereClauseToObjectSetFilter(objectSet.where, objectPropertyMapping)\n });\n case \"union\":\n return conjureUnionType(\"unioned\", {\n objectSets: objectSet.objectSets.map(os => toConjureObjectSet(os, objectPropertyMapping))\n });\n case \"intersect\":\n return conjureUnionType(\"intersected\", {\n objectSets: objectSet.objectSets.map(os => toConjureObjectSet(os, objectPropertyMapping))\n });\n case \"subtract\":\n return conjureUnionType(\"subtracted\", {\n objectSets: objectSet.objectSets.map(os => toConjureObjectSet(os, objectPropertyMapping))\n });\n case \"searchAround\":\n throw new Error(\"not implemented\");\n }\n}\n\n/** @internal */\nexport async function getObjectSetBaseType(objectSet) {\n switch (objectSet.type) {\n case \"base\":\n return objectSet.objectType;\n case \"static\":\n // TODO: Get the object type from a wire call\n // This is not supported at the moment by the API anyway\n throw new Error(\"not implemented\");\n case \"reference\":\n // TODO: Get the object type from a wire call\n throw new Error(\"not implemented\");\n case \"filter\":\n return getObjectSetBaseType(objectSet.objectSet);\n case \"union\":\n // Technically you can have multiple ObjectTypes but at the moment we only support one\n return getObjectSetBaseType(objectSet.objectSets[0]);\n case \"intersect\":\n return getObjectSetBaseType(objectSet.objectSets[0]);\n case \"subtract\":\n return getObjectSetBaseType(objectSet.objectSets[0]);\n case \"searchAround\":\n // TODO: Get a mapping using the link\n throw new Error(\"not implemented\");\n }\n}\nfunction mapWhereClauseToObjectSetFilter(objectSetFilter, propertyMapping) {\n switch (objectSetFilter.type) {\n case \"lt\":\n return conjureUnionType(\"range\", {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field],\n lt: objectSetFilter.value,\n lte: undefined,\n gt: undefined,\n gte: undefined\n });\n case \"gt\":\n return conjureUnionType(\"range\", {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field],\n gt: objectSetFilter.value,\n lte: undefined,\n lt: undefined,\n gte: undefined\n });\n case \"lte\":\n return conjureUnionType(\"range\", {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field],\n lte: objectSetFilter.value,\n lt: undefined,\n gt: undefined,\n gte: undefined\n });\n case \"gte\":\n return conjureUnionType(\"range\", {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field],\n gte: objectSetFilter.value,\n lt: undefined,\n lte: undefined,\n gt: undefined\n });\n case \"eq\":\n return conjureUnionType(\"exactMatch\", {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field],\n terms: [objectSetFilter.value]\n });\n case \"and\":\n return conjureUnionType(\"and\", {\n filters: objectSetFilter.value.map(filter => mapWhereClauseToObjectSetFilter(filter, propertyMapping))\n });\n case \"or\":\n return conjureUnionType(\"or\", {\n filters: objectSetFilter.value.map(filter => mapWhereClauseToObjectSetFilter(filter, propertyMapping))\n });\n case \"isNull\":\n return conjureUnionType(\"not\", {\n filter: {\n type: \"hasProperty\",\n hasProperty: {\n propertyId: propertyMapping.propertyApiNameToIdMapping[objectSetFilter.field]\n }\n }\n });\n case \"not\":\n return conjureUnionType(\"not\", {\n filter: mapWhereClauseToObjectSetFilter(objectSetFilter.value, propertyMapping)\n });\n case \"contains\":\n case \"startsWith\":\n case \"containsAllTermsInOrder\":\n case \"containsAnyTerm\":\n case \"containsAllTerms\":\n case \"withinDistanceOf\":\n case \"withinBoundingBox\":\n case \"intersectsBoundingBox\":\n case \"doesNotIntersectBoundingBox\":\n case \"withinPolygon\":\n case \"intersectsPolygon\":\n case \"doesNotIntersectPolygon\":\n case \"containsAllTermsInOrderPrefixLastTerm\":\n throw new Error(\"not implemented\");\n }\n}","/*\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 { createTemporaryObjectSet, loadAllOntologies, loadOntologyEntities } from \"@osdk/client.unstable\";\nimport { batchEnableWatcher } from \"@osdk/client.unstable.osw\";\nimport { OntologiesV2 } from \"@osdk/internal.foundry\";\nimport WebSocket from \"isomorphic-ws\";\nimport invariant from \"tiny-invariant\";\nimport { metadataCacheClient } from \"../__unstable/ConjureSupport.js\";\nimport { convertWireToOsdkObjects } from \"../object/convertWireToOsdkObjects.js\";\nimport { getObjectSetBaseType, toConjureObjectSet } from \"./toConjureObjectSet.js\";\nconst ONE_DAY_MS = 24 * 60 * 60 * 1000;\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 onChange = doNothing,\n onError = doNothing,\n onOutOfDate = doNothing\n}) {\n return {\n onChange,\n onError,\n onOutOfDate\n };\n}\nfunction isReady(sub) {\n return sub.temporaryObjectSetId != null;\n}\nfunction subscriptionIsDone(sub) {\n return sub.status === \"done\" || sub.status === \"error\";\n}\n\n/** @internal */\nexport class ObjectSetListenerWebsocket {\n static #instances = new WeakMap();\n // FIXME\n static getInstance(client) {\n let instance = ObjectSetListenerWebsocket.#instances.get(client.clientCacheKey);\n if (instance == null) {\n instance = new ObjectSetListenerWebsocket(client);\n ObjectSetListenerWebsocket.#instances.set(client.clientCacheKey, instance);\n }\n return instance;\n }\n #ws;\n #lastWsConnect = 0;\n #client;\n #logger;\n\n /**\n * map of requestId to all active subscriptions at the time of the request\n */\n #pendingSubscriptions = new Map();\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 #oswContext;\n #metadataContext;\n #ossContext;\n #maybeDisconnectTimeout;\n\n // DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM\n constructor(client, {\n objectSetExpiryMs = ONE_DAY_MS,\n minimumReconnectDelayMs = MINIMUM_RECONNECT_DELAY_MS\n } = {}) {\n this.OBJECT_SET_EXPIRY_MS = objectSetExpiryMs;\n this.MINIMUM_RECONNECT_DELAY_MS = minimumReconnectDelayMs;\n this.#client = client;\n this.#logger = client.logger?.child({}, {\n msgPrefix: \"<OSW> \"\n });\n !(client.baseUrl.startsWith(\"https://\") || client.baseUrl.startsWith(\"http://\")) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Stack must be a URL\") : invariant(false) : void 0;\n this.#oswContext = {\n baseUrl: client.baseUrl,\n servicePath: \"/object-set-watcher/api\",\n fetchFn: client.fetch,\n tokenProvider: async () => await client.tokenProvider()\n };\n this.#ossContext = {\n ...this.#oswContext,\n servicePath: \"/object-set-service/api\"\n };\n this.#metadataContext = {\n ...this.#oswContext,\n servicePath: \"/ontology-metadata/api\"\n };\n }\n async subscribe(objectSet, listener) {\n if (process.env.TARGET !== \"browser\") {\n // Node 18 does not expose 'crypto' on globalThis, so we need to do it ourselves. This\n // will not be needed after our minimum version is 19 or greater.\n globalThis.crypto ??= (await import(\"node:crypto\")).webcrypto;\n }\n const sub = {\n listener: fillOutListener(listener),\n objectSet,\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-${crypto.randomUUID()}`\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 this.#initiateSubscribe(sub);\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) {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#initiateSubscribe()\");\n }\n if (sub.expiry) {\n clearTimeout(sub.expiry);\n }\n // expiry is tied to the temporary object set, which is set to `timeToLive: \"ONE_DAY\"`\n // in `#createTemporaryObjectSet`. They should be in sync\n sub.expiry = setTimeout(() => this.#expire(sub), this.OBJECT_SET_EXPIRY_MS);\n const ontologyRid = await this.#client.ontologyRid;\n try {\n const [temporaryObjectSet] = await Promise.all([\n // create a time-bounded object set representation for watching\n this.#createTemporaryObjectSet(sub.objectSet), this.#ensureWebsocket(),\n // look up the object type's rid and ensure that we have enabled object set watcher for that rid\n // TODO ???\n getObjectSetBaseType(sub.objectSet).then(baseType => OntologiesV2.ObjectTypesV2.getObjectTypeV2(this.#client, ontologyRid, baseType)).then(objectType => this.#enableObjectSetsWatcher([objectType.rid]))]);\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\n // Use new temporary object set id\n sub.temporaryObjectSetId = temporaryObjectSet.objectSetRid;\n\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 sub.listener.onError(error);\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 if (readySubs.length === 0) {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#sendSubscribeMessage(): aborting due to no ready subscriptions\");\n }\n return;\n }\n\n // Assumes the node 18 crypto fallback to globalThis in `subscribe` has happened.\n const id = crypto.randomUUID();\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 = {\n id,\n requests: readySubs.map(({\n temporaryObjectSetId\n }) => ({\n objectSet: temporaryObjectSetId,\n objectSetContext: {\n objectSetFilterContext: {\n parameterOverrides: {}\n }\n },\n watchAllLinks: false\n }))\n };\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({\n payload: subscribe\n }, \"sending subscribe message\");\n }\n this.#ws?.send(JSON.stringify(subscribe));\n }\n #expire(sub) {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({\n subscription: sub\n }, \"#expire()\");\n }\n // the temporary ObjectSet has expired, we should re-subscribe which will cause the\n // listener to get an onOutOfDate message when it becomes subscribed again\n sub.status = \"expired\";\n this.#initiateSubscribe(sub);\n }\n #unsubscribe(sub, newStatus = \"done\") {\n if (subscriptionIsDone(sub)) {\n // if we are already done, we don't need to do anything\n return;\n }\n sub.status = newStatus;\n // make sure listeners do nothing now\n sub.listener = fillOutListener({});\n if (sub.expiry) {\n clearTimeout(sub.expiry);\n sub.expiry = undefined;\n }\n this.#subscriptions.delete(sub.subscriptionId);\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 async #ensureWebsocket() {\n if (this.#ws == null) {\n const {\n baseUrl,\n tokenProvider\n } = this.#client;\n const base = new URL(baseUrl);\n // TODO: This should be a different endpoint\n const url = `wss://${base.host}/object-set-watcher/ws/subscriptions`;\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) + this.MINIMUM_RECONNECT_DELAY_MS;\n if (nextConnectTime > Date.now()) {\n await new Promise(resolve => {\n setTimeout(resolve, nextConnectTime - Date.now());\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\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((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) {\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 #onOpen = () => {\n // resubscribe all of the listeners\n this.#sendSubscribeMessage();\n };\n #onMessage = async message => {\n const data = JSON.parse(message.data.toString());\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({\n payload: data\n }, \"received message from ws\");\n }\n switch (data.type) {\n case \"objectSetChanged\":\n return this.#handleMessage_objectSetChanged(data.objectSetChanged);\n case \"refreshObjectSet\":\n return this.#handleMessage_refreshObjectSet(data.refreshObjectSet);\n case \"subscribeResponses\":\n return this.#handleMessage_subscribeResponses(data.subscribeResponses);\n case \"subscriptionClosed\":\n {\n const payload = data.subscriptionClosed;\n return this.#handleMessage_subscriptionClosed(payload);\n }\n default:\n const _ = data;\n !false ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Unexpected message type\") : invariant(false) : void 0;\n }\n };\n #handleMessage_objectSetChanged = async payload => {\n const sub = this.#subscriptions.get(payload.id);\n !sub ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Expected subscription id ${payload.id}`) : invariant(false) : void 0;\n if (\"confidenceValue\" in payload) {\n sub.listener.onOutOfDate();\n return;\n }\n const objects = payload.updates.filter(function (a) {\n return a.type === \"object\";\n }).map(a => a.object);\n !(objects.length === payload.updates.length) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"currently only support full updates not reference updates\") : invariant(false) : void 0;\n sub.listener.onChange(await convertFoundryToOsdkObjects(this.#client, this.#metadataContext, objects));\n };\n #handleMessage_refreshObjectSet = payload => {\n const sub = this.#subscriptions.get(payload.id);\n !sub ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Expected subscription id ${payload.id}`) : invariant(false) : void 0;\n sub.listener.onOutOfDate();\n };\n #handleMessage_subscribeResponses = payload => {\n const {\n id,\n responses\n } = payload;\n const subs = this.#pendingSubscriptions.get(id);\n !subs ? process.env.NODE_ENV !== \"production\" ? invariant(false, `should have a pending subscription for ${id}`) : invariant(false) : void 0;\n this.#pendingSubscriptions.delete(id);\n for (let i = 0; i < responses.length; i++) {\n const sub = subs[i];\n const response = responses[i];\n switch (response.type) {\n case \"error\":\n sub.listener.onError(response.error);\n this.#unsubscribe(sub, \"error\");\n break;\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 case \"success\":\n // `\"preparing\"` should only be the status on an initial subscribe.\n\n const shouldFireOutOfDate = sub.status === \"expired\" || sub.status === \"reconnecting\";\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({\n shouldFireOutOfDate\n }, \"success\");\n }\n sub.status = \"subscribed\";\n if (sub.subscriptionId !== response.success.id) {\n // might be the temporary one\n this.#subscriptions.delete(sub.subscriptionId);\n sub.subscriptionId = response.success.id;\n this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId\n }\n if (shouldFireOutOfDate) sub.listener.onOutOfDate();\n break;\n default:\n const _ = response;\n sub.listener.onError(response);\n }\n }\n };\n #handleMessage_subscriptionClosed(payload) {\n const sub = this.#subscriptions.get(payload.id);\n !sub ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Expected subscription id ${payload.id}`) : invariant(false) : void 0;\n sub.listener.onError(payload.error);\n this.#unsubscribe(sub, \"error\");\n }\n #onClose = event => {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({\n event\n }, \"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 async #enableObjectSetsWatcher(objectTypeRids) {\n return batchEnableWatcher(this.#oswContext, {\n requests: objectTypeRids\n });\n }\n async #createTemporaryObjectSet(objectSet) {\n const objectSetBaseType = await getObjectSetBaseType(objectSet);\n const mcc = await metadataCacheClient(this.#client);\n const objectInfo = await mcc.forObjectByApiName(objectSetBaseType);\n const propMapping = await objectInfo.getPropertyMapping();\n const temporaryObjectSet = await createTemporaryObjectSet(this.#ossContext, {\n objectSet: toConjureObjectSet(objectSet, propMapping),\n timeToLive: \"ONE_DAY\",\n // MUST keep in sync with the value for expiry in `#initiateSubscribe`.\n objectSetFilterContext: {\n parameterOverrides: {}\n }\n });\n return {\n objectSetRid: temporaryObjectSet.objectSetRid\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 if (this.#ws.readyState !== WebSocket.CLOSING && this.#ws.readyState !== WebSocket.CLOSED) {\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 !(s.status !== \"done\" && s.status !== \"error\") ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"should not have done/error subscriptions still\") : invariant(false) : void 0;\n }\n }\n for (const s of this.#subscriptions.values()) {\n if (s.status === \"subscribed\") s.status = \"reconnecting\";\n }\n this.#ensureWebsocket();\n }\n };\n}\nasync function convertFoundryToOsdkObjects(client, ctx, objects) {\n const osdkObjects = await Promise.all(objects.map(async object => {\n const propertyMapping = await (await (await metadataCacheClient(client)).forObjectByRid(object.type)).getPropertyMapping();\n const convertedObject = Object.fromEntries([...Object.entries(object.properties).map(([key, value]) => {\n return [propertyMapping?.propertyIdToApiNameMapping[key], value];\n }), [propertyMapping?.propertyIdToApiNameMapping[Object.entries(object.key)[0][0]], Object.entries(object.key)[0][1]], [\"__apiName\", propertyMapping?.apiName], [\"$apiName\", propertyMapping?.apiName]]);\n return convertedObject;\n }));\n\n // doesn't care about interfaces\n return await convertWireToOsdkObjects(client, osdkObjects, undefined);\n}\n// Mapping of ObjectRid to Properties\nconst objectTypeMapping = new WeakMap();\nconst objectApiNameToRid = new Map();\nasync function getOntologyPropertyMappingForApiName(client, ctx, objectApiName) {\n if (objectApiNameToRid.has(objectApiName)) {\n return objectTypeMapping.get(ctx)?.get(objectApiNameToRid.get(objectApiName));\n }\n const ontologyRid = await client.ontologyRid;\n const wireObjectType = await OntologiesV2.ObjectTypesV2.getObjectTypeV2(client, ontologyRid, objectApiName);\n return getOntologyPropertyMappingForRid(ctx, ontologyRid, wireObjectType.rid);\n}\nlet cachedAllOntologies;\nasync function getOntologyVersionForRid(ctx, ontologyRid) {\n cachedAllOntologies ??= await loadAllOntologies(ctx, {});\n !cachedAllOntologies.ontologies[ontologyRid] ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"ontology should be loaded\") : invariant(false) : void 0;\n return cachedAllOntologies.ontologies[ontologyRid].currentOntologyVersion;\n}\nasync function getOntologyPropertyMappingForRid(ctx, ontologyRid, objectRid) {\n if (!objectTypeMapping.has(ctx)) {\n objectTypeMapping.set(ctx, new Map());\n }\n if (!objectTypeMapping.get(ctx).has(objectRid)) {\n const ontologyVersion = await getOntologyVersionForRid(ctx, ontologyRid);\n const body = {\n objectTypeVersions: {\n // TODO: Undefined drops this in the body\n [objectRid]: ontologyVersion\n },\n linkTypeVersions: {},\n loadRedacted: false,\n includeObjectTypesWithoutSearchableDatasources: true\n };\n const entities = await loadOntologyEntities(ctx, body);\n !entities.objectTypes[objectRid] ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"object type should be loaded\") : invariant(false) : void 0;\n const propertyIdToApiNameMapping = Object.fromEntries(Object.values(entities.objectTypes[objectRid].propertyTypes).map(property => {\n return [property.id, property.apiName];\n }));\n const propertyApiNameToIdMapping = Object.fromEntries(Object.values(entities.objectTypes[objectRid].propertyTypes).map(property => {\n return [property.apiName, property.id];\n }));\n objectTypeMapping.get(ctx)?.set(objectRid, {\n apiName: entities.objectTypes[objectRid].apiName,\n id: entities.objectTypes[objectRid].id,\n propertyIdToApiNameMapping,\n propertyApiNameToIdMapping\n });\n objectApiNameToRid.set(entities.objectTypes[objectRid].apiName, objectRid);\n }\n return objectTypeMapping.get(ctx)?.get(objectRid);\n}","/*\n * Copyright 2024 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 { createObjectSet } from \"./createObjectSet.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\n/** @internal */\nexport function UNSTABLE_createObjectSet(objectType, clientCtx, objectSet = {\n type: \"base\",\n objectType: objectType[\"apiName\"]\n}) {\n return Object.assign(createObjectSet(objectType, clientCtx, objectSet), {\n subscribe(listener) {\n const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(clientCtx).subscribe(objectSet, listener);\n return async () => (await pendingSubscribe)();\n }\n }\n // cast is needed because we are relying on the where clause doing the right thing via client.createObjectSet\n );\n}","/*\n * Copyright 2024 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\nexport function getResults(x) {\n return x.results;\n}\nexport function applyPageToken(payload, {\n pageToken\n}) {\n return pageToken ? {\n ...payload,\n pageToken\n } : undefined;\n}\nexport async function* pageRequestAsAsyncIter(call, values, nextArgs, initialPayload) {\n let payload = initialPayload;\n while (payload) {\n const r = await call(payload);\n for (const q of values(r)) {\n yield q;\n }\n payload = nextArgs(payload, r);\n }\n}","/*\n * Copyright 2024 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 { getBulkLinksPage } from \"@osdk/client.unstable\";\nimport invariant from \"tiny-invariant\";\nimport { conjureUnionType } from \"../objectSet/conjureUnionType.js\";\nimport { makeConjureContext } from \"../ontology/makeConjureContext.js\";\nimport { applyPageToken, getResults, pageRequestAsAsyncIter } from \"../pageRequestAsAsyncIter.js\";\nimport { metadataCacheClient } from \"./ConjureSupport.js\";\nexport function createBulkLinksAsyncIterFactory(ctx) {\n return async function* (objs, linkTypes) {\n if (objs.length === 0) {\n return;\n }\n ctx.logger?.debug(\"Preparing to fetch bulk links\");\n\n // require all objects to be the same type for now\n !objs.every(a => a.$objectType === objs[0].$objectType) ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n const mcc = await metadataCacheClient(ctx);\n const helper = await mcc.forObjectByApiName(objs[0].$objectType);\n const [objectTypeRid, propertyMapping, fullLinkMapping] = await Promise.all([helper.getRid(), helper.getPropertyMapping(), helper.getLinkMapping()]);\n const linkMapping = Object.fromEntries(Object.entries(fullLinkMapping).filter(([apiName]) => linkTypes.includes(apiName)));\n\n // make sure the link being requested exists\n for (const linkType of linkTypes) {\n if (linkMapping[linkType] == null) {\n throw \"Unable to find link type: \" + linkType;\n }\n }\n const req = {\n objectSetContext: {\n forkRid: undefined,\n objectSetFilterContext: {\n parameterOverrides: {}\n },\n ontologyBranchRid: undefined,\n owningRid: undefined,\n reportUsage: undefined,\n workstateRid: undefined\n },\n responseOptions: {\n includeObjectSetEntities: true,\n includeUsageCost: false\n },\n pageSize: 1000,\n pageToken: undefined,\n linksRequests: [{\n directedLinkTypes: Object.values(linkMapping).map(({\n directedLinkTypeRid\n }) => directedLinkTypeRid),\n objects: conjureUnionType(\"objects\", objs.map(o => conjureUnionType(\"objectLocatorV2\", {\n objectTypeRid,\n objectPrimaryKey: {\n [propertyMapping.pk.rid]: conjureUnionType(propertyMapping.pk.type.type, o.$primaryKey)\n }\n })))\n }]\n };\n const bulkLinksIter = pageRequestAsAsyncIter(getBulkLinksPage.bind(undefined, makeConjureContext(ctx, \"/object-set-service/api\")), getResults, applyPageToken, req);\n for await (const item of bulkLinksIter) {\n const {\n objectIdentifier\n } = item;\n const obj = findObject(objectIdentifier, objs);\n for (const link of item.links) {\n const ref = link.link[link.linkSide === \"SOURCE\" ? \"objectSideB\" : \"objectSideA\"];\n const pk = getPrimaryKeyOrThrow(ref);\n const otherObjectApiName = await (await mcc.forObjectByRid(pk.objectTypeRid)).getApiName();\n const mappedLink = Object.values(linkMapping).find(a => a.directedLinkTypeRid.linkTypeRid === link.link.linkTypeRid && a.directedLinkTypeRid.linkSide === link.linkSide);\n if (!mappedLink) throw new Error(\"Could not find link type\"); // should not happens\n\n yield {\n object: obj,\n linkApiName: mappedLink.apiName,\n otherObjectApiName: otherObjectApiName,\n otherObjectPk: pk.pkValue\n };\n }\n }\n };\n}\nfunction findObject(objectIdentifier, objs) {\n const {\n pkValue\n } = getPrimaryKeyOrThrow(objectIdentifier);\n const obj = objs.find(o => o.$primaryKey === pkValue);\n if (obj == null) {\n throw new Error(`Needed to find object with pk ${pkValue}} and could not`);\n }\n return obj;\n}\nfunction getPrimaryKeyOrThrow(ref) {\n if (\"type\" in ref && ref.type !== \"objectLocatorV2\") {\n throw new Error(\"We do not support looking up object by rid\");\n }\n const pks = Object.entries(ref.objectLocatorV2.objectPrimaryKey);\n if (pks.length !== 1) {\n throw new Error(\"Unable to support this request due to multiple pks\");\n }\n return {\n objectTypeRid: ref.objectLocatorV2.objectTypeRid,\n pkValue: pks[0][1][pks[0][1].type]\n };\n}","/*\n * Copyright 2024 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 { symbolClientContext } from \"@osdk/shared.client\";\nimport { createClientInternal } from \"../createClient.js\";\nimport { UNSTABLE_createObjectSet } from \"../objectSet/createUnstableObjectSet.js\";\nimport { createBulkLinksAsyncIterFactory } from \"./createBulkLinksAsyncIterFactory.js\";\nexport function UNSTABLE_createClient(...args) {\n const client = createClientInternal(UNSTABLE_createObjectSet, ...args);\n const unstableClient = Object.defineProperties(client, {\n __UNSTABLE_getBulkLinks: {\n get: () => createBulkLinksAsyncIterFactory(client[symbolClientContext])\n },\n __UNSTABLE_preexistingObjectSet: {\n get: () => (definition, rid) => {\n return UNSTABLE_createObjectSet(definition, client[symbolClientContext], {\n type: \"intersect\",\n objectSets: [{\n type: \"base\",\n objectType: definition.apiName\n }, {\n type: \"reference\",\n reference: rid\n }]\n });\n }\n }\n });\n return unstableClient;\n}"]}
@@ -985,7 +985,8 @@ function createInterfaceProxyHandler(newDef) {
985
985
  case "$primaryKey":
986
986
  case "$title":
987
987
  case "$objectType":
988
- return Reflect.getOwnPropertyDescriptor(underlying, p);
988
+ case "$rid":
989
+ return underlying[p] != null ? Reflect.getOwnPropertyDescriptor(underlying, p) : void 0;
989
990
  case "$apiName":
990
991
  return {
991
992
  enumerable: true,
@@ -1002,7 +1003,8 @@ function createInterfaceProxyHandler(newDef) {
1002
1003
  }
1003
1004
  },
1004
1005
  ownKeys(target) {
1005
- return ["$apiName", "$objectType", "$primaryKey", "$title", ...Object.keys(newDef.properties)];
1006
+ const underlying = target[UnderlyingOsdkObject];
1007
+ return ["$apiName", "$objectType", "$primaryKey", ...underlying["$rid"] ? ["$rid"] : [], "$title", ...Object.keys(newDef.properties)];
1006
1008
  },
1007
1009
  get(target, p) {
1008
1010
  const underlying = target[UnderlyingOsdkObject];
@@ -1016,6 +1018,7 @@ function createInterfaceProxyHandler(newDef) {
1016
1018
  case "$primaryKey":
1017
1019
  case "$title":
1018
1020
  case "$objectType":
1021
+ case "$rid":
1019
1022
  return underlying[p];
1020
1023
  }
1021
1024
  if (newDef.properties[p] != null) {
@@ -1140,9 +1143,9 @@ function handleWherePair([field, filter]) {
1140
1143
  const withinBody = filter[firstKey];
1141
1144
  if (Array.isArray(withinBody)) {
1142
1145
  return makeGeoFilterBbox(field, withinBody, firstKey);
1143
- } else if ("$bbox" in withinBody) {
1146
+ } else if ("$bbox" in withinBody && withinBody.$bbox != null) {
1144
1147
  return makeGeoFilterBbox(field, withinBody.$bbox, firstKey);
1145
- } else if ("$distance" in withinBody && "$of" in withinBody) {
1148
+ } else if ("$distance" in withinBody && "$of" in withinBody && withinBody.$distance != null && withinBody.$of != null) {
1146
1149
  return {
1147
1150
  type: "withinDistanceOf",
1148
1151
  field,
@@ -1166,7 +1169,7 @@ function handleWherePair([field, filter]) {
1166
1169
  const intersectsBody = filter[firstKey];
1167
1170
  if (Array.isArray(intersectsBody)) {
1168
1171
  return makeGeoFilterBbox(field, intersectsBody, firstKey);
1169
- } else if ("$bbox" in intersectsBody) {
1172
+ } else if ("$bbox" in intersectsBody && intersectsBody.$bbox != null) {
1170
1173
  return makeGeoFilterBbox(field, intersectsBody.$bbox, firstKey);
1171
1174
  } else {
1172
1175
  const coordinates = "$polygon" in intersectsBody ? intersectsBody.$polygon : intersectsBody.coordinates;
@@ -1643,7 +1646,7 @@ function reframeAsObjectInPlace(objectDef, interfaceApiName, rawObj) {
1643
1646
  function isConforming(client, def, obj, propsToCheck) {
1644
1647
  for (const propName of propsToCheck) {
1645
1648
  if (def.properties[propName].nullable === false && obj[propName] == null) {
1646
- if (process.env.NODE_ENV !== "production") {
1649
+ if (process?.env?.NODE_ENV !== "production") {
1647
1650
  client.logger?.debug({
1648
1651
  obj: {
1649
1652
  $objectType: obj["$objectType"],
@@ -1939,7 +1942,7 @@ var createStandardOntologyProviderFactory = (client) => {
1939
1942
  };
1940
1943
 
1941
1944
  // src/util/UserAgent.ts
1942
- var USER_AGENT = `osdk-client/${"0.20.0"}`;
1945
+ var USER_AGENT = `osdk-client/${"0.21.0-beta.0"}`;
1943
1946
 
1944
1947
  // src/createMinimalClient.ts
1945
1948
  function createMinimalClient(metadata, baseUrl, tokenProvider, options = {}, fetchFn = global.fetch, objectSetFactory = createObjectSet) {
@@ -2280,5 +2283,5 @@ exports.createClientInternal = createClientInternal;
2280
2283
  exports.createObjectSet = createObjectSet;
2281
2284
  exports.createSimpleAsyncCache = createSimpleAsyncCache;
2282
2285
  exports.esm_exports = esm_exports2;
2283
- //# sourceMappingURL=out.js.map
2284
- //# sourceMappingURL=chunk-VW7XYOFL.cjs.map
2286
+ //# sourceMappingURL=chunk-HCYUJWEE.cjs.map
2287
+ //# sourceMappingURL=chunk-HCYUJWEE.cjs.map