@swiftbrowser/native 0.17.6 → 0.17.8

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.
Files changed (81) hide show
  1. package/README.md +101 -2
  2. package/dist/blob.d.ts +60 -0
  3. package/dist/blob.d.ts.map +1 -0
  4. package/dist/blob.js +153 -0
  5. package/dist/blob.js.map +1 -0
  6. package/dist/bridge.d.ts +47 -1
  7. package/dist/bridge.d.ts.map +1 -1
  8. package/dist/bridge.js.map +1 -1
  9. package/dist/fetch.d.ts +11 -3
  10. package/dist/fetch.d.ts.map +1 -1
  11. package/dist/fetch.js +26 -2
  12. package/dist/fetch.js.map +1 -1
  13. package/dist/hostRequests.d.ts +49 -0
  14. package/dist/hostRequests.d.ts.map +1 -0
  15. package/dist/hostRequests.js +134 -0
  16. package/dist/hostRequests.js.map +1 -0
  17. package/dist/index.d.ts +8 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +8 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/matchMedia.d.ts +43 -0
  22. package/dist/matchMedia.d.ts.map +1 -0
  23. package/dist/matchMedia.js +63 -0
  24. package/dist/matchMedia.js.map +1 -0
  25. package/dist/mediaSession.d.ts +59 -0
  26. package/dist/mediaSession.d.ts.map +1 -0
  27. package/dist/mediaSession.js +119 -0
  28. package/dist/mediaSession.js.map +1 -0
  29. package/dist/notifications.d.ts +108 -0
  30. package/dist/notifications.d.ts.map +1 -0
  31. package/dist/notifications.js +251 -0
  32. package/dist/notifications.js.map +1 -0
  33. package/dist/run.d.ts.map +1 -1
  34. package/dist/run.js +9 -1
  35. package/dist/run.js.map +1 -1
  36. package/dist/runtime.d.ts +3 -1
  37. package/dist/runtime.d.ts.map +1 -1
  38. package/dist/runtime.js +72 -3
  39. package/dist/runtime.js.map +1 -1
  40. package/dist/secureStorage.d.ts +20 -0
  41. package/dist/secureStorage.d.ts.map +1 -0
  42. package/dist/secureStorage.js +28 -0
  43. package/dist/secureStorage.js.map +1 -0
  44. package/dist/subtle.d.ts +38 -0
  45. package/dist/subtle.d.ts.map +1 -0
  46. package/dist/subtle.js +72 -0
  47. package/dist/subtle.js.map +1 -0
  48. package/dist/webSocket.d.ts +73 -0
  49. package/dist/webSocket.d.ts.map +1 -0
  50. package/dist/webSocket.js +145 -0
  51. package/dist/webSocket.js.map +1 -0
  52. package/package.json +3 -3
  53. package/src/blob.ts +186 -0
  54. package/src/bridge.ts +57 -1
  55. package/src/fetch.ts +29 -3
  56. package/src/hostRequests.ts +148 -0
  57. package/src/index.ts +8 -0
  58. package/src/matchMedia.ts +79 -0
  59. package/src/mediaSession.ts +163 -0
  60. package/src/notifications.ts +317 -0
  61. package/src/run.ts +10 -1
  62. package/src/runtime.ts +73 -3
  63. package/src/secureStorage.ts +39 -0
  64. package/src/subtle.ts +87 -0
  65. package/src/webSocket.ts +175 -0
  66. package/swift/Sources/SwiftBrowserNative/Host/HostBridge.swift +180 -0
  67. package/swift/Sources/SwiftBrowserNative/Host/HostRequestBridge.swift +437 -0
  68. package/swift/Sources/SwiftBrowserNative/Host/NotificationBridge.swift +304 -0
  69. package/swift/Sources/SwiftBrowserNative/Host/NowPlayingBridge.swift +190 -0
  70. package/swift/Sources/SwiftBrowserNative/Host/SecureStorage.swift +60 -0
  71. package/swift/Sources/SwiftBrowserNative/Host/ShimAliases.swift +3 -0
  72. package/swift/Sources/SwiftBrowserNative/Host/WebSocketBridge.swift +118 -0
  73. package/swift/Sources/SwiftBrowserNative/Runtime/NativeApp.swift +26 -0
  74. package/swift/Sources/SwiftBrowserNative/Runtime/NativeAppDelegate.swift +36 -0
  75. package/swift/Sources/SwiftBrowserNative/Views/ElementView.swift +2 -0
  76. package/swift/Sources/SwiftBrowserNative/Views/Kinds/Controls.swift +22 -9
  77. package/swift/Sources/SwiftBrowserNative/Views/Kinds/Navigation.swift +8 -5
  78. package/swift/Sources/SwiftBrowserNative/Views/Kinds/Video.swift +304 -0
  79. package/swift/Sources/SwiftBrowserProtocol/Props.swift +43 -0
  80. package/swift/Sources/SwiftBrowserProtocol/RendererEvent.swift +12 -2
  81. package/wasm/SwiftBrowserNative.wasm +2 -2
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Notifications in the native app: the browser's `Notification` (the
3
+ * permission, local notifications and their clicks) and `navigator.setAppBadge`
4
+ * over the host's UserNotifications (Native/Sources/SwiftBrowserNative/Host/NotificationBridge.swift),
5
+ * and remote notifications: `registerForPush` resolves with the device token
6
+ * (APNs, as hex) and `onNotification` delivers what the viewer opened and what
7
+ * arrived while the app is open.
8
+ *
9
+ * ```ts
10
+ * const token = await registerForPush();
11
+ * await fetch('/api/devices', { method: 'POST', body: JSON.stringify({ token }) });
12
+ * useEffect(() => onNotification((n) => { if (n.event === 'opened') show(n.data.postId); }), []);
13
+ * ```
14
+ *
15
+ * In the page (the round trip, or any browser) the host has no bridge for
16
+ * these: `Notification` is the browser's own, and `registerForPush` subscribes
17
+ * to Web Push through the site's service worker (`sw.js`, which the web
18
+ * renderer ships: docs/ops-protocol.md, "Push notifications") with the
19
+ * `applicationServerKey` given, resolving with the subscription's JSON as
20
+ * the token; the worker's messages become `onNotification` events. A server
21
+ * sends to both with one payload: APNs' (`aps.alert`, `aps.badge`), which
22
+ * the worker reads too.
23
+ */
24
+ import type { NativeBridge } from './bridge';
25
+ export type NotificationPermissionState = 'default' | 'granted' | 'denied';
26
+ /** What the viewer did with a notification, or one that arrived while the app is open. */
27
+ export interface NotificationEvent {
28
+ event: 'opened' | 'received';
29
+ /** Whether it came from the push service. */
30
+ remote: boolean;
31
+ /** The notification's identifier (`tag`, or the push payload's `id`). */
32
+ id: string;
33
+ title: string;
34
+ body: string;
35
+ /** A push's payload, or what `new Notification(title, { data })` gave. */
36
+ data: Record<string, unknown>;
37
+ /** `opened`: the action the viewer chose, empty for the notification itself. */
38
+ action?: string;
39
+ }
40
+ export interface NativeNotificationOptions {
41
+ body?: string;
42
+ /** The notification's identifier: a later one with the same tag replaces it. */
43
+ tag?: string;
44
+ data?: unknown;
45
+ silent?: boolean;
46
+ /** The app badge to set with it. */
47
+ badge?: number;
48
+ }
49
+ export interface RegisterForPushOptions {
50
+ /** The Web Push application server key (the server's VAPID public key, base64url), for the page. */
51
+ applicationServerKey?: string;
52
+ }
53
+ type Listener = (notification: NotificationEvent) => void;
54
+ /** The bridge functions notifications need. */
55
+ export type NotificationBridge = Pick<NativeBridge, 'notificationsReady' | 'notificationPermission' | 'notificationShow' | 'notificationClose' | 'setBadge' | 'pushRegister'>;
56
+ export interface NotificationGlobals {
57
+ Notification: NativeNotificationClass;
58
+ __sbNotificationPermission: (id: number, permission: NotificationPermissionState) => void;
59
+ __sbPushRegistered: (id: number, result: {
60
+ token?: string;
61
+ error?: string;
62
+ }) => void;
63
+ __sbNotification: (json: string) => void;
64
+ /** `navigator.setAppBadge` and `clearAppBadge`. */
65
+ setAppBadge: (count?: number) => Promise<void>;
66
+ clearAppBadge: () => Promise<void>;
67
+ /** The native `registerForPush`. */
68
+ registerForPush: (options?: RegisterForPushOptions) => Promise<string>;
69
+ }
70
+ export interface NativeNotificationClass {
71
+ new (title: string, options?: NativeNotificationOptions): NativeNotificationInstance;
72
+ readonly permission: NotificationPermissionState;
73
+ requestPermission(): Promise<NotificationPermissionState>;
74
+ }
75
+ export interface NativeNotificationInstance {
76
+ readonly title: string;
77
+ readonly body: string;
78
+ readonly tag: string;
79
+ readonly data: unknown;
80
+ onclick: ((event: {
81
+ notification: NativeNotificationInstance;
82
+ action: string;
83
+ }) => void) | null;
84
+ close(): void;
85
+ }
86
+ /**
87
+ * Listens for notifications the viewer opened and ones that arrived while
88
+ * the app is open; returns what stops listening. Events before any listener
89
+ * (a tap that launched the app) wait for the first one.
90
+ */
91
+ export declare function onNotification(listener: Listener): () => void;
92
+ /** The runtime's `__sbNotification(json)`, and what the page's worker messages become. */
93
+ export declare function receiveNotification(event: NotificationEvent): void;
94
+ /**
95
+ * Registers for remote notifications and resolves with the device token:
96
+ * APNs' as hex in the native app, the Web Push subscription's JSON in the
97
+ * page (which needs `applicationServerKey`). Rejects with the reason the
98
+ * system or the browser refused.
99
+ */
100
+ export declare function registerForPush(options?: RegisterForPushOptions): Promise<string>;
101
+ /** Resets the listeners and the delivery source, for tests. */
102
+ export declare function resetNotifications(): void;
103
+ /** The globals for a host with the notification bridge. */
104
+ export declare function createNotificationGlobals(native: NotificationBridge): NotificationGlobals;
105
+ /** The event a service worker message carries (Web/src/notifications.ts), or null. */
106
+ export declare function notificationEventOf(data: unknown): NotificationEvent | null;
107
+ export {};
108
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../src/notifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Notifications in the native app: the browser's `Notification` (the
3
+ * permission, local notifications and their clicks) and `navigator.setAppBadge`
4
+ * over the host's UserNotifications (Native/Sources/SwiftBrowserNative/Host/NotificationBridge.swift),
5
+ * and remote notifications: `registerForPush` resolves with the device token
6
+ * (APNs, as hex) and `onNotification` delivers what the viewer opened and what
7
+ * arrived while the app is open.
8
+ *
9
+ * ```ts
10
+ * const token = await registerForPush();
11
+ * await fetch('/api/devices', { method: 'POST', body: JSON.stringify({ token }) });
12
+ * useEffect(() => onNotification((n) => { if (n.event === 'opened') show(n.data.postId); }), []);
13
+ * ```
14
+ *
15
+ * In the page (the round trip, or any browser) the host has no bridge for
16
+ * these: `Notification` is the browser's own, and `registerForPush` subscribes
17
+ * to Web Push through the site's service worker (`sw.js`, which the web
18
+ * renderer ships: docs/ops-protocol.md, "Push notifications") with the
19
+ * `applicationServerKey` given, resolving with the subscription's JSON as
20
+ * the token; the worker's messages become `onNotification` events. A server
21
+ * sends to both with one payload: APNs' (`aps.alert`, `aps.badge`), which
22
+ * the worker reads too.
23
+ */
24
+ /** The message types the web renderer's service worker posts (Web/public/sw.js). */
25
+ const PUSH_MESSAGE = 'swiftbrowser:push';
26
+ const CLICK_MESSAGE = 'swiftbrowser:notificationclick';
27
+ const listeners = new Set();
28
+ let pending = [];
29
+ /** Where the events come from once installed: the bridge, or the page's service worker. */
30
+ let installed = null;
31
+ let nativeRegister = null;
32
+ /**
33
+ * Listens for notifications the viewer opened and ones that arrived while
34
+ * the app is open; returns what stops listening. Events before any listener
35
+ * (a tap that launched the app) wait for the first one.
36
+ */
37
+ export function onNotification(listener) {
38
+ listeners.add(listener);
39
+ if (installed === null && typeof navigator !== 'undefined')
40
+ listenToPage();
41
+ if (pending.length > 0) {
42
+ const events = pending;
43
+ pending = [];
44
+ for (const event of events)
45
+ listener(event);
46
+ }
47
+ return () => {
48
+ listeners.delete(listener);
49
+ };
50
+ }
51
+ /** The runtime's `__sbNotification(json)`, and what the page's worker messages become. */
52
+ export function receiveNotification(event) {
53
+ if (listeners.size === 0) {
54
+ pending.push(event);
55
+ return;
56
+ }
57
+ for (const listener of listeners)
58
+ listener(event);
59
+ }
60
+ /**
61
+ * Registers for remote notifications and resolves with the device token:
62
+ * APNs' as hex in the native app, the Web Push subscription's JSON in the
63
+ * page (which needs `applicationServerKey`). Rejects with the reason the
64
+ * system or the browser refused.
65
+ */
66
+ export function registerForPush(options = {}) {
67
+ if (nativeRegister)
68
+ return nativeRegister(options);
69
+ return registerForWebPush(options);
70
+ }
71
+ /** Resets the listeners and the delivery source, for tests. */
72
+ export function resetNotifications() {
73
+ listeners.clear();
74
+ pending = [];
75
+ installed = null;
76
+ nativeRegister = null;
77
+ }
78
+ // MARK: The native app
79
+ /** The globals for a host with the notification bridge. */
80
+ export function createNotificationGlobals(native) {
81
+ installed = 'native';
82
+ let permission = 'default';
83
+ let nextId = 1;
84
+ const permissionWaits = new Map();
85
+ const registrations = new Map();
86
+ const open = new Map();
87
+ const askPermission = (request) => new Promise((resolve) => {
88
+ const id = nextId++;
89
+ permissionWaits.set(id, resolve);
90
+ native.notificationPermission?.(id, request);
91
+ });
92
+ class NativeNotification {
93
+ static get permission() {
94
+ return permission;
95
+ }
96
+ static requestPermission() {
97
+ return askPermission(true);
98
+ }
99
+ title;
100
+ body;
101
+ tag;
102
+ data;
103
+ onclick = null;
104
+ constructor(title, options = {}) {
105
+ this.title = String(title);
106
+ this.body = options.body ?? '';
107
+ this.tag = options.tag ?? `notification-${nextId++}`;
108
+ this.data = options.data;
109
+ const show = { id: this.tag, title: this.title, body: this.body, silent: options.silent ?? false };
110
+ if (options.badge !== undefined)
111
+ show['badge'] = options.badge;
112
+ if (options.data !== undefined && typeof options.data === 'object' && options.data !== null)
113
+ show['data'] = options.data;
114
+ const problem = native.notificationShow?.(JSON.stringify(show));
115
+ if (problem)
116
+ throw new TypeError(problem);
117
+ open.set(this.tag, this);
118
+ }
119
+ close() {
120
+ if (open.get(this.tag) === this)
121
+ open.delete(this.tag);
122
+ native.notificationClose?.(JSON.stringify([this.tag]));
123
+ }
124
+ }
125
+ const setAppBadge = async (count = 0) => {
126
+ native.setBadge?.(Number.isFinite(count) ? Math.max(0, Math.floor(count)) : 0);
127
+ };
128
+ nativeRegister = (options = {}) => new Promise((resolve, reject) => {
129
+ const id = nextId++;
130
+ registrations.set(id, { resolve, reject });
131
+ native.pushRegister?.(id, options.applicationServerKey);
132
+ });
133
+ // The permission as it stands, so `Notification.permission` reads right
134
+ // from the first render; and the app listens, so what came before arrives.
135
+ void askPermission(false);
136
+ native.notificationsReady?.();
137
+ return {
138
+ Notification: NativeNotification,
139
+ __sbNotificationPermission: (id, state) => {
140
+ permission = state;
141
+ const resolve = permissionWaits.get(id);
142
+ permissionWaits.delete(id);
143
+ resolve?.(state);
144
+ },
145
+ __sbPushRegistered: (id, result) => {
146
+ const registration = registrations.get(id);
147
+ registrations.delete(id);
148
+ if (!registration)
149
+ return;
150
+ if (typeof result.token === 'string')
151
+ registration.resolve(result.token);
152
+ else
153
+ registration.reject(new Error(result.error ?? 'push: registration failed'));
154
+ },
155
+ __sbNotification: (json) => {
156
+ let event;
157
+ try {
158
+ event = JSON.parse(json);
159
+ }
160
+ catch {
161
+ return;
162
+ }
163
+ if (event.event === 'opened') {
164
+ const notification = open.get(event.id);
165
+ if (notification) {
166
+ open.delete(event.id);
167
+ notification.onclick?.({ notification, action: event.action ?? '' });
168
+ }
169
+ }
170
+ receiveNotification(event);
171
+ },
172
+ setAppBadge,
173
+ clearAppBadge: () => setAppBadge(0),
174
+ registerForPush: nativeRegister,
175
+ };
176
+ }
177
+ // MARK: The page
178
+ /** The event a service worker message carries (Web/src/notifications.ts), or null. */
179
+ export function notificationEventOf(data) {
180
+ if (typeof data !== 'object' || data === null)
181
+ return null;
182
+ const message = data;
183
+ if (message.type !== PUSH_MESSAGE && message.type !== CLICK_MESSAGE)
184
+ return null;
185
+ const payload = typeof message.payload === 'object' && message.payload !== null ? message.payload : {};
186
+ const aps = typeof payload['aps'] === 'object' && payload['aps'] !== null ? payload['aps'] : {};
187
+ const alert = typeof aps['alert'] === 'object' && aps['alert'] !== null ? aps['alert'] : {};
188
+ const text = (value) => (typeof value === 'string' ? value : undefined);
189
+ const event = {
190
+ event: message.type === CLICK_MESSAGE ? 'opened' : 'received',
191
+ remote: true,
192
+ id: text(payload['id']) ?? text(payload['tag']) ?? '',
193
+ title: text(payload['title']) ?? text(alert['title']) ?? '',
194
+ body: text(payload['body']) ?? text(alert['body']) ?? text(aps['alert']) ?? '',
195
+ data: payload,
196
+ };
197
+ if (message.type === CLICK_MESSAGE)
198
+ event.action = typeof message.action === 'string' ? message.action : '';
199
+ return event;
200
+ }
201
+ function listenToPage() {
202
+ installed = 'page';
203
+ const container = navigator.serviceWorker;
204
+ if (!container || typeof container.addEventListener !== 'function')
205
+ return;
206
+ container.addEventListener('message', (message) => {
207
+ const event = notificationEventOf(message.data);
208
+ if (event)
209
+ receiveNotification(event);
210
+ });
211
+ }
212
+ /** A VAPID public key (base64url) as the bytes `subscribe` takes. */
213
+ function keyBytes(key) {
214
+ const base64 = key.replace(/-/g, '+').replace(/_/g, '/');
215
+ const binary = atob(base64 + '='.repeat((4 - (base64.length % 4)) % 4));
216
+ const bytes = new Uint8Array(new ArrayBuffer(binary.length));
217
+ for (let i = 0; i < binary.length; i += 1)
218
+ bytes[i] = binary.charCodeAt(i);
219
+ return bytes;
220
+ }
221
+ async function registerForWebPush(options) {
222
+ if (typeof navigator === 'undefined' || !navigator.serviceWorker || typeof PushManager === 'undefined') {
223
+ throw new Error('push: this browser has no push service');
224
+ }
225
+ if (!options.applicationServerKey)
226
+ throw new Error('push: no applicationServerKey');
227
+ if (typeof Notification !== 'undefined' && Notification.permission === 'default')
228
+ await Notification.requestPermission();
229
+ if (typeof Notification !== 'undefined' && Notification.permission !== 'granted')
230
+ throw new Error('push: notifications are not allowed');
231
+ if (installed === null)
232
+ listenToPage();
233
+ const scope = new URL('./', typeof document !== 'undefined' ? document.baseURI : location.href).href;
234
+ const existing = await navigator.serviceWorker.getRegistration(scope);
235
+ const registration = existing?.active && existing.scope === scope ? existing : await navigator.serviceWorker.register(new URL('sw.js', scope).href, { scope });
236
+ await navigator.serviceWorker.ready;
237
+ const init = { userVisibleOnly: true, applicationServerKey: keyBytes(options.applicationServerKey) };
238
+ const current = await registration.pushManager.getSubscription();
239
+ let subscription;
240
+ try {
241
+ subscription = current ?? (await registration.pushManager.subscribe(init));
242
+ }
243
+ catch (error) {
244
+ if (!current)
245
+ throw error;
246
+ await current.unsubscribe().catch(() => undefined);
247
+ subscription = await registration.pushManager.subscribe(init);
248
+ }
249
+ return JSON.stringify(subscription.toJSON());
250
+ }
251
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../src/notifications.ts"],"names":[],"mappings":"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"}
package/dist/run.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAM,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,wEAAwE;IACxE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,sFAAsF;IACtF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9C,OAAO,IAAI,IAAI,CAAC;CACjB;AAYD,wBAAgB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CA0DzE"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAM,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAI3D,MAAM,WAAW,UAAU;IACzB,wEAAwE;IACxE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,sFAAsF;IACtF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9C,OAAO,IAAI,IAAI,CAAC;CACjB;AAYD,wBAAgB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAgEzE"}
package/dist/run.js CHANGED
@@ -8,7 +8,10 @@
8
8
  * ran and its pass was applied (docs/native.md, "Synchronous calls").
