@freedomofpress/webcat 0.0.0-stage → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +45 -0
- package/data/block.json +101 -0
- package/data/list.json +80 -0
- package/dist/hooks/content.js +1 -0
- package/dist/lib/browser/chrome.d.ts +86 -0
- package/dist/lib/browser/chrome.js +138 -0
- package/dist/lib/browser/kvstore.d.ts +70 -0
- package/dist/lib/browser/kvstore.js +241 -0
- package/dist/lib/browser/permissions.d.ts +113 -0
- package/dist/lib/browser/permissions.js +182 -0
- package/dist/lib/browser/requests.d.ts +145 -0
- package/dist/lib/browser/requests.js +292 -0
- package/dist/lib/browser/scripting.d.ts +19 -0
- package/dist/lib/browser/scripting.js +92 -0
- package/dist/lib/browser/sync.d.ts +68 -0
- package/dist/lib/browser/sync.js +114 -0
- package/dist/lib/browser/utils.d.ts +5 -0
- package/dist/lib/browser/utils.js +11 -0
- package/dist/lib/config.d.ts +45 -0
- package/dist/lib/config.js +45 -0
- package/dist/lib/validator_set.d.ts +4 -0
- package/dist/lib/validator_set.js +20 -0
- package/dist/lib/webcat/cache.d.ts +200 -0
- package/dist/lib/webcat/cache.js +308 -0
- package/dist/lib/webcat/canonicalize.d.ts +1 -0
- package/dist/lib/webcat/canonicalize.js +58 -0
- package/dist/lib/webcat/db.d.ts +30 -0
- package/dist/lib/webcat/db.js +131 -0
- package/dist/lib/webcat/encoding.d.ts +8 -0
- package/dist/lib/webcat/encoding.js +57 -0
- package/dist/lib/webcat/handler.d.ts +26 -0
- package/dist/lib/webcat/handler.js +419 -0
- package/dist/lib/webcat/hookbuilder.d.ts +47 -0
- package/dist/lib/webcat/hookbuilder.js +170 -0
- package/dist/lib/webcat/interfaces/bundle.d.ts +46 -0
- package/dist/lib/webcat/interfaces/bundle.js +8 -0
- package/dist/lib/webcat/interfaces/database.d.ts +68 -0
- package/dist/lib/webcat/interfaces/database.js +1 -0
- package/dist/lib/webcat/interfaces/errors.d.ts +451 -0
- package/dist/lib/webcat/interfaces/errors.js +109 -0
- package/dist/lib/webcat/interfaces/log.d.ts +14 -0
- package/dist/lib/webcat/interfaces/log.js +10 -0
- package/dist/lib/webcat/interfaces/originstate.d.ts +40 -0
- package/dist/lib/webcat/interfaces/originstate.js +1 -0
- package/dist/lib/webcat/interfaces/requeststate.d.ts +10 -0
- package/dist/lib/webcat/interfaces/requeststate.js +1 -0
- package/dist/lib/webcat/logger.d.ts +64 -0
- package/dist/lib/webcat/logger.js +112 -0
- package/dist/lib/webcat/originstate.d.ts +45 -0
- package/dist/lib/webcat/originstate.js +302 -0
- package/dist/lib/webcat/parsers.d.ts +21 -0
- package/dist/lib/webcat/parsers.js +36 -0
- package/dist/lib/webcat/request.d.ts +11 -0
- package/dist/lib/webcat/request.js +78 -0
- package/dist/lib/webcat/resources.d.ts +3 -0
- package/dist/lib/webcat/resources.js +41 -0
- package/dist/lib/webcat/response.d.ts +39 -0
- package/dist/lib/webcat/response.js +394 -0
- package/dist/lib/webcat/ui.d.ts +70 -0
- package/dist/lib/webcat/ui.js +282 -0
- package/dist/lib/webcat/updater.d.ts +115 -0
- package/dist/lib/webcat/updater.js +296 -0
- package/dist/lib/webcat/utils.d.ts +8 -0
- package/dist/lib/webcat/utils.js +74 -0
- package/dist/lib/webcat/validators.d.ts +16 -0
- package/dist/lib/webcat/validators.js +457 -0
- package/dist/lib/webcat.d.ts +11 -0
- package/dist/lib/webcat.js +130 -0
- package/icons/dark/webcat-error.SVG +1 -0
- package/icons/dark/webcat-ok.SVG +1 -0
- package/icons/dark/webcat.SVG +1 -0
- package/icons/light/webcat-error.SVG +1 -0
- package/icons/light/webcat-ok.SVG +1 -0
- package/icons/light/webcat.SVG +1 -0
- package/package.json +72 -4
- package/pages/error.css +9 -0
- package/pages/error.html +70 -0
- package/pages/error.js +51 -0
- package/pages/popup.css +16 -0
- package/pages/popup.html +14 -0
- package/pages/popup.js +48 -0
- package/README.md +0 -3
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error codes related to bundle fetching.
|
|
3
|
+
*/
|
|
4
|
+
export declare enum WebcatErrorFetch {
|
|
5
|
+
/**
|
|
6
|
+
* The {@link fetch} API call failed. Potential causes include network errors
|
|
7
|
+
* or misconfigured bundle paths.
|
|
8
|
+
*/
|
|
9
|
+
FETCH_ERROR = "ERR_WEBCAT_BUNDLE_FETCH_ERROR"
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Error codes related to bundle validation.
|
|
13
|
+
*/
|
|
14
|
+
export declare enum WebcatErrorBundle {
|
|
15
|
+
/** The bundle is invalid JSON. */
|
|
16
|
+
MALFORMED = "ERR_WEBCAT_BUNDLE_MALFORMED",
|
|
17
|
+
/** The bundle is missing the enrollment object. */
|
|
18
|
+
ENROLLMENT_MISSING = "ERR_WEBCAT_BUNDLE_MISSING_ENROLLMENT",
|
|
19
|
+
/** The bundle is missing the manifest object. */
|
|
20
|
+
MANIFEST_MISSING = "ERR_WEBCAT_BUNDLE_MISSING_MANIFEST",
|
|
21
|
+
/** The bundle is missing its signatures. */
|
|
22
|
+
SIGNATURES_MISSING = "ERR_WEBCAT_BUNDLE_MISSING_SIGNATURES"
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Error codes related to enrollment validation
|
|
26
|
+
*/
|
|
27
|
+
export declare enum WebcatErrorEnrollment {
|
|
28
|
+
/**
|
|
29
|
+
* The enrollment is not of one of the
|
|
30
|
+
* {@link EnrollmentTypes | supported enrollment types}.
|
|
31
|
+
*/
|
|
32
|
+
TYPE_INVALID = "ERR_WEBCAT_ENROLLMENT_TYPE_INVALID",
|
|
33
|
+
/**
|
|
34
|
+
* The enrollment object does not match its published hash.
|
|
35
|
+
*/
|
|
36
|
+
MISMATCH = "ERR_WEBCAT_ENROLLMENT_MISMATCH",
|
|
37
|
+
/**
|
|
38
|
+
* The policy on the enrollment does not match the expected format.
|
|
39
|
+
* Sigsum-specific.
|
|
40
|
+
*/
|
|
41
|
+
POLICY_MALFORMED = "ERR_WEBCAT_ENROLLMENT_POLICY_MALFORMED",
|
|
42
|
+
/**
|
|
43
|
+
* The policy on the enrollment is either empty or too long. Sigsum-specific.
|
|
44
|
+
*/
|
|
45
|
+
POLICY_LENGTH = "ERR_WEBCAT_ENROLLMENT_POLICY_LENGTH",
|
|
46
|
+
/**
|
|
47
|
+
* The value of the signers property is not an array. Sigsum-specific.
|
|
48
|
+
*/
|
|
49
|
+
SIGNERS_MALFORMED = "ERR_WEBCAT_ENROLLMENT_SIGNERS_MALFORMED",
|
|
50
|
+
/**
|
|
51
|
+
* The signers array is empty. Sigsum-specific.
|
|
52
|
+
*/
|
|
53
|
+
SIGNERS_EMPTY = "ERR_WEBCAT_ENROLLMENT_SIGNERS_EMPTY",
|
|
54
|
+
/**
|
|
55
|
+
* The signer keys are not in the expected format. Sigsum-specific.
|
|
56
|
+
*/
|
|
57
|
+
SIGNERS_KEY_MALFORMED = "ERR_WEBCAT_ENROLLMENT_SIGNERS_KEY_MALFORMED",
|
|
58
|
+
/**
|
|
59
|
+
* The signature threshold is not in the expected format. Sigsum-specific.
|
|
60
|
+
*/
|
|
61
|
+
THRESHOLD_MALFORMED = "ERR_WEBCAT_ENROLLMENT_THRESHOLD_MALFORMED",
|
|
62
|
+
/**
|
|
63
|
+
* The signers threshold is higher than the number of signers and, hence,
|
|
64
|
+
* unreachable. Sigsum-specific.
|
|
65
|
+
*/
|
|
66
|
+
THRESHOLD_IMPOSSIBLE = "ERR_WEBCAT_ENROLLMENT_THRESHOLD_IMPOSSIBLE",
|
|
67
|
+
/**
|
|
68
|
+
* The logs are not in the expected format. Sigsum-specific.
|
|
69
|
+
*/
|
|
70
|
+
LOGS_MALFORMED = "ERR_WEBCAT_ENROLLMENT_LOGS_MALFORMED",
|
|
71
|
+
/** The enrollment max age is not in the expected format. */
|
|
72
|
+
MAX_AGE_MALFORMED = "ERR_WEBCAT_ENROLLMENT_MAX_AGE_MALFORMED",
|
|
73
|
+
/**
|
|
74
|
+
* The enrollment is missing the trusted_root property. Sigstore-specific.
|
|
75
|
+
*/
|
|
76
|
+
TRUSTED_ROOT_MISSING = "ERR_WEBCAT_ENROLLMENT_TRUSTED_ROOT_MISSING",
|
|
77
|
+
/**
|
|
78
|
+
* The enrollment is missing the claims property. Sigstore-specific.
|
|
79
|
+
*/
|
|
80
|
+
CLAIMS_MISSING = "ERR_WEBCAT_ENROLLMENT_CLAIMS_MISSING",
|
|
81
|
+
/**
|
|
82
|
+
* The enrollment claims are not in the expected format. Sigstore-specific.
|
|
83
|
+
*/
|
|
84
|
+
CLAIMS_MALFORMED = "ERR_WEBCAT_ENROLLMENT_CLAIMS_MALFORMED",
|
|
85
|
+
/**
|
|
86
|
+
* The enrollment claims array is empty. Sigstore-specific.
|
|
87
|
+
*/
|
|
88
|
+
CLAIMS_EMPTY = "ERR_WEBCAT_ENROLLMENT_CLAIMS_EMPTY"
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Error codes related to manifest validation.
|
|
92
|
+
*/
|
|
93
|
+
export declare enum WebcatErrorManifest {
|
|
94
|
+
/**
|
|
95
|
+
* The manifest could not be verified against the signatures.
|
|
96
|
+
*/
|
|
97
|
+
VERIFY_FAILED = "ERR_WEBCAT_MANIFEST_VERIFY_FAILED",
|
|
98
|
+
/**
|
|
99
|
+
* The number of valid signatures did not satisfy the threshold specified on
|
|
100
|
+
* the enrollment. Sigsum-specific.
|
|
101
|
+
*/
|
|
102
|
+
THRESHOLD_UNSATISFIED = "ERR_WEBCAT_MANIFEST_THRESHOLD_UNSATISFIED",
|
|
103
|
+
/**
|
|
104
|
+
* The timestamp property is missing from the manifest. Sigsum-specific.
|
|
105
|
+
*/
|
|
106
|
+
TIMESTAMP_MISSING = "ERR_WEBCAT_MANIFEST_MISSING_TIMESTAMP",
|
|
107
|
+
/**
|
|
108
|
+
* The timestamp value could not be verified. Sigsum-specific.
|
|
109
|
+
*/
|
|
110
|
+
TIMESTAMP_VERIFY_FAILED = "ERR_WEBCAT_MANIFEST_TIMESTAMP_VERIFY_FAILED",
|
|
111
|
+
/**
|
|
112
|
+
* The manifest has expired.
|
|
113
|
+
*/
|
|
114
|
+
EXPIRED = "ERR_WEBCAT_MANIFEST_EXPIRED",
|
|
115
|
+
/**
|
|
116
|
+
* No file list is present on the manifest, or the file list is empty.
|
|
117
|
+
*/
|
|
118
|
+
FILES_MISSING = "ERR_WEBCAT_MANIFEST_FILES_MISSING",
|
|
119
|
+
/**
|
|
120
|
+
* A file hash is not in the expected format: the unpadded base64url
|
|
121
|
+
* encoding of a SHA-256 digest.
|
|
122
|
+
*/
|
|
123
|
+
FILES_MALFORMED = "ERR_WEBCAT_MANIFEST_FILES_MALFORMED",
|
|
124
|
+
/**
|
|
125
|
+
* No default index is present on the manifest.
|
|
126
|
+
*/
|
|
127
|
+
DEFAULT_INDEX_MISSING = "ERR_WEBCAT_MANIFEST_DEFAULT_INDEX_MISSING",
|
|
128
|
+
/**
|
|
129
|
+
* The default index does not match any file in the file list.
|
|
130
|
+
*/
|
|
131
|
+
DEFAULT_INDEX_MISSING_FILE = "ERR_WEBCAT_MANIFEST_DEFAULT_INDEX_MISSING_FILE",
|
|
132
|
+
/**
|
|
133
|
+
* No default fallback is present on the manifest.
|
|
134
|
+
*/
|
|
135
|
+
DEFAULT_FALLBACK_MISSING = "ERR_WEBCAT_MANIFEST_DEFAULT_FALLBACK_MISSING",
|
|
136
|
+
/**
|
|
137
|
+
* The default fallback does not match any file in the file list.
|
|
138
|
+
*/
|
|
139
|
+
DEFAULT_FALLBACK_MISSING_FILE = "ERR_WEBCAT_MANIFEST_DEFAULT_FALLBACK_MISSING_FILE",
|
|
140
|
+
/**
|
|
141
|
+
* No default CSP is present on the manifest.
|
|
142
|
+
*/
|
|
143
|
+
DEFAULT_CSP_MISSING = "ERR_WEBCAT_MANIFEST_DEFAULT_CSP_MISSING",
|
|
144
|
+
/**
|
|
145
|
+
* The default CSP is invalid. See {@link validateCSP}.
|
|
146
|
+
*/
|
|
147
|
+
DEFAULT_CSP_INVALID = "ERR_WEBCAT_MANIFEST_DEFAULT_CSP_INVALID",
|
|
148
|
+
/**
|
|
149
|
+
* An extra CSP is invalid. See {@link validateCSP}.
|
|
150
|
+
*/
|
|
151
|
+
EXTRA_CSP_INVALID = "ERR_WEBCAT_MANIFEST_EXTRA_CSP_INVALID",
|
|
152
|
+
/**
|
|
153
|
+
* The extra CSP object is not in the expected format.
|
|
154
|
+
*/
|
|
155
|
+
EXTRA_CSP_MALFORMED = "ERR_WEBCAT_MANIFEST_EXTRA_CSP_MALFORMED",
|
|
156
|
+
/**
|
|
157
|
+
* No wasm property is present on the manifest.
|
|
158
|
+
*/
|
|
159
|
+
WASM_MISSING = "ERR_WEBCAT_MANIFEST_WASM_MISSING"
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Error codes related to CSP validation.
|
|
163
|
+
*/
|
|
164
|
+
export declare enum WebcatErrorCSP {
|
|
165
|
+
/**
|
|
166
|
+
* The CSP returned by the server did not match any of the CSPs declared on
|
|
167
|
+
* the manifest.
|
|
168
|
+
*/
|
|
169
|
+
MISMATCH = "ERR_WEBCAT_CSP_MISMATCH"
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Error codes related to header validation.
|
|
173
|
+
*/
|
|
174
|
+
export declare enum WebcatErrorHeaders {
|
|
175
|
+
/**
|
|
176
|
+
* Response headers are unavailable for inspection.
|
|
177
|
+
*/
|
|
178
|
+
MISSING = "ERR_WEBCAT_HEADERS_MISSING",
|
|
179
|
+
/**
|
|
180
|
+
* A redirection to an external origin was attempted via a location header.
|
|
181
|
+
*/
|
|
182
|
+
LOCATION_EXTERNAL = "ERR_WEBCAT_HEADERS_LOCATION_EXTERNAL",
|
|
183
|
+
/**
|
|
184
|
+
* A subresource request was redirected via a location header.
|
|
185
|
+
*/
|
|
186
|
+
LOCATION_SUBRESOURCE = "ERR_WEBCAT_HEADERS_LOCATION_SUBRESOURCE",
|
|
187
|
+
/**
|
|
188
|
+
* The server returned a forbidden header.
|
|
189
|
+
*/
|
|
190
|
+
FORBIDDEN = "ERR_WEBCAT_HEADERS_FORBIDDEN",
|
|
191
|
+
/**
|
|
192
|
+
* The server returned a duplicate critical header.
|
|
193
|
+
*/
|
|
194
|
+
DUPLICATE = "ERR_WEBCAT_HEADERS_DUPLICATE",
|
|
195
|
+
/**
|
|
196
|
+
* A critical header was missing from the response.
|
|
197
|
+
*/
|
|
198
|
+
MISSING_CRITICAL = "ERR_WEBCAT_HEADERS_MISSING_CRITICAL",
|
|
199
|
+
/**
|
|
200
|
+
* An enrollment header did not match the expected format.
|
|
201
|
+
*/
|
|
202
|
+
ENROLLMENT_MALFORMED = "ERR_WEBCAT_HEADERS_ENROLLMENT_MALFORMED"
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Error codes related to request URL validation.
|
|
206
|
+
*/
|
|
207
|
+
export declare enum WebcatErrorURL {
|
|
208
|
+
/**
|
|
209
|
+
* A request was issued with an unsupported protocol or port.
|
|
210
|
+
*/
|
|
211
|
+
UNSUPPORTED = "ERR_WEBCAT_URL_UNSUPPORTED"
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Error codes related to file content validation.
|
|
215
|
+
*/
|
|
216
|
+
export declare enum WebcatErrorFile {
|
|
217
|
+
/**
|
|
218
|
+
* The file is not present on the manifest.
|
|
219
|
+
*/
|
|
220
|
+
MISSING = "ERR_WEBCAT_FILE_MISSING",
|
|
221
|
+
/**
|
|
222
|
+
* The file contents do not match the hash on the manifest.
|
|
223
|
+
*/
|
|
224
|
+
MISMATCH = "ERR_WEBCAT_FILE_MISMATCH"
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* All user-facing error codes.
|
|
228
|
+
*/
|
|
229
|
+
export declare const WebcatErrorCode: {
|
|
230
|
+
/** {@inheritDoc WebcatErrorFetch} */
|
|
231
|
+
readonly Fetch: {
|
|
232
|
+
/**
|
|
233
|
+
* The {@link fetch} API call failed. Potential causes include network errors
|
|
234
|
+
* or misconfigured bundle paths.
|
|
235
|
+
*/
|
|
236
|
+
readonly FETCH_ERROR: WebcatErrorFetch.FETCH_ERROR;
|
|
237
|
+
};
|
|
238
|
+
/** {@inheritDoc WebcatErrorBundle} */
|
|
239
|
+
readonly Bundle: {
|
|
240
|
+
/** The bundle is invalid JSON. */
|
|
241
|
+
readonly MALFORMED: WebcatErrorBundle.MALFORMED;
|
|
242
|
+
/** The bundle is missing the enrollment object. */
|
|
243
|
+
readonly ENROLLMENT_MISSING: WebcatErrorBundle.ENROLLMENT_MISSING;
|
|
244
|
+
/** The bundle is missing the manifest object. */
|
|
245
|
+
readonly MANIFEST_MISSING: WebcatErrorBundle.MANIFEST_MISSING;
|
|
246
|
+
/** The bundle is missing its signatures. */
|
|
247
|
+
readonly SIGNATURES_MISSING: WebcatErrorBundle.SIGNATURES_MISSING;
|
|
248
|
+
};
|
|
249
|
+
/** {@inheritDoc WebcatErrorEnrollment} */
|
|
250
|
+
readonly Enrollment: {
|
|
251
|
+
/**
|
|
252
|
+
* The enrollment is not of one of the
|
|
253
|
+
* {@link EnrollmentTypes | supported enrollment types}.
|
|
254
|
+
*/
|
|
255
|
+
readonly TYPE_INVALID: WebcatErrorEnrollment.TYPE_INVALID;
|
|
256
|
+
/**
|
|
257
|
+
* The enrollment object does not match its published hash.
|
|
258
|
+
*/
|
|
259
|
+
readonly MISMATCH: WebcatErrorEnrollment.MISMATCH;
|
|
260
|
+
/**
|
|
261
|
+
* The policy on the enrollment does not match the expected format.
|
|
262
|
+
* Sigsum-specific.
|
|
263
|
+
*/
|
|
264
|
+
readonly POLICY_MALFORMED: WebcatErrorEnrollment.POLICY_MALFORMED;
|
|
265
|
+
/**
|
|
266
|
+
* The policy on the enrollment is either empty or too long. Sigsum-specific.
|
|
267
|
+
*/
|
|
268
|
+
readonly POLICY_LENGTH: WebcatErrorEnrollment.POLICY_LENGTH;
|
|
269
|
+
/**
|
|
270
|
+
* The value of the signers property is not an array. Sigsum-specific.
|
|
271
|
+
*/
|
|
272
|
+
readonly SIGNERS_MALFORMED: WebcatErrorEnrollment.SIGNERS_MALFORMED;
|
|
273
|
+
/**
|
|
274
|
+
* The signers array is empty. Sigsum-specific.
|
|
275
|
+
*/
|
|
276
|
+
readonly SIGNERS_EMPTY: WebcatErrorEnrollment.SIGNERS_EMPTY;
|
|
277
|
+
/**
|
|
278
|
+
* The signer keys are not in the expected format. Sigsum-specific.
|
|
279
|
+
*/
|
|
280
|
+
readonly SIGNERS_KEY_MALFORMED: WebcatErrorEnrollment.SIGNERS_KEY_MALFORMED;
|
|
281
|
+
/**
|
|
282
|
+
* The signature threshold is not in the expected format. Sigsum-specific.
|
|
283
|
+
*/
|
|
284
|
+
readonly THRESHOLD_MALFORMED: WebcatErrorEnrollment.THRESHOLD_MALFORMED;
|
|
285
|
+
/**
|
|
286
|
+
* The signers threshold is higher than the number of signers and, hence,
|
|
287
|
+
* unreachable. Sigsum-specific.
|
|
288
|
+
*/
|
|
289
|
+
readonly THRESHOLD_IMPOSSIBLE: WebcatErrorEnrollment.THRESHOLD_IMPOSSIBLE;
|
|
290
|
+
/**
|
|
291
|
+
* The logs are not in the expected format. Sigsum-specific.
|
|
292
|
+
*/
|
|
293
|
+
readonly LOGS_MALFORMED: WebcatErrorEnrollment.LOGS_MALFORMED;
|
|
294
|
+
/** The enrollment max age is not in the expected format. */
|
|
295
|
+
readonly MAX_AGE_MALFORMED: WebcatErrorEnrollment.MAX_AGE_MALFORMED;
|
|
296
|
+
/**
|
|
297
|
+
* The enrollment is missing the trusted_root property. Sigstore-specific.
|
|
298
|
+
*/
|
|
299
|
+
readonly TRUSTED_ROOT_MISSING: WebcatErrorEnrollment.TRUSTED_ROOT_MISSING;
|
|
300
|
+
/**
|
|
301
|
+
* The enrollment is missing the claims property. Sigstore-specific.
|
|
302
|
+
*/
|
|
303
|
+
readonly CLAIMS_MISSING: WebcatErrorEnrollment.CLAIMS_MISSING;
|
|
304
|
+
/**
|
|
305
|
+
* The enrollment claims are not in the expected format. Sigstore-specific.
|
|
306
|
+
*/
|
|
307
|
+
readonly CLAIMS_MALFORMED: WebcatErrorEnrollment.CLAIMS_MALFORMED;
|
|
308
|
+
/**
|
|
309
|
+
* The enrollment claims array is empty. Sigstore-specific.
|
|
310
|
+
*/
|
|
311
|
+
readonly CLAIMS_EMPTY: WebcatErrorEnrollment.CLAIMS_EMPTY;
|
|
312
|
+
};
|
|
313
|
+
/** {@inheritDoc WebcatErrorManifest} */
|
|
314
|
+
readonly Manifest: {
|
|
315
|
+
/**
|
|
316
|
+
* The manifest could not be verified against the signatures.
|
|
317
|
+
*/
|
|
318
|
+
readonly VERIFY_FAILED: WebcatErrorManifest.VERIFY_FAILED;
|
|
319
|
+
/**
|
|
320
|
+
* The number of valid signatures did not satisfy the threshold specified on
|
|
321
|
+
* the enrollment. Sigsum-specific.
|
|
322
|
+
*/
|
|
323
|
+
readonly THRESHOLD_UNSATISFIED: WebcatErrorManifest.THRESHOLD_UNSATISFIED;
|
|
324
|
+
/**
|
|
325
|
+
* The timestamp property is missing from the manifest. Sigsum-specific.
|
|
326
|
+
*/
|
|
327
|
+
readonly TIMESTAMP_MISSING: WebcatErrorManifest.TIMESTAMP_MISSING;
|
|
328
|
+
/**
|
|
329
|
+
* The timestamp value could not be verified. Sigsum-specific.
|
|
330
|
+
*/
|
|
331
|
+
readonly TIMESTAMP_VERIFY_FAILED: WebcatErrorManifest.TIMESTAMP_VERIFY_FAILED;
|
|
332
|
+
/**
|
|
333
|
+
* The manifest has expired.
|
|
334
|
+
*/
|
|
335
|
+
readonly EXPIRED: WebcatErrorManifest.EXPIRED;
|
|
336
|
+
/**
|
|
337
|
+
* No file list is present on the manifest, or the file list is empty.
|
|
338
|
+
*/
|
|
339
|
+
readonly FILES_MISSING: WebcatErrorManifest.FILES_MISSING;
|
|
340
|
+
/**
|
|
341
|
+
* A file hash is not in the expected format: the unpadded base64url
|
|
342
|
+
* encoding of a SHA-256 digest.
|
|
343
|
+
*/
|
|
344
|
+
readonly FILES_MALFORMED: WebcatErrorManifest.FILES_MALFORMED;
|
|
345
|
+
/**
|
|
346
|
+
* No default index is present on the manifest.
|
|
347
|
+
*/
|
|
348
|
+
readonly DEFAULT_INDEX_MISSING: WebcatErrorManifest.DEFAULT_INDEX_MISSING;
|
|
349
|
+
/**
|
|
350
|
+
* The default index does not match any file in the file list.
|
|
351
|
+
*/
|
|
352
|
+
readonly DEFAULT_INDEX_MISSING_FILE: WebcatErrorManifest.DEFAULT_INDEX_MISSING_FILE;
|
|
353
|
+
/**
|
|
354
|
+
* No default fallback is present on the manifest.
|
|
355
|
+
*/
|
|
356
|
+
readonly DEFAULT_FALLBACK_MISSING: WebcatErrorManifest.DEFAULT_FALLBACK_MISSING;
|
|
357
|
+
/**
|
|
358
|
+
* The default fallback does not match any file in the file list.
|
|
359
|
+
*/
|
|
360
|
+
readonly DEFAULT_FALLBACK_MISSING_FILE: WebcatErrorManifest.DEFAULT_FALLBACK_MISSING_FILE;
|
|
361
|
+
/**
|
|
362
|
+
* No default CSP is present on the manifest.
|
|
363
|
+
*/
|
|
364
|
+
readonly DEFAULT_CSP_MISSING: WebcatErrorManifest.DEFAULT_CSP_MISSING;
|
|
365
|
+
/**
|
|
366
|
+
* The default CSP is invalid. See {@link validateCSP}.
|
|
367
|
+
*/
|
|
368
|
+
readonly DEFAULT_CSP_INVALID: WebcatErrorManifest.DEFAULT_CSP_INVALID;
|
|
369
|
+
/**
|
|
370
|
+
* An extra CSP is invalid. See {@link validateCSP}.
|
|
371
|
+
*/
|
|
372
|
+
readonly EXTRA_CSP_INVALID: WebcatErrorManifest.EXTRA_CSP_INVALID;
|
|
373
|
+
/**
|
|
374
|
+
* The extra CSP object is not in the expected format.
|
|
375
|
+
*/
|
|
376
|
+
readonly EXTRA_CSP_MALFORMED: WebcatErrorManifest.EXTRA_CSP_MALFORMED;
|
|
377
|
+
/**
|
|
378
|
+
* No wasm property is present on the manifest.
|
|
379
|
+
*/
|
|
380
|
+
readonly WASM_MISSING: WebcatErrorManifest.WASM_MISSING;
|
|
381
|
+
};
|
|
382
|
+
/** {@inheritDoc WebcatErrorCSP} */
|
|
383
|
+
readonly CSP: {
|
|
384
|
+
/**
|
|
385
|
+
* The CSP returned by the server did not match any of the CSPs declared on
|
|
386
|
+
* the manifest.
|
|
387
|
+
*/
|
|
388
|
+
readonly MISMATCH: WebcatErrorCSP.MISMATCH;
|
|
389
|
+
};
|
|
390
|
+
/** {@inheritDoc WebcatErrorHeaders} */
|
|
391
|
+
readonly Headers: {
|
|
392
|
+
/**
|
|
393
|
+
* Response headers are unavailable for inspection.
|
|
394
|
+
*/
|
|
395
|
+
readonly MISSING: WebcatErrorHeaders.MISSING;
|
|
396
|
+
/**
|
|
397
|
+
* A redirection to an external origin was attempted via a location header.
|
|
398
|
+
*/
|
|
399
|
+
readonly LOCATION_EXTERNAL: WebcatErrorHeaders.LOCATION_EXTERNAL;
|
|
400
|
+
/**
|
|
401
|
+
* A subresource request was redirected via a location header.
|
|
402
|
+
*/
|
|
403
|
+
readonly LOCATION_SUBRESOURCE: WebcatErrorHeaders.LOCATION_SUBRESOURCE;
|
|
404
|
+
/**
|
|
405
|
+
* The server returned a forbidden header.
|
|
406
|
+
*/
|
|
407
|
+
readonly FORBIDDEN: WebcatErrorHeaders.FORBIDDEN;
|
|
408
|
+
/**
|
|
409
|
+
* The server returned a duplicate critical header.
|
|
410
|
+
*/
|
|
411
|
+
readonly DUPLICATE: WebcatErrorHeaders.DUPLICATE;
|
|
412
|
+
/**
|
|
413
|
+
* A critical header was missing from the response.
|
|
414
|
+
*/
|
|
415
|
+
readonly MISSING_CRITICAL: WebcatErrorHeaders.MISSING_CRITICAL;
|
|
416
|
+
/**
|
|
417
|
+
* An enrollment header did not match the expected format.
|
|
418
|
+
*/
|
|
419
|
+
readonly ENROLLMENT_MALFORMED: WebcatErrorHeaders.ENROLLMENT_MALFORMED;
|
|
420
|
+
};
|
|
421
|
+
/** {@inheritDoc WebcatErrorURL} */
|
|
422
|
+
readonly URL: {
|
|
423
|
+
/**
|
|
424
|
+
* A request was issued with an unsupported protocol or port.
|
|
425
|
+
*/
|
|
426
|
+
readonly UNSUPPORTED: WebcatErrorURL.UNSUPPORTED;
|
|
427
|
+
};
|
|
428
|
+
/** {@inheritDoc WebcatErrorFile} */
|
|
429
|
+
readonly File: {
|
|
430
|
+
/**
|
|
431
|
+
* The file is not present on the manifest.
|
|
432
|
+
*/
|
|
433
|
+
readonly MISSING: WebcatErrorFile.MISSING;
|
|
434
|
+
/**
|
|
435
|
+
* The file contents do not match the hash on the manifest.
|
|
436
|
+
*/
|
|
437
|
+
readonly MISMATCH: WebcatErrorFile.MISMATCH;
|
|
438
|
+
};
|
|
439
|
+
};
|
|
440
|
+
/**
|
|
441
|
+
* Error code type.
|
|
442
|
+
*/
|
|
443
|
+
export type WebcatErrorCodeAny = WebcatErrorFetch | WebcatErrorBundle | WebcatErrorEnrollment | WebcatErrorManifest | WebcatErrorCSP | WebcatErrorHeaders | WebcatErrorURL | WebcatErrorFile;
|
|
444
|
+
/**
|
|
445
|
+
* Error class for user-facing errors.
|
|
446
|
+
*/
|
|
447
|
+
export declare class WebcatError extends Error {
|
|
448
|
+
readonly code: WebcatErrorCodeAny;
|
|
449
|
+
readonly details?: string[] | undefined;
|
|
450
|
+
constructor(code: WebcatErrorCodeAny, details?: string[] | undefined);
|
|
451
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
var WebcatErrorFetch = /* @__PURE__ */ ((WebcatErrorFetch2) => {
|
|
2
|
+
WebcatErrorFetch2["FETCH_ERROR"] = "ERR_WEBCAT_BUNDLE_FETCH_ERROR";
|
|
3
|
+
return WebcatErrorFetch2;
|
|
4
|
+
})(WebcatErrorFetch || {});
|
|
5
|
+
var WebcatErrorBundle = /* @__PURE__ */ ((WebcatErrorBundle2) => {
|
|
6
|
+
WebcatErrorBundle2["MALFORMED"] = "ERR_WEBCAT_BUNDLE_MALFORMED";
|
|
7
|
+
WebcatErrorBundle2["ENROLLMENT_MISSING"] = "ERR_WEBCAT_BUNDLE_MISSING_ENROLLMENT";
|
|
8
|
+
WebcatErrorBundle2["MANIFEST_MISSING"] = "ERR_WEBCAT_BUNDLE_MISSING_MANIFEST";
|
|
9
|
+
WebcatErrorBundle2["SIGNATURES_MISSING"] = "ERR_WEBCAT_BUNDLE_MISSING_SIGNATURES";
|
|
10
|
+
return WebcatErrorBundle2;
|
|
11
|
+
})(WebcatErrorBundle || {});
|
|
12
|
+
var WebcatErrorEnrollment = /* @__PURE__ */ ((WebcatErrorEnrollment2) => {
|
|
13
|
+
WebcatErrorEnrollment2["TYPE_INVALID"] = "ERR_WEBCAT_ENROLLMENT_TYPE_INVALID";
|
|
14
|
+
WebcatErrorEnrollment2["MISMATCH"] = "ERR_WEBCAT_ENROLLMENT_MISMATCH";
|
|
15
|
+
WebcatErrorEnrollment2["POLICY_MALFORMED"] = "ERR_WEBCAT_ENROLLMENT_POLICY_MALFORMED";
|
|
16
|
+
WebcatErrorEnrollment2["POLICY_LENGTH"] = "ERR_WEBCAT_ENROLLMENT_POLICY_LENGTH";
|
|
17
|
+
WebcatErrorEnrollment2["SIGNERS_MALFORMED"] = "ERR_WEBCAT_ENROLLMENT_SIGNERS_MALFORMED";
|
|
18
|
+
WebcatErrorEnrollment2["SIGNERS_EMPTY"] = "ERR_WEBCAT_ENROLLMENT_SIGNERS_EMPTY";
|
|
19
|
+
WebcatErrorEnrollment2["SIGNERS_KEY_MALFORMED"] = "ERR_WEBCAT_ENROLLMENT_SIGNERS_KEY_MALFORMED";
|
|
20
|
+
WebcatErrorEnrollment2["THRESHOLD_MALFORMED"] = "ERR_WEBCAT_ENROLLMENT_THRESHOLD_MALFORMED";
|
|
21
|
+
WebcatErrorEnrollment2["THRESHOLD_IMPOSSIBLE"] = "ERR_WEBCAT_ENROLLMENT_THRESHOLD_IMPOSSIBLE";
|
|
22
|
+
WebcatErrorEnrollment2["LOGS_MALFORMED"] = "ERR_WEBCAT_ENROLLMENT_LOGS_MALFORMED";
|
|
23
|
+
WebcatErrorEnrollment2["MAX_AGE_MALFORMED"] = "ERR_WEBCAT_ENROLLMENT_MAX_AGE_MALFORMED";
|
|
24
|
+
WebcatErrorEnrollment2["TRUSTED_ROOT_MISSING"] = "ERR_WEBCAT_ENROLLMENT_TRUSTED_ROOT_MISSING";
|
|
25
|
+
WebcatErrorEnrollment2["CLAIMS_MISSING"] = "ERR_WEBCAT_ENROLLMENT_CLAIMS_MISSING";
|
|
26
|
+
WebcatErrorEnrollment2["CLAIMS_MALFORMED"] = "ERR_WEBCAT_ENROLLMENT_CLAIMS_MALFORMED";
|
|
27
|
+
WebcatErrorEnrollment2["CLAIMS_EMPTY"] = "ERR_WEBCAT_ENROLLMENT_CLAIMS_EMPTY";
|
|
28
|
+
return WebcatErrorEnrollment2;
|
|
29
|
+
})(WebcatErrorEnrollment || {});
|
|
30
|
+
var WebcatErrorManifest = /* @__PURE__ */ ((WebcatErrorManifest2) => {
|
|
31
|
+
WebcatErrorManifest2["VERIFY_FAILED"] = "ERR_WEBCAT_MANIFEST_VERIFY_FAILED";
|
|
32
|
+
WebcatErrorManifest2["THRESHOLD_UNSATISFIED"] = "ERR_WEBCAT_MANIFEST_THRESHOLD_UNSATISFIED";
|
|
33
|
+
WebcatErrorManifest2["TIMESTAMP_MISSING"] = "ERR_WEBCAT_MANIFEST_MISSING_TIMESTAMP";
|
|
34
|
+
WebcatErrorManifest2["TIMESTAMP_VERIFY_FAILED"] = "ERR_WEBCAT_MANIFEST_TIMESTAMP_VERIFY_FAILED";
|
|
35
|
+
WebcatErrorManifest2["EXPIRED"] = "ERR_WEBCAT_MANIFEST_EXPIRED";
|
|
36
|
+
WebcatErrorManifest2["FILES_MISSING"] = "ERR_WEBCAT_MANIFEST_FILES_MISSING";
|
|
37
|
+
WebcatErrorManifest2["FILES_MALFORMED"] = "ERR_WEBCAT_MANIFEST_FILES_MALFORMED";
|
|
38
|
+
WebcatErrorManifest2["DEFAULT_INDEX_MISSING"] = "ERR_WEBCAT_MANIFEST_DEFAULT_INDEX_MISSING";
|
|
39
|
+
WebcatErrorManifest2["DEFAULT_INDEX_MISSING_FILE"] = "ERR_WEBCAT_MANIFEST_DEFAULT_INDEX_MISSING_FILE";
|
|
40
|
+
WebcatErrorManifest2["DEFAULT_FALLBACK_MISSING"] = "ERR_WEBCAT_MANIFEST_DEFAULT_FALLBACK_MISSING";
|
|
41
|
+
WebcatErrorManifest2["DEFAULT_FALLBACK_MISSING_FILE"] = "ERR_WEBCAT_MANIFEST_DEFAULT_FALLBACK_MISSING_FILE";
|
|
42
|
+
WebcatErrorManifest2["DEFAULT_CSP_MISSING"] = "ERR_WEBCAT_MANIFEST_DEFAULT_CSP_MISSING";
|
|
43
|
+
WebcatErrorManifest2["DEFAULT_CSP_INVALID"] = "ERR_WEBCAT_MANIFEST_DEFAULT_CSP_INVALID";
|
|
44
|
+
WebcatErrorManifest2["EXTRA_CSP_INVALID"] = "ERR_WEBCAT_MANIFEST_EXTRA_CSP_INVALID";
|
|
45
|
+
WebcatErrorManifest2["EXTRA_CSP_MALFORMED"] = "ERR_WEBCAT_MANIFEST_EXTRA_CSP_MALFORMED";
|
|
46
|
+
WebcatErrorManifest2["WASM_MISSING"] = "ERR_WEBCAT_MANIFEST_WASM_MISSING";
|
|
47
|
+
return WebcatErrorManifest2;
|
|
48
|
+
})(WebcatErrorManifest || {});
|
|
49
|
+
var WebcatErrorCSP = /* @__PURE__ */ ((WebcatErrorCSP2) => {
|
|
50
|
+
WebcatErrorCSP2["MISMATCH"] = "ERR_WEBCAT_CSP_MISMATCH";
|
|
51
|
+
return WebcatErrorCSP2;
|
|
52
|
+
})(WebcatErrorCSP || {});
|
|
53
|
+
var WebcatErrorHeaders = /* @__PURE__ */ ((WebcatErrorHeaders2) => {
|
|
54
|
+
WebcatErrorHeaders2["MISSING"] = "ERR_WEBCAT_HEADERS_MISSING";
|
|
55
|
+
WebcatErrorHeaders2["LOCATION_EXTERNAL"] = "ERR_WEBCAT_HEADERS_LOCATION_EXTERNAL";
|
|
56
|
+
WebcatErrorHeaders2["LOCATION_SUBRESOURCE"] = "ERR_WEBCAT_HEADERS_LOCATION_SUBRESOURCE";
|
|
57
|
+
WebcatErrorHeaders2["FORBIDDEN"] = "ERR_WEBCAT_HEADERS_FORBIDDEN";
|
|
58
|
+
WebcatErrorHeaders2["DUPLICATE"] = "ERR_WEBCAT_HEADERS_DUPLICATE";
|
|
59
|
+
WebcatErrorHeaders2["MISSING_CRITICAL"] = "ERR_WEBCAT_HEADERS_MISSING_CRITICAL";
|
|
60
|
+
WebcatErrorHeaders2["ENROLLMENT_MALFORMED"] = "ERR_WEBCAT_HEADERS_ENROLLMENT_MALFORMED";
|
|
61
|
+
return WebcatErrorHeaders2;
|
|
62
|
+
})(WebcatErrorHeaders || {});
|
|
63
|
+
var WebcatErrorURL = /* @__PURE__ */ ((WebcatErrorURL2) => {
|
|
64
|
+
WebcatErrorURL2["UNSUPPORTED"] = "ERR_WEBCAT_URL_UNSUPPORTED";
|
|
65
|
+
return WebcatErrorURL2;
|
|
66
|
+
})(WebcatErrorURL || {});
|
|
67
|
+
var WebcatErrorFile = /* @__PURE__ */ ((WebcatErrorFile2) => {
|
|
68
|
+
WebcatErrorFile2["MISSING"] = "ERR_WEBCAT_FILE_MISSING";
|
|
69
|
+
WebcatErrorFile2["MISMATCH"] = "ERR_WEBCAT_FILE_MISMATCH";
|
|
70
|
+
return WebcatErrorFile2;
|
|
71
|
+
})(WebcatErrorFile || {});
|
|
72
|
+
const WebcatErrorCode = {
|
|
73
|
+
/** {@inheritDoc WebcatErrorFetch} */
|
|
74
|
+
Fetch: { ...WebcatErrorFetch },
|
|
75
|
+
/** {@inheritDoc WebcatErrorBundle} */
|
|
76
|
+
Bundle: { ...WebcatErrorBundle },
|
|
77
|
+
/** {@inheritDoc WebcatErrorEnrollment} */
|
|
78
|
+
Enrollment: { ...WebcatErrorEnrollment },
|
|
79
|
+
/** {@inheritDoc WebcatErrorManifest} */
|
|
80
|
+
Manifest: { ...WebcatErrorManifest },
|
|
81
|
+
/** {@inheritDoc WebcatErrorCSP} */
|
|
82
|
+
CSP: { ...WebcatErrorCSP },
|
|
83
|
+
/** {@inheritDoc WebcatErrorHeaders} */
|
|
84
|
+
Headers: { ...WebcatErrorHeaders },
|
|
85
|
+
/** {@inheritDoc WebcatErrorURL} */
|
|
86
|
+
URL: { ...WebcatErrorURL },
|
|
87
|
+
/** {@inheritDoc WebcatErrorFile} */
|
|
88
|
+
File: { ...WebcatErrorFile }
|
|
89
|
+
};
|
|
90
|
+
class WebcatError extends Error {
|
|
91
|
+
constructor(code, details) {
|
|
92
|
+
super(code);
|
|
93
|
+
this.code = code;
|
|
94
|
+
this.details = details;
|
|
95
|
+
this.name = "WebcatError";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export {
|
|
99
|
+
WebcatError,
|
|
100
|
+
WebcatErrorBundle,
|
|
101
|
+
WebcatErrorCSP,
|
|
102
|
+
WebcatErrorCode,
|
|
103
|
+
WebcatErrorEnrollment,
|
|
104
|
+
WebcatErrorFetch,
|
|
105
|
+
WebcatErrorFile,
|
|
106
|
+
WebcatErrorHeaders,
|
|
107
|
+
WebcatErrorManifest,
|
|
108
|
+
WebcatErrorURL
|
|
109
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare enum LogType {
|
|
2
|
+
debug = "debug",
|
|
3
|
+
info = "info",
|
|
4
|
+
warning = "warning",
|
|
5
|
+
error = "error"
|
|
6
|
+
}
|
|
7
|
+
export interface LogEntry {
|
|
8
|
+
timestamp: Date;
|
|
9
|
+
tabId: number;
|
|
10
|
+
origin: string;
|
|
11
|
+
level: keyof Console;
|
|
12
|
+
message: string;
|
|
13
|
+
stack?: string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Enrollment, Manifest, SigstoreSignatures, SigsumSignatures } from "./bundle";
|
|
2
|
+
import { WebcatError } from "./errors";
|
|
3
|
+
export type CachePartition = {
|
|
4
|
+
firstParty: string;
|
|
5
|
+
incognito: boolean;
|
|
6
|
+
};
|
|
7
|
+
export type OriginStateObject = {
|
|
8
|
+
status: "verified_manifest";
|
|
9
|
+
enrollment_hash: string;
|
|
10
|
+
manifest: Manifest;
|
|
11
|
+
delegation?: string;
|
|
12
|
+
validUntil: number;
|
|
13
|
+
};
|
|
14
|
+
export interface OriginState {
|
|
15
|
+
readonly enrollment_hash: Uint8Array;
|
|
16
|
+
readonly enrollment?: Enrollment;
|
|
17
|
+
readonly manifest?: Manifest;
|
|
18
|
+
readonly delegation?: string;
|
|
19
|
+
readonly error?: WebcatError;
|
|
20
|
+
readonly validUntil?: number;
|
|
21
|
+
stale: boolean;
|
|
22
|
+
verifyEnrollment(enrollment?: Enrollment, delegation?: string): Promise<void>;
|
|
23
|
+
verifyManifest(manifest?: Manifest, signatures?: SigsumSignatures | SigstoreSignatures): Promise<void | number>;
|
|
24
|
+
verifyCSP(csp: string, pathname: string): boolean;
|
|
25
|
+
isRequestSent(): boolean;
|
|
26
|
+
isEnrollmentVerified(): this is OriginStateVerifiedEnrollment;
|
|
27
|
+
isManifestVerified(): this is OriginStateVerifiedManifest;
|
|
28
|
+
isFailed(): this is OriginStateFailed;
|
|
29
|
+
}
|
|
30
|
+
export type OriginStateVerifiedEnrollment = OriginState & {
|
|
31
|
+
enrollment: Enrollment;
|
|
32
|
+
};
|
|
33
|
+
export type OriginStateVerifiedManifest = OriginState & {
|
|
34
|
+
manifest: Manifest;
|
|
35
|
+
validUntil: number;
|
|
36
|
+
toPOJO(): OriginStateObject;
|
|
37
|
+
};
|
|
38
|
+
export type OriginStateFailed = OriginState & {
|
|
39
|
+
error: WebcatError;
|
|
40
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|