@party-stack/foundry-ontology 0.1.1 → 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.
Files changed (142) hide show
  1. package/lib/adapter/convertLoadSubsetOptions.d.ts +1 -0
  2. package/lib/adapter/convertLoadSubsetOptions.d.ts.map +1 -1
  3. package/lib/adapter/convertLoadSubsetOptions.js +32 -20
  4. package/lib/adapter/convertLoadSubsetOptions.js.map +1 -1
  5. package/lib/adapter/convertLoadSubsetOptions.test.d.ts +2 -0
  6. package/lib/adapter/convertLoadSubsetOptions.test.d.ts.map +1 -0
  7. package/lib/adapter/convertLoadSubsetOptions.test.js +10 -0
  8. package/lib/adapter/convertLoadSubsetOptions.test.js.map +1 -0
  9. package/lib/adapter/createFoundryOntologyAdapter.d.ts +7 -0
  10. package/lib/adapter/createFoundryOntologyAdapter.d.ts.map +1 -0
  11. package/lib/adapter/createFoundryOntologyAdapter.js +177 -0
  12. package/lib/adapter/createFoundryOntologyAdapter.js.map +1 -0
  13. package/lib/adapter/foundryCodec.d.ts +10 -4
  14. package/lib/adapter/foundryCodec.d.ts.map +1 -1
  15. package/lib/adapter/foundryCodec.js +86 -5
  16. package/lib/adapter/foundryCodec.js.map +1 -1
  17. package/lib/adapter/foundryCodec.test.d.ts +2 -0
  18. package/lib/adapter/foundryCodec.test.d.ts.map +1 -0
  19. package/lib/adapter/foundryCodec.test.js +80 -0
  20. package/lib/adapter/foundryCodec.test.js.map +1 -0
  21. package/lib/adapter/index.d.ts +2 -1
  22. package/lib/adapter/index.d.ts.map +1 -1
  23. package/lib/adapter/index.js +2 -1
  24. package/lib/adapter/index.js.map +1 -1
  25. package/lib/adapter/objectCollectionOptions.d.ts +29 -0
  26. package/lib/adapter/objectCollectionOptions.d.ts.map +1 -0
  27. package/lib/adapter/objectCollectionOptions.js +371 -0
  28. package/lib/adapter/objectCollectionOptions.js.map +1 -0
  29. package/lib/adapter/objectCollectionOptions.test.d.ts +2 -0
  30. package/lib/adapter/objectCollectionOptions.test.d.ts.map +1 -0
  31. package/lib/adapter/objectCollectionOptions.test.js +550 -0
  32. package/lib/adapter/objectCollectionOptions.test.js.map +1 -0
  33. package/lib/adapter/sync.d.ts +14 -0
  34. package/lib/adapter/sync.d.ts.map +1 -0
  35. package/lib/adapter/sync.js +238 -0
  36. package/lib/adapter/sync.js.map +1 -0
  37. package/lib/adapter/sync.test.d.ts +2 -0
  38. package/lib/adapter/sync.test.d.ts.map +1 -0
  39. package/lib/adapter/sync.test.js +245 -0
  40. package/lib/adapter/sync.test.js.map +1 -0
  41. package/lib/config/index.d.ts +2 -0
  42. package/lib/config/index.d.ts.map +1 -1
  43. package/lib/config/index.js +3 -3
  44. package/lib/config/index.js.map +1 -1
  45. package/lib/index.d.ts +1 -1
  46. package/lib/index.d.ts.map +1 -1
  47. package/lib/index.js +1 -1
  48. package/lib/index.js.map +1 -1
  49. package/lib/meta/actionTypeCollectionOptions.d.ts +9 -0
  50. package/lib/meta/actionTypeCollectionOptions.d.ts.map +1 -0
  51. package/lib/meta/actionTypeCollectionOptions.js +55 -0
  52. package/lib/meta/actionTypeCollectionOptions.js.map +1 -0
  53. package/lib/meta/convertMetaActionType.d.ts +8 -0
  54. package/lib/meta/convertMetaActionType.d.ts.map +1 -0
  55. package/lib/meta/convertMetaActionType.js +368 -0
  56. package/lib/meta/convertMetaActionType.js.map +1 -0
  57. package/lib/meta/convertMetaLinkType.d.ts +4 -0
  58. package/lib/meta/convertMetaLinkType.d.ts.map +1 -0
  59. package/lib/meta/convertMetaLinkType.js +50 -0
  60. package/lib/meta/convertMetaLinkType.js.map +1 -0
  61. package/lib/meta/convertMetaObjectType.d.ts +4 -0
  62. package/lib/meta/convertMetaObjectType.d.ts.map +1 -0
  63. package/lib/meta/convertMetaObjectType.js +27 -0
  64. package/lib/meta/convertMetaObjectType.js.map +1 -0
  65. package/lib/meta/convertMetaTypeDef.d.ts +6 -0
  66. package/lib/meta/convertMetaTypeDef.d.ts.map +1 -0
  67. package/lib/meta/convertMetaTypeDef.js +177 -0
  68. package/lib/meta/convertMetaTypeDef.js.map +1 -0
  69. package/lib/meta/convertMetaValueType.d.ts +4 -0
  70. package/lib/meta/convertMetaValueType.d.ts.map +1 -0
  71. package/lib/meta/convertMetaValueType.js +10 -0
  72. package/lib/meta/convertMetaValueType.js.map +1 -0
  73. package/lib/meta/createFoundryMetaOntologyAdapter.d.ts +7 -0
  74. package/lib/meta/createFoundryMetaOntologyAdapter.d.ts.map +1 -0
  75. package/lib/meta/createFoundryMetaOntologyAdapter.js +30 -0
  76. package/lib/meta/createFoundryMetaOntologyAdapter.js.map +1 -0
  77. package/lib/meta/entityCollectionOptions.d.ts +22 -0
  78. package/lib/meta/entityCollectionOptions.d.ts.map +1 -0
  79. package/lib/meta/entityCollectionOptions.js +77 -0
  80. package/lib/meta/entityCollectionOptions.js.map +1 -0
  81. package/lib/meta/index.d.ts +4 -1
  82. package/lib/meta/index.d.ts.map +1 -1
  83. package/lib/meta/index.js +4 -1
  84. package/lib/meta/index.js.map +1 -1
  85. package/lib/users/index.d.ts +1 -1
  86. package/lib/users/index.d.ts.map +1 -1
  87. package/lib/users/index.js +1 -1
  88. package/lib/users/index.js.map +1 -1
  89. package/lib/users/userCollectionOptions.d.ts +10 -0
  90. package/lib/users/userCollectionOptions.d.ts.map +1 -0
  91. package/lib/users/{createUserCollection.js → userCollectionOptions.js} +5 -7
  92. package/lib/users/userCollectionOptions.js.map +1 -0
  93. package/lib/utils/AsyncIterable.d.ts +1 -1
  94. package/lib/utils/AsyncIterable.js +2 -2
  95. package/lib/utils/actionTypeName.d.ts +3 -0
  96. package/lib/utils/actionTypeName.d.ts.map +1 -0
  97. package/lib/utils/actionTypeName.js +8 -0
  98. package/lib/utils/actionTypeName.js.map +1 -0
  99. package/lib/utils/actionTypeName.test.d.ts +2 -0
  100. package/lib/utils/actionTypeName.test.d.ts.map +1 -0
  101. package/lib/utils/actionTypeName.test.js +13 -0
  102. package/lib/utils/actionTypeName.test.js.map +1 -0
  103. package/package.json +13 -13
  104. package/lib/adapter/createAction.d.ts +0 -9
  105. package/lib/adapter/createAction.d.ts.map +0 -1
  106. package/lib/adapter/createAction.js +0 -42
  107. package/lib/adapter/createAction.js.map +0 -1
  108. package/lib/adapter/createObjectCollection.d.ts +0 -23
  109. package/lib/adapter/createObjectCollection.d.ts.map +0 -1
  110. package/lib/adapter/createObjectCollection.js +0 -117
  111. package/lib/adapter/createObjectCollection.js.map +0 -1
  112. package/lib/adapter/sync/ObjectSetSubscription.d.ts +0 -35
  113. package/lib/adapter/sync/ObjectSetSubscription.d.ts.map +0 -1
  114. package/lib/adapter/sync/ObjectSetSubscription.js +0 -2
  115. package/lib/adapter/sync/ObjectSetSubscription.js.map +0 -1
  116. package/lib/adapter/sync/ObjectSetWatcherManager.d.ts +0 -11
  117. package/lib/adapter/sync/ObjectSetWatcherManager.d.ts.map +0 -1
  118. package/lib/adapter/sync/ObjectSetWatcherManager.js +0 -86
  119. package/lib/adapter/sync/ObjectSetWatcherManager.js.map +0 -1
  120. package/lib/adapter/sync/effection-utils/useValueSignal.d.ts +0 -4
  121. package/lib/adapter/sync/effection-utils/useValueSignal.d.ts.map +0 -1
  122. package/lib/adapter/sync/effection-utils/useValueSignal.js +0 -31
  123. package/lib/adapter/sync/effection-utils/useValueSignal.js.map +0 -1
  124. package/lib/adapter/sync/useObjectSetWatcherConnection.d.ts +0 -10
  125. package/lib/adapter/sync/useObjectSetWatcherConnection.d.ts.map +0 -1
  126. package/lib/adapter/sync/useObjectSetWatcherConnection.js +0 -184
  127. package/lib/adapter/sync/useObjectSetWatcherConnection.js.map +0 -1
  128. package/lib/adapter/sync/useObjectSetWatcherSession.d.ts +0 -9
  129. package/lib/adapter/sync/useObjectSetWatcherSession.d.ts.map +0 -1
  130. package/lib/adapter/sync/useObjectSetWatcherSession.js +0 -69
  131. package/lib/adapter/sync/useObjectSetWatcherSession.js.map +0 -1
  132. package/lib/meta/createOntologyMetadataCollections.d.ts +0 -7
  133. package/lib/meta/createOntologyMetadataCollections.d.ts.map +0 -1
  134. package/lib/meta/createOntologyMetadataCollections.js +0 -304
  135. package/lib/meta/createOntologyMetadataCollections.js.map +0 -1
  136. package/lib/users/createUserCollection.d.ts +0 -7
  137. package/lib/users/createUserCollection.d.ts.map +0 -1
  138. package/lib/users/createUserCollection.js.map +0 -1
  139. package/lib/utils/client.d.ts +0 -11
  140. package/lib/utils/client.d.ts.map +0 -1
  141. package/lib/utils/client.js +0 -22
  142. package/lib/utils/client.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"createAction.d.ts","sourceRoot":"","sources":["../../src/adapter/createAction.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,sBAAsB,EAGzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAA0B,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAWjD,wBAAgB,YAAY,CAAC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE;IAC3E,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,sBAAsB,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACjD,iEAqCA"}
