@trycourier/react-provider 1.48.6-internal.517ceb8.0 → 1.49.1-internal.35cb2ba.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -35
- package/dist/transports/courier/index.js +5 -0
- package/dist/ws.js +16 -0
- package/package.json +3 -3
- package/typings/transports/courier/index.d.ts +1 -0
- package/typings/transports/courier/index.d.ts.map +1 -1
- package/typings/types.d.ts +1 -0
- package/typings/types.d.ts.map +1 -1
- package/typings/ws.d.ts +4 -6
- package/typings/ws.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -10,19 +10,68 @@
|
|
|
10
10
|
|
|
11
11
|
### [Props](#props)
|
|
12
12
|
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
```ts
|
|
14
|
+
interface ICourierProvider {
|
|
15
|
+
/**
|
|
16
|
+
* Token from the Courier auth/issue-token endpoint. Should have
|
|
17
|
+
* user_id scope (user_id:<user-id-here>) and inbox:read:messages at a
|
|
18
|
+
* minimum.
|
|
19
|
+
*/
|
|
20
|
+
authorization?: string;
|
|
21
|
+
brand?: Brand;
|
|
22
|
+
brandId?: string;
|
|
23
|
+
|
|
24
|
+
/** Allows the browser to modify or react to a received message before the message is displayed to the user */
|
|
25
|
+
onMessage?: (message?: ICourierMessage) => ICourierMessage | undefined;
|
|
26
|
+
|
|
27
|
+
/** Set to true to disable websockets */
|
|
28
|
+
disableTransport?: boolean;
|
|
29
|
+
|
|
30
|
+
/** Courier client key. Along with userId and userSignature this can be used as an alternative to the authorization field / token. */
|
|
16
31
|
clientKey?: string;
|
|
17
|
-
|
|
18
|
-
// Matches the recipient/user id used in Courier
|
|
32
|
+
/** Required if using client key and signature */
|
|
19
33
|
userId?: string;
|
|
20
|
-
|
|
21
|
-
// HMAC signature
|
|
34
|
+
/** User id signed by courier api key (hmac) */
|
|
22
35
|
userSignature?: string;
|
|
23
36
|
|
|
24
|
-
|
|
25
|
-
|
|
37
|
+
wsOptions?: WSOptions;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
interface WSOptions {
|
|
41
|
+
url?: string;
|
|
42
|
+
onError?: (error: { message: string; error: Error }) => void;
|
|
43
|
+
onClose?: () => void;
|
|
44
|
+
connectionTimeout?: number;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
interface Brand {
|
|
48
|
+
inapp?: {
|
|
49
|
+
disableCourierFooter?: boolean;
|
|
50
|
+
borderRadius?: string;
|
|
51
|
+
disableMessageIcon?: boolean;
|
|
52
|
+
placement?: "top" | "bottom" | "left" | "right";
|
|
53
|
+
emptyState?: {
|
|
54
|
+
textColor?: string;
|
|
55
|
+
text?: string;
|
|
56
|
+
};
|
|
57
|
+
widgetBackground?: {
|
|
58
|
+
topColor?: string;
|
|
59
|
+
bottomColor?: string;
|
|
60
|
+
};
|
|
61
|
+
icons?: {
|
|
62
|
+
bell?: string;
|
|
63
|
+
message?: string;
|
|
64
|
+
};
|
|
65
|
+
toast?: {
|
|
66
|
+
borderRadius?: string;
|
|
67
|
+
timerAutoClose?: number;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
colors?: {
|
|
71
|
+
primary?: string;
|
|
72
|
+
secondary?: string;
|
|
73
|
+
tertiary?: string;
|
|
74
|
+
};
|
|
26
75
|
}
|
|
27
76
|
```
|
|
28
77
|
|
|
@@ -34,30 +83,27 @@ There are a few ways to listen for messages and being able react.
|
|
|
34
83
|
|
|
35
84
|
1. Via Props
|
|
36
85
|
|
|
37
|
-
```
|
|
86
|
+
```tsx
|
|
38
87
|
import { CourierProvider } from "@trycourier/react-provider";
|
|
39
88
|
|
|
40
89
|
const MyApp = ({ children }) => {
|
|
41
90
|
const handleOnMessage = (messsage: ICourierMessage) => {
|
|
42
91
|
console.log(message);
|
|
43
92
|
return message;
|
|
44
|
-
}
|
|
93
|
+
};
|
|
45
94
|
|
|
46
95
|
return (
|
|
47
|
-
<CourierProvider onMessage={handleOnMessage}>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
)
|
|
51
|
-
}
|
|
96
|
+
<CourierProvider onMessage={handleOnMessage}>{children}</CourierProvider>
|
|
97
|
+
);
|
|
98
|
+
};
|
|
52
99
|
```
|
|
53
100
|
|
|
54
101
|
2. Via Transport
|
|
55
102
|
|
|
56
103
|
You can create a Transport and pass it into CourierProvider.
|
|
57
104
|
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
import { useEffect } from 'react';
|
|
105
|
+
```tsx
|
|
106
|
+
import { useEffect } from "react";
|
|
61
107
|
import { CourierProvider, CourierTransport } from "@trycourier/react-provider";
|
|
62
108
|
|
|
63
109
|
const courierTransport = new CourierTransport({
|
|
@@ -70,22 +116,20 @@ const MyApp = ({ children }) => {
|
|
|
70
116
|
console.log(message);
|
|
71
117
|
return message;
|
|
72
118
|
});
|
|
73
|
-
})
|
|
119
|
+
});
|
|
74
120
|
|
|
75
121
|
return (
|
|
76
|
-
<CourierProvider transport={courierTransport}>
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
)
|
|
80
|
-
}
|
|
122
|
+
<CourierProvider transport={courierTransport}>{children}</CourierProvider>
|
|
123
|
+
);
|
|
124
|
+
};
|
|
81
125
|
```
|
|
82
126
|
|
|
83
127
|
3. Via useCourier hook
|
|
84
128
|
|
|
85
129
|
If you don't pass in a transport, we will automatically create one. You can then access the transport via the CourierContext exposed through useCourier.
|
|
86
130
|
|
|
87
|
-
```
|
|
88
|
-
import { useEffect } from
|
|
131
|
+
```tsx
|
|
132
|
+
import { useEffect } from "react";
|
|
89
133
|
import { CourierProvider, useCourier } from "@trycourier/react-provider";
|
|
90
134
|
|
|
91
135
|
const courierTransport = new CourierTransport({
|
|
@@ -100,19 +144,16 @@ const MyComponent = () => {
|
|
|
100
144
|
console.log(message);
|
|
101
145
|
return message;
|
|
102
146
|
});
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
return (
|
|
106
|
-
<div>Hello World</div>
|
|
107
|
-
);
|
|
108
|
-
}
|
|
147
|
+
});
|
|
109
148
|
|
|
149
|
+
return <div>Hello World</div>;
|
|
150
|
+
};
|
|
110
151
|
|
|
111
152
|
const MyApp = ({ children }) => {
|
|
112
153
|
return (
|
|
113
154
|
<CourierProvider>
|
|
114
155
|
<MyComponent />
|
|
115
156
|
</CourierProvider>
|
|
116
|
-
)
|
|
117
|
-
}
|
|
157
|
+
);
|
|
158
|
+
};
|
|
118
159
|
```
|
|
@@ -96,6 +96,11 @@ var CourierTransport = /*#__PURE__*/function (_Transport) {
|
|
|
96
96
|
value: function unsubscribe(channel, event) {
|
|
97
97
|
this.ws.unsubscribe(channel, event !== null && event !== void 0 ? event : "*");
|
|
98
98
|
}
|
|
99
|
+
}, {
|
|
100
|
+
key: "renewSession",
|
|
101
|
+
value: function renewSession(token) {
|
|
102
|
+
this.ws.renewSession(token);
|
|
103
|
+
}
|
|
99
104
|
}]);
|
|
100
105
|
return CourierTransport;
|
|
101
106
|
}(_base.Transport);
|
package/dist/ws.js
CHANGED
|
@@ -40,6 +40,7 @@ var WS = /*#__PURE__*/function () {
|
|
|
40
40
|
this.subscriptions = [];
|
|
41
41
|
this.connectionTimeout = options === null || options === void 0 ? void 0 : options.connectionTimeout;
|
|
42
42
|
this.onError = options === null || options === void 0 ? void 0 : options.onError;
|
|
43
|
+
this.onClose = options === null || options === void 0 ? void 0 : options.onClose;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
(0, _createClass2["default"])(WS, [{
|
|
@@ -70,6 +71,10 @@ var WS = /*#__PURE__*/function () {
|
|
|
70
71
|
key: "_onClose",
|
|
71
72
|
value: function _onClose() {
|
|
72
73
|
this.connected = false;
|
|
74
|
+
|
|
75
|
+
if (this.onClose) {
|
|
76
|
+
this.onClose();
|
|
77
|
+
}
|
|
73
78
|
}
|
|
74
79
|
}, {
|
|
75
80
|
key: "_onOpen",
|
|
@@ -208,6 +213,17 @@ var WS = /*#__PURE__*/function () {
|
|
|
208
213
|
}
|
|
209
214
|
});
|
|
210
215
|
}
|
|
216
|
+
}, {
|
|
217
|
+
key: "renewSession",
|
|
218
|
+
value: function renewSession(token) {
|
|
219
|
+
this.send({
|
|
220
|
+
action: "renewSession",
|
|
221
|
+
data: {
|
|
222
|
+
version: "2",
|
|
223
|
+
auth: token
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
211
227
|
}, {
|
|
212
228
|
key: "close",
|
|
213
229
|
value: function close() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trycourier/react-provider",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.49.1-internal.35cb2ba.0+35cb2ba",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "typings/index.d.ts",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"license": "ISC",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@trycourier/client-graphql": "^1.
|
|
18
|
+
"@trycourier/client-graphql": "^1.49.1-internal.35cb2ba.0+35cb2ba",
|
|
19
19
|
"buffer": "^6.0.3",
|
|
20
20
|
"graphql": "^15.5.0",
|
|
21
21
|
"localstorage-polyfill": "^1.0.1",
|
|
@@ -32,5 +32,5 @@
|
|
|
32
32
|
"dist/",
|
|
33
33
|
"typings/"
|
|
34
34
|
],
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "35cb2bac48b396ec74e094c38532c29698a44b3c"
|
|
36
36
|
}
|
|
@@ -12,5 +12,6 @@ export declare class CourierTransport extends Transport {
|
|
|
12
12
|
send(message: ICourierMessage): void;
|
|
13
13
|
subscribe(channel: string, event?: string): void;
|
|
14
14
|
unsubscribe(channel: string, event?: string): void;
|
|
15
|
+
renewSession(token: string): void;
|
|
15
16
|
}
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transports/courier/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IACjB,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACjC,UAAkB,WAAW,CAAC,EAAE,WAAW,CAAC;gBAEhC,OAAO,EAAE,iBAAiB;IAoBtC,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAUpC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAchD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transports/courier/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IACjB,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACjC,UAAkB,WAAW,CAAC,EAAE,WAAW,CAAC;gBAEhC,OAAO,EAAE,iBAAiB;IAoBtC,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAUpC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAchD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAGlC"}
|
package/typings/types.d.ts
CHANGED
package/typings/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,oBAAY,iBAAiB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAE5D,oBAAY,SAAS,GAAG;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,oBAAY,iBAAiB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAE5D,oBAAY,SAAS,GAAG;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,KAAK,CAAC,EAAE;QACN,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QAChD,UAAU,CAAC,EAAE;YACX,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF,gBAAgB,CAAC,EAAE;YACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC;QACF,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,KAAK,CAAC,EAAE;YACN,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,cAAc,CAAC,EAAE,MAAM,CAAC;SACzB,CAAC;KACH,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AACD,MAAM,WAAW,eAAgB,SAAQ,qBAAqB;IAC5D,QAAQ,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;IACxE,aAAa,CAAC,EAAE,GAAG,CAAC;CACrB"}
|
package/typings/ws.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ICourierEventCallback } from "./transports/types";
|
|
2
2
|
import ReconnectingWebSocket, { ErrorEvent } from "reconnecting-websocket";
|
|
3
|
-
import {
|
|
3
|
+
import { WSOptions } from "./types";
|
|
4
4
|
export declare class WS {
|
|
5
5
|
connection?: ReconnectingWebSocket;
|
|
6
6
|
private subscriptions;
|
|
@@ -8,6 +8,7 @@ export declare class WS {
|
|
|
8
8
|
private clientKey?;
|
|
9
9
|
private connectionTimeout?;
|
|
10
10
|
private onError?;
|
|
11
|
+
private onClose?;
|
|
11
12
|
private url;
|
|
12
13
|
private userSignature?;
|
|
13
14
|
protected connected: any;
|
|
@@ -15,11 +16,7 @@ export declare class WS {
|
|
|
15
16
|
constructor({ authorization, clientKey, options, userSignature, }: {
|
|
16
17
|
authorization?: string;
|
|
17
18
|
clientKey?: string;
|
|
18
|
-
options?:
|
|
19
|
-
connectionTimeout?: number;
|
|
20
|
-
onError?: ErrorEventHandler;
|
|
21
|
-
url?: string;
|
|
22
|
-
};
|
|
19
|
+
options?: WSOptions;
|
|
23
20
|
userSignature?: string;
|
|
24
21
|
});
|
|
25
22
|
connect(): void;
|
|
@@ -34,6 +31,7 @@ export declare class WS {
|
|
|
34
31
|
[key: string]: any;
|
|
35
32
|
}): void;
|
|
36
33
|
unsubscribe(channel: string, event: string): void;
|
|
34
|
+
renewSession(token: string): void;
|
|
37
35
|
close(): void;
|
|
38
36
|
}
|
|
39
37
|
//# sourceMappingURL=ws.d.ts.map
|
package/typings/ws.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAmB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,qBAAqB,EAAE,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAmB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,qBAAqB,EAAE,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAqB,SAAS,EAAE,MAAM,SAAS,CAAC;AAEvD,qBAAa,EAAE;IACb,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,OAAO,CAAC,aAAa,CAIlB;IACH,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,OAAO,CAAC,CAAoB;IACpC,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,SAAS,CAAC,SAAS,MAAC;IACpB,SAAS,CAAC,eAAe,MAAC;gBAEd,EACV,aAAa,EACb,SAAS,EACT,OAAO,EACP,aAAa,GACd,EAAE;QACD,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,SAAS,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB;IAiBD,OAAO,IAAI,IAAI;IAmBf,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAUjC,QAAQ,IAAI,IAAI;IAOhB,OAAO,IAAI,IAAI;IAiBf,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAwBtC,SAAS,CACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,IAAI,CAAC;IAqBhB,IAAI,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,IAAI;IAS3C,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAiBjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUjC,KAAK,IAAI,IAAI;CAGd"}
|