@swiftbrowser/native 0.18.2 → 0.19.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.
- package/README.md +19 -0
- package/bin/swiftbrowser-native.mjs +47 -0
- package/dist/bridge.d.ts +34 -7
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js.map +1 -1
- package/dist/encoding.d.ts +13 -0
- package/dist/encoding.d.ts.map +1 -1
- package/dist/encoding.js +24 -0
- package/dist/encoding.js.map +1 -1
- package/dist/fetch.d.ts +10 -4
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js +19 -11
- package/dist/fetch.js.map +1 -1
- package/dist/hostRequests.d.ts +22 -6
- package/dist/hostRequests.d.ts.map +1 -1
- package/dist/hostRequests.js +65 -13
- package/dist/hostRequests.js.map +1 -1
- package/dist/ios.d.ts +79 -0
- package/dist/ios.d.ts.map +1 -0
- package/dist/ios.js +181 -0
- package/dist/ios.js.map +1 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +16 -7
- package/dist/runtime.js.map +1 -1
- package/dist/subtle.d.ts +1 -1
- package/dist/subtle.d.ts.map +1 -1
- package/dist/subtle.js +9 -5
- package/dist/subtle.js.map +1 -1
- package/dist/webSocket.d.ts +12 -5
- package/dist/webSocket.d.ts.map +1 -1
- package/dist/webSocket.js +24 -10
- package/dist/webSocket.js.map +1 -1
- package/package.json +7 -3
- package/src/bridge.ts +30 -7
- package/src/encoding.ts +22 -0
- package/src/fetch.ts +18 -13
- package/src/hostRequests.ts +72 -19
- package/src/ios.ts +253 -0
- package/src/runtime.ts +23 -8
- package/src/subtle.ts +10 -6
- package/src/webSocket.ts +27 -12
- package/swift/Packages/SwiftBrowserDSP/Package.swift +31 -0
- package/swift/Packages/SwiftBrowserDSP/README.md +42 -0
- package/swift/Packages/SwiftBrowserDSP/Sources/SwiftBrowserDSP/ProgramNode.swift +203 -0
- package/swift/Packages/SwiftBrowserDSP/Sources/SwiftBrowserDSPCore/Machine.swift +523 -0
- package/swift/Packages/SwiftBrowserDSP/Sources/SwiftBrowserDSPCore/Program.swift +188 -0
- package/swift/Packages/SwiftBrowserLocalModel/Package.swift +35 -0
- package/swift/Packages/SwiftBrowserLocalModel/README.md +66 -0
- package/swift/Packages/SwiftBrowserLocalModel/Sources/SwiftBrowserLocalModel/LlamaEngine.swift +223 -0
- package/swift/Packages/SwiftBrowserLocalModel/Sources/SwiftBrowserLocalModel/LocalLanguageModel.swift +409 -0
- package/swift/Sources/SwiftBrowserNative/Host/AudioEngineBridge.swift +921 -0
- package/swift/Sources/SwiftBrowserNative/Host/AudioEngineNodes.swift +70 -0
- package/swift/Sources/SwiftBrowserNative/Host/FilesBridge.swift +3 -3
- package/swift/Sources/SwiftBrowserNative/Host/HostBridge.swift +106 -28
- package/swift/Sources/SwiftBrowserNative/Host/HostRequestBridge.swift +43 -13
- package/swift/Sources/SwiftBrowserNative/Host/JSHost.swift +116 -0
- package/swift/Sources/SwiftBrowserNative/Host/JavaScriptCoreHost.swift +141 -2
- package/swift/Sources/SwiftBrowserNative/Host/LanguageModelBridge.swift +511 -0
- package/swift/Sources/SwiftBrowserNative/Host/LanguageModelProvider.swift +195 -0
- package/swift/Sources/SwiftBrowserNative/Host/WebSocketBridge.swift +24 -11
- package/swift/Sources/SwiftBrowserNative/Host/WorkerHost.swift +3 -2
- package/swift/Sources/SwiftBrowserNative/Views/ElementView.swift +1 -0
- package/swift/Sources/SwiftBrowserNative/Views/Kinds/Controls.swift +18 -1
- package/swift/Sources/SwiftBrowserNative/Views/Kinds/Lists.swift +41 -1
- package/swift/Sources/SwiftBrowserNative/Views/Kinds/More.swift +88 -17
- package/swift/Sources/SwiftBrowserNative/Views/Kinds/Navigation.swift +81 -20
- package/swift/Sources/SwiftBrowserNative/Views/Kinds/PinchTracker.swift +200 -0
- package/swift/Sources/SwiftBrowserNative/Views/Kinds/PopTap.swift +100 -0
- package/swift/Sources/SwiftBrowserNative/Views/Kinds/Stacks.swift +3 -2
- package/swift/Sources/SwiftBrowserNative/Views/StyleModifier.swift +4 -0
- package/swift/Sources/SwiftBrowserProtocol/Props.swift +26 -0
- package/swift/Sources/SwiftBrowserTree/OpTree.swift +25 -0
- package/wasm/SwiftBrowserNative.wasm +2 -2
package/dist/hostRequests.js
CHANGED
|
@@ -14,12 +14,18 @@
|
|
|
14
14
|
* `webAuthenticate` is the sign-in window apps open for OAuth: the system's
|
|
15
15
|
* sheet, resolving with the callback URL.
|
|
16
16
|
*
|
|
17
|
+
* `audioEngine` is `AVAudioEngine` (@swiftbrowser/react): each command an
|
|
18
|
+
* `audioEngine` request, which Host/AudioEngineBridge.swift performs as it
|
|
19
|
+
* arrives, in order. `languageModel` is Foundation Models' on-device model
|
|
20
|
+
* (`LanguageModelSession`): `languageModel` requests, which
|
|
21
|
+
* Host/LanguageModelBridge.swift answers.
|
|
22
|
+
*
|
|
17
23
|
* `files` is the app's sandbox for `fileManager` (@swiftbrowser/react): the
|
|
18
|
-
* `files` requests of Host/FilesBridge.swift, bytes crossing as base64, with
|
|
24
|
+
* `files` requests of Host/FilesBridge.swift, bytes crossing as views beside the JSON (base64 to an older host), with
|
|
19
25
|
* the standard directories from the bridge's `appDirectories()`.
|
|
20
26
|
*/
|
|
21
27
|
import { objectURL, SimpleBlob, SimpleFile } from './blob';
|
|
22
|
-
import {
|
|
28
|
+
import { base64Encode, bridgedBytes } from './encoding';
|
|
23
29
|
import { nativeUndoHost } from './undo';
|
|
24
30
|
let bridge = null;
|
|
25
31
|
let nextId = 1;
|
|
@@ -29,15 +35,16 @@ export function installHostRequests(native) {
|
|
|
29
35
|
bridge = native;
|
|
30
36
|
fileWatchers.clear();
|
|
31
37
|
}
|
|
32
|
-
/** The bridge's `__sbHostResponse(id, result)`. */
|
|
33
|
-
export function receiveHostResponse(id, result) {
|
|
38
|
+
/** The bridge's `__sbHostResponse(id, result, ...buffers)`: the buffers go where the JSON says `{ "$bytes": n }`. */
|
|
39
|
+
export function receiveHostResponse(id, result, ...buffers) {
|
|
34
40
|
const waiting = pending.get(id);
|
|
35
41
|
if (!waiting)
|
|
36
42
|
return;
|
|
37
43
|
pending.delete(id);
|
|
38
44
|
let parsed;
|
|
39
45
|
try {
|
|
40
|
-
parsed =
|
|
46
|
+
parsed =
|
|
47
|
+
typeof result === 'string' ? JSON.parse(result, buffers.length ? placeBytes(buffers) : undefined) : result;
|
|
41
48
|
}
|
|
42
49
|
catch {
|
|
43
50
|
waiting.reject(new Error('host: malformed response'));
|
|
@@ -62,8 +69,42 @@ export function hostRequest(kind, params) {
|
|
|
62
69
|
}
|
|
63
70
|
const id = nextId++;
|
|
64
71
|
pending.set(id, { resolve: resolve, reject });
|
|
65
|
-
|
|
72
|
+
// Through `hostRequestBytes` whenever the host has it, views or not: the
|
|
73
|
+
// host then answers with bytes beside the JSON too.
|
|
74
|
+
const { json, views } = liftBytes(params, bridge.hostRequestBytes !== undefined);
|
|
75
|
+
if (bridge.hostRequestBytes)
|
|
76
|
+
bridge.hostRequestBytes(id, kind, json, ...views);
|
|
77
|
+
else
|
|
78
|
+
bridge.hostRequest(id, kind, json);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The params as JSON with their bytes lifted out: each typed array or
|
|
83
|
+
* `ArrayBuffer` becomes `{ "$bytes": n }` and the nth of `views`, for a host
|
|
84
|
+
* with `hostRequestBytes`; without one, base64 of its bytes in place, the
|
|
85
|
+
* form every host reads (docs/notes/bytes.md).
|
|
86
|
+
*/
|
|
87
|
+
export function liftBytes(params, lift) {
|
|
88
|
+
const views = [];
|
|
89
|
+
const json = JSON.stringify(params, (_key, value) => {
|
|
90
|
+
const view = value instanceof ArrayBuffer ? new Uint8Array(value) : ArrayBuffer.isView(value) ? value : null;
|
|
91
|
+
if (!view)
|
|
92
|
+
return value;
|
|
93
|
+
if (!lift)
|
|
94
|
+
return base64Encode(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));
|
|
95
|
+
views.push(view);
|
|
96
|
+
return { $bytes: views.length - 1 };
|
|
66
97
|
});
|
|
98
|
+
return { json, views };
|
|
99
|
+
}
|
|
100
|
+
/** A JSON reviver putting `buffers` where the text says `{ "$bytes": n }`. */
|
|
101
|
+
function placeBytes(buffers) {
|
|
102
|
+
return (_key, value) => {
|
|
103
|
+
if (value && typeof value === 'object' && typeof value.$bytes === 'number') {
|
|
104
|
+
return buffers[value.$bytes] ?? value;
|
|
105
|
+
}
|
|
106
|
+
return value;
|
|
107
|
+
};
|
|
67
108
|
}
|
|
68
109
|
/** Forgets the bridge and the waiting requests, for tests. */
|
|
69
110
|
export function resetHostRequests() {
|
|
@@ -72,11 +113,11 @@ export function resetHostRequests() {
|
|
|
72
113
|
nextId = 1;
|
|
73
114
|
}
|
|
74
115
|
async function bridgedFile(file) {
|
|
75
|
-
return { name: file.name ?? 'file', type: file.type, data:
|
|
116
|
+
return { name: file.name ?? 'file', type: file.type, data: file.bytes() };
|
|
76
117
|
}
|
|
77
118
|
function filesOf(value) {
|
|
78
119
|
const files = value?.files ?? [];
|
|
79
|
-
return files.map((file) => new SimpleFile([
|
|
120
|
+
return files.map((file) => new SimpleFile([bridgedBytes(file.data)], file.name, { type: file.type }));
|
|
80
121
|
}
|
|
81
122
|
/**
|
|
82
123
|
* Opens the system's sign-in sheet at `url` and resolves with the callback
|
|
@@ -139,13 +180,16 @@ function nativeFiles(directories) {
|
|
|
139
180
|
fileWatchers.add(listener);
|
|
140
181
|
return () => void fileWatchers.delete(listener);
|
|
141
182
|
},
|
|
142
|
-
read: async (url) =>
|
|
143
|
-
write: (url, data) => files({ action: 'write', url, data
|
|
183
|
+
read: async (url) => bridgedBytes((await files({ action: 'read', url }))?.data ?? ''),
|
|
184
|
+
write: (url, data) => files({ action: 'write', url, data }).then(() => undefined),
|
|
144
185
|
remove: (url) => files({ action: 'remove', url }).then(() => undefined),
|
|
145
186
|
createDirectory: (url) => files({ action: 'createDirectory', url }).then(() => undefined),
|
|
146
187
|
list: async (url) => (await files({ action: 'list', url }))?.urls ?? [],
|
|
147
188
|
attributes: async (url) => {
|
|
148
|
-
const found = await files({
|
|
189
|
+
const found = await files({
|
|
190
|
+
action: 'attributes',
|
|
191
|
+
url,
|
|
192
|
+
});
|
|
149
193
|
if (!found || typeof found.size !== 'number')
|
|
150
194
|
return null;
|
|
151
195
|
return {
|
|
@@ -186,7 +230,7 @@ export function nativeHostEnvironment() {
|
|
|
186
230
|
},
|
|
187
231
|
canShare: () => true,
|
|
188
232
|
download: (blob, filename) => {
|
|
189
|
-
void hostRequest('share', { files: [{ name: filename, type: blob.type, data:
|
|
233
|
+
void hostRequest('share', { files: [{ name: filename, type: blob.type, data: blob.bytes() }] }).catch(() => undefined);
|
|
190
234
|
},
|
|
191
235
|
pickFiles: async (options) => filesOf(await hostRequest('pickFiles', { accept: options.accept, multiple: options.multiple })),
|
|
192
236
|
// `fileExporter`: the document picker, saving the files where the viewer chooses.
|
|
@@ -199,7 +243,7 @@ export function nativeHostEnvironment() {
|
|
|
199
243
|
writeText: (text) => hostRequest('clipboard', { action: 'write', text }).then(() => undefined),
|
|
200
244
|
writeImage: async (png) => {
|
|
201
245
|
const file = await png;
|
|
202
|
-
await hostRequest('clipboard', { action: 'write', files: [{ name: 'image.png', type: file.type || 'image/png', data:
|
|
246
|
+
await hostRequest('clipboard', { action: 'write', files: [{ name: 'image.png', type: file.type || 'image/png', data: file.bytes() }] });
|
|
203
247
|
},
|
|
204
248
|
readText: async () => (await hostRequest('clipboard', { action: 'readText' }))?.text ?? '',
|
|
205
249
|
},
|
|
@@ -209,6 +253,14 @@ export function nativeHostEnvironment() {
|
|
|
209
253
|
signIn: (options) => hostRequest('appleSignIn', { action: 'signIn', ...options }),
|
|
210
254
|
credentialState: async (user) => (await hostRequest('appleSignIn', { action: 'credentialState', user }))?.state ?? 'unknown',
|
|
211
255
|
},
|
|
256
|
+
// `AVAudioEngine` (AudioEngineBridge.swift): the app's engine commands, answered in the order sent.
|
|
257
|
+
audioEngine: {
|
|
258
|
+
perform: (command) => hostRequest('audioEngine', command),
|
|
259
|
+
},
|
|
260
|
+
// Foundation Models (LanguageModelBridge.swift): the app's sessions and streams, a `next` answered as a stream grows.
|
|
261
|
+
languageModel: {
|
|
262
|
+
perform: (command) => hostRequest('languageModel', command),
|
|
263
|
+
},
|
|
212
264
|
// `AVAudioRecorder` (AudioRecorderBridge.swift): a recording ends as a file URL in Documents; `trim` writes another.
|
|
213
265
|
audioRecorder: {
|
|
214
266
|
start: () => hostRequest('audioRecord', { action: 'start' }).then(() => undefined),
|
package/dist/hostRequests.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostRequests.js","sourceRoot":"","sources":["../src/hostRequests.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hostRequests.js","sourceRoot":"","sources":["../src/hostRequests.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAkBxC,IAAI,MAAM,GAA6B,IAAI,CAAC;AAC5C,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiF,CAAC;AAEzG,yEAAyE;AACzE,MAAM,UAAU,mBAAmB,CAAC,MAAyB;IAC3D,MAAM,GAAG,MAAM,CAAC;IAChB,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,qHAAqH;AACrH,MAAM,UAAU,mBAAmB,CAAC,EAAU,EAAE,MAAoD,EAAE,GAAG,OAA0B;IACjI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnB,IAAI,MAA2C,CAAC;IAChD,IAAI,CAAC;QACH,MAAM;YACJ,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAyC,CAAC,CAAC,CAAC,MAAM,CAAC;IACxJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;QACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,WAAW,CAAc,IAAY,EAAE,MAA+B;IACpF,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAmC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,yEAAyE;QACzE,oDAAoD;QACpD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC;QACjF,IAAI,MAAM,CAAC,gBAAgB;YAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;;YAC1E,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAAe,EAAE,IAAa;IACtD,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,KAAc,EAAE,EAAE;QAC3D,MAAM,IAAI,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7G,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI;YAAE,OAAO,YAAY,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9F,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,8EAA8E;AAC9E,SAAS,UAAU,CAAC,OAA0B;IAC5C,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACrG,OAAO,OAAO,CAAE,KAA4B,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;QAChE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,IAAI,CAAC;IACd,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,GAAG,CAAC,CAAC;AACb,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAoC;IAC7D,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,MAAM,KAAK,GAAI,KAA+C,EAAE,KAAK,IAAI,EAAE,CAAC;IAC5E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACxG,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,UAAkC,EAAE;IACrF,MAAM,MAAM,GAA4B,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACjE,IAAI,OAAO,CAAC,cAAc;QAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAC9E,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAC7E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAmB,SAAS,EAAE,MAAM,CAAC,CAAC;IACtE,IAAI,OAAO,MAAM,EAAE,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC,GAAG,CAAC;AACpB,CAAC;AASD,4FAA4F;AAC5F,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA6B,CAAC;QAC5D,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QACpE,IAAI,CAAC,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC/F,OAAO,EAAE,SAAS,EAAE,SAAU,EAAE,kBAAkB,EAAE,kBAAmB,EAAE,MAAM,EAAE,MAAO,EAAE,SAAS,EAAE,SAAU,EAAE,CAAC;QACpH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gEAAgE;AAChE,MAAM,YAAY,GAAG,IAAI,GAAG,EAA4B,CAAC;AAEzD,mHAAmH;AACnH,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3E,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,YAAY,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,8HAA8H;AAC9H,SAAS,WAAW,CAAC,WAA4B;IAC/C,MAAM,KAAK,GAAG,CAAI,MAA+B,EAAc,EAAE,CAAC,WAAW,CAAI,OAAO,EAAE,MAAM,CAAC,CAAC;IAClG,IAAI,MAAM,GAAkC,IAAI,CAAC;IACjD,OAAO;QACL,WAAW;QACX,+GAA+G;QAC/G,MAAM,EAAE,GAA2B,EAAE,CACnC,CAAC,MAAM,KAAK,KAAK,CAA0B,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxI,KAAK,EAAE,CAAC,QAAkC,EAAgB,EAAE;YAC1D,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO,GAAG,EAAE,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,GAAW,EAAuB,EAAE,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAiC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QAClJ,KAAK,EAAE,CAAC,GAAW,EAAE,IAAgB,EAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QACpH,MAAM,EAAE,CAAC,GAAW,EAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QAC9F,eAAe,EAAE,CAAC,GAAW,EAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QAChH,IAAI,EAAE,KAAK,EAAE,GAAW,EAAqB,EAAE,CAAC,CAAC,MAAM,KAAK,CAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;QACvH,UAAU,EAAE,KAAK,EAAE,GAAW,EAAuH,EAAE;YACrJ,MAAM,KAAK,GAAG,MAAM,KAAK,CAAkH;gBACzI,MAAM,EAAE,YAAY;gBACpB,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAC1D,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;gBACpE,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;gBACjE,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI;gBACnC,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;aACvD,CAAC;QACJ,CAAC;QACD,IAAI,EAAE,CAAC,IAAY,EAAE,EAAU,EAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QAC5G,IAAI,EAAE,CAAC,IAAY,EAAE,EAAU,EAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QAC5G,2IAA2I;QAC3I,OAAO,EAAE,KAAK,EAAE,GAAW,EAAmB,EAAE,CAAC,CAAC,MAAM,KAAK,CAA0B,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG;KACjI,CAAC;AACJ,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,qBAAqB;IACnC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO;QACL,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,KAAK,EAAE,KAAK,EAAE,IAA2E,EAAiB,EAAE;YAC1G,MAAM,MAAM,GAA4B,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAC7C,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YAC1C,IAAI,IAAI,CAAC,GAAG;gBAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;YACvC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM;gBAAE,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;YACzF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAuB,OAAO,EAAE,MAAM,CAAC,CAAC;YACxE,IAAI,MAAM,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBACxE,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;gBAC1B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;QACpB,QAAQ,EAAE,CAAC,IAAgB,EAAE,QAAgB,EAAQ,EAAE;YACrD,KAAK,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzH,CAAC;QACD,SAAS,EAAE,KAAK,EAAE,OAA8C,EAAyB,EAAE,CACzF,OAAO,CAAC,MAAM,WAAW,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjG,kFAAkF;QAClF,WAAW,EAAE,KAAK,EAAE,KAAmB,EAAiD,EAAE;YACxF,MAAM,MAAM,GAAG,MAAM,WAAW,CAA+C,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YACpJ,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACrG,CAAC;QACD,SAAS,EAAE,CAAC,IAAgB,EAAU,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QACxD,SAAS,EAAE;YACT,SAAS,EAAE,CAAC,IAAY,EAAiB,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YACrH,UAAU,EAAE,KAAK,EAAE,GAAwB,EAAiB,EAAE;gBAC5D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC;gBACvB,MAAM,WAAW,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1I,CAAC;YACD,QAAQ,EAAE,KAAK,IAAqB,EAAE,CAAC,CAAC,MAAM,WAAW,CAAoB,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;SAC/H;QACD,SAAS,EAAE,KAAK,EAAE,KAAa,EAA0B,EAAE,CAAC,CAAC,MAAM,WAAW,CAAqB,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI;QAC1I,8FAA8F;QAC9F,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,OAA6D,EAAoB,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;YACzJ,eAAe,EAAE,KAAK,EAAE,IAAY,EAAmB,EAAE,CACvD,CAAC,MAAM,WAAW,CAA4B,aAAa,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,IAAI,SAAS;SACzH;QACD,oGAAoG;QACpG,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,OAAgC,EAAoB,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC;SACrG;QACD,sHAAsH;QACtH,aAAa,EAAE;YACb,OAAO,EAAE,CAAC,OAAgC,EAAoB,EAAE,CAAC,WAAW,CAAC,eAAe,EAAE,OAAO,CAAC;SACvG;QACD,qHAAqH;QACrH,aAAa,EAAE;YACb,KAAK,EAAE,GAAkB,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YACjG,KAAK,EAAE,GAAkB,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YACjG,MAAM,EAAE,GAAkB,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YACnG,IAAI,EAAE,GAA6D,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACpH,MAAM,EAAE,GAAkB,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YACnG,KAAK,EAAE,GAA6C,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YACtG,OAAO,EAAE,CAAC,GAAW,EAAiB,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YACrH,IAAI,EAAE,CAAC,GAAW,EAAE,IAA+C,EAA4D,EAAE,CAC/H,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;SAC3H;KACF,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,sBAAsB,CAAC,WAAoC;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,IAAI,IAAI,IAAI,WAAW,CAAC,aAAa,CAAC,KAAK,SAAS;QAAE,WAAW,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACxF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC;QACnE,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC/D,CAAC;AACH,CAAC"}
|
package/dist/ios.d.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a CI job needs to hand an app's iOS build to phones, outside Xcode:
|
|
3
|
+
* an ad hoc provisioning profile made fresh through the App Store Connect
|
|
4
|
+
* API, and the over-the-air install page around the exported IPA. The
|
|
5
|
+
* reusable workflows (.github/workflows/sb-ios-adhoc.yml in the SwiftBrowser
|
|
6
|
+
* repository) run them as `swiftbrowser-native ios-profile` and
|
|
7
|
+
* `swiftbrowser-native ios-install-page`, from the app's own
|
|
8
|
+
* node_modules, so they come at the version of the app's @swiftbrowser
|
|
9
|
+
* packages.
|
|
10
|
+
*/
|
|
11
|
+
export interface AppStoreConnectKey {
|
|
12
|
+
/** The key's ID (ASC_KEY_ID). */
|
|
13
|
+
keyId: string;
|
|
14
|
+
/** The team's issuer ID (ASC_ISSUER_ID). */
|
|
15
|
+
issuer: string;
|
|
16
|
+
/** The .p8 key's text (ASC_KEY_P8). It needs the Admin or App Manager role. */
|
|
17
|
+
key: string;
|
|
18
|
+
}
|
|
19
|
+
export interface AdhocProfileOptions extends AppStoreConnectKey {
|
|
20
|
+
bundleId: string;
|
|
21
|
+
/** The profile's name, which the archive's PROVISIONING_PROFILE_SPECIFIER names. */
|
|
22
|
+
profileName: string;
|
|
23
|
+
/** The app's name, for the bundle ID when the team has none yet. */
|
|
24
|
+
appName: string;
|
|
25
|
+
/** Where profiles are installed; the user's home by default. */
|
|
26
|
+
home?: string;
|
|
27
|
+
/** For tests. */
|
|
28
|
+
fetch?: typeof fetch;
|
|
29
|
+
log?: (line: string) => void;
|
|
30
|
+
}
|
|
31
|
+
export interface AdhocProfile {
|
|
32
|
+
uuid: string;
|
|
33
|
+
/** The files written, one per folder Xcode reads profiles from. */
|
|
34
|
+
files: string[];
|
|
35
|
+
devices: string[];
|
|
36
|
+
certificates: number;
|
|
37
|
+
}
|
|
38
|
+
/** A JWT for the App Store Connect API, good for 20 minutes. */
|
|
39
|
+
export declare function appStoreConnectToken({ keyId, issuer, key }: AppStoreConnectKey, now?: number): string;
|
|
40
|
+
/**
|
|
41
|
+
* Makes the ad hoc profile `profileName` for `bundleId` again, with every
|
|
42
|
+
* enabled iOS device and every valid distribution certificate of the team,
|
|
43
|
+
* so a phone registered since the last build is in the next one: registers
|
|
44
|
+
* the bundle ID when the team has none, deletes the profile of that name if
|
|
45
|
+
* there is one, and installs the new one where Xcode looks.
|
|
46
|
+
*/
|
|
47
|
+
export declare function makeAdhocProfile(options: AdhocProfileOptions): Promise<AdhocProfile>;
|
|
48
|
+
export interface InstallPageOptions {
|
|
49
|
+
/** The exported IPA. */
|
|
50
|
+
ipa: string;
|
|
51
|
+
/** Where the page will be served from (`https://ios.app.pages.dev`): the manifest names the IPA there. */
|
|
52
|
+
url: string;
|
|
53
|
+
bundleId: string;
|
|
54
|
+
/** The build's version (`1.0.42`), its CFBundleVersion. */
|
|
55
|
+
version: string;
|
|
56
|
+
/** The app's name on the page and in the install prompt; the IPA's name by default. */
|
|
57
|
+
title?: string;
|
|
58
|
+
/** The same app in the browser, linked from the page. */
|
|
59
|
+
web?: string;
|
|
60
|
+
/** The commit it was built from. */
|
|
61
|
+
commit?: string;
|
|
62
|
+
/** When it was built; now by default. */
|
|
63
|
+
built?: Date;
|
|
64
|
+
}
|
|
65
|
+
/** The itms-services manifest for an IPA served at `ipaUrl`. */
|
|
66
|
+
export declare function installManifest({ ipaUrl, bundleId, version, title }: {
|
|
67
|
+
ipaUrl: string;
|
|
68
|
+
bundleId: string;
|
|
69
|
+
version: string;
|
|
70
|
+
title: string;
|
|
71
|
+
}): string;
|
|
72
|
+
/**
|
|
73
|
+
* Writes the install page into `outDir`: the IPA, its manifest, an
|
|
74
|
+
* `index.html` whose button installs it over the air (on a phone the
|
|
75
|
+
* profile names), and the `_headers` Cloudflare Pages serves them with.
|
|
76
|
+
* Returns the files written, relative to `outDir`.
|
|
77
|
+
*/
|
|
78
|
+
export declare function writeInstallPage(outDir: string, options: InstallPageOptions): string[];
|
|
79
|
+
//# sourceMappingURL=ios.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../src/ios.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,kBAAkB,EAAE,GAAG,SAAa,GAAG,MAAM,CAMzG;AAOD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAiF1F;AAED,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,0GAA0G;IAC1G,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,IAAI,CAAC;CACd;AAID,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAgBlJ;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAyDtF"}
|
package/dist/ios.js
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a CI job needs to hand an app's iOS build to phones, outside Xcode:
|
|
3
|
+
* an ad hoc provisioning profile made fresh through the App Store Connect
|
|
4
|
+
* API, and the over-the-air install page around the exported IPA. The
|
|
5
|
+
* reusable workflows (.github/workflows/sb-ios-adhoc.yml in the SwiftBrowser
|
|
6
|
+
* repository) run them as `swiftbrowser-native ios-profile` and
|
|
7
|
+
* `swiftbrowser-native ios-install-page`, from the app's own
|
|
8
|
+
* node_modules, so they come at the version of the app's @swiftbrowser
|
|
9
|
+
* packages.
|
|
10
|
+
*/
|
|
11
|
+
import { sign } from 'node:crypto';
|
|
12
|
+
import { copyFileSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
13
|
+
import { homedir } from 'node:os';
|
|
14
|
+
import { basename, join } from 'node:path';
|
|
15
|
+
/** A JWT for the App Store Connect API, good for 20 minutes. */
|
|
16
|
+
export function appStoreConnectToken({ keyId, issuer, key }, now = Date.now()) {
|
|
17
|
+
const encode = (value) => Buffer.from(JSON.stringify(value)).toString('base64url');
|
|
18
|
+
const seconds = Math.floor(now / 1000);
|
|
19
|
+
const body = `${encode({ alg: 'ES256', kid: keyId, typ: 'JWT' })}.${encode({ iss: issuer, iat: seconds, exp: seconds + 1200, aud: 'appstoreconnect-v1' })}`;
|
|
20
|
+
const signature = sign('sha256', Buffer.from(body), { key, dsaEncoding: 'ieee-p1363' });
|
|
21
|
+
return `${body}.${signature.toString('base64url')}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Makes the ad hoc profile `profileName` for `bundleId` again, with every
|
|
25
|
+
* enabled iOS device and every valid distribution certificate of the team,
|
|
26
|
+
* so a phone registered since the last build is in the next one: registers
|
|
27
|
+
* the bundle ID when the team has none, deletes the profile of that name if
|
|
28
|
+
* there is one, and installs the new one where Xcode looks.
|
|
29
|
+
*/
|
|
30
|
+
export async function makeAdhocProfile(options) {
|
|
31
|
+
const { bundleId, profileName, appName } = options;
|
|
32
|
+
const request = options.fetch ?? fetch;
|
|
33
|
+
const log = options.log ?? ((line) => console.log(line));
|
|
34
|
+
const authorization = `Bearer ${appStoreConnectToken(options)}`;
|
|
35
|
+
const api = async (method, path, body) => {
|
|
36
|
+
const response = await request(`https://api.appstoreconnect.apple.com${path}`, {
|
|
37
|
+
method,
|
|
38
|
+
headers: { authorization, 'content-type': 'application/json' },
|
|
39
|
+
...(body === undefined ? {} : { body: JSON.stringify(body) }),
|
|
40
|
+
});
|
|
41
|
+
const text = await response.text();
|
|
42
|
+
if (!response.ok)
|
|
43
|
+
throw new Error(`${method} ${path}: ${response.status} ${text}`);
|
|
44
|
+
return text ? JSON.parse(text) : null;
|
|
45
|
+
};
|
|
46
|
+
/** Every page of a list. */
|
|
47
|
+
const list = async (path) => {
|
|
48
|
+
const items = [];
|
|
49
|
+
let next = path;
|
|
50
|
+
while (next) {
|
|
51
|
+
const page = await api('GET', next);
|
|
52
|
+
items.push(...(page?.data ?? []));
|
|
53
|
+
const link = page?.links?.next;
|
|
54
|
+
next = link ? new URL(link).pathname + new URL(link).search : null;
|
|
55
|
+
}
|
|
56
|
+
return items;
|
|
57
|
+
};
|
|
58
|
+
const query = (params) => new URLSearchParams(params).toString();
|
|
59
|
+
let bundle = (await list(`/v1/bundleIds?${query({ 'filter[identifier]': bundleId, limit: '200' })}`)).find((item) => item.attributes['identifier'] === bundleId);
|
|
60
|
+
if (!bundle) {
|
|
61
|
+
log(`Registering the bundle ID ${bundleId}.`);
|
|
62
|
+
bundle = (await api('POST', '/v1/bundleIds', { data: { type: 'bundleIds', attributes: { identifier: bundleId, name: appName, platform: 'IOS' } } }))
|
|
63
|
+
.data;
|
|
64
|
+
}
|
|
65
|
+
const now = Date.now();
|
|
66
|
+
const certificates = (await list(`/v1/certificates?${query({ 'filter[certificateType]': 'DISTRIBUTION,IOS_DISTRIBUTION', limit: '200' })}`)).filter((item) => !item.attributes['expirationDate'] || Date.parse(item.attributes['expirationDate']) > now);
|
|
67
|
+
if (certificates.length === 0)
|
|
68
|
+
throw new Error('The team has no valid distribution certificate.');
|
|
69
|
+
const devices = await list(`/v1/devices?${query({ 'filter[platform]': 'IOS', 'filter[status]': 'ENABLED', limit: '200' })}`);
|
|
70
|
+
if (devices.length === 0)
|
|
71
|
+
throw new Error('The team has no enabled iOS devices: an ad hoc profile needs at least one.');
|
|
72
|
+
for (const old of await list(`/v1/profiles?${query({ 'filter[name]': profileName, limit: '200' })}`)) {
|
|
73
|
+
if (old.attributes['name'] !== profileName)
|
|
74
|
+
continue;
|
|
75
|
+
log(`Deleting the old profile ${old.id}.`);
|
|
76
|
+
await api('DELETE', `/v1/profiles/${old.id}`);
|
|
77
|
+
}
|
|
78
|
+
const profile = (await api('POST', '/v1/profiles', {
|
|
79
|
+
data: {
|
|
80
|
+
type: 'profiles',
|
|
81
|
+
attributes: { name: profileName, profileType: 'IOS_APP_ADHOC' },
|
|
82
|
+
relationships: {
|
|
83
|
+
bundleId: { data: { type: 'bundleIds', id: bundle.id } },
|
|
84
|
+
certificates: { data: certificates.map((item) => ({ type: 'certificates', id: item.id })) },
|
|
85
|
+
devices: { data: devices.map((item) => ({ type: 'devices', id: item.id })) },
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
})).data;
|
|
89
|
+
const uuid = profile.attributes['uuid'];
|
|
90
|
+
const content = Buffer.from(profile.attributes['profileContent'], 'base64');
|
|
91
|
+
const home = options.home ?? homedir();
|
|
92
|
+
const files = [];
|
|
93
|
+
// Xcode 16 and later read the first; older ones the second.
|
|
94
|
+
for (const dir of [join(home, 'Library/Developer/Xcode/UserData/Provisioning Profiles'), join(home, 'Library/MobileDevice/Provisioning Profiles')]) {
|
|
95
|
+
mkdirSync(dir, { recursive: true });
|
|
96
|
+
const file = join(dir, `${uuid}.mobileprovision`);
|
|
97
|
+
writeFileSync(file, content);
|
|
98
|
+
files.push(file);
|
|
99
|
+
}
|
|
100
|
+
const names = devices.map((device) => `${device.attributes['name']} (${device.attributes['model'] ?? device.attributes['deviceClass']})`);
|
|
101
|
+
log(`Made "${profileName}" (${uuid}) for ${bundleId}: ${devices.length} device(s), ${certificates.length} certificate(s).`);
|
|
102
|
+
for (const name of names)
|
|
103
|
+
log(`- ${name}`);
|
|
104
|
+
return { uuid, files, devices: names, certificates: certificates.length };
|
|
105
|
+
}
|
|
106
|
+
const escapeXml = (text) => text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
107
|
+
/** The itms-services manifest for an IPA served at `ipaUrl`. */
|
|
108
|
+
export function installManifest({ ipaUrl, bundleId, version, title }) {
|
|
109
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
110
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
111
|
+
<plist version="1.0"><dict><key>items</key><array><dict>
|
|
112
|
+
<key>assets</key><array><dict>
|
|
113
|
+
<key>kind</key><string>software-package</string>
|
|
114
|
+
<key>url</key><string>${escapeXml(ipaUrl)}</string>
|
|
115
|
+
</dict></array>
|
|
116
|
+
<key>metadata</key><dict>
|
|
117
|
+
<key>bundle-identifier</key><string>${escapeXml(bundleId)}</string>
|
|
118
|
+
<key>bundle-version</key><string>${escapeXml(version)}</string>
|
|
119
|
+
<key>kind</key><string>software</string>
|
|
120
|
+
<key>title</key><string>${escapeXml(title)}</string>
|
|
121
|
+
</dict>
|
|
122
|
+
</dict></array></dict></plist>
|
|
123
|
+
`;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Writes the install page into `outDir`: the IPA, its manifest, an
|
|
127
|
+
* `index.html` whose button installs it over the air (on a phone the
|
|
128
|
+
* profile names), and the `_headers` Cloudflare Pages serves them with.
|
|
129
|
+
* Returns the files written, relative to `outDir`.
|
|
130
|
+
*/
|
|
131
|
+
export function writeInstallPage(outDir, options) {
|
|
132
|
+
const ipaName = basename(options.ipa);
|
|
133
|
+
const title = options.title ?? ipaName.replace(/\.ipa$/, '');
|
|
134
|
+
const base = options.url.replace(/\/+$/, '');
|
|
135
|
+
const built = (options.built ?? new Date()).toISOString().replace('T', ' ').slice(0, 16) + ' UTC';
|
|
136
|
+
const html = (text) => escapeXml(text);
|
|
137
|
+
mkdirSync(outDir, { recursive: true });
|
|
138
|
+
copyFileSync(options.ipa, join(outDir, ipaName));
|
|
139
|
+
writeFileSync(join(outDir, 'manifest.plist'), installManifest({ ipaUrl: `${base}/${ipaName}`, bundleId: options.bundleId, version: options.version, title }));
|
|
140
|
+
writeFileSync(join(outDir, '_headers'), `/manifest.plist
|
|
141
|
+
Content-Type: application/xml
|
|
142
|
+
Cache-Control: no-store
|
|
143
|
+
/${ipaName}
|
|
144
|
+
Content-Type: application/octet-stream
|
|
145
|
+
Cache-Control: no-store
|
|
146
|
+
`);
|
|
147
|
+
const install = `itms-services://?action=download-manifest&url=${base}/manifest.plist`;
|
|
148
|
+
writeFileSync(join(outDir, 'index.html'), `<!doctype html>
|
|
149
|
+
<html lang="en">
|
|
150
|
+
<head>
|
|
151
|
+
<meta charset="utf-8" />
|
|
152
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
153
|
+
<meta name="color-scheme" content="light dark" />
|
|
154
|
+
<title>Install ${html(title)}</title>
|
|
155
|
+
<style>
|
|
156
|
+
:root { --bg: #f2f2f7; --card: #fff; --fg: #000; --muted: #6e6e73; --tint: #007aff; }
|
|
157
|
+
@media (prefers-color-scheme: dark) { :root { --bg: #000; --card: #1c1c1e; --fg: #fff; --muted: #98989f; --tint: #0a84ff; } }
|
|
158
|
+
* { box-sizing: border-box; }
|
|
159
|
+
body { margin: 0; min-height: 100vh; display: grid; place-items: center; padding: 24px 16px;
|
|
160
|
+
background: var(--bg); color: var(--fg); font: 17px/1.4 -apple-system, BlinkMacSystemFont, system-ui, sans-serif; }
|
|
161
|
+
main { width: 100%; max-width: 420px; background: var(--card); border-radius: 22px; padding: 28px 24px; text-align: center; }
|
|
162
|
+
h1 { font-size: 28px; margin: 0 0 4px; }
|
|
163
|
+
p { color: var(--muted); margin: 8px 0; font-size: 15px; }
|
|
164
|
+
a.install { display: block; margin: 24px 0 16px; padding: 14px; border-radius: 14px; background: var(--tint);
|
|
165
|
+
color: #fff; font-weight: 600; text-decoration: none; }
|
|
166
|
+
a { color: var(--tint); }
|
|
167
|
+
</style>
|
|
168
|
+
</head>
|
|
169
|
+
<body>
|
|
170
|
+
<main>
|
|
171
|
+
<h1>${html(title)}</h1>
|
|
172
|
+
<p>Version ${html(options.version)} · built ${built}${options.commit ? ` from ${html(options.commit.slice(0, 7))}` : ''}</p>
|
|
173
|
+
<a class="install" href="${html(install)}">Install on this iPhone</a>
|
|
174
|
+
<p>Open this page in Safari on an iPhone whose device is registered with the team: an ad hoc build installs only on the devices its profile names. After installing, open Settings → General → VPN & Device Management if iOS asks you to trust the developer.</p>${options.web ? `\n <p><a href="${html(options.web)}">Try it in the browser</a></p>` : ''}
|
|
175
|
+
</main>
|
|
176
|
+
</body>
|
|
177
|
+
</html>
|
|
178
|
+
`);
|
|
179
|
+
return [ipaName, 'manifest.plist', '_headers', 'index.html'];
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=ios.js.map
|
package/dist/ios.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ios.js","sourceRoot":"","sources":["../src/ios.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAsB3D,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,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAsB3D,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,CAmTnJ"}
|
package/dist/runtime.js
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* here.
|
|
33
33
|
*/
|
|
34
34
|
import { nativeBridge } from './bridge';
|
|
35
|
-
import { atobPolyfill, base64Decode, btoaPolyfill, SimpleTextDecoder, SimpleTextEncoder } from './encoding';
|
|
35
|
+
import { atobPolyfill, base64Decode, btoaPolyfill, installNativeUTF8, SimpleTextDecoder, SimpleTextEncoder } from './encoding';
|
|
36
36
|
import { createFetch } from './fetch';
|
|
37
37
|
import { createImageGlobals } from './image';
|
|
38
38
|
import { SimpleURL, SimpleURLSearchParams } from './url';
|
|
@@ -172,7 +172,12 @@ export function installRuntime(native, target = globalThis, options = {}) {
|
|
|
172
172
|
define('TextDecoder', SimpleTextDecoder);
|
|
173
173
|
define('atob', atobPolyfill);
|
|
174
174
|
define('btoa', btoaPolyfill);
|
|
175
|
-
|
|
175
|
+
// Typed arrays beside the JSON both ways (docs/notes/bytes.md): a host with
|
|
176
|
+
// `hostRequestBytes` carries them for fetch, sockets and files alike.
|
|
177
|
+
const carriesBytes = typeof native.hostRequestBytes === 'function';
|
|
178
|
+
// UTF-8 on the host past a few dozen characters (encoding.ts).
|
|
179
|
+
installNativeUTF8(native.decodeUTF8 && native.encodeUTF8 ? { decode: native.decodeUTF8.bind(native), encode: native.encodeUTF8.bind(native) } : null);
|
|
180
|
+
const fetchGlobals = createFetch(native, { bytes: carriesBytes });
|
|
176
181
|
define('fetch', fetchGlobals.fetch);
|
|
177
182
|
define('Headers', fetchGlobals.Headers);
|
|
178
183
|
define('Request', fetchGlobals.Request);
|
|
@@ -192,11 +197,11 @@ export function installRuntime(native, target = globalThis, options = {}) {
|
|
|
192
197
|
urlStatics.createObjectURL = (blob) => objectURL(blob);
|
|
193
198
|
urlStatics.revokeObjectURL = () => { };
|
|
194
199
|
}
|
|
195
|
-
const random = (count) => base64Decode(native.randomBytes(count));
|
|
200
|
+
const random = (count) => (native.randomValues ? native.randomValues(count) : base64Decode(native.randomBytes(count)));
|
|
196
201
|
setBodyRandomness(random);
|
|
197
202
|
// WebSockets (webSocket.ts) over the host's `URLSessionWebSocketTask`.
|
|
198
203
|
if (native.wsOpen && native.wsSend && native.wsClose) {
|
|
199
|
-
NativeWebSocket.install({ wsOpen: native.wsOpen.bind(native), wsSend: native.wsSend.bind(native), wsClose: native.wsClose.bind(native) });
|
|
204
|
+
NativeWebSocket.install({ wsOpen: native.wsOpen.bind(native), wsSend: native.wsSend.bind(native), wsClose: native.wsClose.bind(native) }, { bytes: carriesBytes });
|
|
200
205
|
define('WebSocket', NativeWebSocket);
|
|
201
206
|
define('__sbWebSocketEvent', NativeWebSocket.receive);
|
|
202
207
|
}
|
|
@@ -204,7 +209,11 @@ export function installRuntime(native, target = globalThis, options = {}) {
|
|
|
204
209
|
define('matchMedia', matchMedia);
|
|
205
210
|
// Host requests (hostRequests.ts): the share sheet, the pickers, the pasteboard, a sign-in.
|
|
206
211
|
if (native.hostRequest && !native.workerPostMessage) {
|
|
207
|
-
installHostRequests({
|
|
212
|
+
installHostRequests({
|
|
213
|
+
hostRequest: native.hostRequest.bind(native),
|
|
214
|
+
...(native.hostRequestBytes ? { hostRequestBytes: native.hostRequestBytes.bind(native) } : {}),
|
|
215
|
+
...(native.appDirectories ? { appDirectories: native.appDirectories.bind(native) } : {}),
|
|
216
|
+
});
|
|
208
217
|
define('__sbHostResponse', receiveHostResponse);
|
|
209
218
|
define('__sbFilesChanged', receiveFilesChanged);
|
|
210
219
|
// The escape hatch's functions (nativeFunctions.ts): `callNative` rides `hostRequest`.
|
|
@@ -235,14 +244,14 @@ export function installRuntime(native, target = globalThis, options = {}) {
|
|
|
235
244
|
}
|
|
236
245
|
define('crypto', {
|
|
237
246
|
getRandomValues: (array) => {
|
|
238
|
-
const bytes =
|
|
247
|
+
const bytes = random(array.byteLength);
|
|
239
248
|
new Uint8Array(array.buffer, array.byteOffset, array.byteLength).set(bytes.subarray(0, array.byteLength));
|
|
240
249
|
return array;
|
|
241
250
|
},
|
|
242
251
|
// Digests and HMAC on the host's CryptoKit (subtle.ts).
|
|
243
252
|
subtle: createSubtleCrypto(native),
|
|
244
253
|
randomUUID: () => {
|
|
245
|
-
const bytes =
|
|
254
|
+
const bytes = new Uint8Array(random(16));
|
|
246
255
|
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
247
256
|
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
248
257
|
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
|