@nlxai/core 1.2.3 → 1.2.4-alpha.1
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 +155 -1
- package/lib/index.cjs +19 -2
- package/lib/index.d.ts +63 -0
- package/lib/index.esm.js +19 -2
- package/lib/index.umd.js +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -224,7 +224,6 @@ export default async function (req: Request): Promise<Response> {
|
|
|
224
224
|
# API reference
|
|
225
225
|
|
|
226
226
|
<!-- include docs/README.md -->
|
|
227
|
-
|
|
228
227
|
## Functions
|
|
229
228
|
|
|
230
229
|
### createConversation()
|
|
@@ -738,6 +737,36 @@ Send a combination of choice, slots, and intent in one request.
|
|
|
738
737
|
|
|
739
738
|
`void`
|
|
740
739
|
|
|
740
|
+
##### submitFeedback()
|
|
741
|
+
|
|
742
|
+
```ts
|
|
743
|
+
submitFeedback: (url, feedback) => Promise<void>;
|
|
744
|
+
```
|
|
745
|
+
|
|
746
|
+
Submit feedback about a response.
|
|
747
|
+
|
|
748
|
+
###### Parameters
|
|
749
|
+
|
|
750
|
+
###### url
|
|
751
|
+
|
|
752
|
+
`string`
|
|
753
|
+
|
|
754
|
+
The URL comming from the Application response `metadata.feedbackURL` field.
|
|
755
|
+
|
|
756
|
+
###### feedback
|
|
757
|
+
|
|
758
|
+
Either a numerical rating or a textual comment.
|
|
759
|
+
|
|
760
|
+
\{
|
|
761
|
+
`rating`: `number`;
|
|
762
|
+
\} | \{
|
|
763
|
+
`comment`: `string`;
|
|
764
|
+
\}
|
|
765
|
+
|
|
766
|
+
###### Returns
|
|
767
|
+
|
|
768
|
+
`Promise`\<`void`\>
|
|
769
|
+
|
|
741
770
|
##### subscribe()
|
|
742
771
|
|
|
743
772
|
```ts
|
|
@@ -1132,6 +1161,24 @@ optional sources: KnowledgeBaseResponseSource[];
|
|
|
1132
1161
|
|
|
1133
1162
|
Knowledge base sources
|
|
1134
1163
|
|
|
1164
|
+
##### feedbackUrl?
|
|
1165
|
+
|
|
1166
|
+
```ts
|
|
1167
|
+
optional feedbackUrl: string;
|
|
1168
|
+
```
|
|
1169
|
+
|
|
1170
|
+
URL to use for submitting feedback about this response. See `feedbackConfig` for what the expected feedback type is.
|
|
1171
|
+
|
|
1172
|
+
You can pass this as the first argument to `submitFeedback`.
|
|
1173
|
+
|
|
1174
|
+
##### feedbackConfig?
|
|
1175
|
+
|
|
1176
|
+
```ts
|
|
1177
|
+
optional feedbackConfig: FeedbackConfiguration;
|
|
1178
|
+
```
|
|
1179
|
+
|
|
1180
|
+
If present, the application would like to collect feedback from the user.
|
|
1181
|
+
|
|
1135
1182
|
---
|
|
1136
1183
|
|
|
1137
1184
|
### KnowledgeBaseResponseSource
|
|
@@ -1391,6 +1438,112 @@ When the failure occurred.
|
|
|
1391
1438
|
|
|
1392
1439
|
---
|
|
1393
1440
|
|
|
1441
|
+
### FeedbackConfiguration
|
|
1442
|
+
|
|
1443
|
+
Configuration for feedback collection. You can use this to render an appropriate feedback widget in your application.
|
|
1444
|
+
|
|
1445
|
+
#### Properties
|
|
1446
|
+
|
|
1447
|
+
##### feedbackId
|
|
1448
|
+
|
|
1449
|
+
```ts
|
|
1450
|
+
feedbackId: string;
|
|
1451
|
+
```
|
|
1452
|
+
|
|
1453
|
+
Unique identifier for the feedback collection.
|
|
1454
|
+
|
|
1455
|
+
##### feedbackName
|
|
1456
|
+
|
|
1457
|
+
```ts
|
|
1458
|
+
feedbackName: string;
|
|
1459
|
+
```
|
|
1460
|
+
|
|
1461
|
+
Human readable name of this feedback collection.
|
|
1462
|
+
|
|
1463
|
+
##### feedbackType
|
|
1464
|
+
|
|
1465
|
+
```ts
|
|
1466
|
+
feedbackType: object;
|
|
1467
|
+
```
|
|
1468
|
+
|
|
1469
|
+
Type of feedback being collected.
|
|
1470
|
+
At the moment only binary feedback is supported, but we plan to introduce more types in the future.
|
|
1471
|
+
Hence your code should make sure to check the `type` attribute to make sure the expected feedback type is handled.
|
|
1472
|
+
|
|
1473
|
+
###### type
|
|
1474
|
+
|
|
1475
|
+
```ts
|
|
1476
|
+
type: "binary";
|
|
1477
|
+
```
|
|
1478
|
+
|
|
1479
|
+
A binary feedback type is a thumbs up/down sort of choice.
|
|
1480
|
+
|
|
1481
|
+
###### config
|
|
1482
|
+
|
|
1483
|
+
```ts
|
|
1484
|
+
config: object;
|
|
1485
|
+
```
|
|
1486
|
+
|
|
1487
|
+
Configuration specific to binary feedback.
|
|
1488
|
+
|
|
1489
|
+
###### config.positiveValue
|
|
1490
|
+
|
|
1491
|
+
```ts
|
|
1492
|
+
positiveValue: number;
|
|
1493
|
+
```
|
|
1494
|
+
|
|
1495
|
+
Value to send for positive feedback. Default `1`.
|
|
1496
|
+
|
|
1497
|
+
###### config.negativeValue
|
|
1498
|
+
|
|
1499
|
+
```ts
|
|
1500
|
+
negativeValue: number;
|
|
1501
|
+
```
|
|
1502
|
+
|
|
1503
|
+
Value to send for negative feedback. Default `-1`.
|
|
1504
|
+
|
|
1505
|
+
##### commentsEnabled
|
|
1506
|
+
|
|
1507
|
+
```ts
|
|
1508
|
+
commentsEnabled: boolean;
|
|
1509
|
+
```
|
|
1510
|
+
|
|
1511
|
+
Whether comments are enabled for this feedback collection.
|
|
1512
|
+
|
|
1513
|
+
##### question?
|
|
1514
|
+
|
|
1515
|
+
```ts
|
|
1516
|
+
optional question: string;
|
|
1517
|
+
```
|
|
1518
|
+
|
|
1519
|
+
Optional question to show to the user when collecting feedback.
|
|
1520
|
+
|
|
1521
|
+
##### labels
|
|
1522
|
+
|
|
1523
|
+
```ts
|
|
1524
|
+
labels: object;
|
|
1525
|
+
```
|
|
1526
|
+
|
|
1527
|
+
Labels for individual feedback UI elements as customised by the builder.
|
|
1528
|
+
|
|
1529
|
+
###### positive?
|
|
1530
|
+
|
|
1531
|
+
```ts
|
|
1532
|
+
optional positive: string;
|
|
1533
|
+
```
|
|
1534
|
+
|
|
1535
|
+
Label for positive feedback
|
|
1536
|
+
|
|
1537
|
+
###### negative?
|
|
1538
|
+
|
|
1539
|
+
```ts
|
|
1540
|
+
optional negative: string;
|
|
1541
|
+
```
|
|
1542
|
+
|
|
1543
|
+
Label for negative feedback
|
|
1544
|
+
|
|
1545
|
+
---
|
|
1546
|
+
|
|
1394
1547
|
### StructuredRequest
|
|
1395
1548
|
|
|
1396
1549
|
The body of `sendStructured`
|
|
@@ -1953,3 +2106,4 @@ The callback function for listening to all responses.
|
|
|
1953
2106
|
#### Returns
|
|
1954
2107
|
|
|
1955
2108
|
`void`
|
|
2109
|
+
|
package/lib/index.cjs
CHANGED
|
@@ -6,7 +6,7 @@ var ReconnectingWebSocket = require('reconnecting-websocket');
|
|
|
6
6
|
var uuid = require('uuid');
|
|
7
7
|
|
|
8
8
|
var name = "@nlxai/core";
|
|
9
|
-
var version$1 = "1.2.
|
|
9
|
+
var version$1 = "1.2.4-alpha.1";
|
|
10
10
|
var description = "Low-level SDK for building NLX experiences";
|
|
11
11
|
var type = "module";
|
|
12
12
|
var main = "lib/index.cjs";
|
|
@@ -55,7 +55,7 @@ var dependencies = {
|
|
|
55
55
|
var publishConfig = {
|
|
56
56
|
access: "public"
|
|
57
57
|
};
|
|
58
|
-
var gitHead = "
|
|
58
|
+
var gitHead = "366aa0de51688c11109364d16fbd27783bf4486a";
|
|
59
59
|
var packageJson = {
|
|
60
60
|
name: name,
|
|
61
61
|
version: version$1,
|
|
@@ -591,6 +591,23 @@ function createConversation(configuration) {
|
|
|
591
591
|
sendFlow(welcomeIntent, context);
|
|
592
592
|
},
|
|
593
593
|
sendChoice,
|
|
594
|
+
submitFeedback: async (feedbackUrl, feedback) => {
|
|
595
|
+
const res = await fetch(feedbackUrl, {
|
|
596
|
+
method: "POST",
|
|
597
|
+
headers: {
|
|
598
|
+
"Content-Type": "application/json",
|
|
599
|
+
},
|
|
600
|
+
body: JSON.stringify({
|
|
601
|
+
languageCode: state.languageCode,
|
|
602
|
+
conversationId: state.conversationId,
|
|
603
|
+
userId: state.userId,
|
|
604
|
+
...feedback,
|
|
605
|
+
}),
|
|
606
|
+
});
|
|
607
|
+
if (res.status >= 400) {
|
|
608
|
+
throw new Error(`Responded with ${res.status}`);
|
|
609
|
+
}
|
|
610
|
+
},
|
|
594
611
|
currentConversationId: () => {
|
|
595
612
|
return state.conversationId;
|
|
596
613
|
},
|
package/lib/index.d.ts
CHANGED
|
@@ -145,6 +145,15 @@ export interface ConversationHandler {
|
|
|
145
145
|
* @param context - [Context](https://docs.studio.nlx.ai/workspacesettings/documentation-settings/settings-context-attributes) for usage later in the intent.
|
|
146
146
|
*/
|
|
147
147
|
sendStructured: (request: StructuredRequest, context?: Context) => void;
|
|
148
|
+
/**
|
|
149
|
+
* Submit feedback about a response.
|
|
150
|
+
* @param url - The URL comming from the Application response `metadata.feedbackURL` field.
|
|
151
|
+
* @param feedback - Either a numerical rating or a textual comment.
|
|
152
|
+
*/
|
|
153
|
+
submitFeedback: (url: string, feedback: {
|
|
154
|
+
rating?: number;
|
|
155
|
+
comment?: string;
|
|
156
|
+
}) => Promise<void>;
|
|
148
157
|
/**
|
|
149
158
|
* Subscribe a callback to the conversation. On subscribe, the subscriber will receive all of the Responses that the conversation has already received.
|
|
150
159
|
* @param subscriber - The callback to subscribe
|
|
@@ -351,6 +360,16 @@ export interface ApplicationResponseMetadata {
|
|
|
351
360
|
* Knowledge base sources
|
|
352
361
|
*/
|
|
353
362
|
sources?: KnowledgeBaseResponseSource[];
|
|
363
|
+
/**
|
|
364
|
+
* URL to use for submitting feedback about this response. See `feedbackConfig` for what the expected feedback type is.
|
|
365
|
+
*
|
|
366
|
+
* You can pass this as the first argument to `submitFeedback`.
|
|
367
|
+
*/
|
|
368
|
+
feedbackUrl?: string;
|
|
369
|
+
/**
|
|
370
|
+
* If present, the application would like to collect feedback from the user.
|
|
371
|
+
*/
|
|
372
|
+
feedbackConfig?: FeedbackConfiguration;
|
|
354
373
|
}
|
|
355
374
|
/**
|
|
356
375
|
* Response for knowlege base sources
|
|
@@ -541,6 +560,50 @@ export type Response = ApplicationResponse | UserResponse | FailureMessage;
|
|
|
541
560
|
* The time value in milliseconds since midnight, January 1, 1970 UTC.
|
|
542
561
|
*/
|
|
543
562
|
export type Time = number;
|
|
563
|
+
/**
|
|
564
|
+
* Configuration for feedback collection. You can use this to render an appropriate feedback widget in your application.
|
|
565
|
+
*/
|
|
566
|
+
export interface FeedbackConfiguration {
|
|
567
|
+
/** Unique identifier for the feedback collection. */
|
|
568
|
+
feedbackId: string;
|
|
569
|
+
/** Human readable name of this feedback collection. */
|
|
570
|
+
feedbackName: string;
|
|
571
|
+
/**
|
|
572
|
+
* Type of feedback being collected.
|
|
573
|
+
* At the moment only binary feedback is supported, but we plan to introduce more types in the future.
|
|
574
|
+
* Hence your code should make sure to check the `type` attribute to make sure the expected feedback type is handled.
|
|
575
|
+
*/
|
|
576
|
+
feedbackType: FeedbackType;
|
|
577
|
+
/** Whether comments are enabled for this feedback collection. */
|
|
578
|
+
commentsEnabled: boolean;
|
|
579
|
+
/** Optional question to show to the user when collecting feedback. */
|
|
580
|
+
question?: string;
|
|
581
|
+
/** Labels for individual feedback UI elements as customised by the builder. */
|
|
582
|
+
labels: {
|
|
583
|
+
/** Label for positive feedback */
|
|
584
|
+
positive?: string;
|
|
585
|
+
/** Label for negative feedback */
|
|
586
|
+
negative?: string;
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
/**
|
|
590
|
+
* @inline @hidden
|
|
591
|
+
*/
|
|
592
|
+
export type FeedbackType = {
|
|
593
|
+
/** A binary feedback type is a thumbs up/down sort of choice. */
|
|
594
|
+
type: "binary";
|
|
595
|
+
/** Configuration specific to binary feedback. */
|
|
596
|
+
config: BinaryFeedbackConfig;
|
|
597
|
+
};
|
|
598
|
+
/**
|
|
599
|
+
* @inline @hidden
|
|
600
|
+
*/
|
|
601
|
+
export interface BinaryFeedbackConfig {
|
|
602
|
+
/** Value to send for positive feedback. Default `1`. */
|
|
603
|
+
positiveValue: number;
|
|
604
|
+
/** Value to send for negative feedback. Default `-1`. */
|
|
605
|
+
negativeValue: number;
|
|
606
|
+
}
|
|
544
607
|
/**
|
|
545
608
|
* @hidden
|
|
546
609
|
*/
|
package/lib/index.esm.js
CHANGED
|
@@ -4,7 +4,7 @@ import ReconnectingWebSocket from 'reconnecting-websocket';
|
|
|
4
4
|
import { v4 } from 'uuid';
|
|
5
5
|
|
|
6
6
|
var name = "@nlxai/core";
|
|
7
|
-
var version$1 = "1.2.
|
|
7
|
+
var version$1 = "1.2.4-alpha.1";
|
|
8
8
|
var description = "Low-level SDK for building NLX experiences";
|
|
9
9
|
var type = "module";
|
|
10
10
|
var main = "lib/index.cjs";
|
|
@@ -53,7 +53,7 @@ var dependencies = {
|
|
|
53
53
|
var publishConfig = {
|
|
54
54
|
access: "public"
|
|
55
55
|
};
|
|
56
|
-
var gitHead = "
|
|
56
|
+
var gitHead = "366aa0de51688c11109364d16fbd27783bf4486a";
|
|
57
57
|
var packageJson = {
|
|
58
58
|
name: name,
|
|
59
59
|
version: version$1,
|
|
@@ -589,6 +589,23 @@ function createConversation(configuration) {
|
|
|
589
589
|
sendFlow(welcomeIntent, context);
|
|
590
590
|
},
|
|
591
591
|
sendChoice,
|
|
592
|
+
submitFeedback: async (feedbackUrl, feedback) => {
|
|
593
|
+
const res = await fetch(feedbackUrl, {
|
|
594
|
+
method: "POST",
|
|
595
|
+
headers: {
|
|
596
|
+
"Content-Type": "application/json",
|
|
597
|
+
},
|
|
598
|
+
body: JSON.stringify({
|
|
599
|
+
languageCode: state.languageCode,
|
|
600
|
+
conversationId: state.conversationId,
|
|
601
|
+
userId: state.userId,
|
|
602
|
+
...feedback,
|
|
603
|
+
}),
|
|
604
|
+
});
|
|
605
|
+
if (res.status >= 400) {
|
|
606
|
+
throw new Error(`Responded with ${res.status}`);
|
|
607
|
+
}
|
|
608
|
+
},
|
|
592
609
|
currentConversationId: () => {
|
|
593
610
|
return state.conversationId;
|
|
594
611
|
},
|
package/lib/index.umd.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).nlx={})}(this,(function(e){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var n="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||"undefined"!=typeof global&&global||{},r="URLSearchParams"in n,o="Symbol"in n&&"iterator"in Symbol,s="FileReader"in n&&"Blob"in n&&function(){try{return new Blob,!0}catch(e){return!1}}(),i="FormData"in n,a="ArrayBuffer"in n;if(a)var c=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],u=ArrayBuffer.isView||function(e){return e&&c.indexOf(Object.prototype.toString.call(e))>-1};function l(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e)||""===e)throw new TypeError('Invalid character in header field name: "'+e+'"');return e.toLowerCase()}function d(e){return"string"!=typeof e&&(e=String(e)),e}function f(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return o&&(t[Symbol.iterator]=function(){return t}),t}function p(e){this.map={},e instanceof p?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){if(2!=e.length)throw new TypeError("Headers constructor: expected name/value pair to be length 2, found"+e.length);this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function h(e){if(!e._noBody)return e.bodyUsed?Promise.reject(new TypeError("Already read")):void(e.bodyUsed=!0)}function y(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function g(e){var t=new FileReader,n=y(t);return t.readAsArrayBuffer(e),n}function m(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function b(){return this.bodyUsed=!1,this._initBody=function(e){var t;this.bodyUsed=this.bodyUsed,this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:s&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:i&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:r&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():a&&s&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=m(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):a&&(ArrayBuffer.prototype.isPrototypeOf(e)||u(e))?this._bodyArrayBuffer=m(e):this._bodyText=e=Object.prototype.toString.call(e):(this._noBody=!0,this._bodyText=""),this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):r&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},s&&(this.blob=function(){var e=h(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))}),this.arrayBuffer=function(){if(this._bodyArrayBuffer){var e=h(this);return e||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer))}if(s)return this.blob().then(g);throw new Error("could not read as ArrayBuffer")},this.text=function(){var e,t,n,r,o,s=h(this);if(s)return s;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=y(t),r=/charset=([A-Za-z0-9_-]+)/.exec(e.type),o=r?r[1]:"utf-8",t.readAsText(e,o),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},i&&(this.formData=function(){return this.text().then(w)}),this.json=function(){return this.text().then(JSON.parse)},this}p.prototype.append=function(e,t){e=l(e),t=d(t);var n=this.map[e];this.map[e]=n?n+", "+t:t},p.prototype.delete=function(e){delete this.map[l(e)]},p.prototype.get=function(e){return e=l(e),this.has(e)?this.map[e]:null},p.prototype.has=function(e){return this.map.hasOwnProperty(l(e))},p.prototype.set=function(e,t){this.map[l(e)]=d(t)},p.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},p.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),f(e)},p.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),f(e)},p.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),f(e)},o&&(p.prototype[Symbol.iterator]=p.prototype.entries);var v=["CONNECT","DELETE","GET","HEAD","OPTIONS","PATCH","POST","PUT","TRACE"];function _(e,t){if(!(this instanceof _))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');var r,o,s=(t=t||{}).body;if(e instanceof _){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new p(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,s||null==e._bodyInit||(s=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"same-origin",!t.headers&&this.headers||(this.headers=new p(t.headers)),this.method=(r=t.method||this.method||"GET",o=r.toUpperCase(),v.indexOf(o)>-1?o:r),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal||function(){if("AbortController"in n)return(new AbortController).signal}(),this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&s)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(s),!("GET"!==this.method&&"HEAD"!==this.method||"no-store"!==t.cache&&"no-cache"!==t.cache)){var i=/([?&])_=[^&]*/;if(i.test(this.url))this.url=this.url.replace(i,"$1_="+(new Date).getTime());else{this.url+=(/\?/.test(this.url)?"&":"?")+"_="+(new Date).getTime()}}}function w(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function T(e,t){if(!(this instanceof T))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');if(t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.status<200||this.status>599)throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");this.ok=this.status>=200&&this.status<300,this.statusText=void 0===t.statusText?"":""+t.statusText,this.headers=new p(t.headers),this.url=t.url||"",this._initBody(e)}_.prototype.clone=function(){return new _(this,{body:this._bodyInit})},b.call(_.prototype),b.call(T.prototype),T.prototype.clone=function(){return new T(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new p(this.headers),url:this.url})},T.error=function(){var e=new T(null,{status:200,statusText:""});return e.ok=!1,e.status=0,e.type="error",e};var E=[301,302,303,307,308];T.redirect=function(e,t){if(-1===E.indexOf(t))throw new RangeError("Invalid status code");return new T(null,{status:t,headers:{location:e}})};var O=n.DOMException;try{new O}catch(e){O=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},O.prototype=Object.create(Error.prototype),O.prototype.constructor=O}function x(e,t){return new Promise((function(r,o){var i=new _(e,t);if(i.signal&&i.signal.aborted)return o(new O("Aborted","AbortError"));var c=new XMLHttpRequest;function u(){c.abort()}if(c.onload=function(){var e,t,n={statusText:c.statusText,headers:(e=c.getAllResponseHeaders()||"",t=new p,e.replace(/\r?\n[\t ]+/g," ").split("\r").map((function(e){return 0===e.indexOf("\n")?e.substr(1,e.length):e})).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();try{t.append(r,o)}catch(e){console.warn("Response "+e.message)}}})),t)};0===i.url.indexOf("file://")&&(c.status<200||c.status>599)?n.status=200:n.status=c.status,n.url="responseURL"in c?c.responseURL:n.headers.get("X-Request-URL");var o="response"in c?c.response:c.responseText;setTimeout((function(){r(new T(o,n))}),0)},c.onerror=function(){setTimeout((function(){o(new TypeError("Network request failed"))}),0)},c.ontimeout=function(){setTimeout((function(){o(new TypeError("Network request timed out"))}),0)},c.onabort=function(){setTimeout((function(){o(new O("Aborted","AbortError"))}),0)},c.open(i.method,function(e){try{return""===e&&n.location.href?n.location.href:e}catch(t){return e}}(i.url),!0),"include"===i.credentials?c.withCredentials=!0:"omit"===i.credentials&&(c.withCredentials=!1),"responseType"in c&&(s?c.responseType="blob":a&&(c.responseType="arraybuffer")),t&&"object"==typeof t.headers&&!(t.headers instanceof p||n.Headers&&t.headers instanceof n.Headers)){var f=[];Object.getOwnPropertyNames(t.headers).forEach((function(e){f.push(l(e)),c.setRequestHeader(e,d(t.headers[e]))})),i.headers.forEach((function(e,t){-1===f.indexOf(t)&&c.setRequestHeader(t,e)}))}else i.headers.forEach((function(e,t){c.setRequestHeader(t,e)}));i.signal&&(i.signal.addEventListener("abort",u),c.onreadystatechange=function(){4===c.readyState&&i.signal.removeEventListener("abort",u)}),c.send(void 0===i._bodyInit?null:i._bodyInit)}))}x.polyfill=!0,n.fetch||(n.fetch=x,n.Headers=p,n.Request=_,n.Response=T);var A=t(self.fetch.bind(self));function C(e){return null!=e&&"object"==typeof e&&!0===e["@@functional/placeholder"]}function I(e){return function t(n){return 0===arguments.length||C(n)?t:e.apply(this,arguments)}}function P(e){return function t(n,r){switch(arguments.length){case 0:return t;case 1:return C(n)?t:I((function(t){return e(n,t)}));default:return C(n)&&C(r)?t:C(n)?I((function(t){return e(t,r)})):C(r)?I((function(t){return e(n,t)})):e(n,r)}}}function R(e){return function t(n,r,o){switch(arguments.length){case 0:return t;case 1:return C(n)?t:P((function(t,r){return e(n,t,r)}));case 2:return C(n)&&C(r)?t:C(n)?P((function(t,n){return e(t,r,n)})):C(r)?P((function(t,r){return e(n,t,r)})):I((function(t){return e(n,r,t)}));default:return C(n)&&C(r)&&C(o)?t:C(n)&&C(r)?P((function(t,n){return e(t,n,o)})):C(n)&&C(o)?P((function(t,n){return e(t,r,n)})):C(r)&&C(o)?P((function(t,r){return e(n,t,r)})):C(n)?I((function(t){return e(t,r,o)})):C(r)?I((function(t){return e(n,t,o)})):C(o)?I((function(t){return e(n,r,t)})):e(n,r,o)}}}var S=R((function(e,t,n){var r=n.length;if(e>=r||e<-r)return n;var o=(r+e)%r,s=function(e,t){var n;t=t||[];var r=(e=e||[]).length,o=t.length,s=[];for(n=0;n<r;)s[s.length]=e[n],n+=1;for(n=0;n<o;)s[s.length]=t[n],n+=1;return s}(n);return s[o]=t(n[o]),s}));function U(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}function j(e,t,n){for(var r=0,o=n.length;r<o;){if(e(t,n[r]))return!0;r+=1}return!1}function L(e,t){return Object.prototype.hasOwnProperty.call(t,e)}var D="function"==typeof Object.is?Object.is:function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t},B=Object.prototype.toString,N=function(){return"[object Arguments]"===B.call(arguments)?function(e){return"[object Arguments]"===B.call(e)}:function(e){return L("callee",e)}}(),q=!{toString:null}.propertyIsEnumerable("toString"),F=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],k=function(){return arguments.propertyIsEnumerable("length")}(),$=function(e,t){for(var n=0;n<e.length;){if(e[n]===t)return!0;n+=1}return!1},M="function"!=typeof Object.keys||k?I((function(e){if(Object(e)!==e)return[];var t,n,r=[],o=k&&N(e);for(t in e)!L(t,e)||o&&"length"===t||(r[r.length]=t);if(q)for(n=F.length-1;n>=0;)L(t=F[n],e)&&!$(r,t)&&(r[r.length]=t),n-=1;return r})):I((function(e){return Object(e)!==e?[]:Object.keys(e)})),G=I((function(e){return null===e?"Null":void 0===e?"Undefined":Object.prototype.toString.call(e).slice(8,-1)}));function H(e,t,n,r){var o=U(e);function s(e,t){return W(e,t,n.slice(),r.slice())}return!j((function(e,t){return!j(s,t,e)}),U(t),o)}function W(e,t,n,r){if(D(e,t))return!0;var o,s,i=G(e);if(i!==G(t))return!1;if("function"==typeof e["fantasy-land/equals"]||"function"==typeof t["fantasy-land/equals"])return"function"==typeof e["fantasy-land/equals"]&&e["fantasy-land/equals"](t)&&"function"==typeof t["fantasy-land/equals"]&&t["fantasy-land/equals"](e);if("function"==typeof e.equals||"function"==typeof t.equals)return"function"==typeof e.equals&&e.equals(t)&&"function"==typeof t.equals&&t.equals(e);switch(i){case"Arguments":case"Array":case"Object":if("function"==typeof e.constructor&&"Promise"===(o=e.constructor,null==(s=String(o).match(/^function (\w*)/))?"":s[1]))return e===t;break;case"Boolean":case"Number":case"String":if(typeof e!=typeof t||!D(e.valueOf(),t.valueOf()))return!1;break;case"Date":if(!D(e.valueOf(),t.valueOf()))return!1;break;case"Error":return e.name===t.name&&e.message===t.message;case"RegExp":if(e.source!==t.source||e.global!==t.global||e.ignoreCase!==t.ignoreCase||e.multiline!==t.multiline||e.sticky!==t.sticky||e.unicode!==t.unicode)return!1}for(var a=n.length-1;a>=0;){if(n[a]===e)return r[a]===t;a-=1}switch(i){case"Map":return e.size===t.size&&H(e.entries(),t.entries(),n.concat([e]),r.concat([t]));case"Set":return e.size===t.size&&H(e.values(),t.values(),n.concat([e]),r.concat([t]));case"Arguments":case"Array":case"Object":case"Boolean":case"Number":case"String":case"Date":case"Error":case"RegExp":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var c=M(e);if(c.length!==M(t).length)return!1;var u=n.concat([e]),l=r.concat([t]);for(a=c.length-1;a>=0;){var d=c[a];if(!L(d,t)||!W(t[d],e[d],u,l))return!1;a-=1}return!0}var K=P((function(e,t){return W(e,t,[],[])})),z=function(e,t){return z=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},z(e,t)};
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).nlx={})}(this,(function(e){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var n="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||"undefined"!=typeof global&&global||{},r="URLSearchParams"in n,o="Symbol"in n&&"iterator"in Symbol,s="FileReader"in n&&"Blob"in n&&function(){try{return new Blob,!0}catch(e){return!1}}(),i="FormData"in n,a="ArrayBuffer"in n;if(a)var u=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],c=ArrayBuffer.isView||function(e){return e&&u.indexOf(Object.prototype.toString.call(e))>-1};function l(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e)||""===e)throw new TypeError('Invalid character in header field name: "'+e+'"');return e.toLowerCase()}function d(e){return"string"!=typeof e&&(e=String(e)),e}function f(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return o&&(t[Symbol.iterator]=function(){return t}),t}function p(e){this.map={},e instanceof p?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){if(2!=e.length)throw new TypeError("Headers constructor: expected name/value pair to be length 2, found"+e.length);this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function h(e){if(!e._noBody)return e.bodyUsed?Promise.reject(new TypeError("Already read")):void(e.bodyUsed=!0)}function y(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function g(e){var t=new FileReader,n=y(t);return t.readAsArrayBuffer(e),n}function m(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function b(){return this.bodyUsed=!1,this._initBody=function(e){var t;this.bodyUsed=this.bodyUsed,this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:s&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:i&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:r&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():a&&s&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=m(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):a&&(ArrayBuffer.prototype.isPrototypeOf(e)||c(e))?this._bodyArrayBuffer=m(e):this._bodyText=e=Object.prototype.toString.call(e):(this._noBody=!0,this._bodyText=""),this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):r&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},s&&(this.blob=function(){var e=h(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))}),this.arrayBuffer=function(){if(this._bodyArrayBuffer){var e=h(this);return e||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer))}if(s)return this.blob().then(g);throw new Error("could not read as ArrayBuffer")},this.text=function(){var e,t,n,r,o,s=h(this);if(s)return s;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=y(t),r=/charset=([A-Za-z0-9_-]+)/.exec(e.type),o=r?r[1]:"utf-8",t.readAsText(e,o),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},i&&(this.formData=function(){return this.text().then(w)}),this.json=function(){return this.text().then(JSON.parse)},this}p.prototype.append=function(e,t){e=l(e),t=d(t);var n=this.map[e];this.map[e]=n?n+", "+t:t},p.prototype.delete=function(e){delete this.map[l(e)]},p.prototype.get=function(e){return e=l(e),this.has(e)?this.map[e]:null},p.prototype.has=function(e){return this.map.hasOwnProperty(l(e))},p.prototype.set=function(e,t){this.map[l(e)]=d(t)},p.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},p.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),f(e)},p.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),f(e)},p.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),f(e)},o&&(p.prototype[Symbol.iterator]=p.prototype.entries);var v=["CONNECT","DELETE","GET","HEAD","OPTIONS","PATCH","POST","PUT","TRACE"];function _(e,t){if(!(this instanceof _))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');var r,o,s=(t=t||{}).body;if(e instanceof _){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new p(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,s||null==e._bodyInit||(s=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"same-origin",!t.headers&&this.headers||(this.headers=new p(t.headers)),this.method=(r=t.method||this.method||"GET",o=r.toUpperCase(),v.indexOf(o)>-1?o:r),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal||function(){if("AbortController"in n)return(new AbortController).signal}(),this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&s)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(s),!("GET"!==this.method&&"HEAD"!==this.method||"no-store"!==t.cache&&"no-cache"!==t.cache)){var i=/([?&])_=[^&]*/;if(i.test(this.url))this.url=this.url.replace(i,"$1_="+(new Date).getTime());else{this.url+=(/\?/.test(this.url)?"&":"?")+"_="+(new Date).getTime()}}}function w(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function T(e,t){if(!(this instanceof T))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');if(t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.status<200||this.status>599)throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");this.ok=this.status>=200&&this.status<300,this.statusText=void 0===t.statusText?"":""+t.statusText,this.headers=new p(t.headers),this.url=t.url||"",this._initBody(e)}_.prototype.clone=function(){return new _(this,{body:this._bodyInit})},b.call(_.prototype),b.call(T.prototype),T.prototype.clone=function(){return new T(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new p(this.headers),url:this.url})},T.error=function(){var e=new T(null,{status:200,statusText:""});return e.ok=!1,e.status=0,e.type="error",e};var E=[301,302,303,307,308];T.redirect=function(e,t){if(-1===E.indexOf(t))throw new RangeError("Invalid status code");return new T(null,{status:t,headers:{location:e}})};var O=n.DOMException;try{new O}catch(e){O=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},O.prototype=Object.create(Error.prototype),O.prototype.constructor=O}function x(e,t){return new Promise((function(r,o){var i=new _(e,t);if(i.signal&&i.signal.aborted)return o(new O("Aborted","AbortError"));var u=new XMLHttpRequest;function c(){u.abort()}if(u.onload=function(){var e,t,n={statusText:u.statusText,headers:(e=u.getAllResponseHeaders()||"",t=new p,e.replace(/\r?\n[\t ]+/g," ").split("\r").map((function(e){return 0===e.indexOf("\n")?e.substr(1,e.length):e})).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();try{t.append(r,o)}catch(e){console.warn("Response "+e.message)}}})),t)};0===i.url.indexOf("file://")&&(u.status<200||u.status>599)?n.status=200:n.status=u.status,n.url="responseURL"in u?u.responseURL:n.headers.get("X-Request-URL");var o="response"in u?u.response:u.responseText;setTimeout((function(){r(new T(o,n))}),0)},u.onerror=function(){setTimeout((function(){o(new TypeError("Network request failed"))}),0)},u.ontimeout=function(){setTimeout((function(){o(new TypeError("Network request timed out"))}),0)},u.onabort=function(){setTimeout((function(){o(new O("Aborted","AbortError"))}),0)},u.open(i.method,function(e){try{return""===e&&n.location.href?n.location.href:e}catch(t){return e}}(i.url),!0),"include"===i.credentials?u.withCredentials=!0:"omit"===i.credentials&&(u.withCredentials=!1),"responseType"in u&&(s?u.responseType="blob":a&&(u.responseType="arraybuffer")),t&&"object"==typeof t.headers&&!(t.headers instanceof p||n.Headers&&t.headers instanceof n.Headers)){var f=[];Object.getOwnPropertyNames(t.headers).forEach((function(e){f.push(l(e)),u.setRequestHeader(e,d(t.headers[e]))})),i.headers.forEach((function(e,t){-1===f.indexOf(t)&&u.setRequestHeader(t,e)}))}else i.headers.forEach((function(e,t){u.setRequestHeader(t,e)}));i.signal&&(i.signal.addEventListener("abort",c),u.onreadystatechange=function(){4===u.readyState&&i.signal.removeEventListener("abort",c)}),u.send(void 0===i._bodyInit?null:i._bodyInit)}))}x.polyfill=!0,n.fetch||(n.fetch=x,n.Headers=p,n.Request=_,n.Response=T);var C=t(self.fetch.bind(self));function A(e){return null!=e&&"object"==typeof e&&!0===e["@@functional/placeholder"]}function I(e){return function t(n){return 0===arguments.length||A(n)?t:e.apply(this,arguments)}}function P(e){return function t(n,r){switch(arguments.length){case 0:return t;case 1:return A(n)?t:I((function(t){return e(n,t)}));default:return A(n)&&A(r)?t:A(n)?I((function(t){return e(t,r)})):A(r)?I((function(t){return e(n,t)})):e(n,r)}}}function S(e){return function t(n,r,o){switch(arguments.length){case 0:return t;case 1:return A(n)?t:P((function(t,r){return e(n,t,r)}));case 2:return A(n)&&A(r)?t:A(n)?P((function(t,n){return e(t,r,n)})):A(r)?P((function(t,r){return e(n,t,r)})):I((function(t){return e(n,r,t)}));default:return A(n)&&A(r)&&A(o)?t:A(n)&&A(r)?P((function(t,n){return e(t,n,o)})):A(n)&&A(o)?P((function(t,n){return e(t,r,n)})):A(r)&&A(o)?P((function(t,r){return e(n,t,r)})):A(n)?I((function(t){return e(t,r,o)})):A(r)?I((function(t){return e(n,t,o)})):A(o)?I((function(t){return e(n,r,t)})):e(n,r,o)}}}var R=S((function(e,t,n){var r=n.length;if(e>=r||e<-r)return n;var o=(r+e)%r,s=function(e,t){var n;t=t||[];var r=(e=e||[]).length,o=t.length,s=[];for(n=0;n<r;)s[s.length]=e[n],n+=1;for(n=0;n<o;)s[s.length]=t[n],n+=1;return s}(n);return s[o]=t(n[o]),s}));function U(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}function j(e,t,n){for(var r=0,o=n.length;r<o;){if(e(t,n[r]))return!0;r+=1}return!1}function L(e,t){return Object.prototype.hasOwnProperty.call(t,e)}var D="function"==typeof Object.is?Object.is:function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t},B=Object.prototype.toString,N=function(){return"[object Arguments]"===B.call(arguments)?function(e){return"[object Arguments]"===B.call(e)}:function(e){return L("callee",e)}}(),q=!{toString:null}.propertyIsEnumerable("toString"),F=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],k=function(){return arguments.propertyIsEnumerable("length")}(),$=function(e,t){for(var n=0;n<e.length;){if(e[n]===t)return!0;n+=1}return!1},M="function"!=typeof Object.keys||k?I((function(e){if(Object(e)!==e)return[];var t,n,r=[],o=k&&N(e);for(t in e)!L(t,e)||o&&"length"===t||(r[r.length]=t);if(q)for(n=F.length-1;n>=0;)L(t=F[n],e)&&!$(r,t)&&(r[r.length]=t),n-=1;return r})):I((function(e){return Object(e)!==e?[]:Object.keys(e)})),G=I((function(e){return null===e?"Null":void 0===e?"Undefined":Object.prototype.toString.call(e).slice(8,-1)}));function H(e,t,n,r){var o=U(e);function s(e,t){return W(e,t,n.slice(),r.slice())}return!j((function(e,t){return!j(s,t,e)}),U(t),o)}function W(e,t,n,r){if(D(e,t))return!0;var o,s,i=G(e);if(i!==G(t))return!1;if("function"==typeof e["fantasy-land/equals"]||"function"==typeof t["fantasy-land/equals"])return"function"==typeof e["fantasy-land/equals"]&&e["fantasy-land/equals"](t)&&"function"==typeof t["fantasy-land/equals"]&&t["fantasy-land/equals"](e);if("function"==typeof e.equals||"function"==typeof t.equals)return"function"==typeof e.equals&&e.equals(t)&&"function"==typeof t.equals&&t.equals(e);switch(i){case"Arguments":case"Array":case"Object":if("function"==typeof e.constructor&&"Promise"===(o=e.constructor,null==(s=String(o).match(/^function (\w*)/))?"":s[1]))return e===t;break;case"Boolean":case"Number":case"String":if(typeof e!=typeof t||!D(e.valueOf(),t.valueOf()))return!1;break;case"Date":if(!D(e.valueOf(),t.valueOf()))return!1;break;case"Error":return e.name===t.name&&e.message===t.message;case"RegExp":if(e.source!==t.source||e.global!==t.global||e.ignoreCase!==t.ignoreCase||e.multiline!==t.multiline||e.sticky!==t.sticky||e.unicode!==t.unicode)return!1}for(var a=n.length-1;a>=0;){if(n[a]===e)return r[a]===t;a-=1}switch(i){case"Map":return e.size===t.size&&H(e.entries(),t.entries(),n.concat([e]),r.concat([t]));case"Set":return e.size===t.size&&H(e.values(),t.values(),n.concat([e]),r.concat([t]));case"Arguments":case"Array":case"Object":case"Boolean":case"Number":case"String":case"Date":case"Error":case"RegExp":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var u=M(e);if(u.length!==M(t).length)return!1;var c=n.concat([e]),l=r.concat([t]);for(a=u.length-1;a>=0;){var d=u[a];if(!L(d,t)||!W(t[d],e[d],c,l))return!1;a-=1}return!0}var K=P((function(e,t){return W(e,t,[],[])})),z=function(e,t){return z=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},z(e,t)};
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
4
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
@@ -12,4 +12,4 @@
|
|
|
12
12
|
|
|
13
13
|
See the Apache Version 2.0 License for specific language governing permissions
|
|
14
14
|
and limitations under the License.
|
|
15
|
-
***************************************************************************** */function V(e,t){function n(){this.constructor=e}z(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function J(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,s=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=s.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=s.return)&&n.call(s)}finally{if(o)throw o.error}}return i}var Q=function(e,t){this.target=t,this.type=e},X=function(e){function t(t,n){var r=e.call(this,"error",n)||this;return r.message=t.message,r.error=t,r}return V(t,e),t}(Q),Z=function(e){function t(t,n,r){void 0===t&&(t=1e3),void 0===n&&(n="");var o=e.call(this,"close",r)||this;return o.wasClean=!0,o.code=t,o.reason=n,o}return V(t,e),t}(Q),Y=function(){if("undefined"!=typeof WebSocket)return WebSocket},ee={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+4e3*Math.random(),minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0},te=function(){function e(e,t,n){var r=this;void 0===n&&(n={}),this._listeners={error:[],message:[],open:[],close:[]},this._retryCount=-1,this._shouldReconnect=!0,this._connectLock=!1,this._binaryType="blob",this._closeCalled=!1,this._messageQueue=[],this.onclose=null,this.onerror=null,this.onmessage=null,this.onopen=null,this._handleOpen=function(e){r._debug("open event");var t=r._options.minUptime,n=void 0===t?ee.minUptime:t;clearTimeout(r._connectTimeout),r._uptimeTimeout=setTimeout((function(){return r._acceptOpen()}),n),r._ws.binaryType=r._binaryType,r._messageQueue.forEach((function(e){return r._ws.send(e)})),r._messageQueue=[],r.onopen&&r.onopen(e),r._listeners.open.forEach((function(t){return r._callEventListener(e,t)}))},this._handleMessage=function(e){r._debug("message event"),r.onmessage&&r.onmessage(e),r._listeners.message.forEach((function(t){return r._callEventListener(e,t)}))},this._handleError=function(e){r._debug("error event",e.message),r._disconnect(void 0,"TIMEOUT"===e.message?"timeout":void 0),r.onerror&&r.onerror(e),r._debug("exec error listeners"),r._listeners.error.forEach((function(t){return r._callEventListener(e,t)})),r._connect()},this._handleClose=function(e){r._debug("close event"),r._clearTimeouts(),r._shouldReconnect&&r._connect(),r.onclose&&r.onclose(e),r._listeners.close.forEach((function(t){return r._callEventListener(e,t)}))},this._url=e,this._protocols=t,this._options=n,this._options.startClosed&&(this._shouldReconnect=!1),this._connect()}return Object.defineProperty(e,"CONNECTING",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(e,"OPEN",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(e,"CLOSING",{get:function(){return 2},enumerable:!0,configurable:!0}),Object.defineProperty(e,"CLOSED",{get:function(){return 3},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"CONNECTING",{get:function(){return e.CONNECTING},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"OPEN",{get:function(){return e.OPEN},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"CLOSING",{get:function(){return e.CLOSING},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"CLOSED",{get:function(){return e.CLOSED},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"binaryType",{get:function(){return this._ws?this._ws.binaryType:this._binaryType},set:function(e){this._binaryType=e,this._ws&&(this._ws.binaryType=e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"retryCount",{get:function(){return Math.max(this._retryCount,0)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"bufferedAmount",{get:function(){return this._messageQueue.reduce((function(e,t){return"string"==typeof t?e+=t.length:t instanceof Blob?e+=t.size:e+=t.byteLength,e}),0)+(this._ws?this._ws.bufferedAmount:0)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"extensions",{get:function(){return this._ws?this._ws.extensions:""},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"protocol",{get:function(){return this._ws?this._ws.protocol:""},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"readyState",{get:function(){return this._ws?this._ws.readyState:this._options.startClosed?e.CLOSED:e.CONNECTING},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this._ws?this._ws.url:""},enumerable:!0,configurable:!0}),e.prototype.close=function(e,t){void 0===e&&(e=1e3),this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),this._ws?this._ws.readyState!==this.CLOSED?this._ws.close(e,t):this._debug("close: already closed"):this._debug("close enqueued: no ws instance")},e.prototype.reconnect=function(e,t){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,this._ws&&this._ws.readyState!==this.CLOSED?(this._disconnect(e,t),this._connect()):this._connect()},e.prototype.send=function(e){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",e),this._ws.send(e);else{var t=this._options.maxEnqueuedMessages,n=void 0===t?ee.maxEnqueuedMessages:t;this._messageQueue.length<n&&(this._debug("enqueue",e),this._messageQueue.push(e))}},e.prototype.addEventListener=function(e,t){this._listeners[e]&&this._listeners[e].push(t)},e.prototype.dispatchEvent=function(e){var t,n,r=this._listeners[e.type];if(r)try{for(var o=function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}(r),s=o.next();!s.done;s=o.next()){var i=s.value;this._callEventListener(e,i)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return!0},e.prototype.removeEventListener=function(e,t){this._listeners[e]&&(this._listeners[e]=this._listeners[e].filter((function(e){return e!==t})))},e.prototype._debug=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];this._options.debug&&console.log.apply(console,function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(J(arguments[t]));return e}(["RWS>"],e))},e.prototype._getNextDelay=function(){var e=this._options,t=e.reconnectionDelayGrowFactor,n=void 0===t?ee.reconnectionDelayGrowFactor:t,r=e.minReconnectionDelay,o=void 0===r?ee.minReconnectionDelay:r,s=e.maxReconnectionDelay,i=void 0===s?ee.maxReconnectionDelay:s,a=0;return this._retryCount>0&&(a=o*Math.pow(n,this._retryCount-1))>i&&(a=i),this._debug("next delay",a),a},e.prototype._wait=function(){var e=this;return new Promise((function(t){setTimeout(t,e._getNextDelay())}))},e.prototype._getNextUrl=function(e){if("string"==typeof e)return Promise.resolve(e);if("function"==typeof e){var t=e();if("string"==typeof t)return Promise.resolve(t);if(t.then)return t}throw Error("Invalid URL")},e.prototype._connect=function(){var e=this;if(!this._connectLock&&this._shouldReconnect){this._connectLock=!0;var t=this._options,n=t.maxRetries,r=void 0===n?ee.maxRetries:n,o=t.connectionTimeout,s=void 0===o?ee.connectionTimeout:o,i=t.WebSocket,a=void 0===i?Y():i;if(this._retryCount>=r)this._debug("max retries reached",this._retryCount,">=",r);else{if(this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),void 0===(c=a)||!c||2!==c.CLOSING)throw Error("No valid WebSocket class provided");var c;this._wait().then((function(){return e._getNextUrl(e._url)})).then((function(t){e._closeCalled||(e._debug("connect",{url:t,protocols:e._protocols}),e._ws=e._protocols?new a(t,e._protocols):new a(t),e._ws.binaryType=e._binaryType,e._connectLock=!1,e._addListeners(),e._connectTimeout=setTimeout((function(){return e._handleTimeout()}),s))}))}}},e.prototype._handleTimeout=function(){this._debug("timeout event"),this._handleError(new X(Error("TIMEOUT"),this))},e.prototype._disconnect=function(e,t){if(void 0===e&&(e=1e3),this._clearTimeouts(),this._ws){this._removeListeners();try{this._ws.close(e,t),this._handleClose(new Z(e,t,this))}catch(e){}}},e.prototype._acceptOpen=function(){this._debug("accept open"),this._retryCount=0},e.prototype._callEventListener=function(e,t){"handleEvent"in t?t.handleEvent(e):t(e)},e.prototype._removeListeners=function(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))},e.prototype._addListeners=function(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))},e.prototype._clearTimeouts=function(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)},e}();let ne;const re=new Uint8Array(16);function oe(){if(!ne&&(ne="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!ne))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ne(re)}const se=[];for(let e=0;e<256;++e)se.push((e+256).toString(16).slice(1));var ie={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function ae(e,t,n){if(ie.randomUUID&&!e)return ie.randomUUID();const r=(e=e||{}).random||(e.rng||oe)();return r[6]=15&r[6]|64,r[8]=63&r[8]|128,function(e,t=0){return se[e[t+0]]+se[e[t+1]]+se[e[t+2]]+se[e[t+3]]+"-"+se[e[t+4]]+se[e[t+5]]+"-"+se[e[t+6]]+se[e[t+7]]+"-"+se[e[t+8]]+se[e[t+9]]+"-"+se[e[t+10]]+se[e[t+11]]+se[e[t+12]]+se[e[t+13]]+se[e[t+14]]+se[e[t+15]]}(r)}var ce="1.2.3";const ue=ce,le=console;var de;e.ResponseType=void 0,(de=e.ResponseType||(e.ResponseType={})).Application="bot",de.User="user",de.Failure="failure";const fe="NLX.Welcome",pe=e=>Array.isArray(e)?e:Object.entries(e).map((([e,t])=>({slotId:e,value:t}))),he=e=>({...e,intentId:e.flowId??e.intentId,slots:null!=e.slots?pe(e.slots):e.slots}),ye=e=>e.responses,ge=e=>{try{return JSON.parse(e)}catch(e){return null}},me=e=>e.match(/(bots\.dev\.studio\.nlx\.ai|bots\.studio\.nlx\.ai|apps\.nlx\.ai|dev\.apps\.nlx\.ai)/g)?.[0]??"apps.nlx.ai",be=e=>{if(!ve(e))return e;const t=me(e),n=new URL(e),r=new URLSearchParams(n.search),o=r.get("channelKey");return`https://${t}/c/${r.get("deploymentKey")}/${o}`},ve=e=>0===e.indexOf("wss://");e.createConversation=function(t){let n,r,o=[],s=null,i=[],a=null;const c=t.applicationUrl??"";/[-|_][a-z]{2,}[-|_][A-Z]{2,}$/.test(c)&&le.warn("Since v1.0.0, the language code is no longer added at the end of the application URL. Please remove the modifier (e.g. '-en-US') from the URL, and specify it in the `languageCode` parameter instead.");const u={voicePlusCommand:[]},l=t.conversationId??ae();let d={responses:t.responses??[],languageCode:t.languageCode,userId:t.userId,conversationId:l};const f=()=>`${be(c)}${!0===t.experimental?.completeApplicationUrl?"":`-${d.languageCode}`}`,p=(e,t)=>{d={...d,...e},v.forEach((e=>{e(ye(d),t)}))},h=()=>{const n={type:e.ResponseType.Failure,receivedAt:(new Date).getTime(),payload:{text:t.failureMessage??"We encountered an issue. Please try again soon."}};p({responses:[...d.responses,n]},n)},y=t=>{if(t?.messages.length>0){const n={type:e.ResponseType.Application,receivedAt:(new Date).getTime(),payload:{...t,messages:t.messages.map((e=>({nodeId:e.nodeId,messageId:e.messageId,text:e.text,choices:e.choices??[]})))}};p({responses:[...d.responses,n]},n),t.metadata.hasPendingDataRequest&&(x({poll:!0}),setTimeout((()=>{b({request:{structured:{poll:!0}}})}),1500))}else le.warn("Invalid message structure, expected object with field 'messages'."),h()};let g;const m=e=>{1===r?.readyState?r.send(JSON.stringify(e)):i=[...i,e]},b=async r=>{if(null!=g)return void g(r,(t=>{le.warn("Using the second argument in `setRequestOverride` is deprecated. Use `conversationHandler.appendMessageToTranscript` instead.");const n={type:e.ResponseType.Application,receivedAt:(new Date).getTime(),payload:t};p({responses:[...d.responses,n]},n)}));const s={userId:d.userId,conversationId:d.conversationId,...r,languageCode:d.languageCode,channelType:t.experimental?.channelType,environment:t.environment};if(ve(c))1===n?.readyState?n.send(JSON.stringify(s)):o=[...o,s];else try{const e=await A(f(),{method:"POST",headers:{...t.headers??{},Accept:"application/json","Content-Type":"application/json","nlx-sdk-version":ce},body:JSON.stringify(s)});if(e.status>=400)throw new Error(`Responded with ${e.status}`);const n=await e.json();y(n)}catch(e){le.warn(e),h()}};let v=[];const _=()=>{1===r?.readyState&&null!=i[0]&&(m(i[0]),i=i.slice(1))},w=()=>{E();const e=new URL(c);!0!==t.experimental?.completeApplicationUrl&&(e.searchParams.set("languageCode",d.languageCode),e.searchParams.set("channelKey",`${e.searchParams.get("channelKey")??""}-${d.languageCode}`)),e.searchParams.set("conversationId",d.conversationId),n=new te(e.href),s=setInterval((()=>{(async()=>{1===n?.readyState&&null!=o[0]&&(await b(o[0]),o=o.slice(1))})()}),500),n.onmessage=function(e){"string"==typeof e?.data&&y(ge(e.data))},e.searchParams.set("voice-plus","true"),r=new te(e.href),a=setInterval((()=>{_()}),500),r.onmessage=e=>{if("string"==typeof e?.data){const t=ge(e.data);null!=t&&u.voicePlusCommand.forEach((e=>{e(t)}))}}},T=()=>{if(O(),!0!==t.bidirectional)return;const e=new URL((e=>{if(ve(e))return e;const t=me(e),n=new URL(e).pathname.split("/");return`wss://us-east-1-ws.${t}?deploymentKey=${n[2]}&channelKey=${n[3]}`})(c));!0!==t.experimental?.completeApplicationUrl&&(e.searchParams.set("languageCode",d.languageCode),e.searchParams.set("channelKey",`${e.searchParams.get("channelKey")??""}-${d.languageCode}`)),e.searchParams.set("conversationId",d.conversationId),e.searchParams.set("type","voice-plus");const n=t.headers["nlx-api-key"];ve(c)||null==n||e.searchParams.set("apiKey",n),r=new te(e.href),a=setInterval((()=>{_()}),500),r.onmessage=e=>{if("string"==typeof e?.data){const t=ge(e.data);null!=t&&u.voicePlusCommand.forEach((e=>{e(t)}))}}},E=()=>{null!=s&&clearInterval(s),null!=n&&(n.onmessage=null,n.close(),n=void 0)},O=()=>{null!=a&&clearInterval(a),null!=r&&(r.onmessage=null,r.close(),r=void 0)};ve(c)&&w(),T();const x=(t,n)=>{const r={type:e.ResponseType.User,receivedAt:(new Date).getTime(),payload:{type:"structured",...he(t),context:n}};p({responses:[...d.responses,r]},r)},C=(e,t)=>{x({intentId:e},t),b({context:t,request:{structured:{intentId:e}}})},I=e=>{v=v.filter((t=>t!==e))};return{sendText:(t,n)=>{const r={type:e.ResponseType.User,receivedAt:(new Date).getTime(),payload:{type:"text",text:t,context:n}};p({responses:[...d.responses,r]},r),b({context:n,request:{unstructured:{text:t}}})},sendContext:async e=>{const n=await A(`${f()}/context`,{method:"POST",headers:{...t.headers??{},Accept:"application/json","Content-Type":"application/json","nlx-conversation-id":d.conversationId,"nlx-sdk-version":ce},body:JSON.stringify({languageCode:d.languageCode,conversationId:d.conversationId,userId:d.userId,context:e})});if(n.status>=400)throw new Error(`Responded with ${n.status}`)},appendMessageToTranscript:e=>{const t={...e,receivedAt:e.receivedAt??(new Date).getTime()};p({responses:[...d.responses,t]},t)},sendStructured:(e,t)=>{x(e,t),b({context:t,request:{structured:he(e)}})},sendSlots:(e,t)=>{x({slots:e},t),b({context:t,request:{structured:{slots:pe(e)}}})},sendFlow:C,sendIntent:(e,t)=>{le.warn("Calling `sendIntent` is deprecated and will be removed in a future version of the SDK. Use `sendFlow` instead."),C(e,t)},sendWelcomeFlow:e=>{C(fe,e)},sendWelcomeIntent:e=>{le.warn("Calling `sendWelcomeIntent` is deprecated and will be removed in a future version of the SDK. Use `sendWelcomeFlow` instead."),C(fe,e)},sendChoice:(t,n,r)=>{let o=[...d.responses];const s={type:e.ResponseType.User,receivedAt:(new Date).getTime(),payload:{type:"choice",choiceId:t}},i=r?.responseIndex??-1,a=r?.messageIndex??-1;i>-1&&a>-1&&(o=S(i,(n=>n.type===e.ResponseType.Application?{...n,payload:{...n.payload,messages:S(a,(e=>({...e,selectedChoiceId:t})),n.payload.messages)}}:n),o)),o=[...o,s],p({responses:o},s),b({context:n,request:{structured:{nodeId:r?.nodeId,intentId:r?.intentId,choiceId:t}}})},currentConversationId:()=>d.conversationId,setLanguageCode:e=>{e!==d.languageCode?(ve(c)&&w(),T(),p({languageCode:e})):le.warn("Attempted to set language code to the one already active.")},currentLanguageCode:()=>d.languageCode,getVoiceCredentials:async(e,n)=>{const r=be(c),o=await A(`${r}-${d.languageCode}/requestToken`,{method:"POST",headers:{...t.headers??{},Accept:"application/json","Content-Type":"application/json","nlx-conversation-id":d.conversationId,"nlx-sdk-version":ce},body:JSON.stringify({languageCode:d.languageCode,conversationId:d.conversationId,userId:d.userId,requestToken:!0,context:e,autoTriggerWelcomeFlow:n?.autoTriggerWelcomeFlow??!0})});if(o.status>=400)throw new Error(`Responded with ${o.status}`);const s=await o.json();if(null==s?.url)throw new Error("Invalid response");return s},subscribe:e=>(v=[...v,e],e(ye(d)),()=>{I(e)}),unsubscribe:I,unsubscribeAll:()=>{v=[]},reset:e=>{p({conversationId:ae(),responses:!0===e?.clearResponses?[]:d.responses}),ve(c)&&w(),T()},destroy:()=>{v=[],ve(c)&&E(),O()},setRequestOverride:e=>{g=e},addEventListener:(e,t)=>{u[e]=[...u[e],t]},removeEventListener:(e,t)=>{u[e]=u[e].filter((e=>e!==t))},sendVoicePlusContext:e=>{m({context:e})}}},e.getCurrentExpirationTimestamp=t=>{let n=null;return t.forEach((t=>{t.type===e.ResponseType.Application&&null!=t.payload.expirationTimestamp&&(n=t.payload.expirationTimestamp)})),n},e.isConfigValid=e=>(e.applicationUrl??"").length>0,e.promisify=function(t,n,r=1e4){return async o=>await new Promise(((s,i)=>{const a=setTimeout((()=>{i(new Error("The request timed out.")),n.unsubscribe(c)}),r),c=(t,r)=>{r?.type!==e.ResponseType.Application&&r?.type!==e.ResponseType.Failure||(clearTimeout(a),n.unsubscribe(c),s(r))};n.subscribe(c),t(o)}))},e.shouldReinitialize=(e,t)=>!K(e,t),e.version=ue}));
|
|
15
|
+
***************************************************************************** */function V(e,t){function n(){this.constructor=e}z(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function J(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,s=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=s.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=s.return)&&n.call(s)}finally{if(o)throw o.error}}return i}var Q=function(e,t){this.target=t,this.type=e},X=function(e){function t(t,n){var r=e.call(this,"error",n)||this;return r.message=t.message,r.error=t,r}return V(t,e),t}(Q),Z=function(e){function t(t,n,r){void 0===t&&(t=1e3),void 0===n&&(n="");var o=e.call(this,"close",r)||this;return o.wasClean=!0,o.code=t,o.reason=n,o}return V(t,e),t}(Q),Y=function(){if("undefined"!=typeof WebSocket)return WebSocket},ee={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+4e3*Math.random(),minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0},te=function(){function e(e,t,n){var r=this;void 0===n&&(n={}),this._listeners={error:[],message:[],open:[],close:[]},this._retryCount=-1,this._shouldReconnect=!0,this._connectLock=!1,this._binaryType="blob",this._closeCalled=!1,this._messageQueue=[],this.onclose=null,this.onerror=null,this.onmessage=null,this.onopen=null,this._handleOpen=function(e){r._debug("open event");var t=r._options.minUptime,n=void 0===t?ee.minUptime:t;clearTimeout(r._connectTimeout),r._uptimeTimeout=setTimeout((function(){return r._acceptOpen()}),n),r._ws.binaryType=r._binaryType,r._messageQueue.forEach((function(e){return r._ws.send(e)})),r._messageQueue=[],r.onopen&&r.onopen(e),r._listeners.open.forEach((function(t){return r._callEventListener(e,t)}))},this._handleMessage=function(e){r._debug("message event"),r.onmessage&&r.onmessage(e),r._listeners.message.forEach((function(t){return r._callEventListener(e,t)}))},this._handleError=function(e){r._debug("error event",e.message),r._disconnect(void 0,"TIMEOUT"===e.message?"timeout":void 0),r.onerror&&r.onerror(e),r._debug("exec error listeners"),r._listeners.error.forEach((function(t){return r._callEventListener(e,t)})),r._connect()},this._handleClose=function(e){r._debug("close event"),r._clearTimeouts(),r._shouldReconnect&&r._connect(),r.onclose&&r.onclose(e),r._listeners.close.forEach((function(t){return r._callEventListener(e,t)}))},this._url=e,this._protocols=t,this._options=n,this._options.startClosed&&(this._shouldReconnect=!1),this._connect()}return Object.defineProperty(e,"CONNECTING",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(e,"OPEN",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(e,"CLOSING",{get:function(){return 2},enumerable:!0,configurable:!0}),Object.defineProperty(e,"CLOSED",{get:function(){return 3},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"CONNECTING",{get:function(){return e.CONNECTING},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"OPEN",{get:function(){return e.OPEN},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"CLOSING",{get:function(){return e.CLOSING},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"CLOSED",{get:function(){return e.CLOSED},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"binaryType",{get:function(){return this._ws?this._ws.binaryType:this._binaryType},set:function(e){this._binaryType=e,this._ws&&(this._ws.binaryType=e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"retryCount",{get:function(){return Math.max(this._retryCount,0)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"bufferedAmount",{get:function(){return this._messageQueue.reduce((function(e,t){return"string"==typeof t?e+=t.length:t instanceof Blob?e+=t.size:e+=t.byteLength,e}),0)+(this._ws?this._ws.bufferedAmount:0)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"extensions",{get:function(){return this._ws?this._ws.extensions:""},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"protocol",{get:function(){return this._ws?this._ws.protocol:""},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"readyState",{get:function(){return this._ws?this._ws.readyState:this._options.startClosed?e.CLOSED:e.CONNECTING},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this._ws?this._ws.url:""},enumerable:!0,configurable:!0}),e.prototype.close=function(e,t){void 0===e&&(e=1e3),this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),this._ws?this._ws.readyState!==this.CLOSED?this._ws.close(e,t):this._debug("close: already closed"):this._debug("close enqueued: no ws instance")},e.prototype.reconnect=function(e,t){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,this._ws&&this._ws.readyState!==this.CLOSED?(this._disconnect(e,t),this._connect()):this._connect()},e.prototype.send=function(e){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",e),this._ws.send(e);else{var t=this._options.maxEnqueuedMessages,n=void 0===t?ee.maxEnqueuedMessages:t;this._messageQueue.length<n&&(this._debug("enqueue",e),this._messageQueue.push(e))}},e.prototype.addEventListener=function(e,t){this._listeners[e]&&this._listeners[e].push(t)},e.prototype.dispatchEvent=function(e){var t,n,r=this._listeners[e.type];if(r)try{for(var o=function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}(r),s=o.next();!s.done;s=o.next()){var i=s.value;this._callEventListener(e,i)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return!0},e.prototype.removeEventListener=function(e,t){this._listeners[e]&&(this._listeners[e]=this._listeners[e].filter((function(e){return e!==t})))},e.prototype._debug=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];this._options.debug&&console.log.apply(console,function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(J(arguments[t]));return e}(["RWS>"],e))},e.prototype._getNextDelay=function(){var e=this._options,t=e.reconnectionDelayGrowFactor,n=void 0===t?ee.reconnectionDelayGrowFactor:t,r=e.minReconnectionDelay,o=void 0===r?ee.minReconnectionDelay:r,s=e.maxReconnectionDelay,i=void 0===s?ee.maxReconnectionDelay:s,a=0;return this._retryCount>0&&(a=o*Math.pow(n,this._retryCount-1))>i&&(a=i),this._debug("next delay",a),a},e.prototype._wait=function(){var e=this;return new Promise((function(t){setTimeout(t,e._getNextDelay())}))},e.prototype._getNextUrl=function(e){if("string"==typeof e)return Promise.resolve(e);if("function"==typeof e){var t=e();if("string"==typeof t)return Promise.resolve(t);if(t.then)return t}throw Error("Invalid URL")},e.prototype._connect=function(){var e=this;if(!this._connectLock&&this._shouldReconnect){this._connectLock=!0;var t=this._options,n=t.maxRetries,r=void 0===n?ee.maxRetries:n,o=t.connectionTimeout,s=void 0===o?ee.connectionTimeout:o,i=t.WebSocket,a=void 0===i?Y():i;if(this._retryCount>=r)this._debug("max retries reached",this._retryCount,">=",r);else{if(this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),void 0===(u=a)||!u||2!==u.CLOSING)throw Error("No valid WebSocket class provided");var u;this._wait().then((function(){return e._getNextUrl(e._url)})).then((function(t){e._closeCalled||(e._debug("connect",{url:t,protocols:e._protocols}),e._ws=e._protocols?new a(t,e._protocols):new a(t),e._ws.binaryType=e._binaryType,e._connectLock=!1,e._addListeners(),e._connectTimeout=setTimeout((function(){return e._handleTimeout()}),s))}))}}},e.prototype._handleTimeout=function(){this._debug("timeout event"),this._handleError(new X(Error("TIMEOUT"),this))},e.prototype._disconnect=function(e,t){if(void 0===e&&(e=1e3),this._clearTimeouts(),this._ws){this._removeListeners();try{this._ws.close(e,t),this._handleClose(new Z(e,t,this))}catch(e){}}},e.prototype._acceptOpen=function(){this._debug("accept open"),this._retryCount=0},e.prototype._callEventListener=function(e,t){"handleEvent"in t?t.handleEvent(e):t(e)},e.prototype._removeListeners=function(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))},e.prototype._addListeners=function(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))},e.prototype._clearTimeouts=function(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)},e}();let ne;const re=new Uint8Array(16);function oe(){if(!ne&&(ne="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!ne))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ne(re)}const se=[];for(let e=0;e<256;++e)se.push((e+256).toString(16).slice(1));var ie={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function ae(e,t,n){if(ie.randomUUID&&!e)return ie.randomUUID();const r=(e=e||{}).random||(e.rng||oe)();return r[6]=15&r[6]|64,r[8]=63&r[8]|128,function(e,t=0){return se[e[t+0]]+se[e[t+1]]+se[e[t+2]]+se[e[t+3]]+"-"+se[e[t+4]]+se[e[t+5]]+"-"+se[e[t+6]]+se[e[t+7]]+"-"+se[e[t+8]]+se[e[t+9]]+"-"+se[e[t+10]]+se[e[t+11]]+se[e[t+12]]+se[e[t+13]]+se[e[t+14]]+se[e[t+15]]}(r)}var ue="1.2.4-alpha.1";const ce=ue,le=console;var de;e.ResponseType=void 0,(de=e.ResponseType||(e.ResponseType={})).Application="bot",de.User="user",de.Failure="failure";const fe="NLX.Welcome",pe=e=>Array.isArray(e)?e:Object.entries(e).map((([e,t])=>({slotId:e,value:t}))),he=e=>({...e,intentId:e.flowId??e.intentId,slots:null!=e.slots?pe(e.slots):e.slots}),ye=e=>e.responses,ge=e=>{try{return JSON.parse(e)}catch(e){return null}},me=e=>e.match(/(bots\.dev\.studio\.nlx\.ai|bots\.studio\.nlx\.ai|apps\.nlx\.ai|dev\.apps\.nlx\.ai)/g)?.[0]??"apps.nlx.ai",be=e=>{if(!ve(e))return e;const t=me(e),n=new URL(e),r=new URLSearchParams(n.search),o=r.get("channelKey");return`https://${t}/c/${r.get("deploymentKey")}/${o}`},ve=e=>0===e.indexOf("wss://");e.createConversation=function(t){let n,r,o=[],s=null,i=[],a=null;const u=t.applicationUrl??"";/[-|_][a-z]{2,}[-|_][A-Z]{2,}$/.test(u)&&le.warn("Since v1.0.0, the language code is no longer added at the end of the application URL. Please remove the modifier (e.g. '-en-US') from the URL, and specify it in the `languageCode` parameter instead.");const c={voicePlusCommand:[]},l=t.conversationId??ae();let d={responses:t.responses??[],languageCode:t.languageCode,userId:t.userId,conversationId:l};const f=()=>`${be(u)}${!0===t.experimental?.completeApplicationUrl?"":`-${d.languageCode}`}`,p=(e,t)=>{d={...d,...e},v.forEach((e=>{e(ye(d),t)}))},h=()=>{const n={type:e.ResponseType.Failure,receivedAt:(new Date).getTime(),payload:{text:t.failureMessage??"We encountered an issue. Please try again soon."}};p({responses:[...d.responses,n]},n)},y=t=>{if(t?.messages.length>0){const n={type:e.ResponseType.Application,receivedAt:(new Date).getTime(),payload:{...t,messages:t.messages.map((e=>({nodeId:e.nodeId,messageId:e.messageId,text:e.text,choices:e.choices??[]})))}};p({responses:[...d.responses,n]},n),t.metadata.hasPendingDataRequest&&(x({poll:!0}),setTimeout((()=>{b({request:{structured:{poll:!0}}})}),1500))}else le.warn("Invalid message structure, expected object with field 'messages'."),h()};let g;const m=e=>{1===r?.readyState?r.send(JSON.stringify(e)):i=[...i,e]},b=async r=>{if(null!=g)return void g(r,(t=>{le.warn("Using the second argument in `setRequestOverride` is deprecated. Use `conversationHandler.appendMessageToTranscript` instead.");const n={type:e.ResponseType.Application,receivedAt:(new Date).getTime(),payload:t};p({responses:[...d.responses,n]},n)}));const s={userId:d.userId,conversationId:d.conversationId,...r,languageCode:d.languageCode,channelType:t.experimental?.channelType,environment:t.environment};if(ve(u))1===n?.readyState?n.send(JSON.stringify(s)):o=[...o,s];else try{const e=await C(f(),{method:"POST",headers:{...t.headers??{},Accept:"application/json","Content-Type":"application/json","nlx-sdk-version":ue},body:JSON.stringify(s)});if(e.status>=400)throw new Error(`Responded with ${e.status}`);const n=await e.json();y(n)}catch(e){le.warn(e),h()}};let v=[];const _=()=>{1===r?.readyState&&null!=i[0]&&(m(i[0]),i=i.slice(1))},w=()=>{E();const e=new URL(u);!0!==t.experimental?.completeApplicationUrl&&(e.searchParams.set("languageCode",d.languageCode),e.searchParams.set("channelKey",`${e.searchParams.get("channelKey")??""}-${d.languageCode}`)),e.searchParams.set("conversationId",d.conversationId),n=new te(e.href),s=setInterval((()=>{(async()=>{1===n?.readyState&&null!=o[0]&&(await b(o[0]),o=o.slice(1))})()}),500),n.onmessage=function(e){"string"==typeof e?.data&&y(ge(e.data))},e.searchParams.set("voice-plus","true"),r=new te(e.href),a=setInterval((()=>{_()}),500),r.onmessage=e=>{if("string"==typeof e?.data){const t=ge(e.data);null!=t&&c.voicePlusCommand.forEach((e=>{e(t)}))}}},T=()=>{if(O(),!0!==t.bidirectional)return;const e=new URL((e=>{if(ve(e))return e;const t=me(e),n=new URL(e).pathname.split("/");return`wss://us-east-1-ws.${t}?deploymentKey=${n[2]}&channelKey=${n[3]}`})(u));!0!==t.experimental?.completeApplicationUrl&&(e.searchParams.set("languageCode",d.languageCode),e.searchParams.set("channelKey",`${e.searchParams.get("channelKey")??""}-${d.languageCode}`)),e.searchParams.set("conversationId",d.conversationId),e.searchParams.set("type","voice-plus");const n=t.headers["nlx-api-key"];ve(u)||null==n||e.searchParams.set("apiKey",n),r=new te(e.href),a=setInterval((()=>{_()}),500),r.onmessage=e=>{if("string"==typeof e?.data){const t=ge(e.data);null!=t&&c.voicePlusCommand.forEach((e=>{e(t)}))}}},E=()=>{null!=s&&clearInterval(s),null!=n&&(n.onmessage=null,n.close(),n=void 0)},O=()=>{null!=a&&clearInterval(a),null!=r&&(r.onmessage=null,r.close(),r=void 0)};ve(u)&&w(),T();const x=(t,n)=>{const r={type:e.ResponseType.User,receivedAt:(new Date).getTime(),payload:{type:"structured",...he(t),context:n}};p({responses:[...d.responses,r]},r)},A=(e,t)=>{x({intentId:e},t),b({context:t,request:{structured:{intentId:e}}})},I=e=>{v=v.filter((t=>t!==e))};return{sendText:(t,n)=>{const r={type:e.ResponseType.User,receivedAt:(new Date).getTime(),payload:{type:"text",text:t,context:n}};p({responses:[...d.responses,r]},r),b({context:n,request:{unstructured:{text:t}}})},sendContext:async e=>{const n=await C(`${f()}/context`,{method:"POST",headers:{...t.headers??{},Accept:"application/json","Content-Type":"application/json","nlx-conversation-id":d.conversationId,"nlx-sdk-version":ue},body:JSON.stringify({languageCode:d.languageCode,conversationId:d.conversationId,userId:d.userId,context:e})});if(n.status>=400)throw new Error(`Responded with ${n.status}`)},appendMessageToTranscript:e=>{const t={...e,receivedAt:e.receivedAt??(new Date).getTime()};p({responses:[...d.responses,t]},t)},sendStructured:(e,t)=>{x(e,t),b({context:t,request:{structured:he(e)}})},sendSlots:(e,t)=>{x({slots:e},t),b({context:t,request:{structured:{slots:pe(e)}}})},sendFlow:A,sendIntent:(e,t)=>{le.warn("Calling `sendIntent` is deprecated and will be removed in a future version of the SDK. Use `sendFlow` instead."),A(e,t)},sendWelcomeFlow:e=>{A(fe,e)},sendWelcomeIntent:e=>{le.warn("Calling `sendWelcomeIntent` is deprecated and will be removed in a future version of the SDK. Use `sendWelcomeFlow` instead."),A(fe,e)},sendChoice:(t,n,r)=>{let o=[...d.responses];const s={type:e.ResponseType.User,receivedAt:(new Date).getTime(),payload:{type:"choice",choiceId:t}},i=r?.responseIndex??-1,a=r?.messageIndex??-1;i>-1&&a>-1&&(o=R(i,(n=>n.type===e.ResponseType.Application?{...n,payload:{...n.payload,messages:R(a,(e=>({...e,selectedChoiceId:t})),n.payload.messages)}}:n),o)),o=[...o,s],p({responses:o},s),b({context:n,request:{structured:{nodeId:r?.nodeId,intentId:r?.intentId,choiceId:t}}})},submitFeedback:async(e,t)=>{const n=await C(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({languageCode:d.languageCode,conversationId:d.conversationId,userId:d.userId,...t})});if(n.status>=400)throw new Error(`Responded with ${n.status}`)},currentConversationId:()=>d.conversationId,setLanguageCode:e=>{e!==d.languageCode?(ve(u)&&w(),T(),p({languageCode:e})):le.warn("Attempted to set language code to the one already active.")},currentLanguageCode:()=>d.languageCode,getVoiceCredentials:async(e,n)=>{const r=be(u),o=await C(`${r}-${d.languageCode}/requestToken`,{method:"POST",headers:{...t.headers??{},Accept:"application/json","Content-Type":"application/json","nlx-conversation-id":d.conversationId,"nlx-sdk-version":ue},body:JSON.stringify({languageCode:d.languageCode,conversationId:d.conversationId,userId:d.userId,requestToken:!0,context:e,autoTriggerWelcomeFlow:n?.autoTriggerWelcomeFlow??!0})});if(o.status>=400)throw new Error(`Responded with ${o.status}`);const s=await o.json();if(null==s?.url)throw new Error("Invalid response");return s},subscribe:e=>(v=[...v,e],e(ye(d)),()=>{I(e)}),unsubscribe:I,unsubscribeAll:()=>{v=[]},reset:e=>{p({conversationId:ae(),responses:!0===e?.clearResponses?[]:d.responses}),ve(u)&&w(),T()},destroy:()=>{v=[],ve(u)&&E(),O()},setRequestOverride:e=>{g=e},addEventListener:(e,t)=>{c[e]=[...c[e],t]},removeEventListener:(e,t)=>{c[e]=c[e].filter((e=>e!==t))},sendVoicePlusContext:e=>{m({context:e})}}},e.getCurrentExpirationTimestamp=t=>{let n=null;return t.forEach((t=>{t.type===e.ResponseType.Application&&null!=t.payload.expirationTimestamp&&(n=t.payload.expirationTimestamp)})),n},e.isConfigValid=e=>(e.applicationUrl??"").length>0,e.promisify=function(t,n,r=1e4){return async o=>await new Promise(((s,i)=>{const a=setTimeout((()=>{i(new Error("The request timed out.")),n.unsubscribe(u)}),r),u=(t,r)=>{r?.type!==e.ResponseType.Application&&r?.type!==e.ResponseType.Failure||(clearTimeout(a),n.unsubscribe(u),s(r))};n.subscribe(u),t(o)}))},e.shouldReinitialize=(e,t)=>!K(e,t),e.version=ce}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nlxai/core",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4-alpha.1",
|
|
4
4
|
"description": "Low-level SDK for building NLX experiences",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.cjs",
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "366aa0de51688c11109364d16fbd27783bf4486a"
|
|
53
53
|
}
|