@flighthq/protocol 0.4.0-next.1896.60d766c → 0.4.0-next.1903.50bfa67

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 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
@@ -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"}
@@ -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;
@@ -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;AAOpG,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;AAID,wBAAgB,wBAAwB,IAAI,eAAe,CAiE1D;AAGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAMpE;AAID,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAErE;AAGD,wBAAgB,kBAAkB,IAAI,eAAe,CAGpD;AAKD,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAEpD;AAID,wBAAgB,4BAA4B,IAAI,SAAS,MAAM,EAAE,CAEhE;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;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;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"}
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
- // The active protocol backend, or a lazily-created web default. There is always a backend.
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
- if (_backend === null)
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
- // Installs a native host protocol backend; pass null to fall back to the web default.
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
- _backend = backend;
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 _backend = null;
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 {
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
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.1896.60d766c",
3
+ "version": "0.4.0-next.1903.50bfa67",
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.1896.60d766c",
42
- "@flighthq/types": "0.4.0-next.1896.60d766c"
41
+ "@flighthq/signals": "0.4.0-next.1903.50bfa67",
42
+ "@flighthq/types": "0.4.0-next.1903.50bfa67"
43
43
  },
44
44
  "devDependencies": {
45
45
  "typescript": "^5.3.0"
@@ -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(() => setProtocolBackend(null));
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('falls back to a web backend', () => {
225
- expect(getProtocolBackend()).not.toBeNull();
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 web fallback when passed null', () => {
513
+ it('clears back to the sentinel when passed null', () => {
448
514
  setProtocolBackend(fakeBackend());
449
515
  setProtocolBackend(null);
450
- expect(getProtocolBackend()).not.toBeNull();
516
+ const backend = getProtocolBackend();
517
+ expect(backend).not.toBeNull();
518
+ expect(backend.isRegistered('myapp')).toBe(false);
451
519
  });
452
520
  });
453
521