webext-schema 5.1.9 → 5.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -13
- package/package.json +5 -5
- package/schemas/beta/webext.json +106 -3
- package/schemas/central/webext.json +65 -1
package/README.md
CHANGED
|
@@ -9,13 +9,13 @@ Stubbed browser API is also available.
|
|
|
9
9
|
|
|
10
10
|
## Install
|
|
11
11
|
|
|
12
|
-
```
|
|
12
|
+
```console
|
|
13
13
|
npm i webext-schema
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
## Usage
|
|
17
17
|
|
|
18
|
-
```
|
|
18
|
+
```javascript
|
|
19
19
|
import { Schema } from 'webext-schema';
|
|
20
20
|
|
|
21
21
|
const schema = new Schema();
|
|
@@ -28,7 +28,7 @@ const schema = new Schema();
|
|
|
28
28
|
|
|
29
29
|
Both arguments are optional.
|
|
30
30
|
|
|
31
|
-
```
|
|
31
|
+
```javascript
|
|
32
32
|
const schema = new Schema("central", {
|
|
33
33
|
useFakeTimers: true,
|
|
34
34
|
useFakeServer: true,
|
|
@@ -40,13 +40,13 @@ const schema = new Schema("central", {
|
|
|
40
40
|
"central", "beta", "release", "esr" for WebExtensions, and "mail" for MailExtensions are available.
|
|
41
41
|
Channel defaults to "beta".
|
|
42
42
|
|
|
43
|
-
```
|
|
43
|
+
```javascript
|
|
44
44
|
const schema = new Schema("central");
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
Also, you can set it afterwards.
|
|
48
48
|
|
|
49
|
-
```
|
|
49
|
+
```javascript
|
|
50
50
|
const schema = new Schema();
|
|
51
51
|
schema.channel = "central";
|
|
52
52
|
```
|
|
@@ -59,12 +59,12 @@ schema.channel = "central";
|
|
|
59
59
|
Get the schema for the specific API.
|
|
60
60
|
Argument can be either an API name or a file name.
|
|
61
61
|
|
|
62
|
-
```
|
|
62
|
+
```javascript
|
|
63
63
|
const schema = new Schema().get("browserAction");
|
|
64
64
|
// [{namespace: "browserAction", events: [...], ...}]
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
```
|
|
67
|
+
```javascript
|
|
68
68
|
const schema = new Schema().get("browser_action.json");
|
|
69
69
|
// [{namespace: "browserAction", events: [...], ...}]
|
|
70
70
|
```
|
|
@@ -76,7 +76,7 @@ const schema = new Schema().get("browser_action.json");
|
|
|
76
76
|
Get all schemas as a single object.
|
|
77
77
|
Note that the key of the object is the file name and the value is the schema.
|
|
78
78
|
|
|
79
|
-
```
|
|
79
|
+
```javascript
|
|
80
80
|
const schema = new Schema().getAll();
|
|
81
81
|
// {"alarms.json": [{...}], "bookmarks.json": [{...}], ...}
|
|
82
82
|
```
|
|
@@ -87,7 +87,7 @@ const schema = new Schema().getAll();
|
|
|
87
87
|
|
|
88
88
|
Get the list of schema files.
|
|
89
89
|
|
|
90
|
-
```
|
|
90
|
+
```javascript
|
|
91
91
|
const list = new Schema().list();
|
|
92
92
|
// ["alarms.json", "bookmarks.json", ...]
|
|
93
93
|
```
|
|
@@ -105,18 +105,18 @@ Creates stubbed browser API.
|
|
|
105
105
|
|
|
106
106
|
See [Sinon.JS](https://sinonjs.org/) for details of sinon.sandbox.
|
|
107
107
|
|
|
108
|
-
```
|
|
108
|
+
```javascript
|
|
109
109
|
const browser = new Schema().mock();
|
|
110
110
|
|
|
111
111
|
// example of mocking runtime.connect()
|
|
112
|
-
const mockConnect = browser.runtime.connect.callsFake(({name}) => {
|
|
112
|
+
const mockConnect = browser.runtime.connect.callsFake(({ name }) => {
|
|
113
113
|
const port = Object.assign({}, browser.runtime.Port);
|
|
114
114
|
port.name = name;
|
|
115
115
|
return port;
|
|
116
116
|
});
|
|
117
117
|
|
|
118
|
-
const port1 = mockConnect({name: "foo"});
|
|
119
|
-
const port2 = mockConnect({name: "bar"});
|
|
118
|
+
const port1 = mockConnect({ name: "foo" });
|
|
119
|
+
const port2 = mockConnect({ name: "bar" });
|
|
120
120
|
assert.strictEqual(port1.name, "foo");
|
|
121
121
|
assert.isFunction(port1.onDisconnect.addListener);
|
|
122
122
|
assert.strictEqual(port2.name, "bar");
|
package/package.json
CHANGED
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
"types": "types/index.d.ts",
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@types/firefox-webext-browser": "^111.0.0",
|
|
17
|
-
"@types/node": "^18.
|
|
17
|
+
"@types/node": "^18.15.2",
|
|
18
18
|
"@types/sinon": "^10.0.13",
|
|
19
19
|
"camelize": "^1.0.1",
|
|
20
20
|
"commander": "^10.0.0",
|
|
21
21
|
"decamelize": "^6.0.0",
|
|
22
22
|
"json5": "^2.2.3",
|
|
23
|
-
"sinon": "^15.0.
|
|
23
|
+
"sinon": "^15.0.2"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"c8": "^7.13.0",
|
|
27
27
|
"chai": "^4.3.7",
|
|
28
|
-
"eslint": "^8.
|
|
28
|
+
"eslint": "^8.36.0",
|
|
29
29
|
"eslint-config-standard": "^17.0.0",
|
|
30
30
|
"eslint-plugin-import": "^2.27.5",
|
|
31
31
|
"eslint-plugin-jsdoc": "^40.0.1",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"mocha": "^10.2.0",
|
|
37
37
|
"npm-run-all": "^4.1.5",
|
|
38
38
|
"typescript": "^4.9.5",
|
|
39
|
-
"undici": "^5.
|
|
39
|
+
"undici": "^5.21.0"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
42
|
"build": "npm run tsc && npm run lint && npm run test",
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"update-mail": "node index update --channel=mail -i",
|
|
57
57
|
"update-release": "node index update --channel=release -i"
|
|
58
58
|
},
|
|
59
|
-
"version": "5.1.
|
|
59
|
+
"version": "5.1.10"
|
|
60
60
|
}
|
package/schemas/beta/webext.json
CHANGED
|
@@ -9721,13 +9721,24 @@
|
|
|
9721
9721
|
}
|
|
9722
9722
|
]
|
|
9723
9723
|
},
|
|
9724
|
+
{
|
|
9725
|
+
"$extend": "OptionalPermission",
|
|
9726
|
+
"choices": [
|
|
9727
|
+
{
|
|
9728
|
+
"type": "string",
|
|
9729
|
+
"enum": [
|
|
9730
|
+
"declarativeNetRequestFeedback"
|
|
9731
|
+
],
|
|
9732
|
+
"min_manifest_version": 3
|
|
9733
|
+
}
|
|
9734
|
+
]
|
|
9735
|
+
},
|
|
9724
9736
|
{
|
|
9725
9737
|
"$extend": "PermissionNoPrompt",
|
|
9726
9738
|
"choices": [
|
|
9727
9739
|
{
|
|
9728
9740
|
"type": "string",
|
|
9729
9741
|
"enum": [
|
|
9730
|
-
"declarativeNetRequestFeedback",
|
|
9731
9742
|
"declarativeNetRequestWithHostAccess"
|
|
9732
9743
|
],
|
|
9733
9744
|
"min_manifest_version": 3
|
|
@@ -9811,6 +9822,15 @@
|
|
|
9811
9822
|
"other"
|
|
9812
9823
|
]
|
|
9813
9824
|
},
|
|
9825
|
+
{
|
|
9826
|
+
"id": "UnsupportedRegexReason",
|
|
9827
|
+
"type": "string",
|
|
9828
|
+
"description": "Describes the reason why a given regular expression isn't supported.",
|
|
9829
|
+
"enum": [
|
|
9830
|
+
"syntaxError",
|
|
9831
|
+
"memoryLimitExceeded"
|
|
9832
|
+
]
|
|
9833
|
+
},
|
|
9814
9834
|
{
|
|
9815
9835
|
"id": "MatchedRule",
|
|
9816
9836
|
"type": "object",
|
|
@@ -10093,7 +10113,7 @@
|
|
|
10093
10113
|
"regexSubstitution": {
|
|
10094
10114
|
"type": "string",
|
|
10095
10115
|
"optional": true,
|
|
10096
|
-
"description": "
|
|
10116
|
+
"description": "Substitution pattern for rules which specify a 'regexFilter'. The first match of regexFilter within the url will be replaced with this pattern. Within regexSubstitution, backslash-escaped digits (\\1 to \\9) can be used to insert the corresponding capture groups. \\0 refers to the entire matching text."
|
|
10097
10117
|
}
|
|
10098
10118
|
}
|
|
10099
10119
|
},
|
|
@@ -10349,6 +10369,57 @@
|
|
|
10349
10369
|
}
|
|
10350
10370
|
]
|
|
10351
10371
|
},
|
|
10372
|
+
{
|
|
10373
|
+
"name": "isRegexSupported",
|
|
10374
|
+
"type": "function",
|
|
10375
|
+
"description": "Checks if the given regular expression will be supported as a 'regexFilter' rule condition.",
|
|
10376
|
+
"async": "callback",
|
|
10377
|
+
"parameters": [
|
|
10378
|
+
{
|
|
10379
|
+
"name": "regexOptions",
|
|
10380
|
+
"type": "object",
|
|
10381
|
+
"properties": {
|
|
10382
|
+
"regex": {
|
|
10383
|
+
"type": "string",
|
|
10384
|
+
"description": "The regular expresson to check."
|
|
10385
|
+
},
|
|
10386
|
+
"isCaseSensitive": {
|
|
10387
|
+
"type": "boolean",
|
|
10388
|
+
"optional": true,
|
|
10389
|
+
"description": "Whether the 'regex' specified is case sensitive.",
|
|
10390
|
+
"default": false
|
|
10391
|
+
},
|
|
10392
|
+
"requireCapturing": {
|
|
10393
|
+
"type": "boolean",
|
|
10394
|
+
"optional": true,
|
|
10395
|
+
"description": "Whether the 'regex' specified requires capturing. Capturing is only required for redirect rules which specify a 'regexSubstition' action.",
|
|
10396
|
+
"default": false
|
|
10397
|
+
}
|
|
10398
|
+
}
|
|
10399
|
+
},
|
|
10400
|
+
{
|
|
10401
|
+
"name": "callback",
|
|
10402
|
+
"type": "function",
|
|
10403
|
+
"parameters": [
|
|
10404
|
+
{
|
|
10405
|
+
"name": "result",
|
|
10406
|
+
"type": "object",
|
|
10407
|
+
"properties": {
|
|
10408
|
+
"isSupported": {
|
|
10409
|
+
"type": "boolean",
|
|
10410
|
+
"description": "Whether the given regex is supported"
|
|
10411
|
+
},
|
|
10412
|
+
"reason": {
|
|
10413
|
+
"$ref": "UnsupportedRegexReason",
|
|
10414
|
+
"optional": true,
|
|
10415
|
+
"description": "Specifies the reason why the regular expression is not supported. Only provided if 'isSupported' is false."
|
|
10416
|
+
}
|
|
10417
|
+
}
|
|
10418
|
+
}
|
|
10419
|
+
]
|
|
10420
|
+
}
|
|
10421
|
+
]
|
|
10422
|
+
},
|
|
10352
10423
|
{
|
|
10353
10424
|
"name": "testMatchOutcome",
|
|
10354
10425
|
"type": "function",
|
|
@@ -10447,6 +10518,10 @@
|
|
|
10447
10518
|
"type": "number",
|
|
10448
10519
|
"description": "The maximum number of dynamic and session rules an extension can add. NOTE: in the Firefox we are enforcing this limit to the session and dynamic rules count separately, instead of enforcing it to the rules count for both combined as the Chrome implementation does."
|
|
10449
10520
|
},
|
|
10521
|
+
"MAX_NUMBER_OF_REGEX_RULES": {
|
|
10522
|
+
"type": "number",
|
|
10523
|
+
"description": "The maximum number of regular expression rules that an extension can add. This limit is evaluated separately for the set of session rules, dynamic rules and those specified in the rule_resources file."
|
|
10524
|
+
},
|
|
10450
10525
|
"SESSION_RULESET_ID": {
|
|
10451
10526
|
"type": "string",
|
|
10452
10527
|
"value": "_session",
|
|
@@ -12415,7 +12490,7 @@
|
|
|
12415
12490
|
"mainthreadio",
|
|
12416
12491
|
"fileio",
|
|
12417
12492
|
"fileioall",
|
|
12418
|
-
"
|
|
12493
|
+
"nomarkerstacks",
|
|
12419
12494
|
"screenshots",
|
|
12420
12495
|
"seqstyle",
|
|
12421
12496
|
"stackwalk",
|
|
@@ -13572,6 +13647,14 @@
|
|
|
13572
13647
|
"$ref": "ExtensionURL"
|
|
13573
13648
|
}
|
|
13574
13649
|
},
|
|
13650
|
+
"type": {
|
|
13651
|
+
"optional": true,
|
|
13652
|
+
"type": "string",
|
|
13653
|
+
"enum": [
|
|
13654
|
+
"module",
|
|
13655
|
+
"classic"
|
|
13656
|
+
]
|
|
13657
|
+
},
|
|
13575
13658
|
"persistent": {
|
|
13576
13659
|
"optional": true,
|
|
13577
13660
|
"type": "boolean",
|
|
@@ -20148,6 +20231,26 @@
|
|
|
20148
20231
|
},
|
|
20149
20232
|
"description": "list of reasons that cause the request to be considered weak, if state is \"weak\"",
|
|
20150
20233
|
"optional": true
|
|
20234
|
+
},
|
|
20235
|
+
"usedEch": {
|
|
20236
|
+
"type": "boolean",
|
|
20237
|
+
"description": "True if the TLS connection used Encrypted Client Hello.",
|
|
20238
|
+
"optional": true
|
|
20239
|
+
},
|
|
20240
|
+
"usedDelegatedCredentials": {
|
|
20241
|
+
"type": "boolean",
|
|
20242
|
+
"description": "True if the TLS connection used Delegated Credentials.",
|
|
20243
|
+
"optional": true
|
|
20244
|
+
},
|
|
20245
|
+
"usedOcsp": {
|
|
20246
|
+
"type": "boolean",
|
|
20247
|
+
"description": "True if the TLS connection made OCSP requests.",
|
|
20248
|
+
"optional": true
|
|
20249
|
+
},
|
|
20250
|
+
"usedPrivateDns": {
|
|
20251
|
+
"type": "boolean",
|
|
20252
|
+
"description": "True if the TLS connection used a privacy-preserving DNS transport like DNS-over-HTTPS.",
|
|
20253
|
+
"optional": true
|
|
20151
20254
|
}
|
|
20152
20255
|
}
|
|
20153
20256
|
},
|
|
@@ -9822,6 +9822,15 @@
|
|
|
9822
9822
|
"other"
|
|
9823
9823
|
]
|
|
9824
9824
|
},
|
|
9825
|
+
{
|
|
9826
|
+
"id": "UnsupportedRegexReason",
|
|
9827
|
+
"type": "string",
|
|
9828
|
+
"description": "Describes the reason why a given regular expression isn't supported.",
|
|
9829
|
+
"enum": [
|
|
9830
|
+
"syntaxError",
|
|
9831
|
+
"memoryLimitExceeded"
|
|
9832
|
+
]
|
|
9833
|
+
},
|
|
9825
9834
|
{
|
|
9826
9835
|
"id": "MatchedRule",
|
|
9827
9836
|
"type": "object",
|
|
@@ -10104,7 +10113,7 @@
|
|
|
10104
10113
|
"regexSubstitution": {
|
|
10105
10114
|
"type": "string",
|
|
10106
10115
|
"optional": true,
|
|
10107
|
-
"description": "
|
|
10116
|
+
"description": "Substitution pattern for rules which specify a 'regexFilter'. The first match of regexFilter within the url will be replaced with this pattern. Within regexSubstitution, backslash-escaped digits (\\1 to \\9) can be used to insert the corresponding capture groups. \\0 refers to the entire matching text."
|
|
10108
10117
|
}
|
|
10109
10118
|
}
|
|
10110
10119
|
},
|
|
@@ -10360,6 +10369,57 @@
|
|
|
10360
10369
|
}
|
|
10361
10370
|
]
|
|
10362
10371
|
},
|
|
10372
|
+
{
|
|
10373
|
+
"name": "isRegexSupported",
|
|
10374
|
+
"type": "function",
|
|
10375
|
+
"description": "Checks if the given regular expression will be supported as a 'regexFilter' rule condition.",
|
|
10376
|
+
"async": "callback",
|
|
10377
|
+
"parameters": [
|
|
10378
|
+
{
|
|
10379
|
+
"name": "regexOptions",
|
|
10380
|
+
"type": "object",
|
|
10381
|
+
"properties": {
|
|
10382
|
+
"regex": {
|
|
10383
|
+
"type": "string",
|
|
10384
|
+
"description": "The regular expresson to check."
|
|
10385
|
+
},
|
|
10386
|
+
"isCaseSensitive": {
|
|
10387
|
+
"type": "boolean",
|
|
10388
|
+
"optional": true,
|
|
10389
|
+
"description": "Whether the 'regex' specified is case sensitive.",
|
|
10390
|
+
"default": false
|
|
10391
|
+
},
|
|
10392
|
+
"requireCapturing": {
|
|
10393
|
+
"type": "boolean",
|
|
10394
|
+
"optional": true,
|
|
10395
|
+
"description": "Whether the 'regex' specified requires capturing. Capturing is only required for redirect rules which specify a 'regexSubstition' action.",
|
|
10396
|
+
"default": false
|
|
10397
|
+
}
|
|
10398
|
+
}
|
|
10399
|
+
},
|
|
10400
|
+
{
|
|
10401
|
+
"name": "callback",
|
|
10402
|
+
"type": "function",
|
|
10403
|
+
"parameters": [
|
|
10404
|
+
{
|
|
10405
|
+
"name": "result",
|
|
10406
|
+
"type": "object",
|
|
10407
|
+
"properties": {
|
|
10408
|
+
"isSupported": {
|
|
10409
|
+
"type": "boolean",
|
|
10410
|
+
"description": "Whether the given regex is supported"
|
|
10411
|
+
},
|
|
10412
|
+
"reason": {
|
|
10413
|
+
"$ref": "UnsupportedRegexReason",
|
|
10414
|
+
"optional": true,
|
|
10415
|
+
"description": "Specifies the reason why the regular expression is not supported. Only provided if 'isSupported' is false."
|
|
10416
|
+
}
|
|
10417
|
+
}
|
|
10418
|
+
}
|
|
10419
|
+
]
|
|
10420
|
+
}
|
|
10421
|
+
]
|
|
10422
|
+
},
|
|
10363
10423
|
{
|
|
10364
10424
|
"name": "testMatchOutcome",
|
|
10365
10425
|
"type": "function",
|
|
@@ -10458,6 +10518,10 @@
|
|
|
10458
10518
|
"type": "number",
|
|
10459
10519
|
"description": "The maximum number of dynamic and session rules an extension can add. NOTE: in the Firefox we are enforcing this limit to the session and dynamic rules count separately, instead of enforcing it to the rules count for both combined as the Chrome implementation does."
|
|
10460
10520
|
},
|
|
10521
|
+
"MAX_NUMBER_OF_REGEX_RULES": {
|
|
10522
|
+
"type": "number",
|
|
10523
|
+
"description": "The maximum number of regular expression rules that an extension can add. This limit is evaluated separately for the set of session rules, dynamic rules and those specified in the rule_resources file."
|
|
10524
|
+
},
|
|
10461
10525
|
"SESSION_RULESET_ID": {
|
|
10462
10526
|
"type": "string",
|
|
10463
10527
|
"value": "_session",
|