@osdk/client 2.0.2-rc.0 → 2.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -15
- package/build/browser/Client.d.ts +1 -1
- package/build/browser/Client.js +1 -1
- package/build/browser/Client.js.map +1 -1
- package/build/browser/__unstable/createBulkLinksAsyncIterFactory.d.ts +3 -3
- package/build/browser/__unstable/createBulkLinksAsyncIterFactory.d.ts.map +1 -1
- package/build/browser/createClient.d.ts.map +1 -1
- package/build/browser/createClient.js +11 -0
- package/build/browser/createClient.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.d.ts +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.d.ts.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.js +19 -7
- package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js +117 -14
- package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
- package/build/browser/object/aggregate.js +1 -1
- package/build/browser/object/aggregate.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.d.ts +2 -2
- package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.d.ts.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +27 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.test.d.ts +2 -0
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.test.d.ts.map +1 -0
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.test.js +190 -0
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.test.js.map +1 -0
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js +1 -3
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.test.js +25 -1
- package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/browser/object/fetchSingle.js +1 -1
- package/build/browser/object/fetchSingle.js.map +1 -1
- package/build/browser/object/object.test.js +1 -1
- package/build/browser/object/object.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSet.test.js +0 -1
- package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.d.ts +1 -6
- package/build/browser/objectSet/ObjectSetListenerWebsocket.d.ts.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js +37 -156
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +17 -16
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +3 -3
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/queries/applyQuery.js +3 -3
- package/build/browser/queries/applyQuery.js.map +1 -1
- package/build/browser/queries/queries.test.js +7 -1
- package/build/browser/queries/queries.test.js.map +1 -1
- package/build/browser/util/UserAgent.js +1 -1
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/esm/Client.d.ts +1 -1
- package/build/esm/Client.js +1 -1
- package/build/esm/Client.js.map +1 -1
- package/build/esm/__unstable/createBulkLinksAsyncIterFactory.d.ts +3 -3
- package/build/esm/__unstable/createBulkLinksAsyncIterFactory.d.ts.map +1 -1
- package/build/esm/createClient.d.ts.map +1 -1
- package/build/esm/createClient.js +11 -0
- package/build/esm/createClient.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.d.ts +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.d.ts.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.js +19 -7
- package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js +117 -14
- package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
- package/build/esm/object/aggregate.js +1 -1
- package/build/esm/object/aggregate.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.d.ts +2 -2
- package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.d.ts.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +27 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.test.d.ts +2 -0
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.test.d.ts.map +1 -0
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.test.js +190 -0
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.test.js.map +1 -0
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js +1 -3
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.test.js +25 -1
- package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/esm/object/fetchSingle.js +1 -1
- package/build/esm/object/fetchSingle.js.map +1 -1
- package/build/esm/object/object.test.js +1 -1
- package/build/esm/object/object.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSet.test.js +0 -1
- package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.d.ts +1 -6
- package/build/esm/objectSet/ObjectSetListenerWebsocket.d.ts.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js +37 -156
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +17 -16
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +3 -3
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/queries/applyQuery.js +3 -3
- package/build/esm/queries/applyQuery.js.map +1 -1
- package/build/esm/queries/queries.test.js +7 -1
- package/build/esm/queries/queries.test.js.map +1 -1
- package/build/esm/util/UserAgent.js +1 -1
- package/build/esm/util/UserAgent.js.map +1 -1
- package/package.json +9 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectSet.test.js","names":["isOk","$ontologyRid","Employee","FooInterface","Office","apiServer","stubData","afterAll","beforeAll","describe","expect","expectTypeOf","it","createClient","client","listen","close","employeeObjectSet","officeObjectSet","union","subtract","intersect","objectSet","unionedObjectSet","iter","data","employees","fetchPage","emp","employeeId","toEqual","objectSet2","where","subtractedObjectSet","intersectedObjectSet","$orderBy","toMatchObject","$apiName","$objectType","$primaryKey","$title","class","employeeStatus","anything","fullName","office","startDate","employee","fetchOne","employee1","toMatchTypeOf","toBe","employeeResult","fetchOneWithErrors","value","$select","branded","toEqualTypeOf","rejects","toThrow","employee2","pivotTo","result","fetchPageWithErrors","each","k","opts","$__EXPERIMENTAL_strictNonNull","$includeRid","toHaveLength","includeRid","toThrowErrorMatchingInlineSnapshot","not","toBeUndefined","empNotStrict","cheesedFooNotStrict","$as","fooSpt"],"sources":["ObjectSet.test.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 { isOk } from \"@osdk/api\";\nimport { $ontologyRid, Employee, FooInterface, Office, } from \"@osdk/client.test.ontology\";\nimport { apiServer, stubData } from \"@osdk/shared.test\";\nimport { afterAll, beforeAll, describe, expect, expectTypeOf, it, } from \"vitest\";\nimport { createClient } from \"../createClient.js\";\ndescribe(\"ObjectSet\", () => {\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(\"does not allow intersect/union/subtract with different object types\", () => {\n const employeeObjectSet = client(Employee);\n const officeObjectSet = client(Office);\n // @ts-expect-error\n employeeObjectSet.union(officeObjectSet);\n // @ts-expect-error\n employeeObjectSet.subtract(officeObjectSet);\n // @ts-expect-error\n employeeObjectSet.intersect(officeObjectSet);\n });\n it(\"can be cast bidirectionally\", () => {\n function takesOldStyleObjectSet(os) {\n return os;\n }\n function takesNewStyleObjectSet(os) {\n return os;\n }\n function maybe() {\n const newStyleObjectSet = client(Employee);\n const oldStyleObjectSet = newStyleObjectSet;\n takesOldStyleObjectSet(newStyleObjectSet);\n takesNewStyleObjectSet(newStyleObjectSet);\n takesOldStyleObjectSet(oldStyleObjectSet);\n takesNewStyleObjectSet(oldStyleObjectSet);\n }\n if (false) {\n // here for a simple type check\n maybe();\n }\n });\n it(\"objects set union\", async () => {\n const objectSet = client(Employee);\n const unionedObjectSet = objectSet.union(objectSet);\n let iter = 0;\n const { data: employees } = await unionedObjectSet.fetchPage();\n for (const emp of employees) {\n expect(emp.employeeId).toEqual(50030 + iter);\n iter += 1;\n }\n expect(iter).toEqual(2);\n });\n it(\"objects set subtract\", async () => {\n const objectSet = client(Employee);\n const objectSet2 = client(Employee).where({\n employeeId: 50030,\n });\n const subtractedObjectSet = objectSet.subtract(objectSet2);\n let iter = 0;\n const { data: employees } = await subtractedObjectSet.fetchPage();\n for (const emp of employees) {\n expect(emp.employeeId).toEqual(50031 + iter);\n iter += 1;\n }\n expect(iter).toEqual(2);\n });\n it(\"objects set intersect\", async () => {\n const objectSet = client(Employee);\n const intersectedObjectSet = objectSet.intersect(objectSet);\n let iter = 0;\n const { data: employees } = await intersectedObjectSet.fetchPage();\n for (const emp of employees) {\n expect(emp.employeeId).toEqual(50032);\n iter += 1;\n }\n expect(iter).toEqual(1);\n });\n it(\"orders objects in ascending order without a filter, and returns all results\", async () => {\n const { data: employees } = await client(Employee)\n .fetchPage({\n $orderBy: { \"employeeId\": \"asc\" },\n });\n expect(employees).toMatchObject([\n {\n $apiName: \"Employee\",\n $objectType: \"Employee\",\n $primaryKey: 50030,\n $title: \"John Doe\",\n class: \"Red\",\n employeeId: 50030,\n employeeStatus: expect.anything(),\n fullName: \"John Doe\",\n office: \"NYC\",\n startDate: \"2019-01-01\",\n },\n {\n $apiName: \"Employee\",\n $objectType: \"Employee\",\n $primaryKey: 50031,\n $title: \"Jane Doe\",\n class: \"Blue\",\n employeeId: 50031,\n employeeStatus: expect.anything(),\n fullName: \"Jane Doe\",\n office: \"SEA\",\n startDate: \"2012-02-12\",\n },\n {\n $apiName: \"Employee\",\n $objectType: \"Employee\",\n $primaryKey: 50032,\n $title: \"Jack Smith\",\n class: \"Red\",\n employeeId: 50032,\n employeeStatus: expect.anything(),\n fullName: \"Jack Smith\",\n office: \"LON\",\n startDate: \"2015-05-15\",\n },\n ]);\n });\n it(\"allows fetching by PK from a base object set - fetchOne\", async () => {\n const employee = await client(Employee).fetchOne(stubData.employee1.employeeId);\n expectTypeOf().toMatchTypeOf;\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n });\n it(\"allows fetching by PK from a base object set - fetchOneWithErrors\", async () => {\n const employeeResult = await client(Employee)\n .fetchOneWithErrors(stubData.employee1.employeeId);\n expectTypeOf().toMatchTypeOf;\n if (isOk(employeeResult)) {\n const employee = employeeResult.value;\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n }\n });\n it(\"allows fetching by PK from a base object set with selected properties - fetchOne\", async () => {\n const employee = await client(Employee).fetchOne(stubData.employee1.employeeId, { $select: [\"fullName\"] });\n expectTypeOf().branded.toEqualTypeOf;\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n });\n it(\"allows fetching by PK from a base object set with selected properties - fetchOneWithErrors\", async () => {\n const employeeResult = await client(Employee)\n .fetchOneWithErrors(stubData.employee1.employeeId, { $select: [\"fullName\"] });\n expectTypeOf().branded.toEqualTypeOf;\n if (isOk(employeeResult)) {\n const employee = employeeResult.value;\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n }\n });\n it(\"throws when fetching by PK with an object that does not exist - fetchOne\", async () => {\n await expect(client(Employee).fetchOne(-1)).rejects\n .toThrow();\n });\n it(\"throws when fetching by PK with an object that does not exist - fetchOneWithErrors\", async () => {\n const employeeResult = await client(Employee)\n .fetchOneWithErrors(-1);\n expectTypeOf().branded.toEqualTypeOf;\n expect(\"error\" in employeeResult);\n });\n it(\"allows fetching by PK from a pivoted object set - fetchOne\", async () => {\n const employee = await client(Employee).where({\n employeeId: stubData.employee2.employeeId,\n })\n .pivotTo(\"peeps\").fetchOne(stubData.employee1.employeeId);\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n });\n it(\"allows fetching by PK from a pivoted object set - fetchOneWithErrors\", async () => {\n const employeeResult = await client(Employee).where({\n employeeId: stubData.employee2.employeeId,\n })\n .pivotTo(\"peeps\").fetchOneWithErrors(stubData.employee1.employeeId);\n if (isOk(employeeResult)) {\n const employee = employeeResult.value;\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n }\n });\n it(\" object set union works with fetchPageWithErrors\", async () => {\n const objectSet = client(Employee);\n const unionedObjectSet = objectSet.union(objectSet);\n let iter = 0;\n const result = await unionedObjectSet.fetchPageWithErrors();\n if (isOk(result)) {\n const employees = result.value.data;\n for (const emp of employees) {\n expect(emp.employeeId).toEqual(50030 + iter);\n iter += 1;\n }\n expect(iter).toEqual(2);\n }\n });\n describe.each([\"fetchPage\", \"fetchPageWithErrors\"])(\"%s\", (k) => {\n describe(\"strictNonNull: \\\"drop\\\"\", () => {\n describe(\"includeRid: true\", () => {\n it(\"drops bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: \"drop\",\n $includeRid: true,\n };\n const result = k === \"fetchPage\"\n ? await client(Employee).fetchPage(opts)\n : (await client(Employee).fetchPageWithErrors(opts)).value;\n expect(result.data).toHaveLength(3);\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n });\n });\n describe(\"includeRid: false\", () => {\n it(\"drops bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: \"drop\",\n $includeRid: false,\n };\n const result = k === \"fetchPage\"\n ? await client(Employee).fetchPage(opts)\n : (await client(Employee).fetchPageWithErrors(opts)).value;\n expect(result.data).toHaveLength(3);\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n });\n });\n });\n describe(\"strictNonNull: false\", () => {\n describe(\"includeRid: true\", () => {\n it(\"returns bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: false,\n $includeRid: true,\n };\n const result = k === \"fetchPage\"\n ? await client(Employee).fetchPage(opts)\n : (await client(Employee).fetchPageWithErrors(opts)).value;\n expect(result.data).toHaveLength(4);\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n });\n });\n describe(\"includeRid: false\", () => {\n it(\"returns bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: false,\n includeRid: false,\n };\n const result = k === \"fetchPage\"\n ? await client(Employee).fetchPage(opts)\n : (await client(Employee).fetchPageWithErrors(opts)).value;\n expect(result.data).toHaveLength(4);\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n });\n });\n });\n });\n describe(\"strictNonNull: \\\"throw\\\"\", () => {\n it(\"throws when getting bad data\", () => {\n expect(() => client(Employee).fetchPage({\n $__EXPERIMENTAL_strictNonNull: \"throw\",\n })).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Unable to safely convert objects as some non nullable properties are null]`);\n });\n });\n describe.each([\"fetchOne\", \"fetchOneWithErrors\"])(\"%s\", (k) => {\n describe(\"strictNonNull: false\", () => {\n describe(\"includeRid: true\", () => {\n it(\"returns bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: false,\n $includeRid: true,\n };\n const result = k === \"fetchOne\"\n ? await client(Employee).fetchOne(50033, opts)\n : (await client(Employee).fetchOneWithErrors(50033, opts)).value;\n expect(result).not.toBeUndefined();\n expectTypeOf(result).branded.toEqualTypeOf();\n });\n });\n describe(\"includeRid: false\", () => {\n it(\"returns bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: false,\n includeRid: false,\n };\n const result = k === \"fetchOne\"\n ? await client(Employee).fetchOne(50033, opts)\n : (await client(Employee).fetchOneWithErrors(50033, opts)).value;\n expect(result).not.toBeUndefined();\n expectTypeOf(result).branded.toEqualTypeOf();\n });\n });\n });\n });\n describe(\"strictNonNull: \\\"throw\\\"\", () => {\n it(\"throws when getting bad data\", () => {\n expect(() => client(Employee).fetchPage({\n $__EXPERIMENTAL_strictNonNull: \"throw\",\n })).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Unable to safely convert objects as some non nullable properties are null]`);\n });\n });\n describe(\"conversions\", () => {\n describe(\"strictNonNull: false\", () => {\n it(\"returns bad data\", async () => {\n const result = await client(Employee).fetchPage({\n $__EXPERIMENTAL_strictNonNull: false,\n });\n const empNotStrict = result.data[0];\n const empNotStrict2 = empNotStrict;\n expectTypeOf(empNotStrict).branded.toEqualTypeOf();\n expectTypeOf(empNotStrict).branded.toEqualTypeOf();\n expectTypeOf(empNotStrict).branded.toEqualTypeOf();\n expectTypeOf(empNotStrict.employeeId).toEqualTypeOf();\n expectTypeOf(empNotStrict2.employeeId).toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n const CheesedFoo = FooInterface;\n const cheesedFooNotStrict = result.data[0].$as(CheesedFoo);\n expectTypeOf(cheesedFooNotStrict).branded.toEqualTypeOf();\n cheesedFooNotStrict.fooSpt;\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ObjectSet.test.js","names":["isOk","$ontologyRid","Employee","FooInterface","Office","apiServer","stubData","afterAll","beforeAll","describe","expect","expectTypeOf","it","createClient","client","listen","close","employeeObjectSet","officeObjectSet","union","subtract","intersect","objectSet","unionedObjectSet","iter","data","employees","fetchPage","emp","employeeId","toEqual","objectSet2","where","subtractedObjectSet","intersectedObjectSet","$orderBy","toMatchObject","$apiName","$objectType","$primaryKey","class","employeeStatus","anything","fullName","office","startDate","$title","employee","fetchOne","employee1","toMatchTypeOf","toBe","employeeResult","fetchOneWithErrors","value","$select","branded","toEqualTypeOf","rejects","toThrow","employee2","pivotTo","result","fetchPageWithErrors","each","k","opts","$__EXPERIMENTAL_strictNonNull","$includeRid","toHaveLength","includeRid","toThrowErrorMatchingInlineSnapshot","not","toBeUndefined","empNotStrict","cheesedFooNotStrict","$as","fooSpt"],"sources":["ObjectSet.test.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 { isOk } from \"@osdk/api\";\nimport { $ontologyRid, Employee, FooInterface, Office, } from \"@osdk/client.test.ontology\";\nimport { apiServer, stubData } from \"@osdk/shared.test\";\nimport { afterAll, beforeAll, describe, expect, expectTypeOf, it, } from \"vitest\";\nimport { createClient } from \"../createClient.js\";\ndescribe(\"ObjectSet\", () => {\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(\"does not allow intersect/union/subtract with different object types\", () => {\n const employeeObjectSet = client(Employee);\n const officeObjectSet = client(Office);\n // @ts-expect-error\n employeeObjectSet.union(officeObjectSet);\n // @ts-expect-error\n employeeObjectSet.subtract(officeObjectSet);\n // @ts-expect-error\n employeeObjectSet.intersect(officeObjectSet);\n });\n it(\"can be cast bidirectionally\", () => {\n function takesOldStyleObjectSet(os) {\n return os;\n }\n function takesNewStyleObjectSet(os) {\n return os;\n }\n function maybe() {\n const newStyleObjectSet = client(Employee);\n const oldStyleObjectSet = newStyleObjectSet;\n takesOldStyleObjectSet(newStyleObjectSet);\n takesNewStyleObjectSet(newStyleObjectSet);\n takesOldStyleObjectSet(oldStyleObjectSet);\n takesNewStyleObjectSet(oldStyleObjectSet);\n }\n if (false) {\n // here for a simple type check\n maybe();\n }\n });\n it(\"objects set union\", async () => {\n const objectSet = client(Employee);\n const unionedObjectSet = objectSet.union(objectSet);\n let iter = 0;\n const { data: employees } = await unionedObjectSet.fetchPage();\n for (const emp of employees) {\n expect(emp.employeeId).toEqual(50030 + iter);\n iter += 1;\n }\n expect(iter).toEqual(2);\n });\n it(\"objects set subtract\", async () => {\n const objectSet = client(Employee);\n const objectSet2 = client(Employee).where({\n employeeId: 50030,\n });\n const subtractedObjectSet = objectSet.subtract(objectSet2);\n let iter = 0;\n const { data: employees } = await subtractedObjectSet.fetchPage();\n for (const emp of employees) {\n expect(emp.employeeId).toEqual(50031 + iter);\n iter += 1;\n }\n expect(iter).toEqual(2);\n });\n it(\"objects set intersect\", async () => {\n const objectSet = client(Employee);\n const intersectedObjectSet = objectSet.intersect(objectSet);\n let iter = 0;\n const { data: employees } = await intersectedObjectSet.fetchPage();\n for (const emp of employees) {\n expect(emp.employeeId).toEqual(50032);\n iter += 1;\n }\n expect(iter).toEqual(1);\n });\n it(\"orders objects in ascending order without a filter, and returns all results\", async () => {\n const { data: employees } = await client(Employee)\n .fetchPage({\n $orderBy: { \"employeeId\": \"asc\" },\n });\n expect(employees).toMatchObject([\n {\n $apiName: \"Employee\",\n $objectType: \"Employee\",\n $primaryKey: 50030,\n class: \"Red\",\n employeeId: 50030,\n employeeStatus: expect.anything(),\n fullName: \"John Doe\",\n office: \"NYC\",\n startDate: \"2019-01-01\",\n },\n {\n $apiName: \"Employee\",\n $objectType: \"Employee\",\n $primaryKey: 50031,\n $title: \"Jane Doe\",\n class: \"Blue\",\n employeeId: 50031,\n employeeStatus: expect.anything(),\n fullName: \"Jane Doe\",\n office: \"SEA\",\n startDate: \"2012-02-12\",\n },\n {\n $apiName: \"Employee\",\n $objectType: \"Employee\",\n $primaryKey: 50032,\n $title: \"Jack Smith\",\n class: \"Red\",\n employeeId: 50032,\n employeeStatus: expect.anything(),\n fullName: \"Jack Smith\",\n office: \"LON\",\n startDate: \"2015-05-15\",\n },\n ]);\n });\n it(\"allows fetching by PK from a base object set - fetchOne\", async () => {\n const employee = await client(Employee).fetchOne(stubData.employee1.employeeId);\n expectTypeOf().toMatchTypeOf;\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n });\n it(\"allows fetching by PK from a base object set - fetchOneWithErrors\", async () => {\n const employeeResult = await client(Employee)\n .fetchOneWithErrors(stubData.employee1.employeeId);\n expectTypeOf().toMatchTypeOf;\n if (isOk(employeeResult)) {\n const employee = employeeResult.value;\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n }\n });\n it(\"allows fetching by PK from a base object set with selected properties - fetchOne\", async () => {\n const employee = await client(Employee).fetchOne(stubData.employee1.employeeId, { $select: [\"fullName\"] });\n expectTypeOf().branded.toEqualTypeOf;\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n });\n it(\"allows fetching by PK from a base object set with selected properties - fetchOneWithErrors\", async () => {\n const employeeResult = await client(Employee)\n .fetchOneWithErrors(stubData.employee1.employeeId, { $select: [\"fullName\"] });\n expectTypeOf().branded.toEqualTypeOf;\n if (isOk(employeeResult)) {\n const employee = employeeResult.value;\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n }\n });\n it(\"throws when fetching by PK with an object that does not exist - fetchOne\", async () => {\n await expect(client(Employee).fetchOne(-1)).rejects\n .toThrow();\n });\n it(\"throws when fetching by PK with an object that does not exist - fetchOneWithErrors\", async () => {\n const employeeResult = await client(Employee)\n .fetchOneWithErrors(-1);\n expectTypeOf().branded.toEqualTypeOf;\n expect(\"error\" in employeeResult);\n });\n it(\"allows fetching by PK from a pivoted object set - fetchOne\", async () => {\n const employee = await client(Employee).where({\n employeeId: stubData.employee2.employeeId,\n })\n .pivotTo(\"peeps\").fetchOne(stubData.employee1.employeeId);\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n });\n it(\"allows fetching by PK from a pivoted object set - fetchOneWithErrors\", async () => {\n const employeeResult = await client(Employee).where({\n employeeId: stubData.employee2.employeeId,\n })\n .pivotTo(\"peeps\").fetchOneWithErrors(stubData.employee1.employeeId);\n if (isOk(employeeResult)) {\n const employee = employeeResult.value;\n expect(employee.$primaryKey).toBe(stubData.employee1.employeeId);\n }\n });\n it(\" object set union works with fetchPageWithErrors\", async () => {\n const objectSet = client(Employee);\n const unionedObjectSet = objectSet.union(objectSet);\n let iter = 0;\n const result = await unionedObjectSet.fetchPageWithErrors();\n if (isOk(result)) {\n const employees = result.value.data;\n for (const emp of employees) {\n expect(emp.employeeId).toEqual(50030 + iter);\n iter += 1;\n }\n expect(iter).toEqual(2);\n }\n });\n describe.each([\"fetchPage\", \"fetchPageWithErrors\"])(\"%s\", (k) => {\n describe(\"strictNonNull: \\\"drop\\\"\", () => {\n describe(\"includeRid: true\", () => {\n it(\"drops bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: \"drop\",\n $includeRid: true,\n };\n const result = k === \"fetchPage\"\n ? await client(Employee).fetchPage(opts)\n : (await client(Employee).fetchPageWithErrors(opts)).value;\n expect(result.data).toHaveLength(3);\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n });\n });\n describe(\"includeRid: false\", () => {\n it(\"drops bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: \"drop\",\n $includeRid: false,\n };\n const result = k === \"fetchPage\"\n ? await client(Employee).fetchPage(opts)\n : (await client(Employee).fetchPageWithErrors(opts)).value;\n expect(result.data).toHaveLength(3);\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n });\n });\n });\n describe(\"strictNonNull: false\", () => {\n describe(\"includeRid: true\", () => {\n it(\"returns bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: false,\n $includeRid: true,\n };\n const result = k === \"fetchPage\"\n ? await client(Employee).fetchPage(opts)\n : (await client(Employee).fetchPageWithErrors(opts)).value;\n expect(result.data).toHaveLength(4);\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n });\n });\n describe(\"includeRid: false\", () => {\n it(\"returns bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: false,\n includeRid: false,\n };\n const result = k === \"fetchPage\"\n ? await client(Employee).fetchPage(opts)\n : (await client(Employee).fetchPageWithErrors(opts)).value;\n expect(result.data).toHaveLength(4);\n expectTypeOf(result.data[0]).branded.toEqualTypeOf();\n });\n });\n });\n });\n describe(\"strictNonNull: \\\"throw\\\"\", () => {\n it(\"throws when getting bad data\", () => {\n expect(() => client(Employee).fetchPage({\n $__EXPERIMENTAL_strictNonNull: \"throw\",\n })).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Unable to safely convert objects as some non nullable properties are null]`);\n });\n });\n describe.each([\"fetchOne\", \"fetchOneWithErrors\"])(\"%s\", (k) => {\n describe(\"strictNonNull: false\", () => {\n describe(\"includeRid: true\", () => {\n it(\"returns bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: false,\n $includeRid: true,\n };\n const result = k === \"fetchOne\"\n ? await client(Employee).fetchOne(50033, opts)\n : (await client(Employee).fetchOneWithErrors(50033, opts)).value;\n expect(result).not.toBeUndefined();\n expectTypeOf(result).branded.toEqualTypeOf();\n });\n });\n describe(\"includeRid: false\", () => {\n it(\"returns bad data\", async () => {\n const opts = {\n $__EXPERIMENTAL_strictNonNull: false,\n includeRid: false,\n };\n const result = k === \"fetchOne\"\n ? await client(Employee).fetchOne(50033, opts)\n : (await client(Employee).fetchOneWithErrors(50033, opts)).value;\n expect(result).not.toBeUndefined();\n expectTypeOf(result).branded.toEqualTypeOf();\n });\n });\n });\n });\n describe(\"strictNonNull: \\\"throw\\\"\", () => {\n it(\"throws when getting bad data\", () => {\n expect(() => client(Employee).fetchPage({\n $__EXPERIMENTAL_strictNonNull: \"throw\",\n })).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: Unable to safely convert objects as some non nullable properties are null]`);\n });\n });\n describe(\"conversions\", () => {\n describe(\"strictNonNull: false\", () => {\n it(\"returns bad data\", async () => {\n const result = await client(Employee).fetchPage({\n $__EXPERIMENTAL_strictNonNull: false,\n });\n const empNotStrict = result.data[0];\n const empNotStrict2 = empNotStrict;\n expectTypeOf(empNotStrict).branded.toEqualTypeOf();\n expectTypeOf(empNotStrict).branded.toEqualTypeOf();\n expectTypeOf(empNotStrict).branded.toEqualTypeOf();\n expectTypeOf(empNotStrict.employeeId).toEqualTypeOf();\n expectTypeOf(empNotStrict2.employeeId).toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n expectTypeOf()\n .toEqualTypeOf();\n const CheesedFoo = FooInterface;\n const cheesedFooNotStrict = result.data[0].$as(CheesedFoo);\n expectTypeOf(cheesedFooNotStrict).branded.toEqualTypeOf();\n cheesedFooNotStrict.fooSpt;\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectSetListenerWebsocket.d.ts","sourceRoot":"","sources":["../../../src/objectSet/ObjectSetListenerWebsocket.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ObjectSetListenerWebsocket.d.ts","sourceRoot":"","sources":["../../../src/objectSet/ObjectSetListenerWebsocket.ts"],"names":[],"mappings":""}
|
|
@@ -13,14 +13,9 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { bulkLoadOntologyEntities, createTemporaryObjectSet, loadAllOntologies } from "@osdk/client.unstable";
|
|
17
|
-
import { batchEnableWatcher } from "@osdk/client.unstable.osw";
|
|
18
|
-
import * as OntologiesV2 from "@osdk/internal.foundry.ontologiesv2";
|
|
19
16
|
import WebSocket from "isomorphic-ws";
|
|
20
17
|
import invariant from "tiny-invariant";
|
|
21
|
-
import { metadataCacheClient } from "../__unstable/ConjureSupport.js";
|
|
22
18
|
import { convertWireToOsdkObjects } from "../object/convertWireToOsdkObjects.js";
|
|
23
|
-
import { getObjectSetBaseType, toConjureObjectSet } from "./toConjureObjectSet.js";
|
|
24
19
|
const ONE_DAY_MS = 24 * 60 * 60 * 1000;
|
|
25
20
|
const MINIMUM_RECONNECT_DELAY_MS = 5 * 1000;
|
|
26
21
|
/** Noop function to reduce conditional checks */
|
|
@@ -40,7 +35,7 @@ function fillOutListener({
|
|
|
40
35
|
};
|
|
41
36
|
}
|
|
42
37
|
function isReady(sub) {
|
|
43
|
-
return sub.
|
|
38
|
+
return sub.isReady != null;
|
|
44
39
|
}
|
|
45
40
|
function subscriptionIsDone(sub) {
|
|
46
41
|
return sub.status === "done" || sub.status === "error";
|
|
@@ -72,9 +67,6 @@ export class ObjectSetListenerWebsocket {
|
|
|
72
67
|
* temporary and not the actual subscriptionId from the server.
|
|
73
68
|
*/
|
|
74
69
|
#subscriptions = new Map();
|
|
75
|
-
#oswContext;
|
|
76
|
-
#metadataContext;
|
|
77
|
-
#ossContext;
|
|
78
70
|
#maybeDisconnectTimeout;
|
|
79
71
|
// DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM
|
|
80
72
|
constructor(client, {
|
|
@@ -88,28 +80,15 @@ export class ObjectSetListenerWebsocket {
|
|
|
88
80
|
msgPrefix: "<OSW> "
|
|
89
81
|
});
|
|
90
82
|
!(client.baseUrl.startsWith("https://") || client.baseUrl.startsWith("http://")) ? invariant(false, "Stack must be a URL") : void 0;
|
|
91
|
-
this.#oswContext = {
|
|
92
|
-
baseUrl: client.baseUrl,
|
|
93
|
-
servicePath: "/object-set-watcher/api",
|
|
94
|
-
fetchFn: client.fetch,
|
|
95
|
-
tokenProvider: async () => await client.tokenProvider()
|
|
96
|
-
};
|
|
97
|
-
this.#ossContext = {
|
|
98
|
-
...this.#oswContext,
|
|
99
|
-
servicePath: "/object-set-service/api"
|
|
100
|
-
};
|
|
101
|
-
this.#metadataContext = {
|
|
102
|
-
...this.#oswContext,
|
|
103
|
-
servicePath: "/ontology-metadata/api"
|
|
104
|
-
};
|
|
105
83
|
}
|
|
106
|
-
async subscribe(objectSet, listener) {
|
|
84
|
+
async subscribe(objectSet, listener, properties) {
|
|
107
85
|
// Node 18 does not expose 'crypto' on globalThis, so we need to do it ourselves. This
|
|
108
86
|
// will not be needed after our minimum version is 19 or greater.
|
|
109
87
|
globalThis.crypto ??= (await import("node:crypto")).webcrypto;
|
|
110
88
|
const sub = {
|
|
111
89
|
listener: fillOutListener(listener),
|
|
112
90
|
objectSet,
|
|
91
|
+
requestedProperties: properties,
|
|
113
92
|
status: "preparing",
|
|
114
93
|
// Since we don't have a real subscription id yet but we need to keep
|
|
115
94
|
// track of this reference, we can just use a random uuid.
|
|
@@ -142,28 +121,22 @@ export class ObjectSetListenerWebsocket {
|
|
|
142
121
|
// expiry is tied to the temporary object set, which is set to `timeToLive: "ONE_DAY"`
|
|
143
122
|
// in `#createTemporaryObjectSet`. They should be in sync
|
|
144
123
|
sub.expiry = setTimeout(() => this.#expire(sub), this.OBJECT_SET_EXPIRY_MS);
|
|
145
|
-
|
|
124
|
+
await this.#client.ontologyRid;
|
|
146
125
|
try {
|
|
147
|
-
|
|
148
|
-
// create a time-bounded object set representation for watching
|
|
149
|
-
this.#createTemporaryObjectSet(sub.objectSet), this.#ensureWebsocket(),
|
|
150
|
-
// look up the object type's rid and ensure that we have enabled object set watcher for that rid
|
|
151
|
-
// TODO ???
|
|
152
|
-
getObjectSetBaseType(sub.objectSet).then(baseType => OntologiesV2.ObjectTypesV2.get(this.#client, ontologyRid, baseType)).then(objectType => this.#enableObjectSetsWatcher([objectType.rid]))]);
|
|
126
|
+
await this.#ensureWebsocket();
|
|
153
127
|
// the consumer may have already unsubscribed before we are ready to request a subscription
|
|
154
128
|
// so we have to acquire the pendingSubscription after the await.
|
|
155
129
|
if (subscriptionIsDone(sub)) {
|
|
156
130
|
return;
|
|
157
131
|
}
|
|
158
|
-
|
|
159
|
-
sub.temporaryObjectSetId = temporaryObjectSet.objectSetRid;
|
|
132
|
+
sub.isReady = true;
|
|
160
133
|
// if we aren't open, then this happens after we #onConnect
|
|
161
134
|
if (this.#ws?.readyState === WebSocket.OPEN) {
|
|
162
135
|
this.#sendSubscribeMessage();
|
|
163
136
|
}
|
|
164
137
|
} catch (error) {
|
|
165
138
|
this.#logger?.error(error, "Error in #initiateSubscribe");
|
|
166
|
-
sub.listener.onError(error);
|
|
139
|
+
sub.listener.onError([error]);
|
|
167
140
|
}
|
|
168
141
|
}
|
|
169
142
|
#sendSubscribeMessage() {
|
|
@@ -189,15 +162,12 @@ export class ObjectSetListenerWebsocket {
|
|
|
189
162
|
const subscribe = {
|
|
190
163
|
id,
|
|
191
164
|
requests: readySubs.map(({
|
|
192
|
-
|
|
165
|
+
objectSet,
|
|
166
|
+
requestedProperties
|
|
193
167
|
}) => ({
|
|
194
|
-
objectSet:
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
parameterOverrides: {}
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
watchAllLinks: false
|
|
168
|
+
objectSet: objectSet,
|
|
169
|
+
propertySet: requestedProperties,
|
|
170
|
+
referenceSet: []
|
|
201
171
|
}))
|
|
202
172
|
};
|
|
203
173
|
if (process?.env?.NODE_ENV !== "production") {
|
|
@@ -261,8 +231,7 @@ export class ObjectSetListenerWebsocket {
|
|
|
261
231
|
tokenProvider
|
|
262
232
|
} = this.#client;
|
|
263
233
|
const base = new URL(baseUrl);
|
|
264
|
-
|
|
265
|
-
const url = `wss://${base.host}/object-set-watcher/ws/subscriptions`;
|
|
234
|
+
const url = `wss://${base.host}/api/v2/ontologySubscriptions/ontologies/${this.#client.ontologyRid}/streamSubscriptions`;
|
|
266
235
|
const token = await tokenProvider();
|
|
267
236
|
// tokenProvider is async, there could potentially be a race to create the websocket.
|
|
268
237
|
// Only the first call to reach here will find a null this.#ws, the rest will bail out
|
|
@@ -325,15 +294,14 @@ export class ObjectSetListenerWebsocket {
|
|
|
325
294
|
}
|
|
326
295
|
switch (data.type) {
|
|
327
296
|
case "objectSetChanged":
|
|
328
|
-
return this.#handleMessage_objectSetChanged(data
|
|
297
|
+
return this.#handleMessage_objectSetChanged(data);
|
|
329
298
|
case "refreshObjectSet":
|
|
330
|
-
return this.#handleMessage_refreshObjectSet(data
|
|
299
|
+
return this.#handleMessage_refreshObjectSet(data);
|
|
331
300
|
case "subscribeResponses":
|
|
332
|
-
return this.#handleMessage_subscribeResponses(data
|
|
301
|
+
return this.#handleMessage_subscribeResponses(data);
|
|
333
302
|
case "subscriptionClosed":
|
|
334
303
|
{
|
|
335
|
-
|
|
336
|
-
return this.#handleMessage_subscriptionClosed(payload);
|
|
304
|
+
return this.#handleMessage_subscriptionClosed(data);
|
|
337
305
|
}
|
|
338
306
|
default:
|
|
339
307
|
invariant(false, "Unexpected message type");
|
|
@@ -342,15 +310,21 @@ export class ObjectSetListenerWebsocket {
|
|
|
342
310
|
#handleMessage_objectSetChanged = async payload => {
|
|
343
311
|
const sub = this.#subscriptions.get(payload.id);
|
|
344
312
|
!sub ? invariant(false, `Expected subscription id ${payload.id}`) : void 0;
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
313
|
+
const objectUpdates = payload.updates.filter(update => update.type === "object");
|
|
314
|
+
payload.updates.filter(update => update.type === "reference");
|
|
315
|
+
const osdkObjects = await Promise.all(objectUpdates.map(async o => {
|
|
316
|
+
const osdkObjectArray = await convertWireToOsdkObjects(this.#client, [o.object], undefined);
|
|
317
|
+
const singleOsdkObject = osdkObjectArray[0] ?? undefined;
|
|
318
|
+
return singleOsdkObject != null ? {
|
|
319
|
+
object: singleOsdkObject,
|
|
320
|
+
state: o.state
|
|
321
|
+
} : undefined;
|
|
322
|
+
}));
|
|
323
|
+
for (const osdkObject of osdkObjects) {
|
|
324
|
+
if (osdkObject != null) {
|
|
325
|
+
return sub.listener.onChange?.(osdkObject);
|
|
326
|
+
}
|
|
348
327
|
}
|
|
349
|
-
const objects = payload.updates.filter(function (a) {
|
|
350
|
-
return a.type === "object";
|
|
351
|
-
}).map(a => a.object);
|
|
352
|
-
!(objects.length === payload.updates.length) ? invariant(false, "currently only support full updates not reference updates") : void 0;
|
|
353
|
-
sub.listener.onChange(await convertFoundryToOsdkObjects(this.#client, this.#metadataContext, objects));
|
|
354
328
|
};
|
|
355
329
|
#handleMessage_refreshObjectSet = payload => {
|
|
356
330
|
const sub = this.#subscriptions.get(payload.id);
|
|
@@ -370,7 +344,7 @@ export class ObjectSetListenerWebsocket {
|
|
|
370
344
|
const response = responses[i];
|
|
371
345
|
switch (response.type) {
|
|
372
346
|
case "error":
|
|
373
|
-
sub.listener.onError(response.
|
|
347
|
+
sub.listener.onError(response.errors);
|
|
374
348
|
this.#unsubscribe(sub, "error");
|
|
375
349
|
break;
|
|
376
350
|
case "qos":
|
|
@@ -386,10 +360,10 @@ export class ObjectSetListenerWebsocket {
|
|
|
386
360
|
}, "success");
|
|
387
361
|
}
|
|
388
362
|
sub.status = "subscribed";
|
|
389
|
-
if (sub.subscriptionId !== response.
|
|
363
|
+
if (sub.subscriptionId !== response.id) {
|
|
390
364
|
// might be the temporary one
|
|
391
365
|
this.#subscriptions.delete(sub.subscriptionId);
|
|
392
|
-
sub.subscriptionId = response.
|
|
366
|
+
sub.subscriptionId = response.id;
|
|
393
367
|
this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId
|
|
394
368
|
}
|
|
395
369
|
if (shouldFireOutOfDate) sub.listener.onOutOfDate();
|
|
@@ -402,7 +376,7 @@ export class ObjectSetListenerWebsocket {
|
|
|
402
376
|
#handleMessage_subscriptionClosed(payload) {
|
|
403
377
|
const sub = this.#subscriptions.get(payload.id);
|
|
404
378
|
!sub ? invariant(false, `Expected subscription id ${payload.id}`) : void 0;
|
|
405
|
-
sub.listener.onError(payload.
|
|
379
|
+
sub.listener.onError([payload.cause]);
|
|
406
380
|
this.#unsubscribe(sub, "error");
|
|
407
381
|
}
|
|
408
382
|
#onClose = event => {
|
|
@@ -414,28 +388,8 @@ export class ObjectSetListenerWebsocket {
|
|
|
414
388
|
// TODO we should probably throttle this so we don't abuse the backend
|
|
415
389
|
this.#cycleWebsocket();
|
|
416
390
|
};
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
requests: objectTypeRids
|
|
420
|
-
});
|
|
421
|
-
}
|
|
422
|
-
async #createTemporaryObjectSet(objectSet) {
|
|
423
|
-
const objectSetBaseType = await getObjectSetBaseType(objectSet);
|
|
424
|
-
const mcc = await metadataCacheClient(this.#client);
|
|
425
|
-
const objectInfo = await mcc.forObjectByApiName(objectSetBaseType);
|
|
426
|
-
const propMapping = await objectInfo.getPropertyMapping();
|
|
427
|
-
const temporaryObjectSet = await createTemporaryObjectSet(this.#ossContext, {
|
|
428
|
-
objectSet: toConjureObjectSet(objectSet, propMapping),
|
|
429
|
-
timeToLive: "ONE_DAY",
|
|
430
|
-
// MUST keep in sync with the value for expiry in `#initiateSubscribe`.
|
|
431
|
-
objectSetFilterContext: {
|
|
432
|
-
parameterOverrides: {}
|
|
433
|
-
}
|
|
434
|
-
});
|
|
435
|
-
return {
|
|
436
|
-
objectSetRid: temporaryObjectSet.objectSetRid
|
|
437
|
-
};
|
|
438
|
-
}
|
|
391
|
+
// TODO: Validate if this is needed
|
|
392
|
+
async #enableObjectSetsWatcher() {}
|
|
439
393
|
#cycleWebsocket = () => {
|
|
440
394
|
if (this.#ws) {
|
|
441
395
|
this.#ws.removeEventListener("open", this.#onOpen);
|
|
@@ -460,77 +414,4 @@ export class ObjectSetListenerWebsocket {
|
|
|
460
414
|
}
|
|
461
415
|
};
|
|
462
416
|
}
|
|
463
|
-
async function convertFoundryToOsdkObjects(client, ctx, objects) {
|
|
464
|
-
const osdkObjects = await Promise.all(objects.map(async object => {
|
|
465
|
-
const propertyMapping = await (await (await metadataCacheClient(client)).forObjectByRid(object.type)).getPropertyMapping();
|
|
466
|
-
const convertedObject = Object.fromEntries([...Object.entries(object.properties).map(([key, value]) => {
|
|
467
|
-
return [propertyMapping?.propertyIdToApiNameMapping[key], value];
|
|
468
|
-
}), [propertyMapping?.propertyIdToApiNameMapping[Object.entries(object.key)[0][0]], Object.entries(object.key)[0][1]], ["__apiName", propertyMapping?.apiName], ["$apiName", propertyMapping?.apiName]]);
|
|
469
|
-
return convertedObject;
|
|
470
|
-
}));
|
|
471
|
-
// doesn't care about interfaces
|
|
472
|
-
return await convertWireToOsdkObjects(client, osdkObjects, undefined);
|
|
473
|
-
}
|
|
474
|
-
// Mapping of ObjectRid to Properties
|
|
475
|
-
const objectTypeMapping = new WeakMap();
|
|
476
|
-
const objectApiNameToRid = new Map();
|
|
477
|
-
async function getOntologyPropertyMappingForApiName(client, ctx, objectApiName) {
|
|
478
|
-
if (objectApiNameToRid.has(objectApiName)) {
|
|
479
|
-
return objectTypeMapping.get(ctx)?.get(objectApiNameToRid.get(objectApiName));
|
|
480
|
-
}
|
|
481
|
-
const ontologyRid = await client.ontologyRid;
|
|
482
|
-
const wireObjectType = await OntologiesV2.ObjectTypesV2.get(client, ontologyRid, objectApiName);
|
|
483
|
-
return getOntologyPropertyMappingForRid(ctx, ontologyRid, wireObjectType.rid);
|
|
484
|
-
}
|
|
485
|
-
let cachedAllOntologies;
|
|
486
|
-
async function getOntologyVersionForRid(ctx, ontologyRid) {
|
|
487
|
-
cachedAllOntologies ??= await loadAllOntologies(ctx, {});
|
|
488
|
-
!cachedAllOntologies.ontologies[ontologyRid] ? invariant(false, "ontology should be loaded") : void 0;
|
|
489
|
-
return cachedAllOntologies.ontologies[ontologyRid].currentOntologyVersion;
|
|
490
|
-
}
|
|
491
|
-
async function getOntologyPropertyMappingForRid(ctx, ontologyRid, objectRid) {
|
|
492
|
-
if (!objectTypeMapping.has(ctx)) {
|
|
493
|
-
objectTypeMapping.set(ctx, new Map());
|
|
494
|
-
}
|
|
495
|
-
if (!objectTypeMapping.get(ctx).has(objectRid)) {
|
|
496
|
-
const ontologyVersion = await getOntologyVersionForRid(ctx, ontologyRid);
|
|
497
|
-
const body = {
|
|
498
|
-
datasourceTypes: [],
|
|
499
|
-
objectTypes: [{
|
|
500
|
-
identifier: {
|
|
501
|
-
type: "objectTypeRid",
|
|
502
|
-
objectTypeRid: objectRid
|
|
503
|
-
},
|
|
504
|
-
versionReference: {
|
|
505
|
-
type: "ontologyVersion",
|
|
506
|
-
ontologyVersion: ontologyVersion
|
|
507
|
-
}
|
|
508
|
-
}],
|
|
509
|
-
linkTypes: [],
|
|
510
|
-
sharedPropertyTypes: [],
|
|
511
|
-
interfaceTypes: [],
|
|
512
|
-
typeGroups: [],
|
|
513
|
-
loadRedacted: false,
|
|
514
|
-
includeObjectTypeCount: undefined,
|
|
515
|
-
includeObjectTypesWithoutSearchableDatasources: true,
|
|
516
|
-
includeEntityMetadata: undefined
|
|
517
|
-
};
|
|
518
|
-
const entities = await bulkLoadOntologyEntities(ctx, undefined, body);
|
|
519
|
-
!entities.objectTypes[0]?.objectType ? invariant(false, "object type should be loaded") : void 0;
|
|
520
|
-
const propertyIdToApiNameMapping = Object.fromEntries(Object.values(entities.objectTypes[0].objectType.propertyTypes).map(property => {
|
|
521
|
-
return [property.id, property.apiName];
|
|
522
|
-
}));
|
|
523
|
-
const propertyApiNameToIdMapping = Object.fromEntries(Object.values(entities.objectTypes[0].objectType.propertyTypes).map(property => {
|
|
524
|
-
return [property.apiName, property.id];
|
|
525
|
-
}));
|
|
526
|
-
objectTypeMapping.get(ctx)?.set(objectRid, {
|
|
527
|
-
apiName: entities.objectTypes[0].objectType.apiName,
|
|
528
|
-
id: entities.objectTypes[0].objectType.id,
|
|
529
|
-
propertyIdToApiNameMapping,
|
|
530
|
-
propertyApiNameToIdMapping
|
|
531
|
-
});
|
|
532
|
-
objectApiNameToRid.set(entities.objectTypes[0].objectType.apiName, objectRid);
|
|
533
|
-
}
|
|
534
|
-
return objectTypeMapping.get(ctx)?.get(objectRid);
|
|
535
|
-
}
|
|
536
417
|
//# sourceMappingURL=ObjectSetListenerWebsocket.js.map
|