@osdk/client 2.1.0-beta.2 → 2.1.0-beta.3
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.
- package/CHANGELOG.md +21 -0
- package/build/browser/Client.d.ts +5 -2
- package/build/browser/Client.d.ts.map +1 -1
- package/build/browser/Client.js +2 -1
- package/build/browser/Client.js.map +1 -1
- package/build/browser/MinimalClientContext.d.ts +1 -1
- package/build/browser/MinimalClientContext.d.ts.map +1 -1
- package/build/browser/createClient.d.ts +1 -1
- package/build/browser/createClient.d.ts.map +1 -1
- package/build/browser/createClient.js +10 -2
- package/build/browser/createClient.js.map +1 -1
- package/build/browser/createGeotimeSeriesProperty.d.ts +1 -1
- package/build/browser/createGeotimeSeriesProperty.d.ts.map +1 -1
- package/build/browser/createGeotimeSeriesProperty.js +4 -1
- package/build/browser/createGeotimeSeriesProperty.js.map +1 -1
- package/build/browser/createMinimalClient.js +2 -2
- package/build/browser/createMinimalClient.js.map +1 -1
- package/build/browser/createPlatformClient.d.ts +1 -1
- package/build/browser/createPlatformClient.d.ts.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js +7 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.test.js +10 -10
- package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js +40 -12
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +104 -19
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +1 -1
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/ontology/makeConjureContext.d.ts +1 -1
- package/build/browser/ontology/makeConjureContext.d.ts.map +1 -1
- package/build/browser/queries/applyQuery.js +1 -1
- package/build/browser/queries/applyQuery.js.map +1 -1
- package/build/browser/queries/queries.test.js +30 -2
- package/build/browser/queries/queries.test.js.map +1 -1
- package/build/browser/util/UserAgent.js +1 -1
- package/build/esm/Client.d.ts +5 -2
- package/build/esm/Client.d.ts.map +1 -1
- package/build/esm/Client.js +2 -1
- package/build/esm/Client.js.map +1 -1
- package/build/esm/MinimalClientContext.d.ts +1 -1
- package/build/esm/MinimalClientContext.d.ts.map +1 -1
- package/build/esm/createClient.d.ts +1 -1
- package/build/esm/createClient.d.ts.map +1 -1
- package/build/esm/createClient.js +10 -2
- package/build/esm/createClient.js.map +1 -1
- package/build/esm/createGeotimeSeriesProperty.d.ts +1 -1
- package/build/esm/createGeotimeSeriesProperty.d.ts.map +1 -1
- package/build/esm/createGeotimeSeriesProperty.js +4 -1
- package/build/esm/createGeotimeSeriesProperty.js.map +1 -1
- package/build/esm/createMinimalClient.js +2 -2
- package/build/esm/createMinimalClient.js.map +1 -1
- package/build/esm/createPlatformClient.d.ts +1 -1
- package/build/esm/createPlatformClient.d.ts.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js +7 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.test.js +10 -10
- package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js +40 -12
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +104 -19
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +1 -1
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/ontology/makeConjureContext.d.ts +1 -1
- package/build/esm/ontology/makeConjureContext.d.ts.map +1 -1
- package/build/esm/queries/applyQuery.js +1 -1
- package/build/esm/queries/applyQuery.js.map +1 -1
- package/build/esm/queries/queries.test.js +30 -2
- package/build/esm/queries/queries.test.js.map +1 -1
- package/build/esm/util/UserAgent.js +1 -1
- package/package.json +11 -10
|
@@ -90,7 +90,13 @@ export function createOsdkObject(client, objectDef, rawObj) {
|
|
|
90
90
|
if (instance != null) {
|
|
91
91
|
return instance;
|
|
92
92
|
}
|
|
93
|
-
const geotimeProp = new GeotimeSeriesPropertyImpl(client, objectDef.apiName, target[RawObject][objectDef.primaryKeyApiName], p
|
|
93
|
+
const geotimeProp = new GeotimeSeriesPropertyImpl(client, objectDef.apiName, target[RawObject][objectDef.primaryKeyApiName], p, rawValue.type === "geotimeSeriesValue" ? {
|
|
94
|
+
time: rawValue.timestamp,
|
|
95
|
+
value: {
|
|
96
|
+
type: "Point",
|
|
97
|
+
coordinates: rawValue.position
|
|
98
|
+
}
|
|
99
|
+
} : undefined);
|
|
94
100
|
target[CachedPropertiesRef].set(p, geotimeProp);
|
|
95
101
|
return geotimeProp;
|
|
96
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOsdkObject.js","names":["createAttachmentFromRid","GeotimeSeriesPropertyImpl","TimeSeriesPropertyImpl","createClientCache","get$as","get$link","CachedPropertiesRef","ClientRef","ObjectDefRef","RawObject","UnderlyingOsdkObject","objectPrototypeCache","client","objectDef","Object","create","value","get","newValues","assign","createOsdkObject","rawObj","objectHolderPrototype","writable","Map","holder","osdkObject","Proxy","ownKeys","target","Reflect","p","receiver","rawValue","propDef","properties","type","Array","isArray","map","a","rid","apiName","primaryKeyApiName","instance","geotimeProp","set","newValue","getOwnPropertyDescriptor","configurable","enumerable"
|
|
1
|
+
{"version":3,"file":"createOsdkObject.js","names":["createAttachmentFromRid","GeotimeSeriesPropertyImpl","TimeSeriesPropertyImpl","createClientCache","get$as","get$link","CachedPropertiesRef","ClientRef","ObjectDefRef","RawObject","UnderlyingOsdkObject","objectPrototypeCache","client","objectDef","Object","create","value","get","newValues","assign","createOsdkObject","rawObj","objectHolderPrototype","writable","Map","holder","osdkObject","Proxy","ownKeys","target","Reflect","p","receiver","rawValue","propDef","properties","type","Array","isArray","map","a","rid","apiName","primaryKeyApiName","instance","geotimeProp","time","timestamp","coordinates","position","undefined","set","newValue","getOwnPropertyDescriptor","configurable","enumerable"],"sources":["createOsdkObject.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 */\nimport { createAttachmentFromRid } from \"../../createAttachmentFromRid.js\";\nimport { GeotimeSeriesPropertyImpl } from \"../../createGeotimeSeriesProperty.js\";\nimport { TimeSeriesPropertyImpl } from \"../../createTimeseriesProperty.js\";\nimport { createClientCache } from \"../Cache.js\";\nimport { get$as } from \"./getDollarAs.js\";\nimport { get$link } from \"./getDollarLink.js\";\nimport { CachedPropertiesRef, ClientRef, ObjectDefRef, RawObject, UnderlyingOsdkObject, } from \"./InternalSymbols.js\";\nconst objectPrototypeCache = createClientCache(function (client, objectDef) {\n return Object.create(null, {\n [ObjectDefRef]: { value: objectDef },\n [ClientRef]: { value: client },\n \"$as\": { value: get$as(objectDef) },\n \"$link\": {\n get: function () {\n return get$link(this);\n },\n },\n \"$updateInternalValues\": {\n value: function (newValues) {\n this[RawObject] = Object.assign({}, this[RawObject], newValues);\n },\n },\n });\n});\n/** @internal */\nexport function createOsdkObject(client, objectDef, rawObj) {\n // We use multiple layers of prototypes to maximize reuse and also to keep\n // [RawObject] out of `ownKeys`. This keeps the code in the proxy below simpler.\n const objectHolderPrototype = Object.create(objectPrototypeCache.get(client, objectDef), {\n [RawObject]: {\n value: rawObj,\n writable: true, // so we can allow updates\n },\n [CachedPropertiesRef]: {\n value: new Map(),\n writable: true,\n },\n });\n // we separate the holder out so we can update\n // the underlying data without having to return a new object\n // we also need the holder so we can customize the console.log output\n const holder = Object.create(objectHolderPrototype);\n const osdkObject = new Proxy(holder, {\n ownKeys(target) {\n return Reflect.ownKeys(target[RawObject]);\n },\n get(target, p, receiver) {\n switch (p) {\n case UnderlyingOsdkObject:\n // effectively point back to the proxy\n return receiver;\n }\n if (p in target)\n return target[p];\n if (p in rawObj) {\n const rawValue = target[RawObject][p];\n const propDef = objectDef.properties[p];\n if (propDef) {\n if (propDef.type === \"attachment\") {\n if (Array.isArray(rawValue)) {\n return rawValue.map(a => createAttachmentFromRid(client, a.rid));\n }\n return createAttachmentFromRid(client, rawValue.rid);\n }\n if (propDef.type === \"numericTimeseries\"\n || propDef.type === \"stringTimeseries\") {\n return new TimeSeriesPropertyImpl(client, objectDef.apiName, target[RawObject][objectDef.primaryKeyApiName], p);\n }\n if (propDef.type === \"geotimeSeriesReference\") {\n const instance = target[CachedPropertiesRef].get(p);\n if (instance != null) {\n return instance;\n }\n const geotimeProp = new GeotimeSeriesPropertyImpl(client, objectDef.apiName, target[RawObject][objectDef.primaryKeyApiName], p, rawValue.type === \"geotimeSeriesValue\"\n ? {\n time: rawValue.timestamp,\n value: {\n type: \"Point\",\n coordinates: rawValue.position,\n },\n }\n : undefined);\n target[CachedPropertiesRef].set(p, geotimeProp);\n return geotimeProp;\n }\n }\n return rawValue;\n }\n // we do not do any fall through to avoid unexpected behavior\n },\n set(target, p, newValue) {\n // allow the prototype to update this value\n if (p === RawObject) {\n // symbol only exists internally so no one else can hit this\n target[p] = newValue;\n return true;\n }\n return false;\n },\n getOwnPropertyDescriptor(target, p) {\n if (p === RawObject) {\n return Reflect.getOwnPropertyDescriptor(target, p);\n }\n if (target[RawObject][p] != null) {\n return { configurable: true, enumerable: true };\n }\n return undefined;\n },\n });\n return osdkObject;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { $ontologyRid, Employee, FooInterface, objectTypeWithAllPropertyTypes } from "@osdk/client.test.ontology";
|
|
17
|
-
import { symbolClientContext } from "@osdk/shared.client";
|
|
18
17
|
import { createSharedClientContext } from "@osdk/shared.client.impl";
|
|
19
18
|
import { apiServer } from "@osdk/shared.test";
|
|
20
19
|
import { afterAll, beforeAll, describe, expect, expectTypeOf, it } from "vitest";
|
|
20
|
+
import { additionalContext } from "../Client.js";
|
|
21
21
|
import { createClient } from "../createClient.js";
|
|
22
22
|
import { createMinimalClient } from "../createMinimalClient.js";
|
|
23
23
|
import { convertWireToOsdkObjects } from "./convertWireToOsdkObjects.js";
|
|
@@ -212,23 +212,23 @@ describe("convertWireToOsdkObjects", () => {
|
|
|
212
212
|
__apiName: "Employee",
|
|
213
213
|
__primaryKey: 0
|
|
214
214
|
};
|
|
215
|
-
await expect(() => convertWireToOsdkObjects(client[
|
|
215
|
+
await expect(() => convertWireToOsdkObjects(client[additionalContext], [object], undefined, undefined, ["employeeId"], "throw")).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Unable to safely convert objects as some non nullable properties are null]`);
|
|
216
216
|
});
|
|
217
217
|
it("does not throw when optional is missing", async () => {
|
|
218
|
-
await expect(convertWireToOsdkObjects(client[
|
|
218
|
+
await expect(convertWireToOsdkObjects(client[additionalContext], [{
|
|
219
219
|
__apiName: "Employee",
|
|
220
220
|
__primaryKey: 0
|
|
221
221
|
}], undefined, undefined, ["fullName"], "throw")).resolves.to.not.toBeUndefined();
|
|
222
222
|
});
|
|
223
223
|
it("filters when it should", async () => {
|
|
224
|
-
const result = await convertWireToOsdkObjects(client[
|
|
224
|
+
const result = await convertWireToOsdkObjects(client[additionalContext], [{
|
|
225
225
|
__apiName: "Employee",
|
|
226
226
|
__primaryKey: 0
|
|
227
227
|
}], undefined, undefined, ["employeeId"], "drop");
|
|
228
228
|
expect(result.length).toBe(0);
|
|
229
229
|
});
|
|
230
230
|
it("does not filter when it shouldn't", async () => {
|
|
231
|
-
const result = await convertWireToOsdkObjects(client[
|
|
231
|
+
const result = await convertWireToOsdkObjects(client[additionalContext], [{
|
|
232
232
|
__apiName: "Employee",
|
|
233
233
|
__primaryKey: 0
|
|
234
234
|
}], undefined, undefined, ["fullName"], "drop");
|
|
@@ -241,24 +241,24 @@ describe("convertWireToOsdkObjects", () => {
|
|
|
241
241
|
__apiName: "Employee",
|
|
242
242
|
__primaryKey: 0
|
|
243
243
|
};
|
|
244
|
-
await expect(() => convertWireToOsdkObjects(client[
|
|
244
|
+
await expect(() => convertWireToOsdkObjects(client[additionalContext], [object], undefined, undefined, undefined, "throw")).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Unable to safely convert objects as some non nullable properties are null]`);
|
|
245
245
|
});
|
|
246
246
|
it("does not throw when required is present", async () => {
|
|
247
|
-
await expect(convertWireToOsdkObjects(client[
|
|
247
|
+
await expect(convertWireToOsdkObjects(client[additionalContext], [{
|
|
248
248
|
__apiName: "Employee",
|
|
249
249
|
__primaryKey: 0,
|
|
250
250
|
"employeeId": 0
|
|
251
251
|
}], undefined, undefined, undefined, "throw")).resolves.to.not.toBeUndefined();
|
|
252
252
|
});
|
|
253
253
|
it("filters when it should", async () => {
|
|
254
|
-
const result = await convertWireToOsdkObjects(client[
|
|
254
|
+
const result = await convertWireToOsdkObjects(client[additionalContext], [{
|
|
255
255
|
__apiName: "Employee",
|
|
256
256
|
__primaryKey: 0
|
|
257
257
|
}], undefined, undefined, undefined, "drop");
|
|
258
258
|
expect(result.length).toBe(0);
|
|
259
259
|
});
|
|
260
260
|
it("does not filter when it shouldn't", async () => {
|
|
261
|
-
const result = await convertWireToOsdkObjects(client[
|
|
261
|
+
const result = await convertWireToOsdkObjects(client[additionalContext], [{
|
|
262
262
|
__apiName: "Employee",
|
|
263
263
|
__primaryKey: 0,
|
|
264
264
|
"employeeId": 0
|
|
@@ -267,7 +267,7 @@ describe("convertWireToOsdkObjects", () => {
|
|
|
267
267
|
});
|
|
268
268
|
});
|
|
269
269
|
it("behaves correctly when converting", async () => {
|
|
270
|
-
const result = await convertWireToOsdkObjects(client[
|
|
270
|
+
const result = await convertWireToOsdkObjects(client[additionalContext], [{
|
|
271
271
|
__apiName: "Employee",
|
|
272
272
|
__primaryKey: 0,
|
|
273
273
|
fooSpt: "hi"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertWireToOsdkObjects.test.js","names":["$ontologyRid","Employee","FooInterface","objectTypeWithAllPropertyTypes","symbolClientContext","createSharedClientContext","apiServer","afterAll","beforeAll","describe","expect","expectTypeOf","it","createClient","createMinimalClient","convertWireToOsdkObjects","client","listen","close","data","employee","fetchPage","Object","keys","sort","toEqual","$as","$link","employee2","where","$and","employeeId","$gt","$lt","JSON","stringify","toMatchInlineSnapshot","employees","length","toBeGreaterThanOrEqual","a","b","getPrototypeOf","toBe","withValues","id","attachment","attachmentArray","toMatchTypeOf","rid","Array","isArray","toBeTruthy","withoutValues","emptyAttachment","emptyAttachmentArray","toBeUndefined","clientCtx","ontologyRid","object","__apiName","apiName","__primaryKey","prototypeBefore","object2","undefined","prototypeAfter","not","obj","__title","fullName","objAsFoo","toMatchObject","fooSpt","$apiName","$primaryKey","$objectType","$title","console","log","$updateInternalValues","__rid","$rid","rejects","toThrowErrorMatchingInlineSnapshot","resolves","to","result","instance","osdk"],"sources":["convertWireToOsdkObjects.test.js"],"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 */\nimport { $ontologyRid, Employee, FooInterface, objectTypeWithAllPropertyTypes, } from \"@osdk/client.test.ontology\";\nimport { symbolClientContext } from \"@osdk/shared.client\";\nimport { createSharedClientContext } from \"@osdk/shared.client.impl\";\nimport { apiServer } from \"@osdk/shared.test\";\nimport { afterAll, beforeAll, describe, expect, expectTypeOf, it, } from \"vitest\";\nimport { createClient } from \"../createClient.js\";\nimport { createMinimalClient } from \"../createMinimalClient.js\";\nimport { convertWireToOsdkObjects } from \"./convertWireToOsdkObjects.js\";\ndescribe(\"convertWireToOsdkObjects\", () => {\n let client;\n beforeAll(async () => {\n apiServer.listen();\n client = createClient(\"https://stack.palantir.com\", $ontologyRid, async () => \"myAccessToken\");\n });\n afterAll(() => {\n apiServer.close();\n });\n it(\"configures properties correctly\", async () => {\n const { data: [employee] } = await client(Employee).fetchPage();\n expect(Object.keys(employee).sort()).toEqual([\n \"employeeId\",\n \"fullName\",\n \"office\",\n \"class\",\n \"startDate\",\n \"employeeStatus\",\n \"$apiName\",\n \"$objectType\",\n \"$primaryKey\",\n \"employeeLocation\",\n ].sort());\n expect(Object.keys(employee.$as)).toEqual([]);\n expect(Object.keys(employee.$link)).toEqual([\n \"peeps\",\n \"lead\",\n \"officeLink\",\n ]);\n });\n it(\"stringifies properties on objects and interfaces correctly\", async () => {\n const { data: [employee] } = await client(Employee).fetchPage();\n const { data: [employee2] } = await client(Employee).where({\n $and: [{ employeeId: { $gt: 50030 } }, { employeeId: { $lt: 50032 } }],\n }).fetchPage();\n // Should not have $title\n expect(JSON.stringify(employee)).toMatchInlineSnapshot(`\"{\"employeeId\":50030,\"fullName\":\"John Doe\",\"office\":\"NYC\",\"class\":\"Red\",\"startDate\":\"2019-01-01\",\"employeeStatus\":{},\"employeeLocation\":{},\"$apiName\":\"Employee\",\"$objectType\":\"Employee\",\"$primaryKey\":50030}\"`);\n expect(JSON.stringify(employee.$as(FooInterface))).toMatchInlineSnapshot(`\"{\"$apiName\":\"FooInterface\",\"$objectType\":\"Employee\",\"$primaryKey\":50030,\"fooSpt\":\"John Doe\"}\"`);\n // Should have $title\n expect(JSON.stringify(employee2)).toMatchInlineSnapshot(`\"{\"employeeId\":50031,\"fullName\":\"Jane Doe\",\"office\":\"SEA\",\"class\":\"Blue\",\"startDate\":\"2012-02-12\",\"employeeStatus\":{},\"employeeLocation\":{},\"$apiName\":\"Employee\",\"$objectType\":\"Employee\",\"$primaryKey\":50031,\"$title\":\"Jane Doe\"}\"`);\n expect(JSON.stringify(employee2.$as(FooInterface))).toMatchInlineSnapshot(`\"{\"$apiName\":\"FooInterface\",\"$objectType\":\"Employee\",\"$primaryKey\":50031,\"$title\":\"Jane Doe\",\"fooSpt\":\"Jane Doe\"}\"`);\n });\n it(\"reuses the object prototype across objects\", async () => {\n const employees = await client(Employee).fetchPage();\n expect(employees.data.length).toBeGreaterThanOrEqual(2);\n const [a, b] = employees.data;\n expect(Object.getPrototypeOf(Object.getPrototypeOf(a))).toBe(Object.getPrototypeOf(Object.getPrototypeOf(b)));\n });\n it(\"converts attachments as expected\", async () => {\n const withValues = await client(objectTypeWithAllPropertyTypes)\n .where({ id: 1 })\n .fetchPage();\n expect(withValues.data.length).toBeGreaterThanOrEqual(1);\n const { attachment, attachmentArray } = withValues.data[0];\n expectTypeOf(attachment).toMatchTypeOf;\n expect(attachment?.rid).toEqual(\"ri.attachments.main.attachment.86016861-707f-4292-b258-6a7108915a75\");\n expect(Array.isArray(attachmentArray)).toBeTruthy();\n expectTypeOf(attachmentArray[0]).toMatchTypeOf;\n const withoutValues = await client(objectTypeWithAllPropertyTypes).where({ id: 2 }).fetchPage();\n const { attachment: emptyAttachment, attachmentArray: emptyAttachmentArray, } = withoutValues.data[0];\n expect(emptyAttachment).toBeUndefined();\n expect(emptyAttachmentArray).toBeUndefined();\n });\n it(\"works even with unknown apiNames\", async () => {\n const clientCtx = createMinimalClient({ ontologyRid: $ontologyRid }, \"https://stack.palantir.com\", async () => \"myAccessToken\");\n createSharedClientContext(\"https://stack.palantir.com\", async () => \"myAccessToken\", \"userAgent\");\n let object = {\n __apiName: Employee.apiName,\n __primaryKey: 0,\n };\n const prototypeBefore = Object.getPrototypeOf(object);\n let object2 = await convertWireToOsdkObjects(clientCtx, [object], undefined, undefined, undefined, false);\n const prototypeAfter = Object.getPrototypeOf(object2);\n expect(prototypeBefore).not.toBe(prototypeAfter);\n });\n it(\"updates interface when underlying changes\", async () => {\n const clientCtx = createMinimalClient({ ontologyRid: $ontologyRid }, \"https://stack.palantir.com\", async () => \"myAccessToken\");\n let objectFromWire = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n __title: \"Steve\",\n fullName: \"Steve\",\n employeeId: \"5\",\n };\n const [obj] = (await convertWireToOsdkObjects(clientCtx, [objectFromWire], undefined));\n expect(obj.fullName).toEqual(\"Steve\");\n expect(Object.keys(obj).sort()).toEqual([\n \"$apiName\",\n \"$objectType\",\n \"$primaryKey\",\n \"$title\",\n \"employeeId\",\n \"fullName\",\n ].sort());\n const objAsFoo = obj.$as(FooInterface);\n expect(objAsFoo).toMatchObject({\n fooSpt: obj.fullName,\n $apiName: FooInterface.apiName,\n $primaryKey: obj.$primaryKey,\n $objectType: obj.$objectType,\n $title: obj.$title,\n });\n console.log(obj);\n console.log(objAsFoo);\n obj.$updateInternalValues({\n fullName: \"Bob\",\n });\n expect(obj.fullName).toEqual(\"Bob\");\n expect(objAsFoo.fooSpt).toEqual(obj.fullName);\n expect(Object.keys(objAsFoo).sort()).toEqual([\n \"$apiName\",\n \"$objectType\",\n \"$primaryKey\",\n \"$title\",\n \"fooSpt\",\n ].sort());\n expect(obj).toBe(objAsFoo.$as(Employee));\n expect(objAsFoo).toBe(obj.$as(FooInterface));\n });\n it(\"reconstitutes interfaces properly without rid\", async () => {\n const clientCtx = createMinimalClient({ ontologyRid: $ontologyRid }, \"https://stack.palantir.com\", async () => \"myAccessToken\");\n let objectFromWire = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n __title: \"Steve\",\n fooSpt: \"Steve\",\n };\n const [objAsFoo] = (await convertWireToOsdkObjects(clientCtx, [objectFromWire], FooInterface.apiName));\n expect(objAsFoo).toMatchInlineSnapshot(`\n {\n \"$apiName\": \"FooInterface\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 0,\n \"$title\": \"Steve\",\n \"fooSpt\": \"Steve\",\n }\n `);\n const obj = objAsFoo.$as(Employee);\n expect(obj.fullName).toEqual(\"Steve\");\n expect(obj).toMatchInlineSnapshot(`\n {\n \"$apiName\": \"Employee\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 0,\n \"$title\": \"Steve\",\n \"employeeId\": 0,\n \"fullName\": \"Steve\",\n }\n `);\n });\n it(\"reconstitutes interfaces properly with rid\", async () => {\n const clientCtx = createMinimalClient({ ontologyRid: $ontologyRid }, \"https://stack.palantir.com\", async () => \"myAccessToken\");\n let objectFromWire = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n __title: \"Steve\",\n __rid: \"hiMom\",\n fooSpt: \"Steve\",\n };\n const [objAsFoo] = (await convertWireToOsdkObjects(clientCtx, [objectFromWire], FooInterface.apiName));\n expect(objAsFoo).toMatchInlineSnapshot(`\n {\n \"$apiName\": \"FooInterface\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 0,\n \"$rid\": \"hiMom\",\n \"$title\": \"Steve\",\n \"fooSpt\": \"Steve\",\n }\n `);\n expect(objAsFoo.$rid).toEqual(\"hiMom\");\n const obj = objAsFoo.$as(Employee);\n expect(obj.fullName).toEqual(\"Steve\");\n expect(obj).toMatchInlineSnapshot(`\n {\n \"$apiName\": \"Employee\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 0,\n \"$rid\": \"hiMom\",\n \"$title\": \"Steve\",\n \"employeeId\": 0,\n \"fullName\": \"Steve\",\n }\n `);\n expect(obj.$rid).toEqual(\"hiMom\");\n });\n describe(\"selection keys\", () => {\n it(\"throws when required is missing\", async () => {\n let object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n await expect(() => convertWireToOsdkObjects(client[symbolClientContext], [object], undefined, undefined, [\"employeeId\"], \"throw\")).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Unable to safely convert objects as some non nullable properties are null]`);\n });\n it(\"does not throw when optional is missing\", async () => {\n let object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n await expect(convertWireToOsdkObjects(client[symbolClientContext], [object], undefined, undefined, [\"fullName\"], \"throw\")).resolves.to.not.toBeUndefined();\n });\n it(\"filters when it should\", async () => {\n const object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n const result = await convertWireToOsdkObjects(client[symbolClientContext], [object], undefined, undefined, [\"employeeId\"], \"drop\");\n expect(result.length).toBe(0);\n });\n it(\"does not filter when it shouldn't\", async () => {\n const object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n const result = await convertWireToOsdkObjects(client[symbolClientContext], [object], undefined, undefined, [\"fullName\"], \"drop\");\n expect(result.length).toBe(1);\n });\n });\n describe(\"without selection keys\", () => {\n it(\"throws when required is missing\", async () => {\n let object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n await expect(() => convertWireToOsdkObjects(client[symbolClientContext], [object], undefined, undefined, undefined, \"throw\")).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Unable to safely convert objects as some non nullable properties are null]`);\n });\n it(\"does not throw when required is present\", async () => {\n let object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n \"employeeId\": 0,\n };\n await expect(convertWireToOsdkObjects(client[symbolClientContext], [object], undefined, undefined, undefined, \"throw\")).resolves.to.not.toBeUndefined();\n });\n it(\"filters when it should\", async () => {\n const object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n const result = await convertWireToOsdkObjects(client[symbolClientContext], [object], undefined, undefined, undefined, \"drop\");\n expect(result.length).toBe(0);\n });\n it(\"does not filter when it shouldn't\", async () => {\n const object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n \"employeeId\": 0,\n };\n const result = await convertWireToOsdkObjects(client[symbolClientContext], [object], undefined, undefined, undefined, \"drop\");\n expect(result.length).toBe(1);\n });\n });\n it(\"behaves correctly when converting\", async () => {\n const object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n fooSpt: \"hi\",\n };\n const result = await convertWireToOsdkObjects(client[symbolClientContext], [object], \"FooInterface\", undefined, [\"fooSpt\"], \"drop\");\n expect(result.length).toBe(1);\n });\n});\ndescribe(\"Osdk.Instance\", () => {\n it(\"is assignable to Osdk<>\", () => {\n const instance = {};\n const osdk = instance;\n });\n it(\"is assignable from Osdk<>\", () => {\n const osdk = {};\n const instance = osdk;\n });\n it(\"is assignable to Osdk<> with $notStrict\", () => {\n const instance = {};\n const osdk = instance;\n const osdk2 = instance;\n });\n it(\"is assignable from Osdk<> with $notStrict\", () => {\n const osdk = {};\n const osdk2 = osdk;\n const instance = osdk;\n const instance2 = osdk2;\n });\n it(\"object with any for props is assignable to its normal self\", () => {\n const foo = {};\n const bar = foo;\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAY,EAAEC,QAAQ,EAAEC,YAAY,EAAEC,8BAA8B,QAAS,4BAA4B;AAClH,SAASC,mBAAmB,QAAQ,qBAAqB;AACzD,SAASC,yBAAyB,QAAQ,0BAA0B;AACpE,SAASC,SAAS,QAAQ,mBAAmB;AAC7C,SAASC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,YAAY,EAAEC,EAAE,QAAS,QAAQ;AACjF,SAASC,YAAY,QAAQ,oBAAoB;AACjD,SAASC,mBAAmB,QAAQ,2BAA2B;AAC/D,SAASC,wBAAwB,QAAQ,+BAA+B;AACxEN,QAAQ,CAAC,0BAA0B,EAAE,MAAM;EACvC,IAAIO,MAAM;EACVR,SAAS,CAAC,YAAY;IAClBF,SAAS,CAACW,MAAM,CAAC,CAAC;IAClBD,MAAM,GAAGH,YAAY,CAAC,4BAA4B,EAAEb,YAAY,EAAE,YAAY,eAAe,CAAC;EAClG,CAAC,CAAC;EACFO,QAAQ,CAAC,MAAM;IACXD,SAAS,CAACY,KAAK,CAAC,CAAC;EACrB,CAAC,CAAC;EACFN,EAAE,CAAC,iCAAiC,EAAE,YAAY;IAC9C,MAAM;MAAEO,IAAI,EAAE,CAACC,QAAQ;IAAE,CAAC,GAAG,MAAMJ,MAAM,CAACf,QAAQ,CAAC,CAACoB,SAAS,CAAC,CAAC;IAC/DX,MAAM,CAACY,MAAM,CAACC,IAAI,CAACH,QAAQ,CAAC,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC,CACzC,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,aAAa,EACb,kBAAkB,CACrB,CAACD,IAAI,CAAC,CAAC,CAAC;IACTd,MAAM,CAACY,MAAM,CAACC,IAAI,CAACH,QAAQ,CAACM,GAAG,CAAC,CAAC,CAACD,OAAO,CAAC,EAAE,CAAC;IAC7Cf,MAAM,CAACY,MAAM,CAACC,IAAI,CAACH,QAAQ,CAACO,KAAK,CAAC,CAAC,CAACF,OAAO,CAAC,CACxC,OAAO,EACP,MAAM,EACN,YAAY,CACf,CAAC;EACN,CAAC,CAAC;EACFb,EAAE,CAAC,4DAA4D,EAAE,YAAY;IACzE,MAAM;MAAEO,IAAI,EAAE,CAACC,QAAQ;IAAE,CAAC,GAAG,MAAMJ,MAAM,CAACf,QAAQ,CAAC,CAACoB,SAAS,CAAC,CAAC;IAC/D,MAAM;MAAEF,IAAI,EAAE,CAACS,SAAS;IAAE,CAAC,GAAG,MAAMZ,MAAM,CAACf,QAAQ,CAAC,CAAC4B,KAAK,CAAC;MACvDC,IAAI,EAAE,CAAC;QAAEC,UAAU,EAAE;UAAEC,GAAG,EAAE;QAAM;MAAE,CAAC,EAAE;QAAED,UAAU,EAAE;UAAEE,GAAG,EAAE;QAAM;MAAE,CAAC;IACzE,CAAC,CAAC,CAACZ,SAAS,CAAC,CAAC;IACd;IACAX,MAAM,CAACwB,IAAI,CAACC,SAAS,CAACf,QAAQ,CAAC,CAAC,CAACgB,qBAAqB,CAAC,iNAAiN,CAAC;IACzQ1B,MAAM,CAACwB,IAAI,CAACC,SAAS,CAACf,QAAQ,CAACM,GAAG,CAACxB,YAAY,CAAC,CAAC,CAAC,CAACkC,qBAAqB,CAAC,gGAAgG,CAAC;IAC1K;IACA1B,MAAM,CAACwB,IAAI,CAACC,SAAS,CAACP,SAAS,CAAC,CAAC,CAACQ,qBAAqB,CAAC,sOAAsO,CAAC;IAC/R1B,MAAM,CAACwB,IAAI,CAACC,SAAS,CAACP,SAAS,CAACF,GAAG,CAACxB,YAAY,CAAC,CAAC,CAAC,CAACkC,qBAAqB,CAAC,oHAAoH,CAAC;EACnM,CAAC,CAAC;EACFxB,EAAE,CAAC,4CAA4C,EAAE,YAAY;IACzD,MAAMyB,SAAS,GAAG,MAAMrB,MAAM,CAACf,QAAQ,CAAC,CAACoB,SAAS,CAAC,CAAC;IACpDX,MAAM,CAAC2B,SAAS,CAAClB,IAAI,CAACmB,MAAM,CAAC,CAACC,sBAAsB,CAAC,CAAC,CAAC;IACvD,MAAM,CAACC,CAAC,EAAEC,CAAC,CAAC,GAAGJ,SAAS,CAAClB,IAAI;IAC7BT,MAAM,CAACY,MAAM,CAACoB,cAAc,CAACpB,MAAM,CAACoB,cAAc,CAACF,CAAC,CAAC,CAAC,CAAC,CAACG,IAAI,CAACrB,MAAM,CAACoB,cAAc,CAACpB,MAAM,CAACoB,cAAc,CAACD,CAAC,CAAC,CAAC,CAAC;EACjH,CAAC,CAAC;EACF7B,EAAE,CAAC,kCAAkC,EAAE,YAAY;IAC/C,MAAMgC,UAAU,GAAG,MAAM5B,MAAM,CAACb,8BAA8B,CAAC,CAC1D0B,KAAK,CAAC;MAAEgB,EAAE,EAAE;IAAE,CAAC,CAAC,CAChBxB,SAAS,CAAC,CAAC;IAChBX,MAAM,CAACkC,UAAU,CAACzB,IAAI,CAACmB,MAAM,CAAC,CAACC,sBAAsB,CAAC,CAAC,CAAC;IACxD,MAAM;MAAEO,UAAU;MAAEC;IAAgB,CAAC,GAAGH,UAAU,CAACzB,IAAI,CAAC,CAAC,CAAC;IAC1DR,YAAY,CAACmC,UAAU,CAAC,CAACE,aAAa;IACtCtC,MAAM,CAACoC,UAAU,EAAEG,GAAG,CAAC,CAACxB,OAAO,CAAC,qEAAqE,CAAC;IACtGf,MAAM,CAACwC,KAAK,CAACC,OAAO,CAACJ,eAAe,CAAC,CAAC,CAACK,UAAU,CAAC,CAAC;IACnDzC,YAAY,CAACoC,eAAe,CAAC,CAAC,CAAC,CAAC,CAACC,aAAa;IAC9C,MAAMK,aAAa,GAAG,MAAMrC,MAAM,CAACb,8BAA8B,CAAC,CAAC0B,KAAK,CAAC;MAAEgB,EAAE,EAAE;IAAE,CAAC,CAAC,CAACxB,SAAS,CAAC,CAAC;IAC/F,MAAM;MAAEyB,UAAU,EAAEQ,eAAe;MAAEP,eAAe,EAAEQ;IAAsB,CAAC,GAAGF,aAAa,CAAClC,IAAI,CAAC,CAAC,CAAC;IACrGT,MAAM,CAAC4C,eAAe,CAAC,CAACE,aAAa,CAAC,CAAC;IACvC9C,MAAM,CAAC6C,oBAAoB,CAAC,CAACC,aAAa,CAAC,CAAC;EAChD,CAAC,CAAC;EACF5C,EAAE,CAAC,kCAAkC,EAAE,YAAY;IAC/C,MAAM6C,SAAS,GAAG3C,mBAAmB,CAAC;MAAE4C,WAAW,EAAE1D;IAAa,CAAC,EAAE,4BAA4B,EAAE,YAAY,eAAe,CAAC;IAC/HK,yBAAyB,CAAC,4BAA4B,EAAE,YAAY,eAAe,EAAE,WAAW,CAAC;IACjG,IAAIsD,MAAM,GAAG;MACTC,SAAS,EAAE3D,QAAQ,CAAC4D,OAAO;MAC3BC,YAAY,EAAE;IAClB,CAAC;IACD,MAAMC,eAAe,GAAGzC,MAAM,CAACoB,cAAc,CAACiB,MAAM,CAAC;IACrD,IAAIK,OAAO,GAAG,MAAMjD,wBAAwB,CAAC0C,SAAS,EAAE,CAACE,MAAM,CAAC,EAAEM,SAAS,EAAEA,SAAS,EAAEA,SAAS,EAAE,KAAK,CAAC;IACzG,MAAMC,cAAc,GAAG5C,MAAM,CAACoB,cAAc,CAACsB,OAAO,CAAC;IACrDtD,MAAM,CAACqD,eAAe,CAAC,CAACI,GAAG,CAACxB,IAAI,CAACuB,cAAc,CAAC;EACpD,CAAC,CAAC;EACFtD,EAAE,CAAC,2CAA2C,EAAE,YAAY;IACxD,MAAM6C,SAAS,GAAG3C,mBAAmB,CAAC;MAAE4C,WAAW,EAAE1D;IAAa,CAAC,EAAE,4BAA4B,EAAE,YAAY,eAAe,CAAC;IAQ/H,MAAM,CAACoE,GAAG,CAAC,GAAI,MAAMrD,wBAAwB,CAAC0C,SAAS,EAAE,CAPpC;MACjBG,SAAS,EAAE,UAAU;MACrBE,YAAY,EAAE,CAAC;MACfO,OAAO,EAAE,OAAO;MAChBC,QAAQ,EAAE,OAAO;MACjBvC,UAAU,EAAE;IAChB,CAAC,CACwE,EAAEkC,SAAS,CAAE;IACtFvD,MAAM,CAAC0D,GAAG,CAACE,QAAQ,CAAC,CAAC7C,OAAO,CAAC,OAAO,CAAC;IACrCf,MAAM,CAACY,MAAM,CAACC,IAAI,CAAC6C,GAAG,CAAC,CAAC5C,IAAI,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC,CACpC,UAAU,EACV,aAAa,EACb,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,UAAU,CACb,CAACD,IAAI,CAAC,CAAC,CAAC;IACT,MAAM+C,QAAQ,GAAGH,GAAG,CAAC1C,GAAG,CAACxB,YAAY,CAAC;IACtCQ,MAAM,CAAC6D,QAAQ,CAAC,CAACC,aAAa,CAAC;MAC3BC,MAAM,EAAEL,GAAG,CAACE,QAAQ;MACpBI,QAAQ,EAAExE,YAAY,CAAC2D,OAAO;MAC9Bc,WAAW,EAAEP,GAAG,CAACO,WAAW;MAC5BC,WAAW,EAAER,GAAG,CAACQ,WAAW;MAC5BC,MAAM,EAAET,GAAG,CAACS;IAChB,CAAC,CAAC;IACFC,OAAO,CAACC,GAAG,CAACX,GAAG,CAAC;IAChBU,OAAO,CAACC,GAAG,CAACR,QAAQ,CAAC;IACrBH,GAAG,CAACY,qBAAqB,CAAC;MACtBV,QAAQ,EAAE;IACd,CAAC,CAAC;IACF5D,MAAM,CAAC0D,GAAG,CAACE,QAAQ,CAAC,CAAC7C,OAAO,CAAC,KAAK,CAAC;IACnCf,MAAM,CAAC6D,QAAQ,CAACE,MAAM,CAAC,CAAChD,OAAO,CAAC2C,GAAG,CAACE,QAAQ,CAAC;IAC7C5D,MAAM,CAACY,MAAM,CAACC,IAAI,CAACgD,QAAQ,CAAC,CAAC/C,IAAI,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC,CACzC,UAAU,EACV,aAAa,EACb,aAAa,EACb,QAAQ,EACR,QAAQ,CACX,CAACD,IAAI,CAAC,CAAC,CAAC;IACTd,MAAM,CAAC0D,GAAG,CAAC,CAACzB,IAAI,CAAC4B,QAAQ,CAAC7C,GAAG,CAACzB,QAAQ,CAAC,CAAC;IACxCS,MAAM,CAAC6D,QAAQ,CAAC,CAAC5B,IAAI,CAACyB,GAAG,CAAC1C,GAAG,CAACxB,YAAY,CAAC,CAAC;EAChD,CAAC,CAAC;EACFU,EAAE,CAAC,+CAA+C,EAAE,YAAY;IAC5D,MAAM6C,SAAS,GAAG3C,mBAAmB,CAAC;MAAE4C,WAAW,EAAE1D;IAAa,CAAC,EAAE,4BAA4B,EAAE,YAAY,eAAe,CAAC;IAO/H,MAAM,CAACuE,QAAQ,CAAC,GAAI,MAAMxD,wBAAwB,CAAC0C,SAAS,EAAE,CANzC;MACjBG,SAAS,EAAE,UAAU;MACrBE,YAAY,EAAE,CAAC;MACfO,OAAO,EAAE,OAAO;MAChBI,MAAM,EAAE;IACZ,CAAC,CAC6E,EAAEvE,YAAY,CAAC2D,OAAO,CAAE;IACtGnD,MAAM,CAAC6D,QAAQ,CAAC,CAACnC,qBAAqB,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IACE,MAAMgC,GAAG,GAAGG,QAAQ,CAAC7C,GAAG,CAACzB,QAAQ,CAAC;IAClCS,MAAM,CAAC0D,GAAG,CAACE,QAAQ,CAAC,CAAC7C,OAAO,CAAC,OAAO,CAAC;IACrCf,MAAM,CAAC0D,GAAG,CAAC,CAAChC,qBAAqB,CAAC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;EACF,CAAC,CAAC;EACFxB,EAAE,CAAC,4CAA4C,EAAE,YAAY;IACzD,MAAM6C,SAAS,GAAG3C,mBAAmB,CAAC;MAAE4C,WAAW,EAAE1D;IAAa,CAAC,EAAE,4BAA4B,EAAE,YAAY,eAAe,CAAC;IAQ/H,MAAM,CAACuE,QAAQ,CAAC,GAAI,MAAMxD,wBAAwB,CAAC0C,SAAS,EAAE,CAPzC;MACjBG,SAAS,EAAE,UAAU;MACrBE,YAAY,EAAE,CAAC;MACfO,OAAO,EAAE,OAAO;MAChBY,KAAK,EAAE,OAAO;MACdR,MAAM,EAAE;IACZ,CAAC,CAC6E,EAAEvE,YAAY,CAAC2D,OAAO,CAAE;IACtGnD,MAAM,CAAC6D,QAAQ,CAAC,CAACnC,qBAAqB,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IACE1B,MAAM,CAAC6D,QAAQ,CAACW,IAAI,CAAC,CAACzD,OAAO,CAAC,OAAO,CAAC;IACtC,MAAM2C,GAAG,GAAGG,QAAQ,CAAC7C,GAAG,CAACzB,QAAQ,CAAC;IAClCS,MAAM,CAAC0D,GAAG,CAACE,QAAQ,CAAC,CAAC7C,OAAO,CAAC,OAAO,CAAC;IACrCf,MAAM,CAAC0D,GAAG,CAAC,CAAChC,qBAAqB,CAAC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IACE1B,MAAM,CAAC0D,GAAG,CAACc,IAAI,CAAC,CAACzD,OAAO,CAAC,OAAO,CAAC;EACrC,CAAC,CAAC;EACFhB,QAAQ,CAAC,gBAAgB,EAAE,MAAM;IAC7BG,EAAE,CAAC,iCAAiC,EAAE,YAAY;MAC9C,IAAI+C,MAAM,GAAG;QACTC,SAAS,EAAE,UAAU;QACrBE,YAAY,EAAE;MAClB,CAAC;MACD,MAAMpD,MAAM,CAAC,MAAMK,wBAAwB,CAACC,MAAM,CAACZ,mBAAmB,CAAC,EAAE,CAACuD,MAAM,CAAC,EAAEM,SAAS,EAAEA,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAACkB,OAAO,CAACC,kCAAkC,CAAC,oFAAoF,CAAC;IACvQ,CAAC,CAAC;IACFxE,EAAE,CAAC,yCAAyC,EAAE,YAAY;MAKtD,MAAMF,MAAM,CAACK,wBAAwB,CAACC,MAAM,CAACZ,mBAAmB,CAAC,EAAE,CAJtD;QACTwD,SAAS,EAAE,UAAU;QACrBE,YAAY,EAAE;MAClB,CAAC,CAC0E,EAAEG,SAAS,EAAEA,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,CAACoB,QAAQ,CAACC,EAAE,CAACnB,GAAG,CAACX,aAAa,CAAC,CAAC;IAC9J,CAAC,CAAC;IACF5C,EAAE,CAAC,wBAAwB,EAAE,YAAY;MAKrC,MAAM2E,MAAM,GAAG,MAAMxE,wBAAwB,CAACC,MAAM,CAACZ,mBAAmB,CAAC,EAAE,CAJ5D;QACXwD,SAAS,EAAE,UAAU;QACrBE,YAAY,EAAE;MAClB,CAAC,CACkF,EAAEG,SAAS,EAAEA,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;MAClIvD,MAAM,CAAC6E,MAAM,CAACjD,MAAM,CAAC,CAACK,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC;IACF/B,EAAE,CAAC,mCAAmC,EAAE,YAAY;MAKhD,MAAM2E,MAAM,GAAG,MAAMxE,wBAAwB,CAACC,MAAM,CAACZ,mBAAmB,CAAC,EAAE,CAJ5D;QACXwD,SAAS,EAAE,UAAU;QACrBE,YAAY,EAAE;MAClB,CAAC,CACkF,EAAEG,SAAS,EAAEA,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;MAChIvD,MAAM,CAAC6E,MAAM,CAACjD,MAAM,CAAC,CAACK,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC;EACN,CAAC,CAAC;EACFlC,QAAQ,CAAC,wBAAwB,EAAE,MAAM;IACrCG,EAAE,CAAC,iCAAiC,EAAE,YAAY;MAC9C,IAAI+C,MAAM,GAAG;QACTC,SAAS,EAAE,UAAU;QACrBE,YAAY,EAAE;MAClB,CAAC;MACD,MAAMpD,MAAM,CAAC,MAAMK,wBAAwB,CAACC,MAAM,CAACZ,mBAAmB,CAAC,EAAE,CAACuD,MAAM,CAAC,EAAEM,SAAS,EAAEA,SAAS,EAAEA,SAAS,EAAE,OAAO,CAAC,CAAC,CAACkB,OAAO,CAACC,kCAAkC,CAAC,oFAAoF,CAAC;IAClQ,CAAC,CAAC;IACFxE,EAAE,CAAC,yCAAyC,EAAE,YAAY;MAMtD,MAAMF,MAAM,CAACK,wBAAwB,CAACC,MAAM,CAACZ,mBAAmB,CAAC,EAAE,CALtD;QACTwD,SAAS,EAAE,UAAU;QACrBE,YAAY,EAAE,CAAC;QACf,YAAY,EAAE;MAClB,CAAC,CAC0E,EAAEG,SAAS,EAAEA,SAAS,EAAEA,SAAS,EAAE,OAAO,CAAC,CAAC,CAACoB,QAAQ,CAACC,EAAE,CAACnB,GAAG,CAACX,aAAa,CAAC,CAAC;IAC3J,CAAC,CAAC;IACF5C,EAAE,CAAC,wBAAwB,EAAE,YAAY;MAKrC,MAAM2E,MAAM,GAAG,MAAMxE,wBAAwB,CAACC,MAAM,CAACZ,mBAAmB,CAAC,EAAE,CAJ5D;QACXwD,SAAS,EAAE,UAAU;QACrBE,YAAY,EAAE;MAClB,CAAC,CACkF,EAAEG,SAAS,EAAEA,SAAS,EAAEA,SAAS,EAAE,MAAM,CAAC;MAC7HvD,MAAM,CAAC6E,MAAM,CAACjD,MAAM,CAAC,CAACK,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC;IACF/B,EAAE,CAAC,mCAAmC,EAAE,YAAY;MAMhD,MAAM2E,MAAM,GAAG,MAAMxE,wBAAwB,CAACC,MAAM,CAACZ,mBAAmB,CAAC,EAAE,CAL5D;QACXwD,SAAS,EAAE,UAAU;QACrBE,YAAY,EAAE,CAAC;QACf,YAAY,EAAE;MAClB,CAAC,CACkF,EAAEG,SAAS,EAAEA,SAAS,EAAEA,SAAS,EAAE,MAAM,CAAC;MAC7HvD,MAAM,CAAC6E,MAAM,CAACjD,MAAM,CAAC,CAACK,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC;EACN,CAAC,CAAC;EACF/B,EAAE,CAAC,mCAAmC,EAAE,YAAY;IAMhD,MAAM2E,MAAM,GAAG,MAAMxE,wBAAwB,CAACC,MAAM,CAACZ,mBAAmB,CAAC,EAAE,CAL5D;MACXwD,SAAS,EAAE,UAAU;MACrBE,YAAY,EAAE,CAAC;MACfW,MAAM,EAAE;IACZ,CAAC,CACkF,EAAE,cAAc,EAAER,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACnIvD,MAAM,CAAC6E,MAAM,CAACjD,MAAM,CAAC,CAACK,IAAI,CAAC,CAAC,CAAC;EACjC,CAAC,CAAC;AACN,CAAC,CAAC;AACFlC,QAAQ,CAAC,eAAe,EAAE,MAAM;EAC5BG,EAAE,CAAC,yBAAyB,EAAE,MAAM,CAGpC,CAAC,CAAC;EACFA,EAAE,CAAC,2BAA2B,EAAE,MAAM,CAGtC,CAAC,CAAC;EACFA,EAAE,CAAC,yCAAyC,EAAE,MAAM;IAChD,MAAM4E,QAAQ,GAAG,CAAC,CAAC;EAGvB,CAAC,CAAC;EACF5E,EAAE,CAAC,2CAA2C,EAAE,MAAM;IAClD,MAAM6E,IAAI,GAAG,CAAC,CAAC;EAInB,CAAC,CAAC;EACF7E,EAAE,CAAC,4DAA4D,EAAE,MAAM,CAGvE,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"convertWireToOsdkObjects.test.js","names":["$ontologyRid","Employee","FooInterface","objectTypeWithAllPropertyTypes","createSharedClientContext","apiServer","afterAll","beforeAll","describe","expect","expectTypeOf","it","additionalContext","createClient","createMinimalClient","convertWireToOsdkObjects","client","listen","close","data","employee","fetchPage","Object","keys","sort","toEqual","$as","$link","employee2","where","$and","employeeId","$gt","$lt","JSON","stringify","toMatchInlineSnapshot","employees","length","toBeGreaterThanOrEqual","a","b","getPrototypeOf","toBe","withValues","id","attachment","attachmentArray","toMatchTypeOf","rid","Array","isArray","toBeTruthy","withoutValues","emptyAttachment","emptyAttachmentArray","toBeUndefined","clientCtx","ontologyRid","object","__apiName","apiName","__primaryKey","prototypeBefore","object2","undefined","prototypeAfter","not","obj","__title","fullName","objAsFoo","toMatchObject","fooSpt","$apiName","$primaryKey","$objectType","$title","console","log","$updateInternalValues","__rid","$rid","rejects","toThrowErrorMatchingInlineSnapshot","resolves","to","result","instance","osdk"],"sources":["convertWireToOsdkObjects.test.js"],"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 */\nimport { $ontologyRid, Employee, FooInterface, objectTypeWithAllPropertyTypes, } from \"@osdk/client.test.ontology\";\nimport { createSharedClientContext } from \"@osdk/shared.client.impl\";\nimport { apiServer } from \"@osdk/shared.test\";\nimport { afterAll, beforeAll, describe, expect, expectTypeOf, it, } from \"vitest\";\nimport { additionalContext } from \"../Client.js\";\nimport { createClient } from \"../createClient.js\";\nimport { createMinimalClient } from \"../createMinimalClient.js\";\nimport { convertWireToOsdkObjects } from \"./convertWireToOsdkObjects.js\";\ndescribe(\"convertWireToOsdkObjects\", () => {\n let client;\n beforeAll(async () => {\n apiServer.listen();\n client = createClient(\"https://stack.palantir.com\", $ontologyRid, async () => \"myAccessToken\");\n });\n afterAll(() => {\n apiServer.close();\n });\n it(\"configures properties correctly\", async () => {\n const { data: [employee] } = await client(Employee).fetchPage();\n expect(Object.keys(employee).sort()).toEqual([\n \"employeeId\",\n \"fullName\",\n \"office\",\n \"class\",\n \"startDate\",\n \"employeeStatus\",\n \"$apiName\",\n \"$objectType\",\n \"$primaryKey\",\n \"employeeLocation\",\n ].sort());\n expect(Object.keys(employee.$as)).toEqual([]);\n expect(Object.keys(employee.$link)).toEqual([\n \"peeps\",\n \"lead\",\n \"officeLink\",\n ]);\n });\n it(\"stringifies properties on objects and interfaces correctly\", async () => {\n const { data: [employee] } = await client(Employee).fetchPage();\n const { data: [employee2] } = await client(Employee).where({\n $and: [{ employeeId: { $gt: 50030 } }, { employeeId: { $lt: 50032 } }],\n }).fetchPage();\n // Should not have $title\n expect(JSON.stringify(employee)).toMatchInlineSnapshot(`\"{\"employeeId\":50030,\"fullName\":\"John Doe\",\"office\":\"NYC\",\"class\":\"Red\",\"startDate\":\"2019-01-01\",\"employeeStatus\":{},\"employeeLocation\":{},\"$apiName\":\"Employee\",\"$objectType\":\"Employee\",\"$primaryKey\":50030}\"`);\n expect(JSON.stringify(employee.$as(FooInterface))).toMatchInlineSnapshot(`\"{\"$apiName\":\"FooInterface\",\"$objectType\":\"Employee\",\"$primaryKey\":50030,\"fooSpt\":\"John Doe\"}\"`);\n // Should have $title\n expect(JSON.stringify(employee2)).toMatchInlineSnapshot(`\"{\"employeeId\":50031,\"fullName\":\"Jane Doe\",\"office\":\"SEA\",\"class\":\"Blue\",\"startDate\":\"2012-02-12\",\"employeeStatus\":{},\"employeeLocation\":{},\"$apiName\":\"Employee\",\"$objectType\":\"Employee\",\"$primaryKey\":50031,\"$title\":\"Jane Doe\"}\"`);\n expect(JSON.stringify(employee2.$as(FooInterface))).toMatchInlineSnapshot(`\"{\"$apiName\":\"FooInterface\",\"$objectType\":\"Employee\",\"$primaryKey\":50031,\"$title\":\"Jane Doe\",\"fooSpt\":\"Jane Doe\"}\"`);\n });\n it(\"reuses the object prototype across objects\", async () => {\n const employees = await client(Employee).fetchPage();\n expect(employees.data.length).toBeGreaterThanOrEqual(2);\n const [a, b] = employees.data;\n expect(Object.getPrototypeOf(Object.getPrototypeOf(a))).toBe(Object.getPrototypeOf(Object.getPrototypeOf(b)));\n });\n it(\"converts attachments as expected\", async () => {\n const withValues = await client(objectTypeWithAllPropertyTypes)\n .where({ id: 1 })\n .fetchPage();\n expect(withValues.data.length).toBeGreaterThanOrEqual(1);\n const { attachment, attachmentArray } = withValues.data[0];\n expectTypeOf(attachment).toMatchTypeOf;\n expect(attachment?.rid).toEqual(\"ri.attachments.main.attachment.86016861-707f-4292-b258-6a7108915a75\");\n expect(Array.isArray(attachmentArray)).toBeTruthy();\n expectTypeOf(attachmentArray[0]).toMatchTypeOf;\n const withoutValues = await client(objectTypeWithAllPropertyTypes).where({ id: 2 }).fetchPage();\n const { attachment: emptyAttachment, attachmentArray: emptyAttachmentArray, } = withoutValues.data[0];\n expect(emptyAttachment).toBeUndefined();\n expect(emptyAttachmentArray).toBeUndefined();\n });\n it(\"works even with unknown apiNames\", async () => {\n const clientCtx = createMinimalClient({ ontologyRid: $ontologyRid }, \"https://stack.palantir.com\", async () => \"myAccessToken\");\n createSharedClientContext(\"https://stack.palantir.com\", async () => \"myAccessToken\", \"userAgent\");\n let object = {\n __apiName: Employee.apiName,\n __primaryKey: 0,\n };\n const prototypeBefore = Object.getPrototypeOf(object);\n let object2 = await convertWireToOsdkObjects(clientCtx, [object], undefined, undefined, undefined, false);\n const prototypeAfter = Object.getPrototypeOf(object2);\n expect(prototypeBefore).not.toBe(prototypeAfter);\n });\n it(\"updates interface when underlying changes\", async () => {\n const clientCtx = createMinimalClient({ ontologyRid: $ontologyRid }, \"https://stack.palantir.com\", async () => \"myAccessToken\");\n let objectFromWire = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n __title: \"Steve\",\n fullName: \"Steve\",\n employeeId: \"5\",\n };\n const [obj] = (await convertWireToOsdkObjects(clientCtx, [objectFromWire], undefined));\n expect(obj.fullName).toEqual(\"Steve\");\n expect(Object.keys(obj).sort()).toEqual([\n \"$apiName\",\n \"$objectType\",\n \"$primaryKey\",\n \"$title\",\n \"employeeId\",\n \"fullName\",\n ].sort());\n const objAsFoo = obj.$as(FooInterface);\n expect(objAsFoo).toMatchObject({\n fooSpt: obj.fullName,\n $apiName: FooInterface.apiName,\n $primaryKey: obj.$primaryKey,\n $objectType: obj.$objectType,\n $title: obj.$title,\n });\n console.log(obj);\n console.log(objAsFoo);\n obj.$updateInternalValues({\n fullName: \"Bob\",\n });\n expect(obj.fullName).toEqual(\"Bob\");\n expect(objAsFoo.fooSpt).toEqual(obj.fullName);\n expect(Object.keys(objAsFoo).sort()).toEqual([\n \"$apiName\",\n \"$objectType\",\n \"$primaryKey\",\n \"$title\",\n \"fooSpt\",\n ].sort());\n expect(obj).toBe(objAsFoo.$as(Employee));\n expect(objAsFoo).toBe(obj.$as(FooInterface));\n });\n it(\"reconstitutes interfaces properly without rid\", async () => {\n const clientCtx = createMinimalClient({ ontologyRid: $ontologyRid }, \"https://stack.palantir.com\", async () => \"myAccessToken\");\n let objectFromWire = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n __title: \"Steve\",\n fooSpt: \"Steve\",\n };\n const [objAsFoo] = (await convertWireToOsdkObjects(clientCtx, [objectFromWire], FooInterface.apiName));\n expect(objAsFoo).toMatchInlineSnapshot(`\n {\n \"$apiName\": \"FooInterface\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 0,\n \"$title\": \"Steve\",\n \"fooSpt\": \"Steve\",\n }\n `);\n const obj = objAsFoo.$as(Employee);\n expect(obj.fullName).toEqual(\"Steve\");\n expect(obj).toMatchInlineSnapshot(`\n {\n \"$apiName\": \"Employee\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 0,\n \"$title\": \"Steve\",\n \"employeeId\": 0,\n \"fullName\": \"Steve\",\n }\n `);\n });\n it(\"reconstitutes interfaces properly with rid\", async () => {\n const clientCtx = createMinimalClient({ ontologyRid: $ontologyRid }, \"https://stack.palantir.com\", async () => \"myAccessToken\");\n let objectFromWire = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n __title: \"Steve\",\n __rid: \"hiMom\",\n fooSpt: \"Steve\",\n };\n const [objAsFoo] = (await convertWireToOsdkObjects(clientCtx, [objectFromWire], FooInterface.apiName));\n expect(objAsFoo).toMatchInlineSnapshot(`\n {\n \"$apiName\": \"FooInterface\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 0,\n \"$rid\": \"hiMom\",\n \"$title\": \"Steve\",\n \"fooSpt\": \"Steve\",\n }\n `);\n expect(objAsFoo.$rid).toEqual(\"hiMom\");\n const obj = objAsFoo.$as(Employee);\n expect(obj.fullName).toEqual(\"Steve\");\n expect(obj).toMatchInlineSnapshot(`\n {\n \"$apiName\": \"Employee\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": 0,\n \"$rid\": \"hiMom\",\n \"$title\": \"Steve\",\n \"employeeId\": 0,\n \"fullName\": \"Steve\",\n }\n `);\n expect(obj.$rid).toEqual(\"hiMom\");\n });\n describe(\"selection keys\", () => {\n it(\"throws when required is missing\", async () => {\n let object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n await expect(() => convertWireToOsdkObjects(client[additionalContext], [object], undefined, undefined, [\"employeeId\"], \"throw\")).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Unable to safely convert objects as some non nullable properties are null]`);\n });\n it(\"does not throw when optional is missing\", async () => {\n let object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n await expect(convertWireToOsdkObjects(client[additionalContext], [object], undefined, undefined, [\"fullName\"], \"throw\")).resolves.to.not.toBeUndefined();\n });\n it(\"filters when it should\", async () => {\n const object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n const result = await convertWireToOsdkObjects(client[additionalContext], [object], undefined, undefined, [\"employeeId\"], \"drop\");\n expect(result.length).toBe(0);\n });\n it(\"does not filter when it shouldn't\", async () => {\n const object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n const result = await convertWireToOsdkObjects(client[additionalContext], [object], undefined, undefined, [\"fullName\"], \"drop\");\n expect(result.length).toBe(1);\n });\n });\n describe(\"without selection keys\", () => {\n it(\"throws when required is missing\", async () => {\n let object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n await expect(() => convertWireToOsdkObjects(client[additionalContext], [object], undefined, undefined, undefined, \"throw\")).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Unable to safely convert objects as some non nullable properties are null]`);\n });\n it(\"does not throw when required is present\", async () => {\n let object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n \"employeeId\": 0,\n };\n await expect(convertWireToOsdkObjects(client[additionalContext], [object], undefined, undefined, undefined, \"throw\")).resolves.to.not.toBeUndefined();\n });\n it(\"filters when it should\", async () => {\n const object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n };\n const result = await convertWireToOsdkObjects(client[additionalContext], [object], undefined, undefined, undefined, \"drop\");\n expect(result.length).toBe(0);\n });\n it(\"does not filter when it shouldn't\", async () => {\n const object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n \"employeeId\": 0,\n };\n const result = await convertWireToOsdkObjects(client[additionalContext], [object], undefined, undefined, undefined, \"drop\");\n expect(result.length).toBe(1);\n });\n });\n it(\"behaves correctly when converting\", async () => {\n const object = {\n __apiName: \"Employee\",\n __primaryKey: 0,\n fooSpt: \"hi\",\n };\n const result = await convertWireToOsdkObjects(client[additionalContext], [object], \"FooInterface\", undefined, [\"fooSpt\"], \"drop\");\n expect(result.length).toBe(1);\n });\n});\ndescribe(\"Osdk.Instance\", () => {\n it(\"is assignable to Osdk<>\", () => {\n const instance = {};\n const osdk = instance;\n });\n it(\"is assignable from Osdk<>\", () => {\n const osdk = {};\n const instance = osdk;\n });\n it(\"is assignable to Osdk<> with $notStrict\", () => {\n const instance = {};\n const osdk = instance;\n const osdk2 = instance;\n });\n it(\"is assignable from Osdk<> with $notStrict\", () => {\n const osdk = {};\n const osdk2 = osdk;\n const instance = osdk;\n const instance2 = osdk2;\n });\n it(\"object with any for props is assignable to its normal self\", () => {\n const foo = {};\n const bar = foo;\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -81,14 +81,19 @@ export class ObjectSetListenerWebsocket {
|
|
|
81
81
|
});
|
|
82
82
|
!(client.baseUrl.startsWith("https://") || client.baseUrl.startsWith("http://")) ? invariant(false, "Stack must be a URL") : void 0;
|
|
83
83
|
}
|
|
84
|
-
async subscribe(objectSet, listener, properties) {
|
|
84
|
+
async subscribe(objectType, objectSet, listener, properties) {
|
|
85
85
|
// Node 18 does not expose 'crypto' on globalThis, so we need to do it ourselves. This
|
|
86
86
|
// will not be needed after our minimum version is 19 or greater.
|
|
87
87
|
globalThis.crypto ??= (await import("node:crypto")).webcrypto;
|
|
88
|
+
const objDef = await this.#client.ontologyProvider.getObjectDefinition(objectType.apiName);
|
|
89
|
+
const objectProperties = properties.filter(p => objDef.properties[p].type !== "geotimeSeriesReference");
|
|
90
|
+
const referenceProperties = properties.filter(p => objDef.properties[p].type === "geotimeSeriesReference");
|
|
88
91
|
const sub = {
|
|
89
92
|
listener: fillOutListener(listener),
|
|
90
93
|
objectSet,
|
|
91
|
-
|
|
94
|
+
primaryKeyPropertyName: objDef.primaryKeyApiName,
|
|
95
|
+
requestedProperties: objectProperties,
|
|
96
|
+
requestedReferenceProperties: referenceProperties,
|
|
92
97
|
status: "preparing",
|
|
93
98
|
// Since we don't have a real subscription id yet but we need to keep
|
|
94
99
|
// track of this reference, we can just use a random uuid.
|
|
@@ -163,12 +168,15 @@ export class ObjectSetListenerWebsocket {
|
|
|
163
168
|
id,
|
|
164
169
|
requests: readySubs.map(({
|
|
165
170
|
objectSet,
|
|
166
|
-
requestedProperties
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
171
|
+
requestedProperties,
|
|
172
|
+
requestedReferenceProperties
|
|
173
|
+
}) => {
|
|
174
|
+
return {
|
|
175
|
+
objectSet: objectSet,
|
|
176
|
+
propertySet: requestedProperties,
|
|
177
|
+
referenceSet: requestedReferenceProperties
|
|
178
|
+
};
|
|
179
|
+
})
|
|
172
180
|
};
|
|
173
181
|
if (process?.env?.NODE_ENV !== "production") {
|
|
174
182
|
this.#logger?.trace({
|
|
@@ -311,8 +319,30 @@ export class ObjectSetListenerWebsocket {
|
|
|
311
319
|
const sub = this.#subscriptions.get(payload.id);
|
|
312
320
|
!sub ? invariant(false, `Expected subscription id ${payload.id}`) : void 0;
|
|
313
321
|
const objectUpdates = payload.updates.filter(update => update.type === "object");
|
|
314
|
-
payload.updates.filter(update => update.type === "reference");
|
|
322
|
+
const referenceUpdates = payload.updates.filter(update => update.type === "reference");
|
|
323
|
+
const osdkObjectsWithReferenceUpdates = await Promise.all(referenceUpdates.map(async o => {
|
|
324
|
+
const osdkObjectArray = await convertWireToOsdkObjects(this.#client, [{
|
|
325
|
+
__apiName: o.objectType,
|
|
326
|
+
__primaryKey: o.primaryKey[sub.primaryKeyPropertyName],
|
|
327
|
+
...o.primaryKey,
|
|
328
|
+
[o.property]: o.value
|
|
329
|
+
}], undefined);
|
|
330
|
+
const singleOsdkObject = osdkObjectArray[0] ?? undefined;
|
|
331
|
+
return singleOsdkObject != null ? {
|
|
332
|
+
object: singleOsdkObject,
|
|
333
|
+
state: "ADDED_OR_UPDATED"
|
|
334
|
+
} : undefined;
|
|
335
|
+
}));
|
|
336
|
+
for (const osdkObject of osdkObjectsWithReferenceUpdates) {
|
|
337
|
+
if (osdkObject != null) {
|
|
338
|
+
sub.listener.onChange?.(osdkObject);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
315
341
|
const osdkObjects = await Promise.all(objectUpdates.map(async o => {
|
|
342
|
+
const keysToDelete = Object.keys(o.object).filter(key => sub.requestedReferenceProperties.includes(key));
|
|
343
|
+
for (const key of keysToDelete) {
|
|
344
|
+
delete o.object[key];
|
|
345
|
+
}
|
|
316
346
|
const osdkObjectArray = await convertWireToOsdkObjects(this.#client, [o.object], undefined);
|
|
317
347
|
const singleOsdkObject = osdkObjectArray[0] ?? undefined;
|
|
318
348
|
return singleOsdkObject != null ? {
|
|
@@ -322,7 +352,7 @@ export class ObjectSetListenerWebsocket {
|
|
|
322
352
|
}));
|
|
323
353
|
for (const osdkObject of osdkObjects) {
|
|
324
354
|
if (osdkObject != null) {
|
|
325
|
-
|
|
355
|
+
sub.listener.onChange?.(osdkObject);
|
|
326
356
|
}
|
|
327
357
|
}
|
|
328
358
|
};
|
|
@@ -388,8 +418,6 @@ export class ObjectSetListenerWebsocket {
|
|
|
388
418
|
// TODO we should probably throttle this so we don't abuse the backend
|
|
389
419
|
this.#cycleWebsocket();
|
|
390
420
|
};
|
|
391
|
-
// TODO: Validate if this is needed
|
|
392
|
-
async #enableObjectSetsWatcher() {}
|
|
393
421
|
#cycleWebsocket = () => {
|
|
394
422
|
if (this.#ws) {
|
|
395
423
|
this.#ws.removeEventListener("open", this.#onOpen);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectSetListenerWebsocket.js","names":["WebSocket","invariant","convertWireToOsdkObjects","ONE_DAY_MS","MINIMUM_RECONNECT_DELAY_MS","doNothing","fillOutListener","onChange","onError","onOutOfDate","isReady","sub","subscriptionIsDone","status","ObjectSetListenerWebsocket","instances","WeakMap","OBJECT_SET_EXPIRY_MS","getInstance","client","instance","get","clientCacheKey","set","ws","lastWsConnect","logger","pendingSubscriptions","Map","subscriptions","maybeDisconnectTimeout","constructor","objectSetExpiryMs","minimumReconnectDelayMs","child","msgPrefix","baseUrl","startsWith","subscribe","objectSet","listener","properties","globalThis","crypto","webcrypto","requestedProperties","subscriptionId","randomUUID","initiateSubscribe","unsubscribe","#initiateSubscribe","process","env","NODE_ENV","trace","expiry","clearTimeout","setTimeout","expire","ontologyRid","ensureWebsocket","readyState","OPEN","sendSubscribeMessage","error","#sendSubscribeMessage","readySubs","values","filter","length","id","requests","map","propertySet","referenceSet","payload","send","JSON","stringify","#expire","subscription","#unsubscribe","newStatus","undefined","delete","size","cycleWebsocket","#ensureWebsocket","tokenProvider","base","URL","url","host","token","nextConnectTime","Date","now","Promise","resolve","addEventListener","onClose","onMessage","onOpen","CONNECTING","reject","cleanup","removeEventListener","open","evt","#onOpen","message","data","parse","toString","type","handleMessage_objectSetChanged","handleMessage_refreshObjectSet","handleMessage_subscribeResponses","handleMessage_subscriptionClosed","objectUpdates","updates","update","osdkObjects","all","o","osdkObjectArray","object","singleOsdkObject","state","osdkObject","responses","subs","i","response","errors","shouldFireOutOfDate","#handleMessage_subscriptionClosed","cause","event","enableObjectSetsWatcher","#enableObjectSetsWatcher","#cycleWebsocket","CLOSING","CLOSED","close","s"],"sources":["ObjectSetListenerWebsocket.js"],"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 */\nimport WebSocket from \"isomorphic-ws\";\nimport invariant from \"tiny-invariant\";\nimport { convertWireToOsdkObjects } from \"../object/convertWireToOsdkObjects.js\";\nconst ONE_DAY_MS = 24 * 60 * 60 * 1000;\nconst MINIMUM_RECONNECT_DELAY_MS = 5 * 1000;\n/** Noop function to reduce conditional checks */\nfunction doNothing() { }\n/**\n * Converts an ObjectSetListener to one where all the functions are defined.\n */\nfunction fillOutListener({ onChange = doNothing, onError = doNothing, onOutOfDate = doNothing, }) {\n return { onChange, onError, onOutOfDate };\n}\nfunction isReady(sub) {\n return sub.isReady != null;\n}\nfunction subscriptionIsDone(sub) {\n return sub.status === \"done\" || sub.status === \"error\";\n}\n/** @internal */\nexport class ObjectSetListenerWebsocket {\n static #instances = new WeakMap();\n OBJECT_SET_EXPIRY_MS;\n MINIMUM_RECONNECT_DELAY_MS;\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 * map of requestId to all active subscriptions at the time of the request\n */\n #pendingSubscriptions = new Map();\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 #maybeDisconnectTimeout;\n // DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM\n constructor(client, { objectSetExpiryMs = ONE_DAY_MS, minimumReconnectDelayMs = MINIMUM_RECONNECT_DELAY_MS, } = {}) {\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 invariant(client.baseUrl.startsWith(\"https://\")\n || client.baseUrl.startsWith(\"http://\"), \"Stack must be a URL\");\n }\n async subscribe(objectSet, listener, properties) {\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 requestedProperties: properties,\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 // 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 * 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 await this.#ensureWebsocket();\n // the consumer may have already unsubscribed before we are ready to request a subscription\n // so we have to acquire the pendingSubscription after the await.\n if (subscriptionIsDone(sub)) {\n return;\n }\n sub.isReady = true;\n // if we aren't open, then this happens after we #onConnect\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#sendSubscribeMessage();\n }\n }\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 // 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 // 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(({ objectSet, requestedProperties }) => ({\n objectSet: objectSet,\n propertySet: requestedProperties,\n referenceSet: [],\n })),\n };\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ payload: subscribe }, \"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({ subscription: sub }, \"#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 // 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 { baseUrl, tokenProvider } = this.#client;\n const base = new URL(baseUrl);\n const url = `wss://${base.host}/api/v2/ontologySubscriptions/ontologies/${this.#client.ontologyRid}/streamSubscriptions`;\n const token = await tokenProvider();\n // tokenProvider is async, there could potentially be a race to create the websocket.\n // Only the first call to reach here will find a null this.#ws, the rest will bail out\n if (this.#ws == null) {\n // TODO this can probably be exponential backoff with jitter\n // don't reconnect more quickly than MINIMUM_RECONNECT_DELAY\n const nextConnectTime = (this.#lastWsConnect ?? 0)\n + this.MINIMUM_RECONNECT_DELAY_MS;\n if (nextConnectTime > Date.now()) {\n await new Promise((resolve) => {\n setTimeout(resolve, nextConnectTime - Date.now());\n });\n }\n this.#lastWsConnect = Date.now();\n // we again may have lost the race after our minimum backoff time\n if (this.#ws == null) {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"Creating websocket\");\n }\n this.#ws = new WebSocket(url, [`Bearer-${token}`]);\n this.#ws.addEventListener(\"close\", this.#onClose);\n this.#ws.addEventListener(\"message\", this.#onMessage);\n this.#ws.addEventListener(\"open\", this.#onOpen);\n }\n }\n // Allow await-ing the websocket open event if it isn't open already.\n // This needs to happen even for callers that didn't just create this.#ws\n if (this.#ws.readyState === WebSocket.CONNECTING) {\n const ws = this.#ws;\n return new Promise((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({ payload: data }, \"received message from ws\");\n }\n switch (data.type) {\n case \"objectSetChanged\":\n return this.#handleMessage_objectSetChanged(data);\n case \"refreshObjectSet\":\n return this.#handleMessage_refreshObjectSet(data);\n case \"subscribeResponses\":\n return this.#handleMessage_subscribeResponses(data);\n case \"subscriptionClosed\": {\n return this.#handleMessage_subscriptionClosed(data);\n }\n default:\n const _ = data;\n invariant(false, \"Unexpected message type\");\n }\n };\n #handleMessage_objectSetChanged = async (payload) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n const objectUpdates = payload.updates.filter((update) => update.type === \"object\");\n const referenceUpdates = payload.updates.filter((update) => update.type === \"reference\");\n const osdkObjects = await Promise.all(objectUpdates.map(async (o) => {\n const osdkObjectArray = await convertWireToOsdkObjects(this.#client, [o.object], undefined);\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: o.state,\n }\n : undefined;\n }));\n for (const osdkObject of osdkObjects) {\n if (osdkObject != null) {\n return sub.listener.onChange?.(osdkObject);\n }\n }\n };\n #handleMessage_refreshObjectSet = (payload) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n sub.listener.onOutOfDate();\n };\n #handleMessage_subscribeResponses = (payload) => {\n const { id, responses } = payload;\n const subs = this.#pendingSubscriptions.get(id);\n invariant(subs, `should have a pending subscription for ${id}`);\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.errors);\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 const shouldFireOutOfDate = sub.status === \"expired\"\n || sub.status === \"reconnecting\";\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ shouldFireOutOfDate }, \"success\");\n }\n sub.status = \"subscribed\";\n if (sub.subscriptionId !== response.id) {\n // might be the temporary one\n this.#subscriptions.delete(sub.subscriptionId);\n sub.subscriptionId = response.id;\n this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId\n }\n if (shouldFireOutOfDate)\n 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 invariant(sub, `Expected subscription id ${payload.id}`);\n sub.listener.onError([payload.cause]);\n this.#unsubscribe(sub, \"error\");\n }\n #onClose = (event) => {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ event }, \"Received close event from ws\", event);\n }\n // TODO we should probably throttle this so we don't abuse the backend\n this.#cycleWebsocket();\n };\n // TODO: Validate if this is needed\n async #enableObjectSetsWatcher(objectTypeRids) {\n // return batchEnableWatcher(this.#oswContext, {\n // requests: objectTypeRids,\n // });\n return;\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\n && this.#ws.readyState !== WebSocket.CLOSED) {\n this.#ws.close();\n }\n this.#ws = undefined;\n }\n // if we have any listeners that are still depending on us, go ahead and reopen the websocket\n if (this.#subscriptions.size > 0) {\n if (process?.env?.NODE_ENV !== \"production\") {\n for (const s of this.#subscriptions.values()) {\n invariant(s.status !== \"done\" && s.status !== \"error\", \"should not have done/error subscriptions still\");\n }\n }\n for (const s of this.#subscriptions.values()) {\n if (s.status === \"subscribed\")\n s.status = \"reconnecting\";\n }\n this.#ensureWebsocket();\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ObjectSetListenerWebsocket.js","names":["WebSocket","invariant","convertWireToOsdkObjects","ONE_DAY_MS","MINIMUM_RECONNECT_DELAY_MS","doNothing","fillOutListener","onChange","onError","onOutOfDate","isReady","sub","subscriptionIsDone","status","ObjectSetListenerWebsocket","instances","WeakMap","OBJECT_SET_EXPIRY_MS","getInstance","client","instance","get","clientCacheKey","set","ws","lastWsConnect","logger","pendingSubscriptions","Map","subscriptions","maybeDisconnectTimeout","constructor","objectSetExpiryMs","minimumReconnectDelayMs","child","msgPrefix","baseUrl","startsWith","subscribe","objectType","objectSet","listener","properties","globalThis","crypto","webcrypto","objDef","ontologyProvider","getObjectDefinition","apiName","objectProperties","filter","p","type","referenceProperties","primaryKeyPropertyName","primaryKeyApiName","requestedProperties","requestedReferenceProperties","subscriptionId","randomUUID","initiateSubscribe","unsubscribe","#initiateSubscribe","process","env","NODE_ENV","trace","expiry","clearTimeout","setTimeout","expire","ontologyRid","ensureWebsocket","readyState","OPEN","sendSubscribeMessage","error","#sendSubscribeMessage","readySubs","values","length","id","requests","map","propertySet","referenceSet","payload","send","JSON","stringify","#expire","subscription","#unsubscribe","newStatus","undefined","delete","size","cycleWebsocket","#ensureWebsocket","tokenProvider","base","URL","url","host","token","nextConnectTime","Date","now","Promise","resolve","addEventListener","onClose","onMessage","onOpen","CONNECTING","reject","cleanup","removeEventListener","open","evt","#onOpen","message","data","parse","toString","handleMessage_objectSetChanged","handleMessage_refreshObjectSet","handleMessage_subscribeResponses","handleMessage_subscriptionClosed","objectUpdates","updates","update","referenceUpdates","osdkObjectsWithReferenceUpdates","all","o","osdkObjectArray","__apiName","__primaryKey","primaryKey","property","value","singleOsdkObject","object","state","osdkObject","osdkObjects","keysToDelete","Object","keys","key","includes","responses","subs","i","response","errors","shouldFireOutOfDate","#handleMessage_subscriptionClosed","cause","event","#cycleWebsocket","CLOSING","CLOSED","close","s"],"sources":["ObjectSetListenerWebsocket.js"],"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 */\nimport WebSocket from \"isomorphic-ws\";\nimport invariant from \"tiny-invariant\";\nimport { convertWireToOsdkObjects } from \"../object/convertWireToOsdkObjects.js\";\nconst ONE_DAY_MS = 24 * 60 * 60 * 1000;\nconst MINIMUM_RECONNECT_DELAY_MS = 5 * 1000;\n/** Noop function to reduce conditional checks */\nfunction doNothing() { }\n/**\n * Converts an ObjectSetListener to one where all the functions are defined.\n */\nfunction fillOutListener({ onChange = doNothing, onError = doNothing, onOutOfDate = doNothing, }) {\n return { onChange, onError, onOutOfDate };\n}\nfunction isReady(sub) {\n return sub.isReady != null;\n}\nfunction subscriptionIsDone(sub) {\n return sub.status === \"done\" || sub.status === \"error\";\n}\n/** @internal */\nexport class ObjectSetListenerWebsocket {\n static #instances = new WeakMap();\n OBJECT_SET_EXPIRY_MS;\n MINIMUM_RECONNECT_DELAY_MS;\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 * map of requestId to all active subscriptions at the time of the request\n */\n #pendingSubscriptions = new Map();\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 #maybeDisconnectTimeout;\n // DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM\n constructor(client, { objectSetExpiryMs = ONE_DAY_MS, minimumReconnectDelayMs = MINIMUM_RECONNECT_DELAY_MS, } = {}) {\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 invariant(client.baseUrl.startsWith(\"https://\")\n || client.baseUrl.startsWith(\"http://\"), \"Stack must be a URL\");\n }\n async subscribe(objectType, objectSet, listener, properties) {\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 objDef = await this.#client.ontologyProvider.getObjectDefinition(objectType.apiName);\n const objectProperties = properties.filter((p) => objDef.properties[p].type !== \"geotimeSeriesReference\");\n const referenceProperties = properties.filter((p) => objDef.properties[p].type === \"geotimeSeriesReference\");\n const sub = {\n listener: fillOutListener(listener),\n objectSet,\n primaryKeyPropertyName: objDef.primaryKeyApiName,\n requestedProperties: objectProperties,\n requestedReferenceProperties: referenceProperties,\n status: \"preparing\",\n // Since we don't have a real subscription id yet but we need to keep\n // track of this reference, we can just use a random uuid.\n subscriptionId: `TMP-${crypto.randomUUID()}`,\n };\n this.#subscriptions.set(sub.subscriptionId, sub);\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 * 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 await this.#ensureWebsocket();\n // the consumer may have already unsubscribed before we are ready to request a subscription\n // so we have to acquire the pendingSubscription after the await.\n if (subscriptionIsDone(sub)) {\n return;\n }\n sub.isReady = true;\n // if we aren't open, then this happens after we #onConnect\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#sendSubscribeMessage();\n }\n }\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 // 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 // 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(({ objectSet, requestedProperties, requestedReferenceProperties }) => {\n return {\n objectSet: objectSet,\n propertySet: requestedProperties,\n referenceSet: requestedReferenceProperties,\n };\n }),\n };\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ payload: subscribe }, \"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({ subscription: sub }, \"#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 // 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 { baseUrl, tokenProvider } = this.#client;\n const base = new URL(baseUrl);\n const url = `wss://${base.host}/api/v2/ontologySubscriptions/ontologies/${this.#client.ontologyRid}/streamSubscriptions`;\n const token = await tokenProvider();\n // tokenProvider is async, there could potentially be a race to create the websocket.\n // Only the first call to reach here will find a null this.#ws, the rest will bail out\n if (this.#ws == null) {\n // TODO this can probably be exponential backoff with jitter\n // don't reconnect more quickly than MINIMUM_RECONNECT_DELAY\n const nextConnectTime = (this.#lastWsConnect ?? 0)\n + this.MINIMUM_RECONNECT_DELAY_MS;\n if (nextConnectTime > Date.now()) {\n await new Promise((resolve) => {\n setTimeout(resolve, nextConnectTime - Date.now());\n });\n }\n this.#lastWsConnect = Date.now();\n // we again may have lost the race after our minimum backoff time\n if (this.#ws == null) {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"Creating websocket\");\n }\n this.#ws = new WebSocket(url, [`Bearer-${token}`]);\n this.#ws.addEventListener(\"close\", this.#onClose);\n this.#ws.addEventListener(\"message\", this.#onMessage);\n this.#ws.addEventListener(\"open\", this.#onOpen);\n }\n }\n // Allow await-ing the websocket open event if it isn't open already.\n // This needs to happen even for callers that didn't just create this.#ws\n if (this.#ws.readyState === WebSocket.CONNECTING) {\n const ws = this.#ws;\n return new Promise((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({ payload: data }, \"received message from ws\");\n }\n switch (data.type) {\n case \"objectSetChanged\":\n return this.#handleMessage_objectSetChanged(data);\n case \"refreshObjectSet\":\n return this.#handleMessage_refreshObjectSet(data);\n case \"subscribeResponses\":\n return this.#handleMessage_subscribeResponses(data);\n case \"subscriptionClosed\": {\n return this.#handleMessage_subscriptionClosed(data);\n }\n default:\n const _ = data;\n invariant(false, \"Unexpected message type\");\n }\n };\n #handleMessage_objectSetChanged = async (payload) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n const objectUpdates = payload.updates.filter((update) => update.type === \"object\");\n const referenceUpdates = payload.updates.filter((update) => update.type === \"reference\");\n const osdkObjectsWithReferenceUpdates = await Promise.all(referenceUpdates.map(async (o) => {\n const osdkObjectArray = await convertWireToOsdkObjects(this.#client, [{\n __apiName: o.objectType,\n __primaryKey: o.primaryKey[sub.primaryKeyPropertyName],\n ...o.primaryKey,\n [o.property]: o.value,\n }], undefined);\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: \"ADDED_OR_UPDATED\",\n }\n : undefined;\n }));\n for (const osdkObject of osdkObjectsWithReferenceUpdates) {\n if (osdkObject != null) {\n sub.listener.onChange?.(osdkObject);\n }\n }\n const osdkObjects = await Promise.all(objectUpdates.map(async (o) => {\n const keysToDelete = Object.keys(o.object).filter((key) => sub.requestedReferenceProperties.includes(key));\n for (const key of keysToDelete) {\n delete o.object[key];\n }\n const osdkObjectArray = await convertWireToOsdkObjects(this.#client, [o.object], undefined);\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: o.state,\n }\n : undefined;\n }));\n for (const osdkObject of osdkObjects) {\n if (osdkObject != null) {\n sub.listener.onChange?.(osdkObject);\n }\n }\n };\n #handleMessage_refreshObjectSet = (payload) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n sub.listener.onOutOfDate();\n };\n #handleMessage_subscribeResponses = (payload) => {\n const { id, responses } = payload;\n const subs = this.#pendingSubscriptions.get(id);\n invariant(subs, `should have a pending subscription for ${id}`);\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.errors);\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 const shouldFireOutOfDate = sub.status === \"expired\"\n || sub.status === \"reconnecting\";\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ shouldFireOutOfDate }, \"success\");\n }\n sub.status = \"subscribed\";\n if (sub.subscriptionId !== response.id) {\n // might be the temporary one\n this.#subscriptions.delete(sub.subscriptionId);\n sub.subscriptionId = response.id;\n this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId\n }\n if (shouldFireOutOfDate)\n 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 invariant(sub, `Expected subscription id ${payload.id}`);\n sub.listener.onError([payload.cause]);\n this.#unsubscribe(sub, \"error\");\n }\n #onClose = (event) => {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ event }, \"Received close event from ws\", event);\n }\n // TODO we should probably throttle this so we don't abuse the backend\n this.#cycleWebsocket();\n };\n #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\n && this.#ws.readyState !== WebSocket.CLOSED) {\n this.#ws.close();\n }\n this.#ws = undefined;\n }\n // if we have any listeners that are still depending on us, go ahead and reopen the websocket\n if (this.#subscriptions.size > 0) {\n if (process?.env?.NODE_ENV !== \"production\") {\n for (const s of this.#subscriptions.values()) {\n invariant(s.status !== \"done\" && s.status !== \"error\", \"should not have done/error subscriptions still\");\n }\n }\n for (const s of this.#subscriptions.values()) {\n if (s.status === \"subscribed\")\n s.status = \"reconnecting\";\n }\n this.#ensureWebsocket();\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
|