@@ -1,42 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-vars */
2
- import { Actions, } from "@osdk/foundry.ontologies";
3
- import { createOptimisticAction } from "@tanstack/db";
4
- function getProperties(rule) {
5
- const properties = {};
6
- return properties;
7
- }
8
- export function createAction(opts) {
9
- return createOptimisticAction({
10
- onMutate: (parameters) => {
11
- const optimisticRules = opts.actionType.fullLogicRules.filter((rule) => rule.type === "createObject" ||
12
- rule.type === "modifyObject" ||
13
- rule.type === "deleteObject" ||
14
- rule.type === "createOrModifyObjectV2");
15
- for (const rule of optimisticRules) {
16
- switch (rule.type) {
17
- case "createObject": {
18
- const collection = opts.objectCollections[rule.objectTypeApiName];
19
- collection.insert(getProperties(rule));
20
- break;
21
- }
22
- case "modifyObject": {
23
- const collection = opts.objectCollections[rule.objectToModify];
24
- }
25
- }
26
- }
27
- },
28
- mutationFn: async (parameters) => {
29
- const { edits } = await Actions.apply(opts.client, opts.client.ontologyRid, opts.actionType.actionType.apiName, {
30
- parameters,
31
- options: { mode: "VALIDATE_AND_EXECUTE", returnEdits: "ALL_V2_WITH_DELETIONS" },
32
- });
33
- // actually request final objects
34
- // loop through edits and write them directly to collection
35
- },
36
- });
37
- }
38
- // in optimisticAction, optimistic update is discarded when mutationFn completes.
39
- // we're supposed to make sure collection syncs in the new data before mutationFn completes?
40
- // if not a function-backed action, we provide the optimistic flag
41
- // objectCollections: Record<string, ObjectCollection>
42
- //# sourceMappingURL=createAction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createAction.js","sourceRoot":"","sources":["../../src/adapter/createAction.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,EACH,OAAO,GAIV,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAc,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGlE,SAAS,aAAa,CAAC,IAGtB;IACG,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,YAAY,CAA6C,IAIxE;IACG,OAAO,sBAAsB,CAAa;QACtC,QAAQ,EAAE,CAAC,UAAU,EAAE,EAAE;YACrB,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CACzD,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,IAAI,KAAK,cAAc;gBAC5B,IAAI,CAAC,IAAI,KAAK,cAAc;gBAC5B,IAAI,CAAC,IAAI,KAAK,cAAc;gBAC5B,IAAI,CAAC,IAAI,KAAK,wBAAwB,CAC7C,CAAC;YACF,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;gBACjC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;oBAChB,KAAK,cAAc,CAAC,CAAC,CAAC;wBAClB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAE,CAAC;wBACnE,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;wBACvC,MAAM;oBACV,CAAC;oBACD,KAAK,cAAc,CAAC,CAAC,CAAC;wBAClB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBACnE,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CACjC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,CAAC,WAAW,EACvB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,EAClC;gBACI,UAAU;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,uBAAuB,EAAE;aAClF,CACJ,CAAC;YACF,iCAAiC;YACjC,2DAA2D;QAC/D,CAAC;KACJ,CAAC,CAAC;AACP,CAAC;AAED,iFAAiF;AACjF,4FAA4F;AAE5F,kEAAkE;AAElE,sDAAsD"}
@@ -1,23 +0,0 @@
1
- import { OntologyObjectV2 } from "@osdk/foundry.ontologies";
2
- import { Collection, CollectionConfig, InferSchemaOutput, StandardSchema, SyncConfig, UtilsRecord } from "@tanstack/db";
3
- import type { OntologyAdapter, OntologyIR } from "@party-stack/ontology";
4
- import { OntologyClient } from "../utils/client.js";
5
- interface OntologyObject extends OntologyObjectV2 {
6
- __primaryKey: string | number;
7
- }
8
- type FoundryObject = OntologyObject & Record<string, unknown>;
9
- export interface ObjectCollectionConfig<TSchema extends StandardSchema<OntologyObject>> extends Omit<CollectionConfig<InferSchemaOutput<TSchema>, string | number, TSchema>, "sync" | "syncMode" | "getKey" | "onInsert" | "onUpdate" | "onDelete"> {
10
- client: OntologyClient;
11
- objectType: string;
12
- schema: TSchema;
13
- }
14
- export interface ObjectCollectionUtils extends UtilsRecord {
15
- }
16
- export declare function createFoundryObjectSyncConfig(client: OntologyClient, objectType: string, decodeObject?: (object: FoundryObject) => FoundryObject): SyncConfig<Record<string, unknown>, string | number>;
17
- export declare function createFoundryOntologyAdapter(opts: {
18
- client: OntologyClient;
19
- ir?: OntologyIR;
20
- }): OntologyAdapter;
21
- export declare function createObjectCollection<TSchema extends StandardSchema<OntologyObject>>(config: ObjectCollectionConfig<TSchema>): Collection<InferSchemaOutput<TSchema>, string | number, ObjectCollectionUtils, TSchema>;
22
- export {};
23
- //# sourceMappingURL=createObjectCollection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createObjectCollection.d.ts","sourceRoot":"","sources":["../../src/adapter/createObjectCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACH,UAAU,EACV,gBAAgB,EAGhB,iBAAiB,EAEjB,cAAc,EACd,UAAU,EACV,WAAW,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOpD,UAAU,cAAe,SAAQ,gBAAgB;IAC7C,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED,KAAK,aAAa,GAAG,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9D,MAAM,WAAW,sBAAsB,CAAC,OAAO,SAAS,cAAc,CAAC,cAAc,CAAC,CAClF,SAAQ,IAAI,CACR,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EACtE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CACxE;IACD,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACnB;AAGD,MAAM,WAAW,qBAAsB,SAAQ,WAAW;CAAG;AAE7D,wBAAgB,6BAA6B,CACzC,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,GAAE,CAAC,MAAM,EAAE,aAAa,KAAK,aAAkC,GAC5E,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAqGtD;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IAC/C,MAAM,EAAE,cAAc,CAAC;IACvB,EAAE,CAAC,EAAE,UAAU,CAAC;CACnB,GAAG,eAAe,CAYlB;AAsBD,wBAAgB,sBAAsB,CAAC,OAAO,SAAS,cAAc,CAAC,cAAc,CAAC,EACjF,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACxC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC"}
@@ -1,117 +0,0 @@
1
- import { OntologyObjectsV2 } from "@osdk/foundry.ontologies";
2
- import { createCollection, DeduplicatedLoadSubset, } from "@tanstack/db";
3
- import * as AsyncIterable from "../utils/AsyncIterable.js";
4
- import { convertLoadSubsetFilter, convertLoadSubsetOrderBy } from "./convertLoadSubsetOptions.js";
5
- import { createFoundryObjectDecoder } from "./foundryCodec.js";
6
- import { getObjectSetWatcherManager } from "./sync/ObjectSetWatcherManager.js";
7
- export function createFoundryObjectSyncConfig(client, objectType, decodeObject = (object) => object) {
8
- return {
9
- sync: (params) => {
10
- const { begin, write, commit, markReady, collection } = params;
11
- const upsertObject = (object) => {
12
- const existingObject = collection._state.syncedData.get(object.__primaryKey);
13
- if (existingObject) {
14
- write({ type: "update", value: object, previousValue: existingObject });
15
- }
16
- else {
17
- write({ type: "insert", value: object });
18
- }
19
- };
20
- const deleteObject = (object) => {
21
- const existingObject = collection._state.syncedData.get(object.__primaryKey);
22
- if (existingObject) {
23
- write({ type: "delete", value: object, previousValue: existingObject });
24
- }
25
- };
26
- const fetchObjects = async (opts) => {
27
- const where = convertLoadSubsetFilter(opts.where);
28
- // Short-circuit this case since it should be no results but Foundry returns everything.
29
- if (where?.type === "in" && where.value.length === 0) {
30
- return [];
31
- }
32
- const results = await AsyncIterable.toArray(AsyncIterable.fromPagination((pageSize, pageToken) => OntologyObjectsV2.search(client, client.ontologyRid, objectType, {
33
- snapshot: true,
34
- where,
35
- excludeRid: true,
36
- // We select all properties right now.
37
- select: [],
38
- selectV2: [],
39
- pageSize,
40
- pageToken,
41
- orderBy: convertLoadSubsetOrderBy(opts.orderBy),
42
- }), (page) => page.nextPageToken, (page) => page.data, 10_000, opts.limit));
43
- return results.map(decodeObject);
44
- };
45
- const loadSubset = async (opts) => {
46
- const objects = await fetchObjects(opts);
47
- if (objects.length > 0) {
48
- begin();
49
- for (const object of objects) {
50
- upsertObject(object);
51
- }
52
- commit();
53
- }
54
- };
55
- const loadSubsetDedupe = new DeduplicatedLoadSubset({ loadSubset });
56
- const objectSetWatcherManager = getObjectSetWatcherManager(client);
57
- const unsubscribe = objectSetWatcherManager.subscribe({ type: "base", objectType }, (message) => {
58
- switch (message.type) {
59
- case "change": {
60
- begin();
61
- for (const update of message.updates) {
62
- if (update.type === "object") {
63
- const object = decodeObject(update.object);
64
- switch (update.state) {
65
- case "ADDED_OR_UPDATED": {
66
- upsertObject(object);
67
- break;
68
- }
69
- case "REMOVED": {
70
- deleteObject(object);
71
- break;
72
- }
73
- }
74
- }
75
- }
76
- commit();
77
- break;
78
- }
79
- case "refresh": {
80
- loadSubsetDedupe.reset();
81
- break;
82
- }
83
- }
84
- });
85
- markReady();
86
- return {
87
- loadSubset: loadSubsetDedupe.loadSubset,
88
- cleanup: unsubscribe,
89
- };
90
- },
91
- };
92
- }
93
- export function createFoundryOntologyAdapter(opts) {
94
- const decoder = opts.ir ? createFoundryObjectDecoder(opts.ir) : null;
95
- return {
96
- name: "foundry",
97
- getCollectionOptions: (objectType) => ({
98
- syncMode: "on-demand",
99
- sync: createFoundryObjectSyncConfig(opts.client, objectType, (object) => decoder ? decoder.decodeObject(objectType, object) : object),
100
- }),
101
- };
102
- }
103
- function objectCollectionOptions(config) {
104
- const { client, objectType, schema, ...rest } = config;
105
- const sync = createFoundryObjectSyncConfig(client, objectType);
106
- return {
107
- ...rest,
108
- schema,
109
- syncMode: "on-demand",
110
- getKey: (object) => object.__primaryKey,
111
- sync,
112
- };
113
- }
114
- export function createObjectCollection(config) {
115
- return createCollection(objectCollectionOptions(config));
116
- }
117
- //# sourceMappingURL=createObjectCollection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createObjectCollection.js","sourceRoot":"","sources":["../../src/adapter/createObjectCollection.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import { ObjectSetStreamSubscribeRequest, ObjectSetUpdate } from "@osdk/foundry.ontologies";
2
- export interface ObjectSetSubscription extends ObjectSetStreamSubscribeRequest {
3
- id: string;
4
- }
5
- export type ObjectSetSubscriptionStateUpdateStatus = "open" | "closed" | "qos" | "error";
6
- export interface ObjectSetSubscriptionsStateUpdateMessage {
7
- subscriptionId: string;
8
- status: ObjectSetSubscriptionStateUpdateStatus;
9
- }
10
- export interface ObjectSetSubscriptionsStateUpdateMessages {
11
- type: "state";
12
- updates: ObjectSetSubscriptionsStateUpdateMessage[];
13
- }
14
- export interface ObjectSetSubscriptionsChangeMessage {
15
- type: "change";
16
- subscriptionId: string;
17
- updates: ObjectSetUpdate[];
18
- }
19
- export interface ObjectSetSubscriptionsRefreshMessage {
20
- type: "refresh";
21
- subscriptionId: string;
22
- objectType: string;
23
- }
24
- export type ObjectSetSubscriptionsMessage = ObjectSetSubscriptionsStateUpdateMessages | ObjectSetSubscriptionsChangeMessage | ObjectSetSubscriptionsRefreshMessage;
25
- export type ObjectSetSubscriptionMessage = {
26
- type: "change";
27
- updates: ObjectSetUpdate[];
28
- } | {
29
- type: "refresh";
30
- objectType: string;
31
- } | {
32
- type: "state";
33
- status: ObjectSetSubscriptionStateUpdateStatus;
34
- };
35
- //# sourceMappingURL=ObjectSetSubscription.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObjectSetSubscription.d.ts","sourceRoot":"","sources":["../../../src/adapter/sync/ObjectSetSubscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE5F,MAAM,WAAW,qBAAsB,SAAQ,+BAA+B;IAC1E,EAAE,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,sCAAsC,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAEzF,MAAM,WAAW,wCAAwC;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,sCAAsC,CAAC;CAClD;AAED,MAAM,WAAW,yCAAyC;IACtD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,wCAAwC,EAAE,CAAC;CACvD;AAED,MAAM,WAAW,mCAAmC;IAChD,IAAI,EAAE,QAAQ,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,oCAAoC;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,6BAA6B,GACnC,yCAAyC,GACzC,mCAAmC,GACnC,oCAAoC,CAAC;AAE3C,MAAM,MAAM,4BAA4B,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,sCAAsC,CAAA;CAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ObjectSetSubscription.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObjectSetSubscription.js","sourceRoot":"","sources":["../../../src/adapter/sync/ObjectSetSubscription.ts"],"names":[],"mappings":""}
@@ -1,11 +0,0 @@
1
- import { ObjectSet } from "@osdk/foundry.ontologies";
2
- import { OntologyClient } from "../../utils/client.js";
3
- import { ObjectSetSubscriptionMessage } from "./ObjectSetSubscription.js";
4
- export declare class ObjectSetWatcherManager {
5
- #private;
6
- constructor(client: OntologyClient);
7
- subscribe(objectSet: ObjectSet, callback: (data: ObjectSetSubscriptionMessage) => void): () => void;
8
- stop(): Promise<void>;
9
- }
10
- export declare function getObjectSetWatcherManager(client: OntologyClient): ObjectSetWatcherManager;
11
- //# sourceMappingURL=ObjectSetWatcherManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObjectSetWatcherManager.d.ts","sourceRoot":"","sources":["../../../src/adapter/sync/ObjectSetWatcherManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAyB,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAGjG,qBAAa,uBAAuB;;gBAOpB,MAAM,EAAE,cAAc;IAgDlC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,4BAA4B,KAAK,IAAI,GAAG,MAAM,IAAI;IAqB7F,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAO9B;AAGD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,cAAc,GAAG,uBAAuB,CAO1F"}
@@ -1,86 +0,0 @@
1
- import { run, each, until } from "effection";
2
- import { useValueSignal } from "./effection-utils/useValueSignal.js";
3
- import { useObjectSetWatcherSession } from "./useObjectSetWatcherSession.js";
4
- export class ObjectSetWatcherManager {
5
- #task;
6
- #objectSetSubscriptions;
7
- #updateDesiredSubscriptions;
8
- constructor(client) {
9
- this.#objectSetSubscriptions = new Map();
10
- // eslint-disable-next-line @typescript-eslint/no-this-alias
11
- const manager = this;
12
- this.#task = run(function* () {
13
- const desiredSubscriptions = yield* useValueSignal([]);
14
- // eslint-disable-next-line @typescript-eslint/unbound-method
15
- manager.#updateDesiredSubscriptions = desiredSubscriptions.update;
16
- const messages = yield* useObjectSetWatcherSession(client.baseUrl, () => until(client.tokenProvider()), client.ontologyRid, desiredSubscriptions);
17
- for (const message of yield* each(messages)) {
18
- if (message.type === "change" || message.type === "refresh") {
19
- const subscriptions = manager.#objectSetSubscriptions.get(message.subscriptionId);
20
- subscriptions?.forEach((sub) => {
21
- try {
22
- sub(message);
23
- }
24
- catch (error) {
25
- console.error("Error during subscription callback", error);
26
- }
27
- });
28
- }
29
- else {
30
- for (const update of message.updates) {
31
- const subscriptions = manager.#objectSetSubscriptions.get(update.subscriptionId);
32
- subscriptions?.forEach((sub) => {
33
- try {
34
- sub({ type: "state", status: update.status });
35
- }
36
- catch (error) {
37
- console.error("Error during subscription callback", error);
38
- }
39
- });
40
- if (update.status === "error") {
41
- desiredSubscriptions.update((subs) => subs.filter((sub) => sub.id === update.subscriptionId));
42
- }
43
- }
44
- }
45
- yield* each.next();
46
- }
47
- });
48
- }
49
- subscribe(objectSet, callback) {
50
- const key = JSON.stringify(objectSet);
51
- let existingSubscriptions = this.#objectSetSubscriptions.get(key);
52
- if (!existingSubscriptions) {
53
- existingSubscriptions = new Set();
54
- this.#objectSetSubscriptions.set(key, existingSubscriptions);
55
- this.#updateDesiredSubscriptions?.((subs) => [
56
- ...subs,
57
- { id: key, objectSet, propertySet: [], referenceSet: [] },
58
- ]);
59
- }
60
- existingSubscriptions.add(callback);
61
- return () => {
62
- const deleted = existingSubscriptions.delete(callback);
63
- if (deleted && existingSubscriptions.size === 0) {
64
- this.#objectSetSubscriptions.delete(key);
65
- this.#updateDesiredSubscriptions?.((subs) => subs.filter((sub) => sub.id === key));
66
- }
67
- };
68
- }
69
- async stop() {
70
- if (this.#task) {
71
- const task = this.#task;
72
- this.#task = undefined;
73
- await task.halt();
74
- }
75
- }
76
- }
77
- const cache = new WeakMap();
78
- export function getObjectSetWatcherManager(client) {
79
- let manager = cache.get(client);
80
- if (!manager) {
81
- manager = new ObjectSetWatcherManager(client);
82
- cache.set(client, manager);
83
- }
84
- return manager;
85
- }
86
- //# sourceMappingURL=ObjectSetWatcherManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObjectSetWatcherManager.js","sourceRoot":"","sources":["../../../src/adapter/sync/ObjectSetWatcherManager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { type Operation } from "effection";
2
- import type { ValueSignal } from "@effectionx/signals";
3
- export declare function useValueSignal<T>(initial: T): Operation<ValueSignal<T>>;
4
- //# sourceMappingURL=useValueSignal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useValueSignal.d.ts","sourceRoot":"","sources":["../../../../src/adapter/sync/effection-utils/useValueSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,SAAS,EAAY,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA+BvE"}
@@ -1,31 +0,0 @@
1
- import { createSignal, resource } from "effection";
2
- // TODO: port this upstream.
3
- export function useValueSignal(initial) {
4
- return resource(function* (provide) {
5
- const signal = createSignal();
6
- const ref = { current: initial };
7
- function set(value) {
8
- if (value !== ref.current) {
9
- ref.current = value;
10
- signal.send(ref.current);
11
- }
12
- return ref.current;
13
- }
14
- try {
15
- yield* provide({
16
- [Symbol.iterator]: signal[Symbol.iterator],
17
- set,
18
- update(updater) {
19
- return set(updater(ref.current));
20
- },
21
- valueOf() {
22
- return ref.current;
23
- },
24
- });
25
- }
26
- finally {
27
- signal.close();
28
- }
29
- });
30
- }
31
- //# sourceMappingURL=useValueSignal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useValueSignal.js","sourceRoot":"","sources":["../../../../src/adapter/sync/effection-utils/useValueSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGnE,4BAA4B;AAE5B,MAAM,UAAU,cAAc,CAAI,OAAU;IACxC,OAAO,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO;QAC9B,MAAM,MAAM,GAAG,YAAY,EAAW,CAAC;QAEvC,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAEjC,SAAS,GAAG,CAAC,KAAQ;YACjB,IAAI,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;gBACxB,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;gBAEpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YAED,OAAO,GAAG,CAAC,OAAO,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACD,KAAK,CAAC,CAAC,OAAO,CAAC;gBACX,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAC1C,GAAG;gBACH,MAAM,CAAC,OAAO;oBACV,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrC,CAAC;gBACD,OAAO;oBACH,OAAO,GAAG,CAAC,OAAO,CAAC;gBACvB,CAAC;aACJ,CAAC,CAAC;QACP,CAAC;gBAAS,CAAC;YACP,MAAM,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,10 +0,0 @@
1
- import { Stream, Operation } from "effection";
2
- import { ObjectSetSubscription, ObjectSetSubscriptionsMessage } from "./ObjectSetSubscription";
3
- import type { ValueSignal } from "@effectionx/signals";
4
- /**
5
- * Creates a resources that tracks the lifetime of a single physical Object Set Watcher connection.
6
- *
7
- * Handles connection details, maintaining the connection with heartbeats, and shuttling messages.
8
- */
9
- export declare function useObjectSetWatcherConnection(baseUrl: string, token: string, ontologyRid: string, desiredSubscriptions: ValueSignal<ObjectSetSubscription[]>): Operation<Stream<ObjectSetSubscriptionsMessage, CloseEvent | void>>;
10
- //# sourceMappingURL=useObjectSetWatcherConnection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useObjectSetWatcherConnection.d.ts","sourceRoot":"","sources":["../../../src/adapter/sync/useObjectSetWatcherConnection.ts"],"names":[],"mappings":"AAOA,OAAO,EAAgC,MAAM,EAAE,SAAS,EAAiB,MAAM,WAAW,CAAC;AAC3F,OAAO,EACH,qBAAqB,EACrB,6BAA6B,EAGhC,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AA0DvD;;;;GAIG;AACH,wBAAgB,6BAA6B,CACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,oBAAoB,EAAE,WAAW,CAAC,qBAAqB,EAAE,CAAC,GAC3D,SAAS,CAAC,MAAM,CAAC,6BAA6B,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC,CAmJrE"}
@@ -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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"}