Skip to content

Commit 1e4e58b

Browse files
refactor(directline): update rxjs to v6, use rxjs pipeable operators, update webpack to v4
chore(npm): update dependencies, add tslint fix(directline): add missing commits post rebase docs(changelog): add message to change log, bump npm version fix(directline.interface): fix tslint errors fix(directline): add new changes from master refactor(app): remove dist directory chore(npm): update dependencies refactor(directline): remove unused imports chore(npm): update dependencies fix(directline): add new changes from master fix(changelog): remove duplicate entries fix(directline): add new changes from master test(directline): update failing tests to use rxjs v6 chore(npm): update dependencies fix(directline): remove unused files chore(npm): update dependencies fix(directline): add new changes from master chore(npm): update dependencies refactor(directline): update deprecated rxjs functions with new equivalent, fix failing tests fix(readme): correct typo fix(.gitignore): add missing newline at EOF fix(directline-mock): correct function, variables order fix(directline-streaming): import explicit named import from bfse refactor(directline): disable directline streaming export until Node.js packages are removed from botframework-streaming package chore(npm): update dependencies fix(webpack): replace deprecated webpack Visualizer plugin with BundleAnalyzerPlugin docs(directline): update streaming package comment fix(package): correct version, name chore(npm): update dependencies fix(tests): add directline streaming package back to fix failing tests chore(jsdom): update package feat(Activity): add adaptive card InvokeActivity type refactor(directline): add new changes from master
1 parent ef94e99 commit 1e4e58b

26 files changed

Lines changed: 12670 additions & 8511 deletions

.babelrc.js

Lines changed: 0 additions & 40 deletions
This file was deleted.

.github/CODEOWNERS

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Lines starting with '#' are comments.
2+
# Each line is a file pattern followed by one or more owners.
3+
4+
# More details are here: https://help.github.com/articles/about-codeowners/
5+
6+
# The '*' pattern is global owners.
7+
8+
# Order is important. The last matching pattern has the most precedence.
9+
# The folders are ordered as follows:
10+
11+
# In each subsection folders are ordered first by depth, then alphabetically.
12+
# This should make it easy to add new rules without breaking existing ones.
13+
14+
# Global rule:
15+
* @microsoft/botframework-sdk

CHANGELOG.md

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,59 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
1616

1717
## [Unreleased]
1818

