@party-stack/foundry-ontology 0.18.1 → 0.20.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.
Files changed (203) hide show
  1. package/README.md +56 -16
  2. package/lib/adapter/backend.d.ts +35 -0
  3. package/lib/adapter/backend.d.ts.map +1 -0
  4. package/lib/adapter/backend.js +210 -0
  5. package/lib/adapter/backend.js.map +1 -0
  6. package/lib/adapter/encrypted.d.ts +12 -0
  7. package/lib/adapter/encrypted.d.ts.map +1 -0
  8. package/lib/adapter/encrypted.js +79 -0
  9. package/lib/adapter/encrypted.js.map +1 -0
  10. package/lib/adapter/foundryActionError.d.ts +7 -0
  11. package/lib/adapter/foundryActionError.d.ts.map +1 -0
  12. package/lib/adapter/foundryActionError.js +61 -0
  13. package/lib/adapter/foundryActionError.js.map +1 -0
  14. package/lib/adapter/foundryActionValidation.d.ts +4 -3
  15. package/lib/adapter/foundryActionValidation.d.ts.map +1 -1
  16. package/lib/adapter/foundryActionValidation.js +71 -25
  17. package/lib/adapter/foundryActionValidation.js.map +1 -1
  18. package/lib/adapter/foundryCodec.d.ts +3 -5
  19. package/lib/adapter/foundryCodec.d.ts.map +1 -1
  20. package/lib/adapter/foundryCodec.js +19 -7
  21. package/lib/adapter/foundryCodec.js.map +1 -1
  22. package/lib/adapter/foundryObjectSearch.d.ts +13 -0
  23. package/lib/adapter/foundryObjectSearch.d.ts.map +1 -0
  24. package/lib/adapter/foundryObjectSearch.js +57 -0
  25. package/lib/adapter/foundryObjectSearch.js.map +1 -0
  26. package/lib/adapter/index.d.ts +3 -4
  27. package/lib/adapter/index.js +3 -4
  28. package/lib/adapter/likeFilter.d.ts +10 -0
  29. package/lib/adapter/likeFilter.d.ts.map +1 -0
  30. package/lib/adapter/likeFilter.js +87 -0
  31. package/lib/adapter/likeFilter.js.map +1 -0
  32. package/lib/adapter/makeFoundryOntologyBackend.d.ts +76 -0
  33. package/lib/adapter/makeFoundryOntologyBackend.d.ts.map +1 -0
  34. package/lib/adapter/makeFoundryOntologyBackend.js +505 -0
  35. package/lib/adapter/makeFoundryOntologyBackend.js.map +1 -0
  36. package/lib/adapter/subsetFilter.d.ts +14 -0
  37. package/lib/adapter/subsetFilter.d.ts.map +1 -0
  38. package/lib/adapter/subsetFilter.js +105 -0
  39. package/lib/adapter/subsetFilter.js.map +1 -0
  40. package/lib/adapter/uploads.d.ts +25 -0
  41. package/lib/adapter/uploads.d.ts.map +1 -0
  42. package/lib/adapter/uploads.js +78 -0
  43. package/lib/adapter/uploads.js.map +1 -0
  44. package/lib/backend.d.ts +80 -0
  45. package/lib/backend.d.ts.map +1 -0
  46. package/lib/backend.js +34 -0
  47. package/lib/backend.js.map +1 -0
  48. package/lib/config/index.d.ts +8 -12
  49. package/lib/config/index.d.ts.map +1 -1
  50. package/lib/config/index.js +49 -52
  51. package/lib/config/index.js.map +1 -1
  52. package/lib/connectionOptions.d.ts +9 -0
  53. package/lib/connectionOptions.d.ts.map +1 -0
  54. package/lib/connectionOptions.js +1 -0
  55. package/lib/context.d.ts +21 -0
  56. package/lib/context.d.ts.map +1 -0
  57. package/lib/context.js +16 -0
  58. package/lib/context.js.map +1 -0
  59. package/lib/index.d.ts +7 -7
  60. package/lib/index.js +6 -7
  61. package/lib/meta/backend.d.ts +10 -0
  62. package/lib/meta/backend.d.ts.map +1 -0
  63. package/lib/meta/backend.js +161 -0
  64. package/lib/meta/backend.js.map +1 -0
  65. package/lib/meta/convertMetaActionType.d.ts +3 -2
  66. package/lib/meta/convertMetaActionType.d.ts.map +1 -1
  67. package/lib/meta/convertMetaActionType.js +3 -3
  68. package/lib/meta/convertMetaActionType.js.map +1 -1
  69. package/lib/meta/convertMetaLinkType.d.ts +2 -2
  70. package/lib/meta/convertMetaLinkType.d.ts.map +1 -1
  71. package/lib/meta/convertMetaLinkType.js +13 -13
  72. package/lib/meta/convertMetaLinkType.js.map +1 -1
  73. package/lib/meta/convertMetaObjectType.d.ts +2 -2
  74. package/lib/meta/convertMetaObjectType.d.ts.map +1 -1
  75. package/lib/meta/convertMetaObjectType.js +5 -1
  76. package/lib/meta/convertMetaObjectType.js.map +1 -1
  77. package/lib/meta/convertMetaQueryFunctionType.d.ts +1 -1
  78. package/lib/meta/convertMetaQueryFunctionType.js.map +1 -1
  79. package/lib/meta/convertMetaTypeDef.d.ts +1 -1
  80. package/lib/meta/convertMetaTypeDef.d.ts.map +1 -1
  81. package/lib/meta/convertMetaTypeDef.js +7 -1
  82. package/lib/meta/convertMetaTypeDef.js.map +1 -1
  83. package/lib/meta/convertMetaValueType.d.ts +2 -2
  84. package/lib/meta/convertMetaValueType.d.ts.map +1 -1
  85. package/lib/meta/convertMetaValueType.js.map +1 -1
  86. package/lib/meta/convertOmsActionParameterMetadata.d.ts +1 -1
  87. package/lib/meta/convertOmsActionParameterMetadata.js +1 -1
  88. package/lib/meta/convertOmsActionParameterMetadata.js.map +1 -1
  89. package/lib/meta/index.d.ts +2 -4
  90. package/lib/meta/index.js +2 -4
  91. package/lib/meta/listObjectTypes.d.ts +6 -0
  92. package/lib/meta/listObjectTypes.d.ts.map +1 -0
  93. package/lib/meta/listObjectTypes.js +13 -0
  94. package/lib/meta/listObjectTypes.js.map +1 -0
  95. package/lib/meta/loadActionTypeOmsMetadata.d.ts +1 -0
  96. package/lib/meta/loadActions.d.ts +7 -0
  97. package/lib/meta/loadActions.d.ts.map +1 -0
  98. package/lib/meta/loadActions.js +20 -0
  99. package/lib/meta/loadActions.js.map +1 -0
  100. package/lib/meta/loadEntities.d.ts +9 -0
  101. package/lib/meta/loadEntities.d.ts.map +1 -0
  102. package/lib/meta/loadEntities.js +73 -0
  103. package/lib/meta/loadEntities.js.map +1 -0
  104. package/lib/meta/loadQueryFunctions.d.ts +11 -0
  105. package/lib/meta/loadQueryFunctions.d.ts.map +1 -0
  106. package/lib/meta/loadQueryFunctions.js +18 -0
  107. package/lib/meta/loadQueryFunctions.js.map +1 -0
  108. package/lib/meta/planMetaLookup.d.ts +12 -0
  109. package/lib/meta/planMetaLookup.d.ts.map +1 -0
  110. package/lib/meta/planMetaLookup.js +44 -0
  111. package/lib/meta/planMetaLookup.js.map +1 -0
  112. package/lib/platform.d.ts +78 -0
  113. package/lib/platform.d.ts.map +1 -0
  114. package/lib/platform.js +116 -0
  115. package/lib/platform.js.map +1 -0
  116. package/lib/platformCollections.d.ts +68 -0
  117. package/lib/platformCollections.d.ts.map +1 -0
  118. package/lib/platformCollections.js +7 -0
  119. package/lib/platformCollections.js.map +1 -0
  120. package/lib/serviceConnector.d.ts +8 -0
  121. package/lib/serviceConnector.d.ts.map +1 -0
  122. package/lib/serviceConnector.js +105 -0
  123. package/lib/serviceConnector.js.map +1 -0
  124. package/lib/stagedWrites.d.ts +3 -2
  125. package/lib/stagedWrites.d.ts.map +1 -1
  126. package/lib/stagedWrites.js +30 -3
  127. package/lib/stagedWrites.js.map +1 -1
  128. package/lib/users/admin.d.ts +105 -0
  129. package/lib/users/admin.d.ts.map +1 -0
  130. package/lib/users/admin.js +35 -0
  131. package/lib/users/admin.js.map +1 -0
  132. package/lib/users/createFoundryUsersIntegration.d.ts +2 -2
  133. package/lib/users/createFoundryUsersIntegration.d.ts.map +1 -1
  134. package/lib/users/createFoundryUsersIntegration.js +4 -6
  135. package/lib/users/createFoundryUsersIntegration.js.map +1 -1
  136. package/lib/users/foundryUser.d.ts +2 -2
  137. package/lib/users/foundryUser.js +1 -1
  138. package/lib/users/foundryUser.js.map +1 -1
  139. package/lib/users/index.d.ts +2 -3
  140. package/lib/users/index.js +2 -3
  141. package/lib/users/loadUserSubset.d.ts +8 -0
  142. package/lib/users/loadUserSubset.d.ts.map +1 -0
  143. package/lib/users/loadUserSubset.js +166 -0
  144. package/lib/users/loadUserSubset.js.map +1 -0
  145. package/lib/utils/AsyncIterable.d.ts +1 -1
  146. package/lib/utils/AsyncIterable.d.ts.map +1 -1
  147. package/lib/utils/AsyncIterable.js +11 -0
  148. package/lib/utils/AsyncIterable.js.map +1 -1
  149. package/package.json +17 -16
  150. package/lib/adapter/convertLoadSubsetOptions.d.ts +0 -8
  151. package/lib/adapter/convertLoadSubsetOptions.d.ts.map +0 -1
  152. package/lib/adapter/convertLoadSubsetOptions.js +0 -178
  153. package/lib/adapter/convertLoadSubsetOptions.js.map +0 -1
  154. package/lib/adapter/createFoundryOntologyBackendAdapter.d.ts +0 -29
  155. package/lib/adapter/createFoundryOntologyBackendAdapter.d.ts.map +0 -1
  156. package/lib/adapter/createFoundryOntologyBackendAdapter.js +0 -311
  157. package/lib/adapter/createFoundryOntologyBackendAdapter.js.map +0 -1
  158. package/lib/adapter/objectCollectionOptions.d.ts +0 -31
  159. package/lib/adapter/objectCollectionOptions.d.ts.map +0 -1
  160. package/lib/adapter/objectCollectionOptions.js +0 -448
  161. package/lib/adapter/objectCollectionOptions.js.map +0 -1
  162. package/lib/config/applyAttachmentConstraintOverrides.d.ts +0 -10
  163. package/lib/config/applyAttachmentConstraintOverrides.d.ts.map +0 -1
  164. package/lib/config/applyAttachmentConstraintOverrides.js +0 -50
  165. package/lib/config/applyAttachmentConstraintOverrides.js.map +0 -1
  166. package/lib/connection.d.ts +0 -38
  167. package/lib/connection.d.ts.map +0 -1
  168. package/lib/connection.js +0 -195
  169. package/lib/connection.js.map +0 -1
  170. package/lib/installation/createFoundryBackendInstallation.d.ts +0 -29
  171. package/lib/installation/createFoundryBackendInstallation.d.ts.map +0 -1
  172. package/lib/installation/createFoundryBackendInstallation.js +0 -60
  173. package/lib/installation/createFoundryBackendInstallation.js.map +0 -1
  174. package/lib/installation/index.d.ts +0 -2
  175. package/lib/installation/index.js +0 -2
  176. package/lib/meta/actionTypeCollectionOptions.d.ts +0 -14
  177. package/lib/meta/actionTypeCollectionOptions.d.ts.map +0 -1
  178. package/lib/meta/actionTypeCollectionOptions.js +0 -58
  179. package/lib/meta/actionTypeCollectionOptions.js.map +0 -1
  180. package/lib/meta/convertActionTypeLoadSubsetOptions.d.ts +0 -7
  181. package/lib/meta/convertActionTypeLoadSubsetOptions.d.ts.map +0 -1
  182. package/lib/meta/convertActionTypeLoadSubsetOptions.js +0 -84
  183. package/lib/meta/convertActionTypeLoadSubsetOptions.js.map +0 -1
  184. package/lib/meta/createFoundryMetaOntologyBackendAdapter.d.ts +0 -11
  185. package/lib/meta/createFoundryMetaOntologyBackendAdapter.d.ts.map +0 -1
  186. package/lib/meta/createFoundryMetaOntologyBackendAdapter.js +0 -43
  187. package/lib/meta/createFoundryMetaOntologyBackendAdapter.js.map +0 -1
  188. package/lib/meta/entityCollectionOptions.d.ts +0 -24
  189. package/lib/meta/entityCollectionOptions.d.ts.map +0 -1
  190. package/lib/meta/entityCollectionOptions.js +0 -69
  191. package/lib/meta/entityCollectionOptions.js.map +0 -1
  192. package/lib/meta/queryFunctionTypeCollectionOptions.d.ts +0 -12
  193. package/lib/meta/queryFunctionTypeCollectionOptions.d.ts.map +0 -1
  194. package/lib/meta/queryFunctionTypeCollectionOptions.js +0 -59
  195. package/lib/meta/queryFunctionTypeCollectionOptions.js.map +0 -1
  196. package/lib/users/createFoundryAdminOntologyRoute.d.ts +0 -55
  197. package/lib/users/createFoundryAdminOntologyRoute.d.ts.map +0 -1
  198. package/lib/users/createFoundryAdminOntologyRoute.js +0 -33
  199. package/lib/users/createFoundryAdminOntologyRoute.js.map +0 -1
  200. package/lib/users/userCollectionOptions.d.ts +0 -24
  201. package/lib/users/userCollectionOptions.d.ts.map +0 -1
  202. package/lib/users/userCollectionOptions.js +0 -94
  203. package/lib/users/userCollectionOptions.js.map +0 -1
