@contentauth/c2pa-web 0.1.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/CHANGELOG.md +12 -0
- package/README.md +11 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +220 -0
- package/dist/lib/c2pa.d.ts +32 -0
- package/dist/lib/c2pa.d.ts.map +1 -0
- package/dist/lib/error.d.ts +15 -0
- package/dist/lib/error.d.ts.map +1 -0
- package/dist/lib/reader.d.ts +41 -0
- package/dist/lib/reader.d.ts.map +1 -0
- package/dist/lib/settings.d.ts +27 -0
- package/dist/lib/settings.d.ts.map +1 -0
- package/dist/lib/supportedFormats.d.ts +11 -0
- package/dist/lib/supportedFormats.d.ts.map +1 -0
- package/dist/lib/worker/setupWorker.d.ts +26 -0
- package/dist/lib/worker/setupWorker.d.ts.map +1 -0
- package/dist/lib/worker/workerManager.d.ts +20 -0
- package/dist/lib/worker/workerManager.d.ts.map +1 -0
- package/dist/lib/worker/workerObjectMap.d.ts +14 -0
- package/dist/lib/worker/workerObjectMap.d.ts.map +1 -0
- package/dist/lib/worker/workerResponse.d.ts +16 -0
- package/dist/lib/worker/workerResponse.d.ts.map +1 -0
- package/dist/lib/worker.d.ts +13 -0
- package/dist/lib/worker.d.ts.map +1 -0
- package/dist/resources/c2pa_bg.wasm +0 -0
- package/eslint.config.mjs +30 -0
- package/package.json +26 -0
- package/project.json +7 -0
- package/src/index.ts +15 -0
- package/src/lib/c2pa.spec.ts +166 -0
- package/src/lib/c2pa.ts +65 -0
- package/src/lib/error.ts +26 -0
- package/src/lib/reader.ts +150 -0
- package/src/lib/settings.ts +52 -0
- package/src/lib/supportedFormats.ts +72 -0
- package/src/lib/worker/setupWorker.ts +53 -0
- package/src/lib/worker/workerManager.ts +64 -0
- package/src/lib/worker/workerObjectMap.ts +35 -0
- package/src/lib/worker/workerResponse.ts +50 -0
- package/src/lib/worker.ts +77 -0
- package/test/fixtures/assets/C_with_CAWG_data.jpg +0 -0
- package/test/fixtures/assets/C_with_CAWG_data.json +144 -0
- package/test/fixtures/assets/C_with_CAWG_data_thumbnail.jpg +0 -0
- package/test/fixtures/assets/C_with_CAWG_data_trusted.json +149 -0
- package/test/fixtures/assets/C_with_CAWG_data_untrusted.json +157 -0
- package/test/fixtures/assets/dash1.m4s +0 -0
- package/test/fixtures/assets/dashinit.json +184 -0
- package/test/fixtures/assets/dashinit.mp4 +0 -0
- package/test/fixtures/assets/no_alg.jpg +0 -0
- package/test/fixtures/trust/anchor-correct.pem +15 -0
- package/test/fixtures/trust/anchor-incorrect.pem +16 -0
- package/tsconfig.json +13 -0
- package/tsconfig.lib.json +29 -0
- package/tsconfig.spec.json +36 -0
- package/vite.config.ts +91 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
{
|
|
2
|
+
"active_manifest": "contoso:urn:uuid:FA0E000D-FA0E-000D-FA0E-000DFA0E000D",
|
|
3
|
+
"manifests": {
|
|
4
|
+
"contoso:urn:uuid:FA0E000D-FA0E-000D-FA0E-000DFA0E000D": {
|
|
5
|
+
"assertions": [
|
|
6
|
+
{
|
|
7
|
+
"data": {
|
|
8
|
+
"alg": "sha256",
|
|
9
|
+
"exclusions": [
|
|
10
|
+
{
|
|
11
|
+
"xpath": "/ftyp"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"data": [
|
|
15
|
+
{
|
|
16
|
+
"offset": 8,
|
|
17
|
+
"value": "2P7D1hsOSDySl1goh37EgQ=="
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"xpath": "/uuid"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"xpath": "/mfra"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"merkle": [
|
|
27
|
+
{
|
|
28
|
+
"alg": "sha256",
|
|
29
|
+
"count": 11,
|
|
30
|
+
"hashes": [
|
|
31
|
+
[
|
|
32
|
+
32,
|
|
33
|
+
27,
|
|
34
|
+
124,
|
|
35
|
+
253,
|
|
36
|
+
19,
|
|
37
|
+
16,
|
|
38
|
+
238,
|
|
39
|
+
99,
|
|
40
|
+
19,
|
|
41
|
+
245,
|
|
42
|
+
165,
|
|
43
|
+
233,
|
|
44
|
+
110,
|
|
45
|
+
225,
|
|
46
|
+
224,
|
|
47
|
+
222,
|
|
48
|
+
161,
|
|
49
|
+
102,
|
|
50
|
+
0,
|
|
51
|
+
71,
|
|
52
|
+
38,
|
|
53
|
+
206,
|
|
54
|
+
73,
|
|
55
|
+
77,
|
|
56
|
+
223,
|
|
57
|
+
1,
|
|
58
|
+
107,
|
|
59
|
+
162,
|
|
60
|
+
104,
|
|
61
|
+
32,
|
|
62
|
+
243,
|
|
63
|
+
9
|
|
64
|
+
],
|
|
65
|
+
[
|
|
66
|
+
192,
|
|
67
|
+
181,
|
|
68
|
+
181,
|
|
69
|
+
219,
|
|
70
|
+
136,
|
|
71
|
+
29,
|
|
72
|
+
104,
|
|
73
|
+
246,
|
|
74
|
+
176,
|
|
75
|
+
186,
|
|
76
|
+
209,
|
|
77
|
+
51,
|
|
78
|
+
55,
|
|
79
|
+
131,
|
|
80
|
+
205,
|
|
81
|
+
169,
|
|
82
|
+
239,
|
|
83
|
+
127,
|
|
84
|
+
116,
|
|
85
|
+
236,
|
|
86
|
+
64,
|
|
87
|
+
87,
|
|
88
|
+
223,
|
|
89
|
+
54,
|
|
90
|
+
112,
|
|
91
|
+
105,
|
|
92
|
+
28,
|
|
93
|
+
230,
|
|
94
|
+
157,
|
|
95
|
+
81,
|
|
96
|
+
34,
|
|
97
|
+
38
|
|
98
|
+
],
|
|
99
|
+
[
|
|
100
|
+
153,
|
|
101
|
+
235,
|
|
102
|
+
245,
|
|
103
|
+
57,
|
|
104
|
+
193,
|
|
105
|
+
14,
|
|
106
|
+
6,
|
|
107
|
+
251,
|
|
108
|
+
138,
|
|
109
|
+
167,
|
|
110
|
+
158,
|
|
111
|
+
186,
|
|
112
|
+
20,
|
|
113
|
+
9,
|
|
114
|
+
28,
|
|
115
|
+
207,
|
|
116
|
+
137,
|
|
117
|
+
31,
|
|
118
|
+
115,
|
|
119
|
+
195,
|
|
120
|
+
30,
|
|
121
|
+
109,
|
|
122
|
+
233,
|
|
123
|
+
70,
|
|
124
|
+
144,
|
|
125
|
+
84,
|
|
126
|
+
8,
|
|
127
|
+
59,
|
|
128
|
+
16,
|
|
129
|
+
37,
|
|
130
|
+
141,
|
|
131
|
+
201
|
|
132
|
+
]
|
|
133
|
+
],
|
|
134
|
+
"initHash": "I06fNAlptpr/4DcJZ/wIMRgd0bb6qygVCrodNQhhvbI=",
|
|
135
|
+
"localId": 1,
|
|
136
|
+
"uniqueId": 1
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
"label": "c2pa.hash.bmff.v2"
|
|
141
|
+
}
|
|
142
|
+
],
|
|
143
|
+
"claim_generator": "drmprovenancemanifestbuilder/1.0",
|
|
144
|
+
"claim_generator_info": [
|
|
145
|
+
{
|
|
146
|
+
"name": "Test provenance manaifest builder"
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"format": "video/mp4",
|
|
150
|
+
"ingredients": [],
|
|
151
|
+
"instance_id": "1.0",
|
|
152
|
+
"label": "contoso:urn:uuid:FA0E000D-FA0E-000D-FA0E-000DFA0E000D",
|
|
153
|
+
"signature_info": {
|
|
154
|
+
"alg": "Es256",
|
|
155
|
+
"cert_serial_number": "231582073800106855458784768030131201943489567163",
|
|
156
|
+
"issuer": "Media Publisher Company"
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"validation_results": {
|
|
161
|
+
"activeManifest": {
|
|
162
|
+
"failure": [],
|
|
163
|
+
"informational": [],
|
|
164
|
+
"success": [
|
|
165
|
+
{
|
|
166
|
+
"code": "claimSignature.insideValidity",
|
|
167
|
+
"explanation": "claim signature valid",
|
|
168
|
+
"url": "self#jumbf=/c2pa/contoso:urn:uuid:FA0E000D-FA0E-000D-FA0E-000DFA0E000D/c2pa.signature"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"code": "claimSignature.validated",
|
|
172
|
+
"explanation": "claim signature valid",
|
|
173
|
+
"url": "self#jumbf=/c2pa/contoso:urn:uuid:FA0E000D-FA0E-000D-FA0E-000DFA0E000D/c2pa.signature"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"code": "assertion.hashedURI.match",
|
|
177
|
+
"explanation": "hashed uri matched: self#jumbf=c2pa/contoso:urn:uuid:FA0E000D-FA0E-000D-FA0E-000DFA0E000D/c2pa.assertions/c2pa.hash.bmff.v2",
|
|
178
|
+
"url": "self#jumbf=c2pa/contoso:urn:uuid:FA0E000D-FA0E-000D-FA0E-000DFA0E000D/c2pa.assertions/c2pa.hash.bmff.v2"
|
|
179
|
+
}
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"validation_state": "Valid"
|
|
184
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIICUzCCAfmgAwIBAgIUdmkq4byvgk2FSnddHqB2yjoD68gwCgYIKoZIzj0EAwIw
|
|
3
|
+
dzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlTb21ld2hlcmUx
|
|
4
|
+
GjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBGT1IgVEVTVElO
|
|
5
|
+
R19PTkxZMRAwDgYDVQQDDAdSb290IENBMB4XDTIyMDYxMDE4NDY0MFoXDTMyMDYw
|
|
6
|
+
NzE4NDY0MFowdzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlT
|
|
7
|
+
b21ld2hlcmUxGjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBG
|
|
8
|
+
T1IgVEVTVElOR19PTkxZMRAwDgYDVQQDDAdSb290IENBMFkwEwYHKoZIzj0CAQYI
|
|
9
|
+
KoZIzj0DAQcDQgAEre/KpcWwGEHt+mD4xso3xotRnRx2IEsMoYwVIKI7iEJrDEye
|
|
10
|
+
PcvJuBywA0qiMw2yvAvGOzW/fqUTu1jABrFIk6NjMGEwHQYDVR0OBBYEFF6ZuIbh
|
|
11
|
+
eBvZVxVadQBStikOy6iMMB8GA1UdIwQYMBaAFF6ZuIbheBvZVxVadQBStikOy6iM
|
|
12
|
+
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA0gA
|
|
13
|
+
MEUCIHBC1xLwkCWSGhVXFlSnQBx9cGZivXzCbt8BuwRqPSUoAiEAteZQDk685yh9
|
|
14
|
+
jgOTkp4H8oAmM1As+qlkRK2b+CHAQ3k=
|
|
15
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIICkTCCAhagAwIBAgIUIngKvNC/BMF3TRIafgweprIbGgAwCgYIKoZIzj0EAwMw
|
|
3
|
+
dzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlTb21ld2hlcmUx
|
|
4
|
+
GjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBGT1IgVEVTVElO
|
|
5
|
+
R19PTkxZMRAwDgYDVQQDDAdSb290IENBMB4XDTIyMDYxMDE4NDY0MFoXDTMyMDYw
|
|
6
|
+
NzE4NDY0MFowdzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlT
|
|
7
|
+
b21ld2hlcmUxGjAYBgNVBAoMEUMyUEEgVGVzdCBSb290IENBMRkwFwYDVQQLDBBG
|
|
8
|
+
T1IgVEVTVElOR19PTkxZMRAwDgYDVQQDDAdSb290IENBMHYwEAYHKoZIzj0CAQYF
|
|
9
|
+
K4EEACIDYgAEX3FzSTnCcEAP3wteNaiy4GZzZ+ABd2Y7gJpfyZf3kkCuX/I3psFq
|
|
10
|
+
QBRvb3/FEBaDT4VbDNlZ0WLwtw5d3PI42Zufgpxemgfjf31d8H51eU3/IfAz5AFX
|
|
11
|
+
y/OarhObHgVvo2MwYTAdBgNVHQ4EFgQUe+FK5t6/bQGIcGY6kkeIKTX/bJ0wHwYD
|
|
12
|
+
VR0jBBgwFoAUe+FK5t6/bQGIcGY6kkeIKTX/bJ0wDwYDVR0TAQH/BAUwAwEB/zAO
|
|
13
|
+
BgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAPOgmJbVdhDh9KlgQXqE
|
|
14
|
+
FzHiCt347JG4strk22MXzOgxQ0LnXStIh+viC3S1INzuBgIxAI1jiUBX/V7Gg0y6
|
|
15
|
+
Y/p6a63Xp2w+ia7vlUaUBWsR3ex9NNSTPLNoDkoTCSDOE2O20w==
|
|
16
|
+
-----END CERTIFICATE-----
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"baseUrl": ".",
|
|
5
|
+
"rootDir": "src",
|
|
6
|
+
"outDir": "dist",
|
|
7
|
+
"tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo",
|
|
8
|
+
"emitDeclarationOnly": true,
|
|
9
|
+
"forceConsistentCasingInFileNames": true,
|
|
10
|
+
"types": ["vite/client"],
|
|
11
|
+
"lib": ["DOM", "ES2023"]
|
|
12
|
+
},
|
|
13
|
+
"include": ["src/**/*.ts"],
|
|
14
|
+
"references": [],
|
|
15
|
+
"exclude": [
|
|
16
|
+
"vite.config.ts",
|
|
17
|
+
"vite.config.mts",
|
|
18
|
+
"vitest.config.ts",
|
|
19
|
+
"vitest.config.mts",
|
|
20
|
+
"src/**/*.test.ts",
|
|
21
|
+
"src/**/*.spec.ts",
|
|
22
|
+
"src/**/*.test.tsx",
|
|
23
|
+
"src/**/*.spec.tsx",
|
|
24
|
+
"src/**/*.test.js",
|
|
25
|
+
"src/**/*.spec.js",
|
|
26
|
+
"src/**/*.test.jsx",
|
|
27
|
+
"src/**/*.spec.jsx"
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"outDir": "./out-tsc/vitest",
|
|
5
|
+
"types": [
|
|
6
|
+
"vitest/importMeta",
|
|
7
|
+
"vite/client",
|
|
8
|
+
"vitest",
|
|
9
|
+
"@vitest/browser/providers/playwright"
|
|
10
|
+
],
|
|
11
|
+
"lib": ["DOM", "ES2023"],
|
|
12
|
+
"forceConsistentCasingInFileNames": true,
|
|
13
|
+
"resolveJsonModule": true,
|
|
14
|
+
},
|
|
15
|
+
"include": [
|
|
16
|
+
"vite.config.ts",
|
|
17
|
+
"vite.config.mts",
|
|
18
|
+
"vitest.config.ts",
|
|
19
|
+
"vitest.config.mts",
|
|
20
|
+
"src/**/*.test.ts",
|
|
21
|
+
"src/**/*.spec.ts",
|
|
22
|
+
"src/**/*.test.tsx",
|
|
23
|
+
"src/**/*.spec.tsx",
|
|
24
|
+
"src/**/*.test.js",
|
|
25
|
+
"src/**/*.spec.js",
|
|
26
|
+
"src/**/*.test.jsx",
|
|
27
|
+
"src/**/*.spec.jsx",
|
|
28
|
+
"src/**/*.d.ts",
|
|
29
|
+
"test/**/*.json"
|
|
30
|
+
],
|
|
31
|
+
"references": [
|
|
32
|
+
{
|
|
33
|
+
"path": "./tsconfig.lib.json"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 Adobe
|
|
3
|
+
* All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* NOTICE: Adobe permits you to use, modify, and distribute this file in
|
|
6
|
+
* accordance with the terms of the Adobe license agreement accompanying
|
|
7
|
+
* it.
|
|
8
|
+
*/
|
|
9
|
+
import { defineConfig, Plugin } from 'vite';
|
|
10
|
+
import dts from 'vite-plugin-dts';
|
|
11
|
+
import { workspaceRoot } from '@nx/devkit';
|
|
12
|
+
import { rimrafSync } from 'rimraf';
|
|
13
|
+
import { join } from 'path';
|
|
14
|
+
import { mkdirSync, linkSync } from 'fs';
|
|
15
|
+
export default defineConfig(() => ({
|
|
16
|
+
root: __dirname,
|
|
17
|
+
cacheDir: '../../node_modules/.vite/packages/web',
|
|
18
|
+
plugins: [
|
|
19
|
+
dts({
|
|
20
|
+
entryRoot: 'src',
|
|
21
|
+
tsconfigPath: join(__dirname, 'tsconfig.lib.json'),
|
|
22
|
+
}),
|
|
23
|
+
createBuildPlugin(),
|
|
24
|
+
],
|
|
25
|
+
// Configuration for building your library.
|
|
26
|
+
// See: https://vitejs.dev/guide/build.html#library-mode
|
|
27
|
+
build: {
|
|
28
|
+
outDir: './dist',
|
|
29
|
+
emptyOutDir: false, // Done in our custom plugin so we can correctly create the "resources" folder
|
|
30
|
+
reportCompressedSize: true,
|
|
31
|
+
commonjsOptions: {
|
|
32
|
+
transformMixedEsModules: true,
|
|
33
|
+
},
|
|
34
|
+
lib: {
|
|
35
|
+
entry: 'src/index.ts',
|
|
36
|
+
name: '@contentauth/c2pa-web',
|
|
37
|
+
fileName: 'index',
|
|
38
|
+
// Change this to the formats you want to support.
|
|
39
|
+
// Don't forget to update your package.json as well.
|
|
40
|
+
formats: ['es' as const],
|
|
41
|
+
},
|
|
42
|
+
rollupOptions: {
|
|
43
|
+
// External packages that should not be bundled into your library.
|
|
44
|
+
external: [],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
server: {
|
|
48
|
+
fs: {
|
|
49
|
+
deny: [],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
test: {
|
|
53
|
+
watch: false,
|
|
54
|
+
include: ['{src,test}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
|
55
|
+
browser: {
|
|
56
|
+
headless: true,
|
|
57
|
+
enabled: true,
|
|
58
|
+
provider: 'playwright',
|
|
59
|
+
// https://vitest.dev/guide/browser/playwright
|
|
60
|
+
instances: [{ browser: 'chromium' }],
|
|
61
|
+
screenshotFailures: false,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
}));
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* This plugin has two responsibilities:
|
|
68
|
+
* 1. Clears the output directory (Vite's default emptyOutDir behavior will delete the files copied in step 2)
|
|
69
|
+
* 2. Links the WASM resources into the output directory so they can be packaged with the published library
|
|
70
|
+
*/
|
|
71
|
+
function createBuildPlugin(): Plugin {
|
|
72
|
+
return {
|
|
73
|
+
name: 'contentauth-web-build',
|
|
74
|
+
buildStart: () => {
|
|
75
|
+
const wasmPackageName = 'c2pa-wasm';
|
|
76
|
+
const wasmResourceName = 'c2pa_bg.wasm';
|
|
77
|
+
const wasmPackagePath = join(workspaceRoot, 'packages', wasmPackageName);
|
|
78
|
+
const wasmOutDir = join(wasmPackagePath, 'pkg');
|
|
79
|
+
const wasmResourcePath = join(wasmOutDir, wasmResourceName);
|
|
80
|
+
|
|
81
|
+
const pkgOutDir = join(__dirname, 'dist');
|
|
82
|
+
const pkgResourceDir = join(pkgOutDir, 'resources');
|
|
83
|
+
const pkgResourcePath = join(pkgResourceDir, wasmResourceName);
|
|
84
|
+
|
|
85
|
+
rimrafSync(pkgOutDir);
|
|
86
|
+
|
|
87
|
+
mkdirSync(pkgResourceDir, { recursive: true });
|
|
88
|
+
linkSync(wasmResourcePath, pkgResourcePath);
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|