Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
7231c68
Make `useAuthorizationHeader` default on
t3chguy Sep 30, 2022
e36d41a
Consolidate API prefixes into enums with method
t3chguy Sep 30, 2022
2ff24af
Remove deprecated callbacks support
t3chguy Oct 3, 2022
f8a44b7
Migrate from `request` and `browser-request` to `fetch`
t3chguy Oct 4, 2022
91a8048
Merge branch 'develop' of github.com:matrix-org/matrix-js-sdk into t3…
t3chguy Oct 4, 2022
5389fef
Update matrix-mock-request
t3chguy Oct 4, 2022
74d89f1
Update matrix-mock-request
t3chguy Oct 4, 2022
028d29c
Iterate fetch support
t3chguy Oct 4, 2022
0e832e1
Fix cleanup
t3chguy Oct 4, 2022
835d794
Iterate
t3chguy Oct 4, 2022
abf8bf9
Merge branch 'develop' of github.com:matrix-org/matrix-js-sdk into t3…
t3chguy Oct 4, 2022
6f50723
Test
t3chguy Oct 4, 2022
69c3d04
Iterare
t3chguy Oct 4, 2022
924925c
Iterate
t3chguy Oct 4, 2022
65b6935
Revert tests tweak
t3chguy Oct 4, 2022
a8ecb36
Add test coverage
t3chguy Oct 4, 2022
6289875
Fix tests
t3chguy Oct 4, 2022
064469c
Add tests and fix `retryNetworkOperation`
t3chguy Oct 4, 2022
d2d2e05
Improve coverage
t3chguy Oct 4, 2022
271ea3c
Add more coverage
t3chguy Oct 4, 2022
c9e45c0
Add tests
t3chguy Oct 4, 2022
27ca479
Iterate
t3chguy Oct 4, 2022
d2fb428
Write moar tests
t3chguy Oct 4, 2022
fd72eda
Fix typing
t3chguy Oct 4, 2022
6781d53
Iterate tests
t3chguy Oct 5, 2022
c0bf68a
Merge branch 'develop' of github.com:matrix-org/matrix-js-sdk into t3…
t3chguy Oct 5, 2022
0f16233
Additional coverage
t3chguy Oct 5, 2022
0138730
Please hit 80%
t3chguy Oct 5, 2022
fc2c722
Additional coverage
t3chguy Oct 5, 2022
abc68e7
Remove browser-request some more
t3chguy Oct 5, 2022
ac43f33
Yet more tests
t3chguy Oct 5, 2022
82d60f1
Iterate
t3chguy Oct 5, 2022
50cb854
Stash
t3chguy Oct 5, 2022
494a0e5
Merge branch 'develop' of github.com:matrix-org/matrix-js-sdk into t3…
t3chguy Oct 6, 2022
ffd26bd
Write moar tests
t3chguy Oct 6, 2022
52345e2
Additional coverage
t3chguy Oct 6, 2022
511afee
Update README
t3chguy Oct 6, 2022
b57651d
Update types
t3chguy Oct 6, 2022
88bbeb2
Fix login method
t3chguy Oct 6, 2022
d8ce2d3
Iterate everything
t3chguy Oct 6, 2022
17fc2bd
Iterate uploadContent signature
t3chguy Oct 7, 2022
5ffb1f1
Merge branch 'develop' into t3chguy/fetch
t3chguy Oct 7, 2022
3ca3778
Increase test coverage
t3chguy Oct 10, 2022
f643965
Merge remote-tracking branch 'origin/t3chguy/fetch' into t3chguy/fetch
t3chguy Oct 10, 2022
9e6d2c3
Implementation of MSC3886 + ECDH secure channel
hughns Sep 20, 2022
074c8df
Use cross-fetch instead of relying on builtin
hughns Sep 20, 2022
76b6868
Use url-safe base64 for encoding keys
hughns Sep 21, 2022
ab72622
Do auto discovery of rendezvous server
hughns Oct 2, 2022
5609a2a
Use more friendly wrapper functions
hughns Oct 3, 2022
6f7f994
Fix bad merge
hughns Oct 3, 2022
f80cd2c
Updates for MSC3903
hughns Oct 4, 2022
15a377a
Fixes for TS strict mode
hughns Oct 4, 2022
6ebc6df
More TS strict fixes and dedupe
hughns Oct 4, 2022
1891b80
Add note about SAS decimal implementation
hughns Oct 4, 2022
3edc437
Add intent to rendezvous code
hughns Oct 5, 2022
1cb4a63
Parse intent from rendezvous code
hughns Oct 6, 2022
a40f882
Complete rebase to use fetch
hughns Oct 6, 2022
70eb991
Allow onlyData to be overridden per request
hughns Oct 6, 2022
688bca3
Remove excess logging
hughns Oct 6, 2022
025f1bc
Use fetch from the MatrixHttpApi
hughns Oct 6, 2022
fd86aa9
Lint fix
hughns Oct 6, 2022
5d2a1d4
Revert "Use fetch from the MatrixHttpApi"
hughns Oct 6, 2022
4f09b4c
Simpler implementation of ECDH handshake
hughns Oct 6, 2022
ab5d3c2
Add HomeserverLacksSupport cancellation reason
hughns Oct 6, 2022
6997ebd
Cleanup unused vars
hughns Oct 6, 2022
6967628
Deduplicate logging
hughns Oct 7, 2022
e8e5500
Actually use Curve25519 not Ed25519
hughns Oct 7, 2022
7328664
ECDH key from other side is only required if we initiated
hughns Oct 9, 2022
5526c16
Refactor X25519 implementation to be based on olm
hughns Oct 10, 2022
7cd1fce
Add close and refactor to match proposal
hughns Oct 11, 2022
3a82032
Simplify checksum logic
hughns Oct 11, 2022
1c99fbb
Tidy up polling
hughns Oct 12, 2022
cc848d0
Make fetch implementation pluggable
hughns Oct 12, 2022
0442bc9
Skeleton tests
hughns Oct 12, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,8 @@ In Node.js
----------