@@ -1,38 +0,0 @@
1
- import { BackendConnectionAdapterProvider, Connection } from "@party-stack/connections";
2
- import { BrowserAuthenticationPresentation } from "@party-stack/runtime";
3
- //#region src/connection.d.ts
4
- export interface FoundryOAuthConnectionOptions {
5
- clientId: string;
6
- redirectUrl: string;
7
- scopes?: string[];
8
- fetch?: typeof globalThis.fetch;
9
- dangerouslyPersistSecrets?: boolean;
10
- }
11
- export interface FoundryClientCredentialsConnectionOptions {
12
- clientId: string;
13
- clientSecret: string;
14
- userId?: string;
15
- scopes?: string[];
16
- fetch?: typeof globalThis.fetch;
17
- }
18
- export interface CreateFoundryConnectionAdapterOptions {
19
- baseUrl: string;
20
- oauth?: FoundryOAuthConnectionOptions;
21
- clientCredentials?: FoundryClientCredentialsConnectionOptions;
22
- token?: string;
23
- }
24
- export interface FoundryAuthenticationClient {
25
- completeOAuthRedirect(url: string): Promise<Connection<"active"> | undefined>;
26
- signIn: {
27
- oauth(options?: {
28
- browserPresentation?: BrowserAuthenticationPresentation;
29
- }): Promise<Connection<"active">>;
30
- clientCredentials(): Promise<Connection<"active">>;
31
- apiToken(options?: {
32
- token?: string;
33
- }): Promise<Connection<"active">>;
34
- };
35
- }
36
- export declare function createFoundryConnectionAdapter(options: CreateFoundryConnectionAdapterOptions): BackendConnectionAdapterProvider<FoundryAuthenticationClient>;
37
- //#endregion
38
- //# sourceMappingURL=connection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection.d.ts","names":[],"sources":["../src/connection.ts"],"mappings":";;;iBAsBiB;EACb;EACA;EACA;EACA,eAAe,WAAW;EAC1B;;iBAGa;EACb;EACA;EACA;EACA;EACA,eAAe,WAAW;;iBAGb;EACb;EACA,QAAQ;EACR,oBAAoB;EACpB;;iBAGa;EACb,sBAAsB,cAAc,QAAQ;EAC5C;IACI,MAAM;MACF,sBAAsB;QACtB,QAAQ;IACZ,qBAAqB,QAAQ;IAC7B,SAAS;MAAY;QAAmB,QAAQ;;;wBA2PxC,+BACZ,SAAS,wCACV,iCAAiC"}
package/lib/connection.js DELETED
@@ -1,195 +0,0 @@
1
- import { withHttpAuthenticationErrorHandling, withHttpRetryHandling } from "@party-stack/connections";
2
- import { unauthenticated } from "@party-stack/errors";
3
- import { createFoundryFetch, createFoundryWebSocket, getTokenDetails } from "@party-stack/foundry-client";
4
- import { createClientCredentialsOAuthClient, createPublicOAuthClient } from "@party-stack/oauth";
5
- //#region src/connection.ts
6
- const DEFAULT_SCOPES = [
7
- "api:use-ontologies-read",
8
- "api:use-ontologies-write",
9
- "api:use-mediasets-read",
10
- "api:use-mediasets-write",
11
- "ontology:view-unredacted-action-type",
12
- "ontology:view-object-type"
13
- ];
14
- function activeState(expiresAt, refreshable) {
15
- return expiresAt === void 0 ? { status: "active" } : {
16
- status: "active",
17
- expiration: {
18
- expiresAt,
19
- refreshable
20
- }
21
- };
22
- }
23
- function createFoundryEgressWrapper(options) {
24
- return (handlers) => {
25
- const fetch = createFoundryFetch({
26
- baseUrl: options.baseUrl,
27
- tokenProvider: options.tokenProvider,
28
- fetch: (input, init) => handlers.fetch(new Request(input, init))
29
- });
30
- const createWebSocket = createFoundryWebSocket({
31
- baseUrl: options.baseUrl,
32
- tokenProvider: options.tokenProvider,
33
- createWebSocket: (url, protocols) => handlers.createWebSocket(url, protocols)
34
- });
35
- return withHttpAuthenticationErrorHandling(withHttpRetryHandling({
36
- fetch: (request) => fetch(request),
37
- createWebSocket
38
- }));
39
- };
40
- }
41
- async function createFoundryConnectionAdapterInstance(options, context) {
42
- let tokenActive = Boolean(options.token);
43
- const publicOauth = options.oauth ? await createPublicOAuthClient({
44
- clientId: options.oauth.clientId,
45
- redirectUrl: options.oauth.redirectUrl,
46
- scopes: [.../* @__PURE__ */ new Set(["offline_access", ...options.oauth.scopes ?? DEFAULT_SCOPES])],
47
- authorizationServer: {
48
- issuer: new URL("multipass/", options.baseUrl.endsWith("/") ? options.baseUrl : `${options.baseUrl}/`).toString(),
49
- authorizationEndpoint: new URL("multipass/api/oauth2/authorize", options.baseUrl.endsWith("/") ? options.baseUrl : `${options.baseUrl}/`).toString(),
50
- tokenEndpoint: new URL("multipass/api/oauth2/token", options.baseUrl.endsWith("/") ? options.baseUrl : `${options.baseUrl}/`).toString(),
51
- revocationEndpoint: new URL("multipass/api/oauth2/revoke_token", options.baseUrl.endsWith("/") ? options.baseUrl : `${options.baseUrl}/`).toString()
52
- },
53
- runtime: context.runtime,
54
- fetch: options.oauth.fetch,
55
- dangerouslyPersistSecrets: options.oauth.dangerouslyPersistSecrets,
56
- resolveUserId: (token) => getTokenDetails(token).userId
57
- }) : void 0;
58
- const clientCredentialsOauth = options.clientCredentials ? createClientCredentialsOAuthClient({
59
- clientId: options.clientCredentials.clientId,
60
- clientSecret: options.clientCredentials.clientSecret,
61
- tokenEndpoint: new URL("multipass/api/oauth2/token", options.baseUrl.endsWith("/") ? options.baseUrl : `${options.baseUrl}/`).toString(),
62
- tokenEndpointAuthMethod: "client_secret_basic",
63
- revocationEndpoint: new URL("multipass/api/oauth2/revoke_token", options.baseUrl.endsWith("/") ? options.baseUrl : `${options.baseUrl}/`).toString(),
64
- scopes: options.clientCredentials.scopes ?? DEFAULT_SCOPES,
65
- fetch: options.clientCredentials.fetch,
66
- resolveUserId: (token) => options.clientCredentials?.userId ?? getTokenDetails(token).userId
67
- }) : void 0;
68
- const createTokenSession = (candidate) => {
69
- const token = candidate ?? options.token;
70
- if (!token) throw new Error("Foundry API token connections are not configured.");
71
- const { userId, expiresAt } = getTokenDetails(token);
72
- return {
73
- connection: {
74
- userId,
75
- state: activeState(expiresAt, false)
76
- },
77
- session: {
78
- disconnect() {
79
- if (token === options.token) tokenActive = false;
80
- return Promise.resolve();
81
- },
82
- egress: createFoundryEgressWrapper({
83
- baseUrl: options.baseUrl,
84
- tokenProvider: () => Promise.resolve(token)
85
- })
86
- }
87
- };
88
- };
89
- const createClientCredentialsSession = async (oauth, forceRefresh = false) => {
90
- const oauthSession = forceRefresh ? await oauth.refresh() : await oauth.getSession();
91
- return {
92
- connection: {
93
- userId: oauthSession.userId,
94
- state: activeState(oauthSession.expiration?.expiresAt, true)
95
- },
96
- session: {
97
- refresh: () => createClientCredentialsSession(oauth, true),
98
- disconnect: () => oauth.revoke(),
99
- egress: createFoundryEgressWrapper({
100
- baseUrl: options.baseUrl,
101
- tokenProvider: () => oauth.getAccessToken()
102
- })
103
- }
104
- };
105
- };
106
- const createPublicSession = (oauthSession) => {
107
- const userId = oauthSession.userId;
108
- return {
109
- connection: {
110
- userId,
111
- state: activeState(oauthSession.expiration?.expiresAt, oauthSession.expiration?.refreshable ?? false)
112
- },
113
- session: {
114
- async refresh() {
115
- if (!publicOauth) throw unauthenticated("Foundry public OAuth is not configured.");
116
- return createPublicSession(await publicOauth.refresh(userId));
117
- },
118
- async disconnect() {
119
- await publicOauth?.revoke(userId);
120
- },
121
- egress: createFoundryEgressWrapper({
122
- baseUrl: options.baseUrl,
123
- tokenProvider: () => {
124
- if (!publicOauth) throw unauthenticated("Foundry public OAuth is not configured.");
125
- return publicOauth.getAccessToken(userId);
126
- }
127
- })
128
- }
129
- };
130
- };
131
- return {
132
- name: "foundry",
133
- createAuthenticationClient(controller) {
134
- return {
135
- async completeOAuthRedirect(url) {
136
- if (!publicOauth) return;
137
- const session = await publicOauth.completeRedirect(url);
138
- if (!session) return;
139
- const connectionSession = createPublicSession(session);
140
- await controller.connect(connectionSession);
141
- return connectionSession.connection;
142
- },
143
- signIn: {
144
- async oauth(authenticationOptions = {}) {
145
- if (!publicOauth) throw new Error("Foundry public OAuth is not configured.");
146
- const session = await publicOauth.signIn({ browserPresentation: authenticationOptions.browserPresentation });
147
- const connectionSession = createPublicSession(session);
148
- await controller.connect(connectionSession);
149
- return connectionSession.connection;
150
- },
151
- async clientCredentials() {
152
- if (!clientCredentialsOauth) throw new Error("Foundry client credentials are not configured.");
153
- if (typeof window !== "undefined") throw new Error("Foundry client credentials cannot run in a browser.");
154
- const session = await createClientCredentialsSession(clientCredentialsOauth);
155
- await controller.connect(session);
156
- return session.connection;
157
- },
158
- async apiToken(authenticationOptions = {}) {
159
- const session = createTokenSession(authenticationOptions.token);
160
- if (authenticationOptions.token === void 0 && options.token) tokenActive = true;
161
- await controller.connect(session);
162
- return session.connection;
163
- }
164
- }
165
- };
166
- },
167
- async restoreConnections() {
168
- const restored = /* @__PURE__ */ new Map();
169
- if (tokenActive && options.token) {
170
- const session = createTokenSession();
171
- restored.set(session.connection.userId, session);
172
- }
173
- if (publicOauth) for (const oauthSession of await publicOauth.restoreSessions()) {
174
- const session = createPublicSession(oauthSession);
175
- restored.set(session.connection.userId, session);
176
- }
177
- if (clientCredentialsOauth && typeof window === "undefined") {
178
- const session = await createClientCredentialsSession(clientCredentialsOauth);
179
- restored.set(session.connection.userId, session);
180
- }
181
- return [...restored.values()];
182
- },
183
- async cleanup() {
184
- await publicOauth?.cleanup();
185
- clientCredentialsOauth?.cleanup();
186
- }
187
- };
188
- }
189
- function createFoundryConnectionAdapter(options) {
190
- return (context) => createFoundryConnectionAdapterInstance(options, context);
191
- }
192
- //#endregion
193
- export { createFoundryConnectionAdapter };
194
-
195
- //# sourceMappingURL=connection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection.js","names":[],"sources":["../src/connection.ts"],"sourcesContent":["import {\n type BackendConnectionAdapter,\n type BackendConnectionAdapterContext,\n type BackendConnectionAdapterProvider,\n type Connection,\n type ConnectionEgressHandlers,\n type ConnectionSession,\n type EstablishedConnection,\n withHttpAuthenticationErrorHandling,\n withHttpRetryHandling,\n} from \"@party-stack/connections\";\nimport { unauthenticated } from \"@party-stack/errors\";\nimport { createFoundryFetch, createFoundryWebSocket, getTokenDetails } from \"@party-stack/foundry-client\";\nimport {\n createClientCredentialsOAuthClient,\n createPublicOAuthClient,\n type ClientCredentialsOAuthClient,\n type OAuthSession,\n type PublicOAuthClient,\n} from \"@party-stack/oauth\";\nimport type { BrowserAuthenticationPresentation } from \"@party-stack/runtime\";\n\nexport interface FoundryOAuthConnectionOptions {\n clientId: string;\n redirectUrl: string;\n scopes?: string[];\n fetch?: typeof globalThis.fetch;\n dangerouslyPersistSecrets?: boolean;\n}\n\nexport interface FoundryClientCredentialsConnectionOptions {\n clientId: string;\n clientSecret: string;\n userId?: string;\n scopes?: string[];\n fetch?: typeof globalThis.fetch;\n}\n\nexport interface CreateFoundryConnectionAdapterOptions {\n baseUrl: string;\n oauth?: FoundryOAuthConnectionOptions;\n clientCredentials?: FoundryClientCredentialsConnectionOptions;\n token?: string;\n}\n\nexport interface FoundryAuthenticationClient {\n completeOAuthRedirect(url: string): Promise<Connection<\"active\"> | undefined>;\n signIn: {\n oauth(options?: {\n browserPresentation?: BrowserAuthenticationPresentation;\n }): Promise<Connection<\"active\">>;\n clientCredentials(): Promise<Connection<\"active\">>;\n apiToken(options?: { token?: string }): Promise<Connection<\"active\">>;\n };\n}\n\nconst DEFAULT_SCOPES = [\n \"api:use-ontologies-read\",\n \"api:use-ontologies-write\",\n \"api:use-mediasets-read\",\n \"api:use-mediasets-write\",\n \"ontology:view-unredacted-action-type\",\n \"ontology:view-object-type\",\n];\n\nfunction activeState(expiresAt: number | undefined, refreshable: boolean): Connection<\"active\">[\"state\"] {\n return expiresAt === undefined\n ? { status: \"active\" }\n : {\n status: \"active\",\n expiration: {\n expiresAt,\n refreshable,\n },\n };\n}\n\nfunction createFoundryEgressWrapper(options: {\n baseUrl: string;\n tokenProvider: () => Promise<string>;\n}): (handlers: ConnectionEgressHandlers) => ConnectionEgressHandlers {\n return (handlers) => {\n const fetch = createFoundryFetch({\n baseUrl: options.baseUrl,\n tokenProvider: options.tokenProvider,\n fetch: (input, init) => handlers.fetch(new Request(input, init)),\n });\n const createWebSocket = createFoundryWebSocket({\n baseUrl: options.baseUrl,\n tokenProvider: options.tokenProvider,\n createWebSocket: (url, protocols) => handlers.createWebSocket(url, protocols),\n });\n return withHttpAuthenticationErrorHandling(\n withHttpRetryHandling({\n fetch: (request) => fetch(request),\n createWebSocket,\n })\n );\n };\n}\n\nasync function createFoundryConnectionAdapterInstance(\n options: CreateFoundryConnectionAdapterOptions,\n context: BackendConnectionAdapterContext\n): Promise<BackendConnectionAdapter<FoundryAuthenticationClient>> {\n let tokenActive = Boolean(options.token);\n const publicOauth: PublicOAuthClient | undefined = options.oauth\n ? await createPublicOAuthClient({\n clientId: options.oauth.clientId,\n redirectUrl: options.oauth.redirectUrl,\n scopes: [...new Set([\"offline_access\", ...(options.oauth.scopes ?? DEFAULT_SCOPES)])],\n authorizationServer: {\n issuer: new URL(\n \"multipass/\",\n options.baseUrl.endsWith(\"/\") ? options.baseUrl : `${options.baseUrl}/`\n ).toString(),\n authorizationEndpoint: new URL(\n \"multipass/api/oauth2/authorize\",\n options.baseUrl.endsWith(\"/\") ? options.baseUrl : `${options.baseUrl}/`\n ).toString(),\n tokenEndpoint: new URL(\n \"multipass/api/oauth2/token\",\n options.baseUrl.endsWith(\"/\") ? options.baseUrl : `${options.baseUrl}/`\n ).toString(),\n revocationEndpoint: new URL(\n \"multipass/api/oauth2/revoke_token\",\n options.baseUrl.endsWith(\"/\") ? options.baseUrl : `${options.baseUrl}/`\n ).toString(),\n },\n runtime: context.runtime,\n fetch: options.oauth.fetch,\n dangerouslyPersistSecrets: options.oauth.dangerouslyPersistSecrets,\n resolveUserId: (token) => getTokenDetails(token).userId,\n })\n : undefined;\n const clientCredentialsOauth: ClientCredentialsOAuthClient | undefined = options.clientCredentials\n ? createClientCredentialsOAuthClient({\n clientId: options.clientCredentials.clientId,\n clientSecret: options.clientCredentials.clientSecret,\n tokenEndpoint: new URL(\n \"multipass/api/oauth2/token\",\n options.baseUrl.endsWith(\"/\") ? options.baseUrl : `${options.baseUrl}/`\n ).toString(),\n tokenEndpointAuthMethod: \"client_secret_basic\",\n revocationEndpoint: new URL(\n \"multipass/api/oauth2/revoke_token\",\n options.baseUrl.endsWith(\"/\") ? options.baseUrl : `${options.baseUrl}/`\n ).toString(),\n scopes: options.clientCredentials.scopes ?? DEFAULT_SCOPES,\n fetch: options.clientCredentials.fetch,\n resolveUserId: (token) => options.clientCredentials?.userId ?? getTokenDetails(token).userId,\n })\n : undefined;\n\n const createTokenSession = (candidate?: string): EstablishedConnection => {\n const token = candidate ?? options.token;\n if (!token) {\n throw new Error(\"Foundry API token connections are not configured.\");\n }\n const { userId, expiresAt } = getTokenDetails(token);\n const connection: Connection<\"active\"> = {\n userId,\n state: activeState(expiresAt, false),\n };\n const session: ConnectionSession = {\n disconnect() {\n if (token === options.token) {\n tokenActive = false;\n }\n return Promise.resolve();\n },\n egress: createFoundryEgressWrapper({\n baseUrl: options.baseUrl,\n tokenProvider: () => Promise.resolve(token),\n }),\n };\n return { connection, session };\n };\n\n const createClientCredentialsSession = async (\n oauth: ClientCredentialsOAuthClient,\n forceRefresh = false\n ): Promise<EstablishedConnection> => {\n const oauthSession = forceRefresh ? await oauth.refresh() : await oauth.getSession();\n const userId = oauthSession.userId;\n const connection: Connection<\"active\"> = {\n userId,\n state: activeState(oauthSession.expiration?.expiresAt, true),\n };\n const session: ConnectionSession = {\n refresh: () => createClientCredentialsSession(oauth, true),\n disconnect: () => oauth.revoke(),\n egress: createFoundryEgressWrapper({\n baseUrl: options.baseUrl,\n tokenProvider: () => oauth.getAccessToken(),\n }),\n };\n return { connection, session };\n };\n\n const createPublicSession = (oauthSession: OAuthSession): EstablishedConnection => {\n const userId = oauthSession.userId;\n const connection: Connection<\"active\"> = {\n userId,\n state: activeState(\n oauthSession.expiration?.expiresAt,\n oauthSession.expiration?.refreshable ?? false\n ),\n };\n const session: ConnectionSession = {\n async refresh() {\n if (!publicOauth) {\n throw unauthenticated(\"Foundry public OAuth is not configured.\");\n }\n return createPublicSession(await publicOauth.refresh(userId));\n },\n async disconnect() {\n await publicOauth?.revoke(userId);\n },\n egress: createFoundryEgressWrapper({\n baseUrl: options.baseUrl,\n tokenProvider: () => {\n if (!publicOauth) {\n throw unauthenticated(\"Foundry public OAuth is not configured.\");\n }\n return publicOauth.getAccessToken(userId);\n },\n }),\n };\n return { connection, session };\n };\n\n return {\n name: \"foundry\",\n createAuthenticationClient(controller) {\n return {\n async completeOAuthRedirect(url) {\n if (!publicOauth) return;\n const session = await publicOauth.completeRedirect(url);\n if (!session) return;\n const connectionSession = createPublicSession(session);\n await controller.connect(connectionSession);\n return connectionSession.connection;\n },\n signIn: {\n async oauth(authenticationOptions = {}) {\n if (!publicOauth) {\n throw new Error(\"Foundry public OAuth is not configured.\");\n }\n const session = await publicOauth.signIn({\n browserPresentation: authenticationOptions.browserPresentation,\n });\n const connectionSession = createPublicSession(session);\n await controller.connect(connectionSession);\n return connectionSession.connection;\n },\n async clientCredentials() {\n if (!clientCredentialsOauth) {\n throw new Error(\"Foundry client credentials are not configured.\");\n }\n if (typeof window !== \"undefined\") {\n throw new Error(\"Foundry client credentials cannot run in a browser.\");\n }\n const session = await createClientCredentialsSession(clientCredentialsOauth);\n await controller.connect(session);\n return session.connection;\n },\n async apiToken(authenticationOptions = {}) {\n const session = createTokenSession(authenticationOptions.token);\n if (authenticationOptions.token === undefined && options.token) {\n tokenActive = true;\n }\n await controller.connect(session);\n return session.connection;\n },\n },\n };\n },\n async restoreConnections() {\n const restored = new Map<string, EstablishedConnection>();\n if (tokenActive && options.token) {\n const session = createTokenSession();\n restored.set(session.connection.userId, session);\n }\n if (publicOauth) {\n for (const oauthSession of await publicOauth.restoreSessions()) {\n const session = createPublicSession(oauthSession);\n restored.set(session.connection.userId, session);\n }\n }\n if (clientCredentialsOauth && typeof window === \"undefined\") {\n const session = await createClientCredentialsSession(clientCredentialsOauth);\n restored.set(session.connection.userId, session);\n }\n return [...restored.values()];\n },\n async cleanup() {\n await publicOauth?.cleanup();\n clientCredentialsOauth?.cleanup();\n },\n };\n}\n\nexport function createFoundryConnectionAdapter(\n options: CreateFoundryConnectionAdapterOptions\n): BackendConnectionAdapterProvider<FoundryAuthenticationClient> {\n return (context) => createFoundryConnectionAdapterInstance(options, context);\n}\n"],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- import { FoundryUsersIntegration } from "../adapter/createFoundryOntologyBackendAdapter.js";
2
- import { CreateFoundryConnectionAdapterOptions, FoundryAuthenticationClient } from "../connection.js";
3
- import { BackendConnectionAdapterProvider } from "@party-stack/connections";
4
- import { LiveOntologyWrites, OntologyBackendInstallation, OntologyIR, OntologyRoute } from "@party-stack/ontology";
5
- import { RuntimeAdapterProvider } from "@party-stack/runtime";
6
- //#region src/installation/createFoundryBackendInstallation.d.ts
7
- export type FoundryConnectionOptions = Omit<CreateFoundryConnectionAdapterOptions, "baseUrl">;
8
- export type FoundryOntologyRoute = (baseUrl: string) => OntologyRoute;
9
- export interface CreateFoundryBackendInstallationOptions<AuthenticationClient extends object = FoundryAuthenticationClient> {
10
- installationId?: string;
11
- baseUrl: string;
12
- runtime: RuntimeAdapterProvider;
13
- connections: FoundryConnectionOptions | BackendConnectionAdapterProvider<AuthenticationClient>;
14
- routes: readonly FoundryOntologyRoute[];
15
- createContext?: (userId: string, ontologyId: string) => Record<string, unknown>;
16
- }
17
- export declare function createFoundryOntologyRoute(options: {
18
- ontologyId: string;
19
- ir?: OntologyIR;
20
- users?: FoundryUsersIntegration | ((userId: string) => FoundryUsersIntegration);
21
- live?: boolean;
22
- persistObjects?: boolean;
23
- writes?: LiveOntologyWrites;
24
- /** Metadata polling interval in milliseconds, or false to disable. Only applies when IR is omitted. */
25
- metaRefetchInterval?: number | false;
26
- }): FoundryOntologyRoute;
27
- export declare function createFoundryBackendInstallation<AuthenticationClient extends object = FoundryAuthenticationClient>(options: CreateFoundryBackendInstallationOptions<AuthenticationClient>): Promise<OntologyBackendInstallation<AuthenticationClient>>;
28
- //#endregion
29
- //# sourceMappingURL=createFoundryBackendInstallation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createFoundryBackendInstallation.d.ts","names":[],"sources":["../../src/installation/createFoundryBackendInstallation.ts"],"mappings":";;;;;;YAwBY,2BAA2B,KAAK;YAChC,wBAAwB,oBAAoB;iBAEvC,wCACb,sCAAsC;EAEtC;EACA;EACA,SAAS;EACT,aAAa,2BAA2B,iCAAiC;EACzE,iBAAiB;EACjB,iBAAiB,gBAAgB,uBAAuB;;wBA8B5C,2BAA2B;EACvC;EACA,KAAK;EACL,QAAQ,4BAA4B,mBAAmB;EACvD;EACA;EACA,SAAS;;EAET;IACA;wBA+BY,iCACZ,sCAAsC,6BAEtC,SAAS,wCAAwC,wBAClD,QAAQ,4BAA4B"}
@@ -1,60 +0,0 @@
1
- import { createFoundryConnectionAdapter } from "../connection.js";
2
- import { createFoundryOntologyBackend } from "../adapter/createFoundryOntologyBackendAdapter.js";
3
- import { createFoundryMetaOntologyBackendAdapter } from "../meta/createFoundryMetaOntologyBackendAdapter.js";
4
- import { createOntologyClient } from "@party-stack/foundry-client";
5
- import { createMetaOntologyConfiguration, createOntologyBackendInstallation } from "@party-stack/ontology";
6
- //#region src/installation/createFoundryBackendInstallation.ts
7
- function createConnectionOntologyClient(baseUrl, ontologyId, egress) {
8
- return createOntologyClient({
9
- baseUrl,
10
- ontologyRid: ontologyId,
11
- tokenProvider: () => Promise.resolve("party-stack"),
12
- fetch: egress.fetch,
13
- createWebSocket: (url, protocols) => egress.createWebSocket(url, protocols)
14
- });
15
- }
16
- function configureFoundryMeta(baseUrl, options, metaRefetchInterval) {
17
- const client = createConnectionOntologyClient(baseUrl, options.ontologyId, options.egress);
18
- return createMetaOntologyConfiguration({ backend: () => createFoundryMetaOntologyBackendAdapter({
19
- client,
20
- refetchInterval: metaRefetchInterval
21
- }) });
22
- }
23
- function createFoundryOntologyRoute(options) {
24
- return (baseUrl) => {
25
- const route = { matches: (ontologyId) => ontologyId === options.ontologyId };
26
- const ir = options.ir;
27
- if (ir) route.configure = ({ connection, egress }) => {
28
- const client = createConnectionOntologyClient(baseUrl, options.ontologyId, egress);
29
- return {
30
- ir,
31
- backend: createFoundryOntologyBackend({
32
- client,
33
- users: typeof options.users === "function" ? options.users(connection.userId) : options.users,
34
- live: options.live
35
- }),
36
- persistObjects: options.persistObjects,
37
- writes: options.writes
38
- };
39
- };
40
- else route.configureMeta = (configureOptions) => configureFoundryMeta(baseUrl, configureOptions, options.metaRefetchInterval);
41
- return route;
42
- };
43
- }
44
- function createFoundryBackendInstallation(options) {
45
- const connectionAdapter = typeof options.connections === "function" ? options.connections : createFoundryConnectionAdapter({
46
- ...options.connections,
47
- baseUrl: options.baseUrl
48
- });
49
- return createOntologyBackendInstallation({
50
- installationId: options.installationId ?? new URL(options.baseUrl).origin,
51
- connections: connectionAdapter,
52
- runtime: options.runtime,
53
- routes: options.routes.map((route) => route(options.baseUrl)),
54
- createContext: options.createContext
55
- });
56
- }
57
- //#endregion
58
- export { createFoundryBackendInstallation, createFoundryOntologyRoute };
59
-
60
- //# sourceMappingURL=createFoundryBackendInstallation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createFoundryBackendInstallation.js","names":[],"sources":["../../src/installation/createFoundryBackendInstallation.ts"],"sourcesContent":["import { createOntologyClient } from \"@party-stack/foundry-client\";\nimport {\n createMetaOntologyConfiguration,\n createOntologyBackendInstallation,\n type LiveOntologyWrites,\n type OntologyBackendInstallation,\n type ConfigureOntologyOptions,\n type OntologyConfiguration,\n type OntologyRoute,\n} from \"@party-stack/ontology\";\nimport {\n createFoundryOntologyBackend,\n type FoundryUsersIntegration,\n} from \"../adapter/createFoundryOntologyBackendAdapter.js\";\nimport {\n createFoundryConnectionAdapter,\n type CreateFoundryConnectionAdapterOptions,\n type FoundryAuthenticationClient,\n} from \"../connection.js\";\nimport { createFoundryMetaOntologyBackendAdapter } from \"../meta/createFoundryMetaOntologyBackendAdapter.js\";\nimport type { BackendConnectionAdapterProvider, ConnectionEgress } from \"@party-stack/connections\";\nimport type { OntologyIR } from \"@party-stack/ontology\";\nimport type { RuntimeAdapterProvider } from \"@party-stack/runtime\";\n\nexport type FoundryConnectionOptions = Omit<CreateFoundryConnectionAdapterOptions, \"baseUrl\">;\nexport type FoundryOntologyRoute = (baseUrl: string) => OntologyRoute;\n\nexport interface CreateFoundryBackendInstallationOptions<\n AuthenticationClient extends object = FoundryAuthenticationClient,\n> {\n installationId?: string;\n baseUrl: string;\n runtime: RuntimeAdapterProvider;\n connections: FoundryConnectionOptions | BackendConnectionAdapterProvider<AuthenticationClient>;\n routes: readonly FoundryOntologyRoute[];\n createContext?: (userId: string, ontologyId: string) => Record<string, unknown>;\n}\n\nfunction createConnectionOntologyClient(baseUrl: string, ontologyId: string, egress: ConnectionEgress) {\n return createOntologyClient({\n baseUrl,\n ontologyRid: ontologyId,\n // ConnectionEgress replaces this placeholder Authorization\n // header with the active connection token before network access.\n tokenProvider: () => Promise.resolve(\"party-stack\"),\n fetch: egress.fetch,\n createWebSocket: (url, protocols) => egress.createWebSocket(url, protocols),\n });\n}\n\nfunction configureFoundryMeta(\n baseUrl: string,\n options: ConfigureOntologyOptions,\n metaRefetchInterval?: number | false\n): OntologyConfiguration {\n const client = createConnectionOntologyClient(baseUrl, options.ontologyId, options.egress);\n return createMetaOntologyConfiguration({\n backend: () =>\n createFoundryMetaOntologyBackendAdapter({\n client,\n refetchInterval: metaRefetchInterval,\n }),\n });\n}\n\nexport function createFoundryOntologyRoute(options: {\n ontologyId: string;\n ir?: OntologyIR;\n users?: FoundryUsersIntegration | ((userId: string) => FoundryUsersIntegration);\n live?: boolean;\n persistObjects?: boolean;\n writes?: LiveOntologyWrites;\n /** Metadata polling interval in milliseconds, or false to disable. Only applies when IR is omitted. */\n metaRefetchInterval?: number | false;\n}): FoundryOntologyRoute {\n return (baseUrl) => {\n const route: OntologyRoute = {\n matches: (ontologyId) => ontologyId === options.ontologyId,\n };\n const ir = options.ir;\n if (ir) {\n route.configure = ({ connection, egress }) => {\n const client = createConnectionOntologyClient(baseUrl, options.ontologyId, egress);\n return {\n ir,\n backend: createFoundryOntologyBackend({\n client,\n users:\n typeof options.users === \"function\"\n ? options.users(connection.userId)\n : options.users,\n live: options.live,\n }),\n persistObjects: options.persistObjects,\n writes: options.writes,\n };\n };\n } else {\n route.configureMeta = (configureOptions) =>\n configureFoundryMeta(baseUrl, configureOptions, options.metaRefetchInterval);\n }\n return route;\n };\n}\n\nexport function createFoundryBackendInstallation<\n AuthenticationClient extends object = FoundryAuthenticationClient,\n>(\n options: CreateFoundryBackendInstallationOptions<AuthenticationClient>\n): Promise<OntologyBackendInstallation<AuthenticationClient>> {\n const connectionAdapter =\n typeof options.connections === \"function\"\n ? options.connections\n : (createFoundryConnectionAdapter({\n ...options.connections,\n baseUrl: options.baseUrl,\n }) as BackendConnectionAdapterProvider<AuthenticationClient>);\n return createOntologyBackendInstallation<AuthenticationClient>({\n installationId: options.installationId ?? new URL(options.baseUrl).origin,\n connections: connectionAdapter,\n runtime: options.runtime,\n routes: options.routes.map((route) => route(options.baseUrl)),\n createContext: options.createContext,\n });\n}\n"],"mappings":";;;;;;AAsCA,SAAS,+BAA+B,SAAiB,YAAoB,QAA0B;CACnG,OAAO,qBAAqB;EACxB;EACA,aAAa;EAGb,qBAAqB,QAAQ,QAAQ,aAAa;EAClD,OAAO,OAAO;EACd,kBAAkB,KAAK,cAAc,OAAO,gBAAgB,KAAK,SAAS;CAC9E,CAAC;AACL;AAEA,SAAS,qBACL,SACA,SACA,qBACqB;CACrB,MAAM,SAAS,+BAA+B,SAAS,QAAQ,YAAY,QAAQ,MAAM;CACzF,OAAO,gCAAgC,EACnC,eACI,wCAAwC;EACpC;EACA,iBAAiB;CACrB,CAAC,EACT,CAAC;AACL;AAEA,SAAgB,2BAA2B,SASlB;CACrB,QAAQ,YAAY;EAChB,MAAM,QAAuB,EACzB,UAAU,eAAe,eAAe,QAAQ,WACpD;EACA,MAAM,KAAK,QAAQ;EACnB,IAAI,IACA,MAAM,aAAa,EAAE,YAAY,aAAa;GAC1C,MAAM,SAAS,+BAA+B,SAAS,QAAQ,YAAY,MAAM;GACjF,OAAO;IACH;IACA,SAAS,6BAA6B;KAClC;KACA,OACI,OAAO,QAAQ,UAAU,aACnB,QAAQ,MAAM,WAAW,MAAM,IAC/B,QAAQ;KAClB,MAAM,QAAQ;IAClB,CAAC;IACD,gBAAgB,QAAQ;IACxB,QAAQ,QAAQ;GACpB;EACJ;OAEA,MAAM,iBAAiB,qBACnB,qBAAqB,SAAS,kBAAkB,QAAQ,mBAAmB;EAEnF,OAAO;CACX;AACJ;AAEA,SAAgB,iCAGZ,SAC0D;CAC1D,MAAM,oBACF,OAAO,QAAQ,gBAAgB,aACzB,QAAQ,cACP,+BAA+B;EAC5B,GAAG,QAAQ;EACX,SAAS,QAAQ;CACrB,CAAC;CACX,OAAO,kCAAwD;EAC3D,gBAAgB,QAAQ,kBAAkB,IAAI,IAAI,QAAQ,OAAO,CAAC,CAAC;EACnE,aAAa;EACb,SAAS,QAAQ;EACjB,QAAQ,QAAQ,OAAO,KAAK,UAAU,MAAM,QAAQ,OAAO,CAAC;EAC5D,eAAe,QAAQ;CAC3B,CAAC;AACL"}
@@ -1,2 +0,0 @@
1
- import { CreateFoundryBackendInstallationOptions, FoundryConnectionOptions, FoundryOntologyRoute, createFoundryBackendInstallation, createFoundryOntologyRoute } from "./createFoundryBackendInstallation.js";
2
- export { type CreateFoundryBackendInstallationOptions, type FoundryConnectionOptions, type FoundryOntologyRoute, createFoundryBackendInstallation, createFoundryOntologyRoute };
@@ -1,2 +0,0 @@
1
- import { createFoundryBackendInstallation, createFoundryOntologyRoute } from "./createFoundryBackendInstallation.js";
2
- export { createFoundryBackendInstallation, createFoundryOntologyRoute };
@@ -1,14 +0,0 @@
1
- import { OntologyClient } from "@party-stack/foundry-client";
2
- import { ActionTypeV2 } from "@osdk/foundry.ontologies";
3
- import { OntologyCollectionOptions } from "@party-stack/ontology";
4
- import { QueryClient } from "@tanstack/query-core";
5
- //#region src/meta/actionTypeCollectionOptions.d.ts
6
- export interface ActionTypeCollectionOpts {
7
- client: OntologyClient;
8
- refetchInterval?: number | false;
9
- queryClient?: QueryClient;
10
- }
11
- export declare function isNotDeclarativeActionType(actionType: ActionTypeV2): boolean;
12
- export declare function actionTypeCollectionOptions(opts: ActionTypeCollectionOpts): OntologyCollectionOptions;
13
- //#endregion
14
- //# sourceMappingURL=actionTypeCollectionOptions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"actionTypeCollectionOptions.d.ts","names":[],"sources":["../../src/meta/actionTypeCollectionOptions.ts"],"mappings":";;;;;iBAmBiB;EACb,QAAQ;EACR;EACA,cAAc;;wBAIF,2BAA2B,YAAY;wBA+EvC,4BAA4B,MAAM,2BAA2B"}
@@ -1,58 +0,0 @@
1
- import { fromBatches, fromPagination, toArray } from "../utils/AsyncIterable.js";
2
- import { convertFoundryMetaActionType } from "./convertMetaActionType.js";
3
- import { convertActionTypeLoadSubsetFilter, convertActionTypeLoadSubsetOrderBy } from "./convertActionTypeLoadSubsetOptions.js";
4
- import { loadActionTypeOmsMetadata } from "./loadActionTypeOmsMetadata.js";
5
- import { ActionTypesFullMetadata, ActionTypesV2 } from "@osdk/foundry.ontologies";
6
- import { QueryClient } from "@tanstack/query-core";
7
- import { queryCollectionOptions } from "@tanstack/query-db-collection";
8
- //#region src/meta/actionTypeCollectionOptions.ts
9
- function isNotDeclarativeActionType(actionType) {
10
- return actionType.operations.length === 0;
11
- }
12
- async function searchActionTypes(client, options) {
13
- const where = convertActionTypeLoadSubsetFilter(options?.where);
14
- const orderBy = convertActionTypeLoadSubsetOrderBy(options?.orderBy);
15
- const canPushDownPagination = !options?.orderBy || orderBy !== void 0;
16
- const offset = canPushDownPagination ? options?.offset ?? 0 : 0;
17
- const limit = canPushDownPagination ? options?.limit : void 0;
18
- return (await toArray(fromPagination((pageSize, pageToken) => ActionTypesV2.search(client, client.ontologyRid, {
19
- where,
20
- orderBy,
21
- pageSize,
22
- pageToken,
23
- fuzziness: { type: "off" }
24
- }, { preview: true }), (page) => page.nextPageToken, (page) => page.data, 100, limit === void 0 ? void 0 : offset + limit))).slice(offset, limit === void 0 ? void 0 : offset + limit);
25
- }
26
- async function loadActionTypesFullMetadata(client, actionTypes) {
27
- const declarativeActionTypes = actionTypes.filter((actionType) => !isNotDeclarativeActionType(actionType));
28
- const fullMetadataByApiName = /* @__PURE__ */ new Map();
29
- const fullMetadata = await toArray(fromBatches(declarativeActionTypes, async (batch) => (await ActionTypesFullMetadata.getFullMetadataBatch(client, client.ontologyRid, { requests: batch.map((actionType) => ({ actionType: actionType.apiName })) }, { preview: true })).data, 100));
30
- for (const metadata of fullMetadata) fullMetadataByApiName.set(metadata.actionType.apiName, metadata);
31
- return actionTypes.map((actionType) => fullMetadataByApiName.get(actionType.apiName) ?? {
32
- actionType,
33
- fullLogicRules: []
34
- });
35
- }
36
- function actionTypeCollectionOptions(opts) {
37
- return queryCollectionOptions({
38
- queryClient: opts.queryClient ?? new QueryClient(),
39
- getKey: (row) => row.name,
40
- queryKey: [
41
- "foundry",
42
- "ontology",
43
- "actionTypes"
44
- ],
45
- syncMode: "on-demand",
46
- refetchInterval: opts.refetchInterval,
47
- queryFn: async (ctx) => {
48
- const actionTypes = await searchActionTypes(opts.client, ctx.meta?.loadSubsetOptions);
49
- const actionTypeMetadata = await loadActionTypesFullMetadata(opts.client, actionTypes);
50
- const omsMetadata = await loadActionTypeOmsMetadata(opts.client, actionTypeMetadata.map((metadata) => metadata.actionType.rid));
51
- return actionTypeMetadata.map((metadata) => convertFoundryMetaActionType(metadata, omsMetadata.get(metadata.actionType.rid)));
52
- }
53
- });
54
- }
55
- //#endregion
56
- export { actionTypeCollectionOptions, isNotDeclarativeActionType };
57
-
58
- //# sourceMappingURL=actionTypeCollectionOptions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"actionTypeCollectionOptions.js","names":["AsyncIterable.toArray","AsyncIterable.fromPagination","AsyncIterable.fromBatches"],"sources":["../../src/meta/actionTypeCollectionOptions.ts"],"sourcesContent":["import {\n ActionTypesFullMetadata,\n ActionTypesV2,\n type ActionTypeFullMetadata,\n type ActionTypeV2,\n} from \"@osdk/foundry.ontologies\";\nimport { QueryClient } from \"@tanstack/query-core\";\nimport { queryCollectionOptions } from \"@tanstack/query-db-collection\";\nimport * as AsyncIterable from \"../utils/AsyncIterable.js\";\nimport {\n convertActionTypeLoadSubsetFilter,\n convertActionTypeLoadSubsetOrderBy,\n} from \"./convertActionTypeLoadSubsetOptions.js\";\nimport { convertFoundryMetaActionType } from \"./convertMetaActionType.js\";\nimport { loadActionTypeOmsMetadata } from \"./loadActionTypeOmsMetadata.js\";\nimport type { OntologyClient } from \"@party-stack/foundry-client\";\nimport type { MetaActionType, OntologyCollectionOptions } from \"@party-stack/ontology\";\nimport type { LoadSubsetOptions } from \"@tanstack/db\";\n\nexport interface ActionTypeCollectionOpts {\n client: OntologyClient;\n refetchInterval?: number | false;\n queryClient?: QueryClient;\n}\n\n// These 404 for some reason on full metadata calls right now but we don't need them right now.\nexport function isNotDeclarativeActionType(actionType: ActionTypeV2): boolean {\n return actionType.operations.length === 0;\n}\n\nasync function searchActionTypes(\n client: OntologyClient,\n options?: LoadSubsetOptions\n): Promise<ActionTypeV2[]> {\n const where = convertActionTypeLoadSubsetFilter(options?.where);\n const orderBy = convertActionTypeLoadSubsetOrderBy(options?.orderBy);\n const canPushDownPagination = !options?.orderBy || orderBy !== undefined;\n const offset = canPushDownPagination ? (options?.offset ?? 0) : 0;\n const limit = canPushDownPagination ? options?.limit : undefined;\n\n const results = await AsyncIterable.toArray(\n AsyncIterable.fromPagination(\n (pageSize, pageToken: string | undefined) =>\n ActionTypesV2.search(\n client,\n client.ontologyRid,\n {\n where,\n orderBy,\n pageSize,\n pageToken,\n fuzziness: { type: \"off\" },\n },\n { preview: true }\n ),\n (page) => page.nextPageToken,\n (page) => page.data,\n 100,\n limit === undefined ? undefined : offset + limit\n )\n );\n\n return results.slice(offset, limit === undefined ? undefined : offset + limit);\n}\n\nasync function loadActionTypesFullMetadata(\n client: OntologyClient,\n actionTypes: ActionTypeV2[]\n): Promise<ActionTypeFullMetadata[]> {\n const declarativeActionTypes = actionTypes.filter(\n (actionType) => !isNotDeclarativeActionType(actionType)\n );\n const fullMetadataByApiName = new Map<string, ActionTypeFullMetadata>();\n const fullMetadata = await AsyncIterable.toArray(\n AsyncIterable.fromBatches(\n declarativeActionTypes,\n async (batch) =>\n (\n await ActionTypesFullMetadata.getFullMetadataBatch(\n client,\n client.ontologyRid,\n {\n requests: batch.map((actionType) => ({\n actionType: actionType.apiName,\n })),\n },\n { preview: true }\n )\n ).data,\n 100\n )\n );\n for (const metadata of fullMetadata) {\n fullMetadataByApiName.set(metadata.actionType.apiName, metadata);\n }\n\n return actionTypes.map(\n (actionType) =>\n fullMetadataByApiName.get(actionType.apiName) ?? {\n actionType,\n fullLogicRules: [],\n }\n );\n}\n\nexport function actionTypeCollectionOptions(opts: ActionTypeCollectionOpts): OntologyCollectionOptions {\n return queryCollectionOptions<MetaActionType>({\n queryClient: opts.queryClient ?? new QueryClient(),\n getKey: (row) => row.name,\n queryKey: [\"foundry\", \"ontology\", \"actionTypes\"],\n syncMode: \"on-demand\",\n refetchInterval: opts.refetchInterval,\n queryFn: async (ctx) => {\n const actionTypes = await searchActionTypes(opts.client, ctx.meta?.loadSubsetOptions);\n const actionTypeMetadata = await loadActionTypesFullMetadata(opts.client, actionTypes);\n const omsMetadata = await loadActionTypeOmsMetadata(\n opts.client,\n actionTypeMetadata.map((metadata) => metadata.actionType.rid)\n );\n return actionTypeMetadata.map((metadata) =>\n convertFoundryMetaActionType(metadata, omsMetadata.get(metadata.actionType.rid))\n );\n },\n }) as unknown as OntologyCollectionOptions;\n}\n"],"mappings":";;;;;;;;AA0BA,SAAgB,2BAA2B,YAAmC;CAC1E,OAAO,WAAW,WAAW,WAAW;AAC5C;AAEA,eAAe,kBACX,QACA,SACuB;CACvB,MAAM,QAAQ,kCAAkC,SAAS,KAAK;CAC9D,MAAM,UAAU,mCAAmC,SAAS,OAAO;CACnE,MAAM,wBAAwB,CAAC,SAAS,WAAW,YAAY,KAAA;CAC/D,MAAM,SAAS,wBAAyB,SAAS,UAAU,IAAK;CAChE,MAAM,QAAQ,wBAAwB,SAAS,QAAQ,KAAA;CAwBvD,QAAO,MAtBeA,QAClBC,gBACK,UAAU,cACP,cAAc,OACV,QACA,OAAO,aACP;EACI;EACA;EACA;EACA;EACA,WAAW,EAAE,MAAM,MAAM;CAC7B,GACA,EAAE,SAAS,KAAK,CACpB,IACH,SAAS,KAAK,gBACd,SAAS,KAAK,MACf,KACA,UAAU,KAAA,IAAY,KAAA,IAAY,SAAS,KAC/C,CACJ,EAAA,CAEe,MAAM,QAAQ,UAAU,KAAA,IAAY,KAAA,IAAY,SAAS,KAAK;AACjF;AAEA,eAAe,4BACX,QACA,aACiC;CACjC,MAAM,yBAAyB,YAAY,QACtC,eAAe,CAAC,2BAA2B,UAAU,CAC1D;CACA,MAAM,wCAAwB,IAAI,IAAoC;CACtE,MAAM,eAAe,MAAMD,QACvBE,YACI,wBACA,OAAO,WAEC,MAAM,wBAAwB,qBAC1B,QACA,OAAO,aACP,EACI,UAAU,MAAM,KAAK,gBAAgB,EACjC,YAAY,WAAW,QAC3B,EAAE,EACN,GACA,EAAE,SAAS,KAAK,CACpB,EAAA,CACF,MACN,GACJ,CACJ;CACA,KAAK,MAAM,YAAY,cACnB,sBAAsB,IAAI,SAAS,WAAW,SAAS,QAAQ;CAGnE,OAAO,YAAY,KACd,eACG,sBAAsB,IAAI,WAAW,OAAO,KAAK;EAC7C;EACA,gBAAgB,CAAC;CACrB,CACR;AACJ;AAEA,SAAgB,4BAA4B,MAA2D;CACnG,OAAO,uBAAuC;EAC1C,aAAa,KAAK,eAAe,IAAI,YAAY;EACjD,SAAS,QAAQ,IAAI;EACrB,UAAU;GAAC;GAAW;GAAY;EAAa;EAC/C,UAAU;EACV,iBAAiB,KAAK;EACtB,SAAS,OAAO,QAAQ;GACpB,MAAM,cAAc,MAAM,kBAAkB,KAAK,QAAQ,IAAI,MAAM,iBAAiB;GACpF,MAAM,qBAAqB,MAAM,4BAA4B,KAAK,QAAQ,WAAW;GACrF,MAAM,cAAc,MAAM,0BACtB,KAAK,QACL,mBAAmB,KAAK,aAAa,SAAS,WAAW,GAAG,CAChE;GACA,OAAO,mBAAmB,KAAK,aAC3B,6BAA6B,UAAU,YAAY,IAAI,SAAS,WAAW,GAAG,CAAC,CACnF;EACJ;CACJ,CAAC;AACL"}
@@ -1,7 +0,0 @@
1
- import { ActionTypeSearchJsonQueryV2, SearchActionTypesOrderByV2 } from "@osdk/foundry.ontologies";
2
- import { LoadSubsetOptions } from "@tanstack/db";
3
- //#region src/meta/convertActionTypeLoadSubsetOptions.d.ts
4
- export declare function convertActionTypeLoadSubsetFilter(filter: LoadSubsetOptions["where"]): ActionTypeSearchJsonQueryV2 | undefined;
5
- export declare function convertActionTypeLoadSubsetOrderBy(orderBy: LoadSubsetOptions["orderBy"]): SearchActionTypesOrderByV2 | undefined;
6
- //#endregion
7
- //# sourceMappingURL=convertActionTypeLoadSubsetOptions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convertActionTypeLoadSubsetOptions.d.ts","names":[],"sources":["../../src/meta/convertActionTypeLoadSubsetOptions.ts"],"mappings":";;;wBAuEgB,kCACZ,QAAQ,6BACT;wBAwBa,mCACZ,SAAS,+BACV"}
@@ -1,84 +0,0 @@
1
- import { toFoundryActionTypeName } from "../utils/actionTypeName.js";
2
- import { parseOrderByExpression, parseWhereExpression } from "@tanstack/db";
3
- //#region src/meta/convertActionTypeLoadSubsetOptions.ts
4
- const FILTER_FIELDS = {
5
- id: "actionTypeRid",
6
- name: "actionTypeApiName",
7
- displayName: "actionTypeDisplayName"
8
- };
9
- const LIKE_FIELDS = {
10
- name: FILTER_FIELDS.name,
11
- displayName: FILTER_FIELDS.displayName
12
- };
13
- const ORDER_BY_FIELDS = { displayName: "actionTypeDisplayName" };
14
- function getFilterField(field) {
15
- const name = field.join(".");
16
- if (name && Object.hasOwn(FILTER_FIELDS, name)) return name;
17
- throw new Error(`Foundry ActionType search does not support filtering by "${name}".`);
18
- }
19
- function getLikeField(field) {
20
- const name = field.join(".");
21
- if (name && Object.hasOwn(LIKE_FIELDS, name)) return name;
22
- throw new Error(`Foundry ActionType search does not support LIKE filtering by "${name}".`);
23
- }
24
- function eq$1(field, value) {
25
- const name = getFilterField(field);
26
- if (name === "id") return {
27
- type: "actionTypeRid",
28
- value
29
- };
30
- return {
31
- type: FILTER_FIELDS[name],
32
- value: {
33
- type: "exact",
34
- value: name === "name" ? toFoundryActionTypeName(value) : value
35
- }
36
- };
37
- }
38
- function like(field, value) {
39
- const name = getLikeField(field);
40
- const queries = value.split("%").filter(Boolean).map((term) => ({
41
- type: LIKE_FIELDS[name],
42
- value: {
43
- type: "contains",
44
- value: name === "name" ? toFoundryActionTypeName(term) : term
45
- }
46
- }));
47
- return queries.length === 1 ? queries[0] : {
48
- type: "and",
49
- value: queries
50
- };
51
- }
52
- function convertActionTypeLoadSubsetFilter(filter) {
53
- return parseWhereExpression(filter, { handlers: {
54
- and: (...filters) => ({
55
- type: "and",
56
- value: filters
57
- }),
58
- or: (...filters) => ({
59
- type: "or",
60
- value: filters
61
- }),
62
- eq: eq$1,
63
- in: (field, values) => ({
64
- type: "or",
65
- value: values.map((value) => eq$1(field, value))
66
- }),
67
- like,
68
- ilike: like
69
- } }) ?? void 0;
70
- }
71
- function convertActionTypeLoadSubsetOrderBy(orderBy) {
72
- const ordering = orderBy ? parseOrderByExpression(orderBy) : [];
73
- const { field, direction } = ordering[0] ?? {};
74
- const name = field?.join(".");
75
- if (ordering.length !== 1 || !name || !Object.hasOwn(ORDER_BY_FIELDS, name)) return;
76
- return {
77
- field: ORDER_BY_FIELDS[name],
78
- direction
79
- };
80
- }
81
- //#endregion
82
- export { convertActionTypeLoadSubsetFilter, convertActionTypeLoadSubsetOrderBy };
83
-
84
- //# sourceMappingURL=convertActionTypeLoadSubsetOptions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convertActionTypeLoadSubsetOptions.js","names":["eq"],"sources":["../../src/meta/convertActionTypeLoadSubsetOptions.ts"],"sourcesContent":["import { FieldPath, LoadSubsetOptions, parseOrderByExpression, parseWhereExpression } from \"@tanstack/db\";\nimport { toFoundryActionTypeName } from \"../utils/actionTypeName.js\";\nimport type {\n ActionTypeSearchJsonQueryV2,\n ActionTypeSortByV2,\n SearchActionTypesOrderByV2,\n} from \"@osdk/foundry.ontologies\";\nimport type { MetaActionType } from \"@party-stack/ontology\";\n\nconst FILTER_FIELDS = {\n id: \"actionTypeRid\",\n name: \"actionTypeApiName\",\n displayName: \"actionTypeDisplayName\",\n} as const satisfies Partial<Record<keyof MetaActionType, ActionTypeSearchJsonQueryV2[\"type\"]>>;\n\nconst LIKE_FIELDS = {\n name: FILTER_FIELDS.name,\n displayName: FILTER_FIELDS.displayName,\n} as const satisfies Pick<typeof FILTER_FIELDS, \"name\" | \"displayName\">;\n\nconst ORDER_BY_FIELDS = {\n displayName: \"actionTypeDisplayName\",\n} as const satisfies Partial<Record<keyof MetaActionType, ActionTypeSortByV2>>;\n\nfunction getFilterField(field: FieldPath): keyof typeof FILTER_FIELDS {\n const name = field.join(\".\");\n if (name && Object.hasOwn(FILTER_FIELDS, name)) {\n return name as keyof typeof FILTER_FIELDS;\n }\n throw new Error(`Foundry ActionType search does not support filtering by \"${name}\".`);\n}\n\nfunction getLikeField(field: FieldPath): keyof typeof LIKE_FIELDS {\n const name = field.join(\".\");\n if (name && Object.hasOwn(LIKE_FIELDS, name)) {\n return name as keyof typeof LIKE_FIELDS;\n }\n throw new Error(`Foundry ActionType search does not support LIKE filtering by \"${name}\".`);\n}\n\nfunction eq(field: FieldPath, value: unknown): ActionTypeSearchJsonQueryV2 {\n const name = getFilterField(field);\n if (name === \"id\") {\n return {\n type: \"actionTypeRid\",\n value: value as string,\n };\n }\n return {\n type: FILTER_FIELDS[name],\n value: {\n type: \"exact\",\n value: name === \"name\" ? toFoundryActionTypeName(value as string) : (value as string),\n },\n };\n}\n\nfunction like(field: FieldPath, value: string): ActionTypeSearchJsonQueryV2 {\n const name = getLikeField(field);\n const terms = value.split(\"%\").filter(Boolean);\n const queries: ActionTypeSearchJsonQueryV2[] = terms.map((term) => ({\n type: LIKE_FIELDS[name],\n value: {\n type: \"contains\",\n value: name === \"name\" ? toFoundryActionTypeName(term) : term,\n },\n }));\n\n return queries.length === 1 ? queries[0]! : { type: \"and\", value: queries };\n}\n\nexport function convertActionTypeLoadSubsetFilter(\n filter: LoadSubsetOptions[\"where\"]\n): ActionTypeSearchJsonQueryV2 | undefined {\n return (\n parseWhereExpression<ActionTypeSearchJsonQueryV2>(filter, {\n handlers: {\n and: (...filters: ActionTypeSearchJsonQueryV2[]) => ({\n type: \"and\",\n value: filters,\n }),\n or: (...filters: ActionTypeSearchJsonQueryV2[]) => ({\n type: \"or\",\n value: filters,\n }),\n eq,\n in: (field: FieldPath, values: unknown[]) => ({\n type: \"or\",\n value: values.map((value) => eq(field, value)),\n }),\n like,\n ilike: like,\n },\n }) ?? undefined\n );\n}\n\nexport function convertActionTypeLoadSubsetOrderBy(\n orderBy: LoadSubsetOptions[\"orderBy\"]\n): SearchActionTypesOrderByV2 | undefined {\n const ordering = orderBy ? parseOrderByExpression(orderBy) : [];\n const { field, direction } = ordering[0] ?? {};\n const name = field?.join(\".\");\n if (ordering.length !== 1 || !name || !Object.hasOwn(ORDER_BY_FIELDS, name)) {\n return undefined;\n }\n\n return {\n field: ORDER_BY_FIELDS[name as keyof typeof ORDER_BY_FIELDS],\n direction,\n };\n}\n"],"mappings":";;;AASA,MAAM,gBAAgB;CAClB,IAAI;CACJ,MAAM;CACN,aAAa;AACjB;AAEA,MAAM,cAAc;CAChB,MAAM,cAAc;CACpB,aAAa,cAAc;AAC/B;AAEA,MAAM,kBAAkB,EACpB,aAAa,wBACjB;AAEA,SAAS,eAAe,OAA8C;CAClE,MAAM,OAAO,MAAM,KAAK,GAAG;CAC3B,IAAI,QAAQ,OAAO,OAAO,eAAe,IAAI,GACzC,OAAO;CAEX,MAAM,IAAI,MAAM,4DAA4D,KAAK,GAAG;AACxF;AAEA,SAAS,aAAa,OAA4C;CAC9D,MAAM,OAAO,MAAM,KAAK,GAAG;CAC3B,IAAI,QAAQ,OAAO,OAAO,aAAa,IAAI,GACvC,OAAO;CAEX,MAAM,IAAI,MAAM,iEAAiE,KAAK,GAAG;AAC7F;AAEA,SAASA,KAAG,OAAkB,OAA6C;CACvE,MAAM,OAAO,eAAe,KAAK;CACjC,IAAI,SAAS,MACT,OAAO;EACH,MAAM;EACC;CACX;CAEJ,OAAO;EACH,MAAM,cAAc;EACpB,OAAO;GACH,MAAM;GACN,OAAO,SAAS,SAAS,wBAAwB,KAAe,IAAK;EACzE;CACJ;AACJ;AAEA,SAAS,KAAK,OAAkB,OAA4C;CACxE,MAAM,OAAO,aAAa,KAAK;CAE/B,MAAM,UADQ,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,OACa,CAAC,CAAC,KAAK,UAAU;EAChE,MAAM,YAAY;EAClB,OAAO;GACH,MAAM;GACN,OAAO,SAAS,SAAS,wBAAwB,IAAI,IAAI;EAC7D;CACJ,EAAE;CAEF,OAAO,QAAQ,WAAW,IAAI,QAAQ,KAAM;EAAE,MAAM;EAAO,OAAO;CAAQ;AAC9E;AAEA,SAAgB,kCACZ,QACuC;CACvC,OACI,qBAAkD,QAAQ,EACtD,UAAU;EACN,MAAM,GAAG,aAA4C;GACjD,MAAM;GACN,OAAO;EACX;EACA,KAAK,GAAG,aAA4C;GAChD,MAAM;GACN,OAAO;EACX;EACA,IAAA;EACA,KAAK,OAAkB,YAAuB;GAC1C,MAAM;GACN,OAAO,OAAO,KAAK,UAAUA,KAAG,OAAO,KAAK,CAAC;EACjD;EACA;EACA,OAAO;CACX,EACJ,CAAC,KAAK,KAAA;AAEd;AAEA,SAAgB,mCACZ,SACsC;CACtC,MAAM,WAAW,UAAU,uBAAuB,OAAO,IAAI,CAAC;CAC9D,MAAM,EAAE,OAAO,cAAc,SAAS,MAAM,CAAC;CAC7C,MAAM,OAAO,OAAO,KAAK,GAAG;CAC5B,IAAI,SAAS,WAAW,KAAK,CAAC,QAAQ,CAAC,OAAO,OAAO,iBAAiB,IAAI,GACtE;CAGJ,OAAO;EACH,OAAO,gBAAgB;EACvB;CACJ;AACJ"}
@@ -1,11 +0,0 @@
1
- import { OntologyClient } from "@party-stack/foundry-client";
2
- import { OntologyBackendAdapter } from "@party-stack/ontology";
3
- //#region src/meta/createFoundryMetaOntologyBackendAdapter.d.ts
4
- export interface CreateFoundryMetaOntologyBackendAdapterOpts {
5
- client: OntologyClient;
6
- /** Polling interval in milliseconds, or false to disable polling. Defaults to no polling. */
7
- refetchInterval?: number | false;
8
- }
9
- export declare function createFoundryMetaOntologyBackendAdapter(opts: CreateFoundryMetaOntologyBackendAdapterOpts): OntologyBackendAdapter;
10
- //#endregion
11
- //# sourceMappingURL=createFoundryMetaOntologyBackendAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createFoundryMetaOntologyBackendAdapter.d.ts","names":[],"sources":["../../src/meta/createFoundryMetaOntologyBackendAdapter.ts"],"mappings":";;;iBAYiB;EACb,QAAQ;;EAER;;wBAGY,wCACZ,MAAM,8CACP"}