@osdk/client 2.3.0-beta.5 → 2.3.0-beta.7

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 (127) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/build/browser/actions/ActionValidationError.js.map +1 -1
  3. package/build/browser/actions/applyAction.js +9 -8
  4. package/build/browser/actions/applyAction.js.map +1 -1
  5. package/build/browser/createClient.js +8 -1
  6. package/build/browser/createClient.js.map +1 -1
  7. package/build/browser/logger/BaseLogger.js +1 -1
  8. package/build/browser/logger/BaseLogger.js.map +1 -1
  9. package/build/browser/object/mediaUpload.js +3 -0
  10. package/build/browser/object/mediaUpload.js.map +1 -1
  11. package/build/browser/observable/ObservableClient.js +17 -1
  12. package/build/browser/observable/ObservableClient.js.map +1 -1
  13. package/build/browser/observable/OptimisticBuilder.js.map +1 -1
  14. package/build/browser/observable/internal/ActionApplication.js +31 -30
  15. package/build/browser/observable/internal/ActionApplication.js.map +1 -1
  16. package/build/browser/observable/internal/Changes.js +5 -1
  17. package/build/browser/observable/internal/Changes.js.map +1 -1
  18. package/build/browser/observable/internal/ListQuery.js +24 -22
  19. package/build/browser/observable/internal/ListQuery.js.map +1 -1
  20. package/build/browser/observable/internal/ObjectQuery.js +30 -1
  21. package/build/browser/observable/internal/ObjectQuery.js.map +1 -1
  22. package/build/browser/observable/internal/ObservableClientImpl.js +1 -2
  23. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  24. package/build/browser/observable/internal/OptimisticJob.js +8 -0
  25. package/build/browser/observable/internal/OptimisticJob.js.map +1 -1
  26. package/build/browser/observable/internal/Query.js +2 -2
  27. package/build/browser/observable/internal/Query.js.map +1 -1
  28. package/build/browser/observable/internal/Store.js +4 -0
  29. package/build/browser/observable/internal/Store.js.map +1 -1
  30. package/build/browser/observable/internal/Store.test.js +45 -5
  31. package/build/browser/observable/internal/Store.test.js.map +1 -1
  32. package/build/browser/observable/internal/testUtils.js.map +1 -1
  33. package/build/browser/observable/internal/tombstone.js +18 -0
  34. package/build/browser/observable/internal/tombstone.js.map +1 -0
  35. package/build/browser/util/UserAgent.js +2 -1
  36. package/build/browser/util/UserAgent.js.map +1 -1
  37. package/build/browser/util/extractRdpDefinition.js +2 -0
  38. package/build/browser/util/extractRdpDefinition.js.map +1 -1
  39. package/build/browser/util/toDataValue.js +20 -10
  40. package/build/browser/util/toDataValue.js.map +1 -1
  41. package/build/browser/util/toDataValue.test.js +50 -11
  42. package/build/browser/util/toDataValue.test.js.map +1 -1
  43. package/build/cjs/chunk-BITDNXFO.cjs +1804 -0
  44. package/build/cjs/chunk-BITDNXFO.cjs.map +1 -0
  45. package/build/cjs/{chunk-MZ4JZQUU.cjs → chunk-HTPVXLYY.cjs} +649 -42
  46. package/build/cjs/chunk-HTPVXLYY.cjs.map +1 -0
  47. package/build/cjs/index.cjs +16 -1769
  48. package/build/cjs/index.cjs.map +1 -1
  49. package/build/cjs/index.d.cts +4 -3
  50. package/build/cjs/public/internal.cjs +7 -8
  51. package/build/cjs/public/internal.cjs.map +1 -1
  52. package/build/cjs/public/unstable-do-not-use.cjs +182 -123
  53. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  54. package/build/cjs/public/unstable-do-not-use.d.cts +2 -1
  55. package/build/esm/actions/ActionValidationError.js.map +1 -1
  56. package/build/esm/actions/applyAction.js +9 -8
  57. package/build/esm/actions/applyAction.js.map +1 -1
  58. package/build/esm/createClient.js +8 -1
  59. package/build/esm/createClient.js.map +1 -1
  60. package/build/esm/logger/BaseLogger.js +1 -1
  61. package/build/esm/logger/BaseLogger.js.map +1 -1
  62. package/build/esm/object/mediaUpload.js +3 -0
  63. package/build/esm/object/mediaUpload.js.map +1 -1
  64. package/build/esm/observable/ObservableClient.js +17 -1
  65. package/build/esm/observable/ObservableClient.js.map +1 -1
  66. package/build/esm/observable/OptimisticBuilder.js.map +1 -1
  67. package/build/esm/observable/internal/ActionApplication.js +31 -30
  68. package/build/esm/observable/internal/ActionApplication.js.map +1 -1
  69. package/build/esm/observable/internal/Changes.js +5 -1
  70. package/build/esm/observable/internal/Changes.js.map +1 -1
  71. package/build/esm/observable/internal/ListQuery.js +24 -22
  72. package/build/esm/observable/internal/ListQuery.js.map +1 -1
  73. package/build/esm/observable/internal/ObjectQuery.js +30 -1
  74. package/build/esm/observable/internal/ObjectQuery.js.map +1 -1
  75. package/build/esm/observable/internal/ObservableClientImpl.js +1 -2
  76. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  77. package/build/esm/observable/internal/OptimisticJob.js +8 -0
  78. package/build/esm/observable/internal/OptimisticJob.js.map +1 -1
  79. package/build/esm/observable/internal/Query.js +2 -2
  80. package/build/esm/observable/internal/Query.js.map +1 -1
  81. package/build/esm/observable/internal/Store.js +4 -0
  82. package/build/esm/observable/internal/Store.js.map +1 -1
  83. package/build/esm/observable/internal/Store.test.js +45 -5
  84. package/build/esm/observable/internal/Store.test.js.map +1 -1
  85. package/build/esm/observable/internal/testUtils.js.map +1 -1
  86. package/build/esm/observable/internal/tombstone.js +18 -0
  87. package/build/esm/observable/internal/tombstone.js.map +1 -0
  88. package/build/esm/util/UserAgent.js +2 -1
  89. package/build/esm/util/UserAgent.js.map +1 -1
  90. package/build/esm/util/extractRdpDefinition.js +2 -0
  91. package/build/esm/util/extractRdpDefinition.js.map +1 -1
  92. package/build/esm/util/toDataValue.js +20 -10
  93. package/build/esm/util/toDataValue.js.map +1 -1
  94. package/build/esm/util/toDataValue.test.js +50 -11
  95. package/build/esm/util/toDataValue.test.js.map +1 -1
  96. package/build/types/actions/ActionValidationError.d.ts +1 -1
  97. package/build/types/actions/ActionValidationError.d.ts.map +1 -1
  98. package/build/types/actions/applyAction.d.ts.map +1 -1
  99. package/build/types/createClient.d.ts.map +1 -1
  100. package/build/types/object/mediaUpload.d.ts +2 -1
  101. package/build/types/object/mediaUpload.d.ts.map +1 -1
  102. package/build/types/observable/ObservableClient.d.ts +2 -2
  103. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  104. package/build/types/observable/OptimisticBuilder.d.ts +1 -0
  105. package/build/types/observable/OptimisticBuilder.d.ts.map +1 -1
  106. package/build/types/observable/internal/ActionApplication.d.ts +1 -1
  107. package/build/types/observable/internal/ActionApplication.d.ts.map +1 -1
  108. package/build/types/observable/internal/Changes.d.ts +2 -0
  109. package/build/types/observable/internal/Changes.d.ts.map +1 -1
  110. package/build/types/observable/internal/ListQuery.d.ts.map +1 -1
  111. package/build/types/observable/internal/ObjectQuery.d.ts +1 -0
  112. package/build/types/observable/internal/ObjectQuery.d.ts.map +1 -1
  113. package/build/types/observable/internal/OptimisticJob.d.ts.map +1 -1
  114. package/build/types/observable/internal/Store.d.ts +2 -1
  115. package/build/types/observable/internal/Store.d.ts.map +1 -1
  116. package/build/types/observable/internal/testUtils.d.ts +1 -1
  117. package/build/types/observable/internal/testUtils.d.ts.map +1 -1
  118. package/build/types/observable/internal/tombstone.d.ts +1 -0
  119. package/build/types/observable/internal/tombstone.d.ts.map +1 -0
  120. package/build/types/util/UserAgent.d.ts +1 -0
  121. package/build/types/util/UserAgent.d.ts.map +1 -1
  122. package/package.json +11 -11
  123. package/build/cjs/chunk-C5D7744G.cjs +0 -615
  124. package/build/cjs/chunk-C5D7744G.cjs.map +0 -1
  125. package/build/cjs/chunk-MZ4JZQUU.cjs.map +0 -1
  126. package/build/cjs/chunk-T4NIFYZS.cjs +0 -14
  127. package/build/cjs/chunk-T4NIFYZS.cjs.map +0 -1
