@bridgething/client 0.11.0 → 0.12.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 +20 -10
- package/dist/settings.d.ts +42 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +151 -3
- package/dist/settings.js.map +1 -1
- package/package.json +17 -5
package/README.md
CHANGED
|
@@ -1,27 +1,37 @@
|
|
|
1
1
|
# @bridgething/client
|
|
2
2
|
|
|
3
|
-
The SDK a [bridgething](https://github.com/JoeyEamigh/bridgething) webapp uses
|
|
4
|
-
talk to the
|
|
5
|
-
|
|
3
|
+
The SDK a [bridgething](https://github.com/JoeyEamigh/bridgething) webapp uses
|
|
4
|
+
to talk to the daemon on a Spotify Car Thing.
|
|
5
|
+
|
|
6
|
+
```sh
|
|
7
|
+
bun add @bridgething/client
|
|
8
|
+
```
|
|
6
9
|
|
|
7
10
|
```ts
|
|
8
11
|
import { BridgethingClient } from '@bridgething/client';
|
|
9
12
|
|
|
10
|
-
const client = new BridgethingClient();
|
|
11
|
-
client.player.onSnapshot(
|
|
13
|
+
const client = new BridgethingClient();
|
|
14
|
+
client.player.onSnapshot(msg => render(msg.state));
|
|
12
15
|
client.player.skipNext();
|
|
13
16
|
```
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
The client connects on construction and reconnects on its own. Every method
|
|
19
|
+
has hover docs.
|
|
20
|
+
|
|
21
|
+
`@bridgething/client/settings` is the API for a webapp's settings page, which
|
|
22
|
+
runs in the companion app or the desktop app:
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
```ts
|
|
25
|
+
import { settings } from '@bridgething/client/settings';
|
|
26
|
+
|
|
27
|
+
await settings.config.set('city', 'Detroit');
|
|
28
|
+
```
|
|
19
29
|
|
|
20
|
-
Scaffold a
|
|
30
|
+
Scaffold a webapp with the client preinstalled:
|
|
21
31
|
|
|
22
32
|
```sh
|
|
23
33
|
bun create bridgething my-app
|
|
24
34
|
```
|
|
25
35
|
|
|
26
|
-
-
|
|
36
|
+
- Docs: <https://bridgething.com/docs>
|
|
27
37
|
- Source: <https://github.com/JoeyEamigh/bridgething>
|
package/dist/settings.d.ts
CHANGED
|
@@ -6,6 +6,35 @@ export type SettingsContext = {
|
|
|
6
6
|
version: string;
|
|
7
7
|
deviceId: string;
|
|
8
8
|
};
|
|
9
|
+
export type BodyKind = 'text' | 'base64';
|
|
10
|
+
export type WireBody = {
|
|
11
|
+
kind: BodyKind;
|
|
12
|
+
data: string;
|
|
13
|
+
};
|
|
14
|
+
export type WireHeader = [name: string, value: string];
|
|
15
|
+
export type FetchVerbRequest = {
|
|
16
|
+
url: string;
|
|
17
|
+
method?: string;
|
|
18
|
+
headers?: WireHeader[];
|
|
19
|
+
body?: WireBody;
|
|
20
|
+
timeoutMs?: number;
|
|
21
|
+
};
|
|
22
|
+
export type FetchVerbReply = {
|
|
23
|
+
status: number;
|
|
24
|
+
headers: WireHeader[];
|
|
25
|
+
body: WireBody;
|
|
26
|
+
};
|
|
27
|
+
export type AuthorizeVerbRequest = {
|
|
28
|
+
url: string;
|
|
29
|
+
};
|
|
30
|
+
export type AuthorizeVerbReply = {
|
|
31
|
+
url: string;
|
|
32
|
+
};
|
|
33
|
+
export type SettingsRequestInit = RequestInit & {
|
|
34
|
+
timeoutMs?: number;
|
|
35
|
+
};
|
|
36
|
+
export type FetchErrorKind = 'network' | 'timeout' | 'invalid_url';
|
|
37
|
+
export type AuthorizeErrorKind = 'cancelled' | 'busy' | 'unsupported';
|
|
9
38
|
export type KeyValue = {
|
|
10
39
|
key: string;
|
|
11
40
|
value: string | null;
|
|
@@ -19,6 +48,14 @@ declare global {
|
|
|
19
48
|
__bridgethingSettingsDeliver?: (json: string) => void;
|
|
20
49
|
}
|
|
21
50
|
}
|
|
51
|
+
export declare class SettingsFetchError extends Error {
|
|
52
|
+
readonly kind: FetchErrorKind;
|
|
53
|
+
constructor(kind: FetchErrorKind, message: string);
|
|
54
|
+
}
|
|
55
|
+
export declare class AuthorizeError extends Error {
|
|
56
|
+
readonly kind: AuthorizeErrorKind;
|
|
57
|
+
constructor(kind: AuthorizeErrorKind, message: string);
|
|
58
|
+
}
|
|
22
59
|
export declare const settings: {
|
|
23
60
|
context(): Promise<SettingsContext>;
|
|
24
61
|
config: {
|
|
@@ -36,6 +73,11 @@ export declare const settings: {
|
|
|
36
73
|
value: null;
|
|
37
74
|
}>;
|
|
38
75
|
};
|
|
76
|
+
fetch(input: RequestInfo | URL, init?: SettingsRequestInit): Promise<Response>;
|
|
77
|
+
installFetch(): () => void;
|
|
78
|
+
auth: {
|
|
79
|
+
authorize(url: string | URL): Promise<URL>;
|
|
80
|
+
};
|
|
39
81
|
onDocChanged(listener: DocChangedListener): () => void;
|
|
40
82
|
done(): void;
|
|
41
83
|
};
|
package/dist/settings.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE3E,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/settings.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
const CALL_TIMEOUT_MS = 15_000;
|
|
2
|
+
const AUTHORIZE_TIMEOUT_MS = 600_000;
|
|
3
|
+
const FETCH_TIMEOUT_SLACK_MS = 5_000;
|
|
4
|
+
const MAX_BODY_BYTES = 1024 * 1024;
|
|
5
|
+
const TEXTY = /json|text|xml|urlencoded/i;
|
|
6
|
+
const NULL_BODY_STATUS = new Set([101, 103, 204, 205, 304]);
|
|
2
7
|
const HOST_MISSING = 'not running inside a bridgething settings host (no companion webview, no host frame)';
|
|
3
8
|
let nextId = 1;
|
|
4
9
|
const pending = new Map();
|
|
@@ -50,13 +55,13 @@ if (typeof window !== 'undefined') {
|
|
|
50
55
|
deliver(event.data);
|
|
51
56
|
});
|
|
52
57
|
}
|
|
53
|
-
function call(verb, payload) {
|
|
58
|
+
function call(verb, payload, timeoutMs = CALL_TIMEOUT_MS) {
|
|
54
59
|
const id = nextId++;
|
|
55
60
|
return new Promise((resolve, reject) => {
|
|
56
61
|
const timer = setTimeout(() => {
|
|
57
62
|
if (pending.delete(id))
|
|
58
|
-
reject(new Error(`bridgething settings call '${verb}' timed out after ${
|
|
59
|
-
},
|
|
63
|
+
reject(new Error(`bridgething settings call '${verb}' timed out after ${timeoutMs}ms`));
|
|
64
|
+
}, timeoutMs);
|
|
60
65
|
pending.set(id, { resolve: resolve, reject, timer });
|
|
61
66
|
try {
|
|
62
67
|
if (!send(JSON.stringify({ id, verb, payload })))
|
|
@@ -69,6 +74,121 @@ function call(verb, payload) {
|
|
|
69
74
|
}
|
|
70
75
|
});
|
|
71
76
|
}
|
|
77
|
+
export class SettingsFetchError extends Error {
|
|
78
|
+
kind;
|
|
79
|
+
constructor(kind, message) {
|
|
80
|
+
super(message);
|
|
81
|
+
this.kind = kind;
|
|
82
|
+
this.name = 'SettingsFetchError';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export class AuthorizeError extends Error {
|
|
86
|
+
kind;
|
|
87
|
+
constructor(kind, message) {
|
|
88
|
+
super(message);
|
|
89
|
+
this.kind = kind;
|
|
90
|
+
this.name = 'AuthorizeError';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function reason(err) {
|
|
94
|
+
return err instanceof Error ? err.message : String(err);
|
|
95
|
+
}
|
|
96
|
+
function token(message) {
|
|
97
|
+
return message.split(':', 1)[0].trim();
|
|
98
|
+
}
|
|
99
|
+
function hostLacksVerb(message) {
|
|
100
|
+
return message === HOST_MISSING || message.startsWith('unknown settings bridge verb');
|
|
101
|
+
}
|
|
102
|
+
function fetchFailure(err) {
|
|
103
|
+
if (err instanceof SettingsFetchError)
|
|
104
|
+
return err;
|
|
105
|
+
const message = reason(err);
|
|
106
|
+
if (hostLacksVerb(message))
|
|
107
|
+
return err instanceof Error ? err : new Error(message);
|
|
108
|
+
const kind = token(message);
|
|
109
|
+
if (kind === 'network' || kind === 'timeout' || kind === 'invalid_url')
|
|
110
|
+
return new SettingsFetchError(kind, message);
|
|
111
|
+
if (message.includes('timed out'))
|
|
112
|
+
return new SettingsFetchError('timeout', message);
|
|
113
|
+
return new SettingsFetchError('network', message);
|
|
114
|
+
}
|
|
115
|
+
function authorizeFailure(err) {
|
|
116
|
+
if (err instanceof AuthorizeError)
|
|
117
|
+
return err;
|
|
118
|
+
const message = reason(err);
|
|
119
|
+
if (hostLacksVerb(message))
|
|
120
|
+
return new AuthorizeError('unsupported', message);
|
|
121
|
+
const kind = token(message);
|
|
122
|
+
if (kind === 'cancelled' || kind === 'busy' || kind === 'unsupported')
|
|
123
|
+
return new AuthorizeError(kind, message);
|
|
124
|
+
return err instanceof Error ? err : new Error(message);
|
|
125
|
+
}
|
|
126
|
+
function decodeUtf8(bytes) {
|
|
127
|
+
try {
|
|
128
|
+
return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function base64FromBytes(bytes) {
|
|
135
|
+
const chunk = 0x8000;
|
|
136
|
+
let binary = '';
|
|
137
|
+
for (let at = 0; at < bytes.length; at += chunk) {
|
|
138
|
+
binary += String.fromCharCode(...bytes.subarray(at, at + chunk));
|
|
139
|
+
}
|
|
140
|
+
return btoa(binary);
|
|
141
|
+
}
|
|
142
|
+
function bytesFromBase64(data) {
|
|
143
|
+
const binary = atob(data);
|
|
144
|
+
const bytes = new Uint8Array(new ArrayBuffer(binary.length));
|
|
145
|
+
for (let at = 0; at < binary.length; at += 1)
|
|
146
|
+
bytes[at] = binary.charCodeAt(at);
|
|
147
|
+
return bytes;
|
|
148
|
+
}
|
|
149
|
+
function encodeBody(bytes, contentType) {
|
|
150
|
+
const text = TEXTY.test(contentType ?? '') ? decodeUtf8(bytes) : null;
|
|
151
|
+
return text === null ? { kind: 'base64', data: base64FromBytes(bytes) } : { kind: 'text', data: text };
|
|
152
|
+
}
|
|
153
|
+
function toResponse(reply) {
|
|
154
|
+
const headers = new Headers(reply.headers);
|
|
155
|
+
const empty = reply.body.data.length === 0 || NULL_BODY_STATUS.has(reply.status);
|
|
156
|
+
const body = empty ? null : reply.body.kind === 'text' ? reply.body.data : bytesFromBase64(reply.body.data);
|
|
157
|
+
return new Response(body, { status: reply.status, headers });
|
|
158
|
+
}
|
|
159
|
+
function requestFailure(input, err) {
|
|
160
|
+
const target = typeof input === 'string' || input instanceof URL ? String(input) : input.url;
|
|
161
|
+
try {
|
|
162
|
+
new URL(target);
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return new SettingsFetchError('invalid_url', `${target}: ${reason(err)}`);
|
|
166
|
+
}
|
|
167
|
+
return err instanceof Error ? err : new Error(reason(err));
|
|
168
|
+
}
|
|
169
|
+
async function toVerbRequest(input, init) {
|
|
170
|
+
let request;
|
|
171
|
+
try {
|
|
172
|
+
request = new Request(input, init);
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
throw requestFailure(input, err);
|
|
176
|
+
}
|
|
177
|
+
const buffer = await request.arrayBuffer();
|
|
178
|
+
if (buffer.byteLength > MAX_BODY_BYTES) {
|
|
179
|
+
throw new SettingsFetchError('network', `settings fetch request body is ${buffer.byteLength} bytes, over the ${MAX_BODY_BYTES} byte cap`);
|
|
180
|
+
}
|
|
181
|
+
const verb = {
|
|
182
|
+
url: request.url,
|
|
183
|
+
method: request.method,
|
|
184
|
+
headers: [...request.headers].map(([name, value]) => [name, value]),
|
|
185
|
+
};
|
|
186
|
+
if (buffer.byteLength > 0)
|
|
187
|
+
verb.body = encodeBody(new Uint8Array(buffer), request.headers.get('content-type'));
|
|
188
|
+
if (init?.timeoutMs !== undefined)
|
|
189
|
+
verb.timeoutMs = init.timeoutMs;
|
|
190
|
+
return verb;
|
|
191
|
+
}
|
|
72
192
|
export const settings = {
|
|
73
193
|
context() {
|
|
74
194
|
return call('context');
|
|
@@ -101,6 +221,34 @@ export const settings = {
|
|
|
101
221
|
return call('doc.delete', { key });
|
|
102
222
|
},
|
|
103
223
|
},
|
|
224
|
+
async fetch(input, init) {
|
|
225
|
+
const verb = await toVerbRequest(input, init);
|
|
226
|
+
const budget = verb.timeoutMs === undefined ? CALL_TIMEOUT_MS : verb.timeoutMs + FETCH_TIMEOUT_SLACK_MS;
|
|
227
|
+
try {
|
|
228
|
+
return toResponse(await call('fetch', verb, Math.max(CALL_TIMEOUT_MS, budget)));
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
throw fetchFailure(err);
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
installFetch() {
|
|
235
|
+
const previous = globalThis.fetch;
|
|
236
|
+
globalThis.fetch = ((input, init) => settings.fetch(input, init));
|
|
237
|
+
return () => {
|
|
238
|
+
globalThis.fetch = previous;
|
|
239
|
+
};
|
|
240
|
+
},
|
|
241
|
+
auth: {
|
|
242
|
+
async authorize(url) {
|
|
243
|
+
try {
|
|
244
|
+
const reply = await call('auth.authorize', { url: String(url) }, AUTHORIZE_TIMEOUT_MS);
|
|
245
|
+
return new URL(reply.url);
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
throw authorizeFailure(err);
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
},
|
|
104
252
|
onDocChanged(listener) {
|
|
105
253
|
docListeners.add(listener);
|
|
106
254
|
return () => docListeners.delete(listener);
|
package/dist/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAIA,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,YAAY,GAAG,sFAAsF,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bridgething/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"description": "Typed client SDK a bridgething webapp uses to talk to the on-device daemon on a Spotify Car Thing.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Joey Eamigh <55670930+JoeyEamigh@users.noreply.github.com> (https://github.com/JoeyEamigh)",
|
|
@@ -13,7 +13,13 @@
|
|
|
13
13
|
"bugs": {
|
|
14
14
|
"url": "https://github.com/JoeyEamigh/bridgething/issues"
|
|
15
15
|
},
|
|
16
|
-
"keywords": [
|
|
16
|
+
"keywords": [
|
|
17
|
+
"bridgething",
|
|
18
|
+
"spotify",
|
|
19
|
+
"car-thing",
|
|
20
|
+
"superbird",
|
|
21
|
+
"sdk"
|
|
22
|
+
],
|
|
17
23
|
"publishConfig": {
|
|
18
24
|
"access": "public",
|
|
19
25
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -30,19 +36,25 @@
|
|
|
30
36
|
"default": "./dist/settings.js"
|
|
31
37
|
}
|
|
32
38
|
},
|
|
33
|
-
"files": [
|
|
39
|
+
"files": [
|
|
40
|
+
"dist"
|
|
41
|
+
],
|
|
34
42
|
"scripts": {
|
|
35
43
|
"prebuild": "rm -rf dist",
|
|
36
44
|
"build": "tsc -p tsconfig.build.json",
|
|
37
45
|
"dev": "tsc -p tsconfig.build.json --watch",
|
|
38
46
|
"typecheck": "tsc --noEmit",
|
|
39
|
-
"lint": "eslint ."
|
|
47
|
+
"lint": "eslint .",
|
|
48
|
+
"test": "bun test"
|
|
40
49
|
},
|
|
41
50
|
"dependencies": {
|
|
42
|
-
"@bridgething/lib": "0.
|
|
51
|
+
"@bridgething/lib": "0.12.1",
|
|
43
52
|
"@msgpack/msgpack": "^3.1.3"
|
|
44
53
|
},
|
|
45
54
|
"peerDependencies": {
|
|
46
55
|
"typescript": "^6.0.3"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@types/bun": "^1.4.0"
|
|
47
59
|
}
|
|
48
60
|
}
|