9
9
  */
10
10
  import { createSwiftUIRoot } from '@swiftbrowser/react';
11
+ import { browserEnvironment } from '@swiftbrowser/web/src/hostRequests';
11
12
  import { nativeBridge } from './bridge';
13
+ import { installHostEnvironment } from './hostRequests';
14
+ import { updateMediaEnvironment } from './matchMedia';
12
15
  /** The running app, when `run` was called (the dev loop calls it again on every save). */
13
16
  let current = null;
14
17
  export function run(element, options = {}) {
@@ -16,6 +19,9 @@ export function run(element, options = {}) {
16
19
  if (!native)
17
20
  throw new Error('run(): no native bridge (__sbNative); this entry runs inside a SwiftBrowser Native app');
18
21
  const report = options.onError ?? ((error) => native.log('error', error instanceof Error ? (error.stack ?? error.message) : String(error)));
22
+ // What `ShareLink`, `fileImporter` and the clipboard ask the browser for,
23
+ // answered by the host where the page has nothing (hostRequests.ts).
24
+ installHostEnvironment(browserEnvironment);
19
25
  if (current) {
20
26
  // Fast Refresh (devBuild.ts): the app bundle was evaluated again. Its
21
27
  // modules re-registered their components; the refresh runtime updates
@@ -42,8 +48,10 @@ export function run(element, options = {}) {
42
48
  if (parsed.type === 'environment') {
43
49
  const fields = parsed;
44
50
  const next = {};
45
- if (fields.colorScheme)
51
+ if (fields.colorScheme) {
46
52
  next.colorScheme = fields.colorScheme;
53
+ updateMediaEnvironment({ colorScheme: fields.colorScheme });
54
+ }
47
55
  if (fields.dynamicTypeSize)
48
56
  next['dynamicTypeSize'] = fields.dynamicTypeSize;
49
57
  if (fields.horizontalSizeClass)
package/dist/run.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -11,9 +11,11 @@
11
11
  * `atob`, `btoa`, `fetch` with `Headers`, `Request`, `Response`,
12
12
  * `AbortController` and `AbortSignal`, `URL`, `URLSearchParams`, `crypto`
13
13
  * (`getRandomValues`, `randomUUID`), `localStorage`, `structuredClone`,
14
- * `navigator`, `Image` (image.ts, on a bridge with `probeImage`) with the
14
+ * `navigator` (with `mediaSession` and `MediaMetadata` on a bridge with
15
+ * `mediaSession`, mediaSession.ts), `Image` (image.ts, on a bridge with `probeImage`) with the
15
16
  * bridge's `__sbImageProbed`, `Worker` (worker.ts) with the bridge's
16
17
  * `__sbWorkerMessage` and `__sbWorkerError`, `__sbOpenURL` (openURL.ts),
18
+ * `__sbNotificationPermission`, `__sbPushRegistered` and `__sbNotification` (notifications.ts),
17
19
  * and the bridge's callbacks `__sbTimerFired` and `__sbFetchResult`. In a
18
20
  * worker's own context (its bridge has
19
21
  * `workerPostMessage`), `self`, `postMessage`, `addEventListener` and
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAQ3D,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAQzC,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,SAA8C,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,EAAE,CAsLnJ"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAgB3D,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAQzC,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,SAA8C,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,EAAE,CAkPnJ"}
package/dist/runtime.js CHANGED
@@ -11,9 +11,11 @@
11
11
  * `atob`, `btoa`, `fetch` with `Headers`, `Request`, `Response`,
12
12
  * `AbortController` and `AbortSignal`, `URL`, `URLSearchParams`, `crypto`
13
13
  * (`getRandomValues`, `randomUUID`), `localStorage`, `structuredClone`,
14
- * `navigator`, `Image` (image.ts, on a bridge with `probeImage`) with the
14
+ * `navigator` (with `mediaSession` and `MediaMetadata` on a bridge with
15
+ * `mediaSession`, mediaSession.ts), `Image` (image.ts, on a bridge with `probeImage`) with the
15
16
  * bridge's `__sbImageProbed`, `Worker` (worker.ts) with the bridge's
16
17
  * `__sbWorkerMessage` and `__sbWorkerError`, `__sbOpenURL` (openURL.ts),
18
+ * `__sbNotificationPermission`, `__sbPushRegistered` and `__sbNotification` (notifications.ts),
17
19
  * and the bridge's callbacks `__sbTimerFired` and `__sbFetchResult`. In a
18
20
  * worker's own context (its bridge has
19
21
  * `workerPostMessage`), `self`, `postMessage`, `addEventListener` and
@@ -27,7 +29,15 @@ import { createFetch } from './fetch';
27
29
  import { createImageGlobals } from './image';
28
30
  import { SimpleURL, SimpleURLSearchParams } from './url';
29
31
  import { installWorkerScope, NativeWorker } from './worker';
32
+ import { createMediaSession, NativeMediaMetadata } from './mediaSession';
33
+ import { createNotificationGlobals } from './notifications';
30
34
  import { receiveOpenURL } from './openURL';
35
+ import { objectURL, SimpleBlob, SimpleFile, SimpleFormData } from './blob';
36
+ import { setBodyRandomness } from './fetch';
37
+ import { NativeWebSocket } from './webSocket';
38
+ import { createSubtleCrypto } from './subtle';
39
+ import { matchMedia } from './matchMedia';
40
+ import { installHostRequests, receiveHostResponse } from './hostRequests';
31
41
  /**
32
42
  * Installs the runtime on `target` (the global object) over `native`.
33
43
  * Returns what it installed, by name.
@@ -158,6 +168,31 @@ export function installRuntime(native, target = globalThis, options = {}) {
158
168
  define('__sbFetchResult', fetchGlobals.__sbFetchResult);
159
169
  define('URL', SimpleURL);
160
170
  define('URLSearchParams', SimpleURLSearchParams);
171
+ // Bytes with a type, files and forms (blob.ts): what `fetch` uploads, and
172
+ // what a picked file or a built image is. `URL.createObjectURL` is a `data:` URL.
173
+ define('Blob', SimpleBlob);
174
+ define('File', SimpleFile);
175
+ define('FormData', SimpleFormData);
176
+ const urlStatics = target['URL'];
177
+ if (urlStatics && typeof urlStatics.createObjectURL !== 'function') {
178
+ urlStatics.createObjectURL = (blob) => objectURL(blob);
179
+ urlStatics.revokeObjectURL = () => { };
180
+ }
181
+ const random = (count) => base64Decode(native.randomBytes(count));
182
+ setBodyRandomness(random);
183
+ // WebSockets (webSocket.ts) over the host's `URLSessionWebSocketTask`.
184
+ if (native.wsOpen && native.wsSend && native.wsClose) {
185
+ NativeWebSocket.install({ wsOpen: native.wsOpen.bind(native), wsSend: native.wsSend.bind(native), wsClose: native.wsClose.bind(native) });
186
+ define('WebSocket', NativeWebSocket);
187
+ define('__sbWebSocketEvent', NativeWebSocket.receive);
188
+ }
189
+ // `matchMedia`: the color scheme the host sends (run.ts), nothing else.
190
+ define('matchMedia', matchMedia);
191
+ // Host requests (hostRequests.ts): the share sheet, the pickers, the pasteboard, a sign-in.
192
+ if (native.hostRequest && !native.workerPostMessage) {
193
+ installHostRequests({ hostRequest: native.hostRequest.bind(native) });
194
+ define('__sbHostResponse', receiveHostResponse);
195
+ }
161
196
  // `Image`, for code that loads a picture to learn its size (React's
162
197
  // `AsyncImage`): the host reads it through its image loader.
163
198
  if (native.probeImage && !native.workerPostMessage) {
@@ -171,6 +206,8 @@ export function installRuntime(native, target = globalThis, options = {}) {
171
206
  new Uint8Array(array.buffer, array.byteOffset, array.byteLength).set(bytes.subarray(0, array.byteLength));
172
207
  return array;
173
208
  },
209
+ // Digests and HMAC on the host's CryptoKit (subtle.ts).
210
+ subtle: createSubtleCrypto(native),
174
211
  randomUUID: () => {
175
212
  const bytes = base64Decode(native.randomBytes(16));
176
213
  bytes[6] = (bytes[6] & 0x0f) | 0x40;
@@ -191,14 +228,46 @@ export function installRuntime(native, target = globalThis, options = {}) {
191
228
  };
192
229
  define('localStorage', storage);
193
230
  define('structuredClone', (value) => (value === undefined ? value : JSON.parse(JSON.stringify(value))));
194
- define('navigator', {
231
+ const navigator = {
195
232
  userAgent: 'SwiftBrowserNative',
196
233
  language: native.locale().replace('_', '-'),
197
234
  languages: [native.locale().replace('_', '-')],
198
235
  onLine: true,
199
236
  platform: 'iOS',
200
237
  hardwareConcurrency: 1,
201
- });
238
+ // A haptic for a vibration; the pattern's length does not matter.
239
+ vibrate: (pattern) => {
240
+ if (!native.haptic)
241
+ return false;
242
+ const length = Array.isArray(pattern) ? pattern.reduce((sum, ms) => sum + Number(ms), 0) : Number(pattern);
243
+ if (!(length > 0))
244
+ return true;
245
+ native.haptic(length >= 200 ? 'impact' : 'selection');
246
+ return true;
247
+ },
248
+ };
249
+ // What plays, for the lock screen and the media keys (mediaSession.ts); not in a worker.
250
+ const mediaSession = native.mediaSession && !native.workerPostMessage ? createMediaSession(native) : null;
251
+ if (mediaSession)
252
+ navigator['mediaSession'] = mediaSession.session;
253
+ // Notifications (notifications.ts): the browser's `Notification` and the
254
+ // badge over UserNotifications, and the push registration; not in a worker.
255
+ const notifications = native.notificationShow && !native.workerPostMessage ? createNotificationGlobals(native) : null;
256
+ if (notifications) {
257
+ navigator['setAppBadge'] = notifications.setAppBadge;
258
+ navigator['clearAppBadge'] = notifications.clearAppBadge;
259
+ }
260
+ define('navigator', navigator);
261
+ if (mediaSession) {
262
+ define('MediaMetadata', NativeMediaMetadata);
263
+ define('__sbMediaSessionCommand', mediaSession.receive);
264
+ }
265
+ if (notifications) {
266
+ define('Notification', notifications.Notification);
267
+ define('__sbNotificationPermission', notifications.__sbNotificationPermission);
268
+ define('__sbPushRegistered', notifications.__sbPushRegistered);
269
+ define('__sbNotification', notifications.__sbNotification);
270
+ }
202
271
  if (native.workerPostMessage) {
203
272
  installed.push(...installWorkerScope(native, target));
204
273
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}