@@ -0,0 +1,1804 @@
1
+ 'use strict';
2
+
3
+ var chunkHTPVXLYY_cjs = require('./chunk-HTPVXLYY.cjs');
4
+ var unstable = require('@osdk/api/unstable');
5
+ var client_unstable = require('@osdk/client.unstable');
6
+ var invariant = require('tiny-invariant');
7
+ var shared_client_impl = require('@osdk/shared.client.impl');
8
+ var api = require('@osdk/api');
9
+ var generatorConverters = require('@osdk/generator-converters');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var invariant__default = /*#__PURE__*/_interopDefault(invariant);
14
+
15
+ // src/actions/ActionValidationError.ts
16
+ var ActionValidationError = class extends Error {
17
+ constructor(validation) {
18
+ super("Validation Error: " + JSON.stringify(validation, null, 2));
19
+ this.validation = validation;
20
+ }
21
+ };
22
+
23
+ // src/object/AttachmentUpload.ts
24
+ function isAttachmentUpload(o) {
25
+ return typeof o === `object` && "name" in o && "data" in o && o.data instanceof Blob;
26
+ }
27
+ function isAttachmentFile(o) {
28
+ return typeof o === "object" && o instanceof Blob && "name" in o;
29
+ }
30
+ function createAttachmentUpload(data, name) {
31
+ return {
32
+ data,
33
+ name
34
+ };
35
+ }
36
+
37
+ // src/objectSet/conjureUnionType.ts
38
+ function conjureUnionType(type, value) {
39
+ return {
40
+ type,
41
+ [type]: value
42
+ };
43
+ }
44
+
45
+ // src/ontology/makeConjureContext.ts
46
+ function makeConjureContext({
47
+ baseUrl,
48
+ fetch: fetchFn,
49
+ tokenProvider
50
+ }, servicePath) {
51
+ return {
52
+ baseUrl,
53
+ servicePath,
54
+ fetchFn,
55
+ tokenProvider
56
+ };
57
+ }
58
+
59
+ // src/pageRequestAsAsyncIter.ts
60
+ function getResults(x) {
61
+ return x.results;
62
+ }
63
+ function applyPageToken(payload, {
64
+ pageToken
65
+ }) {
66
+ return pageToken ? {
67
+ ...payload,
68
+ pageToken
69
+ } : void 0;
70
+ }
71
+ async function* pageRequestAsAsyncIter(call, values, nextArgs, initialPayload) {
72
+ let payload = initialPayload;
73
+ while (payload) {
74
+ const r = await call(payload);
75
+ for (const q of values(r)) {
76
+ yield q;
77
+ }
78
+ payload = nextArgs(payload, r);
79
+ }
80
+ }
81
+
82
+ // src/object/SimpleCache.ts
83
+ function createSimpleCache(map = /* @__PURE__ */ new Map(), fn) {
84
+ function get(key) {
85
+ let r = map.get(key);
86
+ if (r === void 0 && fn !== void 0) {
87
+ return set(key, fn(key));
88
+ } else {
89
+ return r;
90
+ }
91
+ }
92
+ function set(key, value) {
93
+ map.set(key, value);
94
+ return value;
95
+ }
96
+ function remove(key) {
97
+ return map.delete(key);
98
+ }
99
+ return {
100
+ get,
101
+ set,
102
+ remove
103
+ };
104
+ }
105
+ function createSimpleAsyncCache(type, fn, createCacheLocal = createSimpleCache) {
106
+ const cache = createCacheLocal(type === "weak" ? /* @__PURE__ */ new WeakMap() : /* @__PURE__ */ new Map());
107
+ const inProgress = createCacheLocal(type === "weak" ? /* @__PURE__ */ new WeakMap() : /* @__PURE__ */ new Map());
108
+ const ret = {
109
+ getOrUndefined: function getOrUndefined(key) {
110
+ return cache.get(key);
111
+ },
112
+ get: async function get(key) {
113
+ return cache.get(key) ?? inProgress.get(key) ?? ret.set(key, fn(key));
114
+ },
115
+ set: async function set(k, v) {
116
+ try {
117
+ const r = await inProgress.set(k, v);
118
+ cache.set(k, r);
119
+ inProgress.remove(k);
120
+ return r;
121
+ } catch (e) {
122
+ inProgress.remove(k);
123
+ throw e;
124
+ }
125
+ }
126
+ };
127
+ return ret;
128
+ }
129
+
130
+ // src/__unstable/ConjureSupport.ts
131
+ var cachedAllOntologies;
132
+ async function getOntologyVersionForRid(ctx, ontologyRid) {
133
+ cachedAllOntologies ??= await client_unstable.loadAllOntologies(ctx, {});
134
+ !cachedAllOntologies.ontologies[ontologyRid] ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, "ontology should be loaded") : invariant__default.default(false) : void 0;
135
+ return cachedAllOntologies.ontologies[ontologyRid].currentOntologyVersion;
136
+ }
137
+ var strongMemoAsync = (fn) => createSimpleAsyncCache("strong", fn).get;
138
+ var weakMemoAsync = (fn) => createSimpleAsyncCache("weak", fn).get;
139
+ var MetadataClient = class {
140
+ #client;
141
+ #ctx;
142
+ #logger;
143
+ constructor(client) {
144
+ this.#client = client;
145
+ this.#ctx = makeConjureContext(client, "ontology-metadata/api");
146
+ this.#client.ontologyProvider.getObjectDefinition;
147
+ this.#logger = this.#client.logger?.child({
148
+ mcc: true
149
+ });
150
+ }
151
+ forObjectByRid = strongMemoAsync(async (rid) => {
152
+ return Promise.resolve({
153
+ getPropertyMapping: this.#objectPropertyMapping.bind(this, rid),
154
+ getLinkMapping: this.#objectLinkMapping.bind(this, rid),
155
+ getRid: () => rid,
156
+ getApiName: async () => (await this.#getConjureObjectType(rid)).apiName
157
+ });
158
+ });
159
+ forObjectByApiName = strongMemoAsync(async (objectApiName) => {
160
+ const objectDef = await this.#client.ontologyProvider.getObjectDefinition(objectApiName);
161
+ return this.forObjectByRid(objectDef.rid);
162
+ });
163
+ #objectPropertyMapping = strongMemoAsync(async (objectTypeRid) => {
164
+ const conjureObjectType = await this.#getConjureObjectType(objectTypeRid);
165
+ return createObjectPropertyMapping(conjureObjectType);
166
+ });
167
+ #objectLinkMapping = strongMemoAsync(async (objectTypeRid) => {
168
+ const linkTypes = await client_unstable.getLinkTypesForObjectTypes(this.#ctx, {
169
+ includeObjectTypesWithoutSearchableDatasources: true,
170
+ loadRedacted: false,
171
+ objectTypeBranches: {},
172
+ objectTypeVersions: {
173
+ [objectTypeRid]: await this.ontologyVersion("")
174
+ }
175
+ });
176
+ !linkTypes.linkTypes[objectTypeRid] ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, "link type should be loaded") : invariant__default.default(false) : void 0;
177
+ const ret = {};
178
+ for (const l of linkTypes.linkTypes[objectTypeRid]) {
179
+ const helper = ({
180
+ apiName
181
+ }, linkSide, otherObjectType) => {
182
+ if (apiName) {
183
+ ret[apiName] = {
184
+ apiName,
185
+ directedLinkTypeRid: {
186
+ linkTypeRid: l.rid,
187
+ linkSide
188
+ },
189
+ otherObjectType
190
+ };
191
+ }
192
+ };
193
+ if (l.definition.type === "oneToMany") {
194
+ const {
195
+ oneToMany: {
196
+ objectTypeRidManySide,
197
+ manyToOneLinkMetadata,
198
+ objectTypeRidOneSide,
199
+ oneToManyLinkMetadata
200
+ }
201
+ } = l.definition;
202
+ if (objectTypeRidManySide === objectTypeRid) {
203
+ helper(manyToOneLinkMetadata, "TARGET", objectTypeRidOneSide);
204
+ }
205
+ if (objectTypeRidOneSide === objectTypeRid) {
206
+ helper(oneToManyLinkMetadata, "SOURCE", objectTypeRidManySide);
207
+ }
208
+ } else if (l.definition.type === "manyToMany") {
209
+ const {
210
+ manyToMany: {
211
+ objectTypeRidA,
212
+ objectTypeAToBLinkMetadata,
213
+ objectTypeRidB,
214
+ objectTypeBToALinkMetadata
215
+ }
216
+ } = l.definition;
217
+ if (objectTypeRidA === objectTypeRid) {
218
+ helper(objectTypeAToBLinkMetadata, "SOURCE", objectTypeRidB);
219
+ }
220
+ if (objectTypeRidB === objectTypeRid) {
221
+ helper(objectTypeBToALinkMetadata, "TARGET", objectTypeRidA);
222
+ }
223
+ }
224
+ }
225
+ return ret;
226
+ });
227
+ #getConjureObjectType = strongMemoAsync(async (objectTypeRid) => {
228
+ this.#logger?.debug(`getConjureObjectType(${objectTypeRid})`);
229
+ const body = {
230
+ datasourceTypes: [],
231
+ objectTypes: [{
232
+ identifier: {
233
+ type: "objectTypeRid",
234
+ objectTypeRid
235
+ },
236
+ versionReference: {
237
+ type: "ontologyVersion",
238
+ ontologyVersion: await this.ontologyVersion("")
239
+ }
240
+ }],
241
+ linkTypes: [],
242
+ sharedPropertyTypes: [],
243
+ interfaceTypes: [],
244
+ typeGroups: [],
245
+ loadRedacted: false,
246
+ includeObjectTypeCount: void 0,
247
+ includeObjectTypesWithoutSearchableDatasources: true,
248
+ includeEntityMetadata: void 0,
249
+ actionTypes: [],
250
+ includeTypeGroupEntitiesCount: void 0,
251
+ entityMetadata: void 0
252
+ };
253
+ const entities = await client_unstable.bulkLoadOntologyEntities(this.#ctx, void 0, body);
254
+ !entities.objectTypes[0]?.objectType ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, "object type should be loaded") : invariant__default.default(false) : void 0;
255
+ return entities.objectTypes[0].objectType;
256
+ });
257
+ ontologyVersion = strongMemoAsync(async (_) => getOntologyVersionForRid(this.#ctx, await this.#client.ontologyRid));
258
+ };
259
+ var metadataCacheClient = weakMemoAsync((client) => Promise.resolve(new MetadataClient(client)));
260
+ function createObjectPropertyMapping(conjureOT) {
261
+ !(conjureOT.primaryKeys.length === 1) ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, `only one primary key supported, got ${conjureOT.primaryKeys.length}`) : invariant__default.default(false) : void 0;
262
+ const pkRid = conjureOT.primaryKeys[0];
263
+ const pkProperty = Object.values(conjureOT.propertyTypes).find((a) => a.rid === pkRid);
264
+ if (!pkProperty) {
265
+ throw new Error(`Could not find PK property by rid: ${pkRid}`);
266
+ }
267
+ const propertyIdToApiNameMapping = Object.fromEntries(Object.values(conjureOT.propertyTypes).map((property) => {
268
+ return [property.id, property.apiName];
269
+ }));
270
+ const propertyApiNameToIdMapping = Object.fromEntries(Object.values(conjureOT.propertyTypes).map((property) => {
271
+ return [property.apiName, property.id];
272
+ }));
273
+ return {
274
+ apiName: conjureOT.apiName,
275
+ id: conjureOT.id,
276
+ propertyIdToApiNameMapping,
277
+ propertyApiNameToIdMapping,
278
+ pk: {
279
+ rid: pkRid,
280
+ apiName: pkProperty.apiName,
281
+ type: pkProperty.type
282
+ }
283
+ };
284
+ }
285
+
286
+ // src/__unstable/createBulkLinksAsyncIterFactory.ts
287
+ function createBulkLinksAsyncIterFactory(ctx) {
288
+ return async function* (objs, linkTypes) {
289
+ if (objs.length === 0) {
290
+ return;
291
+ }
292
+ ctx.logger?.debug("Preparing to fetch bulk links");
293
+ !objs.every((a) => a.$objectType === objs[0].$objectType) ? process.env.NODE_ENV !== "production" ? invariant__default.default(false) : invariant__default.default(false) : void 0;
294
+ const mcc = await metadataCacheClient(ctx);
295
+ const helper = await mcc.forObjectByApiName(objs[0].$objectType);
296
+ const [objectTypeRid, propertyMapping, fullLinkMapping] = await Promise.all([helper.getRid(), helper.getPropertyMapping(), helper.getLinkMapping()]);
297
+ const linkMapping = Object.fromEntries(Object.entries(fullLinkMapping).filter(([apiName]) => linkTypes.includes(apiName)));
298
+ for (const linkType of linkTypes) {
299
+ if (linkMapping[linkType] == null) {
300
+ throw "Unable to find link type: " + linkType;
301
+ }
302
+ }
303
+ const req = {
304
+ objectSetContext: {
305
+ forkRid: void 0,
306
+ objectSetFilterContext: {
307
+ parameterOverrides: {}
308
+ },
309
+ ontologyBranchRid: void 0,
310
+ owningRid: void 0,
311
+ reportUsage: void 0,
312
+ workstateRid: void 0
313
+ },
314
+ responseOptions: {
315
+ includeObjectSetEntities: true,
316
+ includeUsageCost: false
317
+ },
318
+ pageSize: 1e3,
319
+ pageToken: void 0,
320
+ linksRequests: [{
321
+ directedLinkTypes: Object.values(linkMapping).map(({
322
+ directedLinkTypeRid
323
+ }) => directedLinkTypeRid),
324
+ objects: conjureUnionType("objects", objs.map((o) => conjureUnionType("objectLocatorV2", {
325
+ objectTypeRid,
326
+ objectPrimaryKey: {
327
+ [propertyMapping.pk.rid]: conjureUnionType(propertyMapping.pk.type.type, o.$primaryKey)
328
+ }
329
+ })))
330
+ }]
331
+ };
332
+ const bulkLinksIter = pageRequestAsAsyncIter(client_unstable.getBulkLinksPage.bind(void 0, makeConjureContext(ctx, "object-set-service/api")), getResults, (prevReq, prevResult) => applyPageToken({
333
+ ...prevReq,
334
+ pageToken: prevResult.pageToken
335
+ }, {
336
+ pageToken: prevResult.pageToken
337
+ }), req);
338
+ for await (const item of bulkLinksIter) {
339
+ const {
340
+ objectIdentifier
341
+ } = item;
342
+ const obj = findObject(objectIdentifier, objs);
343
+ for (const link of item.links) {
344
+ const ref = link.link[link.linkSide === "SOURCE" ? "objectSideB" : "objectSideA"];
345
+ const pk = getPrimaryKeyOrThrow(ref);
346
+ const otherObjectApiName = await (await mcc.forObjectByRid(pk.objectTypeRid)).getApiName();
347
+ const mappedLink = Object.values(linkMapping).find((a) => a.directedLinkTypeRid.linkTypeRid === link.link.linkTypeRid && a.directedLinkTypeRid.linkSide === link.linkSide);
348
+ if (!mappedLink) throw new Error("Could not find link type");
349
+ yield {
350
+ object: obj,
351
+ linkApiName: mappedLink.apiName,
352
+ otherObjectApiName,
353
+ otherObjectPk: pk.pkValue
354
+ };
355
+ }
356
+ }
357
+ };
358
+ }
359
+ function findObject(objectIdentifier, objs) {
360
+ const {
361
+ pkValue
362
+ } = getPrimaryKeyOrThrow(objectIdentifier);
363
+ const obj = objs.find((o) => o.$primaryKey === pkValue);
364
+ if (obj == null) {
365
+ throw new Error(`Needed to find object with pk ${pkValue}} and could not`);
366
+ }
367
+ return obj;
368
+ }
369
+ function getPrimaryKeyOrThrow(ref) {
370
+ if ("type" in ref && ref.type !== "objectLocatorV2") {
371
+ throw new Error("We do not support looking up object by rid");
372
+ }
373
+ const pks = Object.entries(ref.objectLocatorV2.objectPrimaryKey);
374
+ if (pks.length !== 1) {
375
+ throw new Error("Unable to support this request due to multiple pks");
376
+ }
377
+ return {
378
+ objectTypeRid: ref.objectLocatorV2.objectTypeRid,
379
+ pkValue: pks[0][1][pks[0][1].type]
380
+ };
381
+ }
382
+
383
+ // src/object/mediaUpload.ts
384
+ function isMediaReference(o) {
385
+ return typeof o === `object` && typeof o.mimeType === "string" && "reference" in o && typeof o.reference === "object" && o.reference.type === "mediaSetViewItem" && "mediaSetViewItem" in o.reference && typeof o.reference.mediaSetViewItem === "object" && typeof o.reference.mediaSetViewItem.mediaSetRid === "string" && typeof o.reference.mediaSetViewItem.mediaSetViewRid === "string" && typeof o.reference.mediaSetViewItem.mediaItemRid === "string";
386
+ }
387
+ function isMediaUpload(o) {
388
+ return typeof o === "object" && "path" in o && typeof o.path === "string" && "data" in o && typeof o.data === "object" && o.data instanceof Blob;
389
+ }
390
+
391
+ // src/util/interfaceUtils.ts
392
+ function isInterfaceActionParam(o) {
393
+ return o != null && typeof o === "object" && "$objectType" in o && "$primaryKey" in o;
394
+ }
395
+
396
+ // src/util/isObjectSpecifiersObject.ts
397
+ function isObjectSpecifiersObject(o) {
398
+ return o && typeof o === "object" && typeof o.$apiName === "string" && o.$primaryKey != null;
399
+ }
400
+
401
+ // src/util/isOntologyObjectV2.ts
402
+ function isOntologyObjectV2(o) {
403
+ return o && typeof o === "object" && typeof o.__apiName === "string" && o.__primaryKey != null;
404
+ }
405
+
406
+ // src/util/isPoint.ts
407
+ function isPoint(o) {
408
+ return o && typeof o === "object" && "type" in o && o.type === "Point" && "coordinates" in o && o.coordinates.length === 2;
409
+ }
410
+
411
+ // src/util/toDataValue.ts
412
+ async function toDataValue(value, client, actionMetadata) {
413
+ if (value == null) {
414
+ return value;
415
+ }
416
+ if (Array.isArray(value) || value instanceof Set) {
417
+ const values = Array.from(value);
418
+ if (values.some((dataValue) => isAttachmentUpload(dataValue) || isAttachmentFile(dataValue))) {
419
+ const converted = [];
420
+ for (const value2 of values) {
421
+ converted.push(await toDataValue(value2, client, actionMetadata));
422
+ }
423
+ return converted;
424
+ }
425
+ const promiseArray = Array.from(value, async (innerValue) => await toDataValue(innerValue, client, actionMetadata));
426
+ return Promise.all(promiseArray);
427
+ }
428
+ if (isAttachmentUpload(value)) {
429
+ const attachment = await chunkHTPVXLYY_cjs.Attachment_exports.upload(client, value.data, {
430
+ filename: value.name
431
+ });
432
+ return await toDataValue(attachment.rid, client, actionMetadata);
433
+ }
434
+ if (isAttachmentFile(value)) {
435
+ const attachment = await chunkHTPVXLYY_cjs.Attachment_exports.upload(client, value, {
436
+ filename: value.name
437
+ });
438
+ return await toDataValue(attachment.rid, client, actionMetadata);
439
+ }
440
+ if (isMediaUpload(value)) {
441
+ const mediaRef = await chunkHTPVXLYY_cjs.MediaReferenceProperty_exports.uploadMedia(client, await client.ontologyRid, actionMetadata.apiName, value.data, {
442
+ mediaItemPath: value.path,
443
+ preview: true
444
+ });
445
+ return await toDataValue(mediaRef, client, actionMetadata);
446
+ }
447
+ if (isOntologyObjectV2(value)) {
448
+ return await toDataValue(value.__primaryKey, client, actionMetadata);
449
+ }
450
+ if (isObjectSpecifiersObject(value)) {
451
+ return await toDataValue(value.$primaryKey, client, actionMetadata);
452
+ }
453
+ if (isPoint(value)) {
454
+ return await toDataValue(`${value.coordinates[1]},${value.coordinates[0]}`, client, actionMetadata);
455
+ }
456
+ if (chunkHTPVXLYY_cjs.isWireObjectSet(value)) {
457
+ return value;
458
+ }
459
+ if (chunkHTPVXLYY_cjs.isObjectSet(value)) {
460
+ return chunkHTPVXLYY_cjs.getWireObjectSet(value);
461
+ }
462
+ if (isMediaReference(value)) {
463
+ return value;
464
+ }
465
+ if (isInterfaceActionParam(value)) {
466
+ return {
467
+ objectTypeApiName: value.$objectType,
468
+ primaryKeyValue: value.$primaryKey
469
+ };
470
+ }
471
+ if (typeof value === "object") {
472
+ return Object.entries(value).reduce(async (promisedAcc, [key, structValue]) => {
473
+ const acc = await promisedAcc;
474
+ acc[key] = await toDataValue(structValue, client, actionMetadata);
475
+ return acc;
476
+ }, Promise.resolve({}));
477
+ }
478
+ return value;
479
+ }
480
+
481
+ // src/actions/applyAction.ts
482
+ async function applyAction(client, action, parameters, options = {}) {
483
+ const clientWithHeaders = chunkHTPVXLYY_cjs.addUserAgentAndRequestContextHeaders(chunkHTPVXLYY_cjs.augmentRequestContext(client, (_) => ({
484
+ finalMethodCall: "applyAction"
485
+ })), action);
486
+ if (Array.isArray(parameters)) {
487
+ const response = await chunkHTPVXLYY_cjs.Action_exports.applyBatch(clientWithHeaders, await client.ontologyRid, action.apiName, {
488
+ requests: parameters ? await remapBatchActionParams(parameters, client, await client.ontologyProvider.getActionDefinition(action.apiName)) : [],
489
+ options: {
490
+ returnEdits: options?.$returnEdits ? "ALL" : "NONE"
491
+ }
492
+ });
493
+ const edits = response.edits;
494
+ return options?.$returnEdits ? edits?.type === "edits" ? remapActionResponse(response) : edits : void 0;
495
+ } else {
496
+ const response = await chunkHTPVXLYY_cjs.Action_exports.apply(clientWithHeaders, await client.ontologyRid, action.apiName, {
497
+ parameters: await remapActionParams(parameters, client, await client.ontologyProvider.getActionDefinition(action.apiName)),
498
+ options: {
499
+ mode: options?.$validateOnly ? "VALIDATE_ONLY" : "VALIDATE_AND_EXECUTE",
500
+ returnEdits: options?.$returnEdits ? "ALL_V2_WITH_DELETIONS" : "NONE"
501
+ }
502
+ });
503
+ if (options?.$validateOnly) {
504
+ return response.validation;
505
+ }
506
+ if (response.validation && response.validation?.result === "INVALID") {
507
+ const validation = response.validation;
508
+ throw new ActionValidationError(validation);
509
+ }
510
+ const edits = response.edits;
511
+ return options?.$returnEdits ? edits?.type === "edits" ? remapActionResponse(response) : edits : void 0;
512
+ }
513
+ }
514
+ async function remapActionParams(params, client, actionMetadata) {
515
+ if (params == null) {
516
+ return {};
517
+ }
518
+ const parameterMap = {};
519
+ for (const [key, value] of Object.entries(params)) {
520
+ parameterMap[key] = await toDataValue(value, client, actionMetadata);
521
+ }
522
+ return parameterMap;
523
+ }
524
+ async function remapBatchActionParams(params, client, actionMetadata) {
525
+ const remappedParams = await Promise.all(params.map(async (param) => {
526
+ return {
527
+ parameters: await remapActionParams(param, client, actionMetadata)
528
+ };
529
+ }));
530
+ return remappedParams;
531
+ }
532
+ function remapActionResponse(response) {
533
+ const editResponses = response?.edits;
534
+ if (editResponses?.type === "edits") {
535
+ const remappedActionResponse = {
536
+ type: editResponses.type,
537
+ deletedLinksCount: editResponses.deletedLinksCount,
538
+ deletedObjectsCount: editResponses.deletedObjectsCount,
539
+ addedLinks: [],
540
+ deletedLinks: [],
541
+ addedObjects: [],
542
+ deletedObjects: [],
543
+ modifiedObjects: [],
544
+ editedObjectTypes: []
545
+ };
546
+ const editedObjectTypesSet = /* @__PURE__ */ new Set();
547
+ for (const edit of editResponses.edits) {
548
+ if (edit.type === "addLink" || edit.type === "deleteLink") {
549
+ const osdkEdit = {
550
+ linkTypeApiNameAtoB: edit.linkTypeApiNameAtoB,
551
+ linkTypeApiNameBtoA: edit.linkTypeApiNameBtoA,
552
+ aSideObject: edit.aSideObject,
553
+ bSideObject: edit.bSideObject
554
+ };
555
+ edit.type === "addLink" ? remappedActionResponse.addedLinks.push(osdkEdit) : remappedActionResponse.deletedLinks?.push(osdkEdit);
556
+ editedObjectTypesSet.add(edit.aSideObject.objectType);
557
+ editedObjectTypesSet.add(edit.bSideObject.objectType);
558
+ } else if (edit.type === "addObject" || edit.type === "deleteObject" || edit.type === "modifyObject") {
559
+ const osdkEdit = {
560
+ objectType: edit.objectType,
561
+ primaryKey: edit.primaryKey
562
+ };
563
+ if (edit.type === "addObject") {
564
+ remappedActionResponse.addedObjects.push(osdkEdit);
565
+ } else if (edit.type === "deleteObject") {
566
+ remappedActionResponse.deletedObjects?.push(osdkEdit);
567
+ } else if (edit.type === "modifyObject") {
568
+ remappedActionResponse.modifiedObjects.push(osdkEdit);
569
+ }
570
+ editedObjectTypesSet.add(edit.objectType);
571
+ } else {
572
+ if (process.env.NODE_ENV !== "production") {
573
+ console.warn(`Unexpected edit type: ${JSON.stringify(edit)}`);
574
+ }
575
+ }
576
+ }
577
+ remappedActionResponse.editedObjectTypes = [...editedObjectTypesSet];
578
+ return remappedActionResponse;
579
+ }
580
+ }
581
+
582
+ // src/util/streamutils.ts
583
+ var START_TOKEN = new Uint8Array([123, 34, 100, 97, 116, 97, 34, 58, 91]);
584
+ var OBJECT_OPEN_CHAR_CODE = 123;
585
+ var OBJECT_CLOSE_CHAR_CODE = 125;
586
+ async function* parseStreamedResponse(asyncIterable) {
587
+ const utf8decoder = new TextDecoder("utf-8");
588
+ let parsedStart = false;
589
+ let prevChunks = [];
590
+ let openBracesCount = 0;
591
+ for await (let chunk of asyncIterable) {
592
+ let i = 0;
593
+ if (!parsedStart) {
594
+ parsedStart = true;
595
+ if (startsWith(chunk, START_TOKEN)) {
596
+ i = START_TOKEN.length;
597
+ }
598
+ }
599
+ for (; i < chunk.length; i++) {
600
+ while (openBracesCount === 0 && chunk[i] !== OBJECT_OPEN_CHAR_CODE && i < chunk.length) {
601
+ i++;
602
+ }
603
+ let j = i;
604
+ for (; j < chunk.length; j++) {
605
+ const c = chunk[j];
606
+ if (c === OBJECT_OPEN_CHAR_CODE) {
607
+ openBracesCount++;
608
+ } else if (c === OBJECT_CLOSE_CHAR_CODE) {
609
+ openBracesCount--;
610
+ if (0 === openBracesCount) {
611
+ yield combineAndParse(utf8decoder, prevChunks, chunk.subarray(i, j + 1));
612
+ prevChunks = [];
613
+ i = j;
614
+ break;
615
+ }
616
+ }
617
+ }
618
+ if (j === chunk.length) {
619
+ prevChunks.push(chunk.subarray(i));
620
+ break;
621
+ }
622
+ }
623
+ }
624
+ }
625
+ function startsWith(a, b) {
626
+ if (a.length < b.length) {
627
+ return false;
628
+ }
629
+ for (let i = 0; i < b.length; i++) {
630
+ if (a[i] !== b[i]) {
631
+ return false;
632
+ }
633
+ }
634
+ return true;
635
+ }
636
+ function combineAndParse(utf8decoder, prev, curr) {
637
+ let str = "";
638
+ for (const chunk of prev) {
639
+ str += utf8decoder.decode(chunk, {
640
+ stream: true
641
+ });
642
+ }
643
+ str += utf8decoder.decode(curr);
644
+ return JSON.parse(str);
645
+ }
646
+ async function* iterateReadableStream(readableStream) {
647
+ let res = await readableStream.read();
648
+ while (!res.done) {
649
+ yield res.value;
650
+ res = await readableStream.read();
651
+ }
652
+ }
653
+
654
+ // src/util/timeseriesUtils.ts
655
+ function getTimeRange(body) {
656
+ if ("$startTime" in body || "$endTime" in body) {
657
+ return {
658
+ type: "absolute",
659
+ startTime: body.$startTime,
660
+ endTime: body.$endTime
661
+ };
662
+ }
663
+ return body.$before ? {
664
+ type: "relative",
665
+ startTime: {
666
+ when: "BEFORE",
667
+ value: body.$before,
668
+ unit: api.TimeseriesDurationMapping[body.$unit]
669
+ }
670
+ } : {
671
+ type: "relative",
672
+ endTime: {
673
+ when: "AFTER",
674
+ value: body.$after,
675
+ unit: api.TimeseriesDurationMapping[body.$unit]
676
+ }
677
+ };
678
+ }
679
+ async function* asyncIterPointsHelper(iterator) {
680
+ const reader = iterator.body?.getReader();
681
+ for await (const point of parseStreamedResponse(iterateReadableStream(reader))) {
682
+ yield {
683
+ time: point.time,
684
+ value: point.value
685
+ };
686
+ }
687
+ }
688
+
689
+ // src/createGeotimeSeriesProperty.ts
690
+ var GeotimeSeriesPropertyImpl = class {
691
+ #triplet;
692
+ #client;
693
+ constructor(client, objectApiName, primaryKey, propertyName, initialValue) {
694
+ this.#client = client;
695
+ this.#triplet = [objectApiName, primaryKey, propertyName];
696
+ if (initialValue != null) {
697
+ this.lastFetchedValue = initialValue;
698
+ }
699
+ }
700
+ async getLatestValue() {
701
+ const latestPointPromise = chunkHTPVXLYY_cjs.TimeSeriesValueBankProperty_exports.getLatestValue(this.#client, await this.#client.ontologyRid, ...this.#triplet);
702
+ latestPointPromise.then(
703
+ (latestPoint) => this.lastFetchedValue = latestPoint,
704
+ // eslint-disable-next-line no-console
705
+ (err) => void console.error(err)
706
+ );
707
+ return latestPointPromise;
708
+ }
709
+ async getAllValues(query) {
710
+ const allPoints = [];
711
+ for await (const point of this.asyncIterValues(query)) {
712
+ allPoints.push(point);
713
+ }
714
+ return allPoints;
715
+ }
716
+ async *asyncIterValues(query) {
717
+ const streamPointsIterator = await chunkHTPVXLYY_cjs.TimeSeriesValueBankProperty_exports.streamValues(this.#client, await this.#client.ontologyRid, ...this.#triplet, query ? {
718
+ range: getTimeRange(query)
719
+ } : {});
720
+ for await (const timeseriesPoint of asyncIterPointsHelper(streamPointsIterator)) {
721
+ yield timeseriesPoint;
722
+ }
723
+ }
724
+ };
725
+
726
+ // src/createMediaReferenceProperty.ts
727
+ var MediaReferencePropertyImpl = class {
728
+ #mediaReference;
729
+ #triplet;
730
+ #client;
731
+ constructor(args) {
732
+ const {
733
+ client,
734
+ objectApiName,
735
+ primaryKey,
736
+ propertyName,
737
+ mediaReference
738
+ } = args;
739
+ this.#client = client;
740
+ this.#triplet = [objectApiName, primaryKey, propertyName];
741
+ this.#mediaReference = mediaReference;
742
+ }
743
+ async fetchContents() {
744
+ return chunkHTPVXLYY_cjs.MediaReferenceProperty_exports.getMediaContent(this.#client, await this.#client.ontologyRid, ...this.#triplet, {
745
+ preview: true
746
+ // TODO: Can turn this back off when backend is no longer in beta.
747
+ });
748
+ }
749
+ async fetchMetadata() {
750
+ const r = await chunkHTPVXLYY_cjs.MediaReferenceProperty_exports.getMediaMetadata(this.#client, await this.#client.ontologyRid, ...this.#triplet, {
751
+ preview: true
752
+ // TODO: Can turn this back off when backend is no longer in beta.
753
+ });
754
+ return {
755
+ path: r.path,
756
+ sizeBytes: Number(r.sizeBytes),
757
+ mediaType: r.mediaType
758
+ };
759
+ }
760
+ getMediaReference() {
761
+ return this.#mediaReference;
762
+ }
763
+ };
764
+
765
+ // src/createTimeseriesProperty.ts
766
+ var TimeSeriesPropertyImpl = class {
767
+ #triplet;
768
+ #client;
769
+ constructor(client, objectApiName, primaryKey, propertyName) {
770
+ this.#client = client;
771
+ this.#triplet = [objectApiName, primaryKey, propertyName];
772
+ }
773
+ async getFirstPoint() {
774
+ return chunkHTPVXLYY_cjs.TimeSeriesPropertyV2_exports.getFirstPoint(this.#client, await this.#client.ontologyRid, ...this.#triplet);
775
+ }
776
+ async getLastPoint() {
777
+ return chunkHTPVXLYY_cjs.TimeSeriesPropertyV2_exports.getLastPoint(this.#client, await this.#client.ontologyRid, ...this.#triplet);
778
+ }
779
+ async getAllPoints(query) {
780
+ const allPoints = [];
781
+ for await (const point of this.asyncIterPoints(query)) {
782
+ allPoints.push(point);
783
+ }
784
+ return allPoints;
785
+ }
786
+ async *asyncIterPoints(query) {
787
+ const streamPointsIterator = await chunkHTPVXLYY_cjs.TimeSeriesPropertyV2_exports.streamPoints(this.#client, await this.#client.ontologyRid, ...this.#triplet, query ? {
788
+ range: getTimeRange(query)
789
+ } : {});
790
+ for await (const timeseriesPoint of asyncIterPointsHelper(streamPointsIterator)) {
791
+ yield timeseriesPoint;
792
+ }
793
+ }
794
+ };
795
+
796
+ // src/util/objectSpecifierUtils.ts
797
+ function createObjectSpecifierFromPrimaryKey(objectDef, primaryKey) {
798
+ return `${objectDef.apiName}:${primaryKey}`;
799
+ }
800
+ function extractPrimaryKeyFromObjectSpecifier(ObjectSpecifier) {
801
+ return ObjectSpecifier.split(":")[1];
802
+ }
803
+
804
+ // src/ontology/OntologyProvider.ts
805
+ var InterfaceDefinitions = Symbol("InterfaceDefinitions" );
806
+
807
+ // src/object/convertWireToOsdkObjects/InternalSymbols.ts
808
+ var UnderlyingOsdkObject = Symbol("Underlying Object" );
809
+ var ObjectDefRef = Symbol("ObjectDefinition" );
810
+ var InterfaceDefRef = Symbol("InterfaceDefinition" );
811
+ var ClientRef = Symbol("ClientRef" );
812
+
813
+ // src/object/convertWireToOsdkObjects/createOsdkInterface.ts
814
+ function createOsdkInterface(underlying, interfaceDef) {
815
+ const [objApiNamespace] = chunkHTPVXLYY_cjs.extractNamespace(interfaceDef.apiName);
816
+ return Object.freeze(Object.defineProperties({}, {
817
+ // first to minimize hidden classes
818
+ [UnderlyingOsdkObject]: {
819
+ value: underlying
820
+ },
821
+ "$apiName": {
822
+ value: interfaceDef.apiName,
823
+ enumerable: true
824
+ },
825
+ "$as": {
826
+ value: underlying.$as,
827
+ enumerable: false
828
+ },
829
+ "$objectType": {
830
+ value: underlying.$objectType,
831
+ enumerable: "$objectType" in underlying
832
+ },
833
+ "$primaryKey": {
834
+ value: underlying.$primaryKey,
835
+ enumerable: "$primaryKey" in underlying
836
+ },
837
+ "$objectSpecifier": {
838
+ value: underlying.$objectSpecifier,
839
+ enumerable: "$objectSpecifier" in underlying
840
+ },
841
+ "$title": {
842
+ value: underlying.$title,
843
+ enumerable: "$title" in underlying
844
+ },
845
+ "$rid": {
846
+ value: underlying.$rid,
847
+ enumerable: "$rid" in underlying
848
+ },
849
+ "$clone": {
850
+ value: clone,
851
+ enumerable: false
852
+ },
853
+ [InterfaceDefRef]: {
854
+ value: interfaceDef
855
+ },
856
+ ...Object.fromEntries(Object.keys(interfaceDef.properties).map((p) => {
857
+ const objDef = underlying[ObjectDefRef];
858
+ const [apiNamespace, apiName] = chunkHTPVXLYY_cjs.extractNamespace(p);
859
+ const targetPropName = objDef.interfaceMap[interfaceDef.apiName][p];
860
+ return [apiNamespace === objApiNamespace ? apiName : p, {
861
+ enumerable: targetPropName in underlying,
862
+ value: underlying[targetPropName]
863
+ }];
864
+ }))
865
+ }));
866
+ function clone(update) {
867
+ if (update == null) {
868
+ return underlying.$clone().$as(interfaceDef);
869
+ }
870
+ for (const key of Object.keys(update)) {
871
+ if (!(key in interfaceDef.properties)) {
872
+ throw new Error(`Invalid property ${key} for interface ${interfaceDef.apiName}`);
873
+ }
874
+ }
875
+ const remappedProps = Object.fromEntries(Object.keys(update).map((p) => mapProperty(p, update[p])).filter((x) => x != null));
876
+ return underlying.$clone(remappedProps).$as(interfaceDef);
877
+ }
878
+ function mapProperty(propertyName, value) {
879
+ const objDef = underlying[ObjectDefRef];
880
+ const targetPropName = objDef.interfaceMap[interfaceDef.apiName][propertyName];
881
+ if (targetPropName == null) {
882
+ throw new Error(`Cannot clone interface with ${propertyName} as property is not implemented by the underlying object type ${objDef.apiName}`);
883
+ }
884
+ return [targetPropName, value];
885
+ }
886
+ }
887
+
888
+ // src/object/convertWireToOsdkObjects/getDollarAs.ts
889
+ var get$as = createSimpleCache(/* @__PURE__ */ new WeakMap(), $asFactory).get;
890
+ var osdkObjectToInterfaceView = createSimpleCache(/* @__PURE__ */ new WeakMap(), () => /* @__PURE__ */ new Map());
891
+ function $asFactory(objDef) {
892
+ return function $as(targetMinDef) {
893
+ let targetInterfaceApiName;
894
+ if (typeof targetMinDef === "string") {
895
+ if (targetMinDef === objDef.apiName) {
896
+ return this[UnderlyingOsdkObject];
897
+ }
898
+ if (objDef.interfaceMap?.[targetMinDef] == null) {
899
+ throw new Error(`Object does not implement interface '${targetMinDef}'.`);
900
+ }
901
+ targetInterfaceApiName = targetMinDef;
902
+ } else if (targetMinDef.apiName === objDef.apiName) {
903
+ return this[UnderlyingOsdkObject];
904
+ } else {
905
+ if (targetMinDef.type === "object") {
906
+ throw new Error(`'${targetMinDef.apiName}' is not an interface nor is it '${objDef.apiName}', which is the object type.`);
907
+ }
908
+ targetInterfaceApiName = targetMinDef.apiName;
909
+ }
910
+ const def = objDef[InterfaceDefinitions][targetInterfaceApiName];
911
+ if (!def) {
912
+ throw new Error(`Object does not implement interface '${targetInterfaceApiName}'.`);
913
+ }
914
+ const underlying = this[UnderlyingOsdkObject];
915
+ const existing = osdkObjectToInterfaceView.get(underlying).get(targetInterfaceApiName)?.deref();
916
+ if (existing) return existing;
917
+ const osdkInterface = createOsdkInterface(underlying, def.def);
918
+ osdkObjectToInterfaceView.get(underlying).set(targetInterfaceApiName, new WeakRef(osdkInterface));
919
+ return osdkInterface;
920
+ };
921
+ }
922
+
923
+ // src/object/convertWireToOsdkObjects/getDollarLink.ts
924
+ function get$link(holder) {
925
+ const client = holder[ClientRef];
926
+ const objDef = holder[ObjectDefRef];
927
+ const rawObj = holder[UnderlyingOsdkObject];
928
+ return Object.freeze(Object.fromEntries(Object.keys(objDef.links).map((linkName) => {
929
+ const linkDef = objDef.links[linkName];
930
+ const objectSet = client.objectSetFactory(objDef, client).where({
931
+ [objDef.primaryKeyApiName]: rawObj.$primaryKey
932
+ }).pivotTo(linkName);
933
+ const value = !linkDef.multiplicity ? {
934
+ fetchOne: (options) => chunkHTPVXLYY_cjs.fetchSingle(client, objDef, options ?? {}, chunkHTPVXLYY_cjs.getWireObjectSet(objectSet)),
935
+ fetchOneWithErrors: (options) => chunkHTPVXLYY_cjs.fetchSingleWithErrors(client, objDef, options ?? {}, chunkHTPVXLYY_cjs.getWireObjectSet(objectSet))
936
+ } : objectSet;
937
+ return [linkName, value];
938
+ })));
939
+ }
940
+
941
+ // src/object/convertWireToOsdkObjects/createOsdkObject.ts
942
+ var specialPropertyTypes = /* @__PURE__ */ new Set(["attachment", "geotimeSeriesReference", "mediaReference", "numericTimeseries", "stringTimeseries", "sensorTimeseries"]);
943
+ var basePropDefs = {
944
+ "$as": {
945
+ get: function() {
946
+ return get$as(this[ObjectDefRef]);
947
+ }
948
+ },
949
+ "$link": {
950
+ get: function() {
951
+ return get$link(this);
952
+ }
953
+ },
954
+ "$clone": {
955
+ value: function(update) {
956
+ const rawObj = this[UnderlyingOsdkObject];
957
+ const def = this[ObjectDefRef];
958
+ if (update == null) {
959
+ return createOsdkObject(this[ClientRef], def, {
960
+ ...rawObj
961
+ });
962
+ }
963
+ if (def.primaryKeyApiName in update && rawObj[def.primaryKeyApiName] !== update[def.primaryKeyApiName]) {
964
+ throw new Error(`Cannot update ${def.apiName} object with differing primary key values `);
965
+ }
966
+ if (def.titleProperty in update && !("$title" in update)) {
967
+ update.$title = update[def.titleProperty];
968
+ }
969
+ const newObject = {
970
+ ...this[UnderlyingOsdkObject],
971
+ ...update
972
+ };
973
+ return createOsdkObject(this[ClientRef], this[ObjectDefRef], newObject);
974
+ }
975
+ },
976
+ "$objectSpecifier": {
977
+ get: function() {
978
+ const rawObj = this[UnderlyingOsdkObject];
979
+ return createObjectSpecifierFromPrimaryKey(this[ObjectDefRef], rawObj.$primaryKey);
980
+ },
981
+ enumerable: true
982
+ }
983
+ };
984
+ function createOsdkObject(client, objectDef, simpleOsdkProperties, derivedPropertyTypeByName = {}) {
985
+ const rawObj = simpleOsdkProperties;
986
+ Object.defineProperties(rawObj, {
987
+ [UnderlyingOsdkObject]: {
988
+ enumerable: false,
989
+ value: simpleOsdkProperties
990
+ },
991
+ [ObjectDefRef]: {
992
+ value: objectDef,
993
+ enumerable: false
994
+ },
995
+ [ClientRef]: {
996
+ value: client,
997
+ enumerable: false
998
+ },
999
+ ...basePropDefs
1000
+ });
1001
+ for (const propKey of Object.keys(rawObj)) {
1002
+ if (propKey in objectDef.properties && typeof objectDef.properties[propKey].type === "string" && specialPropertyTypes.has(objectDef.properties[propKey].type)) {
1003
+ rawObj[propKey] = createSpecialProperty(client, objectDef, rawObj, propKey);
1004
+ } else if (propKey in derivedPropertyTypeByName) {
1005
+ rawObj[propKey] = modifyRdpProperties(client, derivedPropertyTypeByName, rawObj[propKey], propKey);
1006
+ }
1007
+ }
1008
+ return Object.freeze(rawObj);
1009
+ }
1010
+ function modifyRdpProperties(client, derivedPropertyTypeByName, rawValue, propKey) {
1011
+ if (derivedPropertyTypeByName[propKey].definition.type === "selection" && derivedPropertyTypeByName[propKey].definition.operation.type === "count") {
1012
+ const num = Number(rawValue);
1013
+ !Number.isSafeInteger(num) ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, "Count aggregation for derived property " + propKey + " returned a value larger than safe integer.") : invariant__default.default(false) : void 0;
1014
+ return num;
1015
+ } else if (derivedPropertyTypeByName[propKey].selectedOrCollectedPropertyType != null && typeof derivedPropertyTypeByName[propKey].selectedOrCollectedPropertyType.type === "string" && specialPropertyTypes.has(derivedPropertyTypeByName[propKey].selectedOrCollectedPropertyType.type)) {
1016
+ switch (derivedPropertyTypeByName[propKey].selectedOrCollectedPropertyType?.type) {
1017
+ case "attachment":
1018
+ if (Array.isArray(rawValue)) {
1019
+ return rawValue.map((a) => chunkHTPVXLYY_cjs.hydrateAttachmentFromRidInternal(client, a.rid));
1020
+ } else {
1021
+ return chunkHTPVXLYY_cjs.hydrateAttachmentFromRidInternal(client, rawValue.rid);
1022
+ }
1023
+ default:
1024
+ process.env.NODE_ENV !== "production" ? invariant__default.default(false, "Derived property aggregations for Timeseries and Media are not supported") : invariant__default.default(false) ;
1025
+ }
1026
+ }
1027
+ return rawValue;
1028
+ }
1029
+ function createSpecialProperty(client, objectDef, rawObject, p) {
1030
+ const rawValue = rawObject[p];
1031
+ const propDef = objectDef.properties[p];
1032
+ if (process.env.NODE_ENV !== "production") {
1033
+ !(propDef != null && typeof propDef.type === "string" && specialPropertyTypes.has(propDef.type)) ? process.env.NODE_ENV !== "production" ? invariant__default.default(false) : invariant__default.default(false) : void 0;
1034
+ }
1035
+ if (propDef.type === "attachment") {
1036
+ if (Array.isArray(rawValue)) {
1037
+ return rawValue.map((a) => chunkHTPVXLYY_cjs.hydrateAttachmentFromRidInternal(client, a.rid));
1038
+ }
1039
+ return chunkHTPVXLYY_cjs.hydrateAttachmentFromRidInternal(client, rawValue.rid);
1040
+ }
1041
+ if (propDef.type === "numericTimeseries" || propDef.type === "stringTimeseries" || propDef.type === "sensorTimeseries") {
1042
+ return new TimeSeriesPropertyImpl(client, objectDef.apiName, rawObject[objectDef.primaryKeyApiName], p);
1043
+ }
1044
+ if (propDef.type === "geotimeSeriesReference") {
1045
+ return new GeotimeSeriesPropertyImpl(client, objectDef.apiName, rawObject[objectDef.primaryKeyApiName], p, rawValue.type === "geotimeSeriesValue" ? {
1046
+ time: rawValue.timestamp,
1047
+ value: {
1048
+ type: "Point",
1049
+ coordinates: rawValue.position
1050
+ }
1051
+ } : void 0);
1052
+ }
1053
+ if (propDef.type === "mediaReference") {
1054
+ return new MediaReferencePropertyImpl({
1055
+ client,
1056
+ objectApiName: objectDef.apiName,
1057
+ primaryKey: rawObject[objectDef.primaryKeyApiName],
1058
+ propertyName: p,
1059
+ mediaReference: rawValue
1060
+ });
1061
+ }
1062
+ }
1063
+
1064
+ // src/object/convertWireToOsdkObjects.ts
1065
+ async function convertWireToOsdkObjects(client, objects, interfaceApiName, forceRemoveRid = false, derivedPropertyTypesByName, selectedProps, strictNonNull = false) {
1066
+ fixObjectPropertiesInPlace(objects, forceRemoveRid);
1067
+ const ifaceDef = interfaceApiName ? await client.ontologyProvider.getInterfaceDefinition(interfaceApiName) : void 0;
1068
+ const ifaceSelected = ifaceDef ? selectedProps ?? Object.keys(ifaceDef.properties) : void 0;
1069
+ const ret = [];
1070
+ for (const rawObj of objects) {
1071
+ const objectDef = await client.ontologyProvider.getObjectDefinition(rawObj.$apiName);
1072
+ !objectDef ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, `Missing definition for '${rawObj.$apiName}'`) : invariant__default.default(false) : void 0;
1073
+ let objProps;
1074
+ let conforming = true;
1075
+ if (ifaceDef && ifaceSelected) {
1076
+ invariantInterfacesAsViews(objectDef, ifaceDef.apiName, client);
1077
+ conforming &&= isConforming(client, ifaceDef, rawObj, ifaceSelected);
1078
+ reframeAsObjectInPlace(objectDef, ifaceDef.apiName, rawObj);
1079
+ objProps = convertInterfacePropNamesToObjectPropNames(objectDef, ifaceDef.apiName, ifaceSelected);
1080
+ } else {
1081
+ objProps = selectedProps ?? Object.keys(objectDef.properties);
1082
+ }
1083
+ conforming &&= isConforming(client, objectDef, rawObj, objProps);
1084
+ if (strictNonNull === "throw" && !conforming) {
1085
+ throw new Error("Unable to safely convert objects as some non nullable properties are null");
1086
+ } else if (strictNonNull === "drop" && !conforming) {
1087
+ continue;
1088
+ }
1089
+ let osdkObject = createOsdkObject(client, objectDef, rawObj, derivedPropertyTypesByName);
1090
+ if (interfaceApiName) osdkObject = osdkObject.$as(interfaceApiName);
1091
+ ret.push(osdkObject);
1092
+ }
1093
+ return ret;
1094
+ }
1095
+ async function convertWireToOsdkObjects2(client, objects, interfaceApiName, derivedPropertyTypeByName, forceRemoveRid = false, selectedProps, strictNonNull = false, interfaceToObjectTypeMappings = {}) {
1096
+ fixObjectPropertiesInPlace(objects, forceRemoveRid);
1097
+ const ret = [];
1098
+ for (const rawObj of objects) {
1099
+ const objectDef = await client.ontologyProvider.getObjectDefinition(rawObj.$apiName);
1100
+ !objectDef ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, `Missing definition for '${rawObj.$apiName}'`) : invariant__default.default(false) : void 0;
1101
+ const interfaceToObjMapping = interfaceApiName ? interfaceToObjectTypeMappings[interfaceApiName][rawObj.$apiName] : void 0;
1102
+ const ifaceSelected = interfaceApiName && interfaceToObjMapping ? selectedProps ? Object.keys(interfaceToObjMapping).filter((val) => {
1103
+ selectedProps?.includes(interfaceToObjMapping[val]);
1104
+ }) : [...Object.values(interfaceToObjMapping), objectDef.primaryKeyApiName] : void 0;
1105
+ let objProps;
1106
+ let conforming = true;
1107
+ if (interfaceApiName && ifaceSelected) {
1108
+ invariantInterfacesAsViews(objectDef, interfaceApiName, client);
1109
+ objProps = ifaceSelected;
1110
+ } else {
1111
+ objProps = selectedProps ?? Object.keys(objectDef.properties);
1112
+ }
1113
+ conforming &&= isConforming(client, objectDef, rawObj, objProps);
1114
+ if (strictNonNull === "throw" && !conforming) {
1115
+ throw new Error("Unable to safely convert objects as some non nullable properties are null");
1116
+ } else if (strictNonNull === "drop" && !conforming) {
1117
+ continue;
1118
+ }
1119
+ let osdkObject = createOsdkObject(client, objectDef, rawObj, derivedPropertyTypeByName);
1120
+ if (interfaceApiName) osdkObject = osdkObject.$as(interfaceApiName);
1121
+ ret.push(osdkObject);
1122
+ }
1123
+ return ret;
1124
+ }
1125
+ function convertInterfacePropNamesToObjectPropNames(objectDef, interfaceApiName, ifacePropsToMap) {
1126
+ return ifacePropsToMap.map((ifaceProp) => objectDef.interfaceMap[interfaceApiName][ifaceProp]);
1127
+ }
1128
+ function reframeAsObjectInPlace(objectDef, interfaceApiName, rawObj) {
1129
+ const newProps = {};
1130
+ for (const [sptProp, regularProp] of Object.entries(objectDef.interfaceMap[interfaceApiName])) {
1131
+ if (sptProp in rawObj) {
1132
+ const value = rawObj[sptProp];
1133
+ delete rawObj[sptProp];
1134
+ if (value !== void 0) {
1135
+ newProps[regularProp] = value;
1136
+ }
1137
+ }
1138
+ }
1139
+ Object.assign(rawObj, newProps);
1140
+ if (!(objectDef.primaryKeyApiName in rawObj)) {
1141
+ rawObj[objectDef.primaryKeyApiName] = rawObj.$primaryKey;
1142
+ }
1143
+ }
1144
+ function isConforming(client, def, obj, propsToCheck) {
1145
+ for (const propName of propsToCheck) {
1146
+ if (propName in def.properties && def.properties[propName].nullable === false && obj[propName] == null) {
1147
+ if (process.env.NODE_ENV !== "production") {
1148
+ client.logger?.debug({
1149
+ obj: {
1150
+ $apiName: obj["$apiName"],
1151
+ $objectType: obj["$objectType"],
1152
+ $primaryKey: obj["$primaryKey"]
1153
+ }
1154
+ }, `Found object that does not conform to its definition. Expected ${def.apiName}'s ${propName} to not be null.`);
1155
+ }
1156
+ return false;
1157
+ }
1158
+ }
1159
+ return true;
1160
+ }
1161
+ function invariantInterfacesAsViews(objectDef, interfaceApiName, client) {
1162
+ if (objectDef.interfaceMap?.[interfaceApiName] == null) {
1163
+ const warning = "Interfaces are only supported 'as views' but your metadata object is missing the correct information. This suggests your interfaces have not been migrated to the newer version yet and you cannot use this version of the SDK.";
1164
+ if (client.logger) {
1165
+ client.logger.warn(warning);
1166
+ } else {
1167
+ console.error(`WARNING! ${warning}`);
1168
+ }
1169
+ throw new Error(warning);
1170
+ }
1171
+ }
1172
+ function fixObjectPropertiesInPlace(objs, forceRemoveRid) {
1173
+ for (const obj of objs) {
1174
+ if (forceRemoveRid) {
1175
+ delete obj.__rid;
1176
+ }
1177
+ if (obj.__rid) {
1178
+ obj.$rid = obj.__rid;
1179
+ delete obj.__rid;
1180
+ }
1181
+ obj.$apiName ??= obj.__apiName;
1182
+ obj.$objectType = obj.$apiName;
1183
+ obj.$primaryKey ??= obj.__primaryKey;
1184
+ obj.$title ??= obj.__title;
1185
+ delete obj.__apiName;
1186
+ delete obj.__primaryKey;
1187
+ delete obj.__title;
1188
+ }
1189
+ }
1190
+
1191
+ // src/object/Cache.ts
1192
+ function createClientCache(fn) {
1193
+ const cache = /* @__PURE__ */ new WeakMap();
1194
+ function get(client, key) {
1195
+ if (cache.get(client.clientCacheKey) == null) {
1196
+ cache.set(client.clientCacheKey, /* @__PURE__ */ new Map());
1197
+ }
1198
+ let r = cache.get(client.clientCacheKey).get(key);
1199
+ if (r === void 0 && fn !== void 0) {
1200
+ return set(client, key, fn(client, key));
1201
+ } else {
1202
+ return r;
1203
+ }
1204
+ }
1205
+ function set(client, key, value) {
1206
+ if (cache.get(client.clientCacheKey) == null) {
1207
+ cache.set(client.clientCacheKey, /* @__PURE__ */ new Map());
1208
+ }
1209
+ cache.get(client.clientCacheKey).set(key, value);
1210
+ return value;
1211
+ }
1212
+ function remove(client, key) {
1213
+ if (cache.get(client.clientCacheKey) == null) return false;
1214
+ return cache.get(client.clientCacheKey).delete(key);
1215
+ }
1216
+ return {
1217
+ get,
1218
+ set,
1219
+ remove
1220
+ };
1221
+ }
1222
+ function createAsyncClientCache(fn, createCacheLocal = createClientCache) {
1223
+ const cache = createCacheLocal();
1224
+ const inProgress = createCacheLocal();
1225
+ const ret = {
1226
+ getOrUndefined: function getOrUndefined(client, key) {
1227
+ return cache.get(client, key);
1228
+ },
1229
+ get: async function get(client, key) {
1230
+ return cache.get(client, key) ?? inProgress.get(client, key) ?? ret.set(client, key, fn(client, key));
1231
+ },
1232
+ set: async function set(client, k, v) {
1233
+ try {
1234
+ const r = await inProgress.set(client, k, v);
1235
+ cache.set(client, k, r);
1236
+ inProgress.remove(client, k);
1237
+ return r;
1238
+ } catch (e) {
1239
+ inProgress.remove(client, k);
1240
+ throw e;
1241
+ }
1242
+ }
1243
+ };
1244
+ return ret;
1245
+ }
1246
+ async function loadActionMetadata(client, actionType) {
1247
+ const r = await chunkHTPVXLYY_cjs.ActionTypeV2_exports.get(client, await client.ontologyRid, actionType);
1248
+ return generatorConverters.wireActionTypeV2ToSdkActionMetadata(r);
1249
+ }
1250
+ async function loadFullObjectMetadata(client, objectType) {
1251
+ const full = await chunkHTPVXLYY_cjs.ObjectTypeV2_exports.getFullMetadata(client, await client.ontologyRid, objectType, {
1252
+ preview: true
1253
+ });
1254
+ const ret = generatorConverters.wireObjectTypeFullMetadataToSdkObjectMetadata(full, true);
1255
+ return {
1256
+ ...ret
1257
+ };
1258
+ }
1259
+ async function loadInterfaceMetadata(client, objectType) {
1260
+ const r = await chunkHTPVXLYY_cjs.OntologyInterface_exports.get(client, await client.ontologyRid, objectType, {
1261
+ preview: true
1262
+ });
1263
+ return generatorConverters.__UNSTABLE_wireInterfaceTypeV2ToSdkObjectDefinition(r, true);
1264
+ }
1265
+ async function loadQueryMetadata(client, queryTypeApiNameAndVersion) {
1266
+ const [apiName, version] = queryTypeApiNameAndVersion.split(":");
1267
+ const r = await chunkHTPVXLYY_cjs.QueryType_exports.get(client, await client.ontologyRid, apiName, {
1268
+ version
1269
+ });
1270
+ return generatorConverters.wireQueryTypeV2ToSdkQueryMetadata(r);
1271
+ }
1272
+
1273
+ // src/ontology/StandardOntologyProvider.ts
1274
+ var createStandardOntologyProviderFactory = (client) => {
1275
+ return (client2) => {
1276
+ async function loadObject(client3, key) {
1277
+ const objectDef = await loadFullObjectMetadata(client3, key);
1278
+ const interfaceDefs = Object.fromEntries((await Promise.all(objectDef.implements?.map((i) => ret.getInterfaceDefinition(i)) ?? [])).map((i) => [i.apiName, {
1279
+ def: i,
1280
+ handler: void 0
1281
+ }]));
1282
+ const fullObjectDef = {
1283
+ ...objectDef,
1284
+ [InterfaceDefinitions]: interfaceDefs
1285
+ };
1286
+ return fullObjectDef;
1287
+ }
1288
+ async function loadInterface(client3, key) {
1289
+ return loadInterfaceMetadata(client3, key);
1290
+ }
1291
+ async function loadQuery(client3, key) {
1292
+ return loadQueryMetadata(client3, key);
1293
+ }
1294
+ async function loadAction(client3, key) {
1295
+ const r = await loadActionMetadata(client3, key);
1296
+ return r;
1297
+ }
1298
+ function makeGetter(fn) {
1299
+ const cache = createAsyncClientCache((client3, key) => fn(client3, key, false));
1300
+ return async (apiName) => {
1301
+ return await cache.get(client2, apiName);
1302
+ };
1303
+ }
1304
+ function makeQueryGetter(client3, fn) {
1305
+ const queryCache = createAsyncClientCache((client4, key) => {
1306
+ return fn(client4, key);
1307
+ });
1308
+ return async (apiName, version) => {
1309
+ const key = version ? `${apiName}:${version}` : apiName;
1310
+ return await queryCache.get(client3, key);
1311
+ };
1312
+ }
1313
+ const ret = {
1314
+ getObjectDefinition: makeGetter(loadObject),
1315
+ getInterfaceDefinition: makeGetter(loadInterface),
1316
+ getActionDefinition: makeGetter(loadAction),
1317
+ getQueryDefinition: makeQueryGetter(client2, loadQuery)
1318
+ };
1319
+ return ret;
1320
+ };
1321
+ };
1322
+
1323
+ // src/util/UserAgent.ts
1324
+ var USER_AGENT = `osdk-client/${"2.3.0-beta.7"}`;
1325
+ var OBSERVABLE_USER_AGENT = `osdk-observable-client/${"2.3.0-beta.7"}`;
1326
+
1327
+ // src/createMinimalClient.ts
1328
+ function createMinimalClient(metadata, baseUrl, tokenProvider, options = {}, fetchFn = global.fetch, objectSetFactory = chunkHTPVXLYY_cjs.createObjectSet, createOntologyProviderFactory = createStandardOntologyProviderFactory) {
1329
+ if (process.env.NODE_ENV !== "production") {
1330
+ try {
1331
+ new URL(baseUrl);
1332
+ } catch (e) {
1333
+ const hint = !baseUrl.startsWith("http://") || !baseUrl.startsWith("https://") ? ". Did you forget to add 'http://' or 'https://'?" : "";
1334
+ throw new Error(`Invalid stack URL: ${baseUrl}${hint}`);
1335
+ }
1336
+ }
1337
+ const processedBaseUrl = new URL(baseUrl);
1338
+ processedBaseUrl.pathname += processedBaseUrl.pathname.endsWith("/") ? "" : "/";
1339
+ const minimalClient = {
1340
+ ...shared_client_impl.createSharedClientContext(processedBaseUrl.toString(), tokenProvider, USER_AGENT, fetchFn),
1341
+ objectSetFactory,
1342
+ objectFactory: convertWireToOsdkObjects,
1343
+ objectFactory2: convertWireToOsdkObjects2,
1344
+ ontologyRid: metadata.ontologyRid,
1345
+ logger: options.logger,
1346
+ clientCacheKey: {},
1347
+ requestContext: {}
1348
+ };
1349
+ return Object.freeze(Object.assign(minimalClient, {
1350
+ ontologyProvider: createOntologyProviderFactory(options)(minimalClient)
1351
+ }));
1352
+ }
1353
+
1354
+ // src/fetchMetadata.ts
1355
+ var fetchMetadataInternal = async (client, definition) => {
1356
+ if (definition.type === "object") {
1357
+ const {
1358
+ [InterfaceDefinitions]: interfaceDefs,
1359
+ ...objectTypeDef
1360
+ } = await client.ontologyProvider.getObjectDefinition(definition.apiName);
1361
+ return objectTypeDef;
1362
+ } else if (definition.type === "interface") {
1363
+ return client.ontologyProvider.getInterfaceDefinition(definition.apiName);
1364
+ } else if (definition.type === "action") {
1365
+ return client.ontologyProvider.getActionDefinition(definition.apiName);
1366
+ } else if (definition.type === "query") {
1367
+ return client.ontologyProvider.getQueryDefinition(definition.apiName, definition.isFixedVersion ? definition.version : void 0);
1368
+ } else {
1369
+ throw new Error("Not implemented for given definition");
1370
+ }
1371
+ };
1372
+
1373
+ // src/util/toDataValueQueries.ts
1374
+ async function toDataValueQueries(value, client, desiredType) {
1375
+ if (value == null) {
1376
+ return value;
1377
+ }
1378
+ if (Array.isArray(value) && desiredType.multiplicity) {
1379
+ const values = Array.from(value);
1380
+ if (values.some((dataValue) => isAttachmentUpload(dataValue) || isAttachmentFile(dataValue))) {
1381
+ const converted = [];
1382
+ for (const value2 of values) {
1383
+ converted.push(await toDataValueQueries(value2, client, desiredType));
1384
+ }
1385
+ return converted;
1386
+ }
1387
+ const promiseArray = Array.from(value, async (innerValue) => await toDataValueQueries(innerValue, client, desiredType));
1388
+ return Promise.all(promiseArray);
1389
+ }
1390
+ switch (desiredType.type) {
1391
+ case "attachment": {
1392
+ if (isAttachmentUpload(value)) {
1393
+ const attachment = await chunkHTPVXLYY_cjs.Attachment_exports.upload(client, value.data, {
1394
+ filename: value.name
1395
+ });
1396
+ return attachment.rid;
1397
+ }
1398
+ if (isAttachmentFile(value)) {
1399
+ const attachment = await chunkHTPVXLYY_cjs.Attachment_exports.upload(client, value, {
1400
+ filename: value.name
1401
+ });
1402
+ return attachment.rid;
1403
+ }
1404
+ return value;
1405
+ }
1406
+ case "twoDimensionalAggregation": {
1407
+ return {
1408
+ groups: value
1409
+ };
1410
+ }
1411
+ case "threeDimensionalAggregation": {
1412
+ return {
1413
+ groups: value
1414
+ };
1415
+ }
1416
+ case "set": {
1417
+ if (value instanceof Set) {
1418
+ const promiseArray = Array.from(value, async (innerValue) => await toDataValueQueries(innerValue, client, desiredType["set"]));
1419
+ return Promise.all(promiseArray);
1420
+ }
1421
+ break;
1422
+ }
1423
+ case "object": {
1424
+ if (isObjectSpecifiersObject(value)) {
1425
+ return value.$primaryKey;
1426
+ }
1427
+ break;
1428
+ }
1429
+ case "objectSet": {
1430
+ if (chunkHTPVXLYY_cjs.isWireObjectSet(value)) {
1431
+ return value;
1432
+ }
1433
+ if (chunkHTPVXLYY_cjs.isObjectSet(value)) {
1434
+ return chunkHTPVXLYY_cjs.getWireObjectSet(value);
1435
+ }
1436
+ break;
1437
+ }
1438
+ case "map": {
1439
+ if (typeof value === "object") {
1440
+ const entrySet = [];
1441
+ for (const [key, mapValue] of Object.entries(value)) {
1442
+ entrySet.push({
1443
+ key: desiredType.keyType.type === "object" ? extractPrimaryKeyFromObjectSpecifier(key) : await toDataValueQueries(key, client, desiredType.keyType),
1444
+ value: await toDataValueQueries(mapValue, client, desiredType.valueType)
1445
+ });
1446
+ }
1447
+ return entrySet;
1448
+ }
1449
+ break;
1450
+ }
1451
+ case "struct": {
1452
+ if (typeof value === "object") {
1453
+ const structMap = {};
1454
+ for (const [key, structValue] of Object.entries(value)) {
1455
+ structMap[key] = await toDataValueQueries(structValue, client, desiredType["struct"][key]);
1456
+ }
1457
+ return structMap;
1458
+ }
1459
+ }
1460
+ case "boolean":
1461
+ case "date":
1462
+ case "double":
1463
+ case "float":
1464
+ case "integer":
1465
+ case "long":
1466
+ case "string":
1467
+ case "timestamp":
1468
+ return value;
1469
+ }
1470
+ return value;
1471
+ }
1472
+
1473
+ // src/queries/applyQuery.ts
1474
+ async function applyQuery(client, query, params) {
1475
+ const qd = await client.ontologyProvider.getQueryDefinition(query.apiName, query.isFixedVersion ? query.version : void 0);
1476
+ const response = await chunkHTPVXLYY_cjs.Query_exports.execute(chunkHTPVXLYY_cjs.addUserAgentAndRequestContextHeaders(chunkHTPVXLYY_cjs.augmentRequestContext(client, (_) => ({
1477
+ finalMethodCall: "applyQuery"
1478
+ })), query), await client.ontologyRid, query.apiName, {
1479
+ parameters: params ? await remapQueryParams(params, client, qd.parameters) : {}
1480
+ }, {
1481
+ version: qd.version
1482
+ });
1483
+ const objectOutputDefs = await getRequiredDefinitions(qd.output, client);
1484
+ const remappedResponse = await remapQueryResponse(client, qd.output, response.value, objectOutputDefs);
1485
+ return remappedResponse;
1486
+ }
1487
+ async function remapQueryParams(params, client, paramTypes) {
1488
+ const parameterMap = {};
1489
+ for (const [key, value] of Object.entries(params)) {
1490
+ parameterMap[key] = await toDataValueQueries(value, client, paramTypes[key]);
1491
+ }
1492
+ return parameterMap;
1493
+ }
1494
+ async function remapQueryResponse(client, responseDataType, responseValue, definitions) {
1495
+ if (responseValue == null) {
1496
+ if (responseDataType.nullable) {
1497
+ return void 0;
1498
+ } else {
1499
+ throw new Error("Got null response when nullable was not allowed");
1500
+ }
1501
+ }
1502
+ if (responseDataType.multiplicity != null && responseDataType.multiplicity) {
1503
+ const withoutMultiplicity = {
1504
+ ...responseDataType,
1505
+ multiplicity: false
1506
+ };
1507
+ for (let i = 0; i < responseValue.length; i++) {
1508
+ responseValue[i] = await remapQueryResponse(client, withoutMultiplicity, responseValue[i], definitions);
1509
+ }
1510
+ return responseValue;
1511
+ }
1512
+ switch (responseDataType.type) {
1513
+ case "union": {
1514
+ throw new Error("Union return types are not yet supported");
1515
+ }
1516
+ case "set": {
1517
+ for (let i = 0; i < responseValue.length; i++) {
1518
+ responseValue[i] = await remapQueryResponse(client, responseDataType.set, responseValue[i], definitions);
1519
+ }
1520
+ return responseValue;
1521
+ }
1522
+ case "attachment": {
1523
+ return chunkHTPVXLYY_cjs.hydrateAttachmentFromRidInternal(client, responseValue);
1524
+ }
1525
+ case "object": {
1526
+ const def = definitions.get(responseDataType.object);
1527
+ if (!def || def.type !== "object") {
1528
+ throw new Error(`Missing definition for ${responseDataType.object}`);
1529
+ }
1530
+ return createQueryObjectResponse(responseValue, def);
1531
+ }
1532
+ case "objectSet": {
1533
+ const def = definitions.get(responseDataType.objectSet);
1534
+ if (!def) {
1535
+ throw new Error(`Missing definition for ${responseDataType.objectSet}`);
1536
+ }
1537
+ if (typeof responseValue === "string") {
1538
+ return chunkHTPVXLYY_cjs.createObjectSet(def, client, {
1539
+ type: "intersect",
1540
+ objectSets: [{
1541
+ type: "base",
1542
+ objectType: responseDataType.objectSet
1543
+ }, {
1544
+ type: "reference",
1545
+ reference: responseValue
1546
+ }]
1547
+ });
1548
+ }
1549
+ return chunkHTPVXLYY_cjs.createObjectSet(def, client, responseValue);
1550
+ }
1551
+ case "struct": {
1552
+ for (const [key, subtype] of Object.entries(responseDataType.struct)) {
1553
+ if (requiresConversion(subtype)) {
1554
+ responseValue[key] = await remapQueryResponse(client, subtype, responseValue[key], definitions);
1555
+ }
1556
+ }
1557
+ return responseValue;
1558
+ }
1559
+ case "map": {
1560
+ const map = {};
1561
+ !Array.isArray(responseValue) ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, "Expected array entry") : invariant__default.default(false) : void 0;
1562
+ for (const entry of responseValue) {
1563
+ !entry.key ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, "Expected key") : invariant__default.default(false) : void 0;
1564
+ !entry.value ? process.env.NODE_ENV !== "production" ? invariant__default.default(false, "Expected value") : invariant__default.default(false) : void 0;
1565
+ const key = responseDataType.keyType.type === "object" ? getObjectSpecifier(entry.key, responseDataType.keyType.object, definitions) : entry.key;
1566
+ const value = await remapQueryResponse(client, responseDataType.valueType, entry.value, definitions);
1567
+ map[key] = value;
1568
+ }
1569
+ return map;
1570
+ }
1571
+ case "twoDimensionalAggregation": {
1572
+ const result = [];
1573
+ for (const {
1574
+ key,
1575
+ value
1576
+ } of responseValue.groups) {
1577
+ result.push({
1578
+ key,
1579
+ value
1580
+ });
1581
+ }
1582
+ return result;
1583
+ }
1584
+ case "threeDimensionalAggregation": {
1585
+ const result = [];
1586
+ for (const {
1587
+ key,
1588
+ groups
1589
+ } of responseValue.groups) {
1590
+ const subResult = [];
1591
+ for (const {
1592
+ key: subKey,
1593
+ value
1594
+ } of groups) {
1595
+ subResult.push({
1596
+ key: subKey,
1597
+ value
1598
+ });
1599
+ }
1600
+ result.push({
1601
+ key,
1602
+ groups: subResult
1603
+ });
1604
+ }
1605
+ return result;
1606
+ }
1607
+ }
1608
+ return responseValue;
1609
+ }
1610
+ async function getRequiredDefinitions(dataType, client) {
1611
+ const result = /* @__PURE__ */ new Map();
1612
+ switch (dataType.type) {
1613
+ case "objectSet": {
1614
+ const objectDef = await client.ontologyProvider.getObjectDefinition(dataType.objectSet);
1615
+ result.set(dataType.objectSet, objectDef);
1616
+ break;
1617
+ }
1618
+ case "object": {
1619
+ const objectDef = await client.ontologyProvider.getObjectDefinition(dataType.object);
1620
+ result.set(dataType.object, objectDef);
1621
+ break;
1622
+ }
1623
+ case "set": {
1624
+ return getRequiredDefinitions(dataType.set, client);
1625
+ }
1626
+ case "map": {
1627
+ for (const value of [dataType.keyType, dataType.valueType]) {
1628
+ for (const [type, objectDef] of await getRequiredDefinitions(value, client)) {
1629
+ result.set(type, objectDef);
1630
+ }
1631
+ }
1632
+ break;
1633
+ }
1634
+ case "struct": {
1635
+ for (const value of Object.values(dataType.struct)) {
1636
+ for (const [type, objectDef] of await getRequiredDefinitions(value, client)) {
1637
+ result.set(type, objectDef);
1638
+ }
1639
+ }
1640
+ break;
1641
+ }
1642
+ }
1643
+ return result;
1644
+ }
1645
+ function requiresConversion(dataType) {
1646
+ switch (dataType.type) {
1647
+ case "boolean":
1648
+ case "date":
1649
+ case "double":
1650
+ case "float":
1651
+ case "integer":
1652
+ case "long":
1653
+ case "string":
1654
+ case "timestamp":
1655
+ return false;
1656
+ case "union":
1657
+ return true;
1658
+ case "struct":
1659
+ return Object.values(dataType.struct).some(requiresConversion);
1660
+ case "set":
1661
+ return requiresConversion(dataType.set);
1662
+ case "attachment":
1663
+ case "objectSet":
1664
+ case "twoDimensionalAggregation":
1665
+ case "threeDimensionalAggregation":
1666
+ case "object":
1667
+ return true;
1668
+ default:
1669
+ return false;
1670
+ }
1671
+ }
1672
+ function getObjectSpecifier(primaryKey, objectTypeApiName, definitions) {
1673
+ const def = definitions.get(objectTypeApiName);
1674
+ if (!def || def.type !== "object") {
1675
+ throw new Error(`Missing definition for ${objectTypeApiName}`);
1676
+ }
1677
+ return createObjectSpecifierFromPrimaryKey(def, primaryKey);
1678
+ }
1679
+ function createQueryObjectResponse(primaryKey, objectDef) {
1680
+ return {
1681
+ $apiName: objectDef.apiName,
1682
+ $title: void 0,
1683
+ $objectType: objectDef.apiName,
1684
+ $primaryKey: primaryKey,
1685
+ $objectSpecifier: createObjectSpecifierFromPrimaryKey(objectDef, primaryKey)
1686
+ };
1687
+ }
1688
+
1689
+ // src/createClient.ts
1690
+ var ActionInvoker = class {
1691
+ constructor(clientCtx, actionDef) {
1692
+ this.applyAction = applyAction.bind(void 0, clientCtx, actionDef);
1693
+ this.batchApplyAction = applyAction.bind(void 0, clientCtx, actionDef);
1694
+ }
1695
+ };
1696
+ var QueryInvoker = class {
1697
+ constructor(clientCtx, queryDef) {
1698
+ this.executeFunction = applyQuery.bind(void 0, clientCtx, queryDef);
1699
+ }
1700
+ };
1701
+ function createClientInternal(objectSetFactory, baseUrl, ontologyRid, tokenProvider, options = void 0, fetchFn = fetch) {
1702
+ if (typeof ontologyRid === "string") {
1703
+ if (!ontologyRid.startsWith("ri.")) {
1704
+ throw new Error("Invalid ontology RID");
1705
+ }
1706
+ } else {
1707
+ ontologyRid.then((ontologyRid2) => {
1708
+ if (!ontologyRid2.startsWith("ri.")) {
1709
+ throw new Error("Invalid ontology RID");
1710
+ }
1711
+ });
1712
+ }
1713
+ const clientCtx = createMinimalClient({
1714
+ ontologyRid
1715
+ }, baseUrl, tokenProvider, {
1716
+ ...options,
1717
+ logger: options?.logger ?? new chunkHTPVXLYY_cjs.MinimalLogger()
1718
+ }, fetchFn, objectSetFactory);
1719
+ return createClientFromContext(clientCtx);
1720
+ }
1721
+ function createClientFromContext(clientCtx) {
1722
+ function clientFn(o) {
1723
+ if (o.type === "object" || o.type === "interface") {
1724
+ return clientCtx.objectSetFactory(o, clientCtx);
1725
+ } else if (o.type === "action") {
1726
+ return new ActionInvoker(clientCtx, o);
1727
+ } else if (o.type === "query") {
1728
+ return new QueryInvoker(clientCtx, o);
1729
+ } else if (o.type === "experiment") {
1730
+ switch (o.name) {
1731
+ case unstable.__EXPERIMENTAL__NOT_SUPPORTED_YET__getBulkLinks.name:
1732
+ return {
1733
+ getBulkLinks: createBulkLinksAsyncIterFactory(clientCtx)
1734
+ };
1735
+ case unstable.__EXPERIMENTAL__NOT_SUPPORTED_YET__fetchOneByRid.name:
1736
+ return {
1737
+ fetchOneByRid: async (objectType, rid, options) => {
1738
+ return await chunkHTPVXLYY_cjs.fetchSingle(clientCtx, objectType, options, createWithRid([rid]));
1739
+ }
1740
+ };
1741
+ case unstable.__EXPERIMENTAL__NOT_SUPPORTED_YET__createMediaReference.name:
1742
+ return {
1743
+ createMediaReference: async (args) => {
1744
+ const {
1745
+ data,
1746
+ fileName,
1747
+ objectType,
1748
+ propertyType
1749
+ } = args;
1750
+ return await chunkHTPVXLYY_cjs.MediaReferenceProperty_exports.upload(clientCtx, await clientCtx.ontologyRid, objectType.apiName, propertyType, data, {
1751
+ mediaItemPath: fileName,
1752
+ preview: true
1753
+ });
1754
+ }
1755
+ };
1756
+ case unstable.__EXPERIMENTAL__NOT_SUPPORTED_YET__fetchPageByRid.name:
1757
+ return {
1758
+ fetchPageByRid: async (objectOrInterfaceType, rids, options = {}) => {
1759
+ return await chunkHTPVXLYY_cjs.fetchPage(clientCtx, objectOrInterfaceType, options, createWithRid(rids));
1760
+ }
1761
+ };
1762
+ }
1763
+ throw new Error("not implemented");
1764
+ } else {
1765
+ throw new Error("not implemented");
1766
+ }
1767
+ }
1768
+ const fetchMetadata = fetchMetadataInternal.bind(void 0, clientCtx);
1769
+ const symbolClientContext2 = "__osdkClientContext";
1770
+ const client = Object.defineProperties(clientFn, {
1771
+ [chunkHTPVXLYY_cjs.symbolClientContext]: {
1772
+ value: clientCtx
1773
+ },
1774
+ [symbolClientContext2]: {
1775
+ value: clientCtx
1776
+ },
1777
+ [chunkHTPVXLYY_cjs.additionalContext]: {
1778
+ value: clientCtx
1779
+ },
1780
+ fetchMetadata: {
1781
+ value: fetchMetadata
1782
+ }
1783
+ });
1784
+ return client;
1785
+ }
1786
+ var createClient = createClientInternal.bind(void 0, chunkHTPVXLYY_cjs.createObjectSet);
1787
+ function createWithRid(rids) {
1788
+ const withRid = {
1789
+ type: "static",
1790
+ "objects": rids
1791
+ };
1792
+ return withRid;
1793
+ }
1794
+
1795
+ exports.ActionValidationError = ActionValidationError;
1796
+ exports.OBSERVABLE_USER_AGENT = OBSERVABLE_USER_AGENT;
1797
+ exports.ObjectDefRef = ObjectDefRef;
1798
+ exports.USER_AGENT = USER_AGENT;
1799
+ exports.UnderlyingOsdkObject = UnderlyingOsdkObject;
1800
+ exports.createAttachmentUpload = createAttachmentUpload;
1801
+ exports.createClient = createClient;
1802
+ exports.createClientFromContext = createClientFromContext;
1803
+ //# sourceMappingURL=chunk-BITDNXFO.cjs.map
1804
+ //# sourceMappingURL=chunk-BITDNXFO.cjs.map