19+
- Update DirectLine to rxjs v6 pipeable operators, PR [#102](https://github.com/microsoft/BotFramework-DirectLineJS/pull/102/files)
20+
## [0.15.1] - 2022-02-09
21+
### Changed
22+
23+
- Bumped dependencies, by [@compulim](https://github.com/compulim), in PR [#351](https://github.com/microsoft/BotFramework-DirectLineJS/pull/351) and PR [#366](https://github.com/microsoft/BotFramework-DirectLineJS/pull/366)
24+
- Production dependencies
25+
- [`cross-fetch@3.1.5`](https://npmjs.com/package/cross-fetch)
26+
- Development dependencies
27+
- [`node-fetch@2.6.7`](https://npmjs.com/package/node-fetch)
28+
29+
## [0.15.0] - 2021-07-29
30+
31+
### Changed
32+
33+
- Bumped dependencies, by [@compulim](https://github.com/compulim), in PR [#351](https://github.com/microsoft/BotFramework-DirectLineJS/pull/351)
34+
- Production dependencies
35+
- [`@babel/runtime@7.14.8`](https://npmjs.com/package/@babel/runtime)
36+
- [`botframework-streaming@4.14.1`](https://npmjs.com/package/botframework-streaming)
37+
- [`buffer@6.0.3`](https://npmjs.com/package/buffer)
38+
- [`core-js@3.15.2`](https://npmjs.com/package/core-js)
39+
- [`cross-fetch@3.1.4`](https://npmjs.com/package/cross-fetch)
40+
- [`rxjs@5.5.12`](https://npmjs.com/package/rxjs)
41+
- [`url-search-params-polyfill@8.1.1`](https://npmjs.com/package/url-search-params-polyfill)
42+
- Development dependencies
43+
- [`@babel/cli@7.14.8`](https://npmjs.com/package/@babel/cli)
44+
- [`@babel/core@7.14.8`](https://npmjs.com/package/@babel/core)
45+
- [`@babel/plugin-transform-runtime@7.14.5`](https://npmjs.com/package/@babel/plugin-transform-runtime)
46+
- [`@babel/preset-env@7.14.8`](https://npmjs.com/package/@babel/preset-env)
47+
- [`@babel/preset-typescript@7.14.5`](https://npmjs.com/package/@babel/preset-typescript)
48+
- [`@types/jest@26.0.24`](https://npmjs.com/package/@types/jest)
49+
- [`@types/jsonwebtoken@8.5.4`](https://npmjs.com/package/@types/jsonwebtoken)
50+
- [`@types/node@16.4.0`](https://npmjs.com/package/@types/node)
51+
- [`babel-loader@8.2.2`](https://npmjs.com/package/babel-loader)
52+
- [`babel-jest@27.0.6`](https://npmjs.com/package/babel-jest)
53+
- [`babel-plugin-istanbul@6.0.0`](https://npmjs.com/package/babel-plugin-istanbul)
54+
- [`concurrently@6.2.0`](https://npmjs.com/package/concurrently)
55+
- [`dotenv@10.0.0`](https://npmjs.com/package/dotenv)
56+
- [`event-target-shim@6.0.2`](https://npmjs.com/package/event-target-shim)
57+
- [`get-port@5.1.1`](https://npmjs.com/package/get-port)
58+
- [`global-agent@2.2.0`](https://npmjs.com/package/global-agent)
59+
- [`jest@27.0.6`](https://npmjs.com/package/jest)
60+
- [`jest-environment-jsdom@27.0.6`](https://npmjs.com/package/jest-environment-jsdom)
61+
- [`jsdom@16.6.0`](https://npmjs.com/package/jsdom)
62+
- [`nock@13.1.1`](https://npmjs.com/package/nock)
63+
- [`node-fetch@2.6.1`](https://npmjs.com/package/node-fetch)
64+
- [`restify@8.5.1`](https://npmjs.com/package/restify)
65+
- [`rimraf@3.0.2`](https://npmjs.com/package/rimraf)
66+
- [`simple-update-in@2.2.0`](https://npmjs.com/package/simple-update-in)
67+
- [`typescript@4.3.5`](https://npmjs.com/package/typescript)
68+
- [`webpack@5.45.1`](https://npmjs.com/package/webpack)
69+
- [`webpack-cli@4.7.2`](https://npmjs.com/package/webpack-cli)
70+
- [`webpack-stats-plugin@1.0.3`](https://npmjs.com/package/webpack-stats-plugin)
71+
1972
## [0.14.1] - 2021-02-10
2073

2174
### Changed
@@ -180,4 +233,4 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
180233
### Added
181234
- OAuthCard and `getSessionId` in PR #67
182235
- Add OAuthCard ([`c7b8af7`](https://github.com/microsoft/BotFramework-DirectLineJS/commit/c7b8af7be35685c220f2d777daa96f52d757f53f))
183-
- Add `getSessionId` ([`9c87aa3`](https://github.com/microsoft/BotFramework-DirectLineJS/commit/9c87aa3f54947ea2fee836b41eec8ec45297a57a), [`9a2b2d8`](https://github.com/microsoft/BotFramework-DirectLineJS/commit/9a2b2d889af48e558f563758aa01d498b2b2cf49), [`df84d00`](df84d0054f784ae5eb36784ef07a2aa38ca6c95b), [`92cc331`](92cc33138dfbdd533b4d14f6be275d1c86ef8db4))
236+
- Add `getSessionId` ([`9c87aa3`](https://github.com/microsoft/BotFramework-DirectLineJS/commit/9c87aa3f54947ea2fee836b41eec8ec45297a57a), [`9a2b2d8`](https://github.com/microsoft/BotFramework-DirectLineJS/commit/9a2b2d889af48e558f563758aa01d498b2b2cf49), [`df84d00`](df84d0054f784ae5eb36784ef07a2aa38ca6c95b), [`92cc331`](92cc33138dfbdd533b4d14f6be275d1c86ef8db4))

__tests__/happy.uploadAttachmentStreams.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import postActivity from './setup/postActivity';
99
import waitForBotToEcho from './setup/waitForBotToEcho';
1010
import waitForConnected from './setup/waitForConnected';
1111

12+
jest.setTimeout(10000);
13+
1214
describe('Happy path', () => {
1315
let unsubscribes;
1416

@@ -34,10 +36,10 @@ describe('Happy path', () => {
3436
// DirectLine.postActivityWithAttachments support "contentUrl" only but not "content"
3537
attachments: [{
3638
contentType: 'image/jpg',
37-
contentUrl: 'http://dljstestbot.azurewebsites.net/177KB.jpg'
39+
contentUrl: 'https://dljstestbot.azurewebsites.net/177KB.jpg'
3840
}, {
3941
contentType: 'image/jpg',
40-
contentUrl: 'http://dljstestbot.azurewebsites.net/100KB.jpg'
42+
contentUrl: 'https://dljstestbot.azurewebsites.net/100KB.jpg'
4143
}],
4244
text: 'Hello, World!',
4345
type: 'message',
@@ -74,4 +76,4 @@ describe('Happy path', () => {
7476
]);
7577
});
7678
});
77-
});
79+
});

__tests__/happy.uploadAttachments.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import postActivity from './setup/postActivity';
99
import waitForBotToEcho from './setup/waitForBotToEcho';
1010
import waitForConnected from './setup/waitForConnected';
1111

12+
jest.setTimeout(10000);
13+
1214
describe('Happy path', () => {
1315
let unsubscribes;
1416

@@ -53,11 +55,11 @@ describe('Happy path', () => {
5355
// DirectLine.postActivityWithAttachments support "contentUrl" only but not "content"
5456
attachments: [{
5557
contentType: 'image/jpg',
56-
contentUrl: 'http://dljstestbot.azurewebsites.net/177KB.jpg',
58+
contentUrl: 'https://dljstestbot.azurewebsites.net/177KB.jpg',
5759
thumbnailUrl: 'data:image/png;base64,===177KB.jpg'
5860
}, {
5961
contentType: 'image/png',
60-
contentUrl: 'http://dljstestbot.azurewebsites.net/100KB.jpg',
62+
contentUrl: 'https://dljstestbot.azurewebsites.net/100KB.jpg',
6163
thumbnailUrl: 'data:image/png;base64,===100KB.jpb'
6264
}],
6365
text: 'Hello, World!',
@@ -108,4 +110,4 @@ describe('Happy path', () => {
108110
]);
109111
});
110112
});
111-
});
113+
});

__tests__/setup.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,7 @@ test('createServer setup correctly', async () => {
2121
dispose();
2222
}
2323
});
24+
25+
test('test environment has Web Cryptography API', () => {
26+
expect(typeof global.crypto.getRandomValues).toBe('function');
27+
});

__tests__/setup/createDirectLineForwarder.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ import { createProxyServer } from 'http-proxy';
22
import { createServer } from 'http';
33
import { promisify } from 'util';
44

5-
export default async function createDirectLineForwarder(port, handler, target = 'https://directline.botframework.com/') {
5+
export default async function createDirectLineForwarder(
6+
port,
7+
handler,
8+
target = 'https://directline.botframework.com/'
9+
) {
610
// We need a reverse proxy (a.k.a. forwarder) to control the network traffic.
711
// This is because we need to modify the HTTP header by changing its host header (directline.botframework.com do not like "Host: localhost").
812

@@ -12,14 +16,20 @@ export default async function createDirectLineForwarder(port, handler, target =
1216
target
1317
});
1418

19+
proxy.on('proxyReq', (proxyRes, req, res, options) => {
20+
// JSDOM requires all HTTP response, including those already pre-flighted, to have "Access-Control-Allow-Origin".
21+
// https://github.com/jsdom/jsdom/issues/2024
22+
res.setHeader('Access-Control-Allow-Origin', req.headers.origin || '*');
23+
});
24+
1525
const proxyServer = createServer((req, res) => {
1626
handler(req, res, () => proxy.web(req, res));
1727
});
1828

1929
await promisify(proxyServer.listen.bind(proxyServer))(port);
2030

2131
return {
22-
domain: `http://localhost:${ port }/v3/directline`,
32+
domain: `http://localhost:${port}/v3/directline`,
2333
unsubscribe: promisify(proxyServer.close.bind(proxyServer))
2434
};
25-
}
35+
}

__tests__/setup/createServer.ts

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@ export default async function (options: CreateServerOptions): Promise<CreateServ
4141
deferred: createDeferred()
4242
}));
4343
} else {
44-
return [{
45-
...unorderedPlaybacks,
46-
deferred: createDeferred()
47-
}];
44+
return [
45+
{
46+
...unorderedPlaybacks,
47+
deferred: createDeferred()
48+
}
49+
];
4850
}
4951
});
5052

@@ -58,11 +60,7 @@ export default async function (options: CreateServerOptions): Promise<CreateServ
5860
const unorderedPlaybacks = Array.isArray(firstPlayback) ? firstPlayback : [firstPlayback];
5961
let handled;
6062

61-
unorderedPlaybacks.forEach(({
62-
deferred,
63-
req: preq = {},
64-
res: pres = {}
65-
}, index) => {
63+
unorderedPlaybacks.forEach(({ deferred, req: preq = {}, res: pres = {} }, index) => {
6664
if (req.url === (preq.url || '/')) {
6765
if (req.method === 'OPTIONS') {
6866
res.send(200, '', {
@@ -80,14 +78,13 @@ export default async function (options: CreateServerOptions): Promise<CreateServ
8078
headers['Content-Type'] = 'text/plain';
8179
}
8280

83-
res.send(
84-
pres.code || 200,
85-
pres.body,
86-
{
87-
...headers,
88-
...pres.headers
89-
}
90-
);
81+
res.send(pres.code || 200, pres.body, {
82+
// JSDOM requires all HTTP response, including those already pre-flighted, to have "Access-Control-Allow-Origin".
83+
// https://github.com/jsdom/jsdom/issues/2024
84+
'Access-Control-Allow-Origin': req.header('Origin') || '*',
85+
...headers,
86+
...pres.headers
87+
});
9188

9289
handled = true;
9390
deferred.resolve();
@@ -114,12 +111,12 @@ export default async function (options: CreateServerOptions): Promise<CreateServ
114111
return new Promise(resolve => server.close(resolve));
115112
},
116113
port,
117-
promises: options.playbacks.map((unorderedPlayback: (Playback | Playback[]), index) => {
114+
promises: options.playbacks.map((unorderedPlayback: Playback | Playback[], index) => {
118115
if (Array.isArray(unorderedPlayback)) {
119116
return (orderedPlaybacks[index] as PlaybackWithDeferred[]).map(({ deferred: { promise } }) => promise);
120117
} else {
121-
return (orderedPlaybacks[index][0]).deferred.promise;
118+
return orderedPlaybacks[index][0].deferred.promise;
122119
}
123120
})
124121
};
125-
}
122+
}

__tests__/setup/jsdomEnvironmentWithProxy.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ require('global-agent/bootstrap');
22

33
// To use proxy, SET GLOBAL_AGENT_HTTP_PROXY=http://localhost:8888
44

5-
const JSDOMEnvironment = require('jest-environment-jsdom-fourteen');
5+
const JSDOMEnvironment = require('jest-environment-jsdom');
66

77
class JSDOMEnvironmentWithProxy extends JSDOMEnvironment {
88
setup() {
@@ -14,10 +14,10 @@ class JSDOMEnvironmentWithProxy extends JSDOMEnvironment {
1414
// This is because the ResourceLoader instance constructor is of "slightly" different type when on runtime (probably Jest magic).
1515
// Thus, when we set it thru testEnvironmentOptions.resources, it will fail on "--watch" but succeed when running without watch.
1616
this.global._resourceLoader = resources;
17-
18-
return super.setup();
1917
}
18+
19+
return super.setup();
2020
}
2121
}
2222

23-
module.exports = JSDOMEnvironmentWithProxy;
23+
module.exports = JSDOMEnvironmentWithProxy;

__tests__/setup/setupCrypto.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const crypto = require('crypto');
2+
3+
global.crypto = {
4+
// uuid.v4() required Web Cryptography.
5+
// https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues
6+
getRandomValues(array) {
7+
if (
8+
!(
9+
array instanceof Int8Array ||
10+
array instanceof Uint8Array ||
11+
array instanceof Int16Array ||
12+
array instanceof Uint16Array ||
13+
array instanceof In32Array ||
14+
array instanceof Uint32Array ||
15+
array instanceof Uint8ClampedArray
16+
)
17+
) {
18+
throw new Error('TypeMismatchError');
19+
} else if (array.length > 65536) {
20+
throw new Error('QuotaExceededError');
21+
}
22+
23+
return crypto.randomFillSync(array);
24+
}
25+
};

0 commit comments

Comments
 (0)