@botfabrik/engine-webclient 4.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +169 -0
  2. package/dist/client/asset-manifest.json +22 -0
  3. package/dist/client/bot.png +0 -0
  4. package/dist/client/bot.svg +1 -0
  5. package/dist/client/custom.css +4 -0
  6. package/dist/client/favicon.ico +0 -0
  7. package/dist/client/index.html +1 -0
  8. package/dist/client/logo192.png +0 -0
  9. package/dist/client/logo512.png +0 -0
  10. package/dist/client/manifest.json +25 -0
  11. package/dist/client/play-button.png +0 -0
  12. package/dist/client/precache-manifest.18268e8ddbe40ae5d8e91a4a76774701.js +26 -0
  13. package/dist/client/robots.txt +3 -0
  14. package/dist/client/service-worker.js +39 -0
  15. package/dist/client/static/css/main.9f09e476.chunk.css +2 -0
  16. package/dist/client/static/css/main.9f09e476.chunk.css.map +1 -0
  17. package/dist/client/static/js/2.94d39000.chunk.js +3 -0
  18. package/dist/client/static/js/2.94d39000.chunk.js.LICENSE.txt +103 -0
  19. package/dist/client/static/js/2.94d39000.chunk.js.map +1 -0
  20. package/dist/client/static/js/main.1f8d6c7f.chunk.js +2 -0
  21. package/dist/client/static/js/main.1f8d6c7f.chunk.js.map +1 -0
  22. package/dist/client/static/js/runtime-main.f63e6028.js +2 -0
  23. package/dist/client/static/js/runtime-main.f63e6028.js.map +1 -0
  24. package/dist/client/visitor.png +0 -0
  25. package/dist/client/visitor.svg +1 -0
  26. package/dist/createSessionInfo.d.ts +5 -0
  27. package/dist/createSessionInfo.js +36 -0
  28. package/dist/createSessionInfo.js.map +1 -0
  29. package/dist/createSessionInfo.test.d.ts +1 -0
  30. package/dist/createSessionInfo.test.js +88 -0
  31. package/dist/createSessionInfo.test.js.map +1 -0
  32. package/dist/extractIP.d.ts +2 -0
  33. package/dist/extractIP.js +11 -0
  34. package/dist/extractIP.js.map +1 -0
  35. package/dist/extractIP.test.d.ts +1 -0
  36. package/dist/extractIP.test.js +38 -0
  37. package/dist/extractIP.test.js.map +1 -0
  38. package/dist/extractLocale.d.ts +2 -0
  39. package/dist/extractLocale.js +20 -0
  40. package/dist/extractLocale.js.map +1 -0
  41. package/dist/extractLocale.test.d.ts +1 -0
  42. package/dist/extractLocale.test.js +22 -0
  43. package/dist/extractLocale.test.js.map +1 -0
  44. package/dist/getSupportedClientLocale.d.ts +2 -0
  45. package/dist/getSupportedClientLocale.js +19 -0
  46. package/dist/getSupportedClientLocale.js.map +1 -0
  47. package/dist/getSupportedClientLocale.test.d.ts +1 -0
  48. package/dist/getSupportedClientLocale.test.js +20 -0
  49. package/dist/getSupportedClientLocale.test.js.map +1 -0
  50. package/dist/index.d.ts +14 -0
  51. package/dist/index.js +105 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/index.test.d.ts +1 -0
  54. package/dist/index.test.js +16 -0
  55. package/dist/index.test.js.map +1 -0
  56. package/dist/loadPreviousConversation.d.ts +3 -0
  57. package/dist/loadPreviousConversation.js +27 -0
  58. package/dist/loadPreviousConversation.js.map +1 -0
  59. package/dist/middleware/index.d.ts +3 -0
  60. package/dist/middleware/index.js +32 -0
  61. package/dist/middleware/index.js.map +1 -0
  62. package/dist/requestSessionData.d.ts +10 -0
  63. package/dist/requestSessionData.js +40 -0
  64. package/dist/requestSessionData.js.map +1 -0
  65. package/dist/requestSessionData.test.d.ts +1 -0
  66. package/dist/requestSessionData.test.js +83 -0
  67. package/dist/requestSessionData.test.js.map +1 -0
  68. package/dist/speechToText.d.ts +7 -0
  69. package/dist/speechToText.js +46 -0
  70. package/dist/speechToText.js.map +1 -0
  71. package/dist/types.d.ts +7 -0
  72. package/dist/types.js +3 -0
  73. package/dist/types.js.map +1 -0
  74. package/dist/views/index.d.ts +2 -0
  75. package/dist/views/index.js +102 -0
  76. package/dist/views/index.js.map +1 -0
  77. package/package.json +36 -0
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const requestSessionData_1 = require("./requestSessionData");
4
+ describe('request session id', () => {
5
+ beforeEach(() => {
6
+ jest.clearAllMocks();
7
+ });
8
+ const querystrings = {
9
+ sessionId: 'session-id',
10
+ accessToken: 'access-token',
11
+ };
12
+ it('when sessionId has been passed by query param but does not exists in db', async () => {
13
+ const findOne = jest.fn();
14
+ findOne.mockReturnValueOnce(undefined);
15
+ const sessionsCollection = {
16
+ findOne,
17
+ };
18
+ const { sessionId, isNew } = await requestSessionData_1.default(querystrings, sessionsCollection, 'test-bot', {});
19
+ expect(findOne).toHaveBeenCalledTimes(1);
20
+ expect(findOne).toHaveBeenCalledWith({ _id: 'session-id' }, { _id: 1, sessionInfo: 1 });
21
+ expect(sessionId).toBe('generated-uuid');
22
+ expect(isNew).toBe(true);
23
+ });
24
+ it('when sessionId has been passed by query param and exists in db', async () => {
25
+ const findOne = jest.fn();
26
+ findOne.mockReturnValueOnce({ _id: 'session-id' });
27
+ const sessionsCollection = {
28
+ findOne,
29
+ };
30
+ const { sessionId, isNew } = await requestSessionData_1.default(querystrings, sessionsCollection, 'test-bot', {});
31
+ expect(findOne).toHaveBeenCalledTimes(1);
32
+ expect(findOne).toHaveBeenCalledWith({ _id: 'session-id' }, { _id: 1, sessionInfo: 1 });
33
+ expect(sessionId).toBe('session-id');
34
+ expect(isNew).toBe(false);
35
+ });
36
+ it('when requestSessionRecordQuery has been passed as webclient property but no such session exists in db', async () => {
37
+ const findOne = jest.fn();
38
+ findOne.mockReturnValueOnce(undefined);
39
+ const sessionsCollection = {
40
+ findOne,
41
+ };
42
+ const requestSessionRecordQuery = jest.fn();
43
+ const props = {
44
+ requestSessionRecordQuery,
45
+ };
46
+ requestSessionRecordQuery.mockReturnValueOnce({ 'sessionInfo.user.id': 'hans@apptiva.ch' });
47
+ const { sessionId, isNew } = await requestSessionData_1.default(querystrings, sessionsCollection, 'test-bot', props);
48
+ expect(requestSessionRecordQuery).toHaveBeenCalledTimes(1);
49
+ expect(requestSessionRecordQuery).toHaveBeenCalledWith(querystrings);
50
+ expect(findOne).toHaveBeenCalledTimes(1);
51
+ expect(findOne).toHaveBeenCalledWith({
52
+ 'sessionInfo.client.name': 'test-bot',
53
+ 'sessionInfo.client.type': 'webclient',
54
+ 'sessionInfo.user.id': 'hans@apptiva.ch',
55
+ }, { _id: 1, sessionInfo: 1 });
56
+ expect(sessionId).toBe('generated-uuid');
57
+ expect(isNew).toBe(true);
58
+ });
59
+ it('when requestSessionRecordQuery has been passed as webclient property and session exists in db', async () => {
60
+ const findOne = jest.fn();
61
+ findOne.mockReturnValueOnce({ _id: 'session-id' });
62
+ const sessionsCollection = {
63
+ findOne,
64
+ };
65
+ const requestSessionRecordQuery = jest.fn();
66
+ const props = {
67
+ requestSessionRecordQuery,
68
+ };
69
+ requestSessionRecordQuery.mockReturnValueOnce({ 'sessionInfo.user.id': 'hans@apptiva.ch' });
70
+ const { sessionId, isNew } = await requestSessionData_1.default(querystrings, sessionsCollection, 'test-bot', props);
71
+ expect(requestSessionRecordQuery).toHaveBeenCalledTimes(1);
72
+ expect(requestSessionRecordQuery).toHaveBeenCalledWith(querystrings);
73
+ expect(findOne).toHaveBeenCalledTimes(1);
74
+ expect(findOne).toHaveBeenCalledWith({
75
+ 'sessionInfo.client.name': 'test-bot',
76
+ 'sessionInfo.client.type': 'webclient',
77
+ 'sessionInfo.user.id': 'hans@apptiva.ch',
78
+ }, { _id: 1, sessionInfo: 1 });
79
+ expect(sessionId).toBe('session-id');
80
+ expect(isNew).toBe(false);
81
+ });
82
+ });
83
+ //# sourceMappingURL=requestSessionData.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestSessionData.test.js","sourceRoot":"","sources":["../src/requestSessionData.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface SpeechToTextProps {
2
+ clientEmail: string;
3
+ privateKey: string;
4
+ contextPhrases?: any;
5
+ }
6
+ declare const speechToText: (speechProps: SpeechToTextProps, locale: string, speechBytes: any) => Promise<string>;
7
+ export default speechToText;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const speech_1 = require("@google-cloud/speech");
4
+ const speechToText = (speechProps, locale, speechBytes) => {
5
+ return new Promise((resolve, reject) => {
6
+ const speechConfig = {
7
+ credentials: {
8
+ // eslint-disable-next-line @typescript-eslint/camelcase
9
+ private_key: speechProps.privateKey.replace(/\\n/g, '\n'),
10
+ // eslint-disable-next-line @typescript-eslint/camelcase
11
+ client_email: speechProps.clientEmail,
12
+ },
13
+ };
14
+ const client = new speech_1.SpeechClient(speechConfig);
15
+ // The audio file's encoding, sample rate in hertz, and BCP-47 language code
16
+ const audio = {
17
+ content: speechBytes,
18
+ };
19
+ const phrases = speechProps.contextPhrases && speechProps.contextPhrases[locale] ? speechProps.contextPhrases[locale] : [];
20
+ const config = {
21
+ encoding: 'LINEAR16',
22
+ sampleRateHertz: 16000,
23
+ languageCode: locale,
24
+ speechContexts: [
25
+ {
26
+ phrases,
27
+ },
28
+ ],
29
+ };
30
+ const request = {
31
+ audio: audio,
32
+ config: config,
33
+ };
34
+ // Detects speech in the audio file
35
+ client
36
+ .recognize(request)
37
+ .then((data) => {
38
+ const response = data[0];
39
+ const transcription = response.results.map((result) => result.alternatives[0].transcript).join('\n');
40
+ resolve(transcription);
41
+ })
42
+ .catch(reject);
43
+ });
44
+ };
45
+ exports.default = speechToText;
46
+ //# sourceMappingURL=speechToText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechToText.js","sourceRoot":"","sources":["../src/speechToText.ts"],"names":[],"mappings":";;AAAA,iDAAoD;AAQpD,MAAM,YAAY,GAAG,CAAC,WAA8B,EAAE,MAAc,EAAE,WAAW,EAAmB,EAAE;IAClG,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,YAAY,GAAG;YACjB,WAAW,EAAE;gBACT,wDAAwD;gBACxD,WAAW,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;gBACzD,wDAAwD;gBACxD,YAAY,EAAE,WAAW,CAAC,WAAW;aACxC;SACJ,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,YAAY,CAAC,CAAC;QAE9C,4EAA4E;QAC5E,MAAM,KAAK,GAAG;YACV,OAAO,EAAE,WAAW;SACvB,CAAC;QACF,MAAM,OAAO,GACT,WAAW,CAAC,cAAc,IAAI,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,MAAM,MAAM,GAAG;YACX,QAAQ,EAAE,UAAU;YACpB,eAAe,EAAE,KAAK;YACtB,YAAY,EAAE,MAAM;YACpB,cAAc,EAAE;gBACZ;oBACI,OAAO;iBACV;aACJ;SACJ,CAAC;QAEF,MAAM,OAAO,GAAG;YACZ,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;SACV,CAAC;QAET,mCAAmC;QACnC,MAAM;aACD,SAAS,CAAC,OAAO,CAAC;aAClB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACX,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrG,OAAO,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC,CAAC;aACD,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,kBAAe,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare type SessionInfoClientPayload = {
2
+ headers: any;
3
+ querystrings: any;
4
+ ip: string;
5
+ };
6
+ export declare type SessionInfoUserPayload = {};
7
+ export declare type WebclientMiddlewareState = {};
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ declare const index: (server: string, scriptUrl: string) => string;
2
+ export default index;
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index = (server, scriptUrl) => `<!DOCTYPE html>
4
+ <html lang="en">
5
+ <head>
6
+ <meta charset="UTF-8" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <meta http-equiv="X-UA-Compatible" content="ie=edge" />
9
+ <link href="https://fonts.googleapis.com/css?family=Open+Sans&display=swap" rel="stylesheet" />
10
+ <title>Botfabrik Chatbot-Webclient</title>
11
+ <style>
12
+ html {
13
+ font-family: 'Open Sans', sans-serif;
14
+ height: 100%;
15
+ }
16
+ body {
17
+ display: grid;
18
+ height: 100%;
19
+ grid-template-rows: auto 1fr;
20
+ margin: 0;
21
+ }
22
+ header {
23
+ color: white;
24
+ background-color: #1ba7e2;
25
+ padding: 3em 0;
26
+ }
27
+ main {
28
+ display: flex;
29
+ flex-direction: column;
30
+ padding: 4em 0;
31
+ min-width: 0; // needed for overflow on pre to work
32
+ }
33
+ a.button {
34
+ display: inline-block;
35
+ font-weight: bold;
36
+ color: #1ba7e2;
37
+ border: 2px solid #1ba7e2;
38
+ border-radius: 0.4em;
39
+ padding: 0.8em 1.6em;
40
+ margin: 1em 1em 0 0;
41
+ text-decoration: none;
42
+ white-space: nowrap;
43
+ }
44
+ pre {
45
+ padding: 1em;
46
+ border: 1px solid #aaa;
47
+ border-radius: 0.4em;
48
+ overflow-x: auto;
49
+ }
50
+ .container {
51
+ max-width: 1280px;
52
+ margin-left: auto;
53
+ margin-right: auto;
54
+ padding: 1.5em;
55
+ }
56
+ </style>
57
+ </head>
58
+ <body>
59
+ <header>
60
+ <div class="container">
61
+ <h1>Botfabrik Chatbot-Webclient</h1>
62
+ </div>
63
+ </header>
64
+ <main>
65
+ <section id="snippet-area" style="flex: 1 1 auto;">
66
+ <div class="container">
67
+ <h2>Chatbot einbinden</h2>
68
+ <h3>Snippet</h3>
69
+ <p>
70
+ Der Chatbot kann mit dem folgenden Snippet eingebettet werden. Am besten wird das Snippet zu
71
+ unterst im Body hinzugefügt.
72
+ </p>
73
+ <pre><code>&lt;script id=&quot;chatbot&quot; data-server=&quot;${server}&quot; defer src=&quot;${scriptUrl}&quot;&gt;&lt;/script&gt;</code></pre>
74
+
75
+ <h3>Bookmarklet (nur zum Testen)</h3>
76
+ <p>Um die Integration schnell zu testen, kann das folgende Bookmarklet verwendet werden.</p>
77
+ <ol>
78
+ <li>
79
+ Bookmarklet zu den Browser-Favoriten hinzufügen.
80
+ </li>
81
+ <li>Die gewünschte Seite im Browser öffnen.</li>
82
+ <li>Bookmarklet in den Favoriten anklicken.</li>
83
+ </ol>
84
+ <a
85
+ id="bookmarklet"
86
+ href="javascript:(function (){var script=document.createElement('script');script.id='chatbot';script.src='${scriptUrl}';document.head.appendChild(script);}());"
87
+ >Chatbot Bookmarklet</a
88
+ >
89
+ </div>
90
+ </section>
91
+ <section>
92
+ <div class="container">
93
+ <a class="button" href="${server}">Vollbild Chatbot</a>
94
+ </div>
95
+ </section>
96
+ </main>
97
+ <script id="chatbot" data-server="${server}" defer src="${scriptUrl}"></script>
98
+ </body>
99
+ </html>
100
+ `;
101
+ exports.default = index;
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":";;AAAA,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAU,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qFAsEwB,MAAM,0BAA0B,SAAS;;;;;;;;;;;;;oIAaM,SAAS;;;;;;;8CAO/F,MAAM;;;;4CAIR,MAAM,gBAAgB,SAAS;;;CAG1E,CAAC;AACF,kBAAe,KAAK,CAAC"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@botfabrik/engine-webclient",
3
+ "version": "4.0.0-alpha.0",
4
+ "description": "Webclient for Botfabriks Bot Engine",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "npm run clean && npm run build:client && npm run build:server && npm run copy:client",
9
+ "build:script-tag": "cd script-tag && npm run build && cd ..",
10
+ "build:client": "cd client && npm run build && cd ..",
11
+ "build:server": "tsc",
12
+ "copy:script-tag": "copyfiles -u 2 ./script-tag/dist/**/*.* ./dist/embed && copyfiles -u 2 ./script-tag/public/**/*.* ./dist/embed",
13
+ "copy:client": "copyfiles -u 2 ./client/build/**/*.* ./dist/client",
14
+ "clean": "rimraf ./dist",
15
+ "test": "jest --verbose",
16
+ "test:watch": "jest --watch",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "devDependencies": {
20
+ "@types/accept-language-parser": "^1.5.1",
21
+ "@types/express": "^4.17.6",
22
+ "@types/socket.io": "^2.1.6",
23
+ "copyfiles": "^2.2.0",
24
+ "rimraf": "^3.0.2",
25
+ "typescript": "^3.9.5"
26
+ },
27
+ "dependencies": {
28
+ "@botfabrik/botfabrik-utils": "^3.2.15",
29
+ "@botfabrik/engine-domain": "^4.0.0-alpha.0",
30
+ "@google-cloud/speech": "^3.6.0",
31
+ "accept-language-parser": "^1.5.0",
32
+ "express": "^4.17.1",
33
+ "uuid": "^8.1.0"
34
+ },
35
+ "gitHead": "c7c5dd361f197112b9063604c59aca4ec9b8bc28"
36
+ }