adnbn 0.8.0 → 0.9.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/dist/cli/builders/locale/LocaleStructureValidator.js +7 -0
- package/dist/cli/builders/locale/LocaleStructureValidator.js.map +1 -1
- package/dist/cli/bundler/plugins/GenerateJsonPlugin.js +3 -7
- package/dist/cli/bundler/plugins/GenerateJsonPlugin.js.map +1 -1
- package/dist/cli/entrypoint/file/injectors/core.js +9 -1
- package/dist/cli/entrypoint/file/injectors/core.js.map +1 -1
- package/dist/cli/entrypoint/parser/ContentParser.d.ts +2 -2
- package/dist/cli/entrypoint/parser/ContentParser.js.map +1 -1
- package/dist/cli/entrypoint/parser/RelayParser.js +2 -1
- package/dist/cli/entrypoint/parser/RelayParser.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/plugins/content/ContentDriver.d.ts +21 -8
- package/dist/cli/plugins/content/ContentDriver.js +24 -2
- package/dist/cli/plugins/content/ContentDriver.js.map +1 -1
- package/dist/cli/plugins/content/ContentManager.d.ts +8 -3
- package/dist/cli/plugins/content/ContentManager.js +41 -6
- package/dist/cli/plugins/content/ContentManager.js.map +1 -1
- package/dist/cli/plugins/content/Relay.d.ts +6 -8
- package/dist/cli/plugins/content/Relay.js +2 -14
- package/dist/cli/plugins/content/Relay.js.map +1 -1
- package/dist/cli/plugins/content/RelayDeclaration.d.ts +0 -1
- package/dist/cli/plugins/content/RelayDeclaration.js +0 -3
- package/dist/cli/plugins/content/RelayDeclaration.js.map +1 -1
- package/dist/cli/plugins/content/RelayDriver.d.ts +10 -0
- package/dist/cli/plugins/content/RelayDriver.js +39 -0
- package/dist/cli/plugins/content/RelayDriver.js.map +1 -0
- package/dist/cli/plugins/content/index.js +1 -10
- package/dist/cli/plugins/content/index.js.map +1 -1
- package/dist/cli/plugins/content/types.d.ts +3 -0
- package/dist/cli/plugins/locale/Locale.js +5 -1
- package/dist/cli/plugins/locale/Locale.js.map +1 -1
- package/dist/cli/plugins/locale/declaration/LocaleDeclaration.js +2 -3
- package/dist/cli/plugins/locale/declaration/LocaleDeclaration.js.map +1 -1
- package/dist/cli/plugins/locale/declaration/locale.d.ts +3 -124
- package/dist/cli/virtual/index.js +2 -2
- package/dist/cli/virtual/virtual.d.ts +52 -147
- package/dist/entry/relay/index.d.ts +2 -1
- package/dist/entry/relay/index.js.map +1 -1
- package/dist/locale/adapters/react/LocaleProvider.js +2 -0
- package/dist/locale/adapters/react/LocaleProvider.js.map +1 -1
- package/dist/locale/adapters/react/context.d.ts +1 -0
- package/dist/locale/adapters/react/context.js +3 -2
- package/dist/locale/adapters/react/context.js.map +1 -1
- package/dist/locale/helpers.js.map +1 -1
- package/dist/locale/providers/AbstractLocale.d.ts +2 -0
- package/dist/locale/providers/AbstractLocale.js +5 -0
- package/dist/locale/providers/AbstractLocale.js.map +1 -1
- package/dist/locale/providers/NativeLocale.d.ts +3 -2
- package/dist/locale/providers/NativeLocale.js +1 -1
- package/dist/locale/providers/NativeLocale.js.map +1 -1
- package/dist/main/relay.d.ts +7 -6
- package/dist/main/relay.js +12 -5
- package/dist/main/relay.js.map +1 -1
- package/dist/message/error.d.ts +6 -0
- package/dist/message/error.js +21 -0
- package/dist/message/error.js.map +1 -1
- package/dist/message/index.d.ts +2 -1
- package/dist/message/index.js +2 -0
- package/dist/message/index.js.map +1 -1
- package/dist/message/providers/Message.d.ts +3 -0
- package/dist/message/providers/Message.js +36 -6
- package/dist/message/providers/Message.js.map +1 -1
- package/dist/offscreen/providers/ProxyOffscreen.d.ts +2 -2
- package/dist/offscreen/providers/ProxyOffscreen.js.map +1 -1
- package/dist/relay/RelayPermission.d.ts +6 -3
- package/dist/relay/RelayPermission.js +28 -12
- package/dist/relay/RelayPermission.js.map +1 -1
- package/dist/relay/adapters/RelayAdapter.d.ts +8 -0
- package/dist/relay/adapters/RelayAdapter.js +16 -0
- package/dist/relay/adapters/RelayAdapter.js.map +1 -0
- package/dist/relay/adapters/RelayMessagingAdapter.d.ts +11 -0
- package/dist/relay/adapters/RelayMessagingAdapter.js +91 -0
- package/dist/relay/adapters/RelayMessagingAdapter.js.map +1 -0
- package/dist/relay/adapters/RelayScriptingAdapter.d.ts +15 -0
- package/dist/relay/adapters/RelayScriptingAdapter.js +170 -0
- package/dist/relay/adapters/RelayScriptingAdapter.js.map +1 -0
- package/dist/relay/discovery/RelayDiscovery.d.ts +10 -0
- package/dist/relay/discovery/RelayDiscovery.js +62 -0
- package/dist/relay/discovery/RelayDiscovery.js.map +1 -0
- package/dist/relay/index.d.ts +1 -4
- package/dist/relay/index.js +1 -3
- package/dist/relay/index.js.map +1 -1
- package/dist/relay/providers/ProxyRelay.d.ts +20 -17
- package/dist/relay/providers/ProxyRelay.js +79 -52
- package/dist/relay/providers/ProxyRelay.js.map +1 -1
- package/dist/relay/providers/RegisterRelay.js +1 -2
- package/dist/relay/providers/RegisterRelay.js.map +1 -1
- package/dist/relay/result.d.ts +12 -0
- package/dist/relay/result.js +88 -0
- package/dist/relay/result.js.map +1 -0
- package/dist/sandbox/index.d.ts +2 -2
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/providers/ProxySandbox.d.ts +2 -2
- package/dist/sandbox/providers/ProxySandbox.js.map +1 -1
- package/dist/service/providers/ProxyService.d.ts +2 -2
- package/dist/service/providers/ProxyService.js.map +1 -1
- package/dist/transport/ProxyTransport.d.ts +2 -2
- package/dist/transport/ProxyTransport.js.map +1 -1
- package/dist/transport/index.d.ts +3 -2
- package/dist/types/helpers.d.ts +0 -4
- package/dist/types/locale.d.ts +3 -0
- package/dist/types/locale.js +58 -0
- package/dist/types/locale.js.map +1 -1
- package/dist/types/relay.d.ts +130 -3
- package/dist/types/relay.js +16 -0
- package/dist/types/relay.js.map +1 -1
- package/dist/types/rpc.d.ts +4 -0
- package/dist/types/rpc.js +1 -0
- package/dist/types/rpc.js.map +1 -0
- package/dist/types/transport.d.ts +3 -2
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/relay/RelayPermission.ts"],"sourcesContent":["import {containsPermissions, onPermissionsAdded, onPermissionsRemoved, requestPermissions} from \"@addon-core/browser\";\n\nimport {RelayMethod, RelayOptionsMap} from \"@typing/relay\";\nimport {ContentScriptDeclarative} from \"@typing/content\";\n\ntype Permissions = chrome.permissions.Permissions;\n\nexport interface RelayPermissionValue {\n allow: boolean;\n permissions?: Permissions;\n}\n\nexport
|
|
1
|
+
{"version":3,"sources":["../../src/relay/RelayPermission.ts"],"sourcesContent":["import {containsPermissions, onPermissionsAdded, onPermissionsRemoved, requestPermissions} from \"@addon-core/browser\";\n\nimport {RelayMethod, RelayOptionsMap} from \"@typing/relay\";\nimport {ContentScriptDeclarative} from \"@typing/content\";\n\ntype Permissions = chrome.permissions.Permissions;\n\nexport interface RelayPermissionValue {\n allow: boolean;\n permissions?: Permissions;\n}\n\nexport const RelayPermissionGlobalKey = \"adnbnRelayPermission\";\n\nexport default class RelayPermission {\n private permissions = new Map<string, RelayPermissionValue>();\n private started = false;\n\n private constructor(relays: RelayOptionsMap) {\n this.configure(relays);\n }\n\n private configure(relays: RelayOptionsMap): void {\n for (const [name, {declarative, method, matches}] of relays) {\n if (declarative === false && method === RelayMethod.Scripting) {\n console.warn(\n `Relay \"${name}\" has invalid configuration: \"scripting\" method cannot work with declarative = false.`\n );\n }\n\n const allow: boolean =\n declarative === true ||\n declarative === ContentScriptDeclarative.Required ||\n method === RelayMethod.Messaging;\n\n const permissions: Permissions | undefined =\n method === RelayMethod.Messaging\n ? undefined\n : {\n origins: !declarative || declarative === ContentScriptDeclarative.Optional ? matches : [],\n permissions: [\"scripting\"],\n };\n\n this.set(name, {allow, permissions});\n }\n }\n\n public static getInstance(relays: RelayOptionsMap): RelayPermission {\n const current = globalThis[RelayPermissionGlobalKey] as RelayPermission | undefined;\n\n if (current) {\n return current;\n }\n\n const instance = new RelayPermission(relays);\n\n globalThis[RelayPermissionGlobalKey] = instance;\n\n return instance.start();\n }\n\n public start(): this {\n if (this.started) {\n return this;\n }\n\n this.started = true;\n\n const checkPermissions = (): void => {\n void this.check().catch(error => console.error(error));\n };\n\n onPermissionsAdded(checkPermissions);\n onPermissionsRemoved(checkPermissions);\n checkPermissions();\n\n return this;\n }\n\n public set(name: string, value: Partial<RelayPermissionValue>): this {\n const relayPermissions = this.get(name) || {allow: false, permissions: {}};\n\n this.permissions.set(name, {...relayPermissions, ...value});\n\n return this;\n }\n\n public get(name: string): RelayPermissionValue | undefined {\n return this.permissions.get(name);\n }\n\n public has(name: string): boolean {\n return this.permissions.has(name);\n }\n\n public allow(name: string): boolean {\n return this.get(name)?.allow ?? false;\n }\n\n public async contains(name: string): Promise<boolean> {\n const relayPermissions = this.get(name);\n\n if (!relayPermissions) {\n throw new Error(`RelayPermission, relay \"${name}\" not found`);\n }\n\n if (!relayPermissions.permissions) {\n return true;\n }\n\n const allow = await containsPermissions(relayPermissions.permissions);\n\n this.set(name, {allow});\n\n return allow;\n }\n\n public async request(name: string): Promise<boolean> {\n const relayPermissions = this.get(name);\n\n if (!relayPermissions) {\n throw new Error(`RelayPermission, relay \"${name}\" not found`);\n }\n\n if (!relayPermissions.permissions) {\n return true;\n }\n\n const allow = await requestPermissions(relayPermissions.permissions);\n\n this.set(name, {allow});\n\n return allow;\n }\n\n private async check(): Promise<void> {\n await Promise.allSettled([...this.permissions.keys()].map(name => this.contains(name)));\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type RelayBatchOptions, type RelayCallOptions } from "../../types/relay.js";
|
|
2
|
+
export default abstract class RelayAdapter {
|
|
3
|
+
protected readonly name: string;
|
|
4
|
+
protected readonly target: RelayCallOptions;
|
|
5
|
+
protected constructor(name: string, target: RelayCallOptions);
|
|
6
|
+
protected isBatchTarget(target: RelayCallOptions): target is RelayBatchOptions;
|
|
7
|
+
abstract invoke(args: any[], path?: string): Promise<any>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RelayAllFrames } from "./../../types/relay.js";
|
|
2
|
+
class RelayAdapter {
|
|
3
|
+
constructor(name, target) {
|
|
4
|
+
this.name = name;
|
|
5
|
+
this.target = target;
|
|
6
|
+
}
|
|
7
|
+
name;
|
|
8
|
+
target;
|
|
9
|
+
isBatchTarget(target) {
|
|
10
|
+
return target.allFrames === true || target.allFrames === RelayAllFrames.Any || target.allFrames === RelayAllFrames.All || target.frameIds !== void 0 || target.documentIds !== void 0;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
RelayAdapter as default
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=RelayAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/relay/adapters/RelayAdapter.ts"],"sourcesContent":["import {RelayAllFrames, type RelayBatchOptions, type RelayCallOptions} from \"@typing/relay\";\n\nexport default abstract class RelayAdapter {\n protected constructor(\n protected readonly name: string,\n protected readonly target: RelayCallOptions\n ) {}\n\n protected isBatchTarget(target: RelayCallOptions): target is RelayBatchOptions {\n return (\n target.allFrames === true ||\n target.allFrames === RelayAllFrames.Any ||\n target.allFrames === RelayAllFrames.All ||\n target.frameIds !== undefined ||\n target.documentIds !== undefined\n );\n }\n\n public abstract invoke(args: any[], path?: string): Promise<any>;\n}\n"],"mappings":"AAAA,SAAQ,sBAAoE;AAE5E,MAAO,aAAoC;AAAA,EAC7B,YACa,MACA,QACrB;AAFqB;AACA;AAAA,EACpB;AAAA,EAFoB;AAAA,EACA;AAAA,EAGb,cAAc,QAAuD;AAC3E,WACI,OAAO,cAAc,QACrB,OAAO,cAAc,eAAe,OACpC,OAAO,cAAc,eAAe,OACpC,OAAO,aAAa,UACpB,OAAO,gBAAgB;AAAA,EAE/B;AAGJ;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type RelayCallOptions } from "../../types/relay.js";
|
|
2
|
+
import RelayAdapter from "./RelayAdapter.js";
|
|
3
|
+
export default class RelayMessagingAdapter extends RelayAdapter {
|
|
4
|
+
private readonly discovery;
|
|
5
|
+
private readonly message;
|
|
6
|
+
constructor(name: string, target: RelayCallOptions);
|
|
7
|
+
invoke(args: any[], path?: string): Promise<any>;
|
|
8
|
+
private scalarTarget;
|
|
9
|
+
private batchTargets;
|
|
10
|
+
private messageOptions;
|
|
11
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { isRemoteMessageError } from "./../../message/error.js";
|
|
2
|
+
import { RelayAllFrames, RelayFrameErrorKind } from "./../../types/relay.js";
|
|
3
|
+
import RelayDiscovery from "../discovery/RelayDiscovery.js";
|
|
4
|
+
import RelayMessage from "../RelayMessage.js";
|
|
5
|
+
import {
|
|
6
|
+
fulfilledRelayFrame,
|
|
7
|
+
messageErrorKind,
|
|
8
|
+
rejectedRelayFrame,
|
|
9
|
+
RelayFrameTimeoutError,
|
|
10
|
+
sortRelayFrameResults,
|
|
11
|
+
withRelayTimeout
|
|
12
|
+
} from "../result.js";
|
|
13
|
+
import RelayAdapter from "./RelayAdapter.js";
|
|
14
|
+
class RelayMessagingAdapter extends RelayAdapter {
|
|
15
|
+
discovery = new RelayDiscovery();
|
|
16
|
+
message;
|
|
17
|
+
constructor(name, target) {
|
|
18
|
+
super(name, target);
|
|
19
|
+
this.message = new RelayMessage(name);
|
|
20
|
+
}
|
|
21
|
+
async invoke(args, path) {
|
|
22
|
+
if (!this.isBatchTarget(this.target)) {
|
|
23
|
+
const target = this.scalarTarget();
|
|
24
|
+
return withRelayTimeout(
|
|
25
|
+
this.message.send({ path, args }, this.messageOptions(target)),
|
|
26
|
+
this.target.timeoutMs
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
if (this.target.allFrames === true || this.target.allFrames === RelayAllFrames.Any) {
|
|
30
|
+
const target = { tabId: this.target.tabId, allFrames: RelayAllFrames.Any };
|
|
31
|
+
try {
|
|
32
|
+
const result = await withRelayTimeout(
|
|
33
|
+
this.message.send({ path, args }, { tabId: this.target.tabId }),
|
|
34
|
+
this.target.timeoutMs
|
|
35
|
+
);
|
|
36
|
+
return [fulfilledRelayFrame(target, result)];
|
|
37
|
+
} catch (error) {
|
|
38
|
+
const kind = error instanceof RelayFrameTimeoutError ? RelayFrameErrorKind.Timeout : isRemoteMessageError(error) ? RelayFrameErrorKind.Remote : messageErrorKind(error);
|
|
39
|
+
return [rejectedRelayFrame(target, error, kind)];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const targets = await this.batchTargets();
|
|
43
|
+
const results = await Promise.all(
|
|
44
|
+
targets.map(async (target) => {
|
|
45
|
+
try {
|
|
46
|
+
const result = await withRelayTimeout(
|
|
47
|
+
this.message.send({ path, args }, this.messageOptions(target)),
|
|
48
|
+
this.target.timeoutMs
|
|
49
|
+
);
|
|
50
|
+
return fulfilledRelayFrame(target, result);
|
|
51
|
+
} catch (error) {
|
|
52
|
+
const kind = error instanceof RelayFrameTimeoutError ? RelayFrameErrorKind.Timeout : isRemoteMessageError(error) ? RelayFrameErrorKind.Remote : messageErrorKind(error);
|
|
53
|
+
return rejectedRelayFrame(target, error, kind);
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
);
|
|
57
|
+
return sortRelayFrameResults(results);
|
|
58
|
+
}
|
|
59
|
+
scalarTarget() {
|
|
60
|
+
if (this.target.frameId !== void 0) {
|
|
61
|
+
return { tabId: this.target.tabId, frameId: this.target.frameId };
|
|
62
|
+
}
|
|
63
|
+
if (this.target.documentId !== void 0) {
|
|
64
|
+
return { tabId: this.target.tabId, documentId: this.target.documentId };
|
|
65
|
+
}
|
|
66
|
+
return { tabId: this.target.tabId, frameId: 0 };
|
|
67
|
+
}
|
|
68
|
+
async batchTargets() {
|
|
69
|
+
if (this.target.allFrames === RelayAllFrames.All) {
|
|
70
|
+
return this.discovery.discover(this.target.tabId);
|
|
71
|
+
}
|
|
72
|
+
if (this.target.frameIds !== void 0) {
|
|
73
|
+
return this.target.frameIds.map((frameId) => ({ tabId: this.target.tabId, frameId }));
|
|
74
|
+
}
|
|
75
|
+
return (this.target.documentIds ?? []).map((documentId) => ({ tabId: this.target.tabId, documentId }));
|
|
76
|
+
}
|
|
77
|
+
messageOptions(target) {
|
|
78
|
+
if (target.frameId !== void 0) {
|
|
79
|
+
return {
|
|
80
|
+
tabId: target.tabId,
|
|
81
|
+
frameId: target.frameId,
|
|
82
|
+
...target.documentId === void 0 ? {} : { documentId: target.documentId }
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return { tabId: target.tabId, documentId: target.documentId };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
RelayMessagingAdapter as default
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=RelayMessagingAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/relay/adapters/RelayMessagingAdapter.ts"],"sourcesContent":["import {isRemoteMessageError} from \"@message/error\";\n\nimport type {MessageSendOptions} from \"@typing/message\";\nimport {RelayAllFrames, RelayFrameErrorKind, type RelayAddressTarget, type RelayCallOptions} from \"@typing/relay\";\nimport type {TransportMessage} from \"@typing/transport\";\n\nimport RelayDiscovery from \"../discovery/RelayDiscovery\";\nimport RelayMessage from \"../RelayMessage\";\nimport {\n fulfilledRelayFrame,\n messageErrorKind,\n rejectedRelayFrame,\n RelayFrameTimeoutError,\n sortRelayFrameResults,\n withRelayTimeout,\n} from \"../result\";\nimport RelayAdapter from \"./RelayAdapter\";\n\nexport default class RelayMessagingAdapter extends RelayAdapter {\n private readonly discovery = new RelayDiscovery();\n private readonly message: TransportMessage;\n\n public constructor(name: string, target: RelayCallOptions) {\n super(name, target);\n\n this.message = new RelayMessage(name);\n }\n\n public async invoke(args: any[], path?: string): Promise<any> {\n if (!this.isBatchTarget(this.target)) {\n const target = this.scalarTarget();\n\n return withRelayTimeout(\n this.message.send({path, args}, this.messageOptions(target)),\n this.target.timeoutMs\n );\n }\n\n if (this.target.allFrames === true || this.target.allFrames === RelayAllFrames.Any) {\n const target = {tabId: this.target.tabId, allFrames: RelayAllFrames.Any} as const;\n\n try {\n const result = await withRelayTimeout(\n this.message.send({path, args}, {tabId: this.target.tabId}),\n this.target.timeoutMs\n );\n\n return [fulfilledRelayFrame(target, result)];\n } catch (error) {\n const kind =\n error instanceof RelayFrameTimeoutError\n ? RelayFrameErrorKind.Timeout\n : isRemoteMessageError(error)\n ? RelayFrameErrorKind.Remote\n : messageErrorKind(error);\n\n return [rejectedRelayFrame(target, error, kind)];\n }\n }\n\n const targets = await this.batchTargets();\n const results = await Promise.all(\n targets.map(async target => {\n try {\n const result = await withRelayTimeout(\n this.message.send({path, args}, this.messageOptions(target)),\n this.target.timeoutMs\n );\n\n return fulfilledRelayFrame(target, result);\n } catch (error) {\n const kind =\n error instanceof RelayFrameTimeoutError\n ? RelayFrameErrorKind.Timeout\n : isRemoteMessageError(error)\n ? RelayFrameErrorKind.Remote\n : messageErrorKind(error);\n\n return rejectedRelayFrame(target, error, kind);\n }\n })\n );\n\n return sortRelayFrameResults(results);\n }\n\n private scalarTarget(): RelayAddressTarget {\n if (this.target.frameId !== undefined) {\n return {tabId: this.target.tabId, frameId: this.target.frameId};\n }\n\n if (this.target.documentId !== undefined) {\n return {tabId: this.target.tabId, documentId: this.target.documentId};\n }\n\n return {tabId: this.target.tabId, frameId: 0};\n }\n\n private async batchTargets(): Promise<RelayAddressTarget[]> {\n if (this.target.allFrames === RelayAllFrames.All) {\n return this.discovery.discover(this.target.tabId);\n }\n\n if (this.target.frameIds !== undefined) {\n return this.target.frameIds.map(frameId => ({tabId: this.target.tabId, frameId}));\n }\n\n return (this.target.documentIds ?? []).map(documentId => ({tabId: this.target.tabId, documentId}));\n }\n\n private messageOptions(target: RelayAddressTarget): MessageSendOptions {\n if (target.frameId !== undefined) {\n return {\n tabId: target.tabId,\n frameId: target.frameId,\n ...(target.documentId === undefined ? {} : {documentId: target.documentId}),\n };\n }\n\n return {tabId: target.tabId, documentId: target.documentId};\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type RelayCallOptions } from "../../types/relay.js";
|
|
2
|
+
import RelayAdapter from "./RelayAdapter.js";
|
|
3
|
+
export default class RelayScriptingAdapter extends RelayAdapter {
|
|
4
|
+
private _injectScript?;
|
|
5
|
+
constructor(name: string, target: RelayCallOptions);
|
|
6
|
+
private get injectScript();
|
|
7
|
+
invoke(args: any[], path?: string): Promise<any>;
|
|
8
|
+
private normalize;
|
|
9
|
+
private resultTarget;
|
|
10
|
+
private unwrap;
|
|
11
|
+
private injectScriptOptions;
|
|
12
|
+
private isFrameTarget;
|
|
13
|
+
private isDocumentTarget;
|
|
14
|
+
private isAnyFramesTarget;
|
|
15
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import injectScriptFactory from "@addon-core/inject-script";
|
|
2
|
+
import { restoreError } from "./../../message/error.js";
|
|
3
|
+
import {
|
|
4
|
+
RelayAllFrames,
|
|
5
|
+
RelayFrameErrorKind,
|
|
6
|
+
RelayGlobalKey
|
|
7
|
+
} from "./../../types/relay.js";
|
|
8
|
+
import { fulfilledRelayFrame, injectScriptErrorKind, rejectedRelayFrame, sortRelayFrameResults } from "../result.js";
|
|
9
|
+
import RelayAdapter from "./RelayAdapter.js";
|
|
10
|
+
class RelayScriptingAdapter extends RelayAdapter {
|
|
11
|
+
_injectScript;
|
|
12
|
+
constructor(name, target) {
|
|
13
|
+
super(name, target);
|
|
14
|
+
}
|
|
15
|
+
get injectScript() {
|
|
16
|
+
return this._injectScript ?? (this._injectScript = injectScriptFactory(this.injectScriptOptions()));
|
|
17
|
+
}
|
|
18
|
+
async invoke(args, path) {
|
|
19
|
+
const func = (name, path2, args2, key, retryManager) => {
|
|
20
|
+
const serialize = (error) => {
|
|
21
|
+
if (error instanceof Error) {
|
|
22
|
+
return {
|
|
23
|
+
name: error.name,
|
|
24
|
+
message: error.message,
|
|
25
|
+
...error.stack ? { stack: error.stack } : {}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (typeof error === "object" && error !== null) {
|
|
29
|
+
const record = error;
|
|
30
|
+
return {
|
|
31
|
+
name: typeof record.name === "string" ? record.name : "Error",
|
|
32
|
+
message: typeof record.message === "string" ? record.message : (() => {
|
|
33
|
+
try {
|
|
34
|
+
return JSON.stringify(error) ?? String(error);
|
|
35
|
+
} catch {
|
|
36
|
+
return String(error);
|
|
37
|
+
}
|
|
38
|
+
})(),
|
|
39
|
+
...typeof record.stack === "string" ? { stack: record.stack } : {}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return { name: "Error", message: String(error) };
|
|
43
|
+
};
|
|
44
|
+
const invoke = (manager2) => {
|
|
45
|
+
try {
|
|
46
|
+
return Promise.resolve(manager2.property(name, { path: path2, args: args2 })).then(
|
|
47
|
+
(result) => result === void 0 ? { ok: true, hasResult: false } : { ok: true, hasResult: true, result },
|
|
48
|
+
(error) => ({ ok: false, error: serialize(error) })
|
|
49
|
+
);
|
|
50
|
+
} catch (error) {
|
|
51
|
+
return Promise.resolve({ ok: false, error: serialize(error) });
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const manager = globalThis[key];
|
|
55
|
+
if (manager) {
|
|
56
|
+
return invoke(manager);
|
|
57
|
+
}
|
|
58
|
+
if (!retryManager) {
|
|
59
|
+
return Promise.reject(new Error("Relay manager not found."));
|
|
60
|
+
}
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
const maxAttempts = 10;
|
|
63
|
+
const delay = 300;
|
|
64
|
+
let attempts = 0;
|
|
65
|
+
const findManager = () => {
|
|
66
|
+
const delayedManager = globalThis[key];
|
|
67
|
+
if (delayedManager) {
|
|
68
|
+
resolve(invoke(delayedManager));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
attempts++;
|
|
72
|
+
if (attempts >= maxAttempts) {
|
|
73
|
+
reject(new Error(`Relay manager not found after ${maxAttempts} attempts.`));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
setTimeout(findManager, delay);
|
|
77
|
+
};
|
|
78
|
+
findManager();
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
const scriptArgs = [
|
|
82
|
+
this.name,
|
|
83
|
+
path ?? null,
|
|
84
|
+
args,
|
|
85
|
+
RelayGlobalKey,
|
|
86
|
+
!this.isAnyFramesTarget()
|
|
87
|
+
];
|
|
88
|
+
const outcomes = await this.injectScript.run(func, scriptArgs);
|
|
89
|
+
const results = this.normalize(outcomes);
|
|
90
|
+
if (this.isAnyFramesTarget()) {
|
|
91
|
+
const result = results.find((result2) => result2.status === "fulfilled") ?? results[0];
|
|
92
|
+
return result ? [
|
|
93
|
+
{
|
|
94
|
+
...result,
|
|
95
|
+
target: { tabId: this.target.tabId, allFrames: RelayAllFrames.Any }
|
|
96
|
+
}
|
|
97
|
+
] : [];
|
|
98
|
+
}
|
|
99
|
+
if (this.isBatchTarget(this.target)) {
|
|
100
|
+
return results;
|
|
101
|
+
}
|
|
102
|
+
return this.unwrap(results);
|
|
103
|
+
}
|
|
104
|
+
normalize(outcomes) {
|
|
105
|
+
return sortRelayFrameResults(
|
|
106
|
+
outcomes.map((outcome) => {
|
|
107
|
+
const target = this.resultTarget(outcome.target);
|
|
108
|
+
if (!outcome.success) {
|
|
109
|
+
return rejectedRelayFrame(target, outcome.error, injectScriptErrorKind(outcome.error.kind));
|
|
110
|
+
}
|
|
111
|
+
if (!outcome.value.ok) {
|
|
112
|
+
return rejectedRelayFrame(target, outcome.value.error, RelayFrameErrorKind.Remote);
|
|
113
|
+
}
|
|
114
|
+
return fulfilledRelayFrame(target, outcome.value.hasResult ? outcome.value.result : void 0);
|
|
115
|
+
})
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
resultTarget(target) {
|
|
119
|
+
if (target.allFrames === true) {
|
|
120
|
+
return {
|
|
121
|
+
tabId: target.tabId,
|
|
122
|
+
allFrames: this.target.allFrames === RelayAllFrames.All ? RelayAllFrames.All : RelayAllFrames.Any
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return target;
|
|
126
|
+
}
|
|
127
|
+
unwrap(results) {
|
|
128
|
+
const result = results[0];
|
|
129
|
+
if (!result) {
|
|
130
|
+
throw new Error(`Relay "${this.name}" did not return a frame result.`);
|
|
131
|
+
}
|
|
132
|
+
if (result.status === "fulfilled") {
|
|
133
|
+
return result.result;
|
|
134
|
+
}
|
|
135
|
+
throw restoreError(result.error);
|
|
136
|
+
}
|
|
137
|
+
injectScriptOptions() {
|
|
138
|
+
let injectTarget;
|
|
139
|
+
if (this.target.allFrames === true || this.target.allFrames === RelayAllFrames.Any || this.target.allFrames === RelayAllFrames.All) {
|
|
140
|
+
injectTarget = { tabId: this.target.tabId, allFrames: true };
|
|
141
|
+
} else if (this.target.frameIds !== void 0) {
|
|
142
|
+
injectTarget = { tabId: this.target.tabId, frameIds: this.target.frameIds };
|
|
143
|
+
} else if (this.target.documentIds !== void 0) {
|
|
144
|
+
injectTarget = { tabId: this.target.tabId, documentIds: this.target.documentIds };
|
|
145
|
+
} else if (this.isFrameTarget(this.target)) {
|
|
146
|
+
injectTarget = { tabId: this.target.tabId, frameIds: [this.target.frameId] };
|
|
147
|
+
} else if (this.isDocumentTarget(this.target)) {
|
|
148
|
+
injectTarget = { tabId: this.target.tabId, documentIds: [this.target.documentId] };
|
|
149
|
+
} else {
|
|
150
|
+
injectTarget = { tabId: this.target.tabId };
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
target: injectTarget,
|
|
154
|
+
...this.target.timeoutMs === void 0 ? {} : { timeoutMs: this.target.timeoutMs }
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
isFrameTarget(target) {
|
|
158
|
+
return target.frameId !== void 0;
|
|
159
|
+
}
|
|
160
|
+
isDocumentTarget(target) {
|
|
161
|
+
return target.documentId !== void 0;
|
|
162
|
+
}
|
|
163
|
+
isAnyFramesTarget() {
|
|
164
|
+
return this.target.allFrames === true || this.target.allFrames === RelayAllFrames.Any;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export {
|
|
168
|
+
RelayScriptingAdapter as default
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=RelayScriptingAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/relay/adapters/RelayScriptingAdapter.ts"],"sourcesContent":["import injectScriptFactory, {\n type InjectScriptContract,\n type InjectScriptOptions,\n type InjectScriptResult,\n type InjectScriptResultTarget,\n type InjectScriptTarget,\n type JsonValue,\n} from \"@addon-core/inject-script\";\n\nimport {restoreError} from \"@message/error\";\n\nimport type {MessageError} from \"@typing/message\";\nimport {\n RelayAllFrames,\n RelayFrameErrorKind,\n RelayGlobalKey,\n type RelayCallOptions,\n type RelayDocumentOptions,\n type RelayFrameOptions,\n type RelayFramesResult,\n type RelayResultTarget,\n type RelayScalarOptions,\n} from \"@typing/relay\";\n\nimport {fulfilledRelayFrame, injectScriptErrorKind, rejectedRelayFrame, sortRelayFrameResults} from \"../result\";\nimport RelayAdapter from \"./RelayAdapter\";\n\ntype RelayInvocationResult =\n | {\n ok: true;\n hasResult: false;\n }\n | {\n ok: true;\n hasResult: true;\n result: any;\n }\n | {\n ok: false;\n error: MessageError;\n };\n\nexport default class RelayScriptingAdapter extends RelayAdapter {\n private _injectScript?: InjectScriptContract;\n\n public constructor(name: string, target: RelayCallOptions) {\n super(name, target);\n }\n\n private get injectScript(): InjectScriptContract {\n return (this._injectScript ??= injectScriptFactory(this.injectScriptOptions()));\n }\n\n public async invoke(args: any[], path?: string): Promise<any> {\n const func = (\n name: string,\n path: string | null,\n args: JsonValue[],\n key: string,\n retryManager: boolean\n ): Promise<RelayInvocationResult> => {\n const serialize = (error: unknown): MessageError => {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n ...(error.stack ? {stack: error.stack} : {}),\n };\n }\n\n if (typeof error === \"object\" && error !== null) {\n const record = error as Record<string, unknown>;\n\n return {\n name: typeof record.name === \"string\" ? record.name : \"Error\",\n message:\n typeof record.message === \"string\"\n ? record.message\n : (() => {\n try {\n return JSON.stringify(error) ?? String(error);\n } catch {\n return String(error);\n }\n })(),\n ...(typeof record.stack === \"string\" ? {stack: record.stack} : {}),\n };\n }\n\n return {name: \"Error\", message: String(error)};\n };\n\n const invoke = (manager: any): Promise<RelayInvocationResult> => {\n try {\n return Promise.resolve(manager.property(name, {path, args})).then(\n result =>\n result === undefined\n ? {ok: true as const, hasResult: false as const}\n : {ok: true as const, hasResult: true as const, result},\n error => ({ok: false as const, error: serialize(error)})\n );\n } catch (error) {\n return Promise.resolve({ok: false as const, error: serialize(error)});\n }\n };\n\n const manager = globalThis[key];\n\n if (manager) {\n // Keep the normal Scripting path synchronous until the remote method starts.\n return invoke(manager);\n }\n\n if (!retryManager) {\n return Promise.reject(new Error(\"Relay manager not found.\"));\n }\n\n return new Promise<RelayInvocationResult>((resolve, reject) => {\n const maxAttempts = 10;\n const delay = 300;\n let attempts = 0;\n\n const findManager = () => {\n const delayedManager = globalThis[key];\n\n if (delayedManager) {\n resolve(invoke(delayedManager));\n return;\n }\n\n attempts++;\n\n if (attempts >= maxAttempts) {\n reject(new Error(`Relay manager not found after ${maxAttempts} attempts.`));\n return;\n }\n\n setTimeout(findManager, delay);\n };\n\n findManager();\n });\n };\n\n const scriptArgs: [string, string | null, JsonValue[], string, boolean] = [\n this.name,\n path ?? null,\n args as JsonValue[],\n RelayGlobalKey,\n !this.isAnyFramesTarget(),\n ];\n const outcomes = await this.injectScript.run(func, scriptArgs);\n const results = this.normalize(outcomes);\n\n if (this.isAnyFramesTarget()) {\n const result = results.find(result => result.status === \"fulfilled\") ?? results[0];\n\n return result\n ? [\n {\n ...result,\n target: {tabId: this.target.tabId, allFrames: RelayAllFrames.Any},\n },\n ]\n : [];\n }\n\n if (this.isBatchTarget(this.target)) {\n return results;\n }\n\n return this.unwrap(results);\n }\n\n private normalize(outcomes: readonly InjectScriptResult<RelayInvocationResult>[]): RelayFramesResult<any> {\n return sortRelayFrameResults(\n outcomes.map(outcome => {\n const target = this.resultTarget(outcome.target);\n\n if (!outcome.success) {\n return rejectedRelayFrame(target, outcome.error, injectScriptErrorKind(outcome.error.kind));\n }\n\n if (!outcome.value.ok) {\n return rejectedRelayFrame(target, outcome.value.error, RelayFrameErrorKind.Remote);\n }\n\n return fulfilledRelayFrame(target, outcome.value.hasResult ? outcome.value.result : undefined);\n })\n );\n }\n\n private resultTarget(target: InjectScriptResultTarget): RelayResultTarget {\n if (target.allFrames === true) {\n return {\n tabId: target.tabId,\n allFrames: this.target.allFrames === RelayAllFrames.All ? RelayAllFrames.All : RelayAllFrames.Any,\n };\n }\n\n return target;\n }\n\n private unwrap(results: RelayFramesResult<any>): any {\n const result = results[0];\n\n if (!result) {\n throw new Error(`Relay \"${this.name}\" did not return a frame result.`);\n }\n\n if (result.status === \"fulfilled\") {\n return result.result;\n }\n\n throw restoreError(result.error);\n }\n\n private injectScriptOptions(): InjectScriptOptions {\n let injectTarget: InjectScriptTarget;\n\n if (\n this.target.allFrames === true ||\n this.target.allFrames === RelayAllFrames.Any ||\n this.target.allFrames === RelayAllFrames.All\n ) {\n injectTarget = {tabId: this.target.tabId, allFrames: true};\n } else if (this.target.frameIds !== undefined) {\n injectTarget = {tabId: this.target.tabId, frameIds: this.target.frameIds};\n } else if (this.target.documentIds !== undefined) {\n injectTarget = {tabId: this.target.tabId, documentIds: this.target.documentIds};\n } else if (this.isFrameTarget(this.target)) {\n injectTarget = {tabId: this.target.tabId, frameIds: [this.target.frameId]};\n } else if (this.isDocumentTarget(this.target)) {\n injectTarget = {tabId: this.target.tabId, documentIds: [this.target.documentId]};\n } else {\n injectTarget = {tabId: (this.target as RelayScalarOptions).tabId};\n }\n\n return {\n target: injectTarget,\n ...(this.target.timeoutMs === undefined ? {} : {timeoutMs: this.target.timeoutMs}),\n };\n }\n\n private isFrameTarget(target: RelayCallOptions): target is RelayFrameOptions {\n return target.frameId !== undefined;\n }\n\n private isDocumentTarget(target: RelayCallOptions): target is RelayDocumentOptions {\n return target.documentId !== undefined;\n }\n\n private isAnyFramesTarget(): boolean {\n return this.target.allFrames === true || this.target.allFrames === RelayAllFrames.Any;\n }\n}\n"],"mappings":"AAAA,OAAO,yBAOA;AAEP,SAAQ,oBAAmB;AAG3B;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OAOG;AAEP,SAAQ,qBAAqB,uBAAuB,oBAAoB,6BAA4B;AACpG,OAAO,kBAAkB;AAiBzB,MAAO,8BAA4C,aAAa;AAAA,EACpD;AAAA,EAED,YAAY,MAAc,QAA0B;AACvD,UAAM,MAAM,MAAM;AAAA,EACtB;AAAA,EAEA,IAAY,eAAqC;AAC7C,WAAQ,KAAK,kBAAL,KAAK,gBAAkB,oBAAoB,KAAK,oBAAoB,CAAC;AAAA,EACjF;AAAA,EAEA,MAAa,OAAO,MAAa,MAA6B;AAC1D,UAAM,OAAO,CACT,MACAA,OACAC,OACA,KACA,iBACiC;AACjC,YAAM,YAAY,CAAC,UAAiC;AAChD,YAAI,iBAAiB,OAAO;AACxB,iBAAO;AAAA,YACH,MAAM,MAAM;AAAA,YACZ,SAAS,MAAM;AAAA,YACf,GAAI,MAAM,QAAQ,EAAC,OAAO,MAAM,MAAK,IAAI,CAAC;AAAA,UAC9C;AAAA,QACJ;AAEA,YAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,gBAAM,SAAS;AAEf,iBAAO;AAAA,YACH,MAAM,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,YACtD,SACI,OAAO,OAAO,YAAY,WACpB,OAAO,WACN,MAAM;AACH,kBAAI;AACA,uBAAO,KAAK,UAAU,KAAK,KAAK,OAAO,KAAK;AAAA,cAChD,QAAQ;AACJ,uBAAO,OAAO,KAAK;AAAA,cACvB;AAAA,YACJ,GAAG;AAAA,YACb,GAAI,OAAO,OAAO,UAAU,WAAW,EAAC,OAAO,OAAO,MAAK,IAAI,CAAC;AAAA,UACpE;AAAA,QACJ;AAEA,eAAO,EAAC,MAAM,SAAS,SAAS,OAAO,KAAK,EAAC;AAAA,MACjD;AAEA,YAAM,SAAS,CAACC,aAAiD;AAC7D,YAAI;AACA,iBAAO,QAAQ,QAAQA,SAAQ,SAAS,MAAM,EAAC,MAAAF,OAAM,MAAAC,MAAI,CAAC,CAAC,EAAE;AAAA,YACzD,YACI,WAAW,SACL,EAAC,IAAI,MAAe,WAAW,MAAc,IAC7C,EAAC,IAAI,MAAe,WAAW,MAAe,OAAM;AAAA,YAC9D,YAAU,EAAC,IAAI,OAAgB,OAAO,UAAU,KAAK,EAAC;AAAA,UAC1D;AAAA,QACJ,SAAS,OAAO;AACZ,iBAAO,QAAQ,QAAQ,EAAC,IAAI,OAAgB,OAAO,UAAU,KAAK,EAAC,CAAC;AAAA,QACxE;AAAA,MACJ;AAEA,YAAM,UAAU,WAAW,GAAG;AAE9B,UAAI,SAAS;AAET,eAAO,OAAO,OAAO;AAAA,MACzB;AAEA,UAAI,CAAC,cAAc;AACf,eAAO,QAAQ,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAAA,MAC/D;AAEA,aAAO,IAAI,QAA+B,CAAC,SAAS,WAAW;AAC3D,cAAM,cAAc;AACpB,cAAM,QAAQ;AACd,YAAI,WAAW;AAEf,cAAM,cAAc,MAAM;AACtB,gBAAM,iBAAiB,WAAW,GAAG;AAErC,cAAI,gBAAgB;AAChB,oBAAQ,OAAO,cAAc,CAAC;AAC9B;AAAA,UACJ;AAEA;AAEA,cAAI,YAAY,aAAa;AACzB,mBAAO,IAAI,MAAM,iCAAiC,WAAW,YAAY,CAAC;AAC1E;AAAA,UACJ;AAEA,qBAAW,aAAa,KAAK;AAAA,QACjC;AAEA,oBAAY;AAAA,MAChB,CAAC;AAAA,IACL;AAEA,UAAM,aAAoE;AAAA,MACtE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,CAAC,KAAK,kBAAkB;AAAA,IAC5B;AACA,UAAM,WAAW,MAAM,KAAK,aAAa,IAAI,MAAM,UAAU;AAC7D,UAAM,UAAU,KAAK,UAAU,QAAQ;AAEvC,QAAI,KAAK,kBAAkB,GAAG;AAC1B,YAAM,SAAS,QAAQ,KAAK,CAAAE,YAAUA,QAAO,WAAW,WAAW,KAAK,QAAQ,CAAC;AAEjF,aAAO,SACD;AAAA,QACI;AAAA,UACI,GAAG;AAAA,UACH,QAAQ,EAAC,OAAO,KAAK,OAAO,OAAO,WAAW,eAAe,IAAG;AAAA,QACpE;AAAA,MACJ,IACA,CAAC;AAAA,IACX;AAEA,QAAI,KAAK,cAAc,KAAK,MAAM,GAAG;AACjC,aAAO;AAAA,IACX;AAEA,WAAO,KAAK,OAAO,OAAO;AAAA,EAC9B;AAAA,EAEQ,UAAU,UAAwF;AACtG,WAAO;AAAA,MACH,SAAS,IAAI,aAAW;AACpB,cAAM,SAAS,KAAK,aAAa,QAAQ,MAAM;AAE/C,YAAI,CAAC,QAAQ,SAAS;AAClB,iBAAO,mBAAmB,QAAQ,QAAQ,OAAO,sBAAsB,QAAQ,MAAM,IAAI,CAAC;AAAA,QAC9F;AAEA,YAAI,CAAC,QAAQ,MAAM,IAAI;AACnB,iBAAO,mBAAmB,QAAQ,QAAQ,MAAM,OAAO,oBAAoB,MAAM;AAAA,QACrF;AAEA,eAAO,oBAAoB,QAAQ,QAAQ,MAAM,YAAY,QAAQ,MAAM,SAAS,MAAS;AAAA,MACjG,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEQ,aAAa,QAAqD;AACtE,QAAI,OAAO,cAAc,MAAM;AAC3B,aAAO;AAAA,QACH,OAAO,OAAO;AAAA,QACd,WAAW,KAAK,OAAO,cAAc,eAAe,MAAM,eAAe,MAAM,eAAe;AAAA,MAClG;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEQ,OAAO,SAAsC;AACjD,UAAM,SAAS,QAAQ,CAAC;AAExB,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,UAAU,KAAK,IAAI,kCAAkC;AAAA,IACzE;AAEA,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAO,OAAO;AAAA,IAClB;AAEA,UAAM,aAAa,OAAO,KAAK;AAAA,EACnC;AAAA,EAEQ,sBAA2C;AAC/C,QAAI;AAEJ,QACI,KAAK,OAAO,cAAc,QAC1B,KAAK,OAAO,cAAc,eAAe,OACzC,KAAK,OAAO,cAAc,eAAe,KAC3C;AACE,qBAAe,EAAC,OAAO,KAAK,OAAO,OAAO,WAAW,KAAI;AAAA,IAC7D,WAAW,KAAK,OAAO,aAAa,QAAW;AAC3C,qBAAe,EAAC,OAAO,KAAK,OAAO,OAAO,UAAU,KAAK,OAAO,SAAQ;AAAA,IAC5E,WAAW,KAAK,OAAO,gBAAgB,QAAW;AAC9C,qBAAe,EAAC,OAAO,KAAK,OAAO,OAAO,aAAa,KAAK,OAAO,YAAW;AAAA,IAClF,WAAW,KAAK,cAAc,KAAK,MAAM,GAAG;AACxC,qBAAe,EAAC,OAAO,KAAK,OAAO,OAAO,UAAU,CAAC,KAAK,OAAO,OAAO,EAAC;AAAA,IAC7E,WAAW,KAAK,iBAAiB,KAAK,MAAM,GAAG;AAC3C,qBAAe,EAAC,OAAO,KAAK,OAAO,OAAO,aAAa,CAAC,KAAK,OAAO,UAAU,EAAC;AAAA,IACnF,OAAO;AACH,qBAAe,EAAC,OAAQ,KAAK,OAA8B,MAAK;AAAA,IACpE;AAEA,WAAO;AAAA,MACH,QAAQ;AAAA,MACR,GAAI,KAAK,OAAO,cAAc,SAAY,CAAC,IAAI,EAAC,WAAW,KAAK,OAAO,UAAS;AAAA,IACpF;AAAA,EACJ;AAAA,EAEQ,cAAc,QAAuD;AACzE,WAAO,OAAO,YAAY;AAAA,EAC9B;AAAA,EAEQ,iBAAiB,QAA0D;AAC/E,WAAO,OAAO,eAAe;AAAA,EACjC;AAAA,EAEQ,oBAA6B;AACjC,WAAO,KAAK,OAAO,cAAc,QAAQ,KAAK,OAAO,cAAc,eAAe;AAAA,EACtF;AACJ;","names":["path","args","manager","result"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RelayAddressTarget } from "../../types/relay.js";
|
|
2
|
+
export declare class RelayDiscoveryError extends Error {
|
|
3
|
+
constructor(message: string, cause?: unknown);
|
|
4
|
+
}
|
|
5
|
+
/** Enumerates frame addresses for strict Messaging All calls, without checking whether Relay is registered. */
|
|
6
|
+
export default class RelayDiscovery {
|
|
7
|
+
discover(tabId: number): Promise<RelayAddressTarget[]>;
|
|
8
|
+
private assertSupported;
|
|
9
|
+
private normalize;
|
|
10
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { getAllFrames, getManifest } from "@addon-core/browser";
|
|
2
|
+
class RelayDiscoveryError extends Error {
|
|
3
|
+
constructor(message, cause) {
|
|
4
|
+
super(message, cause === void 0 ? void 0 : { cause });
|
|
5
|
+
this.name = "RelayDiscoveryError";
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
class RelayDiscovery {
|
|
9
|
+
async discover(tabId) {
|
|
10
|
+
this.assertSupported();
|
|
11
|
+
try {
|
|
12
|
+
const frames = await getAllFrames(tabId);
|
|
13
|
+
return this.normalize(
|
|
14
|
+
frames.map((frame) => ({
|
|
15
|
+
tabId,
|
|
16
|
+
frameId: frame.frameId,
|
|
17
|
+
...frame.documentId ? { documentId: frame.documentId } : {}
|
|
18
|
+
}))
|
|
19
|
+
);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
throw new RelayDiscoveryError(
|
|
22
|
+
`Relay failed to discover frames in tab ${tabId} through webNavigation.getAllFrames().`,
|
|
23
|
+
error
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
assertSupported() {
|
|
28
|
+
let permissions;
|
|
29
|
+
try {
|
|
30
|
+
permissions = getManifest().permissions ?? [];
|
|
31
|
+
} catch (error) {
|
|
32
|
+
throw new RelayDiscoveryError(
|
|
33
|
+
'Relay could not verify the "webNavigation" permission required for Messaging "allFrames".',
|
|
34
|
+
error
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
if (!permissions.includes("webNavigation")) {
|
|
38
|
+
throw new RelayDiscoveryError(
|
|
39
|
+
'Messaging Relay with RelayAllFrames.All requires the "webNavigation" permission. Configure the Relay entrypoint with allFrames: RelayAllFrames.All so the framework can declare it automatically, or use RelayAllFrames.Any, "frameIds" or "documentIds".'
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
normalize(targets) {
|
|
44
|
+
const unique = /* @__PURE__ */ new Map();
|
|
45
|
+
for (const target of targets) {
|
|
46
|
+
const key = target.frameId === void 0 ? `${target.tabId}:document:${target.documentId}` : `${target.tabId}:frame:${target.frameId}`;
|
|
47
|
+
unique.set(key, target);
|
|
48
|
+
}
|
|
49
|
+
return [...unique.values()].sort((a, b) => {
|
|
50
|
+
const frameDifference = (a.frameId ?? Number.MAX_SAFE_INTEGER) - (b.frameId ?? Number.MAX_SAFE_INTEGER);
|
|
51
|
+
if (frameDifference !== 0) {
|
|
52
|
+
return frameDifference;
|
|
53
|
+
}
|
|
54
|
+
return (a.documentId ?? "").localeCompare(b.documentId ?? "");
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
RelayDiscoveryError,
|
|
60
|
+
RelayDiscovery as default
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=RelayDiscovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/relay/discovery/RelayDiscovery.ts"],"sourcesContent":["import {getAllFrames, getManifest} from \"@addon-core/browser\";\n\nimport type {RelayAddressTarget} from \"@typing/relay\";\n\nexport class RelayDiscoveryError extends Error {\n public constructor(message: string, cause?: unknown) {\n super(message, cause === undefined ? undefined : {cause});\n this.name = \"RelayDiscoveryError\";\n }\n}\n\n/** Enumerates frame addresses for strict Messaging All calls, without checking whether Relay is registered. */\nexport default class RelayDiscovery {\n public async discover(tabId: number): Promise<RelayAddressTarget[]> {\n this.assertSupported();\n\n try {\n const frames = await getAllFrames(tabId);\n\n return this.normalize(\n frames.map(frame => ({\n tabId,\n frameId: frame.frameId,\n ...(frame.documentId ? {documentId: frame.documentId} : {}),\n }))\n );\n } catch (error) {\n throw new RelayDiscoveryError(\n `Relay failed to discover frames in tab ${tabId} through webNavigation.getAllFrames().`,\n error\n );\n }\n }\n\n private assertSupported(): void {\n let permissions: string[];\n\n try {\n permissions = getManifest().permissions ?? [];\n } catch (error) {\n throw new RelayDiscoveryError(\n 'Relay could not verify the \"webNavigation\" permission required for Messaging \"allFrames\".',\n error\n );\n }\n\n if (!permissions.includes(\"webNavigation\")) {\n throw new RelayDiscoveryError(\n 'Messaging Relay with RelayAllFrames.All requires the \"webNavigation\" permission. Configure the Relay entrypoint with allFrames: RelayAllFrames.All so the framework can declare it automatically, or use RelayAllFrames.Any, \"frameIds\" or \"documentIds\".'\n );\n }\n }\n\n private normalize(targets: RelayAddressTarget[]): RelayAddressTarget[] {\n const unique = new Map<string, RelayAddressTarget>();\n\n for (const target of targets) {\n const key =\n target.frameId === undefined\n ? `${target.tabId}:document:${target.documentId}`\n : `${target.tabId}:frame:${target.frameId}`;\n\n unique.set(key, target);\n }\n\n return [...unique.values()].sort((a, b) => {\n const frameDifference = (a.frameId ?? Number.MAX_SAFE_INTEGER) - (b.frameId ?? Number.MAX_SAFE_INTEGER);\n\n if (frameDifference !== 0) {\n return frameDifference;\n }\n\n return (a.documentId ?? \"\").localeCompare(b.documentId ?? \"\");\n });\n }\n}\n"],"mappings":"AAAA,SAAQ,cAAc,mBAAkB;AAIjC,MAAM,4BAA4B,MAAM;AAAA,EACpC,YAAY,SAAiB,OAAiB;AACjD,UAAM,SAAS,UAAU,SAAY,SAAY,EAAC,MAAK,CAAC;AACxD,SAAK,OAAO;AAAA,EAChB;AACJ;AAGA,MAAO,eAA6B;AAAA,EAChC,MAAa,SAAS,OAA8C;AAChE,SAAK,gBAAgB;AAErB,QAAI;AACA,YAAM,SAAS,MAAM,aAAa,KAAK;AAEvC,aAAO,KAAK;AAAA,QACR,OAAO,IAAI,YAAU;AAAA,UACjB;AAAA,UACA,SAAS,MAAM;AAAA,UACf,GAAI,MAAM,aAAa,EAAC,YAAY,MAAM,WAAU,IAAI,CAAC;AAAA,QAC7D,EAAE;AAAA,MACN;AAAA,IACJ,SAAS,OAAO;AACZ,YAAM,IAAI;AAAA,QACN,0CAA0C,KAAK;AAAA,QAC/C;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,kBAAwB;AAC5B,QAAI;AAEJ,QAAI;AACA,oBAAc,YAAY,EAAE,eAAe,CAAC;AAAA,IAChD,SAAS,OAAO;AACZ,YAAM,IAAI;AAAA,QACN;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,CAAC,YAAY,SAAS,eAAe,GAAG;AACxC,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,UAAU,SAAqD;AACnE,UAAM,SAAS,oBAAI,IAAgC;AAEnD,eAAW,UAAU,SAAS;AAC1B,YAAM,MACF,OAAO,YAAY,SACb,GAAG,OAAO,KAAK,aAAa,OAAO,UAAU,KAC7C,GAAG,OAAO,KAAK,UAAU,OAAO,OAAO;AAEjD,aAAO,IAAI,KAAK,MAAM;AAAA,IAC1B;AAEA,WAAO,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM;AACvC,YAAM,mBAAmB,EAAE,WAAW,OAAO,qBAAqB,EAAE,WAAW,OAAO;AAEtF,UAAI,oBAAoB,GAAG;AACvB,eAAO;AAAA,MACX;AAEA,cAAQ,EAAE,cAAc,IAAI,cAAc,EAAE,cAAc,EAAE;AAAA,IAChE,CAAC;AAAA,EACL;AACJ;","names":[]}
|
package/dist/relay/index.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { TransportProxyTarget, TransportTarget } from "../transport/index.js";
|
|
3
|
-
export { type ProxyRelayParams, ProxyRelay, RegisterRelay };
|
|
1
|
+
import type { TransportTarget } from "../types/transport.js";
|
|
4
2
|
export interface RelayRegistry {
|
|
5
3
|
}
|
|
6
4
|
export type RelayName = Extract<keyof RelayRegistry, string>;
|
|
7
5
|
export type RelayTarget<N extends keyof RelayRegistry> = TransportTarget<RelayRegistry, N>;
|
|
8
|
-
export type RelayProxyTarget<N extends keyof RelayRegistry> = TransportProxyTarget<RelayRegistry, N>;
|
|
9
6
|
export declare const getRelay: <N extends RelayName>(name: N) => RelayTarget<N>;
|
package/dist/relay/index.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Relay from "./providers/Relay.js";
|
|
2
2
|
const getRelay = (name) => {
|
|
3
3
|
return new Relay(name).get();
|
|
4
4
|
};
|
|
5
5
|
export {
|
|
6
|
-
ProxyRelay,
|
|
7
|
-
RegisterRelay,
|
|
8
6
|
getRelay
|
|
9
7
|
};
|
|
10
8
|
//# sourceMappingURL=index.js.map
|
package/dist/relay/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/relay/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/relay/index.ts"],"sourcesContent":["import Relay from \"./providers/Relay\";\n\nimport type {TransportTarget} from \"@typing/transport\";\n\nexport interface RelayRegistry {}\n\nexport type RelayName = Extract<keyof RelayRegistry, string>;\n\nexport type RelayTarget<N extends keyof RelayRegistry> = TransportTarget<RelayRegistry, N>;\n\nexport const getRelay = <N extends RelayName>(name: N): RelayTarget<N> => {\n return new Relay<N>(name).get();\n};\n"],"mappings":"AAAA,OAAO,WAAW;AAUX,MAAM,WAAW,CAAsB,SAA4B;AACtE,SAAO,IAAI,MAAS,IAAI,EAAE,IAAI;AAClC;","names":[]}
|
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
import { type InjectScriptOptions } from "@addon-core/inject-script";
|
|
2
1
|
import ProxyTransport from "../../transport/ProxyTransport.js";
|
|
3
2
|
import RelayPermission from "../RelayPermission.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { TransportDictionary, TransportManager, TransportName } from "../../types/transport.js";
|
|
7
|
-
export type ProxyRelayParams = number |
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
private
|
|
15
|
-
|
|
16
|
-
|
|
3
|
+
import type { RpcAsyncProxy } from "../../types/rpc.js";
|
|
4
|
+
import { type RelayCallOptions, type RelayOptions } from "../../types/relay.js";
|
|
5
|
+
import type { TransportDictionary, TransportManager, TransportName } from "../../types/transport.js";
|
|
6
|
+
export type ProxyRelayParams = number | RelayCallOptions;
|
|
7
|
+
export default class ProxyRelay<N extends TransportName, T = RpcAsyncProxy<TransportDictionary[N]>> extends ProxyTransport<N, T> {
|
|
8
|
+
protected readonly options: RelayOptions;
|
|
9
|
+
private readonly params;
|
|
10
|
+
private readonly permission;
|
|
11
|
+
private static readonly SelectorKeys;
|
|
12
|
+
private _adapter?;
|
|
13
|
+
private _target?;
|
|
14
|
+
constructor(name: N, options: RelayOptions, params: ProxyRelayParams, permission: RelayPermission);
|
|
15
|
+
private get adapter();
|
|
16
|
+
private get target();
|
|
17
17
|
protected manager(): TransportManager;
|
|
18
|
-
protected permission(): RelayPermission;
|
|
19
18
|
protected apply(args: any[], path?: string): Promise<any>;
|
|
20
|
-
private
|
|
21
|
-
private
|
|
19
|
+
private validateTabId;
|
|
20
|
+
private validateFrameId;
|
|
21
|
+
private validateDocumentId;
|
|
22
|
+
private validateTimeout;
|
|
23
|
+
private validateArray;
|
|
24
|
+
private invalid;
|
|
22
25
|
get(): T;
|
|
23
26
|
}
|