Ensure you have the latest LTS version of Node.js installed.

This SDK targets Node 12 for compatibility, which translates to ES6. If you're using
a bundler like webpack you'll likely have to transpile dependencies, including this
SDK, to match your target browsers.
This library relies on `fetch` which is available in Node from v18.0.0 - it should work fine also with polyfills.
If you wish to use a ponyfill or adapter of some sort then pass it as `fetchFn` to the MatrixClient constructor options.

Using `yarn` instead of `npm` is recommended. Please see the Yarn [install guide](https://classic.yarnpkg.com/en/docs/install)
if you do not have it already.
Expand Down
12 changes: 7 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"version": "20.0.2",
"description": "Matrix Client-Server SDK for Javascript",
"engines": {
"node": ">=12.9.0"
"node": ">=16.0.0"
},
"scripts": {
"prepublishOnly": "yarn build",
Expand Down Expand Up @@ -55,14 +55,12 @@
"dependencies": {
"@babel/runtime": "^7.12.5",
"another-json": "^0.2.0",
"browser-request": "^0.3.3",
"bs58": "^5.0.0",
"content-type": "^1.0.4",
"loglevel": "^1.7.1",
"matrix-events-sdk": "^0.0.1-beta.7",
"p-retry": "4",
"qs": "^6.9.6",
"request": "^2.88.2",
"unhomoglyph": "^1.0.6"
},
"devDependencies": {
Expand All @@ -81,9 +79,9 @@
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.12.tgz",
"@types/bs58": "^4.0.1",
"@types/content-type": "^1.1.5",
"@types/domexception": "^4.0.0",
"@types/jest": "^29.0.0",
"@types/node": "16",
"@types/request": "^2.48.5",
"@typescript-eslint/eslint-plugin": "^5.6.0",
"@typescript-eslint/parser": "^5.6.0",
"allchange": "^1.0.6",
Expand All @@ -92,6 +90,7 @@
"better-docs": "^2.4.0-beta.9",
"browserify": "^17.0.0",
"docdash": "^1.2.0",
"domexception": "^4.0.0",
"eslint": "8.24.0",
"eslint-config-google": "^0.14.0",
"eslint-import-resolver-typescript": "^3.5.1",
Expand All @@ -104,7 +103,7 @@
"jest-mock": "^27.5.1",
"jest-sonar-reporter": "^2.0.0",
"jsdoc": "^3.6.6",
"matrix-mock-request": "^2.1.2",
"matrix-mock-request": "^2.5.0",
"rimraf": "^3.0.2",
"terser": "^5.5.1",
"tsify": "^5.0.2",
Expand All @@ -115,6 +114,9 @@
"testMatch": [
"<rootDir>/spec/**/*.spec.{js,ts}"
],
"setupFilesAfterEnv": [
"<rootDir>/spec/setupTests.ts"
],
"collectCoverageFrom": [
"<rootDir>/src/**/*.{js,ts}"
],
Expand Down
5 changes: 2 additions & 3 deletions spec/TestClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ import { MockStorageApi } from "./MockStorageApi";
import { encodeUri } from "../src/utils";
import { IDeviceKeys, IOneTimeKey } from "../src/crypto/dehydration";
import { IKeyBackupSession } from "../src/crypto/keybackup";
import { IHttpOpts } from "../src/http-api";
import { IKeysUploadResponse, IUploadKeysRequest } from '../src/client';

/**
Expand All @@ -56,11 +55,11 @@ export class TestClient {
this.httpBackend = new MockHttpBackend();

const fullOptions: ICreateClientOpts = {
baseUrl: "http://" + userId + ".test.server",
baseUrl: "http://" + userId?.slice(1).replace(":", ".") + ".test.server",
userId: userId,
accessToken: accessToken,
deviceId: deviceId,
request: this.httpBackend.requestFn as IHttpOpts["request"],
fetchFn: this.httpBackend.fetchFn as typeof global.fetch,
...options,
};
if (!fullOptions.cryptoStore) {
Expand Down
75 changes: 50 additions & 25 deletions spec/browserify/sync-browserify.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,46 +14,66 @@ See the License for the specific language governing permissions and
limitations under the License.
*/

// load XmlHttpRequest mock
import HttpBackend from "matrix-mock-request";

import "./setupTests";
import "../../dist/browser-matrix"; // uses browser-matrix instead of the src
import * as utils from "../test-utils/test-utils";
import { TestClient } from "../TestClient";
import type { MatrixClient, ClientEvent } from "../../src";

const USER_ID = "@user:test.server";
const DEVICE_ID = "device_id";
const ACCESS_TOKEN = "access_token";
const ROOM_ID = "!room_id:server.test";

declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace NodeJS {
interface Global {
matrixcs: {
MatrixClient: typeof MatrixClient;
ClientEvent: typeof ClientEvent;
};
}
}
}

describe("Browserify Test", function() {
let client;
let httpBackend;
let client: MatrixClient;
let httpBackend: HttpBackend;

beforeEach(() => {
const testClient = new TestClient(USER_ID, DEVICE_ID, ACCESS_TOKEN);

client = testClient.client;
httpBackend = testClient.httpBackend;
httpBackend = new HttpBackend();
client = new global.matrixcs.MatrixClient({
baseUrl: "http://test.server",
userId: USER_ID,
accessToken: ACCESS_TOKEN,
deviceId: DEVICE_ID,
fetchFn: httpBackend.fetchFn as typeof global.fetch,
});

httpBackend.when("GET", "/versions").respond(200, {});
httpBackend.when("GET", "/pushrules").respond(200, {});
httpBackend.when("POST", "/filter").respond(200, { filter_id: "fid" });

client.startClient();
});

afterEach(async () => {
client.stopClient();
httpBackend.stop();
client.http.abort();
httpBackend.verifyNoOutstandingRequests();
httpBackend.verifyNoOutstandingExpectation();
await httpBackend.stop();
});

it("Sync", function() {
const event = utils.mkMembership({
room: ROOM_ID,
mship: "join",
user: "@other_user:server.test",
name: "Displayname",
});
it("Sync", async () => {
const event = {
type: "m.room.member",
room_id: ROOM_ID,
content: {
membership: "join",
name: "Displayname",
},
event_id: "$foobar",
};

const syncData = {
next_batch: "batch1",
Expand All @@ -71,11 +91,16 @@ describe("Browserify Test", function() {
};

httpBackend.when("GET", "/sync").respond(200, syncData);
return Promise.race([
httpBackend.flushAllExpected(),
new Promise((_, reject) => {
client.once("sync.unexpectedError", reject);
}),
]);
httpBackend.when("GET", "/sync").respond(200, syncData);

const syncPromise = new Promise(r => client.once(global.matrixcs.ClientEvent.Sync, r));
const unexpectedErrorFn = jest.fn();
client.once(global.matrixcs.ClientEvent.SyncUnexpectedError, unexpectedErrorFn);

client.startClient();

await httpBackend.flushAllExpected();
await syncPromise;
expect(unexpectedErrorFn).not.toHaveBeenCalled();
}, 20000); // additional timeout as this test can take quite a while
});
Loading