@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.
Files changed (56) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +11 -0
  3. package/dist/index.d.ts +12 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +220 -0
  6. package/dist/lib/c2pa.d.ts +32 -0
  7. package/dist/lib/c2pa.d.ts.map +1 -0
  8. package/dist/lib/error.d.ts +15 -0
  9. package/dist/lib/error.d.ts.map +1 -0
  10. package/dist/lib/reader.d.ts +41 -0
  11. package/dist/lib/reader.d.ts.map +1 -0
  12. package/dist/lib/settings.d.ts +27 -0
  13. package/dist/lib/settings.d.ts.map +1 -0
  14. package/dist/lib/supportedFormats.d.ts +11 -0
  15. package/dist/lib/supportedFormats.d.ts.map +1 -0
  16. package/dist/lib/worker/setupWorker.d.ts +26 -0
  17. package/dist/lib/worker/setupWorker.d.ts.map +1 -0
  18. package/dist/lib/worker/workerManager.d.ts +20 -0
  19. package/dist/lib/worker/workerManager.d.ts.map +1 -0
  20. package/dist/lib/worker/workerObjectMap.d.ts +14 -0
  21. package/dist/lib/worker/workerObjectMap.d.ts.map +1 -0
  22. package/dist/lib/worker/workerResponse.d.ts +16 -0
  23. package/dist/lib/worker/workerResponse.d.ts.map +1 -0
  24. package/dist/lib/worker.d.ts +13 -0
  25. package/dist/lib/worker.d.ts.map +1 -0
  26. package/dist/resources/c2pa_bg.wasm +0 -0
  27. package/eslint.config.mjs +30 -0
  28. package/package.json +26 -0
  29. package/project.json +7 -0
  30. package/src/index.ts +15 -0
  31. package/src/lib/c2pa.spec.ts +166 -0
  32. package/src/lib/c2pa.ts +65 -0
  33. package/src/lib/error.ts +26 -0
  34. package/src/lib/reader.ts +150 -0
  35. package/src/lib/settings.ts +52 -0
  36. package/src/lib/supportedFormats.ts +72 -0
  37. package/src/lib/worker/setupWorker.ts +53 -0
  38. package/src/lib/worker/workerManager.ts +64 -0
  39. package/src/lib/worker/workerObjectMap.ts +35 -0
  40. package/src/lib/worker/workerResponse.ts +50 -0
  41. package/src/lib/worker.ts +77 -0
  42. package/test/fixtures/assets/C_with_CAWG_data.jpg +0 -0
  43. package/test/fixtures/assets/C_with_CAWG_data.json +144 -0
  44. package/test/fixtures/assets/C_with_CAWG_data_thumbnail.jpg +0 -0
  45. package/test/fixtures/assets/C_with_CAWG_data_trusted.json +149 -0
  46. package/test/fixtures/assets/C_with_CAWG_data_untrusted.json +157 -0
  47. package/test/fixtures/assets/dash1.m4s +0 -0
  48. package/test/fixtures/assets/dashinit.json +184 -0
  49. package/test/fixtures/assets/dashinit.mp4 +0 -0
  50. package/test/fixtures/assets/no_alg.jpg +0 -0
  51. package/test/fixtures/trust/anchor-correct.pem +15 -0
  52. package/test/fixtures/trust/anchor-incorrect.pem +16 -0
  53. package/tsconfig.json +13 -0
  54. package/tsconfig.lib.json +29 -0
  55. package/tsconfig.spec.json +36 -0
  56. 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
@@ -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,13 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "files": [],
4
+ "include": [],
5
+ "references": [
6
+ {
7
+ "path": "./tsconfig.lib.json"
8
+ },
9
+ {
10
+ "path": "./tsconfig.spec.json"
11
+ }
12
+ ]
13
+ }
@@ -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
+ }