diff --git a/sdks/typescript/packages/sdk/package.json b/sdks/typescript/packages/sdk/package.json index 6b675b00371..5219b97bfca 100644 --- a/sdks/typescript/packages/sdk/package.json +++ b/sdks/typescript/packages/sdk/package.json @@ -47,6 +47,7 @@ "undici": "^6.19.2" }, "dependencies": { + "@zxing/text-encoding": "^0.9.0", "base64-js": "^1.5.1" } } diff --git a/sdks/typescript/packages/sdk/src/binary_reader.ts b/sdks/typescript/packages/sdk/src/binary_reader.ts index f40f4101bca..79ecd3026ee 100644 --- a/sdks/typescript/packages/sdk/src/binary_reader.ts +++ b/sdks/typescript/packages/sdk/src/binary_reader.ts @@ -1,3 +1,5 @@ +import { TextDecoder } from '@zxing/text-encoding'; + export default class BinaryReader { #buffer: DataView; #offset: number = 0; diff --git a/sdks/typescript/packages/sdk/src/binary_writer.ts b/sdks/typescript/packages/sdk/src/binary_writer.ts index 8a55a3ffd44..8c005b64ab5 100644 --- a/sdks/typescript/packages/sdk/src/binary_writer.ts +++ b/sdks/typescript/packages/sdk/src/binary_writer.ts @@ -1,4 +1,5 @@ import { fromByteArray } from 'base64-js'; +import { TextEncoder } from '@zxing/text-encoding'; export default class BinaryWriter { #buffer: Uint8Array; diff --git a/sdks/typescript/packages/sdk/src/db_connection_impl.ts b/sdks/typescript/packages/sdk/src/db_connection_impl.ts index d4ef11f66c0..24075e0ed90 100644 --- a/sdks/typescript/packages/sdk/src/db_connection_impl.ts +++ b/sdks/typescript/packages/sdk/src/db_connection_impl.ts @@ -202,7 +202,10 @@ export class DbConnectionImpl< }: DbConnectionConfig) { stdbLogger('info', 'Connecting to SpacetimeDB WS...'); - let url = new URL(uri); + // We use .toString() here because some versions of React Native contain a bug where the URL constructor + // incorrectly treats a URL instance as a plain string. + // This results in an attempt to call .endsWith() on it, leading to an error. + let url = new URL(uri.toString()); if (!/^wss?:/.test(uri.protocol)) { url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'; } diff --git a/sdks/typescript/pnpm-lock.yaml b/sdks/typescript/pnpm-lock.yaml index fdf976654bf..3b8919b815a 100644 --- a/sdks/typescript/pnpm-lock.yaml +++ b/sdks/typescript/pnpm-lock.yaml @@ -170,6 +170,9 @@ importers: packages/sdk: dependencies: + '@zxing/text-encoding': + specifier: ^0.9.0 + version: 0.9.0 base64-js: specifier: ^1.5.1 version: 1.5.1 @@ -1316,6 +1319,9 @@ packages: '@vitest/utils@2.1.2': resolution: {integrity: sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==} + '@zxing/text-encoding@0.9.0': + resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3982,6 +3988,8 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 + '@zxing/text-encoding@0.9.0': {} + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0