@osdk/client 2.2.0-beta.12 → 2.2.0-beta.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/build/browser/actions/actions.test.js +1 -1
  3. package/build/browser/actions/actions.test.js.map +1 -1
  4. package/build/browser/index.js +1 -1
  5. package/build/browser/index.js.map +1 -1
  6. package/build/browser/logger/TestLogger.js +59 -0
  7. package/build/browser/logger/TestLogger.js.map +1 -0
  8. package/build/browser/object/attachment.test.js.map +1 -1
  9. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +4 -0
  10. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  11. package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js +44 -33
  12. package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
  13. package/build/browser/object/convertWireToOsdkObjects.js +4 -9
  14. package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
  15. package/build/browser/object/convertWireToOsdkObjects.test.js +29 -25
  16. package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
  17. package/build/browser/object/fetchPage.js +4 -3
  18. package/build/browser/object/fetchPage.js.map +1 -1
  19. package/build/browser/object/object.test.js +17 -1
  20. package/build/browser/object/object.test.js.map +1 -1
  21. package/build/browser/object/timeseries.test.js.map +1 -1
  22. package/build/browser/objectSet/ObjectSet.test.js +98 -1
  23. package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
  24. package/build/browser/objectSet/ObjectSetListenerWebsocket.js +2 -2
  25. package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  26. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +2 -3
  27. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  28. package/build/browser/objectSet/createObjectSet.js +1 -0
  29. package/build/browser/objectSet/createObjectSet.js.map +1 -1
  30. package/build/browser/observable/internal/ActionApplication.js +4 -4
  31. package/build/browser/observable/internal/ActionApplication.js.map +1 -1
  32. package/build/browser/observable/internal/ObjectQuery.js +1 -1
  33. package/build/browser/observable/internal/ObjectQuery.js.map +1 -1
  34. package/build/browser/observable/internal/OptimisticJob.js +1 -1
  35. package/build/browser/observable/internal/OptimisticJob.js.map +1 -1
  36. package/build/browser/observable/internal/Store.js +2 -2
  37. package/build/browser/observable/internal/Store.js.map +1 -1
  38. package/build/browser/observable/internal/Store.test.js +173 -216
  39. package/build/browser/observable/internal/Store.test.js.map +1 -1
  40. package/build/browser/queries/applyQuery.js +3 -3
  41. package/build/browser/queries/applyQuery.js.map +1 -1
  42. package/build/browser/util/UserAgent.js +1 -1
  43. package/build/browser/util/extractRdpDefinition.js +87 -0
  44. package/build/browser/util/extractRdpDefinition.js.map +1 -0
  45. package/build/browser/util/extractRdpDefinition.test.js +144 -0
  46. package/build/browser/util/extractRdpDefinition.test.js.map +1 -0
  47. package/build/browser/util/objectSpecifierUtils.js +48 -0
  48. package/build/browser/util/objectSpecifierUtils.js.map +1 -0
  49. package/build/browser/util/objectSpecifierUtils.test.js +42 -0
  50. package/build/browser/util/objectSpecifierUtils.test.js.map +1 -0
  51. package/build/browser/util/toDataValueQueries.js +2 -4
  52. package/build/browser/util/toDataValueQueries.js.map +1 -1
  53. package/build/cjs/{chunk-EY52J5Z4.cjs → chunk-USHAX4EP.cjs} +89 -17
  54. package/build/cjs/chunk-USHAX4EP.cjs.map +1 -0
  55. package/build/cjs/{chunk-MCQVHD2F.cjs → chunk-VT3UM6EP.cjs} +17 -16
  56. package/build/cjs/chunk-VT3UM6EP.cjs.map +1 -0
  57. package/build/cjs/index.cjs +104 -95
  58. package/build/cjs/index.cjs.map +1 -1
  59. package/build/cjs/index.d.cts +11 -3
  60. package/build/cjs/public/internal.cjs +6 -7
  61. package/build/cjs/public/internal.cjs.map +1 -1
  62. package/build/cjs/public/unstable-do-not-use.cjs +67 -66
  63. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  64. package/build/esm/actions/actions.test.js +1 -1
  65. package/build/esm/actions/actions.test.js.map +1 -1
  66. package/build/esm/index.js +1 -1
  67. package/build/esm/index.js.map +1 -1
  68. package/build/esm/logger/TestLogger.js +59 -0
  69. package/build/esm/logger/TestLogger.js.map +1 -0
  70. package/build/esm/object/attachment.test.js.map +1 -1
  71. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +4 -0
  72. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  73. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js +44 -33
  74. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
  75. package/build/esm/object/convertWireToOsdkObjects.js +4 -9
  76. package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
  77. package/build/esm/object/convertWireToOsdkObjects.test.js +29 -25
  78. package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
  79. package/build/esm/object/fetchPage.js +4 -3
  80. package/build/esm/object/fetchPage.js.map +1 -1
  81. package/build/esm/object/object.test.js +17 -1
  82. package/build/esm/object/object.test.js.map +1 -1
  83. package/build/esm/object/timeseries.test.js.map +1 -1
  84. package/build/esm/objectSet/ObjectSet.test.js +98 -1
  85. package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
  86. package/build/esm/objectSet/ObjectSetListenerWebsocket.js +2 -2
  87. package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  88. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +2 -3
  89. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  90. package/build/esm/objectSet/createObjectSet.js +1 -0
  91. package/build/esm/objectSet/createObjectSet.js.map +1 -1
  92. package/build/esm/observable/internal/ActionApplication.js +4 -4
  93. package/build/esm/observable/internal/ActionApplication.js.map +1 -1
  94. package/build/esm/observable/internal/ObjectQuery.js +1 -1
  95. package/build/esm/observable/internal/ObjectQuery.js.map +1 -1
  96. package/build/esm/observable/internal/OptimisticJob.js +1 -1
  97. package/build/esm/observable/internal/OptimisticJob.js.map +1 -1
  98. package/build/esm/observable/internal/Store.js +2 -2
  99. package/build/esm/observable/internal/Store.js.map +1 -1
  100. package/build/esm/observable/internal/Store.test.js +173 -216
  101. package/build/esm/observable/internal/Store.test.js.map +1 -1
  102. package/build/esm/queries/applyQuery.js +3 -3
  103. package/build/esm/queries/applyQuery.js.map +1 -1
  104. package/build/esm/util/UserAgent.js +1 -1
  105. package/build/esm/util/extractRdpDefinition.js +87 -0
  106. package/build/esm/util/extractRdpDefinition.js.map +1 -0
  107. package/build/esm/util/extractRdpDefinition.test.js +144 -0
  108. package/build/esm/util/extractRdpDefinition.test.js.map +1 -0
  109. package/build/esm/util/objectSpecifierUtils.js +48 -0
  110. package/build/esm/util/objectSpecifierUtils.js.map +1 -0
  111. package/build/esm/util/objectSpecifierUtils.test.js +42 -0
  112. package/build/esm/util/objectSpecifierUtils.test.js.map +1 -0
  113. package/build/esm/util/toDataValueQueries.js +2 -4
  114. package/build/esm/util/toDataValueQueries.js.map +1 -1
  115. package/build/types/index.d.ts +1 -1
  116. package/build/types/index.d.ts.map +1 -1
  117. package/build/types/logger/TestLogger.d.ts +14 -0
  118. package/build/types/logger/TestLogger.d.ts.map +1 -0
  119. package/build/types/object/convertWireToOsdkObjects.d.ts +4 -4
  120. package/build/types/object/convertWireToOsdkObjects.d.ts.map +1 -1
  121. package/build/types/object/fetchPage.d.ts.map +1 -1
  122. package/build/types/object/object.test.d.ts.map +1 -1
  123. package/build/types/objectSet/ObjectSet.test.d.ts.map +1 -1
  124. package/build/types/observable/internal/ActionApplication.d.ts +2 -2
  125. package/build/types/observable/internal/ActionApplication.d.ts.map +1 -1
  126. package/build/types/observable/internal/OptimisticJob.d.ts.map +1 -1
  127. package/build/types/observable/internal/Store.d.ts +2 -2
  128. package/build/types/observable/internal/Store.d.ts.map +1 -1
  129. package/build/types/queries/applyQuery.d.ts +2 -2
  130. package/build/types/queries/applyQuery.d.ts.map +1 -1
  131. package/build/types/util/extractRdpDefinition.d.ts +4 -0
  132. package/build/types/util/extractRdpDefinition.d.ts.map +1 -0
  133. package/build/types/util/extractRdpDefinition.test.d.ts +1 -0
  134. package/build/types/util/extractRdpDefinition.test.d.ts.map +1 -0
  135. package/build/types/util/objectSpecifierUtils.d.ts +24 -0
  136. package/build/types/util/objectSpecifierUtils.d.ts.map +1 -0
  137. package/build/types/util/objectSpecifierUtils.test.d.ts +1 -0
  138. package/build/types/util/objectSpecifierUtils.test.d.ts.map +1 -0
  139. package/package.json +11 -11
  140. package/build/browser/object/createObjectSpecifierFromPrimaryKey.js +0 -20
  141. package/build/browser/object/createObjectSpecifierFromPrimaryKey.js.map +0 -1
  142. package/build/cjs/chunk-EY52J5Z4.cjs.map +0 -1
  143. package/build/cjs/chunk-MCQVHD2F.cjs.map +0 -1
  144. package/build/cjs/chunk-Q7SFCCGT.cjs +0 -11
  145. package/build/cjs/chunk-Q7SFCCGT.cjs.map +0 -1
  146. package/build/cjs/graphql-RGM5SRWV.cjs +0 -10532
  147. package/build/cjs/graphql-RGM5SRWV.cjs.map +0 -1
  148. package/build/esm/object/createObjectSpecifierFromPrimaryKey.js +0 -20
  149. package/build/esm/object/createObjectSpecifierFromPrimaryKey.js.map +0 -1
  150. package/build/types/object/createObjectSpecifierFromPrimaryKey.d.ts +0 -2
  151. package/build/types/object/createObjectSpecifierFromPrimaryKey.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectSetListenerWebsocket.test.js","names":["$ontologyRid","Employee","LegacyFauxFoundry","startNodeApiServer","ImportedWebSocket","http","HttpResponse","pDefer","afterEach","beforeAll","beforeEach","describe","expect","it","vi","z","createClient","createMinimalClient","constructWebsocketUrl","ObjectSetListenerWebsocket","rootLogger","hoisted","pino","pinoPretty","EventEmitter","Promise","resolve","level","build","sync","timestampKey","undefined","errorLikeObjectKeys","errorProps","ignore","destination","write","a","at","slice","console","log","MockedWebSocket","STACK","mock","importOriginal","original","WebSocket","createMockWebSocketConstructor","default","currentSubscriptionId","apiServer","testSetup","addLoggerToApiServer","close","minimalClient","MINIMUM_RECONNECT_DELAY","client","listener","oslwInst","updateReceived","listenerPromise","ontologyRid","logger","child","minimumReconnectDelayMs","onChange","fn","o","onError","onOutOfDate","onSuccessfulSubscription","objectSetRidCounter","use","post","json","objectSetRid","useFakeTimers","restoreAllMocks","resetHandlers","not","toHaveBeenCalled","ws","unsubscribe","subReq1","subscribeAndExpectWebSocket","expectSubscribeMessages","setWebSocketState","runAllTicks","expectEqualRemoveAndAddListeners","respondSuccessToSubscribe","send","toHaveBeenCalledTimes","requests","propertySet","toEqual","referenceSet","all","expectWebSocketConstructed","advanceTimersByTimeAsync","subReq2","mockImplementationOnce","Error","mockReset","calls","subscriptionClosed","toBe","idNum2","sendObjectUpdateResponse","promise","toMatchInlineSnapshot","sendReferenceUpdatesResponse","unsubscribe2","subscribe","type","apiName","objectType","toString","sendToClient","id","responses","subId","updates","state","object","__apiName","employeeId","removeEventListener","addEventListener","length","times","waitFor","toBeCalledTimes","result","JSON","parse","lastCall","mockClear","results","value","OriginalWebSocket","i","ret","_args","webSocketInst","debug","eventEmitter","EventTarget","bind","message","_eventEmitter","readyState","CONNECTING","Object","assign","OPEN","CLOSED","CLOSING","newState","dispatchEvent","Event","name","requestId","request","trace","url","eventNames","c","events","on","SubscribeMessage","string","array","objectSet","MessageEvent","constructor","data","stringify","t"],"sources":["ObjectSetListenerWebsocket.test.ts"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectSetSubscription, PropertyKeys } from \"@osdk/api\";\nimport { $ontologyRid, Employee } from \"@osdk/client.test.ontology\";\nimport type {\n ObjectSetStreamSubscribeRequests,\n ObjectUpdate,\n StreamMessage,\n} from \"@osdk/foundry.ontologies\";\nimport { LegacyFauxFoundry, startNodeApiServer } from \"@osdk/shared.test\";\nimport ImportedWebSocket from \"isomorphic-ws\";\nimport { http, HttpResponse } from \"msw\";\nimport type { SetupServer } from \"msw/node\";\nimport type { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport type { MockedClass, MockedFunction, MockedObject } from \"vitest\";\nimport {\n afterEach,\n beforeAll,\n beforeEach,\n describe,\n expect,\n it,\n vi,\n} from \"vitest\";\nimport { z } from \"zod\";\nimport { createClient } from \"../createClient.js\";\nimport { createMinimalClient } from \"../createMinimalClient.js\";\nimport type { Logger } from \"../logger/Logger.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport {\n constructWebsocketUrl,\n ObjectSetListenerWebsocket,\n} from \"./ObjectSetListenerWebsocket.js\";\n\n// it needs to be hoisted because its referenced from our mocked WebSocket\n// which must be hoisted to work\nconst rootLogger = await vi.hoisted(async (): Promise<Logger> => {\n const pino = (await import(\"pino\")).pino;\n const pinoPretty = await import(\"pino-pretty\");\n const { EventEmitter } = await import(\"node:events\");\n class PinoConsoleLogDestination extends EventEmitter {\n write(a: string) {\n // remove trailing newline since console.log adds one\n if (a.at(-1) === \"\\n\") a = a.slice(0, -1);\n\n // This lets the test framework aggregate the logs per test, whereas direct to stdout does not\n console.log(a);\n }\n }\n return Promise.resolve(pino(\n { level: \"info\" },\n (pinoPretty.build)({\n sync: true,\n timestampKey: undefined,\n errorLikeObjectKeys: [\"error\", \"err\", \"exception\"],\n errorProps: \"stack,cause,properties\",\n ignore: \"time,hostname,pid\",\n destination: new PinoConsoleLogDestination(),\n }),\n ));\n});\n\n// make local uses of WebSocket typed right\nconst MockedWebSocket = ImportedWebSocket as unknown as MockedWebSocket;\n\nconst STACK = \"https://stack.palantirCustom.com/foo/first/someStuff/\";\n\nvi.mock(\"isomorphic-ws\", async (importOriginal) => {\n const original = await importOriginal<\n { default: WebSocket }\n >();\n\n const WebSocket = createMockWebSocketConstructor(\n original.default,\n rootLogger,\n );\n return { default: WebSocket, WebSocket };\n});\n\nlet currentSubscriptionId = 0;\n\ndescribe(\"ObjectSetListenerWebsocket\", async () => {\n let apiServer: SetupServer;\n beforeAll(() => {\n const testSetup = startNodeApiServer(\n new LegacyFauxFoundry(STACK),\n createClient,\n );\n ({ apiServer } = testSetup);\n addLoggerToApiServer(testSetup.apiServer, rootLogger);\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n describe(\"basic setup\", () => {\n let minimalClient: MinimalClient;\n\n const MINIMUM_RECONNECT_DELAY = 2_000;\n const OBJECT_SET_EXPIRY_MS = 60_000;\n\n let client: ObjectSetListenerWebsocket;\n let listener: MockedObject<\n Required<\n ObjectSetSubscription.Listener<Employee, any>\n >\n >;\n let oslwInst = 0;\n\n let updateReceived: ObjectUpdate | undefined = undefined;\n\n let listenerPromise: DeferredPromise<void>;\n\n beforeEach(() => {\n minimalClient = createMinimalClient(\n { ontologyRid: $ontologyRid },\n STACK,\n async () => \"myAccessToken\",\n { logger: rootLogger },\n );\n client = new ObjectSetListenerWebsocket({\n ...minimalClient,\n logger: rootLogger.child({ oslwInst: oslwInst++ }),\n }, {\n minimumReconnectDelayMs: MINIMUM_RECONNECT_DELAY,\n });\n\n listenerPromise = pDefer();\n\n listener = {\n onChange: vi.fn((o) => {\n updateReceived = o;\n listenerPromise.resolve();\n }),\n onError: vi.fn(),\n onOutOfDate: vi.fn(),\n onSuccessfulSubscription: vi.fn(),\n };\n\n let objectSetRidCounter = 0;\n apiServer.use(\n http.post(\n `${STACK}api/v2/ontologySubscriptions/ontologies/${$ontologyRid}/streamSubscriptions`,\n () =>\n HttpResponse.json({\n objectSetRid: `rid.hi.${objectSetRidCounter++}`,\n }),\n ),\n );\n\n vi.useFakeTimers();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n apiServer.resetHandlers();\n });\n\n it(\"should not send onOutOfDate since it has not subscribed yet\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n\n describe(\"requests subscription\", () => {\n let ws: MockedWebSocket;\n let unsubscribe: () => void;\n let subReq1: ObjectSetStreamSubscribeRequests;\n\n beforeEach(async () => {\n [ws, unsubscribe] = await subscribeAndExpectWebSocket(\n client,\n listener,\n );\n\n subReq1 = await expectSubscribeMessages(ws, 2);\n });\n\n afterEach(() => {\n // just ensure we ended in good states, as we clear these as we consume them\n expect(MockedWebSocket).not.toHaveBeenCalled();\n\n // make sure we are unsubscribed so closing the socket doesn't trigger reconnects\n unsubscribe();\n\n // disconnect the socket\n setWebSocketState(ws, \"close\");\n\n vi.runAllTicks();\n\n // Make sure we cleaned up\n expectEqualRemoveAndAddListeners(ws);\n });\n\n it(\"only sends a single request\", async () => {\n respondSuccessToSubscribe(ws, subReq1);\n // actually this is broken FIXME\n unsubscribe();\n expect(ws.send).toHaveBeenCalledTimes(1);\n });\n\n it(\"correctly requests regular object properties\", () => {\n expect(subReq1.requests[0].propertySet).toEqual([\n \"employeeId\",\n \"fullName\",\n \"office\",\n \"class\",\n \"startDate\",\n \"employeeStatus\",\n \"employeeSensor\",\n ]);\n });\n\n it(\"correctly requests reference backed properties\", () => {\n expect(subReq1.requests[0].referenceSet).toEqual([\"employeeLocation\"]);\n });\n\n describe(\"socket closed before subscription confirmed\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n\n describe(\"reconnect\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect\n vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY),\n ]);\n setWebSocketState(ws, \"open\");\n });\n\n describe(\"subscribe and respond\", () => {\n beforeEach(async () => {\n const subReq2 = await expectSubscribeMessages(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n it(\"should not send out of date\", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n });\n });\n\n describe(\"correctly try catches errors in handlers\", () => {\n beforeEach(() => {\n listener.onSuccessfulSubscription.mockImplementationOnce(() => {\n throw new Error(\"I am an error\");\n });\n respondSuccessToSubscribe(ws, subReq1);\n });\n afterEach(() => {\n listener.onSuccessfulSubscription.mockReset();\n });\n\n it(\"should call onError\", async () => {\n expect(listener.onError).toHaveBeenCalled();\n expect(listener.onError.mock.calls[0][0].subscriptionClosed).toBe(\n false,\n );\n });\n });\n\n describe(\"successfully subscribed\", () => {\n beforeEach(() => {\n respondSuccessToSubscribe(ws, subReq1);\n });\n\n it(\"should call onSuccessfulSubscription\", () => {\n expect(listener.onSuccessfulSubscription).toHaveBeenCalled();\n });\n\n it(\"should correctly return regular updates\", async () => {\n const idNum2 = currentSubscriptionId;\n\n sendObjectUpdateResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:undefined\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": undefined,\n \"$title\": undefined,\n \"employeeId\": 1,\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n\n it(\"should correctly return reference update\", async () => {\n const idNum2 = currentSubscriptionId;\n\n sendReferenceUpdatesResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:12345\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": \"12345\",\n \"$title\": undefined,\n \"employeeId\": \"12345\",\n \"employeeLocation\": GeotimeSeriesPropertyImpl {\n \"lastFetchedValue\": {\n \"time\": \"111\",\n \"value\": {\n \"coordinates\": [\n 100,\n 200,\n ],\n \"type\": \"Point\",\n },\n },\n },\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n\n describe(\"additional subscription\", async () => {\n let unsubscribe2: () => void;\n let subReq2: ObjectSetStreamSubscribeRequests;\n beforeEach(async () => {\n unsubscribe2 = await client.subscribe(\n {\n type: \"object\",\n apiName: \"Employee\",\n },\n {\n type: \"base\",\n objectType: Employee.apiName,\n },\n listener,\n [\"employeeId\"],\n );\n\n subReq2 = await expectSubscribeMessages(ws);\n\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n afterEach(() => {\n unsubscribe2();\n });\n\n it(\"only requests requested properties\", () => {\n expect(subReq2.requests[1].propertySet).toEqual([\"employeeId\"]);\n expect(subReq2.requests[1].referenceSet).toEqual([]);\n });\n\n it(\"does not trigger an out of date \", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n\n describe(\"socket closed abruptly\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n\n describe(\"reconnect, resubscribe successfully\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect\n vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY),\n ]);\n setWebSocketState(ws, \"open\");\n\n const subReq2 = await expectSubscribeMessages(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n it(\"should send out of date\", () => {\n expect(listener.onOutOfDate).toHaveBeenCalledTimes(1);\n });\n });\n });\n\n it(\"should not send onOutOfDate for first call\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n\n it(\"should create url correctly\", () => {\n expect(constructWebsocketUrl(STACK, \"ontologyRid1\").toString())\n .toEqual(\n \"wss://stack.palantircustom.com/foo/first/someStuff/api/v2/ontologySubscriptions/ontologies/ontologyRid1/streamSubscriptions\",\n );\n });\n });\n });\n });\n});\n\ninterface RawWebSocketPlus\n extends Pick<ImportedWebSocket, \"addEventListener\" | \"removeEventListener\">\n{\n _eventEmitter: EventTarget;\n readyState: 0 | 1 | 2 | 3;\n send: MockedFunction<ImportedWebSocket[\"send\"]>;\n close: MockedFunction<ImportedWebSocket[\"close\"]>;\n}\n\ninterface MockedWebSocket\n extends MockedClass<typeof ImportedWebSocket>, MockedObject<RawWebSocketPlus>\n{\n}\n\ntype MockedListener = MockedObject<\n Required<\n ObjectSetSubscription.Listener<Employee, PropertyKeys<Employee>>\n >\n>;\n\nfunction respondSuccessToSubscribe(\n ws: MockedWebSocket,\n subReq2: ObjectSetStreamSubscribeRequests,\n) {\n sendToClient<StreamMessage>(\n ws,\n {\n id: subReq2.id,\n type: \"subscribeResponses\",\n responses: [{\n type: \"success\",\n id: `${++currentSubscriptionId}`,\n }],\n },\n );\n}\n\nfunction sendObjectUpdateResponse(\n ws: MockedWebSocket,\n subId: string,\n) {\n const updateMessage: StreamMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n type: \"object\",\n state: \"ADDED_OR_UPDATED\",\n object: {\n __apiName: \"Employee\",\n employeeId: 1,\n },\n }],\n };\n\n sendToClient<StreamMessage>(\n ws,\n updateMessage,\n );\n}\n\nfunction sendReferenceUpdatesResponse(\n ws: MockedWebSocket,\n subId: string,\n) {\n const referenceUpdateMessage: StreamMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n \"type\": \"reference\",\n \"objectType\": \"Employee\",\n \"primaryKey\": { \"employeeId\": \"12345\" },\n \"property\": \"employeeLocation\",\n \"value\": {\n \"timestamp\": \"111\",\n \"type\": \"geotimeSeriesValue\",\n \"position\": [100, 200],\n },\n }],\n };\n\n sendToClient<StreamMessage>(\n ws,\n referenceUpdateMessage,\n );\n}\n\nfunction expectEqualRemoveAndAddListeners(ws: MockedWebSocket) {\n expect(ws.removeEventListener).toHaveBeenCalledTimes(\n ws.addEventListener.mock.calls.length,\n );\n}\n\nasync function expectSubscribeMessages(\n ws: MockedWebSocket,\n times: number = 1,\n): Promise<ObjectSetStreamSubscribeRequests> {\n return await vi.waitFor(() => {\n expect(ws.send).toBeCalledTimes(times);\n const result = JSON.parse(ws.send.mock.lastCall![0].toString());\n ws.send.mockClear();\n return result;\n });\n}\n\nasync function subscribeAndExpectWebSocket(\n client: ObjectSetListenerWebsocket,\n listener: MockedListener,\n): Promise<readonly [MockedWebSocket, () => void]> {\n const [ws, unsubscribe] = await Promise.all([\n expectWebSocketConstructed(),\n client.subscribe<Employee, PropertyKeys<Employee>>(\n {\n apiName: \"Employee\",\n type: \"object\",\n },\n {\n type: \"base\",\n objectType: Employee.apiName,\n },\n listener,\n ),\n ]);\n\n // otherwise the ObjectSetListenerWebSocket is sitting waiting for it to \"connect\"\n setWebSocketState(ws, \"open\");\n\n return [ws, unsubscribe] as const;\n}\n\nasync function expectWebSocketConstructed(): Promise<MockedWebSocket> {\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n\n const ws = await vi.waitFor(() => {\n expect(MockedWebSocket).toHaveBeenCalled();\n expect(MockedWebSocket.mock.results[0].type === \"return\");\n return MockedWebSocket.mock.results[0].value as MockedWebSocket;\n });\n\n expect(MockedWebSocket).toHaveBeenCalledTimes(1);\n MockedWebSocket.mockClear();\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n\n return ws;\n}\n\nfunction createMockWebSocketConstructor(\n OriginalWebSocket: WebSocket,\n logger: Logger,\n): MockedWebSocket {\n let i = 0;\n const ret = vi.fn(function(..._args: any[]): MockedWebSocket {\n const webSocketInst = i++;\n logger.debug(\"WebSocket constructor called\");\n const eventEmitter = new EventTarget();\n\n return {\n addEventListener: vi.fn(\n eventEmitter.addEventListener.bind(eventEmitter),\n ) as any,\n removeEventListener: vi.fn(\n eventEmitter.removeEventListener.bind(eventEmitter),\n ) as any,\n\n send: vi.fn((a, _b: any) => {\n logger.debug(\n { message: JSON.parse(a.toString()), webSocketInst },\n \"send() called\",\n );\n }),\n close: vi.fn(),\n _eventEmitter: eventEmitter,\n readyState: OriginalWebSocket.CONNECTING,\n } satisfies RawWebSocketPlus as any as MockedWebSocket;\n // ^ we only implement some things but the type system wants to think its the full deal,\n // thus the satisfies plus the cast\n }) as any as MockedWebSocket;\n\n Object.assign(ret, {\n OPEN: OriginalWebSocket.OPEN,\n CLOSED: OriginalWebSocket.CLOSED,\n CLOSING: OriginalWebSocket.CLOSING,\n CONNECTING: OriginalWebSocket.CONNECTING,\n });\n\n return ret;\n}\n\nfunction setWebSocketState(ws: MockedWebSocket, readyState: \"open\" | \"close\") {\n const newState = readyState === \"open\"\n ? ImportedWebSocket.OPEN\n : ImportedWebSocket.CLOSED;\n\n if (newState === ws.readyState) return;\n\n ws.readyState = newState;\n ws._eventEmitter.dispatchEvent(new Event(readyState, {}));\n}\n\nfunction addLoggerToApiServer(apiServer: SetupServer, logger: Logger) {\n const z = (\n name: string,\n { requestId, request }: { requestId: string; request: Request },\n ) => logger.trace({ requestId, url: request.url }, name);\n\n const eventNames = [\n \"request:start\",\n \"request:match\",\n \"request:end\",\n \"request:unhandled\",\n \"response:bypass\",\n \"response:mocked\",\n ] as const;\n\n for (const c of eventNames) {\n apiServer.events.on(c as typeof eventNames[number], z.bind(undefined, c));\n }\n}\n\nconst SubscribeMessage = z.object({\n id: z.string(),\n requests: z.array(z.object({\n objectSet: z.object({ id: z.string() }),\n propertySet: z.array(z.string()),\n referenceSet: z.array(z.string()),\n })),\n});\n\nclass MessageEvent extends Event {\n data: string;\n constructor(data: any) {\n super(\"message\");\n this.data = JSON.stringify(data);\n }\n}\n\nfunction sendToClient<T>(ws: MockedWebSocket, t: T) {\n ws._eventEmitter.dispatchEvent(new MessageEvent(t));\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ObjectSetListenerWebsocket.test.js","names":["$ontologyRid","Employee","LegacyFauxFoundry","msw","startNodeApiServer","ImportedWebSocket","pDefer","afterEach","beforeAll","beforeEach","describe","expect","it","vi","z","createClient","createMinimalClient","constructWebsocketUrl","ObjectSetListenerWebsocket","rootLogger","hoisted","pino","pinoPretty","EventEmitter","Promise","resolve","level","build","sync","timestampKey","undefined","errorLikeObjectKeys","errorProps","ignore","destination","write","a","at","slice","console","log","MockedWebSocket","STACK","mock","importOriginal","original","WebSocket","createMockWebSocketConstructor","default","currentSubscriptionId","apiServer","testSetup","addLoggerToApiServer","close","minimalClient","MINIMUM_RECONNECT_DELAY","client","listener","oslwInst","updateReceived","listenerPromise","ontologyRid","logger","child","minimumReconnectDelayMs","onChange","fn","o","onError","onOutOfDate","onSuccessfulSubscription","objectSetRidCounter","use","http","post","HttpResponse","json","objectSetRid","useFakeTimers","restoreAllMocks","resetHandlers","not","toHaveBeenCalled","ws","unsubscribe","subReq1","subscribeAndExpectWebSocket","expectSubscribeMessages","setWebSocketState","runAllTicks","expectEqualRemoveAndAddListeners","respondSuccessToSubscribe","send","toHaveBeenCalledTimes","requests","propertySet","toEqual","referenceSet","all","expectWebSocketConstructed","advanceTimersByTimeAsync","subReq2","mockImplementationOnce","Error","mockReset","calls","subscriptionClosed","toBe","idNum2","sendObjectUpdateResponse","promise","toMatchInlineSnapshot","sendReferenceUpdatesResponse","unsubscribe2","subscribe","type","apiName","objectType","toString","sendToClient","id","responses","subId","updates","state","object","__apiName","employeeId","removeEventListener","addEventListener","length","times","waitFor","toBeCalledTimes","result","JSON","parse","lastCall","mockClear","results","value","OriginalWebSocket","i","ret","_args","webSocketInst","debug","eventEmitter","EventTarget","bind","message","_eventEmitter","readyState","CONNECTING","Object","assign","OPEN","CLOSED","CLOSING","newState","dispatchEvent","Event","name","requestId","request","trace","url","eventNames","c","events","on","SubscribeMessage","string","array","objectSet","MessageEvent","constructor","data","stringify","t"],"sources":["ObjectSetListenerWebsocket.test.ts"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectSetSubscription, PropertyKeys } from \"@osdk/api\";\nimport { $ontologyRid, Employee } from \"@osdk/client.test.ontology\";\nimport type {\n ObjectSetStreamSubscribeRequests,\n ObjectUpdate,\n StreamMessage,\n} from \"@osdk/foundry.ontologies\";\nimport {\n LegacyFauxFoundry,\n msw,\n type SetupServer,\n startNodeApiServer,\n} from \"@osdk/shared.test\";\nimport ImportedWebSocket from \"isomorphic-ws\";\nimport type { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport type { MockedClass, MockedFunction, MockedObject } from \"vitest\";\nimport {\n afterEach,\n beforeAll,\n beforeEach,\n describe,\n expect,\n it,\n vi,\n} from \"vitest\";\nimport { z } from \"zod\";\nimport { createClient } from \"../createClient.js\";\nimport { createMinimalClient } from \"../createMinimalClient.js\";\nimport type { Logger } from \"../logger/Logger.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport {\n constructWebsocketUrl,\n ObjectSetListenerWebsocket,\n} from \"./ObjectSetListenerWebsocket.js\";\n\n// it needs to be hoisted because its referenced from our mocked WebSocket\n// which must be hoisted to work\nconst rootLogger = await vi.hoisted(async (): Promise<Logger> => {\n const pino = (await import(\"pino\")).pino;\n const pinoPretty = await import(\"pino-pretty\");\n const { EventEmitter } = await import(\"node:events\");\n class PinoConsoleLogDestination extends EventEmitter {\n write(a: string) {\n // remove trailing newline since console.log adds one\n if (a.at(-1) === \"\\n\") a = a.slice(0, -1);\n\n // This lets the test framework aggregate the logs per test, whereas direct to stdout does not\n console.log(a);\n }\n }\n return Promise.resolve(pino(\n { level: \"info\" },\n (pinoPretty.build)({\n sync: true,\n timestampKey: undefined,\n errorLikeObjectKeys: [\"error\", \"err\", \"exception\"],\n errorProps: \"stack,cause,properties\",\n ignore: \"time,hostname,pid\",\n destination: new PinoConsoleLogDestination(),\n }),\n ));\n});\n\n// make local uses of WebSocket typed right\nconst MockedWebSocket = ImportedWebSocket as unknown as MockedWebSocket;\n\nconst STACK = \"https://stack.palantirCustom.com/foo/first/someStuff/\";\n\nvi.mock(\"isomorphic-ws\", async (importOriginal) => {\n const original = await importOriginal<\n { default: WebSocket }\n >();\n\n const WebSocket = createMockWebSocketConstructor(\n original.default,\n rootLogger,\n );\n return { default: WebSocket, WebSocket };\n});\n\nlet currentSubscriptionId = 0;\n\ndescribe(\"ObjectSetListenerWebsocket\", async () => {\n let apiServer: SetupServer;\n beforeAll(() => {\n const testSetup = startNodeApiServer(\n new LegacyFauxFoundry(STACK),\n createClient,\n );\n ({ apiServer } = testSetup);\n addLoggerToApiServer(testSetup.apiServer, rootLogger);\n return () => {\n testSetup.apiServer.close();\n };\n });\n\n describe(\"basic setup\", () => {\n let minimalClient: MinimalClient;\n\n const MINIMUM_RECONNECT_DELAY = 2_000;\n const OBJECT_SET_EXPIRY_MS = 60_000;\n\n let client: ObjectSetListenerWebsocket;\n let listener: MockedObject<\n Required<\n ObjectSetSubscription.Listener<Employee, any>\n >\n >;\n let oslwInst = 0;\n\n let updateReceived: ObjectUpdate | undefined = undefined;\n\n let listenerPromise: DeferredPromise<void>;\n\n beforeEach(() => {\n minimalClient = createMinimalClient(\n { ontologyRid: $ontologyRid },\n STACK,\n async () => \"myAccessToken\",\n { logger: rootLogger },\n );\n client = new ObjectSetListenerWebsocket({\n ...minimalClient,\n logger: rootLogger.child({ oslwInst: oslwInst++ }),\n }, {\n minimumReconnectDelayMs: MINIMUM_RECONNECT_DELAY,\n });\n\n listenerPromise = pDefer();\n\n listener = {\n onChange: vi.fn((o) => {\n updateReceived = o;\n listenerPromise.resolve();\n }),\n onError: vi.fn(),\n onOutOfDate: vi.fn(),\n onSuccessfulSubscription: vi.fn(),\n };\n\n let objectSetRidCounter = 0;\n apiServer.use(\n msw.http.post(\n `${STACK}api/v2/ontologySubscriptions/ontologies/${$ontologyRid}/streamSubscriptions`,\n () =>\n msw.HttpResponse.json({\n objectSetRid: `rid.hi.${objectSetRidCounter++}`,\n }),\n ),\n );\n\n vi.useFakeTimers();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n apiServer.resetHandlers();\n });\n\n it(\"should not send onOutOfDate since it has not subscribed yet\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n\n describe(\"requests subscription\", () => {\n let ws: MockedWebSocket;\n let unsubscribe: () => void;\n let subReq1: ObjectSetStreamSubscribeRequests;\n\n beforeEach(async () => {\n [ws, unsubscribe] = await subscribeAndExpectWebSocket(\n client,\n listener,\n );\n\n subReq1 = await expectSubscribeMessages(ws, 2);\n });\n\n afterEach(() => {\n // just ensure we ended in good states, as we clear these as we consume them\n expect(MockedWebSocket).not.toHaveBeenCalled();\n\n // make sure we are unsubscribed so closing the socket doesn't trigger reconnects\n unsubscribe();\n\n // disconnect the socket\n setWebSocketState(ws, \"close\");\n\n vi.runAllTicks();\n\n // Make sure we cleaned up\n expectEqualRemoveAndAddListeners(ws);\n });\n\n it(\"only sends a single request\", async () => {\n respondSuccessToSubscribe(ws, subReq1);\n // actually this is broken FIXME\n unsubscribe();\n expect(ws.send).toHaveBeenCalledTimes(1);\n });\n\n it(\"correctly requests regular object properties\", () => {\n expect(subReq1.requests[0].propertySet).toEqual([\n \"employeeId\",\n \"fullName\",\n \"office\",\n \"class\",\n \"startDate\",\n \"employeeStatus\",\n \"employeeSensor\",\n ]);\n });\n\n it(\"correctly requests reference backed properties\", () => {\n expect(subReq1.requests[0].referenceSet).toEqual([\"employeeLocation\"]);\n });\n\n describe(\"socket closed before subscription confirmed\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n\n describe(\"reconnect\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect\n vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY),\n ]);\n setWebSocketState(ws, \"open\");\n });\n\n describe(\"subscribe and respond\", () => {\n beforeEach(async () => {\n const subReq2 = await expectSubscribeMessages(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n it(\"should not send out of date\", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n });\n });\n\n describe(\"correctly try catches errors in handlers\", () => {\n beforeEach(() => {\n listener.onSuccessfulSubscription.mockImplementationOnce(() => {\n throw new Error(\"I am an error\");\n });\n respondSuccessToSubscribe(ws, subReq1);\n });\n afterEach(() => {\n listener.onSuccessfulSubscription.mockReset();\n });\n\n it(\"should call onError\", async () => {\n expect(listener.onError).toHaveBeenCalled();\n expect(listener.onError.mock.calls[0][0].subscriptionClosed).toBe(\n false,\n );\n });\n });\n\n describe(\"successfully subscribed\", () => {\n beforeEach(() => {\n respondSuccessToSubscribe(ws, subReq1);\n });\n\n it(\"should call onSuccessfulSubscription\", () => {\n expect(listener.onSuccessfulSubscription).toHaveBeenCalled();\n });\n\n it(\"should correctly return regular updates\", async () => {\n const idNum2 = currentSubscriptionId;\n\n sendObjectUpdateResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:undefined\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": undefined,\n \"$title\": undefined,\n \"employeeId\": 1,\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n\n it(\"should correctly return reference update\", async () => {\n const idNum2 = currentSubscriptionId;\n\n sendReferenceUpdatesResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectSpecifier\": \"Employee:12345\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": \"12345\",\n \"$title\": undefined,\n \"employeeId\": \"12345\",\n \"employeeLocation\": GeotimeSeriesPropertyImpl {\n \"lastFetchedValue\": {\n \"time\": \"111\",\n \"value\": {\n \"coordinates\": [\n 100,\n 200,\n ],\n \"type\": \"Point\",\n },\n },\n },\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n\n describe(\"additional subscription\", async () => {\n let unsubscribe2: () => void;\n let subReq2: ObjectSetStreamSubscribeRequests;\n beforeEach(async () => {\n unsubscribe2 = await client.subscribe(\n {\n type: \"object\",\n apiName: \"Employee\",\n },\n {\n type: \"base\",\n objectType: Employee.apiName,\n },\n listener,\n [\"employeeId\"],\n );\n\n subReq2 = await expectSubscribeMessages(ws);\n\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n afterEach(() => {\n unsubscribe2();\n });\n\n it(\"only requests requested properties\", () => {\n expect(subReq2.requests[1].propertySet).toEqual([\"employeeId\"]);\n expect(subReq2.requests[1].referenceSet).toEqual([]);\n });\n\n it(\"does not trigger an out of date \", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n\n describe(\"socket closed abruptly\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n\n describe(\"reconnect, resubscribe successfully\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect\n vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY),\n ]);\n setWebSocketState(ws, \"open\");\n\n const subReq2 = await expectSubscribeMessages(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n it(\"should send out of date\", () => {\n expect(listener.onOutOfDate).toHaveBeenCalledTimes(1);\n });\n });\n });\n\n it(\"should not send onOutOfDate for first call\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n\n it(\"should create url correctly\", () => {\n expect(constructWebsocketUrl(STACK, \"ontologyRid1\").toString())\n .toEqual(\n \"wss://stack.palantircustom.com/foo/first/someStuff/api/v2/ontologySubscriptions/ontologies/ontologyRid1/streamSubscriptions\",\n );\n });\n });\n });\n });\n});\n\ninterface RawWebSocketPlus\n extends Pick<ImportedWebSocket, \"addEventListener\" | \"removeEventListener\">\n{\n _eventEmitter: EventTarget;\n readyState: 0 | 1 | 2 | 3;\n send: MockedFunction<ImportedWebSocket[\"send\"]>;\n close: MockedFunction<ImportedWebSocket[\"close\"]>;\n}\n\ninterface MockedWebSocket\n extends MockedClass<typeof ImportedWebSocket>, MockedObject<RawWebSocketPlus>\n{\n}\n\ntype MockedListener = MockedObject<\n Required<\n ObjectSetSubscription.Listener<Employee, PropertyKeys<Employee>>\n >\n>;\n\nfunction respondSuccessToSubscribe(\n ws: MockedWebSocket,\n subReq2: ObjectSetStreamSubscribeRequests,\n) {\n sendToClient<StreamMessage>(\n ws,\n {\n id: subReq2.id,\n type: \"subscribeResponses\",\n responses: [{\n type: \"success\",\n id: `${++currentSubscriptionId}`,\n }],\n },\n );\n}\n\nfunction sendObjectUpdateResponse(\n ws: MockedWebSocket,\n subId: string,\n) {\n const updateMessage: StreamMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n type: \"object\",\n state: \"ADDED_OR_UPDATED\",\n object: {\n __apiName: \"Employee\",\n employeeId: 1,\n },\n }],\n };\n\n sendToClient<StreamMessage>(\n ws,\n updateMessage,\n );\n}\n\nfunction sendReferenceUpdatesResponse(\n ws: MockedWebSocket,\n subId: string,\n) {\n const referenceUpdateMessage: StreamMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n \"type\": \"reference\",\n \"objectType\": \"Employee\",\n \"primaryKey\": { \"employeeId\": \"12345\" },\n \"property\": \"employeeLocation\",\n \"value\": {\n \"timestamp\": \"111\",\n \"type\": \"geotimeSeriesValue\",\n \"position\": [100, 200],\n },\n }],\n };\n\n sendToClient<StreamMessage>(\n ws,\n referenceUpdateMessage,\n );\n}\n\nfunction expectEqualRemoveAndAddListeners(ws: MockedWebSocket) {\n expect(ws.removeEventListener).toHaveBeenCalledTimes(\n ws.addEventListener.mock.calls.length,\n );\n}\n\nasync function expectSubscribeMessages(\n ws: MockedWebSocket,\n times: number = 1,\n): Promise<ObjectSetStreamSubscribeRequests> {\n return await vi.waitFor(() => {\n expect(ws.send).toBeCalledTimes(times);\n const result = JSON.parse(ws.send.mock.lastCall![0].toString());\n ws.send.mockClear();\n return result;\n });\n}\n\nasync function subscribeAndExpectWebSocket(\n client: ObjectSetListenerWebsocket,\n listener: MockedListener,\n): Promise<readonly [MockedWebSocket, () => void]> {\n const [ws, unsubscribe] = await Promise.all([\n expectWebSocketConstructed(),\n client.subscribe<Employee, PropertyKeys<Employee>>(\n {\n apiName: \"Employee\",\n type: \"object\",\n },\n {\n type: \"base\",\n objectType: Employee.apiName,\n },\n listener,\n ),\n ]);\n\n // otherwise the ObjectSetListenerWebSocket is sitting waiting for it to \"connect\"\n setWebSocketState(ws, \"open\");\n\n return [ws, unsubscribe] as const;\n}\n\nasync function expectWebSocketConstructed(): Promise<MockedWebSocket> {\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n\n const ws = await vi.waitFor(() => {\n expect(MockedWebSocket).toHaveBeenCalled();\n expect(MockedWebSocket.mock.results[0].type === \"return\");\n return MockedWebSocket.mock.results[0].value as MockedWebSocket;\n });\n\n expect(MockedWebSocket).toHaveBeenCalledTimes(1);\n MockedWebSocket.mockClear();\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n\n return ws;\n}\n\nfunction createMockWebSocketConstructor(\n OriginalWebSocket: WebSocket,\n logger: Logger,\n): MockedWebSocket {\n let i = 0;\n const ret = vi.fn(function(..._args: any[]): MockedWebSocket {\n const webSocketInst = i++;\n logger.debug(\"WebSocket constructor called\");\n const eventEmitter = new EventTarget();\n\n return {\n addEventListener: vi.fn(\n eventEmitter.addEventListener.bind(eventEmitter),\n ) as any,\n removeEventListener: vi.fn(\n eventEmitter.removeEventListener.bind(eventEmitter),\n ) as any,\n\n send: vi.fn((a, _b: any) => {\n logger.debug(\n { message: JSON.parse(a.toString()), webSocketInst },\n \"send() called\",\n );\n }),\n close: vi.fn(),\n _eventEmitter: eventEmitter,\n readyState: OriginalWebSocket.CONNECTING,\n } satisfies RawWebSocketPlus as any as MockedWebSocket;\n // ^ we only implement some things but the type system wants to think its the full deal,\n // thus the satisfies plus the cast\n }) as any as MockedWebSocket;\n\n Object.assign(ret, {\n OPEN: OriginalWebSocket.OPEN,\n CLOSED: OriginalWebSocket.CLOSED,\n CLOSING: OriginalWebSocket.CLOSING,\n CONNECTING: OriginalWebSocket.CONNECTING,\n });\n\n return ret;\n}\n\nfunction setWebSocketState(ws: MockedWebSocket, readyState: \"open\" | \"close\") {\n const newState = readyState === \"open\"\n ? ImportedWebSocket.OPEN\n : ImportedWebSocket.CLOSED;\n\n if (newState === ws.readyState) return;\n\n ws.readyState = newState;\n ws._eventEmitter.dispatchEvent(new Event(readyState, {}));\n}\n\nfunction addLoggerToApiServer(apiServer: SetupServer, logger: Logger) {\n const z = (\n name: string,\n { requestId, request }: { requestId: string; request: Request },\n ) => logger.trace({ requestId, url: request.url }, name);\n\n const eventNames = [\n \"request:start\",\n \"request:match\",\n \"request:end\",\n \"request:unhandled\",\n \"response:bypass\",\n \"response:mocked\",\n ] as const;\n\n for (const c of eventNames) {\n apiServer.events.on(c as typeof eventNames[number], z.bind(undefined, c));\n }\n}\n\nconst SubscribeMessage = z.object({\n id: z.string(),\n requests: z.array(z.object({\n objectSet: z.object({ id: z.string() }),\n propertySet: z.array(z.string()),\n referenceSet: z.array(z.string()),\n })),\n});\n\nclass MessageEvent extends Event {\n data: string;\n constructor(data: any) {\n super(\"message\");\n this.data = JSON.stringify(data);\n }\n}\n\nfunction sendToClient<T>(ws: MockedWebSocket, t: T) {\n ws._eventEmitter.dispatchEvent(new MessageEvent(t));\n}\n"],"mappings":"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","ignoreList":[]}
