@bridgething/client 0.12.0 → 0.14.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.
@@ -0,0 +1,259 @@
1
+ import type { ConfigEntry, ConfigField, DocEntry } from '@bridgething/lib';
2
+ import type { WebappBlobEntry } from '@bridgething/lib/gateway';
3
+ import type { Theme } from './theme.js';
4
+ export type { ConfigEntry, ConfigField, DocEntry } from '@bridgething/lib';
5
+ export type { WebappBlobEntry } from '@bridgething/lib/gateway';
6
+ export type { Theme, ThemeColor, ThemeFont, ThemeScheme, ThemeText } from './theme.js';
7
+ export type SettingsContext = {
8
+ webappId: string;
9
+ name: string;
10
+ version: string;
11
+ deviceId: string;
12
+ theme?: Theme;
13
+ };
14
+ export type BodyKind = 'text' | 'base64';
15
+ export type WireBody = {
16
+ kind: BodyKind;
17
+ data: string;
18
+ };
19
+ export type WireHeader = [name: string, value: string];
20
+ export type FetchVerbRequest = {
21
+ url: string;
22
+ method?: string;
23
+ headers?: WireHeader[];
24
+ body?: WireBody;
25
+ timeoutMs?: number;
26
+ };
27
+ export type FetchVerbReply = {
28
+ status: number;
29
+ headers: WireHeader[];
30
+ body: WireBody;
31
+ };
32
+ export type AuthorizeVerbRequest = {
33
+ url: string;
34
+ };
35
+ export type AuthorizeVerbReply = {
36
+ url: string;
37
+ };
38
+ export type KeyRequest = {
39
+ key: string;
40
+ };
41
+ export type KeyValueRequest = {
42
+ key: string;
43
+ value: string;
44
+ };
45
+ export type KeyValue = {
46
+ key: string;
47
+ value: string | null;
48
+ };
49
+ export type PickKind = 'image' | 'video' | 'any';
50
+ export type PickVerbRequest = {
51
+ kind: PickKind;
52
+ cover?: [width: number, height: number];
53
+ };
54
+ export type PickedMedia = {
55
+ handle: string;
56
+ mime: string;
57
+ size: number;
58
+ width?: number;
59
+ height?: number;
60
+ durationMs?: number;
61
+ preview?: string;
62
+ };
63
+ export type BlobCreateRequest = {
64
+ mime: string;
65
+ };
66
+ export type BlobHandleReply = {
67
+ handle: string;
68
+ };
69
+ export type BlobAppendRequest = {
70
+ handle: string;
71
+ data: string;
72
+ };
73
+ export type BlobAppendReply = {
74
+ handle: string;
75
+ size: number;
76
+ };
77
+ export type BlobPutRequest = {
78
+ key: string;
79
+ handle: string;
80
+ };
81
+ export type ByteProgress = {
82
+ sent: number;
83
+ total: number;
84
+ };
85
+ export type SettingsVerbs = {
86
+ context: {
87
+ request: void;
88
+ reply: SettingsContext;
89
+ };
90
+ 'config.fields': {
91
+ request: void;
92
+ reply: ConfigField[];
93
+ };
94
+ 'config.list': {
95
+ request: void;
96
+ reply: ConfigEntry[];
97
+ };
98
+ 'config.set': {
99
+ request: KeyValueRequest;
100
+ reply: KeyValue;
101
+ };
102
+ 'config.delete': {
103
+ request: KeyRequest;
104
+ reply: KeyValue;
105
+ };
106
+ 'doc.get': {
107
+ request: KeyRequest;
108
+ reply: KeyValue;
109
+ };
110
+ 'doc.list': {
111
+ request: void;
112
+ reply: DocEntry[];
113
+ };
114
+ 'doc.set': {
115
+ request: KeyValueRequest;
116
+ reply: KeyValue;
117
+ };
118
+ 'doc.delete': {
119
+ request: KeyRequest;
120
+ reply: {
121
+ key: string;
122
+ value: null;
123
+ };
124
+ };
125
+ fetch: {
126
+ request: FetchVerbRequest;
127
+ reply: FetchVerbReply;
128
+ };
129
+ 'auth.authorize': {
130
+ request: AuthorizeVerbRequest;
131
+ reply: AuthorizeVerbReply;
132
+ };
133
+ pick: {
134
+ request: PickVerbRequest;
135
+ reply: PickedMedia | null;
136
+ };
137
+ 'blob.create': {
138
+ request: BlobCreateRequest;
139
+ reply: BlobHandleReply;
140
+ };
141
+ 'blob.append': {
142
+ request: BlobAppendRequest;
143
+ reply: BlobAppendReply;
144
+ };
145
+ 'blob.put': {
146
+ request: BlobPutRequest;
147
+ reply: WebappBlobEntry;
148
+ progress: ByteProgress;
149
+ };
150
+ 'blob.delete': {
151
+ request: KeyRequest;
152
+ reply: {
153
+ key: string;
154
+ };
155
+ };
156
+ 'blob.list': {
157
+ request: void;
158
+ reply: WebappBlobEntry[];
159
+ };
160
+ };
161
+ export type SettingsVerb = keyof SettingsVerbs;
162
+ export type SettingsPayload<V extends SettingsVerb> = SettingsVerbs[V]['request'];
163
+ export type SettingsResult<V extends SettingsVerb> = SettingsVerbs[V]['reply'];
164
+ export type SettingsProgress<V extends SettingsVerb> = SettingsVerbs[V] extends {
165
+ progress: infer P;
166
+ } ? P : never;
167
+ export type SettingsRequest = {
168
+ [V in SettingsVerb]: {
169
+ id: number;
170
+ verb: V;
171
+ payload?: SettingsPayload<V>;
172
+ epoch?: number;
173
+ };
174
+ }[SettingsVerb] | {
175
+ id: number;
176
+ verb: 'done';
177
+ epoch?: number;
178
+ } | {
179
+ id: number;
180
+ verb: 'release';
181
+ epoch: number;
182
+ } | {
183
+ id: number;
184
+ verb: 'resize';
185
+ payload: {
186
+ height: number;
187
+ };
188
+ };
189
+ export type SettingsReply = {
190
+ id: number;
191
+ ok: true;
192
+ value: unknown;
193
+ epoch?: number;
194
+ } | {
195
+ id: number;
196
+ ok: false;
197
+ error: string;
198
+ };
199
+ export type SettingsNotice = {
200
+ event: 'docChanged';
201
+ key: string;
202
+ value: string | null;
203
+ } | {
204
+ event: 'themeChanged';
205
+ theme: Theme;
206
+ } | {
207
+ event: 'refresh';
208
+ context: SettingsContext;
209
+ };
210
+ export type SettingsEvent = SettingsNotice | {
211
+ event: 'contextChanged';
212
+ context: SettingsContext;
213
+ epoch: number;
214
+ } | ({
215
+ event: 'progress';
216
+ id: number;
217
+ } & ByteProgress);
218
+ export type SettingsMessage = SettingsReply | SettingsEvent;
219
+ export type SettingsHost = {
220
+ [V in SettingsVerb]: (payload: SettingsPayload<V>, report: (progress: SettingsProgress<V>) => void) => Promise<SettingsResult<V>>;
221
+ } & {
222
+ done(): void;
223
+ };
224
+ export type SettingsSessionOptions<T> = {
225
+ target: T | null;
226
+ bind: (target: T) => SettingsHost;
227
+ deliver: (message: SettingsMessage) => void;
228
+ explain?: (err: unknown) => string;
229
+ resize?: (height: number) => void;
230
+ };
231
+ export type SettingsSession<T> = {
232
+ readonly target: T | null;
233
+ readonly closed: boolean;
234
+ receive(raw: unknown): void;
235
+ retarget(target: T, context: SettingsContext): void;
236
+ notify(notice: SettingsNotice): void;
237
+ close(): void;
238
+ };
239
+ export declare const UNKNOWN_VERB = "unknown settings bridge verb";
240
+ export declare const NO_SETTINGS_TARGET = "no app is selected for settings";
241
+ export declare const UNKNOWN_SETTINGS_EPOCH = "settings bridge request names an epoch this page was never given or released";
242
+ export declare const PICK_BUSY = "busy: a pick is already in flight";
243
+ export declare const MAX_COVER_EDGE = 4294967295;
244
+ export declare const BLOB_CHUNK_BYTES: number;
245
+ export type BlobData = Blob | ArrayBuffer | ArrayBufferView;
246
+ export declare function base64FromBytes(bytes: Uint8Array): string;
247
+ export declare function blobChunks(data: BlobData): AsyncGenerator<Uint8Array>;
248
+ export declare const DEFAULT_SETTINGS_KEY = "default";
249
+ export type LoadedSettingsPage = {
250
+ target: string | null;
251
+ key: string;
252
+ stamp: string | null;
253
+ };
254
+ export type SettingsSwitch = 'stay' | 'refresh' | 'retarget' | 'load';
255
+ export declare function settingsPageKey(target: string, settingsHash: string | null | undefined): string;
256
+ export declare function settingsSwitch(loaded: LoadedSettingsPage, target: string, key: string, stamp: string): SettingsSwitch;
257
+ export declare function decodeSettingsMessage(raw: unknown): SettingsMessage | null;
258
+ export declare function openSettingsSession<T>(options: SettingsSessionOptions<T>): SettingsSession<T>;
259
+ //# sourceMappingURL=settings-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-protocol.d.ts","sourceRoot":"","sources":["../src/settings-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ export const UNKNOWN_VERB = 'unknown settings bridge verb';
2
+ export const NO_SETTINGS_TARGET = 'no app is selected for settings';
3
+ export const UNKNOWN_SETTINGS_EPOCH = 'settings bridge request names an epoch this page was never given or released';
4
+ export const PICK_BUSY = 'busy: a pick is already in flight';
5
+ export const MAX_COVER_EDGE = 0xffff_ffff;
6
+ export const BLOB_CHUNK_BYTES = 256 * 1024;
7
+ export function base64FromBytes(bytes) {
8
+ const chunk = 0x8000;
9
+ let binary = '';
10
+ for (let at = 0; at < bytes.length; at += chunk) {
11
+ binary += String.fromCharCode(...bytes.subarray(at, at + chunk));
12
+ }
13
+ return btoa(binary);
14
+ }
15
+ export async function* blobChunks(data) {
16
+ if (data instanceof Blob) {
17
+ for (let at = 0; at < data.size; at += BLOB_CHUNK_BYTES) {
18
+ yield new Uint8Array(await data.slice(at, at + BLOB_CHUNK_BYTES).arrayBuffer());
19
+ }
20
+ return;
21
+ }
22
+ const bytes = ArrayBuffer.isView(data)
23
+ ? new Uint8Array(data.buffer, data.byteOffset, data.byteLength)
24
+ : new Uint8Array(data);
25
+ for (let at = 0; at < bytes.length; at += BLOB_CHUNK_BYTES)
26
+ yield bytes.subarray(at, at + BLOB_CHUNK_BYTES);
27
+ }
28
+ export const DEFAULT_SETTINGS_KEY = 'default';
29
+ export function settingsPageKey(target, settingsHash) {
30
+ return settingsHash ? `${target}#${settingsHash}` : DEFAULT_SETTINGS_KEY;
31
+ }
32
+ export function settingsSwitch(loaded, target, key, stamp) {
33
+ if (loaded.key !== key)
34
+ return 'load';
35
+ if (loaded.target !== target)
36
+ return key === DEFAULT_SETTINGS_KEY ? 'retarget' : 'load';
37
+ return loaded.stamp === stamp ? 'stay' : 'refresh';
38
+ }
39
+ function text(fields, name) {
40
+ const value = fields[name];
41
+ if (typeof value !== 'string')
42
+ throw new Error(`settings bridge payload needs a string ${name}`);
43
+ return value;
44
+ }
45
+ const PICK_KINDS = ['image', 'video', 'any'];
46
+ function pickKind(fields) {
47
+ const kind = text(fields, 'kind');
48
+ if (!PICK_KINDS.includes(kind)) {
49
+ throw new Error(`settings bridge pick kind must be one of ${PICK_KINDS.join(', ')}`);
50
+ }
51
+ return kind;
52
+ }
53
+ function edge(value) {
54
+ if (typeof value !== 'number' || !Number.isInteger(value) || value < 1 || value > MAX_COVER_EDGE) {
55
+ throw new Error(`settings bridge pick cover edges must be whole numbers from 1 to ${MAX_COVER_EDGE}`);
56
+ }
57
+ return value;
58
+ }
59
+ function pick(fields) {
60
+ const cover = fields.cover;
61
+ if (cover === undefined || cover === null)
62
+ return { kind: pickKind(fields) };
63
+ if (!Array.isArray(cover) || cover.length !== 2) {
64
+ throw new Error('settings bridge pick cover must be [width, height]');
65
+ }
66
+ return { kind: pickKind(fields), cover: [edge(cover[0]), edge(cover[1])] };
67
+ }
68
+ const none = () => undefined;
69
+ const key = (fields) => ({ key: text(fields, 'key') });
70
+ const keyValue = (fields) => ({ key: text(fields, 'key'), value: text(fields, 'value') });
71
+ const PAYLOADS = {
72
+ context: none,
73
+ 'config.fields': none,
74
+ 'config.list': none,
75
+ 'config.set': keyValue,
76
+ 'config.delete': key,
77
+ 'doc.get': key,
78
+ 'doc.list': none,
79
+ 'doc.set': keyValue,
80
+ 'doc.delete': key,
81
+ fetch: fields => ({ ...fields, url: text(fields, 'url') }),
82
+ 'auth.authorize': fields => ({ url: text(fields, 'url') }),
83
+ pick,
84
+ 'blob.create': fields => ({ mime: text(fields, 'mime') }),
85
+ 'blob.append': fields => ({ handle: text(fields, 'handle'), data: text(fields, 'data') }),
86
+ 'blob.put': fields => ({ key: text(fields, 'key'), handle: text(fields, 'handle') }),
87
+ 'blob.delete': key,
88
+ 'blob.list': none,
89
+ };
90
+ function isVerb(verb) {
91
+ return Object.prototype.hasOwnProperty.call(PAYLOADS, verb);
92
+ }
93
+ function invoke(host, verb, fields, report) {
94
+ const handler = host[verb];
95
+ return handler(PAYLOADS[verb](fields), report);
96
+ }
97
+ function describe(err) {
98
+ return err instanceof Error ? err.message : String(err);
99
+ }
100
+ export function decodeSettingsMessage(raw) {
101
+ if (typeof raw !== 'string')
102
+ return null;
103
+ try {
104
+ const parsed = JSON.parse(raw);
105
+ return typeof parsed === 'object' && parsed !== null ? parsed : null;
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ }
111
+ function decodeSettingsRequest(raw) {
112
+ if (typeof raw !== 'string')
113
+ return null;
114
+ let request;
115
+ try {
116
+ const parsed = JSON.parse(raw);
117
+ if (typeof parsed !== 'object' || parsed === null)
118
+ return null;
119
+ request = parsed;
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ const { id, verb, payload, epoch } = request;
125
+ if (typeof id !== 'number' || typeof verb !== 'string')
126
+ return null;
127
+ return {
128
+ id,
129
+ verb,
130
+ fields: typeof payload === 'object' && payload !== null ? payload : {},
131
+ epoch: typeof epoch === 'number' ? epoch : 0,
132
+ };
133
+ }
134
+ export function openSettingsSession(options) {
135
+ const explain = options.explain ?? describe;
136
+ let target = options.target;
137
+ let current = 0;
138
+ const hosts = new Map([[0, target === null ? null : options.bind(target)]]);
139
+ let closed = false;
140
+ const deliver = (message) => {
141
+ if (!closed)
142
+ options.deliver(message);
143
+ };
144
+ const receive = (raw) => {
145
+ if (closed)
146
+ return;
147
+ const request = decodeSettingsRequest(raw);
148
+ if (!request)
149
+ return;
150
+ const { id, verb, fields } = request;
151
+ const now = current;
152
+ if (verb === 'done') {
153
+ if (request.epoch === now)
154
+ hosts.get(now)?.done();
155
+ return;
156
+ }
157
+ if (verb === 'release') {
158
+ if (request.epoch < now)
159
+ hosts.delete(request.epoch);
160
+ return;
161
+ }
162
+ if (verb === 'resize') {
163
+ const { height } = fields;
164
+ if (typeof height === 'number' && height > 0)
165
+ options.resize?.(height);
166
+ return;
167
+ }
168
+ void (async () => {
169
+ try {
170
+ if (!isVerb(verb))
171
+ throw new Error(`${UNKNOWN_VERB}: ${verb}`);
172
+ const at = verb === 'context' ? now : request.epoch;
173
+ const bound = hosts.get(at);
174
+ if (bound === undefined)
175
+ throw new Error(UNKNOWN_SETTINGS_EPOCH);
176
+ if (bound === null)
177
+ throw new Error(NO_SETTINGS_TARGET);
178
+ const report = ({ sent, total }) => deliver({ event: 'progress', id, sent, total });
179
+ const value = await invoke(bound, verb, fields, report);
180
+ if (verb !== 'context')
181
+ deliver({ id, ok: true, value });
182
+ else if (current === now)
183
+ deliver({ id, ok: true, value, epoch: now });
184
+ else
185
+ receive(raw);
186
+ }
187
+ catch (err) {
188
+ deliver({ id, ok: false, error: explain(err) });
189
+ }
190
+ })();
191
+ };
192
+ return {
193
+ get target() {
194
+ return target;
195
+ },
196
+ get closed() {
197
+ return closed;
198
+ },
199
+ receive,
200
+ retarget(next, context) {
201
+ if (closed)
202
+ return;
203
+ target = next;
204
+ current += 1;
205
+ hosts.set(current, options.bind(next));
206
+ deliver({ event: 'contextChanged', context, epoch: current });
207
+ },
208
+ notify(notice) {
209
+ deliver(notice);
210
+ },
211
+ close() {
212
+ closed = true;
213
+ },
214
+ };
215
+ }
216
+ //# sourceMappingURL=settings-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-protocol.js","sourceRoot":"","sources":["../src/settings-protocol.ts"],"names":[],"mappings":"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"}
@@ -1,45 +1,23 @@
1
- import type { ConfigEntry, ConfigField, DocEntry } from '@bridgething/lib';
2
- export type { ConfigEntry, ConfigField, DocEntry } from '@bridgething/lib';
3
- export type SettingsContext = {
4
- webappId: string;
5
- name: string;
6
- version: string;
7
- deviceId: string;
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
- };
1
+ import { type BlobData, type ConfigEntry, type ConfigField, type DocEntry, type KeyValue, type PickKind, type PickedMedia, type SettingsContext, type Theme, type WebappBlobEntry } from './settings-protocol.js';
2
+ export type { AuthorizeVerbReply, AuthorizeVerbRequest, BlobData, BodyKind, ByteProgress, ConfigEntry, ConfigField, DocEntry, FetchVerbReply, FetchVerbRequest, KeyValue, PickKind, PickedMedia, SettingsContext, Theme, ThemeColor, ThemeFont, ThemeScheme, ThemeText, WebappBlobEntry, WireBody, WireHeader, } from './settings-protocol.js';
33
3
  export type SettingsRequestInit = RequestInit & {
34
4
  timeoutMs?: number;
35
5
  };
36
6
  export type FetchErrorKind = 'network' | 'timeout' | 'invalid_url';
37
7
  export type AuthorizeErrorKind = 'cancelled' | 'busy' | 'unsupported';
38
- export type KeyValue = {
39
- key: string;
40
- value: string | null;
8
+ export type BlobErrorKind = 'unsupported' | 'disconnected' | 'too_large' | 'quota_exceeded' | 'storage_full' | 'not_media' | 'unknown_handle' | 'busy' | 'no_gesture' | 'failed';
9
+ export type PickOptions = {
10
+ kind: PickKind;
11
+ cover?: [width: number, height: number];
12
+ };
13
+ export type BlobProgressListener = (sent: number, total: number) => void;
14
+ export type BlobPutOptions = {
15
+ onProgress?: BlobProgressListener;
41
16
  };
42
17
  export type DocChangedListener = (key: string, value: string | null) => void;
18
+ export type ThemeChangedListener = (theme: Theme) => void;
19
+ export type ContextChangedListener = (context: SettingsContext, previous: SettingsContext | null) => void;
20
+ export type RefreshListener = (context: SettingsContext) => void;
43
21
  declare global {
44
22
  interface Window {
45
23
  ReactNativeWebView?: {
@@ -52,13 +30,27 @@ export declare class SettingsFetchError extends Error {
52
30
  readonly kind: FetchErrorKind;
53
31
  constructor(kind: FetchErrorKind, message: string);
54
32
  }
33
+ export declare class BlobError extends Error {
34
+ readonly kind: BlobErrorKind;
35
+ constructor(kind: BlobErrorKind, message: string);
36
+ }
55
37
  export declare class AuthorizeError extends Error {
56
38
  readonly kind: AuthorizeErrorKind;
57
39
  constructor(kind: AuthorizeErrorKind, message: string);
58
40
  }
41
+ export type ConfigVerbs = {
42
+ fields(): Promise<ConfigField[]>;
43
+ list(): Promise<ConfigEntry[]>;
44
+ set(key: string, value: string): Promise<KeyValue>;
45
+ delete(key: string): Promise<KeyValue>;
46
+ };
47
+ export type PinnedConfigVerbs = ConfigVerbs & {
48
+ release(): void;
49
+ };
59
50
  export declare const settings: {
60
51
  context(): Promise<SettingsContext>;
61
52
  config: {
53
+ pin(): PinnedConfigVerbs;
62
54
  fields(): Promise<ConfigField[]>;
63
55
  list(): Promise<ConfigEntry[]>;
64
56
  set(key: string, value: string): Promise<KeyValue>;
@@ -78,7 +70,18 @@ export declare const settings: {
78
70
  auth: {
79
71
  authorize(url: string | URL): Promise<URL>;
80
72
  };
73
+ pick(options: PickOptions): Promise<PickedMedia | null>;
74
+ blob: {
75
+ create(mime: string): Promise<string>;
76
+ append(handle: string, data: BlobData): Promise<number>;
77
+ put(key: string, handle: string, options?: BlobPutOptions): Promise<WebappBlobEntry>;
78
+ delete(key: string): Promise<void>;
79
+ list(): Promise<WebappBlobEntry[]>;
80
+ };
81
81
  onDocChanged(listener: DocChangedListener): () => void;
82
+ onThemeChanged(listener: ThemeChangedListener): () => void;
83
+ onContextChanged(listener: ContextChangedListener): () => void;
84
+ onRefresh(listener: RefreshListener): () => void;
82
85
  done(): void;
83
86
  };
84
87
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}