@party-stack/foundry-ontology 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/adapter/convertLoadSubsetOptions.d.ts +1 -0
- package/lib/adapter/convertLoadSubsetOptions.d.ts.map +1 -1
- package/lib/adapter/convertLoadSubsetOptions.js +32 -20
- package/lib/adapter/convertLoadSubsetOptions.js.map +1 -1
- package/lib/adapter/convertLoadSubsetOptions.test.d.ts +2 -0
- package/lib/adapter/convertLoadSubsetOptions.test.d.ts.map +1 -0
- package/lib/adapter/convertLoadSubsetOptions.test.js +10 -0
- package/lib/adapter/convertLoadSubsetOptions.test.js.map +1 -0
- package/lib/adapter/createFoundryOntologyAdapter.d.ts +2 -2
- package/lib/adapter/createFoundryOntologyAdapter.d.ts.map +1 -1
- package/lib/adapter/createFoundryOntologyAdapter.js +81 -51
- package/lib/adapter/createFoundryOntologyAdapter.js.map +1 -1
- package/lib/adapter/foundryCodec.d.ts +2 -1
- package/lib/adapter/foundryCodec.d.ts.map +1 -1
- package/lib/adapter/foundryCodec.js +16 -1
- package/lib/adapter/foundryCodec.js.map +1 -1
- package/lib/adapter/foundryCodec.test.d.ts +2 -0
- package/lib/adapter/foundryCodec.test.d.ts.map +1 -0
- package/lib/adapter/foundryCodec.test.js +80 -0
- package/lib/adapter/foundryCodec.test.js.map +1 -0
- package/lib/adapter/objectCollectionOptions.d.ts +2 -8
- package/lib/adapter/objectCollectionOptions.d.ts.map +1 -1
- package/lib/adapter/objectCollectionOptions.js +116 -101
- package/lib/adapter/objectCollectionOptions.js.map +1 -1
- package/lib/adapter/objectCollectionOptions.test.js +146 -8
- package/lib/adapter/objectCollectionOptions.test.js.map +1 -1
- package/lib/adapter/sync.d.ts +14 -0
- package/lib/adapter/sync.d.ts.map +1 -0
- package/lib/adapter/sync.js +238 -0
- package/lib/adapter/sync.js.map +1 -0
- package/lib/adapter/sync.test.d.ts +2 -0
- package/lib/adapter/sync.test.d.ts.map +1 -0
- package/lib/adapter/sync.test.js +245 -0
- package/lib/adapter/sync.test.js.map +1 -0
- package/lib/config/index.d.ts +1 -1
- package/lib/config/index.d.ts.map +1 -1
- package/lib/config/index.js +1 -1
- package/lib/config/index.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/meta/actionTypeCollectionOptions.d.ts +1 -1
- package/lib/meta/actionTypeCollectionOptions.d.ts.map +1 -1
- package/lib/meta/actionTypeCollectionOptions.js.map +1 -1
- package/lib/meta/convertMetaObjectType.js +5 -0
- package/lib/meta/convertMetaObjectType.js.map +1 -1
- package/lib/meta/convertMetaTypeDef.d.ts.map +1 -1
- package/lib/meta/convertMetaTypeDef.js +8 -1
- package/lib/meta/convertMetaTypeDef.js.map +1 -1
- package/lib/meta/createFoundryMetaOntologyAdapter.d.ts +1 -1
- package/lib/meta/createFoundryMetaOntologyAdapter.d.ts.map +1 -1
- package/lib/meta/createFoundryMetaOntologyAdapter.js.map +1 -1
- package/lib/meta/entityCollectionOptions.d.ts +1 -1
- package/lib/meta/entityCollectionOptions.d.ts.map +1 -1
- package/lib/meta/entityCollectionOptions.js.map +1 -1
- package/lib/users/userCollectionOptions.d.ts +1 -1
- package/lib/users/userCollectionOptions.d.ts.map +1 -1
- package/lib/users/userCollectionOptions.js.map +1 -1
- package/lib/utils/AsyncIterable.d.ts +1 -1
- package/lib/utils/AsyncIterable.js +2 -2
- package/package.json +12 -14
- package/lib/adapter/sync/ObjectSetSubscription.d.ts +0 -35
- package/lib/adapter/sync/ObjectSetSubscription.d.ts.map +0 -1
- package/lib/adapter/sync/ObjectSetSubscription.js +0 -2
- package/lib/adapter/sync/ObjectSetSubscription.js.map +0 -1
- package/lib/adapter/sync/ObjectSetWatcherManager.d.ts +0 -11
- package/lib/adapter/sync/ObjectSetWatcherManager.d.ts.map +0 -1
- package/lib/adapter/sync/ObjectSetWatcherManager.js +0 -86
- package/lib/adapter/sync/ObjectSetWatcherManager.js.map +0 -1
- package/lib/adapter/sync/effection-utils/useValueSignal.d.ts +0 -4
- package/lib/adapter/sync/effection-utils/useValueSignal.d.ts.map +0 -1
- package/lib/adapter/sync/effection-utils/useValueSignal.js +0 -31
- package/lib/adapter/sync/effection-utils/useValueSignal.js.map +0 -1
- package/lib/adapter/sync/useObjectSetWatcherConnection.d.ts +0 -10
- package/lib/adapter/sync/useObjectSetWatcherConnection.d.ts.map +0 -1
- package/lib/adapter/sync/useObjectSetWatcherConnection.js +0 -184
- package/lib/adapter/sync/useObjectSetWatcherConnection.js.map +0 -1
- package/lib/adapter/sync/useObjectSetWatcherSession.d.ts +0 -9
- package/lib/adapter/sync/useObjectSetWatcherSession.d.ts.map +0 -1
- package/lib/adapter/sync/useObjectSetWatcherSession.js +0 -69
- package/lib/adapter/sync/useObjectSetWatcherSession.js.map +0 -1
- package/lib/utils/client.d.ts +0 -11
- package/lib/utils/client.d.ts.map +0 -1
- package/lib/utils/client.js +0 -22
- package/lib/utils/client.js.map +0 -1
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
/* eslint-disable require-yield */
|
|
2
|
-
/* eslint-disable react-hooks/rules-of-hooks */
|
|
3
|
-
import { invariant } from "@bobbyfidz/panic";
|
|
4
|
-
import { Pathnames, Urls } from "@bobbyfidz/urls";
|
|
5
|
-
import { map } from "@effectionx/stream-helpers";
|
|
6
|
-
import { useWebSocket } from "@effectionx/websocket";
|
|
7
|
-
import { resource, spawn, race, sleep, createChannel } from "effection";
|
|
8
|
-
const WEBSOCKET_HEARTBEAT_INTERVAL_MS = 45_000;
|
|
9
|
-
function bigIntToUuid(value) {
|
|
10
|
-
const decimalString = value.toString().padStart(32, "0");
|
|
11
|
-
return `${decimalString.substring(0, 8)}-${decimalString.substring(8, 12)}-${decimalString.substring(12, 16)}-${decimalString.substring(16, 20)}-${decimalString.substring(20)}`;
|
|
12
|
-
}
|
|
13
|
-
function uuidToBigInt(uuid) {
|
|
14
|
-
const decimalString = uuid.replace(/-/g, "");
|
|
15
|
-
return BigInt(decimalString);
|
|
16
|
-
}
|
|
17
|
-
function serializeRequest(requestId, request) {
|
|
18
|
-
return JSON.stringify({
|
|
19
|
-
id: bigIntToUuid(requestId),
|
|
20
|
-
// Strip out our internal subscription ids.
|
|
21
|
-
requests: request.map(({ objectSet, propertySet, referenceSet }) => ({
|
|
22
|
-
objectSet,
|
|
23
|
-
propertySet,
|
|
24
|
-
referenceSet,
|
|
25
|
-
})),
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
const parseMessages = map(function* (message) {
|
|
29
|
-
return JSON.parse(String(message.data));
|
|
30
|
-
});
|
|
31
|
-
/**
|
|
32
|
-
* We sometimes see duplicate primary keys in a single message (it seems like when there are multiple updates to the same object in a short period of time)
|
|
33
|
-
* which causes problems downstream, so we clean that up here.
|
|
34
|
-
*/
|
|
35
|
-
function filterChangeMessages(updates) {
|
|
36
|
-
const reversedUpdates = [...updates].reverse();
|
|
37
|
-
const seen = new Set();
|
|
38
|
-
const filteredUpdates = [];
|
|
39
|
-
for (const update of reversedUpdates) {
|
|
40
|
-
switch (update.type) {
|
|
41
|
-
case "object": {
|
|
42
|
-
const primaryKey = update.object
|
|
43
|
-
.__primaryKey;
|
|
44
|
-
if (!seen.has(primaryKey)) {
|
|
45
|
-
filteredUpdates.push(update);
|
|
46
|
-
seen.add(primaryKey);
|
|
47
|
-
}
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
case "reference": {
|
|
51
|
-
filteredUpdates.push(update);
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return filteredUpdates;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Creates a resources that tracks the lifetime of a single physical Object Set Watcher connection.
|
|
60
|
-
*
|
|
61
|
-
* Handles connection details, maintaining the connection with heartbeats, and shuttling messages.
|
|
62
|
-
*/
|
|
63
|
-
export function useObjectSetWatcherConnection(baseUrl, token, ontologyRid, desiredSubscriptions) {
|
|
64
|
-
return resource(function* (provide) {
|
|
65
|
-
const subscriptionMessages = createChannel();
|
|
66
|
-
const socket = yield* useWebSocket(Urls.extend(baseUrl, {
|
|
67
|
-
protocol: "wss:",
|
|
68
|
-
pathname: Pathnames.join("/api/v2/ontologySubscriptions/ontologies", ontologyRid, "streamSubscriptions"),
|
|
69
|
-
}).toString(), `Bearer-${token}`);
|
|
70
|
-
let latestRequestId = 0n;
|
|
71
|
-
let externalSubscriptionIdsToInternal;
|
|
72
|
-
function* sendSubscriptionRequest(request) {
|
|
73
|
-
const requestId = latestRequestId + 1n;
|
|
74
|
-
latestRequestId = requestId;
|
|
75
|
-
// Open a subscription before sending our request to make sure we don't miss it on the way back.
|
|
76
|
-
const messages = yield* parseMessages(socket);
|
|
77
|
-
socket.send(serializeRequest(requestId, request));
|
|
78
|
-
while (true) {
|
|
79
|
-
const nextMessage = yield* messages.next();
|
|
80
|
-
if (nextMessage.done) {
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
const message = nextMessage.value;
|
|
84
|
-
if (message.type === "subscribeResponses") {
|
|
85
|
-
const messageRequestId = uuidToBigInt(message.id);
|
|
86
|
-
if (messageRequestId > requestId) {
|
|
87
|
-
// A newer message than ours arrived which will have the latest state, so we can stop waiting.
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
if (messageRequestId === requestId) {
|
|
91
|
-
externalSubscriptionIdsToInternal = new Map();
|
|
92
|
-
const updates = [];
|
|
93
|
-
for (let i = 0; i < message.responses.length; i++) {
|
|
94
|
-
const subscriptionRequest = request[i];
|
|
95
|
-
const subscriptionResponse = message.responses[i];
|
|
96
|
-
switch (subscriptionResponse.type) {
|
|
97
|
-
case "success": {
|
|
98
|
-
externalSubscriptionIdsToInternal.set(subscriptionResponse.id, subscriptionRequest.id);
|
|
99
|
-
updates.push({ subscriptionId: subscriptionRequest.id, status: "open" });
|
|
100
|
-
break;
|
|
101
|
-
}
|
|
102
|
-
case "qos": {
|
|
103
|
-
updates.push({ subscriptionId: subscriptionRequest.id, status: "qos" });
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
106
|
-
case "error": {
|
|
107
|
-
updates.push({ subscriptionId: subscriptionRequest.id, status: "error" });
|
|
108
|
-
break;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return { type: "state", updates };
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
void (yield* spawn(function* () {
|
|
118
|
-
const request = desiredSubscriptions.valueOf();
|
|
119
|
-
const response = yield* sendSubscriptionRequest(request);
|
|
120
|
-
if (response) {
|
|
121
|
-
yield* subscriptionMessages.send(response);
|
|
122
|
-
}
|
|
123
|
-
const desiredSubscriptionsUpdates = yield* desiredSubscriptions;
|
|
124
|
-
while (true) {
|
|
125
|
-
const nextEvent = yield* race([
|
|
126
|
-
desiredSubscriptionsUpdates.next(),
|
|
127
|
-
sleep(WEBSOCKET_HEARTBEAT_INTERVAL_MS),
|
|
128
|
-
]);
|
|
129
|
-
if (nextEvent && nextEvent.done) {
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
// TODO: figure out if we can heartbeat with a smaller payload.
|
|
133
|
-
const request = nextEvent ? nextEvent.value : desiredSubscriptions.valueOf();
|
|
134
|
-
const response = yield* sendSubscriptionRequest(request);
|
|
135
|
-
if (response) {
|
|
136
|
-
yield* subscriptionMessages.send(response);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}));
|
|
140
|
-
void (yield* spawn(function* () {
|
|
141
|
-
const messages = yield* parseMessages(socket);
|
|
142
|
-
while (true) {
|
|
143
|
-
const nextMessage = yield* messages.next();
|
|
144
|
-
if (nextMessage.done) {
|
|
145
|
-
yield* subscriptionMessages.close(nextMessage.value);
|
|
146
|
-
break;
|
|
147
|
-
}
|
|
148
|
-
const message = nextMessage.value;
|
|
149
|
-
switch (message.type) {
|
|
150
|
-
case "objectSetChanged": {
|
|
151
|
-
const subscriptionId = externalSubscriptionIdsToInternal?.get(message.id);
|
|
152
|
-
invariant(subscriptionId, "Subscription id could not be found, this should never happen.");
|
|
153
|
-
yield* subscriptionMessages.send({
|
|
154
|
-
type: "change",
|
|
155
|
-
subscriptionId,
|
|
156
|
-
updates: filterChangeMessages(message.updates),
|
|
157
|
-
});
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
case "refreshObjectSet": {
|
|
161
|
-
const subscriptionId = externalSubscriptionIdsToInternal?.get(message.id);
|
|
162
|
-
invariant(subscriptionId, "Subscription id could not be found, this should never happen.");
|
|
163
|
-
yield* subscriptionMessages.send({
|
|
164
|
-
type: "refresh",
|
|
165
|
-
subscriptionId,
|
|
166
|
-
objectType: message.objectType,
|
|
167
|
-
});
|
|
168
|
-
break;
|
|
169
|
-
}
|
|
170
|
-
case "subscriptionClosed": {
|
|
171
|
-
const subscriptionId = externalSubscriptionIdsToInternal?.get(message.id);
|
|
172
|
-
invariant(subscriptionId, "Subscription id could not be found, this should never happen.");
|
|
173
|
-
yield* subscriptionMessages.send({
|
|
174
|
-
type: "state",
|
|
175
|
-
updates: [{ subscriptionId, status: "closed" }],
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}));
|
|
181
|
-
yield* provide(subscriptionMessages);
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
//# sourceMappingURL=useObjectSetWatcherConnection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useObjectSetWatcherConnection.js","sourceRoot":"","sources":["../../../src/adapter/sync/useObjectSetWatcherConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Operation, Stream } from "effection";
|
|
2
|
-
import { ObjectSetSubscription, ObjectSetSubscriptionsMessage } from "./ObjectSetSubscription";
|
|
3
|
-
import type { ValueSignal } from "@effectionx/signals";
|
|
4
|
-
/**
|
|
5
|
-
* Creates a resources that maintains a logical Object Set Watcher session regardless
|
|
6
|
-
* of blips in network connectivity.
|
|
7
|
-
*/
|
|
8
|
-
export declare function useObjectSetWatcherSession(baseUrl: string, tokenProvider: () => Operation<string>, ontologyRid: string, desiredSubscriptions: ValueSignal<ObjectSetSubscription[]>): Operation<Stream<ObjectSetSubscriptionsMessage, void>>;
|
|
9
|
-
//# sourceMappingURL=useObjectSetWatcherSession.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useObjectSetWatcherSession.d.ts","sourceRoot":"","sources":["../../../src/adapter/sync/useObjectSetWatcherSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAkC,MAAM,EAAE,MAAM,WAAW,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAE/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,SAAS,CAAC,MAAM,CAAC,EACtC,WAAW,EAAE,MAAM,EACnB,oBAAoB,EAAE,WAAW,CAAC,qBAAqB,EAAE,CAAC,GAC3D,SAAS,CAAC,MAAM,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC,CAwExD"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/* eslint-disable react-hooks/rules-of-hooks */
|
|
2
|
-
import { createChannel, resource, scoped, sleep, spawn } from "effection";
|
|
3
|
-
import { useObjectSetWatcherConnection } from "./useObjectSetWatcherConnection";
|
|
4
|
-
/**
|
|
5
|
-
* Creates a resources that maintains a logical Object Set Watcher session regardless
|
|
6
|
-
* of blips in network connectivity.
|
|
7
|
-
*/
|
|
8
|
-
export function useObjectSetWatcherSession(baseUrl, tokenProvider, ontologyRid, desiredSubscriptions) {
|
|
9
|
-
return resource(function* (provide) {
|
|
10
|
-
// TODO: turn off connection after a while if there are 0 object sets we are subscribed to.
|
|
11
|
-
const subscriptionMessages = createChannel();
|
|
12
|
-
void (yield* spawn(function* () {
|
|
13
|
-
while (true) {
|
|
14
|
-
// TODO: wait until we have > 0 object sets we are subscribed to and have auth.
|
|
15
|
-
try {
|
|
16
|
-
yield* scoped(function* () {
|
|
17
|
-
const connection = yield* useObjectSetWatcherConnection(baseUrl, yield* tokenProvider(), ontologyRid, desiredSubscriptions);
|
|
18
|
-
const messages = yield* connection;
|
|
19
|
-
while (true) {
|
|
20
|
-
const nextMessage = yield* messages.next();
|
|
21
|
-
if (nextMessage.done) {
|
|
22
|
-
// TODO: capture code here and adjust behavior accordingly.
|
|
23
|
-
yield* subscriptionMessages.send({
|
|
24
|
-
type: "state",
|
|
25
|
-
updates: desiredSubscriptions
|
|
26
|
-
.valueOf()
|
|
27
|
-
.map(({ id }) => ({ subscriptionId: id, status: "closed" })),
|
|
28
|
-
});
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
const message = nextMessage.value;
|
|
32
|
-
if (message.type === "state" &&
|
|
33
|
-
message.updates.some((update) => update.status === "qos")) {
|
|
34
|
-
// TODO: gracefully roll-over to a new connection while we hang onto the old one.
|
|
35
|
-
yield* subscriptionMessages.send({
|
|
36
|
-
type: "state",
|
|
37
|
-
updates: desiredSubscriptions
|
|
38
|
-
.valueOf()
|
|
39
|
-
.map(({ id }) => ({ subscriptionId: id, status: "qos" })),
|
|
40
|
-
});
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
yield* subscriptionMessages.send(message);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
console.error("Error in connection", error);
|
|
49
|
-
// TODO: capture error here and adjust behavior accordingly. it seems like browsers
|
|
50
|
-
// mostly just close rather than erroring, but Node.js might error before closing.
|
|
51
|
-
yield* subscriptionMessages.send({
|
|
52
|
-
type: "state",
|
|
53
|
-
updates: desiredSubscriptions
|
|
54
|
-
.valueOf()
|
|
55
|
-
.map(({ id }) => ({ subscriptionId: id, status: "closed" })),
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
// TODO: smart reconnection logic here:
|
|
59
|
-
// - if quit because disconnected from network, wait until we're back online
|
|
60
|
-
// - if quit because of qos, wait w/ some jitter so we don't overload the server
|
|
61
|
-
// - if quit because of auth we'll yield at top of loop for a new token
|
|
62
|
-
// - if quit because 0 queries we'll yield at top of loop for queries
|
|
63
|
-
yield* sleep(5_000);
|
|
64
|
-
}
|
|
65
|
-
}));
|
|
66
|
-
yield* provide(subscriptionMessages);
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=useObjectSetWatcherSession.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useObjectSetWatcherSession.js","sourceRoot":"","sources":["../../../src/adapter/sync/useObjectSetWatcherSession.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAE,aAAa,EAAa,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAU,MAAM,WAAW,CAAC;AAE7F,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAGhF;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACtC,OAAe,EACf,aAAsC,EACtC,WAAmB,EACnB,oBAA0D;IAE1D,OAAO,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO;QAC9B,2FAA2F;QAE3F,MAAM,oBAAoB,GAAG,aAAa,EAAiC,CAAC;QAE5E,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YACxB,OAAO,IAAI,EAAE,CAAC;gBACV,+EAA+E;gBAC/E,IAAI,CAAC;oBACD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;wBACnB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,6BAA6B,CACnD,OAAO,EACP,KAAK,CAAC,CAAC,aAAa,EAAE,EACtB,WAAW,EACX,oBAAoB,CACvB,CAAC;wBACF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;wBACnC,OAAO,IAAI,EAAE,CAAC;4BACV,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;4BAC3C,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;gCACnB,2DAA2D;gCAC3D,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC;oCAC7B,IAAI,EAAE,OAAO;oCACb,OAAO,EAAE,oBAAoB;yCACxB,OAAO,EAAE;yCACT,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;iCACnE,CAAC,CAAC;gCACH,MAAM;4BACV,CAAC;4BACD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC;4BAElC,IACI,OAAO,CAAC,IAAI,KAAK,OAAO;gCACxB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,EAC3D,CAAC;gCACC,iFAAiF;gCACjF,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC;oCAC7B,IAAI,EAAE,OAAO;oCACb,OAAO,EAAE,oBAAoB;yCACxB,OAAO,EAAE;yCACT,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;iCAChE,CAAC,CAAC;gCACH,MAAM;4BACV,CAAC;4BAED,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC9C,CAAC;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;oBAC5C,mFAAmF;oBACnF,kFAAkF;oBAClF,KAAK,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC;wBAC7B,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,oBAAoB;6BACxB,OAAO,EAAE;6BACT,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;qBACnE,CAAC,CAAC;gBACP,CAAC;gBAED,uCAAuC;gBACvC,4EAA4E;gBAC5E,gFAAgF;gBAChF,uEAAuE;gBACvE,qEAAqE;gBACrE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACL,CAAC,CAAC,CAAC,CAAC;QAEJ,KAAK,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/lib/utils/client.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { SharedClient, SharedClientContext } from "@osdk/shared.client2";
|
|
2
|
-
type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
|
|
3
|
-
export type Client = SharedClientContext;
|
|
4
|
-
export interface OntologyClient extends Client {
|
|
5
|
-
ontologyRid: string;
|
|
6
|
-
}
|
|
7
|
-
export declare const createClient: (context: Optional<Client, "fetch">) => Client;
|
|
8
|
-
export declare function createOntologyClient(context: Optional<OntologyClient, "fetch">): OntologyClient;
|
|
9
|
-
export declare function fromOsdkClient(client: SharedClient): OntologyClient;
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/utils/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEvE,MAAM,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEzC,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC1C,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,YAAY,GAAI,SAAS,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAQjE,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,cAAc,CAK/F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAQnE"}
|
package/lib/utils/client.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { invariant } from "@bobbyfidz/panic";
|
|
2
|
-
import { createSharedClientContext } from "@osdk/shared.client.impl";
|
|
3
|
-
export const createClient = (context) => {
|
|
4
|
-
// TODO: remove this dep and implement our own network setup here.
|
|
5
|
-
return createSharedClientContext(context.baseUrl, context.tokenProvider, "foundry-ontology", context.fetch);
|
|
6
|
-
};
|
|
7
|
-
export function createOntologyClient(context) {
|
|
8
|
-
return {
|
|
9
|
-
...createClient(context),
|
|
10
|
-
ontologyRid: context.ontologyRid,
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
export function fromOsdkClient(client) {
|
|
14
|
-
const context = client.__osdkClientContext;
|
|
15
|
-
const ontologyRid = context.ontologyRid;
|
|
16
|
-
invariant(ontologyRid, "Ontology rid not found on OSDK client, this should never happen.");
|
|
17
|
-
return {
|
|
18
|
-
...context,
|
|
19
|
-
ontologyRid,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=client.js.map
|
package/lib/utils/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/utils/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAWrE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAkC,EAAU,EAAE;IACvE,kEAAkE;IAClE,OAAO,yBAAyB,CAC5B,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,aAAa,EACrB,kBAAkB,EAClB,OAAO,CAAC,KAAK,CAChB,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,OAA0C;IAC3E,OAAO;QACH,GAAG,YAAY,CAAC,OAAO,CAAC;QACxB,WAAW,EAAE,OAAO,CAAC,WAAW;KACnC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAoB;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC3C,MAAM,WAAW,GAAI,OAA8C,CAAC,WAAW,CAAC;IAChF,SAAS,CAAC,WAAW,EAAE,kEAAkE,CAAC,CAAC;IAC3F,OAAO;QACH,GAAG,OAAO;QACV,WAAW;KACd,CAAC;AACN,CAAC"}
|