@@ -85,6 +85,7 @@ export function createObjectSet(objectType, clientCtx, objectSet = resolveBaseOb
85
85
  finalMethodCall: "asyncIter"
86
86
  })), objectType, objectSet, {
87
87
  ...args,
88
+ $pageSize: 10000,
88
89
  $nextPageToken
89
90
  });
90
91
  $nextPageToken = result.nextPageToken;
@@ -1 +1 @@
1
- {"version":3,"file":"createObjectSet.js","names":["createWithPropertiesObjectSet","modernToLegacyWhereClause","aggregate","fetchPageInternal","fetchPageWithErrorsInternal","fetchSingle","fetchSingleWithErrors","augmentRequestContext","resolveBaseObjectSetType","isWireObjectSet","ObjectSetListenerWebsocket","isObjectTypeDefinition","def","type","isObjectSet","o","objectSetDefinitions","get","getWireObjectSet","objectSet","WeakMap","createObjectSet","objectType","clientCtx","base","bind","globalThis","finalMethodCall","fetchPage","fetchPageWithErrors","where","clause","objectSetFactory","pivotTo","createSearchAround","union","objectSets","map","os","intersect","subtract","asyncIter","args","$nextPageToken","undefined","result","nextPageToken","obj","data","fetchOne","primaryKey","options","createWithPk","fetchOneWithErrors","subscribe","listener","opts","pendingSubscribe","getInstance","properties","unsubscribe","withProperties","definitionMap","Map","derivedProperties","key","Object","keys","derivedPropertyDefinition","$objectSetInternals","link","set","objDef","ontologyProvider","getObjectDefinition","apiName","withPk","field","primaryKeyApiName","value"],"sources":["createObjectSet.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n AsyncIterArgs,\n Augments,\n FetchPageResult,\n LinkedType,\n LinkNames,\n NullabilityAdherence,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n Result,\n SelectArg,\n SingleOsdkResult,\n} from \"@osdk/api\";\nimport type { MinimalObjectSet } from \"@osdk/api/unstable\";\nimport type {\n DerivedPropertyDefinition,\n ObjectSet as WireObjectSet,\n} from \"@osdk/foundry.ontologies\";\nimport { createWithPropertiesObjectSet } from \"../derivedProperties/createWithPropertiesObjectSet.js\";\nimport { modernToLegacyWhereClause } from \"../internal/conversions/modernToLegacyWhereClause.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport { aggregate } from \"../object/aggregate.js\";\nimport {\n fetchPageInternal,\n fetchPageWithErrorsInternal,\n} from \"../object/fetchPage.js\";\nimport { fetchSingle, fetchSingleWithErrors } from \"../object/fetchSingle.js\";\nimport { augmentRequestContext } from \"../util/augmentRequestContext.js\";\nimport { resolveBaseObjectSetType } from \"../util/objectSetUtils.js\";\nimport { isWireObjectSet } from \"../util/WireObjectSet.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\n\nfunction isObjectTypeDefinition(\n def: ObjectOrInterfaceDefinition,\n): def is ObjectTypeDefinition {\n return def.type === \"object\";\n}\n\n/* @internal */\nexport function isObjectSet(o: any): o is ObjectSet<any> {\n return o != null && typeof o === \"object\"\n && isWireObjectSet(objectSetDefinitions.get(o));\n}\n\n/** @internal */\nexport function getWireObjectSet(\n objectSet: ObjectSet<any> | MinimalObjectSet<any>,\n): WireObjectSet {\n return objectSetDefinitions.get(objectSet)!;\n}\n\nconst objectSetDefinitions = new WeakMap<\n any,\n WireObjectSet\n>();\n\n/** @internal */\nexport function createObjectSet<Q extends ObjectOrInterfaceDefinition>(\n objectType: Q,\n clientCtx: MinimalClient,\n objectSet: WireObjectSet = resolveBaseObjectSetType(objectType),\n): ObjectSet<Q> {\n const base: ObjectSet<Q> = {\n aggregate: (aggregate<Q, any>).bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"aggregate\" })),\n objectType,\n objectSet,\n ),\n\n fetchPage: fetchPageInternal.bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"fetchPage\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPage\"],\n\n fetchPageWithErrors: fetchPageWithErrorsInternal.bind(\n globalThis,\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchPageWithErrors\" }),\n ),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPageWithErrors\"],\n\n where: (clause) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"filter\",\n objectSet: objectSet,\n where: modernToLegacyWhereClause(clause, objectType),\n });\n },\n\n pivotTo: function<L extends LinkNames<Q>>(\n type: L,\n ): ObjectSet<LinkedType<Q, L>> {\n return createSearchAround(type)();\n },\n\n union: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"union\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n intersect: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"intersect\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n subtract: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"subtract\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n asyncIter: async function*<\n L extends PropertyKeys<Q>,\n R extends boolean,\n const A extends Augments,\n S extends NullabilityAdherence = NullabilityAdherence.Default,\n T extends boolean = false,\n >(\n args?: AsyncIterArgs<Q, L, R, A, S, T>,\n ): AsyncIterableIterator<SingleOsdkResult<Q, L, R, S, {}, T>> {\n let $nextPageToken: string | undefined = undefined;\n do {\n const result: FetchPageResult<\n Q,\n L,\n R,\n S,\n T\n > = await fetchPageInternal(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"asyncIter\" }),\n ),\n objectType,\n objectSet,\n { ...args, $nextPageToken },\n );\n $nextPageToken = result.nextPageToken;\n\n for (const obj of result.data) {\n yield obj as SingleOsdkResult<Q, L, R, S, {}, T>;\n }\n } while ($nextPageToken != null);\n },\n\n fetchOne: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: PrimaryKeyType<Q>,\n options: A,\n ) => {\n return await fetchSingle(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOne\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Osdk<Q>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOne\"],\n\n fetchOneWithErrors: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: Q extends ObjectTypeDefinition ? PrimaryKeyType<Q>\n : never,\n options: A,\n ) => {\n return await fetchSingleWithErrors(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOneWithErrors\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Result<Osdk<Q>>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOneWithErrors\"],\n\n subscribe: (\n listener,\n opts,\n ) => {\n const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(\n clientCtx,\n ).subscribe(\n objectType,\n objectSet,\n listener,\n opts?.properties,\n );\n\n return { unsubscribe: async () => (await pendingSubscribe)() };\n },\n\n withProperties: (clause) => {\n const definitionMap = new Map<any, DerivedPropertyDefinition>();\n\n const derivedProperties: Record<string, DerivedPropertyDefinition> = {};\n for (const key of Object.keys(clause)) {\n const derivedPropertyDefinition = clause\n [key](createWithPropertiesObjectSet(\n objectType,\n { type: \"methodInput\" },\n definitionMap,\n ));\n derivedProperties[key] = definitionMap.get(\n derivedPropertyDefinition,\n )!;\n }\n\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"withProperties\",\n derivedProperties: derivedProperties,\n objectSet: objectSet,\n },\n );\n },\n\n $objectSetInternals: {\n def: objectType,\n },\n };\n\n function createSearchAround<L extends LinkNames<Q>>(link: L) {\n return () => {\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"searchAround\",\n objectSet,\n link,\n },\n );\n };\n }\n\n objectSetDefinitions.set(base, objectSet);\n\n // we are using a type assertion because the marker symbol defined in BaseObjectSet isn't actually used\n // at runtime.\n return base as ObjectSet<Q>;\n}\n\nasync function createWithPk(\n clientCtx: MinimalClient,\n objectType: ObjectTypeDefinition,\n objectSet: WireObjectSet,\n primaryKey: PrimaryKeyType<ObjectTypeDefinition>,\n) {\n const objDef = await clientCtx.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n );\n\n const withPk: WireObjectSet = {\n type: \"filter\",\n objectSet: objectSet,\n where: {\n type: \"eq\",\n field: objDef.primaryKeyApiName,\n value: primaryKey,\n },\n };\n return withPk;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"createObjectSet.js","names":["createWithPropertiesObjectSet","modernToLegacyWhereClause","aggregate","fetchPageInternal","fetchPageWithErrorsInternal","fetchSingle","fetchSingleWithErrors","augmentRequestContext","resolveBaseObjectSetType","isWireObjectSet","ObjectSetListenerWebsocket","isObjectTypeDefinition","def","type","isObjectSet","o","objectSetDefinitions","get","getWireObjectSet","objectSet","WeakMap","createObjectSet","objectType","clientCtx","base","bind","globalThis","finalMethodCall","fetchPage","fetchPageWithErrors","where","clause","objectSetFactory","pivotTo","createSearchAround","union","objectSets","map","os","intersect","subtract","asyncIter","args","$nextPageToken","undefined","result","$pageSize","nextPageToken","obj","data","fetchOne","primaryKey","options","createWithPk","fetchOneWithErrors","subscribe","listener","opts","pendingSubscribe","getInstance","properties","unsubscribe","withProperties","definitionMap","Map","derivedProperties","key","Object","keys","derivedPropertyDefinition","$objectSetInternals","link","set","objDef","ontologyProvider","getObjectDefinition","apiName","withPk","field","primaryKeyApiName","value"],"sources":["createObjectSet.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n AsyncIterArgs,\n Augments,\n FetchPageResult,\n LinkedType,\n LinkNames,\n NullabilityAdherence,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n Result,\n SelectArg,\n SingleOsdkResult,\n} from \"@osdk/api\";\nimport type { MinimalObjectSet } from \"@osdk/api/unstable\";\nimport type {\n DerivedPropertyDefinition,\n ObjectSet as WireObjectSet,\n} from \"@osdk/foundry.ontologies\";\nimport { createWithPropertiesObjectSet } from \"../derivedProperties/createWithPropertiesObjectSet.js\";\nimport { modernToLegacyWhereClause } from \"../internal/conversions/modernToLegacyWhereClause.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport { aggregate } from \"../object/aggregate.js\";\nimport {\n fetchPageInternal,\n fetchPageWithErrorsInternal,\n} from \"../object/fetchPage.js\";\nimport { fetchSingle, fetchSingleWithErrors } from \"../object/fetchSingle.js\";\nimport { augmentRequestContext } from \"../util/augmentRequestContext.js\";\nimport { resolveBaseObjectSetType } from \"../util/objectSetUtils.js\";\nimport { isWireObjectSet } from \"../util/WireObjectSet.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\n\nfunction isObjectTypeDefinition(\n def: ObjectOrInterfaceDefinition,\n): def is ObjectTypeDefinition {\n return def.type === \"object\";\n}\n\n/* @internal */\nexport function isObjectSet(o: any): o is ObjectSet<any> {\n return o != null && typeof o === \"object\"\n && isWireObjectSet(objectSetDefinitions.get(o));\n}\n\n/** @internal */\nexport function getWireObjectSet(\n objectSet: ObjectSet<any> | MinimalObjectSet<any>,\n): WireObjectSet {\n return objectSetDefinitions.get(objectSet)!;\n}\n\nconst objectSetDefinitions = new WeakMap<\n any,\n WireObjectSet\n>();\n\n/** @internal */\nexport function createObjectSet<Q extends ObjectOrInterfaceDefinition>(\n objectType: Q,\n clientCtx: MinimalClient,\n objectSet: WireObjectSet = resolveBaseObjectSetType(objectType),\n): ObjectSet<Q> {\n const base: ObjectSet<Q> = {\n aggregate: (aggregate<Q, any>).bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"aggregate\" })),\n objectType,\n objectSet,\n ),\n\n fetchPage: fetchPageInternal.bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"fetchPage\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPage\"],\n\n fetchPageWithErrors: fetchPageWithErrorsInternal.bind(\n globalThis,\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchPageWithErrors\" }),\n ),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPageWithErrors\"],\n\n where: (clause) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"filter\",\n objectSet: objectSet,\n where: modernToLegacyWhereClause(clause, objectType),\n });\n },\n\n pivotTo: function<L extends LinkNames<Q>>(\n type: L,\n ): ObjectSet<LinkedType<Q, L>> {\n return createSearchAround(type)();\n },\n\n union: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"union\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n intersect: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"intersect\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n subtract: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"subtract\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n asyncIter: async function*<\n L extends PropertyKeys<Q>,\n R extends boolean,\n const A extends Augments,\n S extends NullabilityAdherence = NullabilityAdherence.Default,\n T extends boolean = false,\n >(\n args?: AsyncIterArgs<Q, L, R, A, S, T>,\n ): AsyncIterableIterator<SingleOsdkResult<Q, L, R, S, {}, T>> {\n let $nextPageToken: string | undefined = undefined;\n do {\n const result: FetchPageResult<\n Q,\n L,\n R,\n S,\n T\n > = await fetchPageInternal(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"asyncIter\" }),\n ),\n objectType,\n objectSet,\n { ...args, $pageSize: 10000, $nextPageToken },\n );\n $nextPageToken = result.nextPageToken;\n\n for (const obj of result.data) {\n yield obj as SingleOsdkResult<Q, L, R, S, {}, T>;\n }\n } while ($nextPageToken != null);\n },\n\n fetchOne: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: PrimaryKeyType<Q>,\n options: A,\n ) => {\n return await fetchSingle(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOne\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Osdk<Q>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOne\"],\n\n fetchOneWithErrors: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: Q extends ObjectTypeDefinition ? PrimaryKeyType<Q>\n : never,\n options: A,\n ) => {\n return await fetchSingleWithErrors(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOneWithErrors\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Result<Osdk<Q>>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOneWithErrors\"],\n\n subscribe: (\n listener,\n opts,\n ) => {\n const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(\n clientCtx,\n ).subscribe(\n objectType,\n objectSet,\n listener,\n opts?.properties,\n );\n\n return { unsubscribe: async () => (await pendingSubscribe)() };\n },\n\n withProperties: (clause) => {\n const definitionMap = new Map<any, DerivedPropertyDefinition>();\n\n const derivedProperties: Record<string, DerivedPropertyDefinition> = {};\n for (const key of Object.keys(clause)) {\n const derivedPropertyDefinition = clause\n [key](createWithPropertiesObjectSet(\n objectType,\n { type: \"methodInput\" },\n definitionMap,\n ));\n derivedProperties[key] = definitionMap.get(\n derivedPropertyDefinition,\n )!;\n }\n\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"withProperties\",\n derivedProperties: derivedProperties,\n objectSet: objectSet,\n },\n );\n },\n\n $objectSetInternals: {\n def: objectType,\n },\n };\n\n function createSearchAround<L extends LinkNames<Q>>(link: L) {\n return () => {\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"searchAround\",\n objectSet,\n link,\n },\n );\n };\n }\n\n objectSetDefinitions.set(base, objectSet);\n\n // we are using a type assertion because the marker symbol defined in BaseObjectSet isn't actually used\n // at runtime.\n return base as ObjectSet<Q>;\n}\n\nasync function createWithPk(\n clientCtx: MinimalClient,\n objectType: ObjectTypeDefinition,\n objectSet: WireObjectSet,\n primaryKey: PrimaryKeyType<ObjectTypeDefinition>,\n) {\n const objDef = await clientCtx.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n );\n\n const withPk: WireObjectSet = {\n type: \"filter\",\n objectSet: objectSet,\n where: {\n type: \"eq\",\n field: objDef.primaryKeyApiName,\n value: primaryKey,\n },\n };\n return withPk;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { delay } from "msw";
17
+ import delay from "delay";
18
18
  import { createChangedObjects } from "./Changes.js";
19
19
  import { runOptimisticJob } from "./OptimisticJob.js";
20
20
  const ACTION_DELAY = process.env.NODE_ENV === "production" ? 0 : 1000;
@@ -22,14 +22,14 @@ export class ActionApplication {
22
22
  constructor(store) {
23
23
  this.store = store;
24
24
  }
25
- applyAction = (action, args, {
25
+ applyAction = async (action, args, {
26
26
  optimisticUpdate
27
27
  } = {}) => {
28
28
  const logger = process.env.NODE_ENV !== "production" ? this.store.logger?.child({
29
29
  methodName: "applyAction"
30
30
  }) : this.store.logger;
31
31
  const removeOptimisticResult = runOptimisticJob(this.store, optimisticUpdate);
32
- return (async () => {
32
+ return await (async () => {
33
33
  try {
34
34
  // The types for client get confused when we dynamically applyAction so we
35
35
  // have to deal with the `any` here and force cast it to what it should be.
@@ -40,7 +40,7 @@ export class ActionApplication {
40
40
  });
41
41
  if (process.env.NODE_ENV !== "production") {
42
42
  if (ACTION_DELAY > 0) {
43
- logger?.debug("action done, pausing");
43
+ logger?.debug("action done, pausing", actionResults);
44
44
  await delay(ACTION_DELAY);
45
45
  logger?.debug("action done, pausing done");
46
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ActionApplication.js","names":["delay","createChangedObjects","runOptimisticJob","ACTION_DELAY","process","env","NODE_ENV","ActionApplication","constructor","store","applyAction","action","args","optimisticUpdate","logger","child","methodName","removeOptimisticResult","actionResults","client","$returnEdits","debug","invalidateActionEditResponse","value","typesToInvalidate","Set","changes","type","promisesToWait","obj","modifiedObjects","push","invalidateObject","objectType","primaryKey","addedObjects","add","Promise","all","changeType","cacheKey","getCacheKey","getValue","set","added","modified","apiName","editedObjectTypes","toString","invalidateObjectType"],"sources":["ActionApplication.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ActionDefinition, ActionEditResponse } from \"@osdk/api\";\nimport { delay } from \"msw\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { type Changes, createChangedObjects } from \"./Changes.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { runOptimisticJob } from \"./OptimisticJob.js\";\nimport type { Store } from \"./Store.js\";\n\nconst ACTION_DELAY = process.env.NODE_ENV === \"production\" ? 0 : 1000;\n\nexport class ActionApplication {\n constructor(private store: Store) {}\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: Store.ApplyActionOptions,\n ) => Promise<unknown> = (action, args, { optimisticUpdate } = {}) => {\n const logger = process.env.NODE_ENV !== \"production\"\n ? this.store.logger?.child({ methodName: \"applyAction\" })\n : this.store.logger;\n const removeOptimisticResult = runOptimisticJob(\n this.store,\n optimisticUpdate,\n );\n return (async () => {\n try {\n // The types for client get confused when we dynamically applyAction so we\n // have to deal with the `any` here and force cast it to what it should be.\n // TODO: Update the types so this doesn't happen!\n\n const actionResults: ActionEditResponse = await this.store.client(\n action,\n ).applyAction(args as any, { $returnEdits: true });\n\n if (process.env.NODE_ENV !== \"production\") {\n if (ACTION_DELAY > 0) {\n logger?.debug(\"action done, pausing\");\n await delay(ACTION_DELAY);\n logger?.debug(\"action done, pausing done\");\n }\n }\n await this.#invalidateActionEditResponse(actionResults);\n return actionResults;\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\n \"optimistic action complete; remove the results\",\n );\n }\n // make sure this happens even if the action fails\n await removeOptimisticResult();\n }\n })();\n };\n\n #invalidateActionEditResponse = async (\n value: ActionEditResponse,\n ): Promise<ActionEditResponse> => {\n const typesToInvalidate = new Set<string>();\n\n let changes: Changes | undefined;\n if (value.type === \"edits\") {\n const promisesToWait: Promise<any>[] = [];\n // TODO we need an backend update for deletes\n for (const obj of value.modifiedObjects) {\n promisesToWait.push(\n this.store.invalidateObject(obj.objectType, obj.primaryKey),\n );\n }\n\n for (const obj of value.addedObjects) {\n promisesToWait.push(\n this.store.invalidateObject(obj.objectType, obj.primaryKey),\n );\n\n typesToInvalidate.add(obj.objectType);\n }\n\n await Promise.all(promisesToWait);\n\n // the action invocation just gives back object ids,\n // but the invalidateObject calls above should have put the\n // actual objects in the cache\n const changes = createChangedObjects();\n for (const changeType of [\"addedObjects\", \"modifiedObjects\"] as const) {\n for (const { objectType, primaryKey } of (value[changeType] ?? [])) {\n const cacheKey = this.store.getCacheKey<ObjectCacheKey>(\n \"object\",\n objectType,\n primaryKey,\n );\n // N.B. this probably isn't right. `getValue`() will give you the \"top\"\n // value but I think we want the \"truth\" guaranteed.\n const obj = this.store.getValue(cacheKey);\n if (obj && obj.value) {\n changes[changeType].set(objectType, obj.value);\n (changeType === \"addedObjects\" ? changes.added : changes.modified)\n .add(cacheKey);\n }\n }\n }\n } else {\n for (const apiName of value.editedObjectTypes) {\n typesToInvalidate.add(apiName.toString());\n await this.store.invalidateObjectType(apiName as string, changes);\n }\n }\n\n return value;\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ActionApplication.js","names":["delay","createChangedObjects","runOptimisticJob","ACTION_DELAY","process","env","NODE_ENV","ActionApplication","constructor","store","applyAction","action","args","optimisticUpdate","logger","child","methodName","removeOptimisticResult","actionResults","client","$returnEdits","debug","invalidateActionEditResponse","value","typesToInvalidate","Set","changes","type","promisesToWait","obj","modifiedObjects","push","invalidateObject","objectType","primaryKey","addedObjects","add","Promise","all","changeType","cacheKey","getCacheKey","getValue","set","added","modified","apiName","editedObjectTypes","toString","invalidateObjectType"],"sources":["ActionApplication.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ActionDefinition, ActionEditResponse } from \"@osdk/api\";\nimport delay from \"delay\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { type Changes, createChangedObjects } from \"./Changes.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { runOptimisticJob } from \"./OptimisticJob.js\";\nimport type { Store } from \"./Store.js\";\n\nconst ACTION_DELAY = process.env.NODE_ENV === \"production\" ? 0 : 1000;\n\nexport class ActionApplication {\n constructor(private store: Store) {}\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: Store.ApplyActionOptions,\n ) => Promise<ActionEditResponse> = async (\n action,\n args,\n { optimisticUpdate } = {},\n ) => {\n const logger = process.env.NODE_ENV !== \"production\"\n ? this.store.logger?.child({ methodName: \"applyAction\" })\n : this.store.logger;\n const removeOptimisticResult = runOptimisticJob(\n this.store,\n optimisticUpdate,\n );\n\n return await (async () => {\n try {\n // The types for client get confused when we dynamically applyAction so we\n // have to deal with the `any` here and force cast it to what it should be.\n // TODO: Update the types so this doesn't happen!\n\n const actionResults: ActionEditResponse = await this.store.client(\n action,\n ).applyAction(args as any, { $returnEdits: true });\n\n if (process.env.NODE_ENV !== \"production\") {\n if (ACTION_DELAY > 0) {\n logger?.debug(\"action done, pausing\", actionResults);\n await delay(ACTION_DELAY);\n logger?.debug(\"action done, pausing done\");\n }\n }\n await this.#invalidateActionEditResponse(actionResults);\n return actionResults;\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\n \"optimistic action complete; remove the results\",\n );\n }\n // make sure this happens even if the action fails\n await removeOptimisticResult();\n }\n })();\n };\n\n #invalidateActionEditResponse = async (\n value: ActionEditResponse,\n ): Promise<ActionEditResponse> => {\n const typesToInvalidate = new Set<string>();\n\n let changes: Changes | undefined;\n if (value.type === \"edits\") {\n const promisesToWait: Promise<any>[] = [];\n // TODO we need an backend update for deletes\n for (const obj of value.modifiedObjects) {\n promisesToWait.push(\n this.store.invalidateObject(obj.objectType, obj.primaryKey),\n );\n }\n\n for (const obj of value.addedObjects) {\n promisesToWait.push(\n this.store.invalidateObject(obj.objectType, obj.primaryKey),\n );\n\n typesToInvalidate.add(obj.objectType);\n }\n\n await Promise.all(promisesToWait);\n\n // the action invocation just gives back object ids,\n // but the invalidateObject calls above should have put the\n // actual objects in the cache\n const changes = createChangedObjects();\n for (const changeType of [\"addedObjects\", \"modifiedObjects\"] as const) {\n for (const { objectType, primaryKey } of (value[changeType] ?? [])) {\n const cacheKey = this.store.getCacheKey<ObjectCacheKey>(\n \"object\",\n objectType,\n primaryKey,\n );\n // N.B. this probably isn't right. `getValue`() will give you the \"top\"\n // value but I think we want the \"truth\" guaranteed.\n const obj = this.store.getValue(cacheKey);\n if (obj && obj.value) {\n changes[changeType].set(objectType, obj.value);\n (changeType === \"addedObjects\" ? changes.added : changes.modified)\n .add(cacheKey);\n }\n }\n }\n } else {\n for (const apiName of value.editedObjectTypes) {\n typesToInvalidate.add(apiName.toString());\n await this.store.invalidateObjectType(apiName as string, changes);\n }\n }\n\n return value;\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -50,7 +50,7 @@ export class ObjectQuery extends Query {
50
50
  if (process.env.NODE_ENV !== "production") {
51
51
  this.logger?.child({
52
52
  methodName: "_fetchAndStore"
53
- }).info("calling fetchOne");
53
+ }).info("calling _fetchAndStore");
54
54
  }
55
55
  const obj = await getBulkObjectLoader(this.store.client).fetch(this.#apiName, this.#pk);
56
56
  this.store.batch({}, batch => {
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectQuery.js","names":["deepEqual","BehaviorSubject","connectable","map","additionalContext","getBulkObjectLoader","Query","ObjectQuery","apiName","pk","constructor","store","subject","type","cacheKey","opts","process","env","NODE_ENV","client","logger","child","msgPrefix","otherKeys","x","JSON","stringify","join","undefined","_createConnectable","pipe","status","object","value","lastUpdated","isOptimistic","connector","_fetchAndStore","methodName","info","obj","fetch","batch","writeToStore","data","entry","read","debug","write","ret","changes","registerObject","storeOsdkInstances","values","v","getObjectQuery","$apiName","$primaryKey"],"sources":["ObjectQuery.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition, Osdk, PrimaryKeyType } from \"@osdk/api\";\nimport deepEqual from \"fast-deep-equal\";\nimport type { Connectable, Observable, Subject } from \"rxjs\";\nimport { BehaviorSubject, connectable, map } from \"rxjs\";\nimport { additionalContext } from \"../../Client.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type { CommonObserveOptions, Status } from \"../ObservableClient.js\";\nimport { getBulkObjectLoader } from \"./BulkObjectLoader.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport type { Entry } from \"./Layer.js\";\nimport { Query } from \"./Query.js\";\nimport type { BatchContext, Store, SubjectPayload } from \"./Store.js\";\n\nexport interface ObjectEntry extends Entry<ObjectCacheKey> {}\n\nexport interface ObjectCacheKey extends\n CacheKey<\n \"object\",\n ObjectHolder,\n ObjectQuery,\n [string, pk: PrimaryKeyType<ObjectTypeDefinition>]\n >\n{}\n\nexport class ObjectQuery extends Query<\n ObjectCacheKey,\n ObjectPayload,\n CommonObserveOptions\n> {\n #apiName: string;\n #pk: string | number | boolean;\n\n constructor(\n store: Store,\n subject: Subject<SubjectPayload<ObjectCacheKey>>,\n type: string,\n pk: PrimaryKeyType<ObjectTypeDefinition>,\n cacheKey: ObjectCacheKey,\n opts: CommonObserveOptions,\n ) {\n super(\n store,\n subject,\n opts,\n cacheKey,\n process.env.NODE_ENV !== \"production\"\n ? (\n store.client[additionalContext].logger?.child({}, {\n msgPrefix: `ObjectQuery<${\n cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")\n }>`,\n })\n )\n : undefined,\n );\n this.#apiName = type;\n this.#pk = pk;\n }\n\n protected _createConnectable(\n subject: Observable<SubjectPayload<ObjectCacheKey>>,\n ): Connectable<ObjectPayload> {\n return connectable<ObjectPayload>(\n subject.pipe(\n map((x) => {\n return {\n status: x.status,\n object: x.value,\n lastUpdated: x.lastUpdated,\n isOptimistic: x.isOptimistic,\n };\n }),\n ),\n {\n connector: () =>\n new BehaviorSubject<ObjectPayload>({\n status: \"init\",\n object: undefined,\n lastUpdated: 0,\n isOptimistic: false,\n }),\n },\n );\n }\n\n async _fetchAndStore(): Promise<void> {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"_fetchAndStore\" }).info(\n \"calling fetchOne\",\n );\n }\n\n const obj = await getBulkObjectLoader(this.store.client)\n .fetch(this.#apiName, this.#pk);\n\n this.store.batch({}, (batch) => {\n this.writeToStore(obj, \"loaded\", batch);\n });\n }\n\n writeToStore(\n data: ObjectHolder,\n status: Status,\n batch: BatchContext,\n ): Entry<ObjectCacheKey> {\n const entry = batch.read(this.cacheKey);\n\n if (entry && deepEqual(data, entry.value)) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"writeToStore\" }).debug(\n `Object was deep equal, just setting status`,\n );\n }\n // must do a \"full write\" here so that the lastUpdated is updated but we\n // don't want to retrigger anyone's memoization on the value!\n return batch.write(this.cacheKey, entry.value, status);\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"writeToStore\" }).debug(\n JSON.stringify({ status }),\n data,\n );\n }\n const ret = batch.write(this.cacheKey, data, status);\n batch.changes.registerObject(this.cacheKey, data, /* isNew */ !entry);\n\n return ret;\n }\n}\n\n/**\n * Internal helper method for writing objects to the store and returning their\n * object keys\n * @internal\n */\nexport function storeOsdkInstances(\n store: Store,\n values: Array<ObjectHolder> | Array<Osdk.Instance<any, any, any>>,\n batch: BatchContext,\n): ObjectCacheKey[] {\n // update the cache for any object that has changed\n // and save the mapped values to return\n return values.map(v => {\n return store.getObjectQuery(\n v.$apiName,\n v.$primaryKey as string | number,\n )\n .writeToStore(\n v as ObjectHolder,\n \"loaded\",\n batch,\n ).cacheKey;\n });\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ObjectQuery.js","names":["deepEqual","BehaviorSubject","connectable","map","additionalContext","getBulkObjectLoader","Query","ObjectQuery","apiName","pk","constructor","store","subject","type","cacheKey","opts","process","env","NODE_ENV","client","logger","child","msgPrefix","otherKeys","x","JSON","stringify","join","undefined","_createConnectable","pipe","status","object","value","lastUpdated","isOptimistic","connector","_fetchAndStore","methodName","info","obj","fetch","batch","writeToStore","data","entry","read","debug","write","ret","changes","registerObject","storeOsdkInstances","values","v","getObjectQuery","$apiName","$primaryKey"],"sources":["ObjectQuery.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition, Osdk, PrimaryKeyType } from \"@osdk/api\";\nimport deepEqual from \"fast-deep-equal\";\nimport type { Connectable, Observable, Subject } from \"rxjs\";\nimport { BehaviorSubject, connectable, map } from \"rxjs\";\nimport { additionalContext } from \"../../Client.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type { CommonObserveOptions, Status } from \"../ObservableClient.js\";\nimport { getBulkObjectLoader } from \"./BulkObjectLoader.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport type { Entry } from \"./Layer.js\";\nimport { Query } from \"./Query.js\";\nimport type { BatchContext, Store, SubjectPayload } from \"./Store.js\";\n\nexport interface ObjectEntry extends Entry<ObjectCacheKey> {}\n\nexport interface ObjectCacheKey extends\n CacheKey<\n \"object\",\n ObjectHolder,\n ObjectQuery,\n [string, pk: PrimaryKeyType<ObjectTypeDefinition>]\n >\n{}\n\nexport class ObjectQuery extends Query<\n ObjectCacheKey,\n ObjectPayload,\n CommonObserveOptions\n> {\n #apiName: string;\n #pk: string | number | boolean;\n\n constructor(\n store: Store,\n subject: Subject<SubjectPayload<ObjectCacheKey>>,\n type: string,\n pk: PrimaryKeyType<ObjectTypeDefinition>,\n cacheKey: ObjectCacheKey,\n opts: CommonObserveOptions,\n ) {\n super(\n store,\n subject,\n opts,\n cacheKey,\n process.env.NODE_ENV !== \"production\"\n ? (\n store.client[additionalContext].logger?.child({}, {\n msgPrefix: `ObjectQuery<${\n cacheKey.otherKeys.map(x => JSON.stringify(x)).join(\", \")\n }>`,\n })\n )\n : undefined,\n );\n this.#apiName = type;\n this.#pk = pk;\n }\n\n protected _createConnectable(\n subject: Observable<SubjectPayload<ObjectCacheKey>>,\n ): Connectable<ObjectPayload> {\n return connectable<ObjectPayload>(\n subject.pipe(\n map((x) => {\n return {\n status: x.status,\n object: x.value,\n lastUpdated: x.lastUpdated,\n isOptimistic: x.isOptimistic,\n };\n }),\n ),\n {\n connector: () =>\n new BehaviorSubject<ObjectPayload>({\n status: \"init\",\n object: undefined,\n lastUpdated: 0,\n isOptimistic: false,\n }),\n },\n );\n }\n\n async _fetchAndStore(): Promise<void> {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"_fetchAndStore\" }).info(\n \"calling _fetchAndStore\",\n );\n }\n\n const obj = await getBulkObjectLoader(this.store.client)\n .fetch(this.#apiName, this.#pk);\n\n this.store.batch({}, (batch) => {\n this.writeToStore(obj, \"loaded\", batch);\n });\n }\n\n writeToStore(\n data: ObjectHolder,\n status: Status,\n batch: BatchContext,\n ): Entry<ObjectCacheKey> {\n const entry = batch.read(this.cacheKey);\n\n if (entry && deepEqual(data, entry.value)) {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"writeToStore\" }).debug(\n `Object was deep equal, just setting status`,\n );\n }\n // must do a \"full write\" here so that the lastUpdated is updated but we\n // don't want to retrigger anyone's memoization on the value!\n return batch.write(this.cacheKey, entry.value, status);\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"writeToStore\" }).debug(\n JSON.stringify({ status }),\n data,\n );\n }\n const ret = batch.write(this.cacheKey, data, status);\n batch.changes.registerObject(this.cacheKey, data, /* isNew */ !entry);\n\n return ret;\n }\n}\n\n/**\n * Internal helper method for writing objects to the store and returning their\n * object keys\n * @internal\n */\nexport function storeOsdkInstances(\n store: Store,\n values: Array<ObjectHolder> | Array<Osdk.Instance<any, any, any>>,\n batch: BatchContext,\n): ObjectCacheKey[] {\n // update the cache for any object that has changed\n // and save the mapped values to return\n return values.map(v => {\n return store.getObjectQuery(\n v.$apiName,\n v.$primaryKey as string | number,\n )\n .writeToStore(\n v as ObjectHolder,\n \"loaded\",\n batch,\n ).cacheKey;\n });\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,OAAOA,SAAS,MAAM,iBAAiB;AAEvC,SAASC,eAAe,EAAEC,WAAW,EAAEC,GAAG,QAAQ,MAAM;AACxD,SAASC,iBAAiB,QAAQ,iBAAiB;AAInD,SAASC,mBAAmB,QAAQ,uBAAuB;AAG3D,SAASC,KAAK,QAAQ,YAAY;AAclC,OAAO,MAAMC,WAAW,SAASD,KAAK,CAIpC;EACA,CAACE,OAAO;EACR,CAACC,EAAE;EAEHC,WAAWA,CACTC,KAAY,EACZC,OAAgD,EAChDC,IAAY,EACZJ,EAAwC,EACxCK,QAAwB,EACxBC,IAA0B,EAC1B;IACA,KAAK,CACHJ,KAAK,EACLC,OAAO,EACPG,IAAI,EACJD,QAAQ,EACRE,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,GAEjCP,KAAK,CAACQ,MAAM,CAACf,iBAAiB,CAAC,CAACgB,MAAM,EAAEC,KAAK,CAAC,CAAC,CAAC,EAAE;MAChDC,SAAS,EAAE,eACTR,QAAQ,CAACS,SAAS,CAACpB,GAAG,CAACqB,CAAC,IAAIC,IAAI,CAACC,SAAS,CAACF,CAAC,CAAC,CAAC,CAACG,IAAI,CAAC,IAAI,CAAC;IAE7D,CAAC,CAAC,GAEFC,SACN,CAAC;IACD,IAAI,CAAC,CAACpB,OAAO,GAAGK,IAAI;IACpB,IAAI,CAAC,CAACJ,EAAE,GAAGA,EAAE;EACf;EAEUoB,kBAAkBA,CAC1BjB,OAAmD,EACvB;IAC5B,OAAOV,WAAW,CAChBU,OAAO,CAACkB,IAAI,CACV3B,GAAG,CAAEqB,CAAC,IAAK;MACT,OAAO;QACLO,MAAM,EAAEP,CAAC,CAACO,MAAM;QAChBC,MAAM,EAAER,CAAC,CAACS,KAAK;QACfC,WAAW,EAAEV,CAAC,CAACU,WAAW;QAC1BC,YAAY,EAAEX,CAAC,CAACW;MAClB,CAAC;IACH,CAAC,CACH,CAAC,EACD;MACEC,SAAS,EAAEA,CAAA,KACT,IAAInC,eAAe,CAAgB;QACjC8B,MAAM,EAAE,MAAM;QACdC,MAAM,EAAEJ,SAAS;QACjBM,WAAW,EAAE,CAAC;QACdC,YAAY,EAAE;MAChB,CAAC;IACL,CACF,CAAC;EACH;EAEA,MAAME,cAAcA,CAAA,EAAkB;IACpC,IAAIrB,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACzC,IAAI,CAACE,MAAM,EAAEC,KAAK,CAAC;QAAEiB,UAAU,EAAE;MAAiB,CAAC,CAAC,CAACC,IAAI,CACvD,wBACF,CAAC;IACH;IAEA,MAAMC,GAAG,GAAG,MAAMnC,mBAAmB,CAAC,IAAI,CAACM,KAAK,CAACQ,MAAM,CAAC,CACrDsB,KAAK,CAAC,IAAI,CAAC,CAACjC,OAAO,EAAE,IAAI,CAAC,CAACC,EAAE,CAAC;IAEjC,IAAI,CAACE,KAAK,CAAC+B,KAAK,CAAC,CAAC,CAAC,EAAGA,KAAK,IAAK;MAC9B,IAAI,CAACC,YAAY,CAACH,GAAG,EAAE,QAAQ,EAAEE,KAAK,CAAC;IACzC,CAAC,CAAC;EACJ;EAEAC,YAAYA,CACVC,IAAkB,EAClBb,MAAc,EACdW,KAAmB,EACI;IACvB,MAAMG,KAAK,GAAGH,KAAK,CAACI,IAAI,CAAC,IAAI,CAAChC,QAAQ,CAAC;IAEvC,IAAI+B,KAAK,IAAI7C,SAAS,CAAC4C,IAAI,EAAEC,KAAK,CAACZ,KAAK,CAAC,EAAE;MACzC,IAAIjB,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;QACzC,IAAI,CAACE,MAAM,EAAEC,KAAK,CAAC;UAAEiB,UAAU,EAAE;QAAe,CAAC,CAAC,CAACS,KAAK,CACtD,4CACF,CAAC;MACH;MACA;MACA;MACA,OAAOL,KAAK,CAACM,KAAK,CAAC,IAAI,CAAClC,QAAQ,EAAE+B,KAAK,CAACZ,KAAK,EAAEF,MAAM,CAAC;IACxD;IAEA,IAAIf,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACzC,IAAI,CAACE,MAAM,EAAEC,KAAK,CAAC;QAAEiB,UAAU,EAAE;MAAe,CAAC,CAAC,CAACS,KAAK,CACtDtB,IAAI,CAACC,SAAS,CAAC;QAAEK;MAAO,CAAC,CAAC,EAC1Ba,IACF,CAAC;IACH;IACA,MAAMK,GAAG,GAAGP,KAAK,CAACM,KAAK,CAAC,IAAI,CAAClC,QAAQ,EAAE8B,IAAI,EAAEb,MAAM,CAAC;IACpDW,KAAK,CAACQ,OAAO,CAACC,cAAc,CAAC,IAAI,CAACrC,QAAQ,EAAE8B,IAAI,EAAE,WAAY,CAACC,KAAK,CAAC;IAErE,OAAOI,GAAG;EACZ;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,kBAAkBA,CAChCzC,KAAY,EACZ0C,MAAiE,EACjEX,KAAmB,EACD;EAClB;EACA;EACA,OAAOW,MAAM,CAAClD,GAAG,CAACmD,CAAC,IAAI;IACrB,OAAO3C,KAAK,CAAC4C,cAAc,CACzBD,CAAC,CAACE,QAAQ,EACVF,CAAC,CAACG,WACJ,CAAC,CACEd,YAAY,CACXW,CAAC,EACD,QAAQ,EACRZ,KACF,CAAC,CAAC5B,QAAQ;EACd,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -64,7 +64,7 @@ export class OptimisticJob {
64
64
  $apiName: type.apiName,
65
65
  $objectType: type.apiName,
66
66
  ...properties
67
- }], undefined).then(objs => {
67
+ }], undefined, {}).then(objs => {
68
68
  return objs[0];
69
69
  });
70
70
  addedObjectPromises.push(create);
@@ -1 +1 @@
1
- {"version":3,"file":"OptimisticJob.js","names":["additionalContext","createOptimisticId","OptimisticJob","result","constructor","store","optimisticId","updatedObjects","addedObjectPromises","getResult","addedObjects","Promise","allSettled","batchResult","batch","obj","status","getObjectQuery","value","$objectType","$primaryKey","writeToStore","changes","context","updateObject","push","createObject","type","pk","properties","create","client","objectFactory2","$apiName","apiName","undefined","then","objs","runOptimisticJob","optimisticUpdate","resolve","job","optimisticApplicationDone","finally","removeLayer"],"sources":["OptimisticJob.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { additionalContext } from \"../../Client.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { OptimisticBuilder } from \"../OptimisticBuilder.js\";\nimport { type Changes } from \"./Changes.js\";\nimport { createOptimisticId, type OptimisticId } from \"./OptimisticId.js\";\nimport type { Store } from \"./Store.js\";\n\nexport class OptimisticJob {\n context: OptimisticBuilder;\n getResult: () => Promise<Changes>;\n #result!: Promise<Changes>;\n\n constructor(store: Store, optimisticId: OptimisticId) {\n const updatedObjects: Array<\n ObjectHolder\n > = [];\n\n // due to potentially needing to fetch the object metadata,\n // the creation of objects needs to be async. In practice, the\n // metadata is cached.\n const addedObjectPromises: Array<\n Promise<ObjectHolder>\n > = [];\n\n // TODO, this code needs to be refactored. its weird right now\n // but the contract for `runOptimisticJob` is good.\n\n // todo memoize this\n this.getResult = () => {\n return this.#result ??= (async () => {\n const addedObjects = await Promise.allSettled(\n addedObjectPromises,\n );\n\n const { batchResult } = store.batch({ optimisticId }, (batch) => {\n for (const obj of addedObjects) {\n if (obj.status === \"fulfilled\") {\n store.getObjectQuery(obj.value.$objectType, obj.value.$primaryKey)\n .writeToStore(obj.value, \"loading\", batch);\n } else {\n // TODO FIXME\n throw obj;\n }\n }\n\n for (const obj of updatedObjects) {\n store.getObjectQuery(obj.$objectType, obj.$primaryKey)\n .writeToStore(obj, \"loading\", batch);\n }\n });\n\n return batchResult.changes;\n })();\n };\n\n this.context = {\n updateObject(value) {\n updatedObjects.push(value as unknown as ObjectHolder<typeof value>);\n return this;\n },\n createObject(type, pk, properties) {\n const create = store.client[additionalContext].objectFactory2(\n store.client[additionalContext],\n [{\n $primaryKey: pk,\n $apiName: type.apiName,\n $objectType: type.apiName,\n ...properties,\n }],\n undefined,\n ).then(objs => {\n return objs[0];\n });\n\n addedObjectPromises.push(create);\n return this;\n },\n };\n }\n}\n\nexport function runOptimisticJob(\n store: Store,\n optimisticUpdate: undefined | ((ctx: OptimisticBuilder) => void),\n): () => Promise<void> {\n if (!optimisticUpdate) {\n return () => Promise.resolve();\n }\n\n const optimisticId = createOptimisticId();\n const job = new OptimisticJob(store, optimisticId);\n optimisticUpdate(job.context);\n const optimisticApplicationDone = job.getResult();\n\n return () => {\n return optimisticApplicationDone.then(\n // we don't want to leak the result\n () => undefined,\n ).finally(() => {\n store.removeLayer(optimisticId);\n });\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"OptimisticJob.js","names":["additionalContext","createOptimisticId","OptimisticJob","result","constructor","store","optimisticId","updatedObjects","addedObjectPromises","getResult","addedObjects","Promise","allSettled","batchResult","batch","obj","status","getObjectQuery","value","$objectType","$primaryKey","writeToStore","changes","context","updateObject","push","createObject","type","pk","properties","create","client","objectFactory2","$apiName","apiName","undefined","then","objs","runOptimisticJob","optimisticUpdate","resolve","job","optimisticApplicationDone","finally","removeLayer"],"sources":["OptimisticJob.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { additionalContext } from \"../../Client.js\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { OptimisticBuilder } from \"../OptimisticBuilder.js\";\nimport { type Changes } from \"./Changes.js\";\nimport { createOptimisticId, type OptimisticId } from \"./OptimisticId.js\";\nimport type { Store } from \"./Store.js\";\n\nexport class OptimisticJob {\n context: OptimisticBuilder;\n getResult: () => Promise<Changes>;\n #result!: Promise<Changes>;\n\n constructor(store: Store, optimisticId: OptimisticId) {\n const updatedObjects: Array<\n ObjectHolder\n > = [];\n\n // due to potentially needing to fetch the object metadata,\n // the creation of objects needs to be async. In practice, the\n // metadata is cached.\n const addedObjectPromises: Array<\n Promise<ObjectHolder>\n > = [];\n\n // TODO, this code needs to be refactored. its weird right now\n // but the contract for `runOptimisticJob` is good.\n\n // todo memoize this\n this.getResult = () => {\n return this.#result ??= (async () => {\n const addedObjects = await Promise.allSettled(\n addedObjectPromises,\n );\n\n const { batchResult } = store.batch({ optimisticId }, (batch) => {\n for (const obj of addedObjects) {\n if (obj.status === \"fulfilled\") {\n store.getObjectQuery(obj.value.$objectType, obj.value.$primaryKey)\n .writeToStore(obj.value, \"loading\", batch);\n } else {\n // TODO FIXME\n throw obj;\n }\n }\n\n for (const obj of updatedObjects) {\n store.getObjectQuery(obj.$objectType, obj.$primaryKey)\n .writeToStore(obj, \"loading\", batch);\n }\n });\n\n return batchResult.changes;\n })();\n };\n\n this.context = {\n updateObject(value) {\n updatedObjects.push(value as unknown as ObjectHolder<typeof value>);\n return this;\n },\n createObject(type, pk, properties) {\n const create = store.client[additionalContext].objectFactory2(\n store.client[additionalContext],\n [{\n $primaryKey: pk,\n $apiName: type.apiName,\n $objectType: type.apiName,\n ...properties,\n }],\n undefined,\n {},\n ).then(objs => {\n return objs[0];\n });\n\n addedObjectPromises.push(create);\n return this;\n },\n };\n }\n}\n\nexport function runOptimisticJob(\n store: Store,\n optimisticUpdate: undefined | ((ctx: OptimisticBuilder) => void),\n): () => Promise<void> {\n if (!optimisticUpdate) {\n return () => Promise.resolve();\n }\n\n const optimisticId = createOptimisticId();\n const job = new OptimisticJob(store, optimisticId);\n optimisticUpdate(job.context);\n const optimisticApplicationDone = job.getResult();\n\n return () => {\n return optimisticApplicationDone.then(\n // we don't want to leak the result\n () => undefined,\n ).finally(() => {\n store.removeLayer(optimisticId);\n });\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -133,8 +133,8 @@ export class Store {
133
133
  this.#queries.get(key)?.dispose();
134
134
  this.#queries.delete(key);
135
135
  };
136
- applyAction = (action, args, opts) => {
137
- return new ActionApplication(this).applyAction(action, args, opts);
136
+ applyAction = async (action, args, opts) => {
137
+ return await new ActionApplication(this).applyAction(action, args, opts);
138
138
  };
139
139
  removeLayer(layerId) {
140
140
  !(layerId != null) ? process.env.NODE_ENV !== "production" ? invariant(false, "undefined is the reserved layerId for the truth layer") : invariant(false) : void 0;