@microsoft/live-share-react 1.0.0-preview.22 → 1.0.0-preview.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -10
- package/bin/interfaces/LiveInterfaceExtensions.d.ts +17 -0
- package/bin/interfaces/LiveInterfaceExtensions.d.ts.map +1 -1
- package/bin/internal/errors.d.ts +26 -0
- package/bin/internal/errors.d.ts.map +1 -0
- package/bin/internal/errors.js +39 -0
- package/bin/internal/errors.js.map +1 -0
- package/bin/internal/index.d.ts +4 -0
- package/bin/internal/index.d.ts.map +1 -0
- package/bin/internal/index.js +4 -0
- package/bin/internal/index.js.map +1 -0
- package/bin/internal/type-guards.d.ts +6 -0
- package/bin/internal/type-guards.d.ts.map +1 -0
- package/bin/internal/type-guards.js +8 -0
- package/bin/internal/type-guards.js.map +1 -0
- package/bin/internal/useSharedStateRegistry.d.ts.map +1 -0
- package/bin/internal/useSharedStateRegistry.js.map +1 -0
- package/bin/live-hooks/useLiveEvent.d.ts.map +1 -1
- package/bin/live-hooks/useLiveEvent.js +12 -4
- package/bin/live-hooks/useLiveEvent.js.map +1 -1
- package/bin/live-hooks/useLivePresence.d.ts +2 -2
- package/bin/live-hooks/useLivePresence.d.ts.map +1 -1
- package/bin/live-hooks/useLivePresence.js +19 -14
- package/bin/live-hooks/useLivePresence.js.map +1 -1
- package/bin/live-hooks/useLiveState.d.ts +2 -2
- package/bin/live-hooks/useLiveState.d.ts.map +1 -1
- package/bin/live-hooks/useLiveState.js +15 -8
- package/bin/live-hooks/useLiveState.js.map +1 -1
- package/bin/live-hooks/useLiveTimer.d.ts.map +1 -1
- package/bin/live-hooks/useLiveTimer.js +21 -15
- package/bin/live-hooks/useLiveTimer.js.map +1 -1
- package/bin/live-hooks/useMediaSynchronizer.d.ts.map +1 -1
- package/bin/live-hooks/useMediaSynchronizer.js +31 -12
- package/bin/live-hooks/useMediaSynchronizer.js.map +1 -1
- package/bin/providers/AzureProvider.d.ts +1 -1
- package/bin/providers/AzureProvider.d.ts.map +1 -1
- package/bin/providers/AzureProvider.js +1 -1
- package/bin/providers/AzureProvider.js.map +1 -1
- package/bin/providers/LiveShareProvider.js +1 -1
- package/bin/providers/LiveShareProvider.js.map +1 -1
- package/bin/shared-hooks/useSharedMap.d.ts.map +1 -1
- package/bin/shared-hooks/useSharedMap.js +15 -8
- package/bin/shared-hooks/useSharedMap.js.map +1 -1
- package/bin/shared-hooks/useSharedState.d.ts.map +1 -1
- package/bin/shared-hooks/useSharedState.js +9 -3
- package/bin/shared-hooks/useSharedState.js.map +1 -1
- package/bin/types/ActionTypes.d.ts +8 -2
- package/bin/types/ActionTypes.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/interfaces/LiveInterfaceExtensions.ts +17 -0
- package/src/internal/errors.ts +48 -0
- package/src/internal/index.ts +3 -0
- package/src/internal/type-guards.ts +9 -0
- package/src/live-hooks/useLiveEvent.ts +29 -6
- package/src/live-hooks/useLivePresence.ts +33 -21
- package/src/live-hooks/useLiveState.ts +31 -17
- package/src/live-hooks/useLiveTimer.ts +32 -26
- package/src/live-hooks/useMediaSynchronizer.ts +60 -8
- package/src/providers/AzureProvider.tsx +1 -1
- package/src/providers/LiveShareProvider.tsx +1 -1
- package/src/shared-hooks/useSharedMap.ts +29 -10
- package/src/shared-hooks/useSharedState.ts +9 -3
- package/src/types/ActionTypes.ts +10 -2
- package/bin/internal-hooks/index.d.ts +0 -2
- package/bin/internal-hooks/index.d.ts.map +0 -1
- package/bin/internal-hooks/index.js +0 -2
- package/bin/internal-hooks/index.js.map +0 -1
- package/bin/internal-hooks/useDynamicDDSRegistry.d.ts +0 -14
- package/bin/internal-hooks/useDynamicDDSRegistry.d.ts.map +0 -1
- package/bin/internal-hooks/useDynamicDDSRegistry.js +0 -142
- package/bin/internal-hooks/useDynamicDDSRegistry.js.map +0 -1
- package/bin/internal-hooks/useSharedStateRegistry.d.ts.map +0 -1
- package/bin/internal-hooks/useSharedStateRegistry.js.map +0 -1
- package/bin/internal-hooks/useStateRef.d.ts +0 -7
- package/bin/internal-hooks/useStateRef.d.ts.map +0 -1
- package/bin/internal-hooks/useStateRef.js +0 -15
- package/bin/internal-hooks/useStateRef.js.map +0 -1
- package/bin/live-hooks/useLiveAICompletion.d.ts +0 -29
- package/bin/live-hooks/useLiveAICompletion.d.ts.map +0 -1
- package/bin/live-hooks/useLiveAICompletion.js +0 -186
- package/bin/live-hooks/useLiveAICompletion.js.map +0 -1
- package/bin/live-hooks/useLiveCoPilot.d.ts +0 -28
- package/bin/live-hooks/useLiveCoPilot.d.ts.map +0 -1
- package/bin/live-hooks/useLiveCoPilot.js +0 -178
- package/bin/live-hooks/useLiveCoPilot.js.map +0 -1
- package/bin/live-share-turbo/AzureTurboClient.d.ts +0 -39
- package/bin/live-share-turbo/AzureTurboClient.d.ts.map +0 -1
- package/bin/live-share-turbo/AzureTurboClient.js +0 -56
- package/bin/live-share-turbo/AzureTurboClient.js.map +0 -1
- package/bin/live-share-turbo/LiveShareTurboClient.d.ts +0 -53
- package/bin/live-share-turbo/LiveShareTurboClient.d.ts.map +0 -1
- package/bin/live-share-turbo/LiveShareTurboClient.js +0 -69
- package/bin/live-share-turbo/LiveShareTurboClient.js.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboDataObject.d.ts +0 -31
- package/bin/live-share-turbo/dds-objects/TurboDataObject.d.ts.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboDataObject.js +0 -75
- package/bin/live-share-turbo/dds-objects/TurboDataObject.js.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboLiveCanvas.d.ts +0 -48
- package/bin/live-share-turbo/dds-objects/TurboLiveCanvas.d.ts.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboLiveCanvas.js +0 -104
- package/bin/live-share-turbo/dds-objects/TurboLiveCanvas.js.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboLiveEvent.d.ts +0 -28
- package/bin/live-share-turbo/dds-objects/TurboLiveEvent.d.ts.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboLiveEvent.js +0 -68
- package/bin/live-share-turbo/dds-objects/TurboLiveEvent.js.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboLiveMediaSession.d.ts +0 -60
- package/bin/live-share-turbo/dds-objects/TurboLiveMediaSession.d.ts.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboLiveMediaSession.js +0 -111
- package/bin/live-share-turbo/dds-objects/TurboLiveMediaSession.js.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboLivePresence.d.ts +0 -77
- package/bin/live-share-turbo/dds-objects/TurboLivePresence.d.ts.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboLivePresence.js +0 -137
- package/bin/live-share-turbo/dds-objects/TurboLivePresence.js.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboLiveState.d.ts +0 -30
- package/bin/live-share-turbo/dds-objects/TurboLiveState.d.ts.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboLiveState.js +0 -74
- package/bin/live-share-turbo/dds-objects/TurboLiveState.js.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboSharedMap.d.ts +0 -61
- package/bin/live-share-turbo/dds-objects/TurboSharedMap.d.ts.map +0 -1
- package/bin/live-share-turbo/dds-objects/TurboSharedMap.js +0 -108
- package/bin/live-share-turbo/dds-objects/TurboSharedMap.js.map +0 -1
- package/bin/live-share-turbo/dds-objects/index.d.ts +0 -8
- package/bin/live-share-turbo/dds-objects/index.d.ts.map +0 -1
- package/bin/live-share-turbo/dds-objects/index.js +0 -8
- package/bin/live-share-turbo/dds-objects/index.js.map +0 -1
- package/bin/live-share-turbo/index.d.ts +0 -5
- package/bin/live-share-turbo/index.d.ts.map +0 -1
- package/bin/live-share-turbo/index.js +0 -5
- package/bin/live-share-turbo/index.js.map +0 -1
- package/bin/live-share-turbo/interfaces/IFluidTurboClient.d.ts +0 -15
- package/bin/live-share-turbo/interfaces/IFluidTurboClient.d.ts.map +0 -1
- package/bin/live-share-turbo/interfaces/IFluidTurboClient.js +0 -2
- package/bin/live-share-turbo/interfaces/IFluidTurboClient.js.map +0 -1
- package/bin/live-share-turbo/interfaces/index.d.ts +0 -3
- package/bin/live-share-turbo/interfaces/index.d.ts.map +0 -1
- package/bin/live-share-turbo/interfaces/index.js +0 -3
- package/bin/live-share-turbo/interfaces/index.js.map +0 -1
- package/bin/live-share-turbo/internals/FluidTurboClient.d.ts +0 -39
- package/bin/live-share-turbo/internals/FluidTurboClient.d.ts.map +0 -1
- package/bin/live-share-turbo/internals/FluidTurboClient.js +0 -121
- package/bin/live-share-turbo/internals/FluidTurboClient.js.map +0 -1
- package/bin/live-share-turbo/internals/index.d.ts +0 -2
- package/bin/live-share-turbo/internals/index.d.ts.map +0 -1
- package/bin/live-share-turbo/internals/index.js +0 -2
- package/bin/live-share-turbo/internals/index.js.map +0 -1
- package/bin/live-share-turbo/internals/types.d.ts +0 -4
- package/bin/live-share-turbo/internals/types.d.ts.map +0 -1
- package/bin/live-share-turbo/internals/types.js +0 -2
- package/bin/live-share-turbo/internals/types.js.map +0 -1
- package/bin/providers/FluidContextProvider.d.ts +0 -34
- package/bin/providers/FluidContextProvider.d.ts.map +0 -1
- package/bin/providers/FluidContextProvider.js +0 -99
- package/bin/providers/FluidContextProvider.js.map +0 -1
- package/bin/providers/LiveShareContextProvider.d.ts +0 -42
- package/bin/providers/LiveShareContextProvider.d.ts.map +0 -1
- package/bin/providers/LiveShareContextProvider.js +0 -63
- package/bin/providers/LiveShareContextProvider.js.map +0 -1
- package/bin/shared-hooks/useLockedTask.d.ts +0 -11
- package/bin/shared-hooks/useLockedTask.d.ts.map +0 -1
- package/bin/shared-hooks/useLockedTask.js +0 -82
- package/bin/shared-hooks/useLockedTask.js.map +0 -1
- package/bin/shared-hooks/useTaskManager.d.ts +0 -13
- package/bin/shared-hooks/useTaskManager.d.ts.map +0 -1
- package/bin/shared-hooks/useTaskManager.js +0 -86
- package/bin/shared-hooks/useTaskManager.js.map +0 -1
- package/bin/utils/getContainerSchema.d.ts +0 -8
- package/bin/utils/getContainerSchema.d.ts.map +0 -1
- package/bin/utils/getContainerSchema.js +0 -41
- package/bin/utils/getContainerSchema.js.map +0 -1
- package/src/internal-hooks/index.ts +0 -1
- /package/bin/{internal-hooks → internal}/useSharedStateRegistry.d.ts +0 -0
- /package/bin/{internal-hooks → internal}/useSharedStateRegistry.js +0 -0
- /package/src/{internal-hooks → internal}/useSharedStateRegistry.ts +0 -0
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
11
|
-
/**
|
|
12
|
-
* Hook used internally to keep track of the DDSSetStateActionMap for each unique key. It gets DDS objects for provided keys where they exist and creates
|
|
13
|
-
* them where they do not, providing the DDS objects to components that use them.
|
|
14
|
-
*
|
|
15
|
-
* @param results IAzureContainerResults response or undefined
|
|
16
|
-
* @returns IDynamicDDSRegistry object
|
|
17
|
-
*/
|
|
18
|
-
export const useDynamicDDSRegistry = (results) => {
|
|
19
|
-
const registeredDDSSetStateActionMapRef = useRef(new Map());
|
|
20
|
-
// Get the DDS from dynamicObjects for a given key, if known
|
|
21
|
-
const getDDS = useCallback((key) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
-
const dynamicObjectMap = results === null || results === void 0 ? void 0 : results.container.initialObjects.dynamicObjects;
|
|
23
|
-
if (dynamicObjectMap) {
|
|
24
|
-
const handleValue = dynamicObjectMap.get(key);
|
|
25
|
-
if (handleValue) {
|
|
26
|
-
const dds = yield handleValue.get();
|
|
27
|
-
return dds;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
return undefined;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
throw new Error("getDDS should never be called if dynamicObjects is undefined");
|
|
35
|
-
}
|
|
36
|
-
}), [results]);
|
|
37
|
-
// Create a new DDS of type T in dynamicObjects
|
|
38
|
-
const createDDS = useCallback((key, objectClass) => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
-
const dynamicObjectMap = results === null || results === void 0 ? void 0 : results.container.initialObjects.dynamicObjects;
|
|
40
|
-
if (dynamicObjectMap) {
|
|
41
|
-
// Create a new DDS and set the handle to the DDS
|
|
42
|
-
const dds = yield results.container.create(objectClass);
|
|
43
|
-
dynamicObjectMap.set(key, dds.handle);
|
|
44
|
-
return dds;
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
throw new Error("createDDS: should never be called if dynamicObjectsMap is undefined");
|
|
48
|
-
}
|
|
49
|
-
}), [results]);
|
|
50
|
-
// Callback for hooks (e.g., useSharedMap) to register a new set state action so they
|
|
51
|
-
// always have the most recent DDS. If one does not exist, we create it here.
|
|
52
|
-
const registerDDSSetStateAction = useCallback((uniqueKey, componentId, objectClass, setLocalStateAction, onDidFirstInitialize) => __awaiter(void 0, void 0, void 0, function* () {
|
|
53
|
-
let shouldCreateIfNeeded = false;
|
|
54
|
-
let actionsMap = registeredDDSSetStateActionMapRef.current.get(uniqueKey);
|
|
55
|
-
if (actionsMap) {
|
|
56
|
-
if (!actionsMap.has(componentId)) {
|
|
57
|
-
shouldCreateIfNeeded = true;
|
|
58
|
-
actionsMap.set(componentId, setLocalStateAction);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
shouldCreateIfNeeded = true;
|
|
63
|
-
actionsMap = new Map();
|
|
64
|
-
actionsMap.set(componentId, setLocalStateAction);
|
|
65
|
-
registeredDDSSetStateActionMapRef.current.set(uniqueKey, actionsMap);
|
|
66
|
-
}
|
|
67
|
-
try {
|
|
68
|
-
// Set initial values, if known
|
|
69
|
-
let dds = yield getDDS(uniqueKey);
|
|
70
|
-
if (dds) {
|
|
71
|
-
setLocalStateAction(dds);
|
|
72
|
-
}
|
|
73
|
-
else if (shouldCreateIfNeeded) {
|
|
74
|
-
// Create a new DDS of type T
|
|
75
|
-
dds = yield createDDS(uniqueKey, objectClass);
|
|
76
|
-
setLocalStateAction(dds);
|
|
77
|
-
onDidFirstInitialize === null || onDidFirstInitialize === void 0 ? void 0 : onDidFirstInitialize(dds);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
throw error;
|
|
82
|
-
}
|
|
83
|
-
}), [results]);
|
|
84
|
-
// Callback for hooks (e.g., useSharedMap) to unregister their set state actions
|
|
85
|
-
const unregisterDDSSetStateAction = useCallback((uniqueKey, componentId) => {
|
|
86
|
-
let actionsMap = registeredDDSSetStateActionMapRef.current.get(uniqueKey);
|
|
87
|
-
if (actionsMap === null || actionsMap === void 0 ? void 0 : actionsMap.has(componentId)) {
|
|
88
|
-
actionsMap.delete(componentId);
|
|
89
|
-
}
|
|
90
|
-
}, []);
|
|
91
|
-
// Initial setup
|
|
92
|
-
useEffect(() => {
|
|
93
|
-
if (!results)
|
|
94
|
-
return;
|
|
95
|
-
const { container } = results;
|
|
96
|
-
const dynamicObjectMap = container.initialObjects
|
|
97
|
-
.dynamicObjects;
|
|
98
|
-
// Register value changed listener
|
|
99
|
-
const valueChangedListener = (changed, local) => {
|
|
100
|
-
if (local)
|
|
101
|
-
return;
|
|
102
|
-
if (registeredDDSSetStateActionMapRef.current.has(changed.key)) {
|
|
103
|
-
const actionMap = registeredDDSSetStateActionMapRef.current.get(changed.key);
|
|
104
|
-
// Get the DDS for the changed value, if known
|
|
105
|
-
getDDS(changed.key)
|
|
106
|
-
.then((dds) => {
|
|
107
|
-
// Update each component that has registered an action in actionMap
|
|
108
|
-
actionMap === null || actionMap === void 0 ? void 0 : actionMap.forEach((setLocalStateHandler) => {
|
|
109
|
-
setLocalStateHandler(dds);
|
|
110
|
-
});
|
|
111
|
-
})
|
|
112
|
-
.catch((error) => console.error(error));
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
dynamicObjectMap.on("valueChanged", valueChangedListener);
|
|
116
|
-
// Set initial values
|
|
117
|
-
dynamicObjectMap.forEach((handleValue, key) => {
|
|
118
|
-
const actionMap = registeredDDSSetStateActionMapRef.current.get(key);
|
|
119
|
-
if (handleValue) {
|
|
120
|
-
handleValue
|
|
121
|
-
.get()
|
|
122
|
-
.then((dds) => {
|
|
123
|
-
// Update each component that has registered an action in actionMap
|
|
124
|
-
actionMap === null || actionMap === void 0 ? void 0 : actionMap.forEach((setLocalStateHandler) => {
|
|
125
|
-
setLocalStateHandler(dds);
|
|
126
|
-
});
|
|
127
|
-
})
|
|
128
|
-
.catch((error) => {
|
|
129
|
-
console.error(error);
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
return () => {
|
|
134
|
-
dynamicObjectMap.off("valueChanged", valueChangedListener);
|
|
135
|
-
};
|
|
136
|
-
}, [results]);
|
|
137
|
-
return {
|
|
138
|
-
registerDDSSetStateAction,
|
|
139
|
-
unregisterDDSSetStateAction,
|
|
140
|
-
};
|
|
141
|
-
};
|
|
142
|
-
//# sourceMappingURL=useDynamicDDSRegistry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDynamicDDSRegistry.js","sourceRoot":"","sources":["../../src/internal-hooks/useDynamicDDSRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useSharedStateRegistry.d.ts","sourceRoot":"","sources":["../../src/internal-hooks/useSharedStateRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACH,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAE5B,8BAA8B,EAC9B,uBAAuB,EAC1B,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,4BAA4B;IACzC;;OAEG;IACH,4BAA4B,EAAE,4BAA4B,CAAC;IAC3D;;OAEG;IACH,8BAA8B,EAAE,8BAA8B,CAAC;IAC/D;;OAEG;IACH,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C;;OAEG;IACH,iBAAiB,EAAE,uBAAuB,CAAC;CAC9C;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,YACtB,sBAAsB,GAAG,SAAS,KAC5C,4BAwHF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useSharedStateRegistry.js","sourceRoot":"","sources":["../../src/internal-hooks/useSharedStateRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { MutableRefObject } from "react";
|
|
6
|
-
export declare function useStateRef<T>(initialValue: T): [T, MutableRefObject<T>, (value: T) => void];
|
|
7
|
-
//# sourceMappingURL=useStateRef.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useStateRef.d.ts","sourceRoot":"","sources":["../../src/internal-hooks/useStateRef.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAiC,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAExE,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,CAa5F"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { useState, useRef, useCallback } from "react";
|
|
6
|
-
export function useStateRef(initialValue) {
|
|
7
|
-
const reference = useRef(initialValue);
|
|
8
|
-
const [state, setState] = useState(reference.current);
|
|
9
|
-
const setValue = useCallback((value) => {
|
|
10
|
-
reference.current = value;
|
|
11
|
-
setState(reference.current);
|
|
12
|
-
}, [reference, setState]);
|
|
13
|
-
return [state, reference, setValue];
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=useStateRef.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useStateRef.js","sourceRoot":"","sources":["../../src/internal-hooks/useStateRef.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAoB,MAAM,OAAO,CAAC;AAExE,MAAM,UAAU,WAAW,CAAI,YAAe;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAEtD,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,KAAQ,EAAE,EAAE;QACX,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,EACD,CAAC,SAAS,EAAE,QAAQ,CAAC,CACtB,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the Microsoft Live Share SDK License.
|
|
4
|
-
*/
|
|
5
|
-
import { UserMeetingRole } from "@microsoft/live-share";
|
|
6
|
-
import { IUseLiveAICompletionResults } from "../types";
|
|
7
|
-
/**
|
|
8
|
-
* React hook for using a Live Share Turbo `LiveAICompletion`. Intended for use with OpenAI's Completion API.
|
|
9
|
-
*
|
|
10
|
-
* @remarks
|
|
11
|
-
* Use this hook to set up an `LiveAICompletion` object, which is used for using AI completions collaboratively at minimal cost.
|
|
12
|
-
*
|
|
13
|
-
* @param uniqueKey the unique key for the `LiveAICompletion`. If one does not yet exist, a new one.
|
|
14
|
-
* @param onGetCompletion React useCallback function that returns a Promise<string> for the latest `promptValue`. Function is intended to
|
|
15
|
-
* communicate with a backend API that uses OpenAI's Completion API.
|
|
16
|
-
* @param allowedRoles Optional. The meeting roles eligible to send events through this object.
|
|
17
|
-
* @param defaultPromptValue Optional. Text that sets the default prompt value. Default value is an empty string.
|
|
18
|
-
* @param autoCompletions Optional. Stateful boolean that when true, will automatically send completions when the `promptValue` changes. Default value is
|
|
19
|
-
* false.
|
|
20
|
-
* @param debounceDelayMilliseconds Optional. Stateful number that changes the debounce interval when `autoCompletions` is true. Default value is 2500.
|
|
21
|
-
* @param lockPrompt Optional. Stateful boolean that when true, will restrict prompt changes to only the user with `haveCompletionLock` set to true. Default
|
|
22
|
-
* value is false.
|
|
23
|
-
* @param lockCompletion Optional. Stateful boolean that when true, will restrict manual completion changes to only the user with `haveCompletionLock`
|
|
24
|
-
* set to true. This does not impact the `autoCompletions` setting, because `autoCompletions` already has this behavior. Default value is false.
|
|
25
|
-
*
|
|
26
|
-
* @returns IUseLiveAICompletionResults object that contains stateful responses and callback methods from `LiveAICompletion`.
|
|
27
|
-
*/
|
|
28
|
-
export declare const useLiveAICompletion: (uniqueKey: string, onGetCompletion: (promptValue: string) => Promise<string>, allowedRoles?: UserMeetingRole[], defaultPromptValue?: string, autoCompletions?: boolean, debounceDelayMilliseconds?: number, lockPrompt?: boolean, lockCompletion?: boolean) => IUseLiveAICompletionResults;
|
|
29
|
-
//# sourceMappingURL=useLiveAICompletion.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useLiveAICompletion.d.ts","sourceRoot":"","sources":["../../src/live-hooks/useLiveAICompletion.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAOxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAGvD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,cACjB,MAAM,iCACc,MAAM,KAAK,QAAQ,MAAM,CAAC,iBAC1C,eAAe,EAAE,uBACX,MAAM,oBACT,OAAO,8BACG,MAAM,eACrB,OAAO,mBACH,OAAO,KACzB,2BAyMF,CAAC"}
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the Microsoft Live Share SDK License.
|
|
4
|
-
*/
|
|
5
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
-
});
|
|
13
|
-
};
|
|
14
|
-
import { LiveAICompletion, LiveAICompletionEvents, } from "@microsoft/live-share-turbo";
|
|
15
|
-
import React from "react";
|
|
16
|
-
import { useDynamicDDS } from "../shared-hooks";
|
|
17
|
-
/**
|
|
18
|
-
* React hook for using a Live Share Turbo `LiveAICompletion`. Intended for use with OpenAI's Completion API.
|
|
19
|
-
*
|
|
20
|
-
* @remarks
|
|
21
|
-
* Use this hook to set up an `LiveAICompletion` object, which is used for using AI completions collaboratively at minimal cost.
|
|
22
|
-
*
|
|
23
|
-
* @param uniqueKey the unique key for the `LiveAICompletion`. If one does not yet exist, a new one.
|
|
24
|
-
* @param onGetCompletion React useCallback function that returns a Promise<string> for the latest `promptValue`. Function is intended to
|
|
25
|
-
* communicate with a backend API that uses OpenAI's Completion API.
|
|
26
|
-
* @param allowedRoles Optional. The meeting roles eligible to send events through this object.
|
|
27
|
-
* @param defaultPromptValue Optional. Text that sets the default prompt value. Default value is an empty string.
|
|
28
|
-
* @param autoCompletions Optional. Stateful boolean that when true, will automatically send completions when the `promptValue` changes. Default value is
|
|
29
|
-
* false.
|
|
30
|
-
* @param debounceDelayMilliseconds Optional. Stateful number that changes the debounce interval when `autoCompletions` is true. Default value is 2500.
|
|
31
|
-
* @param lockPrompt Optional. Stateful boolean that when true, will restrict prompt changes to only the user with `haveCompletionLock` set to true. Default
|
|
32
|
-
* value is false.
|
|
33
|
-
* @param lockCompletion Optional. Stateful boolean that when true, will restrict manual completion changes to only the user with `haveCompletionLock`
|
|
34
|
-
* set to true. This does not impact the `autoCompletions` setting, because `autoCompletions` already has this behavior. Default value is false.
|
|
35
|
-
*
|
|
36
|
-
* @returns IUseLiveAICompletionResults object that contains stateful responses and callback methods from `LiveAICompletion`.
|
|
37
|
-
*/
|
|
38
|
-
export const useLiveAICompletion = (uniqueKey, onGetCompletion, allowedRoles, defaultPromptValue, autoCompletions, debounceDelayMilliseconds, lockPrompt, lockCompletion) => {
|
|
39
|
-
/**
|
|
40
|
-
* Reference boolean for whether hook has registered "listening" events for `LiveAICompletion`.
|
|
41
|
-
*/
|
|
42
|
-
const listeningRef = React.useRef(false);
|
|
43
|
-
/**
|
|
44
|
-
* @see IUseLiveAICompletionResults["promptValue"]
|
|
45
|
-
*/
|
|
46
|
-
const [promptValue, setPromptValue] = React.useState("");
|
|
47
|
-
/**
|
|
48
|
-
* @see IUseLiveAICompletionResults["completionValue"]
|
|
49
|
-
*/
|
|
50
|
-
const [completionValue, setCompletionValue] = React.useState();
|
|
51
|
-
/**
|
|
52
|
-
* @see IUseLiveAICompletionResults["haveCompletionLock"]
|
|
53
|
-
*/
|
|
54
|
-
const [haveCompletionLock, setHaveCompletionLock] = React.useState(false);
|
|
55
|
-
/**
|
|
56
|
-
* User facing: dynamically load the DDS for the given unique key.
|
|
57
|
-
*/
|
|
58
|
-
const { dds: liveAICompletion } = useDynamicDDS(uniqueKey, LiveAICompletion);
|
|
59
|
-
/**
|
|
60
|
-
* @see IUseLiveAICompletionResults["changePrompt"]
|
|
61
|
-
*/
|
|
62
|
-
const changePrompt = React.useCallback((value) => {
|
|
63
|
-
if (liveAICompletion === undefined) {
|
|
64
|
-
console.error(new Error("Cannot call emitEvent when liveEvent is undefined"));
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
if (!liveAICompletion.isInitialized) {
|
|
68
|
-
console.error(new Error("Cannot call emitEvent while liveEvent is not started"));
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
return liveAICompletion.changePrompt(value);
|
|
72
|
-
}, [liveAICompletion]);
|
|
73
|
-
/**
|
|
74
|
-
* @see IUseLiveAICompletionResults["changePrompt"]
|
|
75
|
-
*/
|
|
76
|
-
const sendCompletion = React.useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
77
|
-
if (liveAICompletion === undefined) {
|
|
78
|
-
throw new Error("Cannot call sendCompletion while `liveAICompletion` is undefined");
|
|
79
|
-
}
|
|
80
|
-
if (!liveAICompletion.isInitialized) {
|
|
81
|
-
throw new Error("Cannot call sendCompletion while `liveAICompletion` is not initialized");
|
|
82
|
-
}
|
|
83
|
-
return liveAICompletion.sendCompletion();
|
|
84
|
-
}), [liveAICompletion]);
|
|
85
|
-
/**
|
|
86
|
-
* Sets up the `LiveAICompletion` instance.
|
|
87
|
-
*/
|
|
88
|
-
React.useEffect(() => {
|
|
89
|
-
if (listeningRef.current ||
|
|
90
|
-
(liveAICompletion === null || liveAICompletion === void 0 ? void 0 : liveAICompletion.isInitialized) === undefined)
|
|
91
|
-
return;
|
|
92
|
-
listeningRef.current = true;
|
|
93
|
-
// Register event listeners
|
|
94
|
-
const onPromptChanged = (promptValue, local, completionValuePromise) => __awaiter(void 0, void 0, void 0, function* () {
|
|
95
|
-
setPromptValue(promptValue);
|
|
96
|
-
if (!liveAICompletion.haveValidCompletionValue) {
|
|
97
|
-
setCompletionValue(undefined);
|
|
98
|
-
}
|
|
99
|
-
try {
|
|
100
|
-
const completionValue = yield completionValuePromise;
|
|
101
|
-
setCompletionValue(completionValue);
|
|
102
|
-
}
|
|
103
|
-
catch (_a) {
|
|
104
|
-
// We do nothing, since this typically fails as a result of a new prompt value replacing the old on, permissions changing, etc.
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
const onLockGranted = () => {
|
|
108
|
-
setHaveCompletionLock(true);
|
|
109
|
-
};
|
|
110
|
-
const onLockLost = () => {
|
|
111
|
-
setHaveCompletionLock(true);
|
|
112
|
-
};
|
|
113
|
-
liveAICompletion.on(LiveAICompletionEvents.promptChanged, onPromptChanged);
|
|
114
|
-
liveAICompletion.on(LiveAICompletionEvents.lockGranted, onLockGranted);
|
|
115
|
-
liveAICompletion.on(LiveAICompletionEvents.lockLost, onLockLost);
|
|
116
|
-
if (!liveAICompletion.isInitialized) {
|
|
117
|
-
// Initialize the LiveAICompletion instance
|
|
118
|
-
liveAICompletion.initialize(onGetCompletion, allowedRoles, defaultPromptValue);
|
|
119
|
-
}
|
|
120
|
-
return () => {
|
|
121
|
-
// on unmount, remove event listeners
|
|
122
|
-
listeningRef.current = false;
|
|
123
|
-
liveAICompletion === null || liveAICompletion === void 0 ? void 0 : liveAICompletion.off(LiveAICompletionEvents.promptChanged, onPromptChanged);
|
|
124
|
-
liveAICompletion === null || liveAICompletion === void 0 ? void 0 : liveAICompletion.off(LiveAICompletionEvents.lockGranted, onLockGranted);
|
|
125
|
-
liveAICompletion === null || liveAICompletion === void 0 ? void 0 : liveAICompletion.off(LiveAICompletionEvents.lockLost, onLockLost);
|
|
126
|
-
};
|
|
127
|
-
}, [liveAICompletion]);
|
|
128
|
-
/**
|
|
129
|
-
* Sets the onGetCompletion of the `liveAICompletion` based on the 'onGetCompletion' prop
|
|
130
|
-
*/
|
|
131
|
-
React.useEffect(() => {
|
|
132
|
-
if ((liveAICompletion === null || liveAICompletion === void 0 ? void 0 : liveAICompletion.isInitialized) === true &&
|
|
133
|
-
onGetCompletion !== undefined) {
|
|
134
|
-
liveAICompletion.onGetCompletion = onGetCompletion;
|
|
135
|
-
}
|
|
136
|
-
}, [liveAICompletion === null || liveAICompletion === void 0 ? void 0 : liveAICompletion.isInitialized, onGetCompletion]);
|
|
137
|
-
/**
|
|
138
|
-
* Sets the autoCompletions of the `liveAICompletion` based on the 'autoCompletions' prop
|
|
139
|
-
*/
|
|
140
|
-
React.useEffect(() => {
|
|
141
|
-
if (liveAICompletion !== undefined &&
|
|
142
|
-
autoCompletions !== undefined &&
|
|
143
|
-
liveAICompletion.autoCompletions !== autoCompletions) {
|
|
144
|
-
liveAICompletion.autoCompletions = autoCompletions;
|
|
145
|
-
}
|
|
146
|
-
}, [liveAICompletion === null || liveAICompletion === void 0 ? void 0 : liveAICompletion.autoCompletions, autoCompletions]);
|
|
147
|
-
/**
|
|
148
|
-
* Sets the debounceDelayMilliseconds of the `liveAICompletion` based on the 'debounceDelayMilliseconds' prop
|
|
149
|
-
*/
|
|
150
|
-
React.useEffect(() => {
|
|
151
|
-
if (liveAICompletion !== undefined &&
|
|
152
|
-
debounceDelayMilliseconds !== undefined &&
|
|
153
|
-
liveAICompletion.debounceDelayMilliseconds !== debounceDelayMilliseconds) {
|
|
154
|
-
liveAICompletion.debounceDelayMilliseconds = debounceDelayMilliseconds;
|
|
155
|
-
}
|
|
156
|
-
}, [liveAICompletion, debounceDelayMilliseconds]);
|
|
157
|
-
/**
|
|
158
|
-
* Sets the lockPrompt of the `liveAICompletion` based on the 'lockPrompt' prop
|
|
159
|
-
*/
|
|
160
|
-
React.useEffect(() => {
|
|
161
|
-
if (liveAICompletion !== undefined &&
|
|
162
|
-
lockPrompt !== undefined &&
|
|
163
|
-
liveAICompletion.lockPrompt !== lockPrompt) {
|
|
164
|
-
liveAICompletion.lockPrompt = lockPrompt;
|
|
165
|
-
}
|
|
166
|
-
}, [liveAICompletion === null || liveAICompletion === void 0 ? void 0 : liveAICompletion.lockPrompt, lockPrompt]);
|
|
167
|
-
/**
|
|
168
|
-
* Sets the lockCompletion of the `liveAICompletion` based on the 'lockCompletion' prop
|
|
169
|
-
*/
|
|
170
|
-
React.useEffect(() => {
|
|
171
|
-
if (liveAICompletion !== undefined &&
|
|
172
|
-
lockCompletion !== undefined &&
|
|
173
|
-
liveAICompletion.lockCompletion !== lockCompletion) {
|
|
174
|
-
liveAICompletion.lockCompletion = lockCompletion;
|
|
175
|
-
}
|
|
176
|
-
}, [liveAICompletion === null || liveAICompletion === void 0 ? void 0 : liveAICompletion.lockCompletion, lockCompletion]);
|
|
177
|
-
return {
|
|
178
|
-
changePrompt,
|
|
179
|
-
completionValue,
|
|
180
|
-
haveCompletionLock,
|
|
181
|
-
liveAICompletion,
|
|
182
|
-
promptValue,
|
|
183
|
-
sendCompletion,
|
|
184
|
-
};
|
|
185
|
-
};
|
|
186
|
-
//# sourceMappingURL=useLiveAICompletion.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useLiveAICompletion.js","sourceRoot":"","sources":["../../src/live-hooks/useLiveAICompletion.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the Microsoft Live Share SDK License.
|
|
4
|
-
*/
|
|
5
|
-
import { UserMeetingRole } from "@microsoft/live-share";
|
|
6
|
-
import { IUseLiveCoPilotResults } from "../types";
|
|
7
|
-
/**
|
|
8
|
-
* React hook for using a Live Share Turbo `LiveCoPilot`. Intended for use with OpenAI's Completion API.
|
|
9
|
-
*
|
|
10
|
-
* @remarks
|
|
11
|
-
* Use this hook to set up an `LiveCoPilot` object, which is used for using AI completions collaboratively at minimal cost.
|
|
12
|
-
*
|
|
13
|
-
* @param uniqueKey the unique key for the `LiveCoPilot`. If one does not yet exist, a new one.
|
|
14
|
-
* @param onGetCompletion React useCallback function that returns a Promise<string> for the latest `promptValue`. Function is intended to
|
|
15
|
-
* communicate with a backend API that uses OpenAI's Completion API.
|
|
16
|
-
* @param allowedRoles Optional. The meeting roles eligible to send events through this object.
|
|
17
|
-
* @param defaultPromptValue Optional. Text that sets the default prompt value. Default value is an empty string.
|
|
18
|
-
* @param autoCompletions Optional. Stateful boolean that when true, will automatically send completions when the `promptValue` changes. Default value is true.
|
|
19
|
-
* @param debounceDelayMilliseconds Optional. Stateful number that changes the debounce interval when `autoCompletions` is true. Default value is 1000.
|
|
20
|
-
* @param lockPrompt Optional. Stateful boolean that when true, will restrict prompt changes to only the user with `haveCompletionLock` set to true. Default
|
|
21
|
-
* value is false.
|
|
22
|
-
* @param lockCompletion Optional. Stateful boolean that when true, will restrict manual completion changes to only the user with `haveCompletionLock`
|
|
23
|
-
* set to true. This does not impact the `autoCompletions` setting, because `autoCompletions` already has this behavior. Default value is false.
|
|
24
|
-
*
|
|
25
|
-
* @returns IUseLiveCoPilotResults object that contains stateful responses and callback methods from `LiveCoPilot`.
|
|
26
|
-
*/
|
|
27
|
-
export declare const useLiveCoPilot: (uniqueKey: string, onGetCompletion: (promptValue: string) => Promise<string>, allowedRoles?: UserMeetingRole[], defaultPromptValue?: string, autoCompletions?: boolean, debounceDelayMilliseconds?: number, lockPrompt?: boolean, lockCompletion?: boolean) => IUseLiveCoPilotResults;
|
|
28
|
-
//# sourceMappingURL=useLiveCoPilot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useLiveCoPilot.d.ts","sourceRoot":"","sources":["../../src/live-hooks/useLiveCoPilot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAElD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,cAAc,cACZ,MAAM,iCACc,MAAM,KAAK,QAAQ,MAAM,CAAC,iBAC1C,eAAe,EAAE,uBACX,MAAM,oBACT,OAAO,8BACG,MAAM,eACrB,OAAO,mBACH,OAAO,KACzB,sBA4LF,CAAC"}
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the Microsoft Live Share SDK License.
|
|
4
|
-
*/
|
|
5
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
-
});
|
|
13
|
-
};
|
|
14
|
-
import { LiveCoPilot, LiveCoPilotEvents } from "@microsoft/live-share-turbo";
|
|
15
|
-
import React from "react";
|
|
16
|
-
import { useDynamicDDS } from "../shared-hooks";
|
|
17
|
-
/**
|
|
18
|
-
* React hook for using a Live Share Turbo `LiveCoPilot`. Intended for use with OpenAI's Completion API.
|
|
19
|
-
*
|
|
20
|
-
* @remarks
|
|
21
|
-
* Use this hook to set up an `LiveCoPilot` object, which is used for using AI completions collaboratively at minimal cost.
|
|
22
|
-
*
|
|
23
|
-
* @param uniqueKey the unique key for the `LiveCoPilot`. If one does not yet exist, a new one.
|
|
24
|
-
* @param onGetCompletion React useCallback function that returns a Promise<string> for the latest `promptValue`. Function is intended to
|
|
25
|
-
* communicate with a backend API that uses OpenAI's Completion API.
|
|
26
|
-
* @param allowedRoles Optional. The meeting roles eligible to send events through this object.
|
|
27
|
-
* @param defaultPromptValue Optional. Text that sets the default prompt value. Default value is an empty string.
|
|
28
|
-
* @param autoCompletions Optional. Stateful boolean that when true, will automatically send completions when the `promptValue` changes. Default value is true.
|
|
29
|
-
* @param debounceDelayMilliseconds Optional. Stateful number that changes the debounce interval when `autoCompletions` is true. Default value is 1000.
|
|
30
|
-
* @param lockPrompt Optional. Stateful boolean that when true, will restrict prompt changes to only the user with `haveCompletionLock` set to true. Default
|
|
31
|
-
* value is false.
|
|
32
|
-
* @param lockCompletion Optional. Stateful boolean that when true, will restrict manual completion changes to only the user with `haveCompletionLock`
|
|
33
|
-
* set to true. This does not impact the `autoCompletions` setting, because `autoCompletions` already has this behavior. Default value is false.
|
|
34
|
-
*
|
|
35
|
-
* @returns IUseLiveCoPilotResults object that contains stateful responses and callback methods from `LiveCoPilot`.
|
|
36
|
-
*/
|
|
37
|
-
export const useLiveCoPilot = (uniqueKey, onGetCompletion, allowedRoles, defaultPromptValue, autoCompletions, debounceDelayMilliseconds, lockPrompt, lockCompletion) => {
|
|
38
|
-
/**
|
|
39
|
-
* @see IUseLiveCoPilotResults["promptValue"]
|
|
40
|
-
*/
|
|
41
|
-
const [promptValue, setPromptValue] = React.useState("");
|
|
42
|
-
/**
|
|
43
|
-
* @see IUseLiveCoPilotResults["completionValue"]
|
|
44
|
-
*/
|
|
45
|
-
const [completionValue, setCompletionValue] = React.useState();
|
|
46
|
-
/**
|
|
47
|
-
* @see IUseLiveCoPilotResults["haveCompletionLock"]
|
|
48
|
-
*/
|
|
49
|
-
const [haveCompletionLock, setHaveCompletionLock] = React.useState(false);
|
|
50
|
-
/**
|
|
51
|
-
* User facing: dynamically load the DDS for the given unique key.
|
|
52
|
-
*/
|
|
53
|
-
const { dds: liveCoPilot } = useDynamicDDS(uniqueKey, LiveCoPilot);
|
|
54
|
-
/**
|
|
55
|
-
* @see IUseLiveCoPilotResults["changePrompt"]
|
|
56
|
-
*/
|
|
57
|
-
const changePrompt = React.useCallback((value) => {
|
|
58
|
-
if (liveCoPilot === undefined) {
|
|
59
|
-
console.error(new Error("Cannot call emitEvent when liveEvent is undefined"));
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
if (!liveCoPilot.isInitialized) {
|
|
63
|
-
console.error(new Error("Cannot call emitEvent while liveEvent is not started"));
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
return liveCoPilot.changePrompt(value);
|
|
67
|
-
}, [liveCoPilot]);
|
|
68
|
-
/**
|
|
69
|
-
* @see IUseLiveCoPilotResults["changePrompt"]
|
|
70
|
-
*/
|
|
71
|
-
const sendCompletion = React.useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
72
|
-
if (liveCoPilot === undefined) {
|
|
73
|
-
throw new Error("Cannot call sendCompletion while `liveCoPilot` is undefined");
|
|
74
|
-
}
|
|
75
|
-
if (!liveCoPilot.isInitialized) {
|
|
76
|
-
throw new Error("Cannot call sendCompletion while `liveCoPilot` is not initialized");
|
|
77
|
-
}
|
|
78
|
-
return liveCoPilot.sendCompletion();
|
|
79
|
-
}), [liveCoPilot]);
|
|
80
|
-
/**
|
|
81
|
-
* Sets up the `LiveCoPilot` instance.
|
|
82
|
-
*/
|
|
83
|
-
React.useEffect(() => {
|
|
84
|
-
if (liveCoPilot === undefined)
|
|
85
|
-
return;
|
|
86
|
-
// Register event listeners
|
|
87
|
-
const onPromptChanged = (promptValue, local, completionValuePromise) => __awaiter(void 0, void 0, void 0, function* () {
|
|
88
|
-
setPromptValue(promptValue);
|
|
89
|
-
if (!liveCoPilot.haveValidCompletionValue) {
|
|
90
|
-
setCompletionValue(undefined);
|
|
91
|
-
}
|
|
92
|
-
try {
|
|
93
|
-
const completionValue = yield completionValuePromise;
|
|
94
|
-
setCompletionValue(completionValue);
|
|
95
|
-
}
|
|
96
|
-
catch (_a) {
|
|
97
|
-
// We do nothing, since this typically fails as a result of a new prompt value replacing the old on, permissions changing, etc.
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
const onLockGranted = () => {
|
|
101
|
-
setHaveCompletionLock(true);
|
|
102
|
-
};
|
|
103
|
-
const onLockLost = () => {
|
|
104
|
-
setHaveCompletionLock(true);
|
|
105
|
-
};
|
|
106
|
-
liveCoPilot.on(LiveCoPilotEvents.promptChanged, onPromptChanged);
|
|
107
|
-
liveCoPilot.on(LiveCoPilotEvents.lockGranted, onLockGranted);
|
|
108
|
-
liveCoPilot.on(LiveCoPilotEvents.lockLost, onLockLost);
|
|
109
|
-
if (!liveCoPilot.isInitialized) {
|
|
110
|
-
// Initialize the LiveCoPilot instance
|
|
111
|
-
liveCoPilot.initialize(onGetCompletion, allowedRoles, defaultPromptValue);
|
|
112
|
-
}
|
|
113
|
-
return () => {
|
|
114
|
-
// on unmount, remove event listeners
|
|
115
|
-
liveCoPilot === null || liveCoPilot === void 0 ? void 0 : liveCoPilot.off(LiveCoPilotEvents.promptChanged, onPromptChanged);
|
|
116
|
-
liveCoPilot === null || liveCoPilot === void 0 ? void 0 : liveCoPilot.off(LiveCoPilotEvents.lockGranted, onLockGranted);
|
|
117
|
-
liveCoPilot === null || liveCoPilot === void 0 ? void 0 : liveCoPilot.off(LiveCoPilotEvents.lockLost, onLockLost);
|
|
118
|
-
};
|
|
119
|
-
}, [liveCoPilot]);
|
|
120
|
-
/**
|
|
121
|
-
* Sets the onGetCompletion of the `liveCoPilot` based on the 'onGetCompletion' prop
|
|
122
|
-
*/
|
|
123
|
-
React.useEffect(() => {
|
|
124
|
-
if ((liveCoPilot === null || liveCoPilot === void 0 ? void 0 : liveCoPilot.isInitialized) === true &&
|
|
125
|
-
onGetCompletion !== undefined) {
|
|
126
|
-
liveCoPilot.onGetCompletion = onGetCompletion;
|
|
127
|
-
}
|
|
128
|
-
}, [liveCoPilot === null || liveCoPilot === void 0 ? void 0 : liveCoPilot.isInitialized, onGetCompletion]);
|
|
129
|
-
/**
|
|
130
|
-
* Sets the autoCompletions of the `liveCoPilot` based on the 'autoCompletions' prop
|
|
131
|
-
*/
|
|
132
|
-
React.useEffect(() => {
|
|
133
|
-
if (liveCoPilot !== undefined &&
|
|
134
|
-
autoCompletions !== undefined &&
|
|
135
|
-
liveCoPilot.autoCompletions !== autoCompletions) {
|
|
136
|
-
liveCoPilot.autoCompletions = autoCompletions;
|
|
137
|
-
}
|
|
138
|
-
}, [liveCoPilot === null || liveCoPilot === void 0 ? void 0 : liveCoPilot.autoCompletions, autoCompletions]);
|
|
139
|
-
/**
|
|
140
|
-
* Sets the debounceDelayMilliseconds of the `liveCoPilot` based on the 'debounceDelayMilliseconds' prop
|
|
141
|
-
*/
|
|
142
|
-
React.useEffect(() => {
|
|
143
|
-
if (liveCoPilot !== undefined &&
|
|
144
|
-
debounceDelayMilliseconds !== undefined &&
|
|
145
|
-
liveCoPilot.debounceDelayMilliseconds !== debounceDelayMilliseconds) {
|
|
146
|
-
liveCoPilot.debounceDelayMilliseconds = debounceDelayMilliseconds;
|
|
147
|
-
}
|
|
148
|
-
}, [liveCoPilot, debounceDelayMilliseconds]);
|
|
149
|
-
/**
|
|
150
|
-
* Sets the lockPrompt of the `liveCoPilot` based on the 'lockPrompt' prop
|
|
151
|
-
*/
|
|
152
|
-
React.useEffect(() => {
|
|
153
|
-
if (liveCoPilot !== undefined &&
|
|
154
|
-
lockPrompt !== undefined &&
|
|
155
|
-
liveCoPilot.lockPrompt !== lockPrompt) {
|
|
156
|
-
liveCoPilot.lockPrompt = lockPrompt;
|
|
157
|
-
}
|
|
158
|
-
}, [liveCoPilot === null || liveCoPilot === void 0 ? void 0 : liveCoPilot.lockPrompt, lockPrompt]);
|
|
159
|
-
/**
|
|
160
|
-
* Sets the lockCompletion of the `liveCoPilot` based on the 'lockCompletion' prop
|
|
161
|
-
*/
|
|
162
|
-
React.useEffect(() => {
|
|
163
|
-
if (liveCoPilot !== undefined &&
|
|
164
|
-
lockCompletion !== undefined &&
|
|
165
|
-
liveCoPilot.lockCompletion !== lockCompletion) {
|
|
166
|
-
liveCoPilot.lockCompletion = lockCompletion;
|
|
167
|
-
}
|
|
168
|
-
}, [liveCoPilot === null || liveCoPilot === void 0 ? void 0 : liveCoPilot.lockCompletion, lockCompletion]);
|
|
169
|
-
return {
|
|
170
|
-
changePrompt,
|
|
171
|
-
completionValue,
|
|
172
|
-
haveCompletionLock,
|
|
173
|
-
liveCoPilot,
|
|
174
|
-
promptValue,
|
|
175
|
-
sendCompletion,
|
|
176
|
-
};
|
|
177
|
-
};
|
|
178
|
-
//# sourceMappingURL=useLiveCoPilot.js.map
|