@flighthq/protocol 0.4.0-next.1898.266773a → 0.4.0-next.1908.751021c
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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +5 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +74 -80
- package/dist/protocol.js.map +1 -1
- package/package.json +3 -3
- package/src/protocol.test.ts +88 -20
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { attachProtocolHandler, createProtocolHandler, createProtocolUrl, detachProtocolHandler, disposeProtocolHandler, getProtocolLaunchUrl, getRegisteredProtocolSchemes, isProtocolSchemeDefault, isProtocolSchemeRegistered, isValidProtocolScheme, parseProtocolUrl, registerProtocolScheme, registerProtocolSchemes, removeProtocolSchemeAsDefault, setProtocolSchemeAsDefault, unregisterProtocolScheme, unregisterProtocolSchemes, } from './contract';
|
|
1
|
+
export { attachProtocolHandler, createProtocolHandler, createProtocolUrl, detachProtocolHandler, disposeProtocolHandler, explainProtocolBackend, getProtocolLaunchUrl, getRegisteredProtocolSchemes, isProtocolSchemeDefault, isProtocolSchemeRegistered, isValidProtocolScheme, parseProtocolUrl, registerProtocolScheme, registerProtocolSchemes, removeProtocolSchemeAsDefault, setProtocolSchemeAsDefault, unregisterProtocolScheme, unregisterProtocolSchemes, } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { attachProtocolHandler, createProtocolHandler, createProtocolUrl, detachProtocolHandler, disposeProtocolHandler, getProtocolLaunchUrl, getRegisteredProtocolSchemes, isProtocolSchemeDefault, isProtocolSchemeRegistered, isValidProtocolScheme, parseProtocolUrl, registerProtocolScheme, registerProtocolSchemes, removeProtocolSchemeAsDefault, setProtocolSchemeAsDefault, unregisterProtocolScheme, unregisterProtocolSchemes, } from './contract';
|
|
1
|
+
export { attachProtocolHandler, createProtocolHandler, createProtocolUrl, detachProtocolHandler, disposeProtocolHandler, explainProtocolBackend, getProtocolLaunchUrl, getRegisteredProtocolSchemes, isProtocolSchemeDefault, isProtocolSchemeRegistered, isValidProtocolScheme, parseProtocolUrl, registerProtocolScheme, registerProtocolSchemes, removeProtocolSchemeAsDefault, setProtocolSchemeAsDefault, unregisterProtocolScheme, unregisterProtocolSchemes, } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
|
package/dist/protocol.d.ts
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
import type { ParsedProtocolUrl, ProtocolBackend, ProtocolHandler } from '@flighthq/types/contract';
|
|
1
|
+
import type { BackendExplanation, ParsedProtocolUrl, ProtocolBackend, ProtocolHandler } from '@flighthq/types/contract';
|
|
2
2
|
export declare function attachProtocolHandler(handler: ProtocolHandler): void;
|
|
3
3
|
export declare function createProtocolHandler(): ProtocolHandler;
|
|
4
4
|
export declare function createProtocolUrl(parts: Readonly<Partial<ParsedProtocolUrl>>): string;
|
|
5
|
-
export declare function createWebProtocolBackend(): ProtocolBackend;
|
|
6
5
|
export declare function detachProtocolHandler(handler: ProtocolHandler): void;
|
|
7
6
|
export declare function disposeProtocolHandler(handler: ProtocolHandler): void;
|
|
7
|
+
export declare function explainProtocolBackend(): BackendExplanation;
|
|
8
8
|
export declare function getProtocolBackend(): ProtocolBackend;
|
|
9
9
|
export declare function getProtocolLaunchUrl(): string | null;
|
|
10
10
|
export declare function getRegisteredProtocolSchemes(): readonly string[];
|
|
11
|
+
export declare function installProtocolHostBackend(backend: ProtocolBackend): void;
|
|
11
12
|
export declare function isProtocolSchemeDefault(scheme: string): boolean;
|
|
12
13
|
export declare function isProtocolSchemeRegistered(scheme: string): boolean;
|
|
13
14
|
export declare function isValidProtocolScheme(scheme: string): boolean;
|
|
15
|
+
export declare function observeProtocolHostResult(operation: string, succeeded: boolean): void;
|
|
14
16
|
export declare function parseProtocolUrl(url: string): ParsedProtocolUrl | null;
|
|
15
17
|
export declare function registerProtocolScheme(scheme: string): boolean;
|
|
16
18
|
export declare function registerProtocolSchemes(schemes: readonly string[]): boolean;
|
|
17
19
|
export declare function removeProtocolSchemeAsDefault(scheme: string): boolean;
|
|
20
|
+
export declare function resetProtocolBackendForTest(): void;
|
|
18
21
|
export declare function setProtocolBackend(backend: ProtocolBackend | null): void;
|
|
19
22
|
export declare function setProtocolSchemeAsDefault(scheme: string): boolean;
|
|
20
23
|
export declare function unregisterProtocolScheme(scheme: string): boolean;
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAOxH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAUpE;AAID,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,MAAM,CAgBrF;AAGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAMpE;AAID,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAErE;AAED,wBAAgB,sBAAsB,IAAI,kBAAkB,CAa3D;AAGD,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AAKD,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAEpD;AAID,wBAAgB,4BAA4B,IAAI,SAAS,MAAM,EAAE,CAEhE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAMzE;AAID,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE/D;AAGD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElE;AAMD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAK7D;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAKrF;AAMD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAuDtE;AAKD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAG9D;AAID,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAO3E;AAID,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErE;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAKlD;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAExE;AAID,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElE;AAID,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAGD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAO7E"}
|
package/dist/protocol.js
CHANGED
|
@@ -40,79 +40,6 @@ export function createProtocolUrl(parts) {
|
|
|
40
40
|
}
|
|
41
41
|
return url;
|
|
42
42
|
}
|
|
43
|
-
// Builds the default web backend over navigator.registerProtocolHandler. Registration degrades to
|
|
44
|
-
// false where the API is absent. Deep-link delivery needs a native host, so subscribe is inert.
|
|
45
|
-
export function createWebProtocolBackend() {
|
|
46
|
-
const _registeredSchemes = [];
|
|
47
|
-
return {
|
|
48
|
-
register(scheme) {
|
|
49
|
-
if (typeof navigator === 'undefined' || typeof location === 'undefined')
|
|
50
|
-
return false;
|
|
51
|
-
const nav = navigator;
|
|
52
|
-
if (typeof nav.registerProtocolHandler !== 'function')
|
|
53
|
-
return false;
|
|
54
|
-
try {
|
|
55
|
-
nav.registerProtocolHandler(scheme, location.origin + '/?url=%s');
|
|
56
|
-
if (!_registeredSchemes.includes(scheme))
|
|
57
|
-
_registeredSchemes.push(scheme);
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
unregister(scheme) {
|
|
65
|
-
// The web platform offers no programmatic unregister; report failure rather than throw.
|
|
66
|
-
const idx = _registeredSchemes.indexOf(scheme);
|
|
67
|
-
if (idx >= 0)
|
|
68
|
-
_registeredSchemes.splice(idx, 1);
|
|
69
|
-
return false;
|
|
70
|
-
},
|
|
71
|
-
isRegistered() {
|
|
72
|
-
// The web platform offers no registration query; report not-registered.
|
|
73
|
-
return false;
|
|
74
|
-
},
|
|
75
|
-
getRegisteredSchemes() {
|
|
76
|
-
// Web cannot enumerate registered schemes reliably; return what we tracked locally.
|
|
77
|
-
return _registeredSchemes.slice();
|
|
78
|
-
},
|
|
79
|
-
setAsDefault() {
|
|
80
|
-
// The web platform cannot claim a scheme as the OS default; report failure.
|
|
81
|
-
return false;
|
|
82
|
-
},
|
|
83
|
-
isDefault() {
|
|
84
|
-
// The web platform cannot query OS default handler; report false.
|
|
85
|
-
return false;
|
|
86
|
-
},
|
|
87
|
-
removeAsDefault() {
|
|
88
|
-
// The web platform cannot remove an OS default handler; report failure.
|
|
89
|
-
return false;
|
|
90
|
-
},
|
|
91
|
-
getLaunchUrl() {
|
|
92
|
-
// On the web the registered handler redirects to /?url=<encoded-url>. Read that query param as
|
|
93
|
-
// the cold-start launch URL when present.
|
|
94
|
-
if (typeof location === 'undefined')
|
|
95
|
-
return null;
|
|
96
|
-
try {
|
|
97
|
-
const params = new URLSearchParams(location.search);
|
|
98
|
-
const url = params.get('url');
|
|
99
|
-
return url && url.length > 0 ? url : null;
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
drainPendingUrls() {
|
|
106
|
-
// The web backend has no pre-attach buffering; the cold-start URL is handled by getLaunchUrl.
|
|
107
|
-
return [];
|
|
108
|
-
},
|
|
109
|
-
subscribe() {
|
|
110
|
-
// Web deep-link delivery requires a native host to route incoming URLs into the page; the web
|
|
111
|
-
// backend cannot observe protocol opens on its own, so this subscription is inert.
|
|
112
|
-
return () => { };
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
43
|
// Stops delivery to `handler` and forgets its subscription. Safe to call when not attached.
|
|
117
44
|
export function detachProtocolHandler(handler) {
|
|
118
45
|
const unsubscribe = _subscriptions.get(handler);
|
|
@@ -126,11 +53,23 @@ export function detachProtocolHandler(handler) {
|
|
|
126
53
|
export function disposeProtocolHandler(handler) {
|
|
127
54
|
detachProtocolHandler(handler);
|
|
128
55
|
}
|
|
129
|
-
|
|
56
|
+
export function explainProtocolBackend() {
|
|
57
|
+
if (_custom !== null) {
|
|
58
|
+
return { conflict: _hostConflict, layer: 'custom', operation: null, viability: 'unobserved' };
|
|
59
|
+
}
|
|
60
|
+
if (_host !== null) {
|
|
61
|
+
return {
|
|
62
|
+
conflict: _hostConflict,
|
|
63
|
+
layer: 'host',
|
|
64
|
+
operation: _hostObservation !== null ? _hostObservation.operation : null,
|
|
65
|
+
viability: _hostObservation !== null ? _hostObservation.viability : 'unobserved',
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return { conflict: false, layer: 'host-not-enabled', operation: null, viability: 'unobserved' };
|
|
69
|
+
}
|
|
70
|
+
// The active protocol backend. Precedence: custom > host > sentinel.
|
|
130
71
|
export function getProtocolBackend() {
|
|
131
|
-
|
|
132
|
-
_backend = createWebProtocolBackend();
|
|
133
|
-
return _backend;
|
|
72
|
+
return _custom ?? _host ?? _sentinel;
|
|
134
73
|
}
|
|
135
74
|
// Returns the URL the app was launched with via a deep link (cold start), or null when the app was
|
|
136
75
|
// not launched via a link. This is a one-shot idempotent query — re-readable. Distinct from
|
|
@@ -143,6 +82,14 @@ export function getProtocolLaunchUrl() {
|
|
|
143
82
|
export function getRegisteredProtocolSchemes() {
|
|
144
83
|
return getProtocolBackend().getRegisteredSchemes();
|
|
145
84
|
}
|
|
85
|
+
export function installProtocolHostBackend(backend) {
|
|
86
|
+
if (_host !== null) {
|
|
87
|
+
if (_host !== backend)
|
|
88
|
+
_hostConflict = true;
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
_host = backend;
|
|
92
|
+
}
|
|
146
93
|
// True when `scheme` is the OS default handler for deep links. Returns false where the host cannot
|
|
147
94
|
// report it (e.g. the web platform).
|
|
148
95
|
export function isProtocolSchemeDefault(scheme) {
|
|
@@ -164,6 +111,12 @@ export function isValidProtocolScheme(scheme) {
|
|
|
164
111
|
return false;
|
|
165
112
|
return _schemePattern.test(lower);
|
|
166
113
|
}
|
|
114
|
+
export function observeProtocolHostResult(operation, succeeded) {
|
|
115
|
+
_hostObservation = {
|
|
116
|
+
operation,
|
|
117
|
+
viability: succeeded ? 'available' : 'runtime-api-unavailable',
|
|
118
|
+
};
|
|
119
|
+
}
|
|
167
120
|
// Parses a deep-link URL into its components. Returns null for malformed or non-custom-scheme URLs.
|
|
168
121
|
// query values are percent-decoded. Multi-value query keys: last value wins (matches URLSearchParams
|
|
169
122
|
// behavior). This function does not allocate a large object on the happy path — it reads all fields
|
|
@@ -252,9 +205,15 @@ export function registerProtocolSchemes(schemes) {
|
|
|
252
205
|
export function removeProtocolSchemeAsDefault(scheme) {
|
|
253
206
|
return getProtocolBackend().removeAsDefault(scheme);
|
|
254
207
|
}
|
|
255
|
-
|
|
208
|
+
export function resetProtocolBackendForTest() {
|
|
209
|
+
_custom = null;
|
|
210
|
+
_host = null;
|
|
211
|
+
_hostConflict = false;
|
|
212
|
+
_hostObservation = null;
|
|
213
|
+
}
|
|
214
|
+
// Installs a custom protocol backend; pass null to clear the custom override.
|
|
256
215
|
export function setProtocolBackend(backend) {
|
|
257
|
-
|
|
216
|
+
_custom = backend;
|
|
258
217
|
}
|
|
259
218
|
// Makes this app the default handler for `scheme`. Returns false when the host denies or does not
|
|
260
219
|
// support it.
|
|
@@ -276,11 +235,46 @@ export function unregisterProtocolSchemes(schemes) {
|
|
|
276
235
|
}
|
|
277
236
|
return allOk;
|
|
278
237
|
}
|
|
238
|
+
const _sentinel = {
|
|
239
|
+
drainPendingUrls() {
|
|
240
|
+
return [];
|
|
241
|
+
},
|
|
242
|
+
getLaunchUrl() {
|
|
243
|
+
return null;
|
|
244
|
+
},
|
|
245
|
+
getRegisteredSchemes() {
|
|
246
|
+
return [];
|
|
247
|
+
},
|
|
248
|
+
isDefault() {
|
|
249
|
+
return false;
|
|
250
|
+
},
|
|
251
|
+
isRegistered() {
|
|
252
|
+
return false;
|
|
253
|
+
},
|
|
254
|
+
register() {
|
|
255
|
+
return false;
|
|
256
|
+
},
|
|
257
|
+
removeAsDefault() {
|
|
258
|
+
return false;
|
|
259
|
+
},
|
|
260
|
+
setAsDefault() {
|
|
261
|
+
return false;
|
|
262
|
+
},
|
|
263
|
+
subscribe() {
|
|
264
|
+
return () => { };
|
|
265
|
+
},
|
|
266
|
+
unregister() {
|
|
267
|
+
return false;
|
|
268
|
+
},
|
|
269
|
+
};
|
|
279
270
|
// RFC 3986 scheme grammar: letter followed by zero or more letter/digit/+/-/. (lowercased).
|
|
280
271
|
const _schemePattern = /^[a-z][a-z0-9+\-.]*$/;
|
|
281
272
|
// Schemes that should never be claimed as custom URI handlers to avoid OS conflicts.
|
|
282
273
|
const _reservedSchemes = new Set(['file', 'ftp', 'ftps', 'http', 'https', 'mailto']);
|
|
283
|
-
let
|
|
274
|
+
let _custom = null;
|
|
275
|
+
let _host = null;
|
|
276
|
+
let _hostConflict = false;
|
|
277
|
+
let _hostObservation = null;
|
|
284
278
|
const _subscriptions = new WeakMap();
|
|
285
279
|
function _safeDecode(s) {
|
|
286
280
|
try {
|
package/dist/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGtE,sGAAsG;AACtG,iGAAiG;AACjG,gGAAgG;AAChG,oEAAoE;AACpE,gDAAgD;AAChD,MAAM,UAAU,qBAAqB,CAAC,OAAwB;IAC5D,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,qFAAqF;IACrF,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IACnF,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED,qGAAqG;AACrG,YAAY;AACZ,MAAM,UAAU,qBAAqB;IACnC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC;AACvC,CAAC;AAED,iGAAiG;AACjG,oGAAoG;AACpG,sBAAsB;AACtB,MAAM,UAAU,iBAAiB,CAAC,KAA2C;IAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,IAAI,GAAG,GAAG,GAAG,MAAM,IAAI,SAAS,GAAG,cAAc,EAAE,CAAC;IACpD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClG,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/protocol",
|
|
3
|
-
"version": "0.4.0-next.
|
|
3
|
+
"version": "0.4.0-next.1908.751021c",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/signals": "0.4.0-next.
|
|
42
|
-
"@flighthq/types": "0.4.0-next.
|
|
41
|
+
"@flighthq/signals": "0.4.0-next.1908.751021c",
|
|
42
|
+
"@flighthq/types": "0.4.0-next.1908.751021c"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"typescript": "^5.3.0"
|
package/src/protocol.test.ts
CHANGED
|
@@ -5,19 +5,22 @@ import {
|
|
|
5
5
|
attachProtocolHandler,
|
|
6
6
|
createProtocolHandler,
|
|
7
7
|
createProtocolUrl,
|
|
8
|
-
createWebProtocolBackend,
|
|
9
8
|
detachProtocolHandler,
|
|
10
9
|
disposeProtocolHandler,
|
|
10
|
+
explainProtocolBackend,
|
|
11
11
|
getProtocolBackend,
|
|
12
12
|
getProtocolLaunchUrl,
|
|
13
13
|
getRegisteredProtocolSchemes,
|
|
14
|
+
installProtocolHostBackend,
|
|
14
15
|
isProtocolSchemeDefault,
|
|
15
16
|
isProtocolSchemeRegistered,
|
|
16
17
|
isValidProtocolScheme,
|
|
18
|
+
observeProtocolHostResult,
|
|
17
19
|
parseProtocolUrl,
|
|
18
20
|
registerProtocolScheme,
|
|
19
21
|
registerProtocolSchemes,
|
|
20
22
|
removeProtocolSchemeAsDefault,
|
|
23
|
+
resetProtocolBackendForTest,
|
|
21
24
|
setProtocolBackend,
|
|
22
25
|
setProtocolSchemeAsDefault,
|
|
23
26
|
unregisterProtocolScheme,
|
|
@@ -86,7 +89,7 @@ function fakeBackend(): ProtocolBackend & {
|
|
|
86
89
|
};
|
|
87
90
|
}
|
|
88
91
|
|
|
89
|
-
afterEach(() =>
|
|
92
|
+
afterEach(() => resetProtocolBackendForTest());
|
|
90
93
|
|
|
91
94
|
describe('attachProtocolHandler', () => {
|
|
92
95
|
it('drains pre-attach pending URLs before subscribing', () => {
|
|
@@ -166,19 +169,6 @@ describe('createProtocolUrl', () => {
|
|
|
166
169
|
});
|
|
167
170
|
});
|
|
168
171
|
|
|
169
|
-
describe('createWebProtocolBackend', () => {
|
|
170
|
-
it('reports a subscribe function and non-throwing queries', () => {
|
|
171
|
-
const backend = createWebProtocolBackend();
|
|
172
|
-
expect(backend.subscribe(() => {})).toBeInstanceOf(Function);
|
|
173
|
-
expect(typeof backend.isRegistered('myapp')).toBe('boolean');
|
|
174
|
-
expect(backend.setAsDefault('myapp')).toBe(false);
|
|
175
|
-
expect(backend.isDefault('myapp')).toBe(false);
|
|
176
|
-
expect(backend.removeAsDefault('myapp')).toBe(false);
|
|
177
|
-
expect(backend.getLaunchUrl()).toBeNull();
|
|
178
|
-
expect(backend.getRegisteredSchemes()).toBeInstanceOf(Array);
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
|
|
182
172
|
describe('detachProtocolHandler', () => {
|
|
183
173
|
it('stops further delivery', () => {
|
|
184
174
|
const backend = fakeBackend();
|
|
@@ -220,12 +210,51 @@ describe('disposeProtocolHandler', () => {
|
|
|
220
210
|
});
|
|
221
211
|
});
|
|
222
212
|
|
|
213
|
+
describe('explainProtocolBackend', () => {
|
|
214
|
+
it('reports host-not-enabled when no backend is installed', () => {
|
|
215
|
+
const explanation = explainProtocolBackend();
|
|
216
|
+
expect(explanation.layer).toBe('host-not-enabled');
|
|
217
|
+
expect(explanation.conflict).toBe(false);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it('reports custom layer when a custom backend is set', () => {
|
|
221
|
+
setProtocolBackend(fakeBackend());
|
|
222
|
+
const explanation = explainProtocolBackend();
|
|
223
|
+
expect(explanation.layer).toBe('custom');
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it('reports host layer when a host backend is installed', () => {
|
|
227
|
+
installProtocolHostBackend(fakeBackend());
|
|
228
|
+
const explanation = explainProtocolBackend();
|
|
229
|
+
expect(explanation.layer).toBe('host');
|
|
230
|
+
expect(explanation.viability).toBe('unobserved');
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
it('reports observation viability after observeProtocolHostResult', () => {
|
|
234
|
+
installProtocolHostBackend(fakeBackend());
|
|
235
|
+
observeProtocolHostResult('register', true);
|
|
236
|
+
const explanation = explainProtocolBackend();
|
|
237
|
+
expect(explanation.operation).toBe('register');
|
|
238
|
+
expect(explanation.viability).toBe('available');
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
it('reports conflict when two different host backends are installed', () => {
|
|
242
|
+
installProtocolHostBackend(fakeBackend());
|
|
243
|
+
installProtocolHostBackend(fakeBackend());
|
|
244
|
+
const explanation = explainProtocolBackend();
|
|
245
|
+
expect(explanation.conflict).toBe(true);
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
|
|
223
249
|
describe('getProtocolBackend', () => {
|
|
224
|
-
it('
|
|
225
|
-
|
|
250
|
+
it('returns the sentinel when no backend is installed', () => {
|
|
251
|
+
const backend = getProtocolBackend();
|
|
252
|
+
expect(backend).not.toBeNull();
|
|
253
|
+
expect(backend.isRegistered('myapp')).toBe(false);
|
|
254
|
+
expect(backend.drainPendingUrls()).toEqual([]);
|
|
226
255
|
});
|
|
227
256
|
|
|
228
|
-
it('returns the installed backend', () => {
|
|
257
|
+
it('returns the installed custom backend', () => {
|
|
229
258
|
const backend = fakeBackend();
|
|
230
259
|
setProtocolBackend(backend);
|
|
231
260
|
expect(getProtocolBackend()).toBe(backend);
|
|
@@ -271,6 +300,22 @@ describe('getRegisteredProtocolSchemes', () => {
|
|
|
271
300
|
});
|
|
272
301
|
});
|
|
273
302
|
|
|
303
|
+
describe('installProtocolHostBackend', () => {
|
|
304
|
+
it('installs the host backend', () => {
|
|
305
|
+
const backend = fakeBackend();
|
|
306
|
+
installProtocolHostBackend(backend);
|
|
307
|
+
expect(getProtocolBackend()).toBe(backend);
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
it('first-host-wins — ignores a second different backend', () => {
|
|
311
|
+
const first = fakeBackend();
|
|
312
|
+
const second = fakeBackend();
|
|
313
|
+
installProtocolHostBackend(first);
|
|
314
|
+
installProtocolHostBackend(second);
|
|
315
|
+
expect(getProtocolBackend()).toBe(first);
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
|
|
274
319
|
describe('isProtocolSchemeDefault', () => {
|
|
275
320
|
it('returns false by default', () => {
|
|
276
321
|
const backend = fakeBackend();
|
|
@@ -336,6 +381,16 @@ describe('isValidProtocolScheme', () => {
|
|
|
336
381
|
});
|
|
337
382
|
});
|
|
338
383
|
|
|
384
|
+
describe('observeProtocolHostResult', () => {
|
|
385
|
+
it('records observation in the explanation', () => {
|
|
386
|
+
installProtocolHostBackend(fakeBackend());
|
|
387
|
+
observeProtocolHostResult('register', false);
|
|
388
|
+
const explanation = explainProtocolBackend();
|
|
389
|
+
expect(explanation.operation).toBe('register');
|
|
390
|
+
expect(explanation.viability).toBe('runtime-api-unavailable');
|
|
391
|
+
});
|
|
392
|
+
});
|
|
393
|
+
|
|
339
394
|
describe('parseProtocolUrl', () => {
|
|
340
395
|
it('parses a full URL with host, path, and query', () => {
|
|
341
396
|
const result = parseProtocolUrl('myapp://host/path?foo=bar&baz=qux');
|
|
@@ -443,11 +498,24 @@ describe('removeProtocolSchemeAsDefault', () => {
|
|
|
443
498
|
});
|
|
444
499
|
});
|
|
445
500
|
|
|
501
|
+
describe('resetProtocolBackendForTest', () => {
|
|
502
|
+
it('clears all backend slots', () => {
|
|
503
|
+
setProtocolBackend(fakeBackend());
|
|
504
|
+
installProtocolHostBackend(fakeBackend());
|
|
505
|
+
resetProtocolBackendForTest();
|
|
506
|
+
const explanation = explainProtocolBackend();
|
|
507
|
+
expect(explanation.layer).toBe('host-not-enabled');
|
|
508
|
+
expect(explanation.conflict).toBe(false);
|
|
509
|
+
});
|
|
510
|
+
});
|
|
511
|
+
|
|
446
512
|
describe('setProtocolBackend', () => {
|
|
447
|
-
it('clears back to the
|
|
513
|
+
it('clears back to the sentinel when passed null', () => {
|
|
448
514
|
setProtocolBackend(fakeBackend());
|
|
449
515
|
setProtocolBackend(null);
|
|
450
|
-
|
|
516
|
+
const backend = getProtocolBackend();
|
|
517
|
+
expect(backend).not.toBeNull();
|
|
518
|
+
expect(backend.isRegistered('myapp')).toBe(false);
|
|
451
519
|
});
|
|
452
520
|
});
|
|
453
521
|
|